<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>孤独的未知数</title><description>孤独的人, 孤独的做事</description><link>https://x-item.com/</link><language>zh_CN</language><item><title>英雄联盟音频文件整理计划——15.15</title><link>https://x-item.com/lol_voice_collation.html</link><guid isPermaLink="true">https://x-item.com/lol_voice_collation.html</guid><pubDate>Sat, 12 Jun 2021 18:35:32 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;书接上文，之前疫情在家萌生出一个想法，整理&lt;a href=&quot;https://x-item.com/lol_voice.html&quot;&gt;英雄台词文件&lt;/a&gt;. 但后续因人工校对工程量大、更新频繁等问题一直进度缓慢。 所以将其分割为两个计划，一、文件整理计划，二、音频“转写”计划。 计划一已经差不多了，后续按时更新即可，计划二需要小伙伴们一起协助完成。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;当前进度&lt;/h2&gt;
&lt;p&gt;由于游戏每半个月更新一次，虽然对一整年来说只更新24次，但每次都需要手动更新还是挺麻烦的。 涉及到游戏文件两次解包，还有音频文件与触发事件对应哈希要处理。
所以编写了一系列的脚本用来处理相关事件：&lt;/p&gt;
&lt;h3&gt;py-bnk-extract&lt;/h3&gt;
&lt;p&gt;这是一个音频文件解包的程序，英雄联盟使用Wwise来处理音频的，其打包后的文件就有wpk和bnk两种文件。 当前模块就是用来处理这些事件，提供事件文件还可以按照事件文件夹来解包。 整个模块编写参考 &lt;a href=&quot;https://github.com/Morilli/bnk-extract&quot;&gt;https://github.com/Morilli/bnk-extract&lt;/a&gt;,这里特别感谢原作者&lt;strong&gt;Morilli&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;简单梳理一下逻辑，英雄对应皮肤配置相关文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;data/characters/{champion}/skins/skin0.bin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其文件中包含音频触发事件，就是什么时候播放这个音频。 比如：有些英雄放个技能说一句话，看见谁说什么话。 从中提取出发事件以及其哈希值，也就是对应ID.&lt;/p&gt;
&lt;p&gt;再从wpk或bnk中获取音频相关信息， 根据上一步获取的哈希值对应分类解包。 不提供事件的话就直接解包不分类罢了。&lt;/p&gt;
&lt;h3&gt;lol_extract_voice&lt;/h3&gt;
&lt;p&gt;这个就是批量操作了，正常我们提取语音，是需要解包wad,找到bnk、wpk再进行解包. 如果需要时事件, 还需要处理皮肤bin文件。 这个包就是将所有带有音频文件wad,将其中bnk、wpk文件以及皮肤bin文件解包, 再使用上述包处理成wav或是其他格式文件。&lt;/p&gt;
&lt;p&gt;当前这个代码也有些许问题，只能解包本地游戏文件、没有对旧版本游戏进行支持。 旧版文件这个因为目前没有这个需求，所以没动力去做这件事。 而前者早就优化了，但是并没有在这个仓库中体现。 因为设计一些接口怕被滥用，所以单独私有仓库更新。 前段时间写的&lt;a href=&quot;https://x-item.com/termux.html&quot;&gt;安卓Termux介绍的&lt;/a&gt;文章，这个脚本就在手机上跑。&lt;/p&gt;
&lt;p&gt;整个逻辑就是先根据拳头的cdn获取新版游戏文件，完成后再进行上述操作。 对于获取新版文件这部分很繁琐，有兴趣可以去GitHub上开源仓库&lt;a href=&quot;https://github.com/CommunityDragon/CDTB&quot;&gt;https://github.com/CommunityDragon/CDTB&lt;/a&gt;, wad解包部分也参考了不少这个仓库。&lt;/p&gt;
&lt;h3&gt;Gitvoice(暂定)&lt;/h3&gt;
&lt;p&gt;这是我和&lt;a href=&quot;https://modty.gitee.io/&quot;&gt;点木&lt;/a&gt;发起的一个“组织”，这个仓库用来存放英雄音频文件，这些文件用于网站试听。 点木之前也一直在做类似的网站: &lt;a href=&quot;https://lol.modty.top/&quot;&gt;https://lol.modty.top/&lt;/a&gt;,现在也在更新。 但目前所有资源均存放在服务器中，这种资源如果没有限制被打网站就挂了。 所以为后续考虑将资源暂定放在GitHub用jsdelivr进行cdn加速。&lt;/p&gt;
&lt;p&gt;虽然这么做违反了jsdelivr规定(做这类资源cdn),先试试。 不行再考虑其他，例如onedrive。 在GitHub中有一点好处就是，可以单独管理指定英雄，如果以后组织人多，可以1个人处理几个甚至一个仓库进行更新。 可以单独管理英雄仓库进行更新，后续发展可能更好吧（理想状态）。&lt;/p&gt;
&lt;p&gt;目前该仓库已经上传了一版音频文件，考虑到后续如果有小伙伴想和我们一起玩，使用国内的仓库(coding.net)进行管理资源，然后使用GitHub Action或是coding的持续集成进行仓库同步，这样在本地管理时不会出现同步仓库时GitHub无法访问的问题。&lt;/p&gt;
&lt;h3&gt;试听网站&lt;/h3&gt;
&lt;p&gt;根据Gitvoice整理的文件，做出了第一版的试听站。 事件用关键词替换成中文了，大部分语法顺序都是不对的，但是可以看懂。 因为是用脚本批量替换，所以肯定有和原事件不符的。 这部分还没有一个完善的反馈计划，还在打磨中。&lt;/p&gt;
&lt;h2&gt;资源&lt;/h2&gt;
&lt;h3&gt;下载说明&lt;/h3&gt;
&lt;p&gt;2025年8月7日，只更新英雄的语音文件，改用wem格式+提供解码方式，减少网络传输。网盘都分享不了，所以只能去&lt;a href=&quot;https://alist.x-item.com/189/&quot;&gt;https://alist.x-item.com/189/&lt;/a&gt;下载&lt;/p&gt;
&lt;p&gt;:::note
&lt;strong&gt;2022年3月6日&lt;/strong&gt; 文件更改为自解压文件，格式为exe，为了兼容阿里云盘分享格式。下载前请看云盘中文档，最好不要直接双击打开。
:::&lt;/p&gt;
&lt;p&gt;:::note
&lt;strong&gt;2022年8月29日&lt;/strong&gt; 更新了文件名规范，更方便查询。从原来的 “版本-音频类型-英雄名字·英雄ID“ 为英雄名称·英雄ID-音频类型-版本”。
:::&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onedrive&lt;/strong&gt;是利用其网盘搭建的一个分享站，但是是有访问频率限制的。如果打开出现&lt;strong&gt;xxx限制&lt;/strong&gt;字样，说明访问量已经到达官方限制，次天会完全恢复，如果遇到相关问题，可以等待或使用其他方法下载。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解压密码&lt;/strong&gt;请关注B站ID：Virace，https://space.bilibili.com/12353537。并私信“英雄联盟音频”即可获取。&lt;/p&gt;
&lt;h3&gt;更新日志&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2025年8月7日—— 15.5&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;2023年4月16日 —— 13.8&lt;/li&gt;
&lt;li&gt;2022年11月11日 —— 12.22&lt;/li&gt;
&lt;li&gt;2022年08月29日 —— 12.17&lt;/li&gt;
&lt;li&gt;2022年06月09日 —— 12.11&lt;/li&gt;
&lt;li&gt;2022年03月06日 —— 12.6&lt;/li&gt;
&lt;li&gt;2021年06月13日 —— 11.20&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;下载地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;主站：&lt;a href=&quot;https://alist.x-item.com/League%20of%20legends&quot;&gt;https://alist.x-item.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;主站包含天翼云盘(189)、123盘、阿里云的下载链接，因为这三个盘要么是不支持分享压缩包，要么是不支持分享带密码的压缩包，所以主站其实就是解析站，哪个能下载就下哪个。极有可能网盘会抽风无法下载，可以换个时间再尝试，因为目前真的没有好的办法分享，直接使用网盘分享未知原因压缩包都会和谐。&lt;/p&gt;
&lt;p&gt;后续会选择性更新，可能是目前最全的合集了，除游戏大厅那些按钮音效等，其余游戏所有音频全部包含。 游戏内的音效也是用事件文件夹分好类了。&lt;/p&gt;
&lt;p&gt;但是文件名还是以ID形式存在，并不是实际台词。 那就是之前那个计划了：&lt;a href=&quot;https://x-item.com/lol_voice.html&quot;&gt;英雄联盟英雄台词语音音频文件整理&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;处理几个仓库，以及编写更新脚本花了大量的时间。 希望因为这个更多视频作者可以获益吧~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>耗时一个月，国产40寸5K2K显示器吐槽</title><link>https://x-item.com/monitor-talk-40.html</link><guid isPermaLink="true">https://x-item.com/monitor-talk-40.html</guid><pubDate>Sun, 23 Nov 2025 17:43:52 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;为何突然买显示器，是因为手里这个微星 PS341WU 坏了，面板损坏，过保就坏。想着说维修，官方没配件，第三方1500~1800，还保不了多长时间。 再搜同款类似的34寸5K2K的，都比较贵，一问才知道这个面板没多少了，所以就都贵。
以下都是一个非专业消费者的直观体验，纯主观。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;40寸&lt;/h2&gt;
&lt;p&gt;因为就喜欢这个分辨率(5120x2160)，比正常的4K多出一条，这样可以保证16:9的分辨率，剩余的地方放点别的东西。B站上搜索之后发现有一款显示器是这个分辨率只不过是40寸，当搜索条件放到40寸的时候选择就比较多了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/01/06/zbP7A6npJcsyMhU.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;对比&lt;/h2&gt;
&lt;p&gt;发现国产这些品牌，还都有做这这种。虽然戴尔4025QW发布的比较早，但是国产似乎用同样的面板发售的更早。经过一段时间搜索，确定了两个品牌，一个是&lt;strong&gt;星华辰UP40R2&lt;/strong&gt;，另一个是&lt;strong&gt;川升CS40X&lt;/strong&gt;。而今天还有一款是无意间发现的&lt;strong&gt;联合创新40C1U&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/01/06/YeUvGdptSk8K9Do.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;因为除了联合创新其余三款面板都是同一款，所以基础参数都已一样，但是参数一样体验可不代表一样。联合创新是在这个尺寸中为数不多的直屏。&lt;/p&gt;
&lt;p&gt;只讲体验结论就是根本没法比，戴尔毕竟1w2呢，第三方也要9700块呢。具体详细参数可以看下官网的参数 &lt;a href=&quot;https://www.dell.com/zh-cn/shop/%E6%88%B4%E5%B0%94-ultrasharp-40-%E6%9B%B2%E9%9D%A2-thunderbolt-hub-%E6%98%BE%E7%A4%BA%E5%99%A8-u4025qw/apd/210-bmhw/%E6%88%B4%E5%B0%94%E6%98%BE%E7%A4%BA%E5%99%A8&quot;&gt;https://www.dell.com/zh-cn/shop/%E6%88%B4%E5%B0%94-ultrasharp-40-%E6%9B%B2%E9%9D%A2-thunderbolt-hub-%E6%98%BE%E7%A4%BA%E5%99%A8-u4025qw/apd/210-bmhw/%E6%88%B4%E5%B0%94%E6%98%BE%E7%A4%BA%E5%99%A8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;扩展性就碾压，&lt;strong&gt;5个Type-C&lt;/strong&gt;接口，其中一个是雷电4下行用于菊花链，支持15w充电，一个雷电4上行，支持140w充电，其余所有都是USB 3.2 GEN2，最高10Gbps速率。 还有&lt;strong&gt;4个USB-A&lt;/strong&gt;接口同样都是USB 3.2 GEN2。甚至还有一个&lt;strong&gt;2.5G&lt;/strong&gt;的网口。 这给mac直接用省个HUB不过分吧。&lt;/p&gt;
&lt;p&gt;扩展性和驱动板挂钩，国产想省成本，显示器就这几样东西，面板、驱动板、外壳、支架。驱动板出了额外的扩展性，那就是OSD的功能了，国产不用想没有软件支持，都是显示器自带的OSD，星华辰的这款是最反人类的，上下左右按钮哪哪都不对。 其次是川升，这三款最好的就是联合创新了。外观上就比其他两款要好很多。&lt;/p&gt;
&lt;p&gt;面板就拿品质差一点的呗，戴尔有卓越面板肯定是特挑，国产纯抽奖，这点接下来要讲的连续的退换货中可以体现，问题从小到大的都有。除了联合创新用的是&lt;strong&gt;京东方&lt;/strong&gt;的面板之外，其余都是LG同一款型号的面板。 联合创新的说的京东方面板在屏库中没有查到，屏库中京东方没有这个尺寸这个分辨率的面板。因为遇到一些问题，觉得是可视角度问题导致的色偏，所以直接售后了没有去研究具体面板型号。&lt;/p&gt;
&lt;p&gt;外壳与之家，质感最差的就是星华辰，黑色公模，质感很差，其次是川升，虽然上手质感也一般，但是不同于星华辰的三角支架，是底部平板的。  最好的还是联合创新，全铝合金，没有一点塑料，很沉。&lt;/p&gt;
&lt;h2&gt;购买过程&lt;/h2&gt;
&lt;p&gt;戴尔的售后不用多说了吧，国内戴尔虽然说有问题他们就换，但是一些问题上也需要扯皮。 但是整体上来说还是不错的。&lt;/p&gt;
&lt;p&gt;以下是购买日期：
12月9号  PDD星华辰显示器 UP40R2 2600
12月12号 抖音联合创新 40C1U 3500
12月16号 PDD川升显示器 CS40X 2806
12月22号 抖音川升显示器 CS40X 2588
12月26号 抖音川升显示器 CS40X  2888&lt;/p&gt;
&lt;p&gt;首先解释下为什么会在PDD和抖音购买，最开始搜索还是在淘宝搜的，国产屏除了联合创新是有京东自营的，但是当时这个型号没货。其他的都是第三方店铺，要不然就首选京东自营了。&lt;/p&gt;
&lt;p&gt;淘宝的官方，我想不用我多说，体验不能说很差也只能说垃圾。这就不提了，PDD和抖音至少在官方客服这面表面把你当人了。就这一点就够了，12号购买的联合创新，他有一个“晚发即赔”，13号没有发货，赔付自动打到支付宝了，之间没有和客服有过任何申请、沟通。淘宝会有么？你不说他不会提的，还给你主动赔付？PDD更不说了一个仅退款搞得卖家怨声载道。&lt;/p&gt;
&lt;h3&gt;问题&lt;/h3&gt;
&lt;p&gt;星华辰UP40R2，问题最大，唯一一个面板漏光导致严重色偏的。 大面积坏点(黑色下显示红色)。OSD按键逻辑非常反人类。&lt;/p&gt;
&lt;p&gt;联合创新40C1U，亮度很低，虽然说是IPS屏幕，但是可视角度很差，推测小于160°(根据眼睛与屏幕之间距离以及色偏位置估算)。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/01/06/O36dLP2DmHtMJWv.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;这图是ChatGPT生成的，具体数据仅供参考，我也没细看对不对，大概就是这个意思。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;PDD川升，包完美屏，发来有坏点，超过5个，无其余问题，漏光问题也很小。&lt;/p&gt;
&lt;p&gt;抖音川升，包完美屏，这个是最搞笑的，首先logo就是歪的，并不是设计。而且面板发黄发绿很严重。群友推测说是老化屏，但是因为这个面板太新了，不能刚出1年左右就有这种屏幕出现吧。&lt;/p&gt;
&lt;h3&gt;售后&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PDD的星华辰&lt;/strong&gt;，觉得漏光不是问题，即便是黑色变成了灰色，在他们那也不是质量问题，这个购买前注意下，如果遇到问题可能容易扯皮。 退回需要自己找快递，顺丰个人不收32寸以上的显示器，需要选择空运或者企业用户。最终找的是德邦快递发走的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;抖音联合创新&lt;/strong&gt;，没有任何扯皮，色偏的问题发给客服就建议你退货过着换货了，而且他这个抖音店铺有运费险，保额比较高，顺丰上门直接取走，期间没有任何扯皮的废话。只是他收到货之后让你帮忙修改一下退款理由，改成无理由退货，那么咨询了抖音官方客服，可以改因为卖家同意退货也没有运费纠纷，改了只是能保住店铺分而已，因为整体体验很好就直接改了，后续也没有扯皮。 这单甚至给了不少补偿，因为店铺有晚发即赔，第二天没发货，抖音直接赔付，没有任何申请，支付宝直接受到打款了，一查是赔付。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PDD川升&lt;/strong&gt;也没有什么扯皮，甚至客服还很不好意思，说要不先给我发一个，等到了之后再把手里的退回来。最终是他们叫的上门取件，中间也没有任何费用。 但是看到抖音官方有哪个双旦的活动还能便宜，最终就在抖音下单了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;抖音川升&lt;/strong&gt;售后没有PDD川升那么好，他们没提先给我发，换货要等他们收到再发。 我提出再拍一单，但后新订单退款发旧商品。 他们同意了，也是他们找快递上门，但是不清楚抖音川升是死心眼还是这么操作能省钱，他们要等到新订单物流确认收获后才能上门取件，这么操作能在原物流中看到退回记录。  这种属于是原订单退回，并不是重新下单。 没咨询顺丰有什么区别，但是浪费的是自己的时间。  想着是顺丰来取件的当天，旧的就取走，但是当天没取走等到第二天的。  也不清楚他们是怎么操作的，让顺丰普通快递员两次来取件，因为他们取不走，但是单子派给他们了，就得来。  整体浪费了很多时间。&lt;/p&gt;
&lt;p&gt;联合创新是最可惜的，整体除了面板问题其余体验都是最好的，能看出来都不是公模(主观感觉)，包括外包装在内的所有配件都是有自己品牌logo的。  其他两款都是共模，包括什么说明书之类的，3C认证什么都没有。 但是主打一个便宜。&lt;/p&gt;
&lt;h2&gt;体验&lt;/h2&gt;
&lt;p&gt;总的来说就屏幕素质来说，如果面板都是同款面板而且到你手里的不是残次品，那么体验上差距不是很大，毕竟基本素质在这，细节区别可能在于调色等一些驱动板提供的东西上。&lt;/p&gt;
&lt;p&gt;再有就是40寸这种大尺寸的，建议还是曲面，尤其这种曲度不高的，对于用惯了直屏的我来说接受度还是比较高的。&lt;/p&gt;
&lt;p&gt;戴尔这款并没有长时间使用，但是朋友买了，他遇到了阴阳屏的问题，客服肯定就是换，但最终似乎更新了固件解决了。国产这几个会更新固件么？最开始屏幕发黄的川升还说是固件问题，还拿除了另一个买家说也遇到了同样的问题，但是他们并不能保证什么时候更新固件。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;对比联合创新其余两款能便宜1000，这些问题都能忍受。  再对比戴尔差价9千多，这些更不是问题了。  你说扩展不够，买个好扩展坞能用9千么？但你说我真有1w块钱闲钱或者是工作用(懂得都懂)，那肯定选戴尔。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;总结，你不想折腾而且手里有钱，直接戴尔U4025QW，没钱但是时间多抗折腾会扯皮，那么国产看着买吧，都一个味。点好，那么一发入魂，点不好像我这样的就是得折腾5次。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>poetry特殊问题记录</title><link>https://x-item.com/poetry-ssl-error.html</link><guid isPermaLink="true">https://x-item.com/poetry-ssl-error.html</guid><pubDate>Thu, 04 May 2023 15:55:20 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;在非原版Windows系统中安装poetry遇到的一些问题&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;安装报错&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;urllib.error.URLError: &amp;lt;urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;类似上面错误，能看出来是证书问题，但是不清楚如何解决。如果百度呢都是让你关闭证书检测(忽略证书错误)，这没意义，自己的脚本时可以这样更改的，当这个脚本文件在其他包中就不那么方便改了。而且这种方法就是掩耳盗铃。&lt;/p&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;p&gt;原连接：&lt;a href=&quot;https://github.com/python-poetry/poetry/issues/680#issuecomment-1317084961&quot;&gt;https://github.com/python-poetry/poetry/issues/680#issuecomment-1317084961&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;为了防止后续其他问题，直接在Windows系统的环境变量中添加了这两项：&lt;strong&gt;REQUESTS_CA_BUNDLE&lt;/strong&gt;、&lt;strong&gt;SSL_CERT_FILE&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2023/05/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;问题的前提就是这个系统是精简过的，这是在虚拟机中测试遇到的。猜测和openssl有关但是重新安装了之后也没作用，问题算是解决了虽然不清楚原理，暂时先记录一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;总结：无&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>开发，但是Termux</title><link>https://x-item.com/develop-termux.html</link><guid isPermaLink="true">https://x-item.com/develop-termux.html</guid><pubDate>Wed, 24 Aug 2022 11:09:34 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;用Termux这个环境已经有段时间了，最近准备写一些网站监控项目: 网站是否在线、是否有变化等等。分享一下Termux一些环境的进阶使用方法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Postgresql&lt;/h3&gt;
&lt;p&gt;数据路选择Postgresql，不选择mysql的原因就是。Postgresql支持json格式直接保存，查询等操作，也就是说具备NoSQL的特性，使用起来比较方便。&lt;/p&gt;
&lt;p&gt;使用安装就是根据Termux给出的官方文档进行操作的：&lt;a href=&quot;https://wiki.termux.com/wiki/Postgresql&quot;&gt;https://wiki.termux.com/wiki/Postgresql&lt;/a&gt;。按照文档创建好数据库之后，更改一下连接规则，因为只在内网使用，所以监听直接更改为全网段。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~ $ psql default
psql (14.2)
Type &quot;help&quot; for help.

default=# show config_file;
                            config_file
--------------------------------------------------------------------
 /data/data/com.termux/files/usr/var/lib/postgresql/postgresql.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里面psql default，default是创建的数据库名称，然后输入show config_file查看配置文件的路径。更改捅位置下两个配置文件&lt;strong&gt;postgresql.conf&lt;/strong&gt;、&lt;strong&gt;pg_hba.conf&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;postgresql.conf&lt;/strong&gt;打开添加这一句: &lt;strong&gt;listen_addresses = &apos;*&apos;&lt;/strong&gt; 表示监听所有IP，这个按需更改，如果你就需要固定IP那就改成固定的，程序什么都在同意设备不需要其他网络访问那就不用改。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pg_hba.conf&lt;/strong&gt;这个里面改两个，看图选中这两个就是，改成自己所需的IP。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1h5fxr245zpj313i0h1tih.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 然后把服务启动上
sv-enable postgres
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面你这个前提需要安装&lt;strong&gt;termux-services&lt;/strong&gt;，直接apt 或 pkg安装就可以了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1h5fz2tg2tfj317o13k7iv.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pycharm 添加数据源测试一下是否可以连接&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这样数据库环境就准备好了，接下来准备在python环境中进行测试。&lt;/p&gt;
&lt;h3&gt;Python&lt;/h3&gt;
&lt;p&gt;前段时间彻底虚拟环境彻底切换成Poetry，还在慢慢熟悉，这次就在Termux上试试看下是否可用。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -sSL https://install.python-poetry.org | python3 -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切换了个新手机测试，开发环境没有装全，所以这一步会出现问题，提示下面内容:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error: can&apos;t find Rust compiler
......
This package requires Rust &amp;gt;=1.41.0.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找关键字就行，安装cryptography的时候缺少rust编译环境，咱给他装上就行了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install rust build-essential binutils cmake
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个位置只需要安装rust就可以继续了，但是为了后续安装其他需要编译的包，把编译环境也都准备好。&lt;/p&gt;
&lt;p&gt;然后就继续安装了，有可能这一步安装很慢，因为安装脚本中使用默认pypi源进行安装，这里也不建议手动改成其他的镜像源，防止因为同步延迟问题导致后续一些问题(虽然没遇到，只是猜测的)。&lt;/p&gt;
&lt;p&gt;安装成功后会提示设置环境变量，要不输入poetry是会找不到命令的。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;export PATH=&quot;/data/data/com.termux/files/home/.local/bin:$PATH&quot;&apos; &amp;gt;&amp;gt; ~/.bash_profile
source ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后就可以正常使用了。&lt;/p&gt;
&lt;p&gt;接着就是新建个项目目录，poetry init 初始化一下， 在安装psycopg包，写个类测试。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;class SQL:
    def __init__(self, database, host=&quot;localhost&quot;, user=&quot;root&quot;, password=&quot;root&quot;, port=&quot;5432&quot;):
        self.conn = psycopg.connect(f&quot;dbname={database} user={user} host={host} password={password} port={port}&quot;,
                                    autocommit=True)
        self.cur = self.conn.cursor()

    def execute(self, sql, args: &amp;amp;#91;tuple, None] = None, no_fetch=False):
        &quot;&quot;&quot;
        执行sql语句
        :param sql: sql语句
        :param args: 参数
        :param no_fetch: 是否不返回结果集
        :return:
        &quot;&quot;&quot;
        with self.conn.transaction():

            self.cur.execute(sql, args)
            if not no_fetch:
                return self.cur.fetchall()

    def check_table(self, table_name):
        return self.execute(&quot;SELECT tablename FROM pg_tables WHERE tablename = %s; &quot;, &amp;amp;#91;table_name, ])

    def __del__(self):
        try:
            self.conn.close()
        except Exception as e:
            logger.error(e)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试了下执行正常，这个数据库只要是作为日志记录，后续查询方便。手机端执行任务，然后执行结果、执行时间等信息记录到数据库里。常用的电脑中写个中控，就可以实时查看这些记录啦。当然这个中控还没有考虑开始搞，感觉都可以集成到Home Assistant中。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;说实话这个psycopg库是真不太会用，中文文档几乎没有，因为是psycopg3版本，比较新采用了上下文管理器协议，官方文档是推荐从连接开始就用with。这在实际项目调用中比较麻烦，除非是进行数据迁移这类不太需要交互的，总不能执行一条语句就重新连接数据库吧。但如果不用又回到2.x版本的时候需要自己处理commit 和 rollback了，有时间看下有没有更好的方法~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>在安卓手机中使用Termux安装Home Assistant Core</title><link>https://x-item.com/termux-ha-core.html</link><guid isPermaLink="true">https://x-item.com/termux-ha-core.html</guid><pubDate>Fri, 22 Jul 2022 12:44:15 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;一次用小米5尝试在Termux中安装Home Assistant Core，之前知道有这个东西，一直没接触过，家里也有不少智能设备，而且美的不支持米家，所以空调的控制一直使用美的美居这个App，做不到和温湿度传感器进行联动，所以准备先用手机装下试试。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;准备工作&lt;/h2&gt;
&lt;p&gt;首先说这是Home Assistant Core，并不支持Supervisor和插件。但是一些基础功能还是有的，至少原生支持的一些设备都是可以添加并且控制的，比如常见的小米(Miot)、华为等都是可以添加的。&lt;/p&gt;
&lt;h3&gt;不同版本区别&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1h4een6fah3j30zg0vcmzm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;插件都依赖容器所以Core和Container都不支持。&lt;/p&gt;
&lt;h3&gt;软件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Termux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下操作都是直接利用python安装hass，其实也可以在手机中利用虚拟机直接安装OS，也就是系统版本。虽然有一个j4125的软路由，但还是想在手机上折腾(?)&lt;/p&gt;
&lt;h2&gt;操作步骤&lt;/h2&gt;
&lt;p&gt;肯定是先啃文档啊，没有比文档更权威的教程了。&lt;a href=&quot;https://www.home-assistant.io/installation/linux#install-home-assistant-core&quot;&gt;https://www.home-assistant.io/installation/linux#install-home-assistant-core&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;安装依赖&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;pkg update
pkg upgrade

pkg install -y screen clang python rust make build-essential libjpeg-turbo libpng binutils pkg-config
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;创建虚拟环境&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 设置源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 创建目录
mkdir homeassisant &amp;amp;&amp;amp; cd homeassisant

# 创建虚拟环境
python -m venv venv

screen -S hass

# 激活虚拟环境
source venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;官方文档在这里是要创建用户的，因为Termux非完整linux环境，而且是&lt;a href=&quot;https://wiki.termux.com/wiki/Differences_from_Linux#Termux_is_single-user&quot;&gt;单用户&lt;/a&gt;所以也就创建不了了。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;export CARGO_BUILD_TARGET=aarch64-linux-android &amp;amp;&amp;amp; pip install homeassistant
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::note
感谢“等风起”提醒，安装时可能会遇到时区问题(&quot;&lt;strong&gt;Invalid time zone passed in&lt;/strong&gt;&quot;)，可以尝试在虚拟环境中&lt;code&gt;pip install tzdata&lt;/code&gt;安装进行解决。
:::&lt;/p&gt;
&lt;p&gt;编译maturin的时候如果没有加上 &lt;strong&gt;CARGO_BUILD_TARGET&lt;/strong&gt; 变量的话，会报类似下面的错误。一会安装好执行的时候也需要一个额外变量才可以启动，更多可以看这个&lt;a href=&quot;https://wiki.termux.com/wiki/Python&quot;&gt;https://wiki.termux.com/wiki/Python&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;creating build/lib.linux-aarch64-3.10
            creating build/lib.linux-aarch64-3.10/maturin
            copying maturin/import_hook.py -&amp;gt; build/lib.linux-aarch64-3.10/maturin
            copying maturin/__init__.py -&amp;gt; build/lib.linux-aarch64-3.10/maturin
            running build_ext
            running build_rust
            error: Don&apos;t know the correct rust target for system type aarch64-unknown-linux-android. Please set the CARGO_BUILD_TARGET environment variable.
            [end of output]

        note: This error originates from a subprocess, and is likely not a problem with pip.
        ERROR: Failed building wheel for maturin
      Failed to build maturin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不出意外的话，输入这条命令后不会出现什么报错。安装之前用screen创建了一个窗口，是因为安装过程比较漫长，需要编译的东西挺多的，防止退出后进程丢失。小米MIX3这一步安装编译至少花了12个小时以上，因为前一天的下午3点开始安装，睡前凌晨1点没有安装完。&lt;/p&gt;
&lt;h3&gt;启动&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;MATHLIB=m hass --debug
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;首次启动需要加上 &lt;strong&gt;MATHLIB=m&lt;/strong&gt; ，应为需要安装numpy，加&lt;strong&gt;debug&lt;/strong&gt;呢是为了更好的查看错误。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1h4fhb70h0uj31xe06g413.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;中间会出现这样一个错误，官方论坛中也有人遇到，但是问题比较新也没找到解决办法，猜测是与python版本有关，好在不影响使用。这次安装花不了多长时间，大约十几分钟之后就可以直接访问到了。&lt;/p&gt;
&lt;p&gt;http://IP地址:8123/，IP地址加上8123的端口就可以直接访问了。&lt;/p&gt;
&lt;h3&gt;配置&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1h4fiinih8kj30h00l0wfb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;只要打开这个页面，后续就没有什么大问题了，跟着官方文档的图例走就行了，&lt;a href=&quot;https://www.home-assistant.io/getting-started/onboarding/&quot;&gt;https://www.home-assistant.io/getting-started/onboarding/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下次启动就不用带额外变量和debug了直接 &lt;strong&gt;hass&lt;/strong&gt;就可以了。&lt;/p&gt;
&lt;h2&gt;注意&lt;/h2&gt;
&lt;h3&gt;Python版本&lt;/h3&gt;
&lt;p&gt;在手机上使用Termux来安装的话，要注意固定python版本，因为Termux上好像不支持旧版本安装(也有可能是我没找到)。如果真的要长时间使用的话不建议频繁更新Python版本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一次在手机上的尝试，其实Core的版本基础功能这就够了，自动化场景都有只不过，除了默认支持的设备外其他的添加比较麻烦，因为不支持插件。但是Core版本的探索就到这了，下次就是对OS的深入了解了。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>PySide6-QML-无边框窗口那些事(一)</title><link>https://x-item.com/pyside6-qml-frameless-window-first.html</link><guid isPermaLink="true">https://x-item.com/pyside6-qml-frameless-window-first.html</guid><pubDate>Thu, 30 Dec 2021 13:19:01 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;之前一直想接触qt，因为python的GUI开发能选择的并不多，一些平常自用的就thinker几行代码就解决了。也是赶上再油管看到一个QML相关的视频，感觉挺有意思就&quot;试逝&quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;为什么要无边框窗口&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;是qt跨平台，想要统一窗口设计就必然要走这一步&lt;/li&gt;
&lt;li&gt;系统自带的标题栏和控制按钮感觉比较一般&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其实主要就是标题栏比较违和，系统标题栏颜色没办法直接修改。所以不管是用什么语言编写的GUI几乎都是先创建无边框的窗口，然后去自定义标题栏以及最大化最小化等那些控制按钮。&lt;/p&gt;
&lt;h2&gt;为什么要用QML(Qt Quick)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;趋势吧，QT4开始也一直在向这方面在发展&lt;/li&gt;
&lt;li&gt;可以用JS进行编程，许多界面的操作逻辑在qml就可以解决了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但是基础组件，比如 Qt Widget 这种更成熟。而我最终选择了QML的原因就是他和JS语言类似，当然底层也是V8那套东西。上一个UI是用electron写的，要处理html、js、css等等。而且一些功能是用python写的，两个不同的语言交互如果没有官方库支持，还是有些困难的。&lt;/p&gt;
&lt;h2&gt;要解决的问题&lt;/h2&gt;
&lt;p&gt;离不开窗口的基础操作，最大化最小化、拖动、缩放、以及在Windows上的窗口特效。文章中就不详细展示代码了，测试使用的代码可以以下连接中查看。&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a href=&quot;https://github.com/Virace/pyside6-qml-frameless-window&quot;&gt;https://github.com/Virace/pyside6-qml-frameless-window&lt;/a&gt;
Gitee: &lt;a href=&quot;https://gitee.com/Virace/pyside6-qml-frameless-window&quot;&gt;https://gitee.com/Virace/pyside6-qml-frameless-window&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;窗口控制&lt;/h3&gt;
&lt;p&gt;基础操作qml就可以解决了，文档: &lt;a href=&quot;https://doc.qt.io/qt-6/qwindow.html#startSystemMove&quot;&gt;https://doc.qt.io/qt-6/qwindow.html#startSystemMove&lt;/a&gt;。比如说窗口拖动，就在你自建的标题栏或其他位置加上一下代码即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DragHandler {
            onActiveChanged: if (active) {
                                 mainWindow.startSystemMove()

                             }
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中“mainWindow”, 是你得Windows类的ID名称，需要更换成自己的。&lt;/p&gt;
&lt;p&gt;通过不断地了解QML文档，发现其实很多功能其自身就可以做到。但是问题也有很多，比如说窗口边缘用鼠标缩放窗口的问题，官方是给了函数的，文档: &lt;a href=&quot;https://doc.qt.io/qt-6/qwindow.html#startSystemResize&quot;&gt;https://doc.qt.io/qt-6/qwindow.html#startSystemResize&lt;/a&gt;。但是实际使用问题很多，包括调用Windows API边缘缩放功能也会有这种问题。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2021/12/30/lYcDEmPMCZAtoJs.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;窗口边缘拖动卡顿&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;看到的这个动图并没有慢放，而是 拖动时回出现的这种不跟鼠标的情况。&lt;strong&gt;目前没找到解决方法&lt;/strong&gt;，stackoverflow中也有相同问题也是没有解决方法，但下面有回复说程序越复杂性能越好，也就是越复杂约不容易出现图中的问题。因为对Windows API的不了解导致对这一现象不理解~~~&lt;/p&gt;
&lt;p&gt;而且经过测试似乎只是开启这个亚克力效果之后才会有这个问题。&lt;/p&gt;
&lt;h3&gt;窗口特效&lt;/h3&gt;
&lt;p&gt;这里只处理Windows上的效果，其它系统因为1是没有实际相关使用的系统，2是目前也没有跨平台的打算。&lt;/p&gt;
&lt;p&gt;其实已经有关于QT已经有现成的轮子了，但是只有pyqt的，有关于pyside的内容还是比较少的，但pyqt毕竟是商业程序想商用是需要付费的，但是其实际代码是很相似的，不少也是可以通用的。&lt;/p&gt;
&lt;p&gt;比如关于特效相关代码就来自于: &lt;a href=&quot;https://github.com/zhiyiYo/PyQt-Frameless-Window&quot;&gt;https://github.com/zhiyiYo/PyQt-Frameless-Window&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;只需要再合适的位置调用即可，但与pyqt唯一不同的就是需要在 &lt;strong&gt;addWindowAnimation&lt;/strong&gt; 方法中结尾添加以下内容&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;style = win32gui.GetWindowLong(hWnd, win32con.GWL_EXSTYLE)
style &amp;amp;= ~win32con.WS_EX_LAYERED
win32gui.SetWindowLong(
    hWnd,
    win32con.GWL_EXSTYLE,
    style
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是通过Spy++这个Visual Stuido 提供的程序，分析上原作者的代码以及自己测试使用的pyside6环境的窗口，其区别就是 多了个 &lt;strong&gt;WS_EX_LAYERED&lt;/strong&gt; ，查了一下微软文档，就是这是一个封层窗口的意思。不清楚原理也不清楚什么意思，只不过窗口加上了这个窗口样式后，关闭特效就有了。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;花了三天时间来处理这些不同的东西，尝试去了解其中的原理，最后还是放弃了思考，解决问题是根本！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个查找的过程是十分的难受的，这也是我这种学习方法的弊端吧，先不了解基础而是直接上手写一个项目，可能个人感觉这种方法更好吧~~~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>jsdelivr国内备案已被注销</title><link>https://x-item.com/jsdelivr.html</link><guid isPermaLink="true">https://x-item.com/jsdelivr.html</guid><pubDate>Mon, 20 Dec 2021 12:35:40 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;2021年12月20日下午因为一些原因jsdelivr已经失去了国内的IPC备案，目前国内访问已经被重新路由跳转到到Fastly。已经没有陆内节点了，取而代之的是&quot;near China&quot;，也就是中国及周边地区。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;事件经过&lt;/h2&gt;
&lt;p&gt;时间：2021年12月20日&lt;/p&gt;
&lt;h3&gt;上午10点左右&lt;/h3&gt;
&lt;p&gt;—— 部分地区访问 cdn.jsdelivr.net 已经出现证书过期等问题，起初以为是 jsdelivr 的国内CDN &lt;strong&gt;网宿&lt;/strong&gt; 的问题，因为之前也出现过很多因为网宿证书过期影响 jsdelivr 访问等问题。&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;下午3点40分&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;—— 官方确认问题，称正在调查。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gxkj4yuzrcj317z04ljtz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;下午3点45分&lt;/h3&gt;
&lt;p&gt;—— 小道消息称 “&lt;em&gt;网宿方面回应，https://cdn.jsdelivr.net/ 由于某些原因被禁止提供服务，具体原因不方便透露&lt;/em&gt;”，同时部分地区已经恢复对网站的访问，但已经解析到Fastly了。&lt;/p&gt;
&lt;h3&gt;下午5点26分&lt;/h3&gt;
&lt;p&gt;—— 官方回应，已经将 网宿 的节点全部解析到Fastly 。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gxkjd3paalj326e0iqdpi.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;与此同时官方的工作人员也在GitHub积极的与开发这沟通实时情况。&lt;/p&gt;
&lt;h3&gt;下午6点左右&lt;/h3&gt;
&lt;p&gt;—— 官方人员发布最终问题: &lt;a href=&quot;https://github.com/jsdelivr/jsdelivr/issues/18348#issuecomment-997777996&quot;&gt;https://github.com/jsdelivr/jsdelivr/issues/18348#issuecomment-997777996&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gxkk1j1muoj31r00ty7ol.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;事件原因&lt;/h2&gt;
&lt;p&gt;从GitHub上的员工回复中得知，是因为 &lt;strong&gt;网宿&lt;/strong&gt; 在没有提前通知的情况下直接关闭了相应访问。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gxkk30rpabj31rm0hck47.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;那么最终解决方案是将国内访问解析到了 Fastly , 在国内的IPC备案也被取消，至此jsdelivr已陆内节点。目前国内访问都是来自中国香港、日本的节点。&lt;/p&gt;
&lt;h2&gt;胡说八道&lt;/h2&gt;
&lt;p&gt;因为 jsdelivr 可以直接代理 https://raw.communitydragon.org/， 使用起来很方便，也是可能是这个原因(GitHub环境不受监管)导致了今天这个局面。&lt;/p&gt;
&lt;p&gt;作为开发者只能更换其他更好的CDN，当然，类似本博客主题这种自定义CSS JS等资源，在国内除了自建就没有什么免费方面的选择了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;除了可惜，已经没有什么可讲的了。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>长期运行准备 —— termux第二弹</title><link>https://x-item.com/termux-2.html</link><guid isPermaLink="true">https://x-item.com/termux-2.html</guid><pubDate>Tue, 07 Dec 2021 12:45:17 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;之前讲过 &lt;a href=&quot;https://x-item.com/battery-safe.html&quot;&gt;如何安全的二次利用你的旧手机&lt;/a&gt; , 前几天又说了实际遇到的情况。这会电池安全脚本给它部署上，再讲一下termux安装好后需要做的一些事情。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;完善脚本&lt;/h2&gt;
&lt;p&gt;先上完整代码: &lt;a href=&quot;https://github.com/Virace/Automatic-charging-of-MP&quot;&gt;https://github.com/Virace/Automatic-charging-of-MP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;主要就是对于温度的检测。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;....
elif temperature &amp;gt;= TT * 10:
    # 44° 温度过高通知
    if not os.path.exists(target):
        os.system(f&apos;echo 1 &amp;gt; {target}&apos;)
    else:
        with open(target, &apos;r+&apos;) as f:
            count = int(f.read())
            log.warning(f&apos;temperature anomaly, count: {count + 1}&apos;)
            if count &amp;gt;= 5:
                f.seek(0)
                f.write(&apos;0&apos;)
                if ac is True:
                    result = power.off()
                msg_push(f&apos;目前温度异常，请及时检查。温度: {temperature / 10}°, 已操作开关: {result}&apos;)
            else:
                f.seek(0)
                f.write(str(count + 1))
elif temperature &amp;lt;= 400 and os.path.exists(target):
    os.remove(target)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;TT&lt;/strong&gt;是配置中设置的温度阈值，超过这个温度就会记录一次，连续5次将会断开电源，并且微信推送。因为这个脚本是准备在crontab中按时出发的，所以这个超温几次触发推送，是要根据设置的计划任务频率设置的。&lt;/p&gt;
&lt;p&gt;其余的就是加上了推送，并没有太大比变化。&lt;/p&gt;
&lt;h2&gt;部署&lt;/h2&gt;
&lt;p&gt;这个脚本是跑在手机本身上的，所以要用adb连接自己来获取电池信息。需要在termux中先安装adb相关工具，但是遇到了问题。&lt;/p&gt;
&lt;h3&gt;ADB&lt;/h3&gt;
&lt;p&gt;没安装的时候输入adb会提示没找到该命令，并推荐你安装一个软件包&quot;&lt;strong&gt;android-tools&lt;/strong&gt;&quot;，莫装！测试了，adb服务无法启动。&lt;/p&gt;
&lt;p&gt;需要使用这个开源脚本方可安装: &lt;a href=&quot;https://github.com/MasterDevX/Termux-ADB&quot;&gt;https://github.com/MasterDevX/Termux-ADB&lt;/a&gt;，安装脚本中默认使用GitHub直接下载，国内访问不太稳定，可以使用下面提供替换过CDN的脚本。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/data/data/com.termux/files/usr/bin/bash

directory=&quot;$(pwd)&quot;
echo
echo -e &quot;\e&amp;amp;#91;93mThis script will install ADB &amp;amp; FastBoot Tools in Termux.&quot;
echo
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mDownloading wrapper script...&quot;
mkdir $PREFIX/tmp/adbtemp
downpath=&quot;$PREFIX/tmp/adbtemp&quot;
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/adb -P $downpath/ -q
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mDownloading binaries...&quot;
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/adb.bin -P $downpath/ -q
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/fastboot -P $downpath/ -q
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/fastboot-armeabi -P $downpath/ -q
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mCopying files to bin...&quot;
cp $downpath/* $PREFIX/bin
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mSetting execution permissions...&quot;
files=&quot;$(ls $downpath)&quot;
cd $PREFIX/bin
chmod +x $files
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mCreating workspace directory...&quot;
cd $HOME
if &amp;amp;#91; ! -d &quot;adbfiles&quot; ]; then
  mkdir adbfiles
fi
echo -e &quot;\e&amp;amp;#91;32m&amp;amp;#91;*] \e&amp;amp;#91;34mCleaning up...&quot;
cd $directory
rm -rf $downpath
rm -rf InstallTools.sh
echo
echo -e &quot;\e&amp;amp;#91;32mTools were successfully installed!\e&amp;amp;#91;39m&quot;
echo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在开发者模式中开启adb调试，执行 &lt;strong&gt;adb devices&lt;/strong&gt; 即可启动服务，并且可以看到下列字样。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;~ $ adb devices
List of devices attached
emulator-5554	device
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;emulator-5554&lt;/strong&gt;这只是个名字，可能你看到的会不一样，无所谓。在脚本中将 &lt;strong&gt;config.py&lt;/strong&gt; 变量 &lt;strong&gt;LOCAL_IP&lt;/strong&gt; 更改为这个名字即可。&lt;/p&gt;
&lt;h3&gt;安装依赖&lt;/h3&gt;
&lt;p&gt;微信推送用到了bs4和requests，插座操作则用到了python-miio，安装这个包遇到了不少问题。其中 python-miio 自己本身依赖了一个软件包 cryptography 用来编码解码，但是安装频繁出错。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一次&lt;/strong&gt;遇到的报错是缺少rust而无法编译，所以直接apt install rust就可以了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二次&lt;/strong&gt;遇到的报错如图，也就是说编译脚本中无法识别当前系统类型。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gx5j39rvjlj31s80vye77.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后经过搜索，在GitHub中找到了答案: &lt;a href=&quot;https://github.com/termux/termux-packages/issues/8037#issuecomment-975627474&quot;&gt;https://github.com/termux/termux-packages/issues/8037#issuecomment-975627474&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;~ $ rustc -vV
rustc 1.57.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: aarch64-linux-android
release: 1.57.0
LLVM version: 13.0.0
~ $ export CARGO_BUILD_TARGET=aarch64-linux-android
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先 rustc -vV 查看其输出的host，然后设置环境变量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三次&lt;/strong&gt;是因为网络问题，导致没办法GitHub上下载相关文件，这个就不提了是修改host还是挂什么东西，这个问题不便回答。&lt;/p&gt;
&lt;p&gt;解决了这三个问题，依赖算是安装好了。&lt;/p&gt;
&lt;h3&gt;计划任务&lt;/h3&gt;
&lt;p&gt;crontab打算每两分钟执行一次。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;crontab -e

*/2 * * * * python $HOME/auto_power/main.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样就可以了，执行后可以在项目目录中查看 main.log 日志文件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gx5jgmkfb1j31ig0mob29.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;AC为充电器连接状态，CHARGE为剩余电量，STATE为充电状态，TP为电池温度。&lt;/p&gt;
&lt;h2&gt;其他方法&lt;/h2&gt;
&lt;p&gt;其实最近一直在测试上个文章提到的 ACC(Advanced Charging Controller)，两部手机安装的都是魔趣安卓10版本，执行都不正常。&lt;/p&gt;
&lt;p&gt;无论情景模式如何设置，永远是电量保持在90%无法调节，而且通过adb获取电池信息还是没有充电的状态，但是状态栏右上角电池又显示为充电状态，包括充电记录等信息全都不正确，原因未知，所以目前放弃此方法。&lt;/p&gt;
&lt;p&gt;本来就像用这两种方法来处理，但是目前来看只能用我的&quot;笨办法&quot;了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;要是支持不使用电池充电器直连就好了，没找到相关操作~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>如何安全的二次利用你的旧手机</title><link>https://x-item.com/battery-safe.html</link><guid isPermaLink="true">https://x-item.com/battery-safe.html</guid><pubDate>Fri, 26 Nov 2021 11:34:57 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;之前讲过一个好玩的东西，&lt;a href=&quot;https://x-item.com/termux.html&quot;&gt;闲置安卓机妙用 —— termux&lt;/a&gt;。当时就把手机接上充电器放到弱电柜中了。发文前天晚上小米5断联了，打开一看电池已经鼓包，后盖已经被顶开了。但是手机是正常开机的，看样是经历过重启，除了电池其他正常，发文当天小米note也未能幸免...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;后怕&lt;/h2&gt;
&lt;p&gt;发现的及时，也在第一时间将旧电池拆卸下扔掉了，新电池还在快递路上。这要是引起火灾后果不堪设想。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gwrukgq6d4j30lq1950z8.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;小米5电池鼓包&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;问题分析&lt;/h2&gt;
&lt;p&gt;猜测是因为手机高频率的充放电导致电池问题，因为不会有其他的问题，弱电箱中放置了一个米家蓝牙温湿度计，做了温度湿度阈值报警。除了温度和撞击那只有过充问题，何止是过充啊，从5月份开始就一直在充电，没有停止过。能挺半年没有自燃感觉已经不错了?&lt;/p&gt;
&lt;h2&gt;解决问题&lt;/h2&gt;
&lt;p&gt;确定了问题所在，其实就好解决了。只要不一直充电不就可以了，adb可以获取电池情况，配合只能插座，就可以设置在低电量下连接电源，高电量就断电了。&lt;/p&gt;
&lt;h3&gt;Gosund智能插座&lt;/h3&gt;
&lt;p&gt;购买的是&lt;a href=&quot;https://www.xiaomiyoupin.com/detail?gid=113668&quot;&gt;Gosund 智能插座CP1白色（WIFI版）&lt;/a&gt;，同大小有个带电量统计的，因为精确度也不高也用不上所以就没买那个。这里说一点WIFI的好控制，蓝牙的需要连接网关，虽然家里有个多模网关，但是在网络中没有找到可以直接控制的方法。&lt;/p&gt;
&lt;h3&gt;编写代码&lt;/h3&gt;
&lt;p&gt;之前就查找过相关代码，因为想不通过米家或使用更复杂的逻辑触发智能动作。就找到了这个开源库&lt;a href=&quot;https://github.com/rytilahti/python-miio&quot;&gt;python-miio&lt;/a&gt;，miio是小米在米家与相关设备通信时使用的一种协议，python-miio只是用python来实现，还有nodejs相关库。&lt;/p&gt;
&lt;p&gt;又使用了&lt;a href=&quot;https://github.com/Maxmudjon/Get_MiHome_devices_token&quot;&gt;https://github.com/Maxmudjon/Get_MiHome_devices_token&lt;/a&gt;&lt;a href=&quot;https://github.com/Maxmudjon/Get_MiHome_devices_token&quot;&gt;Get_MiHome_devices_token&lt;/a&gt;这一程序来获取，智能设备的IP和通信认证所需要的token。其代码会有些问题，遇到其库中(&lt;a href=&quot;https://github.com/Maxmudjon/Get_MiHome_devices_token/blob/main/only_images_and_models.json&quot;&gt;https://github.com/Maxmudjon/Get_MiHome_devices_token/blob/main/only_images_and_models.json&lt;/a&gt;)没有的设备模型ID，则会报错。 但其实这只是用来匹配一个图片，随便给个默认值就行，因为用名字就可以区分。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gwru2cz6rij31200c242e.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# -*- coding: utf-8 -*-
# @Author  : Virace
# @Email   : Virace@aliyun.com
# @Site    : x-item.com
# @Software: PyCharm
# @Create  : 2021/11/25 14:54

# @Detail  : Gosund插座封装

from miio import Device

class GosundPlug(Device):
    def on(self):
        return self.send(&quot;set_properties&quot;, &amp;amp;#91;{&apos;siid&apos;: 2, &apos;piid&apos;: 1, &apos;did&apos;: &apos;state&apos;, &apos;value&apos;: True}])

    def off(self):
        return self.send(&quot;set_properties&quot;, &amp;amp;#91;{&apos;siid&apos;: 2, &apos;piid&apos;: 1, &apos;did&apos;: &apos;state&apos;, &apos;value&apos;: False}])

    def status(self):
        data = self.send(&quot;get_properties&quot;, &amp;amp;#91;{&apos;siid&apos;: 2, &apos;piid&apos;: 1, &apos;did&apos;: &apos;state&apos;}])
        if data:
            return data&amp;amp;#91;0]&amp;amp;#91;&apos;value&apos;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后封装了一个插座的类，不知道为何无法使用其默认提供的相关”Plug“模块进行控制，在GitHub中搜了一下模型名称，得到了以上数据，测试可以正常使用。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;adb -s 127.0.0.1:5555 shell dumpsys battery
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过上面命令可以获取电池信息，其中的level为当前电量，temperature为电池温度，既然提供了数据，就对电量以及电池问题进行监控。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# -*- coding: utf-8 -*-
# @Author  : Virace
# @Email   : Virace@aliyun.com
# @Site    : x-item.com
# @Software: PyCharm
# @Create  : 2021/11/25 15:42
# @Update  : 2021/11/25 15:42
# @Detail  : 自动充电
from Plug.gosund import GosundPlug
import os
import subprocess

def run_shell(command, cwd=os.getcwd()):
    cmd = subprocess.Popen(command, cwd=cwd, shell=True, stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE, close_fds=True)
    return cmd.stdout.readlines()

def get_battrty_info(ip):
    run_shell(f&apos;adb connect {ip}:5555&apos;)
    raw = run_shell(f&apos;adb -s {ip}:5555 shell dumpsys battery&apos;)
    res = dict()
    for line in raw:
        d_line = line.decode(&apos;utf-8&apos;).replace(&apos;\r\n&apos;, &apos;&apos;).strip()
        if &apos;: &apos; not in d_line:
            continue

        key, value = d_line.split(&apos;: &apos;)
        res&amp;amp;#91;key] = value
    return res

class Power:
    def __init__(self, ip, token):
        self.plug = GosundPlug(ip, token)

    def on(self):
        self.plug.on()
        return self.plug.status() is True

    def off(self):
        self.plug.off()
        return self.plug.status() is False

def main():
    power = Power(&apos;192.168.31.42&apos;, &apos;2c8481925eddef1a46f24613da644408&apos;)
    data = get_battrty_info(&apos;192.168.31.44&apos;)
    # 剩余电量
    charge = int(data&amp;amp;#91;&apos;level&apos;])
    # 电池温度
    temperature = int(data&amp;amp;#91;&apos;temperature&apos;])
    print(data, charge, temperature)
    if charge &amp;lt;= 30:
        result = power.on()
        # 返回执行结果，加通知

    elif charge &amp;gt;= 98:
        result = power.off()

    elif temperature &amp;gt;= 390:
        # 39° 温度过高通知
        pass

if __name__ == &apos;__main__&apos;:
    main()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;电量低于30插座打开，开始充电。高于98，断电。温度高于39°预警，通知这方面还没做，之前写过微信通知相关程序，复制粘贴以下就行了。因为弱电箱里面其实温度不高，并且手机是熄屏执行任务，如果超过了这个阈值，说明有问题了，满载时间过长或其他情况。就需要及时降温，检查运行程序并且断开电源，解除充电状态。&lt;/p&gt;
&lt;p&gt;程序不完善，很多细节还未去处理，比如说温度超过多少度暂停充电，停止多长时间等等。需要后续等电池到了，手机恢复后再去测试了。&lt;/p&gt;
&lt;h3&gt;AccA (Advanced Charging Controller App)&lt;/h3&gt;
&lt;p&gt;来源: &lt;a href=&quot;https://github.com/MatteCarra/AccA&quot;&gt;https://github.com/MatteCarra/AccA&lt;/a&gt;，这是一个安卓App，看名字其实就能知道这是一个充电控制软件。没有把它排在智能插座前面是因为，他需要&lt;a href=&quot;https://github.com/topjohnwu/Magisk&quot;&gt;Magisk(面具)&lt;/a&gt;的支持，这个要是展开将就略麻烦了，可以百度一下。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gwsreg8h1yj30u01qigpk.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;情景模式&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;可以根据不同的需求定制不同的充电模式，冲到多少停止，温度超过多少暂停充电等等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gwsrfznqn7j30u04dpakn.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;其中电池闲置模式就相当于不使用电池，充电器直连手机。部分笔记本厂商有这个选项，但这个功能在手机上是需要内核支持的，很可惜我手里的这几个都不支持，至少提示是不支持。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;很容易忽略的一个安全问题，也是很多老旧手机再焕发第二春的同时会遇到的问题。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>乐歌升降桌LIFT1(E3)体验+售后实录</title><link>https://x-item.com/loctek-lift3.html</link><guid isPermaLink="true">https://x-item.com/loctek-lift3.html</guid><pubDate>Fri, 23 Jul 2021 03:05:17 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;关键词：久坐。我是除了睡觉几乎都坐在电脑前，是在累了才站起来在屋里溜达溜达。久而久之胳膊总会酸痛，并且指关节腱鞘炎伴随着我。所以年初就准备换掉去年花了310在淘宝定制的一个140x80x74的桌子。终于是在今年的618等到了一个不错的价格...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;目标&lt;/h2&gt;
&lt;p&gt;至少的比目前的桌子要好吧，其实起初没有什么想法。了解了下行情，这些年品牌很多，之前还只知道个乐歌，现在什么网易、京东京造等等，甚至小米(米家)都有升降桌了，也接入米家了，但是功能太鸡肋，只是可以用收集调整高度，乱TM联网，桌面带无线充电还可以，但是桌面正面内置插排是不是有点鸡肋，我个人是将插排固定在桌面底部，这样可以放置意外，水什么直接撒到桌面上不至于直接都烧了或是跳闸。多的就不吐槽了，有兴趣可以搜一下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;尺寸：140x80 或 160x80&lt;/li&gt;
&lt;li&gt;特点：稳定，升降噪音低&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;像B站UP主 影视飓风 曾经分享过他们团队使用的设备，桌椅都用的是Human Scale品牌的，机械式手动升降非电动，特点是无声，整体体验更好。查了一下价格，直接让我忘掉了这个品牌名称，上面这个名字是撰稿时现找原视频在下方评论复制的。&lt;/p&gt;
&lt;p&gt;太高端的没实力买，其他品牌很多都没有140 或是 160尺寸的桌板，曾经也考虑过咸鱼或1688买桌腿然后再去淘宝定制一块桌面。&lt;/p&gt;
&lt;p&gt;了解桌腿的时候认识了一个概念：&lt;strong&gt;正装/反装&lt;/strong&gt;。因为是多节桌腿才能升降，结构类似老式电视的天线或者甩棍。正装就是正常情况，反装就是天线反过来插，粗的一侧用来升降。从结构来讲(不懂瞎BB)，正反装没大区别，而且从实现技术上也应该没有什么区别，只有外观正装比较符合一般审美吧，但你说甩棍反过来拿也没啥大毛病。但是有意思的来了，仅乐歌桌腿正反装差价在800块，所以肯定是反装的性价比更高。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gryh72cn60j30u01qgq6m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;防止有人说我乱说，配一个与京东乐歌旗舰店客服咨询的结果。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;然后就是桌板了，博主在东北，城市大连，冬天干夏天潮，实木桌板是白瞎中的白瞎，线都不说价格，最次也得是个胡桃木吧，的喷双面漆吧，少说半个月，多放放甲醛怎么也得小一个月才能拿到。没用一年裂了，就完了犊子了。更何况价格1000起步，普通密度板(甲醛不明)160x80就200。&lt;/p&gt;
&lt;p&gt;所以最后方案是看下乐歌能不能蹲到好价格，如果不能那就第三方买桌腿配密度板桌面。咸鱼有个号称乐歌工厂货与E3同级的桌腿1350，还有一家乐歌原厂桌腿E4是1499不包邮。桌板联系了几家最后是有一家200块是问的几家最便宜的，但是第三方密度板大家都懂，肯定会有甲醛问题，可以要求卖家多放几天再给你发。因为我之前定的那个桌子就有很大的味道。&lt;/p&gt;
&lt;h2&gt;下手&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;巧了&lt;/strong&gt;，6月17日当天在京东自营店蹲到了E4型号1999的价格，要知道全网有乐歌授权最低价也就拼多多有一家，140x80的是1899，对比下京东自营店铺肯定靠谱，而且价格就差了100。下单后要求延迟发货，毕竟没到618当天，还不知道这是不是最低价。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gryhlg2tf5j30u00hfglt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;1992 是因为用了红包&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;巧了&lt;/strong&gt;，618凌晨发现这个商品可以用一张9折券，商品原价2498，凌晨活动9折减249.8，叠加9折券减249.8，叠加150元优惠券，所以商品价格为1849.2。这可比全网(已授权店铺)最低还低50块啊，果断下单，并且用了上了全部京豆，价值280。最后商品实付为：1568.4元，最后京东支付还有个5元优惠券，最后是1563.4元。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gryhy79kqyj30u014w3yw.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gryhy75a2ij30u00p9q3c.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;发货&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;巧了&lt;/strong&gt;，下单两天没发货，问了一下说E4没货，要7月底到货。接着跟客服说了一句不能发就投诉了，客服说让我等下他查查，他提出给我“升级”为LIFT1(E3)型号，最后协商是发了这个。其实你看我上面说对对比就应该知道，这个LIFT1除了外观其他都没E4好，而且E4的控制板是圆柱形上下升降是个旋钮，并且带有一个USB的快充(没问功率)。&lt;/p&gt;
&lt;p&gt;虽说花了E4的钱买了一个E3，但总感觉被坑了，而且真觉得E4的桌腿还挺好看的。那没办法，6月中旬买的让我等到7月底那哪行，如果商家确实没货，投诉最多也只是退款，那我不亏了?&lt;/p&gt;
&lt;p&gt;22号发货，两个包裹走的德邦物流，桌腿26号到，桌板27号到，德邦给的信息是预计25号到达。618有情可原，但是客服真是一点用没有，想找客服的听劝，德邦的在线客服没有任何作用的，建议打电话直接开喷(?)，送货上楼，我家7楼没电梯，小哥自己扛上来的。&lt;/p&gt;
&lt;p&gt;包装算不错的了，桌腿箱子纵向胶带是不完整的，能看出来是因为运输撕裂的，横向没问题，外包装也没有损坏，内部包装有一层厚纸壳，关键补位也有泡沫用来缓冲。桌板更是四角都有泡沫加橡胶垫来保护。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;桌腿毛重70多斤，桌板打开也有个30斤左右，作为一个每天坐在电脑前没有什么运动量的我来说，真的是噩梦。大概花了两个小时装好，安装过程图拍好了，其实想详细写一下的，但是真的安装太简单了，就把图放一下得了。白沉了百十来斤的桌子倒腾起来，最好是俩人，装好后是等家里回来人之后才给翻过来。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5is1aj32kg0whjw7.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;桌腿包装&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5l70ej31q22cf7cc.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;安卓说明和配件&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5mz60j32wo1jiwma.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;先安装桌面固定板&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5p6znj334020649m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;桌腿&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5lfy1j32w01lo477.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;固定桌腿&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5mmp0j32ni1q6wll.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;桌板&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5u0gmj32vs1e0gvk.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;固定桌板，这一步需要个电钻级别的电动螺丝刀&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqor5s6gjj331w1q84aa.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;固定控制板&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;授权店买乐歌的桌子套装(桌腿和桌板)，是有上门安装服务的。但太简单了，家里有电动螺丝刀直接上就行了，除了重量没有任何难度。&lt;/p&gt;
&lt;h2&gt;体验&lt;/h2&gt;
&lt;p&gt;最开始担心的升降到最高会晃动，确实会晃动，就像普通桌子桌腿压了一块石头一样，轻轻侧面给个立就会晃动。最高高度是1米25，但是只要高度降低到1米20一下晃动就会减轻甚至消失，调试了一下站起来合适的高度是1米1左右。正常使用是没感觉到晃动的，但你说升降声音，夜晚还是挺大的，勉强能接受。&lt;/p&gt;
&lt;p&gt;桌板也确实没有任何味道，没有任何瑕疵。不管是正反面都很完美，包边接缝处也都很顺滑。升降也非常丝滑，我坐在桌子升降也都是正常的，官方宣传承重是125公斤。&lt;/p&gt;
&lt;p&gt;截止到结稿，使用了两天时间，是真的不错。定时提醒功能也能保证站坐交替，是比较推荐像我这样久坐的人弄一个。更多体验以后再发...&lt;/p&gt;
&lt;h2&gt;售后&lt;/h2&gt;
&lt;p&gt;使用一个月后，发现左桌腿质量问题导致，桌边正常按压会有金属碰撞声音。京东自营店铺的客服也都是乐歌官方的。&lt;/p&gt;
&lt;p&gt;录个视频给客服发过去，客服先是说视频看不出问题，然后说可能是固定螺丝问题，需要找上门师傅来看一下。上面图也有，螺丝一共没几个，就算你说了螺丝已经紧过了，这个售后还是说螺丝问题要师傅上门。&lt;/p&gt;
&lt;p&gt;而师傅上门来之后确定不是螺丝问题后，又称视频听不到声音。最后将视频音频放大后重新给客服发过去，客服又说要找技术人员确认，最后是给换个桌腿，但不承认问题，说要拿回去研究一下。&lt;/p&gt;
&lt;p&gt;乐歌官方售后跟用户说话就是高高在上的语气，我们的东西肯定没问题，指定是你自己操作问题。然后找一个“非专业”师傅上门确认问题是否存在。问题存在也不承认，就用户有问题，你拍的视频有问题。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gsqp64krfkj30ty1dygy1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;桌子是不错，售后是真牛逼。&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;购买之前也受很多网上言论影响，比如说什么那就定时起来走走呗，还能一直在桌子前面么，还有什么升降桌就是鸡肋，等等最终只有实际体验了才知道有什么效果。有些时候坐久了颈椎很难受，但是手头的工作不是那么轻易放下的，一写篇文章 一段代码 思路通了的时候你起来走走，MD刚爽你说出去逛逛？可能升降桌在一些人眼里确实是无用的鸡肋，但是在我这可能是“沈阳考鸡架”。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>闲置安卓机妙用 —— termux</title><link>https://x-item.com/termux.html</link><guid isPermaLink="true">https://x-item.com/termux.html</guid><pubDate>Sat, 22 May 2021 16:11:32 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&quot;旧手机换菜刀、不锈钢盆...&quot;, 由于没有折旧的习惯, 所以会积攒一些旧手机. 这些手机扔了可惜, 卖了不值钱不说在碰见个B事多的犯不上, 最近也正赶上写了一个解析联盟语音ID的脚本, 正想找个服务器来挂机处理自动更新. 无奈配置高的太贵, 现有的唯一一个美国服务器还是之前群友赞助的, 硬盘不够文件下载的, 想了很多办法都没有完美解决, 后来是一个朋友说用手机试试, 才有的今天的文章.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;先决条件&lt;/h2&gt;
&lt;p&gt;设备和软件, 软件就是termux, 设备就是一个配置还可以的安卓手机就行, IOS机器有不少软件能跑js脚本啥的, 没用过就不提了.&lt;/p&gt;
&lt;h3&gt;小米Note顶配版&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;曾经的火龙810 (&lt;strong&gt;8核&lt;/strong&gt;Cortex-A57x4 &amp;amp; Cortex-A53x4)&lt;/li&gt;
&lt;li&gt;4GB LPDDR4 1600 MHz&lt;/li&gt;
&lt;li&gt;eMMC 5.0 64G 内部存储&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;A57主频2.0GHz (1.96GHz)&lt;/li&gt;
&lt;li&gt;A53主频1.6GHz (1.56GHz)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;小米5尊享版&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;骁龙820 (4核)&lt;/li&gt;
&lt;li&gt;4GB LPDDR4 1866MHz 双通道&lt;/li&gt;
&lt;li&gt;128GB 机身存储 UFS2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;2x主频2.2GHz&lt;/li&gt;
&lt;li&gt;2x主频1.5GHz&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因为导言提到的脚本用到多线程比较多, 所以在小米Note中跑这个脚本, 满载CPU, 3000毫安电池只挺了1个半小时.&lt;/p&gt;
&lt;h3&gt;系统&lt;/h3&gt;
&lt;p&gt;因为米5还是在作为一个备用机在使用, 所以没有重新刷机, 用的是官方更新的最终版MIUI, 而小米Note使用的是魔趣2021年4月20日编译的安卓9.0版本(MK90.0-leo-210416-RELEASE.zip), 不得不说这款机型目前魔趣还在每夜版更新安卓10版本, 是真不戳.&lt;/p&gt;
&lt;h3&gt;软件&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gqdrlyowpqj30l406o74p.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gqdrlyp4nvj30kx06owf5.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://f-droid.org/&quot;&gt;F-Droid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://f-droid.org/zh_Hans/packages/com.termux/&quot;&gt;Termux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;fdroid是一个应用商店, 用来下载Termux的, 可以点击上面的链接下载apk. 然后再fdroid中搜索Termux.&lt;/p&gt;
&lt;p&gt;这里又不得不说, Tuna永远的神, 这两款软件都需要额外联网下载, 清华大学开源镜像都提供了相应的软件源, 当然国外用户就无视这里吧, 国内用户还是很有必要的.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/help/fdroid/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/help/fdroid/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/help/termux/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/help/termux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;实操&lt;/h2&gt;
&lt;p&gt;因为对root没有任何要求, 所以软件安装都比较无脑. 小米Note之前没解BL锁, 官方最后一版MIUI还是安卓7, 在刷机上浪费了超多的事件, 当然刷机不是必要的, 先卡刷官包, 然后刷REC, 再刷魔趣安卓7.1的版本最后上安卓9.0的版本.&lt;/p&gt;
&lt;p&gt;64G版刷机后, 实际还有55G可用, 为了方便处理, 本地会下载和生成40多个G的文件用来处理联盟的音频文件, 所以就目前来说还是够用的. 因为820和810大小核的主频是差不多的, 核数越多处理的越快. 这点实测是挺不错的.&lt;/p&gt;
&lt;h3&gt;SSH链接&lt;/h3&gt;
&lt;p&gt;虽然有屏幕, 但手机操作毕竟比较难. 修改Termux的软件源之后就可以安装了.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;apt install -y openssh
sshd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装好后使用sshd就启动服务了, 下面会说自动启动的问题. 接着用下面两个命令来获取用户名和设置用户密码.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;whoami
passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后就可以在局域网内用PC类似Xshell的软件进行连接了.&lt;/p&gt;
&lt;h3&gt;后续操作&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gqdsn79stvj30s80w4mxs.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以使用 &lt;strong&gt;apt&lt;/strong&gt; 或 &lt;strong&gt;pkg&lt;/strong&gt; 命令进行安装软件, 甚至可以用其他方法安装虚拟机直接运行Centos、Ubuntu等系统, 但是会有性能损失, 所以本次没有尝试.&lt;/p&gt;
&lt;p&gt;剩余的就是简单的linux操作了, 因为是ssh直接链接, 也就直接用IDE直接配置部署了, 这样代码同步比较方便.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;小看了手机的算力了, 这个脚本是非常吃读取与计算能力的, 然而在MI Note手机上执行效果还真不错, 而且因为没有使用屏幕, 联网之后就插着充电头放在角落了, 整机温度在使用中没什么变化. 非常棒?&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>iZotope RX 8问题记录</title><link>https://x-item.com/izotope-rx-8%E9%97%AE%E9%A2%98%E8%AE%B0%E5%BD%95.html</link><guid isPermaLink="true">https://x-item.com/izotope-rx-8%E9%97%AE%E9%A2%98%E8%AE%B0%E5%BD%95.html</guid><pubDate>Tue, 20 Apr 2021 19:56:50 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;最近一直在做一个视频练练手, 粗剪的时候想到视频片段有背景音乐, 如何去掉背景音乐, 或是人声与背景音分离, 就找到了这个iZotope RX 8, 但是遇到了一些问题.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;问题:&lt;/h2&gt;
&lt;h3&gt;1. 功能失效&lt;/h3&gt;
&lt;p&gt;去官网下载安装, 安装后实际使用功能却无效. 点击一些功能均无任何提示和弹窗. 最后经过尝试, 初步判断为更改安装路径导致. &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;卸载后重新安装不修改安装路径&lt;/mark&gt;&lt;/strong&gt;, 问题解决.&lt;/p&gt;
&lt;h3&gt;2. 播放只有杂音&lt;/h3&gt;
&lt;p&gt;降噪等一些功能正常, 保存也都正常. 但是试听的时候只有杂音(与音频几乎无关的声音), 后续在贴吧中看到有人恢复解决方法为: &lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;打开空间音效(用于耳机的Windows Sonic)&lt;/mark&gt;, 确实可以播放, 但感觉这不是问题所在. 随后在知乎中找到一个类似问题的答案为: &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;扬声器属性勾选&quot;禁用所有声音效果&quot;&lt;/mark&gt;&lt;/strong&gt;. 但可能因为硬件或驱动不同, 实际没有找到 &quot;增强&quot; 这一选项卡, 但是**&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;在高级 选项卡中, 将“启用音频增强”的勾选去掉&lt;/mark&gt;**, 则问题解决.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;目前使用软件所遇到的问题, 作为存档记录, 以防后续遇到同样问题.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>斗鱼直播间直播推送</title><link>https://x-item.com/douyu-push.html</link><guid isPermaLink="true">https://x-item.com/douyu-push.html</guid><pubDate>Tue, 23 Feb 2021 12:26:27 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;专治随缘主播(狗头), 没什么技术含量. 利用腾讯云 云函数 定时执行后可以实时监测直播间直播状态, 并第一时间使用调用第三方接口进行推送.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;当前维护的&lt;/h2&gt;
&lt;p&gt;点击下面标题展开就看见内容了.&lt;/p&gt;
&lt;h3&gt;寅子直播通知&lt;/h3&gt;
&lt;details class=&quot;md-fold&quot; data-icon=&quot;file&quot;&gt;&lt;summary class=&quot;md-fold-summary&quot;&gt;Push+(微信推送, 2021年5月23日更新二维码)&lt;/summary&gt;&lt;div class=&quot;md-fold-body&quot;&gt;
&lt;p&gt;Push+(微信推送, 2021年5月23日更新二维码)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQGh8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyRHFqbUUyMDVjWEQxMDAwMGcwN2cAAgSqpUxgAwQAAAAA&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;推送二维码-1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;扫描关注就行了, 不必在乎其他提示, 都是可以正常收到通知的. 但是这个服务提供者称可能后期会更换公众号. 具体什么时间还不清楚.&lt;/p&gt;
&lt;p&gt;优先扫描第一个二维码, 如果提示群组已满, 请尝试扫描第二个或使用下方推送方式. &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;注意: 切记不要多群组关注, 这样浪费资源.&lt;/mark&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details class=&quot;md-fold&quot; data-icon=&quot;file&quot;&gt;&lt;summary class=&quot;md-fold-summary&quot;&gt;WxPusher(微信推送)&lt;/summary&gt;&lt;div class=&quot;md-fold-body&quot;&gt;
&lt;p&gt;WxPusher(微信推送)&lt;/p&gt;
&lt;p&gt;地址1: &lt;a href=&quot;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1584#/follow&quot;&gt;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1584#/follow&lt;/a&gt;
地址2: &lt;a href=&quot;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1584#/follow&quot;&gt;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1585#/follow&lt;/a&gt;
地址3: &lt;a href=&quot;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1584#/follow&quot;&gt;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1586#/follow&lt;/a&gt;
地址4: &lt;a href=&quot;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1584#/follow&quot;&gt;https://wxpusher.zjiecode.com/wxuser/?type=2&amp;amp;id=1587#/follow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个地址要在微信中打开, 可以复制发给文件助手后打开. 当前链接最多支持1000人推送, 如果已经无法关注一定要下方回复通知我.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;注意: 切记不要多群组关注, 这样浪费资源.&lt;/mark&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;h2&gt;代码&lt;/h2&gt;
&lt;p&gt;没什么技术含量, 几个网络请求而已.&lt;/p&gt;
&lt;h3&gt;需求&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;查询直播间状态&lt;/li&gt;
&lt;li&gt;循环查询&lt;/li&gt;
&lt;li&gt;推送消息&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;实施&lt;/h3&gt;
&lt;p&gt;::github{repo=&quot;Virace/douyu-push&quot;}&lt;/p&gt;
&lt;p&gt;代码不难, 所有第三方推送都提供了相当简单的API和文档. 一个请求即可搞定, 至于查询直播间状态, 抓了网页端以及安卓端的搜索框搜索接口.&lt;/p&gt;
&lt;p&gt;因为发现搜索框推荐结果中, 如果直播间正在直播会在头像右下角有个标志.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gnxp84w6qqj30fi07gt8m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;右下角的小圆圈, 就有了第一版代码 &lt;a href=&quot;https://gist.github.com/Virace/2e3b2a37acb7cd75af04b2d610be28f8&quot;&gt;https://gist.github.com/Virace/2e3b2a37acb7cd75af04b2d610be28f8&lt;/a&gt; , 这个看看就行, 接口返回的信息够用.&lt;/p&gt;
&lt;p&gt;后来抓包安卓端发现有开播时间数据返回, 觉得挺有用后续就用安卓端的接口了.&lt;/p&gt;
&lt;h2&gt;部署&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.leancloud.cn/&quot;&gt;leancloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.tencent.com/product/scf&quot;&gt;腾讯云 云函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;白嫖就白嫖到底, 腾讯云云函数个人免费额度非常够用. 代码中用到的库已经在releases中打包了, 名为layer-xx.zip, 这是云函数的层, 也就是环境包直接上传并保定函数就好了, 腾讯云函数具体的部署方法就不赘述了.&lt;/p&gt;
&lt;p&gt;如果希望自己打包的可以运行以下命令, 目录中scf_env文件夹就是环境包, 打包上传就行. 也可以将命令中scf_env改为 &quot;.&quot;, 就是点, 表示当前目录, 接着将整个目录打包即可.&lt;/p&gt;
&lt;p&gt;:::warning
但是这里要注意：打包环境一定要于云函数环境(Centos7.x, Python3.6)一样, 测试中用Windows打包BeautifulSoup4会有找不到lxml的情况.
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt
pip install -r requirements.txt -t scf_env
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;兴趣使然罢了, 而且还很简单, 随手做的.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Kratos-pe基于kratos二次开发的主题</title><link>https://x-item.com/kratos-pe.html</link><guid isPermaLink="true">https://x-item.com/kratos-pe.html</guid><description>一款二次开发基于PJax无感刷新的Wordpress主题.</description><pubDate>Wed, 27 Jan 2021 06:39:42 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;曾经用过数个收费主题, 最终都是要么主题不更新, 只能留在旧版Worpdress, 要么作者圈一波钱就走的. 正值博客域名更换, 决定基于一个开源主题, 加上自己的想法.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;博客前一款主题mathilda, 应该能搜到. 购买后就没更新过(之前更新过), 而且其中一个php文件是加密过的, 授权加密就加密吧, 好多公共函数也在里面一起加密. 原作者不更新后, 花钱把文件解码之后自行修改.&lt;/p&gt;
&lt;p&gt;但是因为PHP水平也仅限于逻辑修改, 随着PHP以及WP版本更新, 无法使用了. 主题上花的钱太多了, 而且还需要自行修改, 费时费力.&lt;/p&gt;
&lt;p&gt;主题不能用之后在GitHub上发现了一款不错的主题, 名叫&lt;a href=&quot;https://github.com/xb2016/kratos-pjax&quot;&gt;Kratos-pjax&lt;/a&gt;, 个人比较喜欢这种ajax无刷新加载的方式, 体验上会不错. 但是这个主题偏二次元, 也是下载后需要不断修改才行.&lt;/p&gt;
&lt;p&gt;那么与其&quot;三手&quot;修改, 不如从原主题二次开发, 所以才有的现在版本的&lt;a href=&quot;https://github.com/Virace/kratos-pe&quot;&gt;Kratos-PE&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;主题&lt;/h2&gt;
&lt;p&gt;缝缝补补, 又整合了JS文件, 精简了CSS文件. 才有的当前稳定版本.&lt;/p&gt;
&lt;h3&gt;特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;体验增强——&lt;strong&gt;更多动画&lt;/strong&gt;, 代码来源开源库&lt;a href=&quot;https://github.com/animate-css/animate.css&quot;&gt;animate.css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;体验增强——&lt;strong&gt;PJAX&lt;/strong&gt;( pushState + ajax ), 代码借鉴 &lt;a href=&quot;https://github.com/xb2016/kratos-pjax/blob/master/static/js/pjax.js&quot;&gt;xb2016/kratos-pjax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;文章增强——&lt;strong&gt;代码高亮&lt;/strong&gt;, 基于&lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;文章增强——&lt;strong&gt;图片灯箱&lt;/strong&gt;, 基于&lt;a href=&quot;https://sachinchoolur.github.io/lightgallery.js/&quot;&gt;lightgallery.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;文章增强——&lt;strong&gt;文章目录&lt;/strong&gt;, 部分代码借鉴&lt;a href=&quot;https://wordpress.org/plugins/wpjam-basic/&quot;&gt;WPJAM BASIC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;后台文章增强——&lt;strong&gt;文章快速复制&lt;/strong&gt;, 代码来源于插件&lt;a href=&quot;https://wordpress.org/plugins/duplicate-page/&quot;&gt;Duplicate Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;后台媒体库增强——&lt;strong&gt;从URL插入&lt;/strong&gt;, 代码来源于插件&lt;a href=&quot;https://github.com/zzxiang/external-media-without-import&quot;&gt;External Media without Import&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;古腾堡增强——&lt;strong&gt;新增块&lt;/strong&gt;: 提醒、分组、手风琴、Bilibili嵌入&lt;/li&gt;
&lt;li&gt;主题设置——&lt;strong&gt;更多的颜色设置&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;移动端重写&lt;/li&gt;
&lt;li&gt;等等&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;优化内容&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;精简Bootstrap, 基于Chromium内核浏览器提供的&quot;Coverage&quot;覆盖范围检查功能精简其css文件&lt;/li&gt;
&lt;li&gt;精简Bootstrap, 基于4.5.3版本重新编译, 仅保留scrollspy功能&lt;/li&gt;
&lt;li&gt;去除layer, 重写弹出层&lt;/li&gt;
&lt;li&gt;整合js、css文件, 减少请求&lt;/li&gt;
&lt;li&gt;等等&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;以后更新趋向&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;养老&lt;/li&gt;
&lt;li&gt;随着原主题更新, 进行取舍更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;更新&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Virace/kratos-pe&quot;&gt;https://github.com/Virace/kratos-pe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;9月份立的项, 每天晚上弄一点, 11月10日也算是用上了. 截图就不放了, 就在本站体验吧.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>哔哩哔哩投稿工具抓包分析</title><link>https://x-item.com/bilibiliupload.html</link><guid isPermaLink="true">https://x-item.com/bilibiliupload.html</guid><pubDate>Thu, 21 Jan 2021 11:16:54 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;很久之前说过, B站转载视频是放在服务器上托管了, 也一直再用一个叫做&lt;a href=&quot;https://github.com/comwrg/bilibiliupload&quot;&gt;bilibiliupload&lt;/a&gt;的包. 经过几次改版, 部分接口需要改动, 可能是作者没有时间维护这个包, 导致部分功能失效, 准备着手自己抓包看看.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;准备&lt;/h2&gt;
&lt;p&gt;其实还有个原因, 2021年呢, 准备做个全职UP主, 所以不但算在主账号上发布转载视频了, 但是也不想放弃这个转载视频(关注的人不多, 但是不少用户还是会求更新的), 就在小号中转载, 但是这个账号吧, 在网页端不支持分P, 转载视频一般都用添加分P来规避专车检查.&lt;/p&gt;
&lt;p&gt;之前用的这个包, 上传部分用的就是网页端接口, 于B站客服沟通得知, 说是网页端更新导致, 使用投稿工具就可以分P了. 所以就自己造个轮子吧.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proxifier&lt;/li&gt;
&lt;li&gt;Fiddler 或 Charles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Proxifier&lt;/strong&gt;用来使投稿工具走代理, **&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Fiddler&lt;/mark&gt;**或 &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;Charles&lt;/mark&gt;&lt;/strong&gt; 负责抓包.&lt;/p&gt;
&lt;h2&gt;分析&lt;/h2&gt;
&lt;p&gt;具体抓包过程就不发截图了, 因为都没有什么难点, 只要这几个工具都知道怎么使用(基础操作)就行了. 有需要可以在评论回复.&lt;/p&gt;
&lt;h3&gt;登录&lt;/h3&gt;
&lt;p&gt;这部分就两个POST请求, 先获取用来加密的公钥以及盐, 接着访问登录接口就好了.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST https://passport.bilibili.com/api/oauth2/getKey
#参数
appkey	aae92bc66f3edfab
platform	pc
sign	89c2f1e93c09fedd2a1c5f0a3a678326
ts	1610018294
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;appkey&lt;/strong&gt;可以理解为是用来区分客户端的, 几乎所有操作请求都需要这个参数.  &lt;strong&gt;platform&lt;/strong&gt;就是平台的意思, 这类参数一般不用考虑默认就行. &lt;strong&gt;sign&lt;/strong&gt;是对整个请求的参数进行加盐后MD5的校验值. 这个盐和&lt;strong&gt;appkey&lt;/strong&gt;是对应的每个客户端一对, 具体可以在这里查看: &lt;a href=&quot;https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/other/API_auth.md&quot;&gt;https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/other/API_auth.md&lt;/a&gt;, ts不多说了时间戳.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;#返回数据
{
	&quot;ts&quot;: 1610018294,
	&quot;code&quot;: 0,
	&quot;data&quot;: {
		&quot;hash&quot;: &quot;0cff56e2df266d5b&quot;,
		&quot;key&quot;: &quot;-----BEGIN PUBLIC KEY-----xxxxxxx-----END PUBLIC KEY-----\n&quot;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回数据data中, &lt;strong&gt;hash&lt;/strong&gt;就是盐, hash+密码之后的值进行rsa加密, 加密所需的公钥就是另一个数据&lt;strong&gt;key&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST https://passport.bilibili.com/api/v3/oauth2/login
#参数
appkey	aae92bc66f3edfab

password	3oQkoLueIK1xxxx
platform	pc
sign	a8b948458bf2e11da33dfda14717b7e1
ts	1610018295
username	xxxxxxx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;和上面唯一不通的就是&lt;strong&gt;username&lt;/strong&gt;、&lt;strong&gt;password&lt;/strong&gt;, 用户名和密码, 用户名是明文, 密码就是上面所说的加密方式.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
	&quot;ts&quot;: 1610018295,
	&quot;code&quot;: 0,
	&quot;data&quot;: {
		&quot;status&quot;: 0,
		&quot;token_info&quot;: {
			&quot;mid&quot;: 729739818,
			&quot;access_token&quot;: &quot;c7f172ea71144cb922ead8bd2e86155e&quot;,
			&quot;refresh_token&quot;: &quot;a737bdf10f504fc299d2ed34e03a337d&quot;,
			&quot;expires_in&quot;: 2592000
		},
		&quot;cookie_info&quot;: {},
		&quot;sso&quot;: &amp;amp;#91;]
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回值中就当前的功能我们所需的就是&lt;strong&gt;token_info&lt;/strong&gt;中的四个属性值. &lt;strong&gt;mid&lt;/strong&gt;用户ID, &lt;strong&gt;access_token&lt;/strong&gt;请求令牌, 有了这个令牌就有了整个账户的控制权限. &lt;strong&gt;refresh_token&lt;/strong&gt;刷新令牌, 就是为了刷新请求令牌用的, &lt;strong&gt;expires_in&lt;/strong&gt;就是请求令牌的时效, B站的令牌一般都是30天, 所以快到30天的时候可以用&lt;strong&gt;refresh_token&lt;/strong&gt;来刷新令牌. 其余的cookie_info和sso是有值的, 只是用不上就不说讲.&lt;/p&gt;
&lt;p&gt;这两个请求需要注意的就是, 请求头&lt;strong&gt;Content-Type: application/x-www-form-urlencoded&lt;/strong&gt;, 以及一个空白的&lt;strong&gt;User-Agent&lt;/strong&gt;. 另外就是getKey的请求会生成一个Cookie: sid=xxxxxxxx, 这个建议带上.&lt;/p&gt;
&lt;h3&gt;上传视频&lt;/h3&gt;
&lt;p&gt;这部分三个请求, 预上传, 上传, 添加视频&lt;/p&gt;
&lt;h4&gt;预上传&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;GET http://member.bilibili.com/preupload

access_key	c7f172ea71144cb922ead8bd2e86155e
mid	729739818
profile	 ugcfr/pc3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预上传, &lt;strong&gt;access_key&lt;/strong&gt;和&lt;strong&gt;mid&lt;/strong&gt;分别是上一步登录成功获取的请求令牌以及用户ID, profile可能是上传工具的一个标志吧, 不用改变原封不动添加上就行.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
	&quot;complete&quot;: &quot;http://upcdn-szqn.bilivideo.com/vs814/xxxxx&quot;,
	&quot;OK&quot;: 1,
	&quot;url&quot;: &quot;http://upcdn-szqn.bilivideo.com/xxxx5&quot;,
	&quot;filename&quot;: &quot;xxxxxxxxxxxxxxxxxxx&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回值, &lt;strong&gt;OK&lt;/strong&gt;代表状态, 不是1就说明出现错误了. &lt;strong&gt;url&lt;/strong&gt;就是下一步视频上传所需要的地址, &lt;strong&gt;complete&lt;/strong&gt;是上传完毕的请求, 告诉服务器之前的视频(分片)传完了. &lt;strong&gt;filename&lt;/strong&gt;是服务器中的文件名字, 后续添加视频的时候要用到.&lt;/p&gt;
&lt;h4&gt;上传视频&lt;/h4&gt;
&lt;p&gt;上传就用截图解释了, POST请求, 地址就是预上传请求返回的&lt;strong&gt;url&lt;/strong&gt;, &lt;strong&gt;Content-Type&lt;/strong&gt;为 multipart/form-data. 发送参数如下.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gmvhwcr6njj313p08rdh7.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;返回值如果正常上传只有两个返回值, {&quot;OK&quot;: 1, &quot;info&quot;: &quot;Successful.&quot;}.&lt;/p&gt;
&lt;h4&gt;上传完毕通知&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;POST http://upcdn-szqn.bilivideo.com/vs814/xxxxxxxxxx
chunks	75

filesize	155245475

md5	a975ee0a86c1460e074ba3fd604157f4

name	xxxxx.mp4

version	2.2.0.1057
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传完毕的通知请求, &lt;strong&gt;chunks&lt;/strong&gt;文件块的数量, &lt;strong&gt;filesize&lt;/strong&gt;文件大小, &lt;strong&gt;md5&lt;/strong&gt;文件MD5, &lt;strong&gt;name&lt;/strong&gt;本地文件名, &lt;strong&gt;version&lt;/strong&gt;上传工具版本号. 其请求正常返回值也是只有OK 和 info两个参数.&lt;/p&gt;
&lt;h3&gt;添加视频&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;POST http://member.bilibili.com/x/vu/client/add

access_key    c7f172ea71144cb922ead8bd2e86155e
sign    8354da9b8dc51f2051d9cb844e060265
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;build&quot;: 1057,
    &quot;copyright&quot;: 2,
    &quot;cover&quot;: &quot;http://i0.hdslb.com/bfs/archive/424ff37639d5cd727b222bea87af5761ee624b20.png&quot;,
    &quot;desc&quot;: &quot;youtube&quot;,
    &quot;no_reprint&quot;: 0,
    &quot;open_elec&quot;: 1,
    &quot;source&quot;: &quot;转载来源&quot;,
    &quot;tag&quot;: &quot;\u82F1\u96C4\u8054\u76DF&quot;,
    &quot;tid&quot;: 171,
    &quot;title&quot;: &quot;视频标题&quot;,
    &quot;videos&quot;: &amp;amp;#91;
        {
            &quot;desc&quot;: &quot;&quot;,
            &quot;filename&quot;: &quot;xxxxxxxxxxxx&quot;,
            &quot;title&quot;: &quot;P1视频标题&quot;
        },
        {
            &quot;desc&quot;: &quot;&quot;,
            &quot;filename&quot;: &quot;xxxxxxxxxxxx&quot;,
            &quot;title&quot;: &quot;P2视频标题&quot;
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体参数的解释可以查看文末提供的Python代码, 已经分享到GitHub Gist上面了. 也是目前正在使用的上传脚本.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;code&quot;: 0,
    &quot;message&quot;: &quot;0&quot;,
    &quot;ttl&quot;: 1,
    &quot;data&quot;: {
        &quot;aid&quot;: 288600734,
        &quot;bvid&quot;: &quot;BV1hf4y1y75f&quot;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回值一目了然 两个ID, 现在用的就是BV了.&lt;/p&gt;
&lt;h2&gt;成品&lt;/h2&gt;
&lt;p&gt;Python编写的脚本, 使用到的第三方模块只有requests. 脚本中还提到了预览图上传以及刷新token的功能.&lt;/p&gt;
&lt;p&gt;地址: &lt;a href=&quot;https://gist.github.com/Virace/f6036bfd2baa8129ec6b142230b10924&quot;&gt;https://gist.github.com/Virace/f6036bfd2baa8129ec6b142230b10924&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注释感觉挺多的, 如果有什么问题可以在本文下方评论反馈, 也可以在Github上反馈.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gist.github.com/Virace/f6036bfd2baa8129ec6b142230b10924&quot;&gt;Gist&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;整体分析过程没什么难度, 因为已经有前人铺路了, 很多轮子都有. 比如说参数签名等. 而且在上传工具登录过程中没有出现过验证码, 如果出现了验证码, 那就手动处理一下验证码, 后续只用刷新token就可以了.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>DELL G7 7588笔记本声卡音效驱动安装</title><link>https://x-item.com/dell-g7-7588.html</link><guid isPermaLink="true">https://x-item.com/dell-g7-7588.html</guid><description>解决戴尔G7 7588笔记本安装音效驱动失效问题</description><pubDate>Sat, 12 Dec 2020 14:50:02 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这个笔记本也用了有两年了, 自打买来开始, 这个本子的声卡音效驱动在重做系统后一直是个诟病, 装不上, 多数都是这个MaxxAudioPro失效, 音频接口插入的时候没有反应. 虽然不经常重装, 记录一下解决办法, 以备不时之需.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;其实这个驱动原本是没有多大用处的, 可以调节个低音、详情、宽度、均衡器啥的. 需要就是要驱动区别出, 插入音频设备和笔记本内置音箱, 区别不出来的话这两个就是一个音量, 内置音箱设置为50音量, 插入的比如说耳机也是50, 就需要来回调整.&lt;/p&gt;
&lt;p&gt;这个功能正常瑞立声卡驱动是有的, 只不过戴尔内置这个音效插件的本子呢, 声卡驱动都是定制的, 会导致以上说的全都失效.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gllg4zoyxhj311c0t8793.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;解决办法&lt;/h2&gt;
&lt;p&gt;简单来说就是先安装老版本驱动, 在安装最新驱动.&lt;/p&gt;
&lt;h3&gt;环境&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;系统: Windows10 20H2 19042.631&lt;/li&gt;
&lt;li&gt;驱动1: &lt;a href=&quot;https://www.dell.com/support/home/zh-cn/drivers/driversdetails?driverid=r0k22&amp;amp;oscode=wt64a&amp;amp;productcode=g-series-15-7588-laptop&quot;&gt;6.0.1.8619, A02&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;驱动2: &lt;a href=&quot;https://www.dell.com/support/home/zh-cn/drivers/driversdetails?driverid=h00j4&amp;amp;oscode=wt64a&amp;amp;productcode=g-series-15-7588-laptop&quot;&gt;6.0.1.8642, A03&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gllg4zo4jyj31v80qit9m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;旧版本驱动下载位置&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;操作步骤&lt;/h3&gt;
&lt;p&gt;下载两个驱动安装驱动1, 需要重启两次, 在安装驱动2即可及解决. 6.0.1.8642, A03这个驱动最后更新时间是19年8月1号, 一直就有这个问题, 一直没有更新解决. 而戴尔官方客服的解决办法是, 这个音效软件直接不要了, 安装瑞立通用驱动就行了.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gllg4zp69ij30bc034t8j.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Intel芯片组驱动, SupportAssit等工具检测不到&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;曾经按照声卡型号, 在戴尔官网试了数个驱动, 最后找到了这个解决办法. 什么官网的&lt;strong&gt;SupportAssist&lt;/strong&gt;和&lt;strong&gt;Dell Update&lt;/strong&gt;, 都没有用, 因为重装系统后缺少一个芯片组的驱动, 这些都检测不出来, 还是手动安装的.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>英雄联盟英雄台词语音音频文件整理</title><link>https://x-item.com/lol_voice.html</link><guid isPermaLink="true">https://x-item.com/lol_voice.html</guid><description>英雄联盟语音音频文件与英雄台词对应(开坑).</description><pubDate>Thu, 03 Dec 2020 04:22:12 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;最近因为博客主题稍微告一段落, 抽出时间更新一下英雄联盟英雄的音频文件, 毕竟2021年会向视频方向发展. 文件提取之间发过视频教程, 目前要解决的就是音频文件和台词对应的问题.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;要做的&lt;/h2&gt;
&lt;p&gt;提取全部英雄音频文件按照名字与皮肤分类台词文件对应&lt;/p&gt;
&lt;p&gt;已经完成的&lt;/p&gt;
&lt;p&gt;之前发发视频的时候就写了一个提取的脚本(Python), https://github.com/Virace/lol_extract_voice&lt;/p&gt;
&lt;p&gt;全部提取&lt;/p&gt;
&lt;p&gt;截至10.24版本, 一共152个英雄, 写的脚本用到了线程池, 我这个笔记本呢也就开到3线程, CPU就已经80多了, 用了1~2个小时才提取完毕.&lt;/p&gt;
&lt;p&gt;切换到今年618组的那套视频剪辑用的电脑之后, 开了16线程, 仅用了十分钟. 跑了两次, 一次8线程 一次16线程, 都是十分钟. 所以感觉RExtractor.exe这个程序遇到瓶颈了. 也够快了, 就没细研究, 有兴趣看代码: https://github.com/Virace/lol_extract_voice/blob/master/Start.py&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6q74zvt3j30ng0va755.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;分类&lt;/p&gt;
&lt;p&gt;这个也是简单的, 英雄名字、皮肤名字中文翻译, 游戏内的都是有的. 解包后是一个json文件, 国外有个组织叫做 CommunityDragon , 实时更新最新的联盟游戏内的这个文件的解包, 像英雄名字: https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/zh_cn/v1/champion-summary.json&lt;/p&gt;
&lt;p&gt;所以只要写个循环, 再从对应json文件找到中文名字就OK了, 所以就有了最近更新的优化脚本: https://github.com/Virace/lol_extract_voice/blob/master/Opt.py&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6qe49aesj30e00l63z9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;命名格式: 英雄英文名·英雄代号·英雄名字, 为了后期使用方便保留的所有名称. 你像以后搜索的时候ashe肯定比&quot;艾希&quot; 输入的快.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6qhryuj4j30bq062748.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;皮肤也一样, 保留了源文件夹名字, 然后加上皮肤名字.&lt;/p&gt;
&lt;p&gt;台词文件对应&lt;/p&gt;
&lt;p&gt;写了个脚本来解决这个问题. 但是没有同步到上面的库中. 可以先提供一部分看下.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;for root, dirs, files in os.walk(OUT_PATH):
    if files:
        for item in files:
            if &apos;·&apos; in item:
                continue
            this = os.path.join(root, item)
            this_id = os.path.basename(this).split(&apos;.&apos;)&amp;amp;#91;0]
            print(this)
            while True:
                winsound.PlaySound(this, winsound.SND_FILENAME|winsound.SND_ASYNC|winsound.SND_LOOP)
                i = input(&apos;请输入:&apos;)
                if i == &apos;&apos;:
                    continue
                elif i.upper() == &apos;Q&apos;:
                    exit()
                else:
                    os.rename(this, os.path.join(root, f&apos;{this_id}·{i}.wav&apos;))
                    break
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;代码的意思就是循环所有文件, 然后循环播放这段音频, 人工把听到的台词输入, 之后按照输入的进行更改文件夹名字.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6qk1i4lnj31660psn1w.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;剑魔部分台词与音频对应文件&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;剑魔默认皮肤249条语音, 这249个台词对应花了近2个小时. 后来在网络中找到了部分台词, 不用手打了但是搜索还是用了很长时间.&lt;/p&gt;
&lt;p&gt;接着想到了&quot;语音转写&quot;, 百度等平台都有免费额度, 最后测试准确度选了讯飞的, 下面是测试结果.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6qt4ka6nj30k00gegmf.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;阿卡丽默认皮肤部分语音&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;感觉还不错, 然后随机跑了100个文件继续测试. 发现了一些有趣的东西.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gl6qxo6g7jj30ps01gmx2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;原台词: 只能扣动扳机的手, 还能把握什么东西&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;我TM直接裂开, 还有很多, 就不放图了. 测试仅仅用的是基础皮肤, 那些特殊皮肤特殊语音, 是处理过的. 直接听都很难听清的, 无解. 像厄斐琉斯, 她妹妹的语音, 真的听不懂, 就算是读音很正也不知道说的是那个字. 因为那些词没有了解过. 网上也都是网友听写的台词, 错别字很多, 又增加了额外的工作.&lt;/p&gt;
&lt;p&gt;包括地图内NPC等一些语音在内, 共48488个文件, 整理249个文件用了两个小时, 每天24小时不睡觉, 需要半个多月才能整理完. 天真了啊.&lt;/p&gt;
&lt;p&gt;目前进度&lt;/p&gt;
&lt;p&gt;当前整理的是基于10.24版本的文件提取的, 抽时间看看只把基础皮肤的语音台词对应上. 绿色为完成的, 黄色为有疑问待验证的.&lt;/p&gt;
&lt;p&gt;Aatrox·暗裔剑魔·亚托克斯
Ahri·九尾妖狐·阿狸
Akali·离群之刺·阿卡丽
Alistar·牛头酋长·阿利斯塔
Amumu·殇之木乃伊·阿木木
Anivia·冰晶凤凰·艾尼维亚
Annie·黑暗之女·安妮
Aphelios·残月之肃·厄斐琉斯
Ashe·寒冰射手·艾希
AurelionSol·铸星龙王·奥瑞利安·索尔
Azir·沙漠皇帝·阿兹尔
Bard·星界游神·巴德他没有台词 —— 2020年12月3日
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Blitzcrank·蒸汽机器人·布里茨
Brand·复仇焰魂·布兰德
Braum·弗雷尔卓德之心·布隆
Caitlyn·皮城女警·凯特琳
Camille·青钢影·卡蜜尔
Cassiopeia·魔蛇之拥·卡西奥佩娅
Chogath·虚空恐惧·科加斯
Corki·英勇投弹手·库奇
Darius·诺克萨斯之手·德莱厄斯
Diana·皎月女神·黛安娜
Draven·荣耀行刑官·德莱文
DrMundo·祖安狂人·蒙多医生
Ekko·时间刺客·艾克
Elise·蜘蛛女皇·伊莉丝&lt;/mark&gt; —— 2020年12月5日
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Evelynn·痛苦之拥·伊芙琳&lt;/mark&gt;
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Ezreal·探险家·伊泽瑞尔&lt;/mark&gt; —— 2020年12月8日
&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;FiddleSticks·远古恐惧·费德提克&lt;/mark&gt;
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Fiora·无双剑姬·菲奥娜
Fizz·潮汐海灵·菲兹
Galio·正义巨像·加里奥
Gangplank·海洋之灾·普朗克&lt;/mark&gt;
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Garen·德玛西亚之力·盖伦&lt;/mark&gt; —— 2020年12月18日
&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;Gnar·迷失之牙·纳尔
Gragas·酒桶·古拉加斯
Graves·法外狂徒·格雷福斯
Hecarim·战争之影·赫卡里姆
Heimerdinger·大发明家·黑默丁格
Illaoi·海兽祭司·俄洛伊
Irelia·刀锋舞者·艾瑞莉娅&lt;/mark&gt; —— 2020年12月29日
Ivern·翠神·艾翁
Janna·风暴之怒·迦娜
JarvanIV·德玛西亚皇子·嘉文四世
Jax·武器大师·贾克斯
Jayce·未来守护者·杰斯
Jhin·戏命师·烬
Jinx·暴走萝莉·金克丝
Kaisa·虚空之女·卡莎
Kalista·复仇之矛·卡莉丝塔
Karma·天启者·卡尔玛
Karthus·死亡颂唱者·卡尔萨斯
Kassadin·虚空行者·卡萨丁
Katarina·不祥之刃·卡特琳娜
Kayle·正义天使·凯尔
Kayn·影流之镰·凯隐
Kennen·狂暴之心·凯南
Khazix·虚空掠夺者·卡兹克
Kindred·永猎双子·千珏
Kled·暴怒骑士·克烈
KogMaw·深渊巨口·克格莫
Leblanc·诡术妖姬·乐芙兰
LeeSin·盲僧·李青
Leona·曙光女神·蕾欧娜
Lillia·含羞蓓蕾·莉莉娅
Lissandra·冰霜女巫·丽桑卓
Lucian·圣枪游侠·卢锡安
Lulu·仙灵女巫·璐璐
Lux·光辉女郎·拉克丝
Malphite·熔岩巨兽·墨菲特
Malzahar·虚空先知·玛尔扎哈
Maokai·扭曲树精·茂凯
Map·公共语音
MasterYi·无极剑圣·易
MissFortune·赏金猎人·厄运小姐
MonkeyKing·齐天大圣·孙悟空
Mordekaiser·铁铠冥魂·莫德凯撒
Morgana·堕落天使·莫甘娜
Nami·唤潮鲛姬·娜美
Nasus·沙漠死神·内瑟斯
Nautilus·深海泰坦·诺提勒斯
Neeko·万花通灵·妮蔻
Nidalee·狂野女猎手·奈德丽
Nocturne·永恒梦魇·魔腾
Nunu·雪原双子·努努和威朗普
Olaf·狂战士·奥拉夫
Orianna·发条魔灵·奥莉安娜
Ornn·山隐之焰·奥恩
Pantheon·不屈之枪·潘森
Poppy·圣锤之毅·波比
Pyke·血港鬼影·派克
Qiyana·元素女皇·奇亚娜
Quinn·德玛西亚之翼·奎因
Rakan·幻翎·洛
Rammus·披甲龙龟·拉莫斯
RekSai·虚空遁地兽·雷克塞
Renekton·荒漠屠夫·雷克顿
Rengar·傲之追猎者·雷恩加尔
Riven·放逐之刃·锐雯
Rumble·机械公敌·兰博
Ryze·符文法师·瑞兹
Samira·沙漠玫瑰·莎弥拉
Sejuani·北地之怒·瑟庄妮
Senna·涤魂圣枪·赛娜
Seraphine·星籁歌姬·萨勒芬妮
Sett·腕豪·瑟提
Shaco·恶魔小丑·萨科
Shen·暮光之眼·慎
Shyvana·龙血武姬·希瓦娜
Singed·炼金术士·辛吉德
Sion·亡灵战神·赛恩
Sivir·战争女神·希维尔
Skarner·水晶先锋·斯卡纳
Sona·琴瑟仙女·娑娜
Soraka·众星之子·索拉卡
Swain·诺克萨斯统领·斯维因
Sylas·解脱者·塞拉斯
Syndra·暗黑元首·辛德拉
TahmKench·河流之王·塔姆
Taliyah·岩雀·塔莉垭
Talon·刀锋之影·泰隆
Taric·瓦洛兰之盾·塔里克
Teemo·迅捷斥候·提莫
Thresh·魂锁典狱长·锤石
Tristana·麦林炮手·崔丝塔娜
Trundle·巨魔之王·特朗德尔
Tryndamere·蛮族之王·泰达米尔
TwistedFate·卡牌大师·崔斯特
Twitch·瘟疫之源·图奇
Udyr·兽灵行者·乌迪尔
Urgot·无畏战车·厄加特
Varus·惩戒之箭·韦鲁斯
Vayne·暗夜猎手·薇恩
Veigar·邪恶小法师·维迦
Velkoz·虚空之眼·维克兹
Viktor·机械先驱·维克托
Vi·皮城执法官·蔚
Vladimir·猩红收割者·弗拉基米尔
Volibear·不灭狂雷·沃利贝尔
Warwick·祖安怒兽·沃里克
Xayah·逆羽·霞
Xerath·远古巫灵·泽拉斯
XinZhao·德邦总管·赵信
Yasuo·疾风剑豪·亚索
Yone·封魔剑魂·永恩
Yorick·牧魂人·约里克
Yuumi·魔法猫咪·悠米
Zac·生化魔人·扎克
Zed·影流之主·劫
Ziggs·爆破鬼才·吉格斯
Zilean·时光守护者·基兰
Zoe·暮光星灵·佐伊
Zyra·荆棘之兴·婕拉&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;备注&lt;/h3&gt;
&lt;p&gt;在稻草人语音上卡了很久, 因为对英雄本身不了解, 大部分台词由于英雄语气以及后期特效等原因, 不管是AI听译还是人工都拉垮了. 所以从稻草人开始, 如果台词本身听译效果差的话, 决定只将实际听到的音(音译)标注在文件上.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;自己开的坑, 含着泪也要走完.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>11.11购物贴&amp;Mx Keys键盘趣事</title><link>https://x-item.com/2020-11-11.html</link><guid isPermaLink="true">https://x-item.com/2020-11-11.html</guid><description>618购买的键盘双十一当天给退货了你敢信?</description><pubDate>Tue, 17 Nov 2020 12:20:52 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;原本打算双十一组一套ITX主机来替代现在这个笔记本(G7 7588)的, 因为不急, 所选的那些配件也都不是抢手配件, 也就正好等了一手苹果发布会(北京时间双十一当天凌晨亮点). 看完之后就取消了对这台小主机的计划, 准备看下M1芯片实际测试, 以及软件环境趋势, 决定是否选择Mac mini.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;清单&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;京东京造腰靠&lt;/li&gt;
&lt;li&gt;米家净化器2s/3&lt;/li&gt;
&lt;li&gt;海信 502升十字对开门冰箱(BCD-502WMK1DPJ)&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;MX Keys(罗技键盘)&lt;/mark&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;详解&lt;/h2&gt;
&lt;p&gt;原本准备的详细配置单, 都在发布会后都取消了, 就剩下这几个了. 再就是一些吃的了, 最后也提一嘴. 另外那个MX Keys的经历也很有意思, 有兴趣直接下跳.&lt;/p&gt;
&lt;h3&gt;京东京造腰靠&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gkscpnk0w1j30m80m8abh.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;京东京造腰靠&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个东西是我在朋友家看见的, 试了一下感觉不错. 平常坐椅子的姿势腰后面都很空, 用一些抱枕垫在后面, 时间一长就不是坐在上面了就是“躺”在上面, 不知道其他人有没有这个感觉.&lt;/p&gt;
&lt;p&gt;也没有搜索对比其他腰靠, 直接购买了这个. 因为保价30天, 11月2日直接购买了, 商品价格139, 红包12, 白条支付-2. 最后是125入手, 后来又降了到129, 保价反了1000京豆. 最后算实付&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;115&lt;/mark&gt;元.&lt;/p&gt;
&lt;p&gt;这两片背部支撑是可以升降的, 有几个挡位的卡口. 后面有弹簧, 靠上去不至于是硬的.用了十几天感觉是不错的, 最少是坐姿更规范了. 这不是广告也没有推广, 只是感觉这东西挺值. 习惯性买了三年全保换新, 18快5.&lt;/p&gt;
&lt;h3&gt;米家净化器3&lt;/h3&gt;
&lt;p&gt;最开始在2s和3之间纠结, 双十一价格并非历史最低价, 两款产品差价200, 最终选择了3, 从噪音以及其他配置上决定的.&lt;/p&gt;
&lt;p&gt;第一个到货的连wifi连了一个多小时没连上, 申请了换货, 换货需要小米工程师开具检测单, 预约了第二天上门. 同时也发现, 低档位噪音大, 感觉像是风扇固定的问题.&lt;/p&gt;
&lt;p&gt;次日工程师上门试了一下, 开了检测单就走了, 整个过程没有10分钟. 京东审核也没多长时间, 直接上门换新. 这个商品其实没什么可说的, 家里灰大原本准备上新风的, 但是我这个屋里, 没有合适的墙面打孔. 所以就放弃了.&lt;/p&gt;
&lt;p&gt;平常开着自动档位, 屋内PM2.5一直保持在10以下. 也一直都是睡眠那个挡位工作, 声音很小. 灰呢感觉上是少了点, 至少不至于像原来每天起来一看屏幕上有一层. 多数都是来自被上面的, 那个被毛很多, 保暖.&lt;/p&gt;
&lt;p&gt;也是提前买的, 付款899, 后续保价100. 实付&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;799&lt;/mark&gt;.&lt;/p&gt;
&lt;h3&gt;海信十字开门冰箱&lt;/h3&gt;
&lt;p&gt;之前的冰箱也是海信的, 双门冰箱, 内部空间很小. 家里用其实很不方便, 东西放不了多少还容易起霜上冰. 冰箱其实买的挺急的, 11月10日晚才确定购买的, 因为最开始我妈不同意, 最后还是一家三口举手表决2比1决定换冰箱,&lt;/p&gt;
&lt;p&gt;接着就在张大妈(什么值得买)上面搜最近价格不错的双开门或十字开门冰箱, 最终看到这篇文章: &lt;a href=&quot;https://www.smzdm.com/p/26477313/&quot;&gt;https://www.smzdm.com/p/26477313/&lt;/a&gt;, 看评价都说值. 那别想了, 下单吧, 一看还是预售赶紧先付定金.&lt;/p&gt;
&lt;p&gt;接着问了一下活动, 是在双十一当天凌晨12点前5分钟支付尾款的用户反500E卡, 客服称限时不限量, 这就好办了. 不像今年那些什么前多少人付款, 付完款还不告诉你是第几个付款的(不知道哪个傻逼想的这种活动).&lt;/p&gt;
&lt;p&gt;最后实付款&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;3199&lt;/mark&gt;, 反E卡活动需要与客服沟通提供邮箱进行操作. 预计在一个月左右会到, 没事到就行. 商品还有评论活动赠蒸锅. 如果超过21日还未发货补偿一个公牛插线板.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gksdtbxv42j30tb0qtdgt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;很快啊, 13号安排上门送货. 我这是当天第一个, 早晨6点睡的觉, 7点半来电话说一回到, 得睡不聊了. 开个大货来的, 看怎么得有个30多个冰箱. 俩小哥抬上来, 放到屋里就走了, 签个字, 说有问题申请售后.&lt;/p&gt;
&lt;p&gt;仔细看了一下, 有两处小问题, 不影响使用, 把手内测有划痕什么的. 跟客服说了下, 客服给申请100元补偿, 京东方面给补偿50元的京豆. 这里有个小插曲, 两处小问题是分两次说的, 因为当时并没有全发现, A问题反馈给海信, 海信给补偿100. B问题再反馈的时候, 就说补偿100是最高的了, 如果实在不满意就申请换货了, 一听也没毛病.&lt;/p&gt;
&lt;p&gt;还有点疑问, 就问了以下官方客服, 有没有对这方面商品的损伤定量的赔付, 就是有没有一个赔付标准, 京东客服二话没说直接申请5000京豆, 说这方面没有标准. 一想行了, 也都不是大问题一共150可以了.&lt;/p&gt;
&lt;p&gt;但是准备申请海信补偿100元的时候, 京东审核员有问题了, 称之前京东官方客服已经申请5000元, 他们后台一个商品最多只能申请一次而且最高是100. 所以你现在只能再给你申请50. 差点就让她给绕进去了, 反驳说海信补偿跟你们京东有什么关系, 她说商家再不清楚京东已经赔付50的情况下, 给你的100元标准, 需要再次与海信客服确认最终赔付金额.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gkse5xfsdrj30pk1kudme.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;拿到截图, 直接反馈给对应客服. 秒通过. 最开始审核员态度比较强硬, 其实已经准备就50就50吧, 但是一想不对. 娘的, 虽是自营商品, 但是客服是供应商客服, 跟京东关系不大啊. 所以说这方面问题, 千万不要让这些审核员用话语套进去.&lt;/p&gt;
&lt;p&gt;所以最终算是2549购买, 因为商品出现问题商家给补偿公牛插排, 评论给的蒸锅, 还有500E卡都在一个月内发放. 慢慢等吧.&lt;/p&gt;
&lt;h3&gt;MX Keys&lt;/h3&gt;
&lt;p&gt;这键盘不仅没花钱还省了将近200元, 看过之前文章的可能知道. 618的时候在京东购买了这款键盘, 因为对我这个腱鞘炎有非常大的帮助(只是我个人). 所以就算是换了好几次货也最终留下了.&lt;/p&gt;
&lt;p&gt;11月10日, 反馈了一个出现了很长时间的问题, 音量放大按钮卡键, 按一下会一直按, 本来想大一点声, 直接100%. 有几次差点没给我送走. 反馈之后, 罗技供应商客服建议我申请售后, 就申请了维修. 审核员来电话说, 不用修了直接给您换新.&lt;/p&gt;
&lt;p&gt;11日到货, 发现商品比618便宜了100元. 现价599, 618的时候699. 脑子里有个骚操作, 就问了一下, 换货的订单和普通订单权益一样么, 客服说一样, 那换货订单退货不就退的是618的订单, 客服说是的. 期间问了数个客服, 最终解释是: &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;如果商品换货超过两次及以上, 可以为您申请退货处理. 退货为原订单金额.&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;算这次已经是第三次换货了, 到货后充电. 巧就巧在这, 换的这个键盘充电的时候无法调节键盘背光并且传感器失效, 直接让客服申请了退货. 这时候审核员又来幺蛾子了, 说退不了. 我说是你们客服称可以申请的退货, 这个退货申请也是他申请的, 你找他核实.&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;最终, 618当天购买的键盘, 在双十一当天退货了.&lt;/mark&gt; 然后又重新下了一单, 正好双十一活动开奖, 开了50多红包. 全拼全30, 退货反的两元支付券, 最后实付&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;514&lt;/mark&gt;元.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你说京东售后不好吧, 你看审核员第一时间给你用了半年的键盘申请了换货, 客服还就这个问题给你申请了退货. 你要说售后好吧, 除了那个换货的审核员外其他的都得找你点问题.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>wsl2创建Wordpress开发环境</title><link>https://x-item.com/wsl2wp.html</link><guid isPermaLink="true">https://x-item.com/wsl2wp.html</guid><description>WSL2 + Docker Desktop + wp-env搭建Wordpress开发环境, 并使用VSCode进行远程开发.</description><pubDate>Wed, 04 Nov 2020 20:03:45 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本地的xamp环境总是出问题, mysql经常会有一些奇怪的错误. 虽然再stackoverflow找到了解决办法, 但不是从根本解决. &lt;a href=&quot;https://stackoverflow.com/a/61859561/1956278&quot;&gt;https://stackoverflow.com/a/61859561/1956278&lt;/a&gt; 虽然问题很小但是影响心情, 正好看见WP官方推荐的wp-env开发环境, 说干就干.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;事出有因&lt;/h2&gt;
&lt;p&gt;最初是使用phpstudy本地搭建的环境, 但实际使用中&lt;strong&gt;mysql访问很慢&lt;/strong&gt;, 不知道为什么. 换成xamp似乎是有所缓解(理论上应该是一样的), 但是带来了其他的问题, 就是上面提到的. 所以一直给我一种感觉就是mysql在windows下运行很慢, 放到虚拟机里弄个linux就好很多(有可能&lt;strong&gt;心理作用&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;正好kratos这款主题二次开发的过程中发现有使用到短代码, 这东西对我来说已经是落后的了, 因为已经不使用经典编辑器了, 从WP支持古腾堡编辑器开始就换掉了, 感觉这种块类的编辑器更适合我. 也并不是古腾堡不支持短代码, 只是使用起来不方便而且很怪. 所以就想把他改成古腾堡支持的块.&lt;/p&gt;
&lt;p&gt;也就跟着官方的文档: &lt;a href=&quot;https://github.com/WordPress/gutenberg/blob/master/docs/designers-developers/developers/tutorials/create-block/readme.md&quot;&gt;https://developer.wordpress.org/block-editor/tutorials/&lt;/a&gt; 一点点的摸索, 才有的这篇文章, 如果说你喜欢用phpstudy这类软件自行搭建的话, 那这篇文章对你来说应该是没什么帮助的.&lt;/p&gt;
&lt;h2&gt;部署环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Win10 2004 + WSL2&lt;/li&gt;
&lt;li&gt;Docker Desktop for Windows&lt;/li&gt;
&lt;li&gt;WP-env&lt;/li&gt;
&lt;li&gt;Visual Studio Code&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;WSL2&lt;/h3&gt;
&lt;p&gt;wsl1的时候很激动, 想说终于微软要统一世界了么? 后来发现docker用不了, 部分体验也一般. 心想慢慢来以后更新就好. 终于啊wsl2来了, 可是性质变了啊, 原来原生支持内核, 现在变成虚拟机了. 这...&lt;/p&gt;
&lt;p&gt;那也得用, 至少后续使用要比手动在虚拟机创建的要方便. 安装过程就不赘述了, 微软官网都有, 贴个连接: &lt;a href=&quot;https://docs.microsoft.com/zh-cn/windows/wsl/install-win10&quot;&gt;https://docs.microsoft.com/zh-cn/windows/wsl/install-win10&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;安装到最后会让你新建一个用户, 习惯了在服务器中使用root用户. 进入系统后就设置了下root用户密码. 命令稍微了解点linux的都应该知道.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo passwd root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::tip
&lt;strong&gt;注意:&lt;/strong&gt; 有可能在设置用户位置遇到如下提示: &quot;参考的对象类型不支持尝试的操作。&quot;, 注意这是WSL2与代理软件冲突导致的, 目前还没有官方(微软)的解决办法, 现有的两个方法会在文章底部提供.
:::&lt;/p&gt;
&lt;p&gt;这还没完, 不能每次进入都用 su 切换吧, 多余. 所以要&lt;strong&gt;设置root用户默认登录&lt;/strong&gt;. 我安装的是Ubuntu 20.04 LTS. 那就管理员运行powershell或者CMD键入:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;ubuntu2004 config --default-user root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里要注意这个&lt;strong&gt;ubuntu2004&lt;/strong&gt;只有你安装得和我一样是&lt;strong&gt;Ubuntu 20.04 LTS&lt;/strong&gt;才能这么用. 如果你安装的其他版本, 比如就是商店中的Ubuntu, 那么命令程序就是 ubuntu.&lt;/p&gt;
&lt;p&gt;这个程序在应用安装目录中, 一般是在 &lt;em&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;C:\Users\用户名\AppData\Local\Microsoft\WindowsApps&lt;/mark&gt;&lt;/em&gt; , 在这个目录中执行也可以. 设置好后重启一下lxssmanager服务, wsl2在windows中以服务存在, 想要重启子系统就直接重启这个服务就行. 任务管理器中找到右键重新启动就可以了.&lt;/p&gt;
&lt;p&gt;接着进入wsl2, 修改以下起始目录. 不修改也所谓, 个人习惯而已.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;echo &quot;cd ~root&quot; &amp;gt;&amp;gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;剩下就是正常linux操作了, 先换个软件源. 创建个自己开发使用的目录什么的. 软件源个人一直使用清华大学的开源镜像站: &lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/&lt;/a&gt;， 测试过我这访问比较快.&lt;/p&gt;
&lt;h3&gt;Docker Desktop&lt;/h3&gt;
&lt;p&gt;docker之前几乎可以说是没用过, 只在学python那时候接触个几个命令而已. 这个docker desktop现在支持wsl2, 得益于wsl2的端口直接映射到主机, 所以使用非常方便.&lt;/p&gt;
&lt;p&gt;下载地址: &lt;a href=&quot;https://www.docker.com/products/docker-desktop&quot;&gt;https://www.docker.com/products/docker-desktop&lt;/a&gt;, 截止到发文为止最新版本是2.4.0, 安装步骤就不贴了, 一直下一步. Win10会有一个开启WSL支持得选项也是默认勾选的, 所以什么都不用动默认安装就可以.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrok52j4pj30l608mt8s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;截图为2.4.1(edge版本)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrq37z9rzj31ls10ogn6.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;安装好后开启WSL2内部支持&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;按照上方截图设置对WSL2得支持, 这样可以在WSL2中直接使用docker命令了. 接着在Docker Engine选项中可以修改docker的配置信息, 开启debug什么的. 建议加上国内镜像源, 这样拉取镜像会快一点. 比如网易: http://hub-mirror.c.163.com 或者使用阿里云的.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrqabxeuwj30yy0iomxu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;截图用的是阿里云容器服务加速&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;:::tip
**注意:**如果你经常使用一些代理软件(包括网游加速器), 建议看下文章末尾&quot;遇到的问题&quot;.
:::&lt;/p&gt;
&lt;h3&gt;WP-env&lt;/h3&gt;
&lt;p&gt;这个开发环境, 貌似国内搜索引擎查不到相关信息, 最近也是啃文档研究的. 首先说这个环境不是必须的, 你自己用phpstudy、xamp这类软件搭一个直接开发也是没有任何问题的, 只是在编写古腾堡编辑器自定义块的时候官方推荐这个就是用了, 自己搭建再实际开发都是没啥区别的.&lt;/p&gt;
&lt;p&gt;开发环境部署文档: &lt;a href=&quot;https://developer.wordpress.org/block-editor/tutorials/devenv/&quot;&gt;https://developer.wordpress.org/block-editor/tutorials/devenv/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;先安装&lt;strong&gt;node&lt;/strong&gt;然后再全局安装**@wordpress/env**这个包就可以, 使用很简单. 官网推荐用nvm来管理node.js的版本, &lt;a href=&quot;https://github.com/nvm-sh/nvm&quot;&gt;https://github.com/nvm-sh/nvm&lt;/a&gt;这个连接有最新版本的地址, Wordpress官方文档的未必是最新版本.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrok52trfj30gc05aaaa.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入这两个命令能看见版本号就说明装好了, 接着键入:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm -g install @wordpress/env
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果安装过程比较缓慢, 可以尝试更换npm源来解决. 可以使用下方命令直接设置源也可以按照阿里云镜像文档来设置cnpm: &lt;a href=&quot;https://developer.aliyun.com/mirror/NPM&quot;&gt;https://developer.aliyun.com/mirror/NPM&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm config set registry https://registry.npm.taobao.org/
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;wp-env --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以键入上面命令测试是否安装成功.&lt;/p&gt;
&lt;h2&gt;开始开发&lt;/h2&gt;
&lt;p&gt;vscode就不提了, 安装都很简答, 也不需要什么额外设置. 环境全部准备好之后, 可以在开始菜单找到你安装的子系统, 单击即可进入shell界面. 也可以在Windows商店安装Windows Terminal, 个人是比较推荐后者的, 很方便.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrok57fufj31ta0zi7ia.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;创建一个开发目录, 这就是你的主题或插件的目录. 然后键入&quot;code .&quot;, 后面有个点, 指的是目录, 如果主机安装了VSCode那就可以直接开打并且自动切换到远程开发模式, 超级方便.&lt;/p&gt;
&lt;p&gt;编写好你的主题或插件的入口文件, 接着在目录中键入:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp-env start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会自动拉取docker镜像并且后台创建容器, 可以在主机docker desktop上直接查看(针不戳)&lt;/p&gt;
&lt;p&gt;接着直接在主机访问, http://localhost:8888 就可以访问已经创建的wp环境了. 后台账号密码分别是: admin password. 在主题或插件页面可以看见创建的插件或主题已经默认启用状态了. 接着开发就可以了, 下次只需要进入目录执行上面的命令就可以了.&lt;/p&gt;
&lt;h2&gt;遇到的问题&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;参考的对象类型不支持尝试的操作。&lt;/mark&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;这个问题可能会在&lt;strong&gt;首次启动子系统&lt;/strong&gt;以及&lt;strong&gt;Docker Desktop启动&lt;/strong&gt;的时候会出现. 首次启动子系统会提示设置用户名和密码, 但是上面会有下面图片类似的提示(第三行中文).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrok538fvj30l4068dfx.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;亦或是在启动Docker Desktop时候爆一个乱码错误, 这时候尝试命令行执行wsl就会和上面图片一样. 这是因为wsl和本地的代理软件冲突了, 比如&lt;strong&gt;Proxifier&lt;/strong&gt;或一些网游加速器. 两种解决办法:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一种: 重置网络&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netsh winsock reset
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;管理员执行上面命令, 执行之后会提示重启电脑. 一般不用重启就可以正常使用了, 不行的那就重启.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二种: 禁止老色批(LSP)相关DLL加载到进程中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1gjrpsf672ij304604bq2s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;开个玩笑&lt;strong&gt;分层服务提供&lt;/strong&gt;者全拼Layered Service Provider，缩写&lt;strong&gt;LSP&lt;/strong&gt;. 这个就不展开了, 有兴趣可以自行查询以下. XP Win7那个年底的优化软件应该都有个功能&quot;修复LSP&quot;, 就是那个.&lt;/p&gt;
&lt;p&gt;其实这个问题去年就存在了, 官方库也是有不少用户在讨论. 今年有用户联系到了&lt;strong&gt;Proxifier&lt;/strong&gt;开发人员, 从他们那得到了一个不错的解决方案. &lt;a href=&quot;https://github.com/microsoft/WSL/issues/4177#issuecomment-597736482&quot;&gt;https://github.com/microsoft/WSL/issues/4177#issuecomment-597736482&lt;/a&gt; 所需工具: &lt;a href=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN@master/virace.cc/other/2291/NoLsp.exe&quot;&gt;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN@master/virace.cc/other/2291/NoLsp.exe&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NoLsp.exe c:\windows\system32\wsl.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后执行这个就OK了, 这个程序就是添加了一个注册表让Windows知道不要把LSP DLL文件加载到wsl的进程中.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这篇文章有点长了, 所以部分并没有讲太多. 后续会讲一下wp-env配置文件, 映射之类的帮助开发. 以及古腾堡编辑器如何创建一个自定义块.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Wordpress变量$allowedposttags引发的一些问题</title><link>https://x-item.com/wp_allowedposttags.html</link><guid isPermaLink="true">https://x-item.com/wp_allowedposttags.html</guid><description>本来想解决Options Framework框架无法保存html标签得问题, 但是牵扯出了不少安全问题.</description><pubDate>Fri, 02 Oct 2020 20:38:09 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;一般不会碰到这东西, 也就是禁止评论里出现一些注入代码等等. 但是更改主题的时候, 发现Options Framework这个框架保存设置的时候, 对textarea标签进行过滤. 导致没办法添加一些标签, po个文记录一下.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;第一趴&lt;/h2&gt;
&lt;h3&gt;发现问题&lt;/h3&gt;
&lt;p&gt;想在主题中添加一个&quot;额外代码&quot;的选项, 可以把统计代码推送代码放到页脚. 原主题(&lt;a href=&quot;https://github.com/vtrois/kratos&quot;&gt;kratos&lt;/a&gt;)也是有这个功能的. 但是实际使用遇到一些问题, Options Framework框架再保存设置的时候, 使用了 wp_kses 函数处理内容. 导致一些不在变量 $allowedposttags 中的标签无法显示.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * Sanitization for textarea field
 *
 * @param $input string
 * @return string $output sanitized string
 */
function of_sanitize_textarea($input)
{
    global $allowedposttags;
    return wp_kses($input, $allowedposttags);
}

add_filter(&apos;of_sanitize_textarea&apos;, &apos;of_sanitize_textarea&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;百度现在是没有自动推送了, 最近更换域名也是重新开始对这些搜索引擎进行推送连接. 360搜索目前还支持自动推送, 加上代码后会有个奇怪的问题. 这段代码原本是这样的.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
(function(){
var src = &quot;https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba&quot;;
document.write(&apos;&amp;lt;script src=&quot;&apos; + src + &apos;&quot; id=&quot;sozz&quot;&amp;gt;&amp;lt;\/script&amp;gt;&apos;);
})();
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存之后第四行id属性以及script标签结尾被删除了.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;document.write(&apos;&amp;lt;script src=&quot;&apos; + src + &apos;&quot;&amp;gt;&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为360这个推送代码id是有用的, 引入的第二个js文件调用这个id. 所以缺少了会报错, 并且标签尾没了浏览器会自动添加, 但是添加的很诡异, 会把他下面的所有内容全包进去.&lt;/p&gt;
&lt;h3&gt;提出方案&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;删除框架中对textarea标签的验证&lt;/li&gt;
&lt;li&gt;hook $allowedposttags, $allowedtags 使其支持scrtip标签和其ID属性&lt;/li&gt;
&lt;li&gt;更改js代码&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;第二趴&lt;/h2&gt;
&lt;h3&gt;实际实施&lt;/h3&gt;
&lt;p&gt;第一种方法不可取, 虽然很简单, 直接return就行了. 但是毕竟这个框架这个函数不是只为这一个功能服务的. 而且这个验证还是挺有用的, 防止一些垃圾注入. 除非对自己的代码以及后期设置很有信心, 保证不会再代码安全上出现问题.&lt;/p&gt;
&lt;p&gt;第二种方法就更危险了, 因为$allowedposttags 和 $allowedtags也不是为了这个函数专门创建的. 还对评论进行处理, 如果hook处理不当直接导致评论者可以通过评论漏洞来攻击服务器. 就算是加了is_admin()的判断, 也无法保证其他管理员都需了结代码安全问题.&lt;/p&gt;
&lt;p&gt;提供的代码仅供参考, 再次强调: &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;此代码有一定风险, 谨慎使用.&lt;/mark&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*
 * 只在后台页面hook允许script标签
 * 本意是可以让Options Framework设置保存验证允许保存带script标签的内容
 * */
if (is_admin()) {
    if (!function_exists(&apos;admin_allow_other_tag&apos;)) {
        function admin_allow_other_tag()
        {
            global $allowedposttags, $allowedtags;
            $allowedposttags&amp;amp;#91;&quot;script&quot;] = array(&apos;id&apos; =&amp;gt; true, &apos;src&apos; =&amp;gt; true);
            $allowedtags&amp;amp;#91;&quot;script&quot;] = true;
        }
    }
add_action( &apos;init&apos;, &apos;admin_allow_other_tag&apos; );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第三种方法是我能想到的最好的解决办法了, 代码本意不就是引入个js么. 换种写法不就好了.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(function(){
let s = document.createElement(&apos;script&apos;);
s.id=&apos;sozz&apos;;
s.src=&quot;https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba&quot;
document.body.appendChild(s);
})();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本来是想使用第二种方法的, 但是改了之后id标签等还是会被删除, 后来看了一些xss的文章, 发现这个验证还是非常有用的. 也就没有继续深究到底是因为什么id标签被删除了. 如果有同学直到可以告诉我.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;感触颇深, MD这人真得学会变通. 就这个问题, 翻源码调试花了1个多小时(php技术不行), 最后想起来改js不就完了.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>吐血推荐美剧《神盾局特工》</title><link>https://x-item.com/agents-of-shield.html</link><guid isPermaLink="true">https://x-item.com/agents-of-shield.html</guid><description>这是一部在学生时期就开始追的一部美剧, 也是入坑美剧首部电视剧. 时间转瞬即逝, 陪伴了我6 7年的神盾局也来到了最终季. 实话更多的不是对剧情的评价, 而是对整部剧的不舍.</description><pubDate>Thu, 01 Oct 2020 20:33:16 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这是一部在学生时期就开始追的一部美剧, 也是入坑美剧首部电视剧. 时间转瞬即逝, 陪伴了我6 7年的神盾局也来到了最终季. 实话更多的不是对剧情的评价, 而是对整部剧的不舍.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owf4krij31k92bc1a1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owep8e3j312e1kwgth.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owei0u8j31qi2bcwtb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4oweiknhj31i0280tkh.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owehuloj31qi2bcn3q.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4oweiknnj31qg2bcaq9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owehnr5j31qi2bc7b5.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gj4owepyk0j33343uwhdt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;以上是第一季到第七季全部海报, 全部取自豆瓣. 个人比较喜欢这个中文海报, 感觉文字比较有感觉. 有兴趣可以自行搜索一下~&lt;/p&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;第一季接《复仇者联盟1》剧情, 但是主角之一菲尔·科尔森可不是第一次出现在漫威电影宇宙, 最早(我的记忆)出现在《钢铁侠》, 应该没记错毕竟《钢铁侠》是漫威宇宙第一部电影, 在那个慈善晚会上, 寇森来招募托尼斯塔克. 后续的《钢铁侠2》《雷神》《复联》《惊奇队长》这位演员&lt;em&gt;克拉克·格雷格&lt;/em&gt;都有参演.&lt;/p&gt;
&lt;p&gt;我个人是非常喜欢这个演员的, 在《复联》被洛基杀掉后, 网络中一度为寇森声援&quot;复活寇森&quot;, 据说(只是据说)是因为这个原因才在剧中被复活的. 寇森是个普通人(第一次&quot;死亡&quot;之前), 神盾局中也大多数是普通人, 当然也有有超能力的人(异人). 这也是看点之一, 只不过没有那些超级英雄强罢了.&lt;/p&gt;
&lt;h2&gt;概要&lt;/h2&gt;
&lt;p&gt;其实《神盾局特工》和《卡特特工》类似, 因为每集小剧情可能不够连贯导致焦点分散, 可能在前几集不太讨喜, 但主线还是非常有意思的. 《卡特特工》因为收视率问题第三季被砍, 非常可惜. 神盾也一度处于被砍得边缘, 还是撑过来了, 虽说属于电影宇宙但是与电影得联动非常少. 播到第七季最终季, 也是目前漫威最长得一部电视剧了.&lt;/p&gt;
&lt;h2&gt;演员&lt;/h2&gt;
&lt;h3&gt;汪可盈&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjacrat4kcj30hs0m8wfk.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;照片来自ins&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个应该都很熟悉, 因为今年(2020)春节期间一个默默直聘广告席卷各大电视台. 中美混血, 其父亲是中国人. 剧中饰演&lt;strong&gt;Skye&lt;/strong&gt;, 第二季获得超能力之后绰号&lt;strong&gt;Quake&lt;/strong&gt;(震波女). 当初入坑就是为了看汪可盈(123季感觉是颜值巅峰)和下面这个发际线突出的寇森.&lt;/p&gt;

&lt;h3&gt;克拉克·格雷格&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjagbzr7nzj30ku0kumy4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;翻了翻最近的ins, 也就这个还帅点= =&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;剧中饰演神盾局局长菲尔·科尔森. 在复联这个角色就很讨喜, 也不能说讨喜. 可能就是里面全都是要么超能力要么钞能力, 就这么被抖森Kill了的普通人. 对虽然空手道，跆拳道和柔道都是黑带但还是普通人. 剧透一下后来寇森又死了, 一度想弃剧.  但是每次续订, 演员表中还能看见主角团里又这个小老头(哈哈), 就有了看下去的动力, 演技很好.&lt;/p&gt;

&lt;h3&gt;温明娜&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjagi4drjlj30hs0hsmxw.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;华裔, 在剧中饰演梅琳达·梅, 外号铁骑. 其实在一些美剧中如果看到一些亚洲面孔就能引起我的兴趣, 也算是个小私心. 可能有人不认识她, 但是经典的花木兰动画, 她可是给剧中花木兰配音(英语)的哦. 非常经典, 小时候在CCTV6看过几遍. 而且在最新的花木兰电影中客串了宫女.&lt;/p&gt;
&lt;h3&gt;布雷特·道顿&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjagkev45kj30ii0iit9l.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;别说了, 帅就完了. 剧中饰演神盾局特工布雷特·道顿(第一季), 第四季就几个镜头. 5 6 7就没有他了, 挺帅可惜了. 对剧中角色不能说太多, 容易剧透. 但是这B是真坏.&lt;/p&gt;
&lt;p&gt;还有科学二人组, 席梦思(珍玛·西蒙斯)和痱子(莱奥·菲茨). 编剧就喜欢虐他俩(淦). 提到都是个人比较喜欢的角色. 剧中人物个性都比较强的.&lt;/p&gt;
&lt;h2&gt;剧照&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjah8eoxdzj31hc0u0hdu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;出自第一季第一集的最后, 科尔森的古董车&quot;劳拉&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjahfvpcq4j31hc0u0u0x.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;出自第四季第一集, 恶灵骑士&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjah8dxv6rj31hc0u0u0x.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;出自第五季第一集, 外太空, 讲述特工们被传送之后的故事&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;资源&lt;/h2&gt;
&lt;p&gt;个人是比较喜欢搜集一些高清的电影电视剧来观看的, 下面连接是能找到的清晰度最高的片源以及在人人字幕组搜集的字幕.  连接的访问码, 隐藏了. 提示: Ctrl+A&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.189.cn/t/u2URjaJbQrAf&quot;&gt;https://cloud.189.cn/t/u2URjaJbQrAf&lt;/a&gt; （访问码：wma0）&lt;/p&gt;
&lt;h2&gt;最后&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;其实非常喜欢这部剧, 但是码字的时候发现人物又不能透漏太多(剧透). 说的少了又怕提不起兴趣. 这剧在开始剧情就不是那么紧凑, 但绝不枯燥. 豆瓣评分均在8.5以上, 第七季甚至现在9.4分. 7年长剧已经落幕, 虽然最后很多坑都填上了, 但总感觉缺了点什么. 可能就是那句: &quot;We will return in a moment&quot;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>新域名, 新气象. 博客改造计划(四)</title><link>https://x-item.com/new-name.html</link><guid isPermaLink="true">https://x-item.com/new-name.html</guid><description>域名从virace.cc更换为x-item. 主题也从kratos重新二次创作了.  真的可以重新开始么?</description><pubDate>Sat, 19 Sep 2020 20:34:59 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;其实很早就打算更换域名了, .cc域名前几年不受待见. 没法备案, 搜索引擎权重也低. 最后还是买了这个域名, 含义也比较符合现在的我. 难受的是备案的时候, 从管局工作人员那了解到.cc域名又被工信部认可了.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;新域名&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;X-Item.com&lt;/strong&gt;, 备案的时候像的名字是 &quot;项目X&quot;、&quot;未知的项目&quot;, 但是没办法项目这类词都不让出现在名字里, 想到写程序的时候item和items是我在循环里用的最多的. item就表示一项, 那这意思就是一个X嘛, 那他肯定孤独.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1giwl1uyligj308c08c747.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;其实想的还挺多的, 作为一个普通的社畜, 跟你的同事可能表面上感觉都很熟, 但他可能连你的名字都记不住, 这个环境的你某种角度是孤独的, 你们互相都是未知的. 虽然不想把域名的含义放的太大, 只不过是巧了, 正好反映了现状罢了.&lt;/p&gt;
&lt;h3&gt;网站迁移&lt;/h3&gt;
&lt;p&gt;因为之前用了一个插件, 是可以从地址添加媒体到媒体库的. 导出都是正常的, 但是导入的时候会有问题, 勾选了下载附件吧, 就全变成本地资源了, 不勾选就不导入. 还有就是陈年资源, 最开始不懂WP优化, 没把自动截取图片的函数关掉. 导致很多无用图片在占着茅坑(指硬盘).&lt;/p&gt;
&lt;p&gt;主要还是强迫症犯了, 数据库也趁机整理了一下. 很多很久之前用过的插件、主题生成的已经用不上的文件、数据. 趁这个机会都弄了一下, 费了一番功夫. 现在老域名的博客已经重定向到了现在的域名.&lt;/p&gt;
&lt;h2&gt;主题重构&lt;/h2&gt;
&lt;p&gt;前段时间使用并且修改的是&lt;a href=&quot;https://github.com/xb2016/kratos-pjax&quot;&gt;&lt;strong&gt;kratos-pjax&lt;/strong&gt;&lt;/a&gt;, 基于&lt;strong&gt;kratos&lt;/strong&gt;二次修改而来的. 再经过我收三次修改, 虽然改了一些但总感觉不是那个意思. 因为kratos-pjax这个主题是二次元主题, 虽然好看但是失去了一些黑白, 酷酷的感觉. 虽然二次元很美好, 但可能不是我想在这个博客中想主要体现的一个东西. 最后还是放弃了.&lt;/p&gt;
&lt;p&gt;看了下原作者的主题, 决定自己着手二次开发一下, 简单改了几版感觉还可以, 没有那么难, 毕竟我的PHP水平只能说涉及到基础吧. 9月3号就立了个项, &lt;a href=&quot;https://github.com/Virace/kratos-pe&quot;&gt;https://github.com/Virace/kratos-pe&lt;/a&gt;, 断断续续前前后后一共23次提交. 也算是成型了, 还有很多细节只能是慢慢来了.&lt;/p&gt;
&lt;p&gt;改动还是算挺多吧, 按照自己的习惯整理了代码. 也借鉴了不少&lt;strong&gt;kratos-pjax&lt;/strong&gt;作者的代码(PJAX部分), 还有很多插件不少功能都集成在主题上了. 移动端把Bootstrap的导航栏弃掉了, 改成侧边栏了. 参考的是之前用的 WP Mobile X 这个插件的默认主题.&lt;/p&gt;
&lt;p&gt;还加入了不少动画, 配合PJAX, 个人感觉整体体验还算不错的. 现在有个问题就是调用的资源过多, 导致网页加载的请求非常多. 一定程度上影响加载速度, 目前也是临时用上了 &lt;strong&gt;Autoptimize&lt;/strong&gt; 插件. 后续可能这是个优化方向吧.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个域名的理解自己还是感触颇深的, 你说很多人喜欢探索未知, 喜欢探索未知的美食, 喜欢探索未知的旅途, 喜欢探索未知的世界. 为什么到这你就停下了呢? 最后听首歌吧.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;[music]448316505[/music]&lt;/p&gt;</content:encoded></item><item><title>英雄联盟语音&amp;文字修改教程（Garena10.23测试）</title><link>https://x-item.com/lol-locale-old.html</link><guid isPermaLink="true">https://x-item.com/lol-locale-old.html</guid><description>对于英雄联盟10.17及以前(RiotClient: 21.16)修改方法分析.</description><pubDate>Mon, 07 Sep 2020 15:27:03 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;7月1日的更新后, 国服也开始使用RiotClientServices.exe作为跳转程序启动游戏. 虽然不知道它是干啥的, 但是之前的修改方法失效了. 才有了今天的这个教程, 其实现在修改还更简单了.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;分析过程&lt;/h2&gt;
&lt;p&gt;老方法就不多说了, 许久许久之前在B站直播的时候就已经说过了. 虽然后续有很多人还当首发发视频, 这东西其实首不首发没啥意义.&lt;/p&gt;
&lt;p&gt;老方法也是通过修改配置项来修改区域代码, 比如你是腾讯服的游戏那么代码为zh_CN, 台服就是zh_TW, 以此类推每个服务器都有对应的代码. 都是国家区域代码.&lt;/p&gt;
&lt;p&gt;像一些特殊服, 使用了一些特殊启动器, 那么他不会使用联盟默认的配置启动. 所以导致就算你修改了代码也无法启动. 这里之前写了一个教程: 欺骗世界 &lt;a href=&quot;https://x-item.com/lol-tw.html&quot;&gt;https://x-item.com/lol-tw.html&lt;/a&gt;, 来修改Garena启动的联盟.&lt;/p&gt;
&lt;p&gt;分析其实很简单, 我个人不太习惯直接从程序逆向下手. 主要是技术也不行, 所以就会关注一些明显的配置文件. 比如说: &lt;strong&gt;Riot Client\system.yaml&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggbuz4h7clj20tb0m0q3i.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;打开之后, 注意看下红色框圈起来的部分, 之前的教程就是为了修改这个启动参数. 的来全不费工夫.&lt;/p&gt;
&lt;p&gt;这个 &lt;strong&gt;arguments&lt;/strong&gt; 节点, 就是启动 LeagueClient.exe 程序附加的参数, 可以自己发挥增加一些想要的参数, 亦或者修改下面的 &lt;strong&gt;executable&lt;/strong&gt;和 &lt;strong&gt;relative_path&lt;/strong&gt;来做一些拦截或者测试之类的.&lt;/p&gt;
&lt;p&gt;这个配置文件下面 有个叫 &lt;strong&gt;available_locales&lt;/strong&gt; 意思就是可用语言. 直接无视, 因为只需要修改 &lt;strong&gt;locale&lt;/strong&gt; 参数就可以达到这个效果. 这个参数只是为了在客户端中可以选择其他国家而已(外服).&lt;/p&gt;
&lt;h2&gt;修改教程&lt;/h2&gt;
&lt;p&gt;找到目录中&lt;strong&gt;Riot Client\system.yaml&lt;/strong&gt;的配置文件. 用记事本或者其他IDE打开. 如果你懂yaml格式那就直接找 &lt;strong&gt;partner_product&lt;/strong&gt;—— &lt;strong&gt;arguments&lt;/strong&gt; 找数组中 &lt;strong&gt;--locale&lt;/strong&gt; 参数, 把后面的 &lt;strong&gt;{locale}&lt;/strong&gt; 直接替换成你想修改的区域代码就OK了.&lt;/p&gt;
&lt;p&gt;不懂那个格式也无所谓, 直接查找 &lt;strong&gt;--locale&lt;/strong&gt; 后面同理修改.  如果没有locale就手动添加上&quot;--locale=xx_XX&quot; .&lt;/p&gt;
&lt;p&gt;例如修改为日服环境:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggbuz4ik4bj20te0iqgm2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;后续完善&lt;/h2&gt;
&lt;p&gt;老规矩, 虽然你可以修改, 并且进入游戏大厅文字也能变成对应的区域的. 但是你的选人语音是英语, 并且无法进入游戏, 会崩溃并且弹出崩溃错误收集.&lt;/p&gt;
&lt;p&gt;其实就是缺少对应资源文件罢了, 你需要将你修改的区域游戏资源文件准备好. 例如你修改日服, 那就准备一个完整的日服客户端, 并且准备好安装目录中全部文件名带有 &quot;ja_JP&quot; 的文件对应目录复制.&lt;/p&gt;
&lt;p&gt;并且你要保证文件是对应版本的, 嘛意思? 意思就是如果你的游戏版本是10.12, 那么不要用10.11的日服资源进行复制, 轻者会导致新英雄、新皮肤或者更新的新音效没有任何声音和旧的技能、装备说明. 重者则直接崩溃无法进入游戏.&lt;/p&gt;
&lt;h3&gt;适用情况&lt;/h3&gt;
&lt;p&gt;其实理论上试用任何服务器, 因为还没发现有什么启动器限制这个参数. 所以像Garena 或者 WeGame之类测试都通过. 具体是否可以试用还得自行测试一下, 就算是无法使用, 还有欺骗世界大法呢: &lt;a href=&quot;https://x-item.com/lol-tw.html&quot;&gt;https://x-item.com/lol-tw.html&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有朋友问我说, 你不是有个收费项目么改语音, 为什么把方法发出来. 其实那个项目提供的是下载服务, 我提供在国内稳定的下载速度, 并不是某个方法而收费. 所以并不冲突, 而且也有很多朋友喜欢自己修改. 当然如果你对自己修改比较反感: &lt;a href=&quot;https://lol.virace.cc&quot;&gt;https://lol.virace.cc&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>4K分辨率下英雄联盟优化</title><link>https://x-item.com/league-of-legends-for-4k.html</link><guid isPermaLink="true">https://x-item.com/league-of-legends-for-4k.html</guid><pubDate>Fri, 10 Jul 2020 06:22:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;其实三月份就换了4K显示器, 也就是测试的时候跑了一下. 这几天发现点问题, 4K分辨率下鼠标很小, 打团找不到鼠标在哪, 经常反向技能. 而且聊天框很小这字得贴上看.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;测试环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;27寸4K显示器&lt;/li&gt;
&lt;li&gt;距离40厘米左右&lt;/li&gt;
&lt;li&gt;Windows10系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;系统默认200%缩放, 150%其实也行. 游戏大厅适配的不错, 毕竟是 Chromium 内核, 这方面还是很好处理的. 游戏内部很多还在使用flash年代的东西, 缩放部分做不好也情有可原.&lt;/p&gt;
&lt;h3&gt;问题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;鼠标太小, 默认缩放最大100(%)&lt;/li&gt;
&lt;li&gt;聊天框太小&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;分析过程&lt;/h2&gt;
&lt;p&gt;其实在很早很早之前, 写过一个修改游戏内推荐装备的脚本. 就翻过那些配置文件, Tencent 和 Garena系列, 这些配置文件在 &lt;strong&gt;安装目录\Game\Config&lt;/strong&gt; . 其他服务器配置文件就在 &lt;strong&gt;安装目录\Config&lt;/strong&gt; 下.&lt;/p&gt;
&lt;p&gt;有兴趣可以研究一下, Champions文件夹就是每个英雄的推荐出装. 国服是有个 game.cfg 文件的, 不知道其他服务器有没有. 最开始翻到的时候就知道这是游戏内的设置.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gge6yeryz8j20sj0v03zw.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;简单看一下, 什么主题音乐啊、鼠标指示器啊、鼠标速度、开启音乐啥的.  那很明显 &lt;strong&gt;CursorScale&lt;/strong&gt;, 就是来修改鼠标指针比例的. 再往下翻可以找到一个 &lt;strong&gt;ChatScale&lt;/strong&gt;那就是来修改聊天框比例的.&lt;/p&gt;
&lt;p&gt;哎, 别着急去修改. 因为这个文件修改没用! 虽然这个文件会随着游戏内设置改变而改变, 但是不能反向操作. 但是记住上面两个关键字.&lt;/p&gt;
&lt;p&gt;在看下一下 &lt;strong&gt;PersistedSettings.json&lt;/strong&gt; 文件, 很眼熟. 直接搜索上面两个关键词, 能找到并且和刚才那个文件的值相同.&lt;/p&gt;
&lt;h2&gt;修改方法&lt;/h2&gt;
&lt;p&gt;修改文件: &lt;strong&gt;安装目录\Game\Config\PersistedSettings.json&lt;/strong&gt; 或者 &lt;strong&gt;安装目录\Config\PersistedSettings.json&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直接搜索 &lt;strong&gt;CursorScale&lt;/strong&gt;和 &lt;strong&gt;ChatScale&lt;/strong&gt;, 鼠标比例是倍数而聊天框是百分比.&lt;/p&gt;
&lt;p&gt;我修改的鼠标是2.5000, 聊天框是260. 这两个值就自己去训练模式测试了, 多少合适自己看着舒服.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gge867ar1xj21hc0u042l.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;待解决问题&lt;/h2&gt;
&lt;p&gt;别高兴太早, 鼠标放大是否会存在误操作? 很明确告诉你会. 但是还好, 在可接受的范围内. 但在鼠标指向小兵的时候还会出现偏移的问题.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gge867c1d3j21hc0u042s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;木的办法, 这只能等拳头来适配了.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;游戏类就目前来说对于主流网游, 还是2K分辨率比较好. 4K在游戏上适配都都不是太好. 只能说支持4K显示, 然而体验~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>618购物贴 &amp; 硬件升级第二阶段开箱</title><link>https://x-item.com/2020-618-after.html</link><guid isPermaLink="true">https://x-item.com/2020-618-after.html</guid><pubDate>Thu, 02 Jul 2020 18:19:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;除内存外全部京东自营购买, 本地仓几乎都有货. 到货很快, 最慢的应该是淘宝的内存条以及CPU, CPU是从外地调货.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;配置单&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;AMD 3950X&lt;/li&gt;
&lt;li&gt;微星 X570 暗影&lt;/li&gt;
&lt;li&gt;微星 2070S 魔龙X&lt;/li&gt;
&lt;li&gt;科赋 雷霆 16x2&lt;/li&gt;
&lt;li&gt;西数 SN570 500G + 海康威视 C2000PRO 1T&lt;/li&gt;
&lt;li&gt;振华 HG 750w&lt;/li&gt;
&lt;li&gt;猫头鹰 D15S&lt;/li&gt;
&lt;li&gt;酷冷 S600升级版&lt;/li&gt;
&lt;li&gt;G403&lt;/li&gt;
&lt;li&gt;MX Keys&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前排说一下以后可能加个硬盘和内存, 整体是没有什么升级的意愿了. 这可能是吧. 最后一次折腾这些东西.&lt;/p&gt;
&lt;h2&gt;开箱&lt;/h2&gt;
&lt;p&gt;编写顺序为, 到货顺序.&lt;/p&gt;
&lt;h3&gt;西数SN750&lt;/h3&gt;
&lt;p&gt;没什么好说的其实, 这次入手是599元. 自营嘛没有再多的优惠了, 图个省心. 查了一下序列号质保到2025年6月23日, 质保五年没有任何问题。一如既往抽奖金手指有痕迹, 通电时间为0.&lt;/p&gt;
&lt;p&gt;这玩意第一个到的, 没环境测试. 两个笔记本都是一个M.2接口, 而且都是系统盘, 这么着急测试犯不上.&lt;/p&gt;
&lt;h3&gt;MX Keys&lt;/h3&gt;
&lt;p&gt;颜值没得说, 手感没得说, 价格699. 淦, 这可能是今年买的最百家的产品了. 但也是购买后试用一下午感觉最值得一款产品. 这跟我笔记本(G7 7588)自带的一比, 笔记本自带那个是一坨屎啊.&lt;/p&gt;
&lt;p&gt;手感真的, 是我用键盘以来手感最好的了. 之前用过Cherry的茶、红、青, 还有前些天入手的矮轴, 键程都太长. 手指腱鞘炎那些长键程的键盘使用时间长, 关节非常疼. 这个用了一下午感觉没什么问题, 也有可能是心理作用.&lt;/p&gt;
&lt;h3&gt;微星 2070S 魔龙X&lt;/h3&gt;
&lt;p&gt;计划是魔龙Z, 但是618魔龙Z全国只有江西三个市有货, 其实是一个仓发货. 问客服客服说全国都没货, 还是写了个脚本把所有市都跑了一遍才发现的. 没办法本地没货, 要是转发还有一系列问题, 怕麻烦就买了魔龙X.&lt;/p&gt;
&lt;p&gt;魔龙X 618当天本地仓也是秒没(3个小时), 下单是提示从广州调货, 刷新了几次本地仓又又活了估计是有人退了. 赶紧重新拍, 显卡也是大件中到货最快的了. 因为拆封没办法退, 所以就先看看封皮吧~&lt;/p&gt;
&lt;p&gt;严谨一些, 所有硬件没到的时候, 大件不拆封. 如果有问题赶紧换, 现在拆了也没法测试.&lt;/p&gt;
&lt;h2&gt;上机&lt;/h2&gt;
&lt;p&gt;原本的开箱已经准备好了照片啊, 小视频之类的. 但是他娘的, 大件全部京东换货. 具体查看: &lt;a href=&quot;https://x-item.com/2020618jd.html&quot;&gt;https://x-item.com/2020618jd.html&lt;/a&gt; 导致心思全在开箱验机上, 并没有拍什么正常的照片, 都是全程的开箱录像.&lt;/p&gt;
&lt;p&gt;所以图什么, 还有其他商品的介绍就都取消了. 也是京东弄得没什么心情了.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggd6yc34v9j20u01t01kx.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;618购买的自营商品, 换货直到7月1日才算是结束. CPU换货换了TMD10多天.&lt;/p&gt;
&lt;h3&gt;性能&lt;/h3&gt;
&lt;p&gt;3D Mark 随便跑了一个超频测试:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggd74l1tzhj22iz187x6p.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;对于这个评分, 说实话没有概念. 象征性发一发~~~&lt;/p&gt;
&lt;p&gt;CinebenchR20跑分就一般了,  并没有达到一些媒体测试的成绩. 应该是主板BIOS超频方面没有调整.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggd74kx970j20kp06ujrh.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;后续稍微改了一下风扇策略, 能上9000多, 不超频感觉可以了. 实际使用的时候相比之前那个笔记本(I7-8750H), 有不小的提升就行了.&lt;/p&gt;
&lt;h2&gt;其他&lt;/h2&gt;
&lt;p&gt;机箱买的时候以为是灰色, 到手发现是纯黑. 并不是发错货, 而是商品图片光打得好, 可以搜索酷冷至尊S600. 而且以为机箱自带的两个风扇很静音, 最后开机就他俩声音最大. 猫头鹰不说了, 声音大小根本听不出来. 因为另外两个声音实在太大了. 精神衰弱者慎用.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;梦想中的开箱文章, 图文并茂. 实际就这样, 被这个京东弄得挺闹心.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1ggd7fmkpucj20g20cxwg2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;买都买了, 到都到了, 大件都装上了.  其实还差一个机械硬盘, 看情况准备双11购入. 正式的剪辑特效生涯就要开始了.&lt;/p&gt;
&lt;p&gt;至于鼠标和键盘, 用段时间单拿出来讲一下吧.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这套设备满载也就不到500W, 其实也挺费电的. 电费以后也是一笔不小的开支.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>英雄联盟语音&amp;文字修改教程</title><link>https://x-item.com/lol-locale.html</link><guid isPermaLink="true">https://x-item.com/lol-locale.html</guid><description>对于英雄联盟10.18(RiotClient: 21.17)修改方法分析.</description><pubDate>Wed, 01 Jul 2020 13:58:44 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;美服10.18版本更新之后, 这个拳头弄得启动器又改了运行机制了. 修改方式都是一样, 离不开一个关键词 “&lt;strong&gt;locale&lt;/strong&gt;”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;分析过程&lt;/h2&gt;
&lt;p&gt;之前的方法可以查看: &lt;a href=&quot;https://x-item.com/lol-locale-old.html&quot;&gt;老英雄联盟语音&amp;amp;文字修改教程(10.18版本之前修改方法)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个方法也是跟进这个Riot启动器修改的. 那时候刚改版, 所有配置文件都是套用的老一样. 所以会把locale直接放在配置文件. 以下是分析过程, 看看就行. 修改教程左侧目录直接下跳.&lt;/p&gt;
&lt;p&gt;这个修改方法早就出来了, 只不过最近一直在忙主题修改和域名修改. 博客会迁移, 很多数据需要有变动. 另外后续也在贴吧看到有大佬分析了, 只不过是PBE的, 和博主自己找到的是相同的, 经过测试也适用于任何服.&lt;/p&gt;
&lt;p&gt;回到正题, 更新之后还是尝试修改system.yaml文件, 但发现会恢复, 就算是设置文件权限, 文件不会变但是也不会导致游戏改变, 说明这个文件可以理解为被架空了. RiotClient这个启动器会发现配置与网络的不同, 直接不用本地的配置文件.&lt;/p&gt;
&lt;p&gt;这个文件夹里仅有的一个配置文件无法修改, 那说明真的配置在其他位置. 随后看了一下启动进程的参数.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1giii3bp4aej30ri05v75b.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--log-dir=C:/Users/Virace/AppData/Local/Riot Games/Riot Client/Logs
--user-data-root=C:/Users/Virace/AppData/Local/Riot Games/Riot Client
--app-root=C:/Riot Games/Riot Client
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;挑有用的看, log-dir是日志文件夹, 第二个是用户配置文件, 自动登录啥的数据应该在这. 第三个是程序根目. 直接看了一下配置文件, 熟悉的配方: &quot;C:\Users\Virace\AppData\Local\Riot Games\Riot Client\Config\RiotClientSettings.yaml&quot; 这个文件打开,是和&lt;strong&gt;6.24版本&lt;/strong&gt;之后修改方法的配置文件一样得. 兴高采烈的修改了以下, 然后进入游戏发现卵子用没有.&lt;/p&gt;
&lt;p&gt;还有一个&lt;strong&gt;ClientConfiguration.json文&lt;/strong&gt;件, 这个文件内容之前再国外的一个交流群里见过, 就是要给官方的配置. 每次启动都会和官网对比是否相同. 想修改的话不用看, 拳头历代配置文件用的都是&lt;strong&gt;yaml&lt;/strong&gt;不是&lt;s&gt;json&lt;/s&gt;.&lt;/p&gt;
&lt;p&gt;MD这时候已经来来回回启动游戏很多次了, 那就从日志文件下手. 日治文件一般会记录程序运行过程中的一些信息.  “&lt;strong&gt;C:\Users\Virace\AppData\Local\Riot Games\Riot Client\Logs\Riot Client Logs&lt;/strong&gt;” 这个日志目录里面放着启动器的日志, 打开一个最新的,&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1giii3bnx8cj30jy05e74n.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接着发现了一个新的目录, “&lt;strong&gt;C:/ProgramData/Riot Games/Metadata&lt;/strong&gt;”. 简单来说找配置的方法就是, 直接搜索*.yaml, 让后看下内容感觉像, 那就直接修改试一下.&lt;strong&gt;穷举法！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1giii3bo5bqj30hc05ft8y.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看下文件名找关键字, live 和 pbe这是本地安装了美服正式服和PBE, 如果你只安装某个服, 那么直接搜索的结果, 除“Riot Client.settings.yaml”文件外应该只有一个配置文件. 打开看了一下感觉像是, 给RiotClient准备的游戏配置文件, 安装位置等一些参数.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/09/008aYkguly1giii3bomhcj30jj0e9aav.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;画红圈的位置就是本文的关键词 &quot;&lt;strong&gt;locale&lt;/strong&gt;&quot;, 这里解释一下为什么上面也有locale但是没有去修改, 确实分析的时候真没试, 也忘了当时怎么想的了= =.&lt;/p&gt;
&lt;p&gt;猜一下自己当时的想法: locale_data意思是本地数据, available_locales为允许的区域, default_locale默认的区域. 在available_locales这个数组中添加一个其他的区域, 然后其余都不改. 那么应该是可以在Riot的启动器设置上选择的.这个可以对比pbe的配置文件, 但是没什么乱用, 拳头会检测这个数组. 治章操作&lt;/p&gt;
&lt;p&gt;而setting项下面的locale是直接控制程序的启动参数, 直接无视上面的什么允许的区域啥的.&lt;/p&gt;
&lt;h2&gt;修改教程&lt;/h2&gt;
&lt;p&gt;找到目录 “&lt;strong&gt;C:\ProgramData\Riot Games\Metadata&lt;/strong&gt;”, 美服正式服的文件名是league_of_legends.&lt;strong&gt;live&lt;/strong&gt;, 测试服就是live修改为pbe而已. 相对的找到league_of_legends.&lt;strong&gt;live&lt;/strong&gt;.product_settings.yaml 这个配置文件, 注意加粗的单词, 可能会随着你安装不同区服而变化.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/008aYkguly1giii3bpwbaj309z02t0sm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;locale直接修改就可以了, 注意区域代码的大小写. 例如: ja_JP, zh_CN等等&lt;/p&gt;
&lt;p&gt;鉴于国服和Garena的RitoClient貌似都没有更新到20.17, 所以只能等待更新后再进行分析了, 现在还是可以用文章顶部连接的老办法修改.&lt;/p&gt;
&lt;h2&gt;后续完善&lt;/h2&gt;
&lt;p&gt;老规矩, 虽然你可以修改, 并且进入游戏大厅文字也能变成对应的区域的. 但是你的选人语音是英语, 并且无法进入游戏, 会崩溃并且弹出崩溃错误收集.&lt;/p&gt;
&lt;p&gt;其实就是缺少对应资源文件罢了, 你需要将你修改的区域游戏资源文件准备好. 例如你修改日服, 那就准备一个完整的日服客户端, 并且准备好安装目录中全部文件名带有 &quot;ja_JP&quot; 的文件对应目录复制.&lt;/p&gt;
&lt;p&gt;并且你要保证文件是对应版本的, 嘛意思? 意思就是如果你的游戏版本是10.18, 那么不要用10.17的日服资源进行复制, 轻者会导致新英雄、新皮肤或者更新的新音效没有任何声音和旧的技能、装备说明. 重者则直接崩溃无法进入游戏.&lt;/p&gt;
&lt;h3&gt;适用情况&lt;/h3&gt;
&lt;p&gt;其实理论上试用任何服务器, 因为还没发现有什么启动器限制这个参数. 所以像Garena 或者 WeGame之类测试都通过. 具体是否可以试用还得自行测试一下, 就算是无法使用, 还有欺骗世界大法呢: &lt;a href=&quot;https://x-item.com/lol-tw.html&quot;&gt;https://x-item.com/lol-tw.html&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有朋友问我说, 你不是有个收费项目么改语音, 为什么把方法发出来. 其实那个项目提供的是下载服务, 我提供在国内稳定的下载速度, 并不是某个方法而收费. 所以并不冲突, 而且也有很多朋友喜欢自己修改. 当然如果你对自己修改比较反感: &lt;a href=&quot;https://lol.virace.cc&quot;&gt;https://lol.virace.cc&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>维权记录: 2020年618我与京东传话员的那些事</title><link>https://x-item.com/2020618jd.html</link><guid isPermaLink="true">https://x-item.com/2020618jd.html</guid><description>618与京东客服扯皮, 维权的那些事. 12315牛逼.</description><pubDate>Tue, 23 Jun 2020 08:36:47 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本来开箱文章已经在编写了, 但是接连发生的事情真的是忍无可忍. 客服的退脱, 专员的怠慢, 售后体制的不完善......&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;618当天在京东购买了&quot;一套&quot;散件, 准备组一台电脑, 配置之前说过了. 再京东自营商店共消费了近1W6千元, 然而得到的却是一堆二手货.&lt;/p&gt;
&lt;h3&gt;618临时涨价&lt;/h3&gt;
&lt;p&gt;第一个问题就是618当天在商品活动未结束的时候, 公然将产品价格调整为日常价格.&lt;/p&gt;
&lt;p&gt;举例: 自营商品猫头鹰散热器D15S, 17日商品首页预告24小时抢购550元. 次日也就是18日中午, 调整价格为609. 其实不止这一个, 很多商品都在这个时间段进行了涨价处理, 而且都是活动未结束的状态.&lt;/p&gt;
&lt;p&gt;联系客服, 客服称抢购为&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;限量&lt;/mark&gt;, 在卖出一定数量之后价格会有所调整. 但是询问是否有明确信息告知用户限量, 并没有. 言外之意就是说在活动未结束的情况下, 进行涨价是一个正常操作.  经过与8位电话客服的沟通, 最终客服专员&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;承认了活动设置问题&lt;/mark&gt;, 并将反馈此问题. 且基于差价补偿.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gg2jjoswlvj22uq0eldn1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;红色&lt;/mark&gt;标注客服纯属浪费事件,&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;黄色&lt;/mark&gt;比较恶劣. &lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;绿色&lt;/mark&gt;为解决. 气愤在什么地方, 经过18日三个客服的反馈, 就得到了一个推脱责任并且想要把责任推到用户身上的黄色客服.&lt;/p&gt;
&lt;p&gt;因为京东要求&lt;strong&gt;出示商品降价的截图&lt;/strong&gt;, 也就是如果没有截图他们不承认. 还好之前下了单但是没支付, 因为在等晚上8点叠蛋糕开奖. 有订单记录还有与客服沟通时候商品的图片. 这个黄色客服试图从我没下单的订单找问题, 称: &quot;不是我们没给您优惠, 是给了然后你没支付&quot;.&lt;/p&gt;
&lt;p&gt;言外之意还是活动期间改价正常, 真实不知道京东在哪找的这些个烂蒜. 客服工号: 301833&lt;/p&gt;
&lt;p&gt;最后为什么会处理,并且承认过错是活动设置错误? 是因为向12315发起了投诉. 绿色为&quot;京东关怀专员&quot;, 企业收到消息够快的, 一天时间. 19号投诉20号上午就回电了.&lt;/p&gt;
&lt;p&gt;虽然说承诺退还差价并且承认了错误, 但因为下面的事件导致目前还无法退还.&lt;/p&gt;
&lt;h3&gt;二手商品&lt;/h3&gt;
&lt;p&gt;618买的东西, 最慢的是一个3950x的CPU, 从外地调货22号才送达. 其专员也是承诺在确认收货后次日返还差价, 可以理解, 因为怕你退货来骗差价的.&lt;/p&gt;
&lt;p&gt;于此同时之前到货的MX Keys键盘, 在晚上使用背光的情况下发现, CapsLock(大写锁)按键开裂, 正常使用根本看不见, 只有背光透过来才可以发现. 另外这个键盘换货已经换了两次, 还在换货中...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gg2kc1ejaqj211u0n0jxm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从而想到了一个问题, 买了套配件所有商品都不是一个店铺, 虽然都是自营但都不是一个店铺, 万一其中有一个有问题, 其他硬件都没办法测试. 联系到客服, 反应这个问题, 客服称给备注次日24小时会有协商主管回电. 过了两天并没有.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;然而巧的来了, 让我说中了. 就等这个CPU回来装机, 到了之后拆箱就发现CPU不干净, 后盖上有污渍. 这都没在意, 反过来的时候仔细看了一下, 针脚竟然是弯的. 结合了污渍问题, 认定这个是个二手商品. 亦或者物流的问题, 因为&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gg2krt0bz6j20wt0ceace.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;紧接着把我6 7 年前买的懒人手机支架(9.9包邮)拿了出来, 夹在桌子上录像. 把显卡和主板在全程录制视频的情况下开了箱. 结果显卡金手指有痕迹, 客服称出厂检测. 嗯, 好, 理解. 接着仔细一看发现背面板所有&lt;strong&gt;螺丝都有拧过的痕迹&lt;/strong&gt;, 螺丝十字花有些变形.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a56f73d7ly1gg2kqvfprnj20u03b8gqp.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;遇到问题第一时间与店铺客服, 也就是供应商客服核实. 问一下这个问题是不是正常的, 你们出厂的时候会不会有这些问题. 确认完毕之后申请换货. 至此, 开箱的CPU、主板、显卡均申请换货.&lt;/p&gt;
&lt;p&gt;但是有个问题, 为什么会收到二手商品, 因为所有包装封贴都是完好无损的. 这个二手显卡是怎么进入到京东仓库的呢?&lt;/p&gt;
&lt;p&gt;至此6月23日, 京东618共购买与电脑有关的9件商品, 换货中4个, 未开封4个. 目前没问题的1个. 其实主板啊, 只是有几道划痕而已, 不影响使用. 但因为当时比较气愤, 而且考虑到主板外面有袋子没办法划到所以也申请了换货.&lt;/p&gt;
&lt;p&gt;已经与客服反映, 要求赔偿损失. 并且追责到个人. 二手商品怎么来的, 需要找出负责人. 客服还未给我回复, 因为换货周期很长. 主板换货申请从21号拖到了23号才审核. 客服称, 27号会回电.&lt;/p&gt;
&lt;h2&gt;2020年6月28日&lt;/h2&gt;
&lt;p&gt;截至到28日, AMD 3950x还在换货中, 客服称需要反场检测周期7~15天. 换新的主板、显卡均已到货. 还未开箱原包装放在家里. 等CPU回来之后全程录像或者直播开箱. 要么一点证据都没有&lt;/p&gt;
&lt;p&gt;实习客服, 一问一愣, 问一句查一下, 说的最多的就是&quot;您稍等, 我查询一下&quot;. 大家在处理售后问题时, 避开这些客服. 第一句问一下是不是实习客服, 如果是那请靠边站. 当然不排除实习期间也有干的不错的, 太少了, 可没太多时间跟客服扯皮.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;这个总结是在2020年9月28日编写的, 具体细节就不说了. 因为最后也没有协商成功, 找了3次12315, 未果. 之前键盘赔偿了30元, 我的诉求是其他换货商品也按照键盘的赔偿比例赔偿, 最后算下金额是300+. 协商到最后京东客服是申请了200, 未接受然后投诉到了12315.&lt;/p&gt;
&lt;p&gt;12315一共两次投诉记录(一次网站一次电话), 一次举报记录. 举报记录至今, 没错是至今都是&quot;待受理&quot;, 这是分配给&quot;北京市开发区市场监管管理局&quot;之后的一个结果. 举报的是二手显卡问题. 网站在线投诉未果, 就变为&quot;已撤诉&quot;状态了. 电话客服还算好, 过了一个月时间, 没错是一个月. 来个电话, 先说协商成功了, 京东方面愿意赔付300元, 确认好后挂了电话. 没超过5分钟, 同一个人同一个电话, 突然变卦, 说搞错了.&lt;/p&gt;
&lt;p&gt;这还能说啥, 市场监督管理局的都不管, 确认好的东西还能弄错. 不说啥了, 下次注意吧. 这你还有啥脾气, &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;所谓国家官方处理都得1个月还能弄错的东西&lt;/mark&gt;&lt;/strong&gt;. 原谅京东了.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后只能说一句, &lt;strong&gt;氧化钙&lt;/strong&gt;的京东自营.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>618购物帖 &amp; 硬件升级第二阶段</title><link>https://x-item.com/2020-618.html</link><guid isPermaLink="true">https://x-item.com/2020-618.html</guid><description>618网购实录, 到货后会第一时间做开箱. 硬件升级第二阶段, 要勒紧裤腰带了.</description><pubDate>Tue, 16 Jun 2020 05:56:45 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;不得不说拼多多在活动降价方面做的很好, 虽然微信可能会呗什么拼单、领钱、种树、砍价等信息骚扰. 但至少这不是&quot;节日限定&quot;, 也不用叠什么蛋糕, 也不用打开卡的一笔的淘宝弄什么高铁.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于今年网购一直出于脸黑状态, 所以所有大部分商品都准备再京东自营购买.&lt;/p&gt;
&lt;h2&gt;清单&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;组装一套台式&lt;/li&gt;
&lt;li&gt;罗技 MX Keys&lt;/li&gt;
&lt;li&gt;米家台灯(没错就是&lt;a href=&quot;https://x-item.com/no-mijia.html&quot;&gt;之前吐槽&lt;/a&gt;的)&lt;/li&gt;
&lt;li&gt;捶背器(给家里人买的)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;台式在下面细说. 对罗技MX Keys这个键盘垂涎已久, 之前的阿米洛红轴已经撤下了. 想着买个薄膜养养腱鞘炎, 之前看Zealer的辛总用的Craft看起来不错, 奈何价格太贵. 也只是看看而已, 至于MX Keys和Craft的区别在我这看可能就是旋钮了, 自己也用不上, 没必要花多余的前给一个音量旋钮(可以自定义, 那也用不上).&lt;/p&gt;
&lt;p&gt;台灯一直没有发现一个比较好的, 最近米家也众筹了一个显示器挂灯, 试用过不是我要的效果. 还是整理环境光亮一点对眼睛比较舒服, 然而吸顶灯距离桌子有段距离所以换吸顶灯感觉效果一般. 再给米家台灯一次机会, 看看不同批次还会不会有电流声.&lt;/p&gt;
&lt;img alt=&quot;&quot; /&gt;
&lt;p&gt;捶背器在前几天买了一款, 小米有品又一款金稻牌子的评价还不错. 就去京东找到了官方店铺买了一款售价为179元的一款, 发的普通快递到货插电按钮没有任何反应. 知道为啥今年网购脸黑了吧, 只能去找京东自营(审核快换货快).&lt;/p&gt;
&lt;h2&gt;硬件升级&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;主板: X570&lt;/li&gt;
&lt;li&gt;CPU: 3700X or 3900X&lt;/li&gt;
&lt;li&gt;内存: 16x2 3200&lt;/li&gt;
&lt;li&gt;显卡: 2070Super&lt;/li&gt;
&lt;li&gt;SSD: 500+1&lt;/li&gt;
&lt;li&gt;&lt;s&gt;机械硬盘: 3T以上&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;电源: 650W or 750W&lt;/li&gt;
&lt;li&gt;散热: 风冷 猫头鹰D15S&lt;/li&gt;
&lt;li&gt;机箱: 静音&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;主板&lt;/h3&gt;
&lt;p&gt;考虑到后续升级CPU, 以及双M.2(NVMe)接口, 所以选择X570. 至于M.2接口B450第二个接口PCI-E2.0, X470则为3.0. 考虑到主板可能在短期(3年)内更换几率不大, 而且可能还有一点点可能用这两个M.2组RAID. 则考虑在以下产品中购买: &lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;ROG Strix X570-E&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;华硕 TUF X570-PLUS&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;华擎 X570 Taichi&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;微星 MEG X570 UNIFY&lt;/mark&gt;. 主板资料不多, 对于供电部分测试少之又少. 门外汉只能闭眼睛买~~~~&lt;/p&gt;
&lt;h3&gt;CPU&lt;/h3&gt;
&lt;p&gt;3700X没什么好说的, 对于生产力来说AMD还是香. Intel虽然发布了10代桌面U, 但还没有看得上的, 不管是实际测试还是参数. 因为吃饭的家伙, 所以最后可能会上3900X, 这样这套配置5年内应该不会有啥变化.&lt;/p&gt;
&lt;h3&gt;内存&lt;/h3&gt;
&lt;p&gt;可能不会超频吧, 又想玩玩. 保守点买个3200频率的, 就算不超也能保持一个不错的状态. 所以可能考虑在以下产品中购买: 科赋 雷霆 16Gx2套条、&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;十铨 16Gx2套条&lt;/mark&gt;.&lt;/p&gt;
&lt;h3&gt;显卡&lt;/h3&gt;
&lt;p&gt;观看了B站: &lt;a href=&quot;https://www.bilibili.com/video/BV1zK4y1b75d&quot;&gt;硬件大玩家对2070S系列显卡的测试&lt;/a&gt;, 最终在以下产品中选择: &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;微星 魔龙Z or X&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;七彩虹 火神 X OC&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;七彩虹 2080S 火神 X OC&lt;/mark&gt;、&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;七彩虹 AD OC&lt;/mark&gt;. 因为30系列要发布的原因, 对于2080S购买欲望不高. 微星魔龙X或者Z看中的是噪音, 七彩虹火神则是性能, 至于AD OC则是价格. 更多还是七彩虹的售后, 但京东自营购买问题应该不大.&lt;/p&gt;
&lt;h3&gt;SSD &amp;amp; 机械硬盘&lt;/h3&gt;
&lt;p&gt;系统盘以及安装软件 给500G, 小素材以及项目文件存储1T. 选择不多: &lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;西数 SN550 1T&lt;/mark&gt; + &lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;西数 SN750 500G&lt;/mark&gt;. 差距都不多, 所以不打算上三星那些. 对于机械硬盘在知乎老哥的提醒下排除了叠瓦式(SMR)该换垂直式(PMR), 所以选择东芝的一款3T 7200转的硬盘. 因为手头还有一个西数黑盘1T在装素材, 所以这个机械目前不是刚需, 而且618价格似乎不太美丽, 可能转到双11在看看.&lt;/p&gt;
&lt;h3&gt;电源 &amp;amp; 散热 &amp;amp; 机箱&lt;/h3&gt;
&lt;p&gt;电源&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;振华的GX650&lt;/mark&gt; 或者 HG750 , 并不是固定选择近期如果有其他选择会更换. 散热 &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;猫头鹰D15S&lt;/mark&gt; 要的就是静音.  机箱是酷冷的S600升级版, 要的也是静音. 当然外观也非常不错.&lt;/p&gt;
&lt;h3&gt;价格&lt;/h3&gt;
&lt;p&gt;这套东西京东自营下来不便宜, 1W5左右. 618部分商品优惠力度也不是特别大. 没办法疫情原因细节就不多说了, 现在就靠这套配置打翻身仗, 只能上了. 顶多肉疼十天半个月或者俩月仨月也有可能一年半载的, 勒紧裤腰的日子来了.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这次618后网购可能就很少了(主要是钱包不美丽), 这个系列还没发几篇文章就有夭折的迹象了. 争取后续在拼多多买的小件也拿出来分享以下.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>米家, 这不应该是当下的小米</title><link>https://x-item.com/no-mijia.html</link><guid isPermaLink="true">https://x-item.com/no-mijia.html</guid><pubDate>Mon, 18 May 2020 17:28:21 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;之前硬件升级的文章提到了, 购买了&lt;strong&gt;米家台灯Pro&lt;/strong&gt;, 这篇文章本来是台灯以及一款密家插线板的测评. 对于台灯的方面字已经码的差不多了, 只可惜现在这两个商品都已经退货了, 而且闹得很不愉快.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;质量问题&lt;/h2&gt;
&lt;p&gt;遇到了严重的质量问题, 起除我还在怀疑是否是产品批次问题. 插线板是米家6位插线板基础款. 最没想到的是插线板也有问题, 从小米出插线板产品的时候就一直在使用, 以至于前几天(2020年5月份)官网众筹插线板27W快充版也是第一时间支持购买. 好在这个众筹的插线板没有问题.&lt;/p&gt;
&lt;h2&gt;米家插线板6位[基础版]&lt;/h2&gt;
&lt;p&gt;就不上图了, 还占用资源. 有兴趣可以点击这个标题去官网看下. 之前的硬件升级文章提到了, 购买了一张140x70的桌子. 想的是众筹的3位27W快充的版本粘在桌子左侧, 6位版放在右侧桌子底下. 如果有兴趣之后走线彻底弄好之后发图给大家看看.&lt;/p&gt;
&lt;h3&gt;亮点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;开关以及USB孔位, 都适合放在桌子底下盲操作&lt;/li&gt;
&lt;li&gt;微动开关, 而且断电后不会恢复(没错在我这是个优点)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;开关使用的是微动开关, 而且差点后开关还有不同的声音(不插电没有)用来分辨是否开关的. 而断电后不恢复, 是我觉得很少会断电, 如果出现断电那么就是家里设备短路或者其他电路问题, 怕恢复的瞬间电流太大损坏电器. 而且桌子上也没有长时间需要插电的东西.&lt;/p&gt;
&lt;h3&gt;问题&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;不开开关的时候, 仅插电. 开关位置会有发热问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为不懂实际构造, 但从常识上来说如果用电都会发热. 热量是哪来的? 得遵守质量守恒吧. 那么可以确定就算不开开关得时候也在用电(用电量很少而已). 然而只有开关位置发热, 开关位置除了微动和一个很小得LED之外不知道还有没有其他东西, LED没工作不可能产生热量, 所以我觉得是这个微动开关得问题. 具体如果有个电子机械专业的童鞋来解答一下最好了.&lt;/p&gt;
&lt;p&gt;和客服确认这种情况是不正常的建议售后换货.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/cs.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;因为第一次购买是在官方商城, 官方商城换货比较麻烦. 需要等换的东西工程师检测完新的才能发。所以直接退货了, 在京东自营下的单. 我一般买什么东西都先去对应的官方商城去买, 如果第一个收到的东西有换货的问题, 那么直接京东自营. 这样可以保证无缝衔接和后续退换货方便.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/jd_return.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后就在京东经历了: 换货——换货——退货的体验. 都是同样一个问题, 最后一个换的插线板竟然还是用过的, 有使用痕迹的. 这就是京东啊~~~~&lt;/p&gt;
&lt;p&gt;和京东反馈后, 客服给我回电话说给我2000京豆(可以抵值20元), 让我收下这个二手而且还有质量问题的商品, 不知道为什么京东还有这样的客服. 最后退货不欢而散, 京东单方面补偿1000京豆.&lt;/p&gt;
&lt;p&gt;至此插线板到我手里的一共是4个. 全都是2019年11月产的, 我理解为同一批货. 所以香小米官方客服多次反应这个问题. 为什么说是多次的, 因为前几次客服不以为然, 觉得你这个只是小概率事件, 而且还给你售后. 最后4个插线板都推掉, 在根客服反馈的时候态度变了, 说补偿50无门槛优惠券. 接下来的问题就要结合台灯了.&lt;/p&gt;
&lt;h2&gt;米家台灯Pro&lt;/h2&gt;
&lt;p&gt;一样不发产品图了, 有兴趣点上面连接. 这也不是一款新商品了, 也有一年多了.  小米出台灯产品也有3年多了. 个人是比较喜欢这款台灯了, 无极调节色温、亮度; 小爱控制等等.&lt;/p&gt;
&lt;h3&gt;亮点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;最下面的转轴可以在XY轴方向旋转&lt;/li&gt;
&lt;li&gt;无极旋钮&lt;/li&gt;
&lt;li&gt;外观&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;放在桌角和目前整体非常搭的一款台灯, 对台灯本体可是非常之看重. 而且在夜间使用亮度和色温也可以按照自己喜欢调整到一个很好的等级.&lt;/p&gt;
&lt;h3&gt;问题&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;电源适配器很大电流声&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;毫不夸张, 不知道看文章的有没有男性. 你们剃没剃过光头, 直接用推子在你的头上推, 哎这个电流声就是这个样子. 无图无真相, 因为是声音直接上个视频.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://video.zhihu.com/video/1245176301192880128?autoplay=false&amp;amp;useMSE=&quot;&gt;https://video.zhihu.com/video/1245176301192880128?autoplay=false&amp;amp;useMSE=&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因为上面提到了, 桌子左侧的插线板用双面胶固定在左侧横梁上. 导致这个插线板距离我只有不到50厘米, 这个电源适配器的电流声音, 直接从耳朵进去轰炸你的脑袋(瞬间剃秃). 一样官方退货京东下单.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/mi_return.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;退货和插线板不是一天, 是因为当时没发现台灯有问题. 我之前买的一个绿联的Type-C HUB在电脑关机的时候会有电流声(也是换了几个都有, 但是最后凑合用了). 一直以为是它的声音, 直到第二天感觉和之前的声音不对, 就把这个HUB拔了, 发现了是电源适配器的问题.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/jd_lamp_pro.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;京东到货, 插线测试. 结果相同, &lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;感觉是有个老师傅在电源适配器里不知道再给谁一直剃头&lt;/mark&gt;. 接着就和官方反应台灯问题, 了解到有可能是插线板问题. 家里的插线板换了个遍, 插线板很多就不念叨了. 可以去看看我在知乎的回答: &lt;em&gt;小米的东西真的很差吗？ - Virace的回答 - 知乎 https://www.zhihu.com/question/363902894/answer/1227555154&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;反反复复折腾了一周, 什么都没买成. 还现吧吧在和客服反映问题, 岂不知你反应的人都当每当个问题去处理都不知道. 最后客服又说要补偿, 可给我发一个插线板用着, 实话说发给我也不太敢用, 但是还是让客服发了一个我和买的相同的 6位基础版. 要看下不是我自己买的, 你们补偿发给我的东西是不是也有这个问题. 也顺便让他们把已经给我的50元优惠券删掉. 因为觉得可能短期内不会再小米商城买任何东西.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/laji.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;已到同一批货,  同样问题存在.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;所谓补偿的插线板还在路上, 回来需要看一下. 如果有问题, 那这个插线板将不会履行他的义务. 给他买个相框裱起来, 当个纪念产品. 这么多年米粉没白当, 至少看清买的东西都是什么货色. 提名: &lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;《官方不承认有任何问题然而不用电会发热的米家插线板6位[基础加热版]》&lt;/mark&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;行业反思&lt;/h2&gt;
&lt;p&gt;码这个文章的时候, 夹杂了很多情绪在里面. 后续冷静之后在知乎回答的那个问题. 觉得现在这些电商, 都不想实际解决问题. 几十优惠券、几个京豆就能平事. 京东甚至要让你把一个二手有质量问题(&lt;strong&gt;有安全隐患&lt;/strong&gt;)的商品让用户留下, 更别说他只出了20块钱. 就是TM倒贴, 还得想想值不值得亲自把这个东西当作垃圾扔掉.&lt;/p&gt;
&lt;p&gt;不保证商品质量, 然后用钱去补偿. 这是一个良性发展么? 有人可能还是觉得我这个是小概率事件. 4个插线板同一个生产日期同一个问题, 两个台灯同i个生产日期同一个问题, 一个小米官方售后检测, 一个京东售后检测都已经承认的质量问题. 暂且说好听点是这个批次的质量问题.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/comment.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;官方商城、官方旗舰店. 评价中根本找不到差评, 不知道为什么. 有质量问题不想着去优化产品, 然而只能在除了问题之后拿钱砸(绝不是空穴来风). 虽说直接优惠、金钱补偿是最快安抚用户的方法, 但绝不能当作解决问题的唯一方法.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;这个行业真的是, 太TM CAO了.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>硬件升级计划</title><link>https://x-item.com/up-up-up.html</link><guid isPermaLink="true">https://x-item.com/up-up-up.html</guid><pubDate>Thu, 14 May 2020 15:04:19 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;因为疫情, 被迫将办公地点搬回了家中. 所以有了这个升级计划, 这个计划分两个阶段, 目前第一阶段已经完成了. 后续看情况(钱包以及优惠)进行下一步.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;原有配置&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dell G7 7588 : i7-8750H  1050ti  16G   512+1&lt;/li&gt;
&lt;li&gt;两块1T 2.5英寸硬盘, 一块黑盘7200 一块希捷5400&lt;/li&gt;
&lt;li&gt;G302 + MX Vertical&lt;/li&gt;
&lt;li&gt;阿米洛定制87键红轴&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;笔记本的两块SSD 一个是C2000PRO 去年双十一拼多多买的; 另一块是西数蓝盘. 其实还有一个之前的笔记本, 雷神G150T-D 雷神大圣定制版, i7-6700HQ + 970M. 已经挂二手了, 但还是想自己用上, 现在唯一能想到的就是, 拆掉屏幕、去掉电池散热, 然后用来黑苹果做办公机. 当然还是卖了最好, 有兴趣可以看看.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我在闲鱼发布了【i7 6700hq雷神G150T-D1大圣归来 定制版】 复制这条消息后，打开闲鱼€FVLb1LirS4G€后打开?闲鱼?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;第一阶段&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一张长140以上, 宽80以上的桌子&lt;/li&gt;
&lt;li&gt;27寸及以上4K显示器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其实第一阶段很简单, 现在都已经都完成了.  淘宝定做的桌子,全部走的明线, 因为还在等我的插线板.&lt;/p&gt;
&lt;p&gt;LG UL650不得不说双显示器效率是比原来的高了不少. 经过几天的适应对这块4K屏幕属实是非常喜欢. 有兴趣可以看一下简单测评: &lt;a href=&quot;https://x-item.com/shopping-05-12.html&quot;&gt;网购实录&lt;/a&gt;. 因为笔记本配置不低, 所以第一阶段没有升级这方面硬件打算.&lt;/p&gt;
&lt;h2&gt;第二阶段&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一台剪辑用台式机&lt;/li&gt;
&lt;li&gt;一台码代码用台式机&lt;/li&gt;
&lt;li&gt;不累手的键盘&lt;/li&gt;
&lt;li&gt;第二台4K显示器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在一直没有进行第二阶段的原因是, 对于装新机有顾虑. 这几天4K屏幕试用发现, Windows平台上很多软件根本没有对微软给的标准进行缩放处理. 导致很多大厂软件看起来很模糊.&lt;/p&gt;
&lt;p&gt;所以考虑组一台机器用来黑苹果, 平常看看电影敲敲代码. 配置不用高, 静音就行. 但是这样就需要配一台配置还可以的用来剪辑视频, 这样有点浪费不说还需要另一个屏幕. 而且这个笔记本就没啥用了.&lt;/p&gt;
&lt;p&gt;AMD, YES! 目前就纠结于Windows的软件环境, 以及AMD性价比上. 黑苹果可能上个9400f 或 9600kf, 然而AMD 直接3700x, 功耗还低. 这样短时间还不需要第二个显示器. 看我能不能把那台G150T成功黑苹果或者LVM黑.&lt;/p&gt;
&lt;p&gt;至于键盘, 放弃机械键盘了. 除了静电容太贵没有试过之外, 其他能选的也都在试用过后退了. 现在G302 和 阿米洛键盘全都撤了. 鼠标用笔记本触摸板, 需要拖动操作再把Vertical拿出来用, 这样还能好点要么这手指疼的不行. 所以一定要一个键程短而且压力系数很小的一个键盘.&lt;/p&gt;
&lt;p&gt;目前除了罗技的Craft 和 MX Keys没什么其他的. 但是这两款目前售价有点肝疼. 2月底Craft京东字应一度降到799, 这可是半价的意思但, 是当时没有关注.&lt;/p&gt;
&lt;h2&gt;Intel or AMD？&lt;/h2&gt;
&lt;p&gt;你们怎么选?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;主图: Photo by &lt;a href=&quot;https://unsplash.com/@lazycreekimages?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Michael Dziedzic&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/s/photos/upgrade?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>网购实录: 千兆路由、4K显示器、矮轴机械键盘</title><link>https://x-item.com/shopping-05-12.html</link><guid isPermaLink="true">https://x-item.com/shopping-05-12.html</guid><pubDate>Mon, 11 May 2020 16:22:35 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;疫情关系已无法回到北京, 找的搬家公司把所有东西全都邮寄(日式搬家)了家里. 所以当前办公场所就变成了家里. 重新布置了一下, 第一阶段算是有点进度了.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;路由器Redmi AC 2100&lt;/h3&gt;
&lt;p&gt;之前对小米的路由器一直嗤之以鼻, 虽说没用过(哈哈), 但是之前产品的尿性业内还是比较出名的. 后来有网友说小米路由换团队了, 后续产品反响还不错. 家里原来是100M其实是用不上千兆路由, 正好电信有个提速活动到6月底.
先去找的电信更换光猫, 很顺利免费更换. 虽然办理期间柜台里面那位貌似很不情愿, 嘴里一直念叨着换了也没用. 说实话对这个电信办理人员啊, 印象很差. 但是疫情期间还上班, 也就理解了.&lt;/p&gt;
&lt;p&gt;正好赶上小米10发布会, 推出了新路由AX 3600, 本想一步到位买这个, 但是无奈刚发布没耐心等了. 就先买个用用, 更何况家里这个宽带不打算改动太多, 实在需要就单独再办一个.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/Redmi_AC2100.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;京东3月30号购买, 169元. 发文时候也是这个价格. 没查底价不太贵就没放在心上. 具体参数可以去acwifi.net看看, 就不搞这么专业拆机什么了, 实际说一下使用情况.&lt;/p&gt;
&lt;p&gt;家里是两室一厅, 原来我的小卧室变成了更衣室= =, 装修的时候没有部光纤啊, 装宽带都是走的明线, 懒得动了所以路由光猫都放在南屋更衣室. 因为5G信号实测, 关门客厅阁楼信号都很好, 包括我的北屋卧室都可以收到4格信号. 所以2.4G直接关闭了只保留5G信号, 定时三天一重启, 目前使用了一个多月没什么大问题.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/Redmi_AC2100_wifi.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;喜欢折腾的也不错, 在发文的时候(2020年5月10日), 恩山上已经有很多固件可以刷了. 之前折腾路由还是能多播的时候, 后来不能多播也就不折腾了. 官方固件用着没问题还稳定就可以了.&lt;/p&gt;
&lt;h3&gt;4K显示器 LG UL650&lt;/h3&gt;
&lt;p&gt;其实当前买来出来码代码、写写文章没别的用. 原本的预算都是给DELL 2718Q的, 但是在V站看了一下, 这款用的LG面板会有严重的漏光了四角变红的问题. 年前问了一下客服说没换面板, 那没办法了不想折腾虽然说支架外观都是我比较看好的.&lt;/p&gt;
&lt;p&gt;之后就关注了一下这个UL650, 什么HDR、这个游戏加速那个特性对我来说没用. 平常就是看看动漫、码码字. 虽说以后需要视频剪辑但是多数都是录屏教程视频. 这个颜色除非两台显示器来对比, 要么我是分不出好坏的. 其实UL650老批次的货也有红屏问题, 后续更换了新的面板就解决了. 京东买回来看一下是新面板, 漏光等问题几乎没有.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/LG_UL650.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;除了这个显示器支架没有dell 那个好看之外. 其他还可以吧, 要求没那么高. 但至少要是大厂有保证, 而且不那么辣眼睛就行. 实拍图等硬件升级第二阶段结束再说. 因为现在这个显示器, 连接的是笔记本. 都走的明线非常乱. 关于硬件升级的两个阶段, 等新开个文章细聊.&lt;/p&gt;
&lt;h3&gt;RK速写矮轴机械键盘&lt;/h3&gt;
&lt;p&gt;前提说好这个键盘已经退货.&lt;/p&gt;
&lt;p&gt;在北京的时候就一直有腱鞘炎了. 手指腱鞘炎, 不太严重疼的时候休息下就好了. 再打字就又犯了一直这样反反复复. 鼠标也从原来的G302换成了MX Vertical, 因为总觉得是鼠标手导致的, 但是限于桌子宽度手臂悬空导致换鼠标也是无济于事.&lt;/p&gt;
&lt;p&gt;现在回到家里, 买了一个140x80的桌子, 换上这个鼠标能稍微好那么一点点. 因为身体最重要, 肯定是要一个舒服的环境来工作, 所以考虑到键盘使用的是阿米洛官方定制的87键, Cherry红轴感觉硬, 试了一下银轴也一般. 网友推荐静电容, 这一查这键盘赶上半个显示器了. 看看升级计划再看看钱包, 心里默念: 不能买, 不能买....&lt;/p&gt;
&lt;p&gt;最终理智让我转向了另一个方向: 矮轴或薄膜. 这里提到的薄膜不是那种普通的, 罗技Craft 或者 MX Keys级别. 薄膜等以后下单再谈, 先说矮轴. 很新的轴, 以至于键盘很少, 键帽更少. 找了几款: 达尔优EK820、Keychron K1、酷冷至尊SK630、RK速写. 能在京东自营、天猫淘宝旗舰店或是个人觉得靠谱的店铺能搜到的就这些.&lt;/p&gt;
&lt;p&gt;EK820和RK速写好像用的都是凯华的矮轴, Keychron K1是佳达隆矮轴, SK630是Cherry矮红轴. 达尔优的说实话做工都是用目共睹, 看看就完了. Keychron K1买不着, 没货= =. SK630京东旗舰店700, 觉得不值这个价钱. 最后就用天猫0元信用购买了这个RK速写.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/rk.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;买的青轴, 实际上手问题很多, 紧凑键盘习惯了之前的用这个打字找不到位置, 按键需要的力度感觉比Charry红轴还要大, 只是键程短了. 然而这些都可以慢慢适应, 忍不了的是, 竟然有严重的使用痕迹. 键盘底部有一层透明保护膜, 非常脏. 在我这来说对于新产品已经是用非常脏来形容了. 膜里面什么都有, 就不放图了犯恶心. 键盘背面还有水渍压痕. 想象不到这是个新键盘. 鉴于按键力度比红轴还大, 还有就是忍不了的污渍. 上手没有5分钟联系退货.  当然了可能就赶上这一个了, 人的主观感受还是挺可怕的.&lt;/p&gt;
&lt;p&gt;直接RK这个牌子在我这是拉黑了. 至于SK630是我比较喜欢的一个布局. 只可惜矮轴目前在我心目中不值这个价钱, 还不支持无线. Keychron K1买不着. 矮轴也就到这了. 官网一波罗技MX 那两款键盘了.&lt;/p&gt;
&lt;h3&gt;写到最后&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2020/05/mijia.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;最近还购买了米家台灯PRO, 对于一个台灯来说这次购物有点肉疼. 就等导手体验了, 众筹的快充插线板还木有发货, 只能先买个6项线用着. 办公区改造计划第一阶段就算是完事了.&lt;/p&gt;</content:encoded></item><item><title>Python之点到为止: 优美的打包你的代码(二)优化</title><link>https://x-item.com/python-jgah-released-2.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-released-2.html</guid><description>PyInstaller, cx-Freeze, nuitka这三种模块, 打包后文件大小、运行效率对比. 并说明如何对打包后的文件大小进行优化. 可以大幅缩减文件大小.</description><pubDate>Mon, 20 Apr 2020 23:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;会打包我们就要开始优化了, 无外乎是启动速度和文件大小.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;优化方向&lt;/h2&gt;
&lt;p&gt;就目前来说方向就三个: 启动速度、运行效率、文件大小.&lt;/p&gt;
&lt;h3&gt;启动速度&lt;/h3&gt;
&lt;p&gt;这里这个启动速度, 是指从双击再执行第一句Python语句的速度.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import time

def count_time(func):
    def int_time(*args, **kwargs):
        start_time = time.time()
        func()
        over_time = time.time()
        return over_time - start_time
    return int_time

@count_time
def run():
    res = &amp;amp;#91;]
    for i in range(10000000):
        res.append(i)
    del res

if __name__ == &quot;__main__&quot;:
    print(time.time())
    t = 10
    all = 0
    for i in range(t):
        all += run()
    print(all/t)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;经过测试, 在一些简单的环境下启动速度几乎相同, PyInstaller打包单文件(-F)稍微有点停顿感. 本来还想具体测一下启动时间的差别, 但是后续想了一下, 如果正常双击察觉不到卡顿感觉应该就可以了, 所以最后目测的哈哈?. cx-Freeze因为没有单文件打包, 正常打包启动速度与PyInstaller (-D) 速度几乎无异.&lt;/p&gt;
&lt;p&gt;:::tip
PS: 如果使用PyInstaller加密字节码的话肯定是在启动速度上有妥协.
:::&lt;/p&gt;
&lt;h3&gt;运行效率&lt;/h3&gt;
&lt;p&gt;运行效率在使用打包运行环境这类模块几乎没差别, 因为这类你可以粗略的理解先将Python环境解压然后调用Python xxx.pyc . 所以除了解压环境和代码会浪费时间外其余和正常运行理论上无异. Nuitka那还用说么, 已经变成C了. 官网号称比CPython快两倍以上, 因为手里有几个小程序已经使用这个进行编译了. 所以Nuitka就没有参加测试, 感觉不是特别公平哈哈哈.&lt;/p&gt;
&lt;h3&gt;文件大小&lt;/h3&gt;
&lt;h4&gt;PyInstaller&lt;/h4&gt;
&lt;p&gt;这个文件大小有点迷, 之前测试代码直接在Conda环境里新建了一个Python3.7, 就上面的代码打包6.15 MB. 非单文件是13.1 MB. 然而文件挺大为了严谨单独安装了一下3.7,打包结果单文件6.18MB, 非单文件是13.2 MB. 发挥挺稳定.&lt;/p&gt;
&lt;h4&gt;cx-Freeze&lt;/h4&gt;
&lt;p&gt;这个模块在Conda和正常Python中打包有差异. 打包后的文件树也与PyInstaller有很大差别. Conda创建的环境打包文件17.4 MB, 正常安装的Python环境打包13.2 MB.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdlskrmr9fj20sw09umxw.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;大概看了一下, 多出的文件python37.dll, 在lib文件夹中发现重复的这个dll文件. 还有一些没什么卵用的vc运行库dll. 可能是复制文件某些逻辑问题? 没有深去探究.&lt;/p&gt;
&lt;h4&gt;Nuitka&lt;/h4&gt;
&lt;p&gt;这个打包有些特殊, 为了他新建了个干净的虚拟机安装了相关程序. 单独用来打包, 但是Python版本是3.8, Nuitka 0.6.7版本已经对3.8进行了支持. 也是上述代码打包文件大小20.2 MB. 嘶~~~ 打包目录文件有点类似PyInstaller&lt;/p&gt;
&lt;h2&gt;优化&lt;/h2&gt;
&lt;p&gt;启动速度、运行效率、文件大小. 这三个我们能优化的就是运行效率和文件大小. 而启动速度目前有区别的就是PyInstaller单文件打包, 尽量不用就行了. 运行效率就靠你的&quot;手法&quot;了, 多优化自己的代码.&lt;/p&gt;
&lt;p&gt;文件大小还是有很大优化空间的, 先说最大的Nuitka打包竟然20M.&lt;/p&gt;
&lt;p&gt;:::tip
原本有张截图的, 图床挂了就算了. 截图里展示了打包后都有什么文件而已.
:::&lt;/p&gt;
&lt;p&gt;默认自带的所有pyd文件全部打包, 然而回头看一下代码. 根本没有用到这些库, 怎么办? 直接删掉!!!!! 删这些文件是有讲究的, 如果你调用的库比较多, 那么就要考虑是否调用了.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;PyInstaller&lt;/th&gt;
&lt;th&gt;cx-Freeze&lt;/th&gt;
&lt;th&gt;Nuitka&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default&lt;/td&gt;
&lt;td&gt;13.2&lt;/td&gt;
&lt;td&gt;13.2&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conda&lt;/td&gt;
&lt;td&gt;13.1&lt;/td&gt;
&lt;td&gt;17.4&lt;/td&gt;
&lt;td&gt;20.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;优化后&lt;/td&gt;
&lt;td&gt;5.73&lt;/td&gt;
&lt;td&gt;4.66&lt;/td&gt;
&lt;td&gt;11.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UPX&lt;/td&gt;
&lt;td&gt;3.42&lt;/td&gt;
&lt;td&gt;2.46&lt;/td&gt;
&lt;td&gt;3.59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAR&lt;/td&gt;
&lt;td&gt;3.04&lt;/td&gt;
&lt;td&gt;2.29&lt;/td&gt;
&lt;td&gt;3.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7zip&lt;/td&gt;
&lt;td&gt;2.71&lt;/td&gt;
&lt;td&gt;1.96&lt;/td&gt;
&lt;td&gt;3.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;单位: 兆(M)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个表格UPX是用的是3.9.6版本最高压缩(-9), RAR和7zip都是Windows上默认最高压缩比, 字典以及其他参数为默认. 其中RAR为打包自解压默认执行程序.&lt;/p&gt;
&lt;p&gt;这就是我为什么喜欢cx-Freeze的原因, 优化后文件最小. Nuitka文件大但是效率最高.&lt;/p&gt;
&lt;p&gt;本文中示例代码以及打包前后对比的文件夹均已分享在Github中, &lt;a href=&quot;https://github.com/Virace/python-jgah/tree/master/Main/2162&quot;&gt;https://github.com/Virace/python-jgah/tree/master/Main/2162&lt;/a&gt; 为了方便下载将Before和After两个文件夹内部打包.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;PyInstaller&lt;/th&gt;
&lt;th&gt;cx-Freeze&lt;/th&gt;
&lt;th&gt;Nuitka&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;执行第一次&lt;/td&gt;
&lt;td&gt;1.0048&lt;/td&gt;
&lt;td&gt;0.8858&lt;/td&gt;
&lt;td&gt;0.8698&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;执行第二次&lt;/td&gt;
&lt;td&gt;0.8774&lt;/td&gt;
&lt;td&gt;0.8781&lt;/td&gt;
&lt;td&gt;0.8011&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;执行第三次&lt;/td&gt;
&lt;td&gt;0.8968&lt;/td&gt;
&lt;td&gt;0.8754&lt;/td&gt;
&lt;td&gt;0.8043&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;执行第四次&lt;/td&gt;
&lt;td&gt;0.8812&lt;/td&gt;
&lt;td&gt;0.9045&lt;/td&gt;
&lt;td&gt;0.8117&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;优化后UPX执行输出时间(单位:秒)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个代码最后输出的就是循环100W次将所有数添加到列表中, 这个操作循环10次取平均用时. 因为只是循环添加吃内存, 缺少计算环节, 所以表这个仅供参考. 整体差距还是不大的, 但还是能看出在这个代码上Nuitka还是有性能上的提升的.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;用Python打包怎么包最后都不小, 虽说最后优化最小的已经可以2M左右了, 但是对一个这么简单功能的程序都需要2M感觉有点难受. 另外如果你对运行效率有要求别想了Nuitka没跑了, 去看文档优化代码吧.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关链接:
Pyinstaller文档: https://pyinstaller.readthedocs.io/en/stable/usage.html
ex_Freeze文档: https://cx-freeze.readthedocs.io/en/latest/overview.html
Nuitka文档: https://www.nuitka.net/doc/user-manual.html
本期文件: https://github.com/Virace/python-jgah/tree/master/Main/2162&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Python之点到为止: 优美的打包你的代码(一)基础</title><link>https://x-item.com/python-jgah-released-1.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-released-1.html</guid><description>讲一下常用的打包模块, 和一些打包中会遇到的一些痛点. 比如给程序添加版本或者管理员启动之类的.</description><pubDate>Fri, 17 Apr 2020 23:30:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;经过前几期文章, 想必你想要的功能都已经完成了. 那么如何打包呢?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;为什么要打包&lt;/h2&gt;
&lt;p&gt;无外乎就是想让用户获得更好的体验, 不是所有用户都会去配置Python环境. 就算是你下面的用户都会配置环境, 也未必不会再环境上出错. 那么在这个部分去花时间处理是不值当的.&lt;/p&gt;
&lt;p&gt;这是个漫长的过程, 打包简单优化难. 一个程序打包你说难么? 没有任何难度, 为何这么说?&lt;/p&gt;
&lt;h2&gt;理解打包&lt;/h2&gt;
&lt;p&gt;想一想你编写的Python脚本是如何运行的. python xx.py 对吧. 配置好环境变量后就这样执行, 那么没有添加环境变量如何运行?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;c:\python3.6\python.exe xx.py
c:\python3.6\python.exe -m xx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那就直接把你自己的Python文件夹和代码压缩在一起直接用RAR弄个自解压程序, 设置好执行命令就好了啊.  还可以解压到临时文件夹运行完就删. 这就是非常简单的打包. 该有的都有, 缺点是什么? 文件大, 我这随手拿一个之前新建的虚拟环境就几百兆. 压缩后也是百兆级别, 你说我写个清理垃圾的小程序之不至于下一个几百兆的软件??? ??&lt;/p&gt;
&lt;h2&gt;相关模块&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;PyInstaller&lt;/li&gt;
&lt;li&gt;cx-Freeze&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;Nuitka&lt;/mark&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用的最多的可能就是PyInstaller了. 今天这篇文章就不说一些百度上能搜到那些垃圾东西了, 之前在52破解也分享了一篇文章&lt;a href=&quot;https://www.52pojie.cn/thread-1139585-1-1.html&quot;&gt;https://www.52pojie.cn/thread-1139585-1-1.html&lt;/a&gt; 就不赘述了. 还是按照惯例讲痛点或常用的东西.&lt;/p&gt;
&lt;p&gt;打包代码来自之前文章分享: &lt;a href=&quot;https://github.com/Virace/python-jgah/blob/master/Main/2153/tkinter.py&quot;&gt;https://github.com/Virace/python-jgah/blob/master/Main/2153/tkinter.py&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;PyInstaller&lt;/h3&gt;
&lt;p&gt;pyinstaller -D xxxx.py&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想要单文件&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;更小&lt;/mark&gt;, 命令中添加 &lt;em&gt;--upx-dir&lt;/em&gt; 后面加上upx程序所在的目录 &lt;a href=&quot;https://github.com/upx/upx/releases/&quot;&gt;https://github.com/upx/upx/releases/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;想要稍微&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;加密&lt;/mark&gt;你的代码, 命令中添加 &lt;em&gt;--key&lt;/em&gt; 后面加上16位密钥可以自己随机生成一个. (需要安装&lt;a href=&quot;https://pypi.python.org/pypi/pycrypto/&quot;&gt;PyCrypto&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;有些程序使用&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;upx之后会无法运行&lt;/mark&gt;(有自校验), 可以通过 添加 &lt;em&gt;--upx-exclude&lt;/em&gt; 后面加上排除的exe文件名, 或者直接使用 &lt;em&gt;--noupx&lt;/em&gt; 直接不使用用upx&lt;/li&gt;
&lt;li&gt;GUI程序想要&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;不显示控制台&lt;/mark&gt;, 命令中添加 &lt;em&gt;-w&lt;/em&gt; , 相反如果必须&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;显示控制台&lt;/mark&gt;则添加 &lt;em&gt;-c&lt;/em&gt; : &lt;a href=&quot;https://pyinstaller.readthedocs.io/en/stable/usage.html#windows-and-mac-os-x-specific-options&quot;&gt;https://pyinstaller.readthedocs.io/en/stable/usage.html#windows-and-mac-os-x-specific-options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;需要一个&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;图标&lt;/mark&gt;, 命令中添加 &lt;em&gt;-i&lt;/em&gt; 后面加上图标文件, 或者其他有图标的exe文件.&lt;/li&gt;
&lt;li&gt;需要默认已管理员权限运行, 命令中添加 &lt;em&gt;--uac-admin&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;给程序添加版本信息, 命令中添加 &lt;em&gt;--version-file&lt;/em&gt; 后面接版本文件. 格式如下. 个人还是喜欢ResourceHacker去添加.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# UTF-8
#
# For more details about fixed file info &apos;ffi&apos; see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
  ffi=FixedFileInfo(
    # 文件版本信息为元组格式
    # 如果不需要着设置为0
    filevers=(10, 0, 18362, 1),
    prodvers=(10, 0, 18362, 1),
    # 文件标志掩码
    mask=0x3f,
    # 文件标志(是否包含调试版本,动态版本结构...)
    flags=0x0,
    # 文件指定的操作系统
    # 0x4 - NT 不需要修改
    OS=0x40004,
    # The general type of file.
    # 0x1 - the file is an application.
    fileType=0x2,
    # 文件类型, APP、DLL啥的
    subtype=0x0,
    # 创建时间戳
    date=(0, 0)
    ),
  kids=&amp;amp;#91;
    StringFileInfo(
      &amp;amp;#91;
      StringTable(
        u&apos;040904B0&apos;,
        &amp;amp;#91;StringStruct(u&apos;CompanyName&apos;, u&apos;Microsoft Corporation&apos;), # 公司名
        StringStruct(u&apos;FileDescription&apos;, u&apos;DLL for TaskRT&apos;), # 文件描述
        StringStruct(u&apos;FileVersion&apos;, u&apos;10.0.18362.1 (WinBuild.160101.0800)&apos;), # 文件版本
        StringStruct(u&apos;InternalName&apos;, u&apos;TaskApis&apos;), # 内部名称
        StringStruct(u&apos;LegalCopyright&apos;, u&apos;© Microsoft Corporation. All rights reserved.&apos;), # 版权信息
        StringStruct(u&apos;OriginalFilename&apos;, u&apos;TaskApis.dll&apos;), # 源文件名
        StringStruct(u&apos;ProductName&apos;, u&apos;Microsoft® Windows® Operating System&apos;), # 产品名称
        StringStruct(u&apos;ProductVersion&apos;, u&apos;10.0.18362.1&apos;)]) # 产品版本
      ]),
    VarFileInfo(&amp;amp;#91;VarStruct(u&apos;Translation&apos;, &amp;amp;#91;1033, 1200])]) # 语言信息
  ]
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这可能是一些很好用但是很少用, 并且用的时候找不到(除文档)的参数. 如果有其他需要的可以一起讨论呦. ? 哦对了, 不推荐大家使用 -F 打包单文件会影响启动时间. 实在需要单文件可以使用rar自解压程序.&lt;/p&gt;
&lt;h3&gt;cx-Freeze&lt;/h3&gt;
&lt;p&gt;这个模块不管从名字还是从打包用脚本来说我个人对它好感度都很高. 但是默认命令打包优化效果并不好. 其特点就是打包可以使用脚本方式调用.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# https://github.com/anthony-tuininga/cx_Freeze/blob/master/cx_Freeze/samples/Tkinter/setup.py
import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == &apos;win32&apos;:
    base = &apos;Win32GUI&apos;

executables = &amp;amp;#91;
    Executable(&apos;SimpleTkApp.py&apos;, base=base)
]

setup(name=&apos;simple_Tkinter&apos;,
      version=&apos;0.1&apos;,
      description=&apos;Sample cx_Freeze Tkinter script&apos;,
      executables=executables
      )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我是比较喜欢这种的, 不需要什么bat啊, shell脚本来掺和. 这样整体化很强(强迫症). 但其更大的特点是打包为安装包, 支持不同系统打包安装文件, 例如: 打包exe利用msi、 打包rpm包、甚至mac下.app dmg捆绑包.&lt;/p&gt;
&lt;h3&gt;Nuitka&lt;/h3&gt;
&lt;p&gt;这个模块给我的感觉就像: 面前一群糙老爷们, 回头一看有个小姑娘. 立志于将Python转成C再编译成EXE. 哎这样你的Python代码安全性就上去了. 也就只能从汇编上看看&quot;源代码&quot;.&lt;/p&gt;
&lt;p&gt;关于他如何使用可以查看: &lt;a href=&quot;https://www.52pojie.cn/thread-1139585-1-1.html&quot;&gt;https://www.52pojie.cn/thread-1139585-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个库的痛点就是, 环境配置. 嗯对环境配置, MSVC安装还是简单的, 但是不想用因为会添加一些MSVC的DLL, 卵用. 然而MinGW大家可以百度百度. = =对于网络差而且还在墙里的用户那是极其不友好的.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;其实PyInstaller比早些时间强的太多了, 最开始还动不动几十兆现在可以在十几兆之内. 除了单文件启动上有些慢外现在已经很不错了, 更何况字节码都可以加密了(安全性和Nuitka没法比).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关链接:
Pyinstaller文档: https://pyinstaller.readthedocs.io/en/stable/usage.html
ex_Freeze文档: https://cx-freeze.readthedocs.io/en/latest/overview.html
Nuitka文档: https://www.nuitka.net/doc/user-manual.html&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>DELL G7 开机后CPU有电流声——电感啸叫</title><link>https://x-item.com/fvck-dell-support.html</link><guid isPermaLink="true">https://x-item.com/fvck-dell-support.html</guid><pubDate>Wed, 15 Apr 2020 00:25:00 GMT</pubDate><content:encoded>&lt;p&gt;:::tip
这个问题已经持续几个月了, 这部因为疫情关系就没找客服. 每当晚上没什么声音的时候开机就能听见滋滋的类似电报的声音.
难道我的笔记本被国外黑客攻破了, 用于与其国家电报通信? ???
:::&lt;/p&gt;
&lt;p&gt;MDZZ&lt;/p&gt;
&lt;h2&gt;联系客服&lt;/h2&gt;
&lt;p&gt;随后直接向DELL客服发了一个邮件的服务请求, 表明问题然后还用手机录了一段录音. (邮件服务请求需要时间处理.) 本文也会持续更新.&lt;/p&gt;
&lt;p&gt;DELL的售后从某些地方来说很NB, 从某些地方来说又很ZZ(智障).&lt;/p&gt;
&lt;h3&gt;NB&lt;/h3&gt;
&lt;p&gt;如果客服可以确定问题, 那就直接换件, 哪坏换哪, 全智服务上门更换. 主板上的东西坏了直接换&quot;新&quot;板. 显示屏坏了换屏, 都有问题整换, 只要在保修期内, MD换就完了.&lt;/p&gt;
&lt;h3&gt;ZZ&lt;/h3&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;如果客服可以确定问题&lt;/mark&gt;, 怎么算是客服确定问题. 就是一些很明显可以在电话中就确定的问题, 像一些没办法当场复现而且存在的问题, 那就是推三阻四、磨磨唧唧、没完没了.  这有两张图, 就不直接贴图了图片较大影响访问速度. 可以点开看看, 这是我遇到问题之后工程师上门记录.
&lt;a href=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdtqduehskj21f020r75o.jpg&quot;&gt;https://up.image.x-item.com/large/a1e6bd2bly1gdtqduehskj21f020r75o.jpg&lt;/a&gt;
&lt;a href=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdtqdueqhzj20xt0n6q5i.jpg&quot;&gt;https://up.image.x-item.com/large/a1e6bd2bly1gdtqdueqhzj20xt0n6q5i.jpg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上门四次两次来检测(就是来跑一下自检), 两次换主板.
还有一张, 是我与客服沟通的记录
&lt;a href=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdtqkoftq7j210a6eidlw.jpg&quot;&gt;https://up.image.x-item.com/large/a1e6bd2bly1gdtqkoftq7j210a6eidlw.jpg&lt;/a&gt;
电话费都干老了, 这还只是一部分, 因为后续换了几个邮箱联系. 官网只能按照邮箱来显示请求记录. 你以为这就完了?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdtqoaycpaj211w0xvmxq.jpg&quot;&gt;https://up.image.x-item.com/large/a1e6bd2bly1gdtqoaycpaj211w0xvmxq.jpg&lt;/a&gt;
注意时间, 是去年(2019)的7月份, 也就是在换完主板半年多一点又出现问题. 这次问题我就没给客服打过电话, 官网邮件请求后就等客服给我打电话, 这个问题如果今天的电话不能解决那么要求客服明天再给回电话, 最后这个请求是客服给我打了4个电话, 电话最短时间是40分钟. 记得很清楚给我打电话的是后正在中关村闲逛.&lt;/p&gt;
&lt;p&gt;这三次更换主板都是无规律的电脑卡顿, 起初客服还让什么重做系统还原系统, 这个那个的一些没用的操作, 配合一下只是浪费时间.&lt;/p&gt;
&lt;p&gt;这你说买个电脑不到一年换4次主板(另一次用的哪个邮箱忘了没查到), 谁能受了. 解决问题还磨磨唧唧.&lt;/p&gt;
&lt;p&gt;MD扯多了, 一提这售后就来气, 还有如果有幸你看到这了. 以一个过来人身份告诉你.&lt;/p&gt;
&lt;p&gt;要保留发票, 有无发票售后换件是两种件.&lt;/p&gt;
&lt;h3&gt;售后的大坑&lt;/h3&gt;
&lt;p&gt;极大部分人还不知道这里面有区别, 一般也不会出示发票. 都觉得保修就好了. 请注意区别很大:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无发票, 换的是良品件.&lt;/li&gt;
&lt;li&gt;有发票, 换的是全新件.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;嘛是良品件, 说白了就是官翻. 在一些论坛上发现有人吐槽说戴尔换件换的都是二手的. 有些夸张虽然说是良品件但肯定不会让你看出来有问题的. 虽然是良品件但也在售后范围.  全新就不多说了吧. 至于消息可靠性, 可以直接致电DELL客服咨询对于换件有无发票的区别. 因为这个我也是从客服口中知道的.&lt;/p&gt;
&lt;p&gt;因为我买的笔记本是一个月后出现问题, 那么我不能换个二手件吧. 随说官翻但TN的也是二手的. 心里过不去. 其实第二次更换主板问题就已经解决, 但是后续从客服口中得知有区别才有的第三次更换主板, 将良品件换位全新件.&lt;/p&gt;
&lt;h2&gt;解决问题&lt;/h2&gt;
&lt;p&gt;查了下贴吧真有很多人遇到这种问题, &lt;a href=&quot;https://tieba.baidu.com/p/6051243549&quot;&gt;https://tieba.baidu.com/p/6051243549&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解决办法就是进入BIOS吧C-States给关掉, 这是一个CPU自动节能选项. 关完确实没有电流了.  但是为什么会有这种操作还不得而知.&lt;/p&gt;
&lt;p&gt;只能等待客服联系我得到答案了.&lt;/p&gt;
&lt;p&gt;2020年4月15日下午&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdut09oj9uj21ev0gojv1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;DELL工程师回复电感啸叫&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;电感啸叫&lt;/h3&gt;
&lt;p&gt;这玩意谁懂啊= = ?????. 但是看客服这意思这个问题是由Intel的一个休眠技术造成的, 但好像不是全部都有这个问题吧.~ 继续追问一下到底是谁的问题&lt;/p&gt;
&lt;p&gt;未完待续....&lt;/p&gt;</content:encoded></item><item><title>Python之点到为止: 给你的GUI换个feel</title><link>https://x-item.com/python-jgah-cef.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-cef.html</guid><pubDate>Sat, 11 Apr 2020 16:32:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;上篇文章讲了GUI的故事, nodejs有强大的electron, python有没有类似的? 能不能用前端代码写Python GUI程序?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;是否需要&lt;/h2&gt;
&lt;p&gt;还是那句话, 看你是否真正需要. 因为每一个新模块都代表着一段新知识. 学习是需要成本的, 不要感觉不错用这个库然后没几天又发现别的也不错换别的. 这样浪费时间不说最后也有可能连个Hello World都没写出来. 可能这个库更适合适合Python全栈? ?&lt;/p&gt;
&lt;h2&gt;相关库&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;cefpython3 —— 开源项目CEF与Python结合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这东西就是个浏览器, 所以浏览器能干的东西他都行. 浏览器不行的就对接Python. 你甚至可以用它来做爬虫, 但是没必要headless就够用. 至于爬虫方面等以后慢慢讲.&lt;/p&gt;
&lt;h2&gt;实操&lt;/h2&gt;
&lt;p&gt;本文会提供一个完全可以移植Demo,开箱即用, 但是写文章的时候Python最新版本为3.8.2, cefpython3只支持Python3.7版本及以前, 最近一次更新在2018年8月21日基于Chromium 66.0.3359.181编译的.  所以就目前来看不是特别推荐学习, 至少我现在是在用electron, nodejs学习成本对于后端全栈来说不是太高的. 前端全栈更别说了,nodejs这玩意必须会的东西.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;先看看成品什么样, 演示视频中前端代码放在服务器上, 所以加载会有延迟. 实际编写推荐放在本地.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;提醒看代码别劝退, 因为很好理解. 实在不理解的话也不用去理解, 因为只用一次. 窗口创建部分都来源自官方Demo: &lt;a href=&quot;https://github.com/cztomczak/cefpython/blob/master/examples/pywin32.py&quot;&gt;https://github.com/cztomczak/cefpython/blob/master/examples/pywin32.py&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from cefpython3 import cefpython as cef

import math
import os
import sys

import win32api
import win32con
import win32gui

DEFAUTL_URL = &apos;https://api.virace.cc/jgah/cef/&apos;
DEFAULT_USERNAME = &apos;root&apos;
DEFAULT_PASSWORD = &apos;root&apos;
DEFAULT_WINDOW_TITLE = &apos;处女座之最 - 演示程序&apos;

# Globals
WindowUtils = cef.WindowUtils()
# 全局窗口句柄
g_windows_handle = None
# 多线程
g_multi_threaded = False

class BindFunction:
    @staticmethod
    def get_title(callback):
        callback.Call(DEFAULT_WINDOW_TITLE)

    @staticmethod
    def login(data, callback):
        if &apos;username&apos; not in data or &apos;password&apos; not in data:
            callback.Call(False, &apos;提交格式不正确&apos;)
        elif data&amp;amp;#91;&apos;username&apos;] == &apos;&apos; or data&amp;amp;#91;&apos;password&apos;] == &apos;&apos;:
            callback.Call(False, &apos;用户名密码不能为空&apos;)
        elif data&amp;amp;#91;&apos;username&apos;] == DEFAULT_USERNAME and data&amp;amp;#91;&apos;password&apos;] == DEFAULT_PASSWORD:
            callback.Call(True)
        else:
            callback.Call(False, &apos;用户名或密码错误.&apos;)

    @staticmethod
    def min():
        win32gui.PostMessage(g_windows_handle, win32con.WM_SYSCOMMAND, win32con.SC_MINIMIZE)

    @staticmethod
    def max():
        # 判断窗口状态
        if win32gui.GetWindowPlacement(g_windows_handle)&amp;amp;#91;1] == win32con.SW_SHOWMAXIMIZED:
            win32gui.PostMessage(g_windows_handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE)
        else:
            win32gui.PostMessage(g_windows_handle, win32con.WM_SYSCOMMAND, win32con.SC_MAXIMIZE)

    @staticmethod
    def close():
        win32gui.PostMessage(g_windows_handle, win32con.WM_CLOSE)

    @staticmethod
    def move():
        # 捕获鼠标
        win32gui.ReleaseCapture()
        # 移动
        win32gui.SendMessage(g_windows_handle, win32con.WM_SYSCOMMAND, win32con.SC_MOVE + win32con.HTCAPTION, 0)
        pass

def main():
    sys.excepthook = cef.ExceptHook  # To shutdown all CEF processes on error

    settings = {
        &quot;multi_threaded_message_loop&quot;: g_multi_threaded,
    }
    cef.Initialize(settings=settings)

    window_proc = {
        win32con.WM_CLOSE: close_window,
        win32con.WM_DESTROY: exit_app,
        win32con.WM_SIZE: WindowUtils.OnSize,
        win32con.WM_SETFOCUS: WindowUtils.OnSetFocus,
        win32con.WM_ERASEBKGND: WindowUtils.OnEraseBackground
    }
    global g_windows_handle
    g_windows_handle = create_window(title=DEFAULT_WINDOW_TITLE,
                                     class_name=DEFAULT_WINDOW_TITLE,
                                     width=1100,
                                     height=730,
                                     window_proc=window_proc,
                                     icon=&quot;resources/chromium.ico&quot;)

    window_info = cef.WindowInfo()
    window_info.SetAsChild(g_windows_handle)

    if g_multi_threaded:
        # When using multi-threaded message loop, CEF&apos;s UI thread
        # is no more application&apos;s main thread. In such case browser
        # must be created using cef.PostTask function and CEF message
        # loop must not be run explicitilly.
        cef.PostTask(cef.TID_UI,
                     create_browser,
                     window_info,
                     {},
                     DEFAUTL_URL)
        win32gui.PumpMessages()

    else:
        create_browser(window_info=window_info,
                       settings={},
                       url=DEFAUTL_URL)
        cef.MessageLoop()

    cef.Shutdown()

def create_browser(window_info, settings, url):
    assert (cef.IsThread(cef.TID_UI))
    bind_js(cef.CreateBrowserSync(window_info=window_info,
                                  settings=settings,
                                  url=url))

def bind_js(browser):
    &quot;&quot;&quot;
    绑定js事件, 也可以用LoadHandler调用
    :param browser:
    :return:
    &quot;&quot;&quot;
    bindings = cef.JavascriptBindings()
    bindings.SetFunction(&quot;py_title&quot;, BindFunction.get_title)
    bindings.SetFunction(&quot;py_login&quot;, BindFunction.login)
    bindings.SetFunction(&quot;py_move&quot;, BindFunction.move)
    bindings.SetFunction(&quot;py_windows_min&quot;, BindFunction.min)
    bindings.SetFunction(&quot;py_windows_max&quot;, BindFunction.max)
    bindings.SetFunction(&quot;py_windows_close&quot;, BindFunction.close)
    browser.SetJavascriptBindings(bindings)

def create_window(title, class_name, width, height, window_proc, icon):
    # Register window class
    wndclass = win32gui.WNDCLASS()
    wndclass.hInstance = win32api.GetModuleHandle(None)
    wndclass.lpszClassName = class_name
    wndclass.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW
    wndclass.hbrBackground = win32con.COLOR_WINDOW
    wndclass.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
    wndclass.lpfnWndProc = window_proc
    atom_class = win32gui.RegisterClass(wndclass)
    assert (atom_class != 0)

    # Center window on screen.
    screenx = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
    screeny = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)
    xpos = int(math.floor((screenx - width) / 2))
    ypos = int(math.floor((screeny - height) / 2))
    if xpos &amp;lt; 0:
        xpos = 0
    if ypos &amp;lt; 0:
        ypos = 0

    # Create window
    window_style = (win32con.WS_POPUP | win32con.WS_CLIPCHILDREN
                    | win32con.WS_VISIBLE)
    window_handle = win32gui.CreateWindow(class_name, title, window_style,
                                          xpos, ypos, width, height,
                                          0, 0, wndclass.hInstance, None)
    assert (window_handle != 0)

    # Window icon
    icon = os.path.abspath(icon)
    if not os.path.isfile(icon):
        icon = None
    if icon:
        # Load small and big icon.
        # WNDCLASSEX (along with hIconSm) is not supported by pywin32,
        # we need to use WM_SETICON message after window creation.
        # Ref:
        # 1. http://stackoverflow.com/questions/2234988
        # 2. http://blog.barthe.ph/2009/07/17/wmseticon/
        bigx = win32api.GetSystemMetrics(win32con.SM_CXICON)
        bigy = win32api.GetSystemMetrics(win32con.SM_CYICON)
        big_icon = win32gui.LoadImage(0, icon, win32con.IMAGE_ICON,
                                      bigx, bigy,
                                      win32con.LR_LOADFROMFILE)
        smallx = win32api.GetSystemMetrics(win32con.SM_CXSMICON)
        smally = win32api.GetSystemMetrics(win32con.SM_CYSMICON)
        small_icon = win32gui.LoadImage(0, icon, win32con.IMAGE_ICON,
                                        smallx, smally,
                                        win32con.LR_LOADFROMFILE)
        win32api.SendMessage(window_handle, win32con.WM_SETICON,
                             win32con.ICON_BIG, big_icon)
        win32api.SendMessage(window_handle, win32con.WM_SETICON,
                             win32con.ICON_SMALL, small_icon)

    return window_handle

def close_window(window_handle, message, wparam, lparam):
    browser = cef.GetBrowserByWindowHandle(window_handle)
    browser.CloseBrowser(True)
    # OFF: win32gui.DestroyWindow(window_handle)
    return win32gui.DefWindowProc(window_handle, message, wparam, lparam)

def exit_app(*_):
    win32gui.PostQuitMessage(0)
    return 0

if __name__ == &apos;__main__&apos;:
    main()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先说说这个代码的特点:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pywin32, 纯Windows API创建窗口&lt;/li&gt;
&lt;li&gt;无边框窗口, 无标题栏.&lt;/li&gt;
&lt;li&gt;解决无边框窗口拖动问题&lt;/li&gt;
&lt;li&gt;最大最小化关闭功能完善&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这段代码看起来很多, 其实大部分都是创建窗口. 然而cefpython可以配合绝大部分GUI模块一起配合使用 &lt;a href=&quot;https://github.com/cztomczak/cefpython/blob/master/examples/README-examples.md#gui-frameworks&quot;&gt;https://github.com/cztomczak/cefpython/blob/master/examples/README-examples.md#gui-frameworks&lt;/a&gt;  QT、tkinter、wxpython这几个常用跨平台的都可以的哦, 如果需要多窗口的时候这些, 如果但窗口就够用上面代码复制拿走直接加上自己的功能就行了.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实整个代码只有BindFunction类和绑定js代码是后打的. 剩下什么创建窗口都是官方例子里的, 拿过来就用能看懂就看懂看不懂咱会用不就完了. 但是也没用几个API 哈哈??&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;撸了一个前端界面, 就是一个普普通通的登录界面, 登录成功后跳转的页面就改了个标题而已. &lt;a href=&quot;https://api.virace.cc/jgah/cef/&quot;&gt;https://api.virace.cc/jgah/cef/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上面的代码是经过绑定JS的方式交互, 说实话如果方法少的话还是挺爽的. 还有一种前后端分离写法, 懂后端的应该已经懂了. 就是前端只干前端显示的活, Python在本地启动一个http服务器, 比如Flask、django(有点大). 再配合上Vue, 嗬~~ 所有操作都通过服务端设置的API操作, 这样后续维护比较方便. 所以说这个框架适合Python全栈来用.&lt;/p&gt;
&lt;p&gt;然后上面提供的登录页面, 大部分库用的都是cdn, 源码都在Github对应库分享了. 只是写个例子, 因为网页在本地访问就可以放心大胆的加各种特效, 也不会因为网络问题导致打开速度慢等问题.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;虽然听长时间不更新了, 但是你说用Python写这个东西还是挺爽的. 我最早一次用也两年以前了, 为了码文章又看文档跑了一遍. 现在的程序如果你们打开的网页想放在服务器中, 就会引文网络问题刚打开会有白屏的问题. 给你们个思路, 可以将窗口设置透明, 然后利用&lt;a href=&quot;http://www.jq22.com/yanshi819/&quot;&gt;Animate.&lt;em&gt;css&lt;/em&gt;&lt;/a&gt;上几个动画. 就会缓和好多. 但还是推荐在本地打开.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关资料:
登录界面: https://api.virace.cc/jgah/cef/
cefpython3: https://github.com/cztomczak/cefpython/
本期文件: https://github.com/Virace/python-jgah/tree/master/Main/2154
ps: 官方文档例子超多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;另外多说一句: 转载请注明出处, 点到为止系列为博主原创文章.&lt;/p&gt;</content:encoded></item><item><title>Python之点到为止: 关于GUI开发</title><link>https://x-item.com/python-jgah-gui-dev.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-gui-dev.html</guid><pubDate>Wed, 08 Apr 2020 23:30:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://x-item.com/python-jgah-dll.html&quot;&gt;DLL&lt;/a&gt;有了, &lt;a href=&quot;https://x-item.com/lol-tw.html&quot;&gt;API&lt;/a&gt;也上了. 是时候来点&quot;画面&quot;了.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实我是搞后端的, 对于这个GUI一直不感冒, 觉得有功能几个字母敲上去能用就挺好了. 但是多数情况你写的程序是需要给用户使用的, 那么这种情况你不得不去考虑自己写个界面, Python的GUI库也非常多, 本文只将常见并且简单的.&lt;/p&gt;
&lt;h2&gt;是否需要GUI&lt;/h2&gt;
&lt;p&gt;如果你的程序需要分发给用户使用, 并且想要用户有一个良好的体验, 那么有一个GUI是个加分项. 但是一个难用的GUI还不如CLI来的舒服. 如果你的程序一般用于服务器, 那GUI就多余了, 就算是你的服务器装了桌面环境(没多少人这么干)也没必要. 如果自己用那就随意了, 看心情了.&lt;/p&gt;
&lt;h2&gt;相关库&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#tkinter&quot;&gt;tkinter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#PySimpleGUI&quot;&gt;PySimpleGUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;wxPython&lt;/li&gt;
&lt;li&gt;PyQT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tkinter是Python自带的一个Tcl/Tk的库, 跨平台. Python自带的IDLE就是用tkinter编写的. PySimpleGUI是基于tkinter、Qt、WxPython 和 Rem, 称GUI开发不是困难和痛苦的而是有趣的. wxPython和上面个两个一样都是常见的GUI库. 使用方法与tkinter均类似. PyQT是QT的Python版本, 学过C gui方面应该没有不知道QT的, QT就非常强大了, 只能说没有你想不到没有它做不到了, 但是学习成本高, 文件也大. 所以本期就排除PyQT, 因为QT我也只会个Hello World. ???&lt;/p&gt;
&lt;p&gt;如果在Windows其实不用这些库也可以创建GUI, 不是还有Windows API呢么. Windows中那些库大部分底层都是用Windows API创建的窗口. 只是这些库可以使创建GUI更方便.&lt;/p&gt;
&lt;h2&gt;实操&lt;/h2&gt;
&lt;p&gt;简单的界面就不需要安装其他第三方库了, 自带的tkinter就可以解决了. 当然PySimpleGUI号称将GUI开发变得快乐. 一会我们看看到底快不快乐. 而wxPython我没有接触过, &lt;a href=&quot;https://www.wxpython.org/pages/overview/#hello-world&quot;&gt;https://www.wxpython.org/pages/overview/#hello-world&lt;/a&gt; 看例子我觉得和tkinter差不多. 但他有一个窗口设计器wxFormbuilder有兴趣可以了解下.&lt;/p&gt;
&lt;p&gt;一个简单的需求, 用户登录. 用户输入账户密码登录, 登录成功弹窗提示或者载入主界面.&lt;/p&gt;
&lt;h3&gt;tkinter&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Tk窗口 StringVar字符串变量 Label标签 Entry输入框 Button按钮 messagebox信息框
from tkinter import Tk, StringVar, Label, Entry, Button, messagebox

# 默认用户名密码
DEFAULT_USERNAME = &apos;root&apos;
DEFAULT_PASSWORD = &apos;root&apos;

# 创建根窗口, 指的就是主窗口. 之后的一切组件全在root上展现
root = Tk()
# 设置窗口标题
root.title(&apos;第一个GUI程序.&apos;)

# 设置窗口大小长x宽, 单位像素. 通常tk组件都有geometry方法
# 最后显示出的长宽是受系统缩放影响的.
root.geometry(&apos;350x200&apos;)

# 创建两个变量来存放用户名和密码
username = StringVar()
password = StringVar()

# 创建两个标签用来提示, place为设置组件在窗口中的坐标位置
Label(root, text=&apos;用户名:&apos;).place(x=20, y=50)
Label(root, text=&apos;密码:&apos;).place(x=20, y=90)
# 创建两个输入框, 并将文本变量与其对接
Entry(root, textvariable=username).place(x=120, y=50)
# show就是输入框显示的样子, 一般密码设置为星号. 可以随意设置符号
Entry(root, textvariable=password, show=&apos;✿&apos;).place(x=120, y=90)

def event_login():
    &quot;&quot;&quot;
    登录按钮事件
    :return:
    &quot;&quot;&quot;
    global username
    global password
    # 去除空格, 并且全部小写
    str_username = username.get().strip().lower()
    # 密码也去除空格, 除非允许密码带空格
    str_password = password.get().strip()
    if str_username == &apos;&apos; or str_password == &apos;&apos;:
        messagebox.showwarning(&apos;输入错误&apos;, &apos;用户名密码不能为空&apos;)
    elif str_username == DEFAULT_USERNAME and str_password == DEFAULT_PASSWORD:
        messagebox.showinfo(&apos;成功&apos;, &apos;登录成功&apos;)
        # 登录成功后做别的东西
    else:
        messagebox.showwarning(&apos;错误&apos;, &apos;用户名或密码错误&apos;)

# 登录按钮， 并绑定event_login函数. 按下按钮即触发
Button(root, text=&apos;Login&apos;, command=event_login).place(x=150, y=130)

# 窗口循环
root.mainloop()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;很简单点需求, 用tkinter用了20多行代码. 只是上面加了注释显得代码很多. 很多函数都是组件通用的像上面用到的 geometry 和 place. 绑定函数事件的还有bind等等. 如果你的需求简单, 上面的代码拿走改一改就能用了. 另外这个代码只展示这种按流程写法, 还有基于集成类的写法.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;重点来了, 所有的代码都会在文章最末尾给出链接.  &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;你脚本文件名切记不要和已存在的包一样&lt;/mark&gt;. 注意哈我可说了, 我分享的代码都是一样的. 运行前改下名. 看下还有没有人说没办法运行. ???&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;PySimpleGUI&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import PySimpleGUI as sg

# 默认用户名密码
DEFAULT_USERNAME = &apos;root&apos;
DEFAULT_PASSWORD = &apos;root&apos;

sg.theme(&apos;LightGrey4&apos;)  # 没错设置主题

# 创建布局， 多维数组. 将窗口组件按行排列, 想要如何显示全靠你的数组&quot;长啥样&quot;
layout = &amp;amp;#91;&amp;amp;#91;sg.Text(&apos;用户名:&apos;, size=(6, 1)), sg.InputText()],
          &amp;amp;#91;sg.Text(&apos;密码:&apos;, size=(6, 1)), sg.InputText(password_char=&apos;❀&apos;)],
          &amp;amp;#91;sg.Button(&apos;登录&apos;)]]

# 创建窗口
window = sg.Window(&apos;第二个GUI程序.&apos;, layout)

# 窗口事件循环
while True:
    event, values = window.read()  # 读取事件和值
    if event == &apos;登录&apos;:
        # 去除空格, 并且全部小写
        str_username = values&amp;amp;#91;0].strip().lower()
        # 密码也去除空格, 除非允许密码带空格
        str_password = values&amp;amp;#91;1].strip()
        if str_username == &apos;&apos; or str_password == &apos;&apos;:
            sg.Popup(&apos;输入错误&apos;, &apos;用户名密码不能为空&apos;)
        elif str_username == DEFAULT_USERNAME and str_password == DEFAULT_PASSWORD:
            sg.Popup(&apos;成功&apos;, &apos;登录成功&apos;)
            # 登录成功后做别的东西
        else:
            sg.Popup(&apos;错误&apos;, &apos;用户名或密码错误&apos;)
    elif event is None:
        break

window.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打眼一看, 嘶~~~ 都是一堆看不懂的啊波次得(abcd). 相比tkinter最大得特点就是它将窗口设计按行分化, 使得在布局上更易规划. 你甚至不用考虑高分屏系统缩放问题(也得小改改~~).  而事件循环也简单明了. 有童鞋可能会说了: &quot;你这个事件循环是方便, 但你这个取值也太难受了吧，如果一个窗口里有是几十个输入框那还怎么用数组取值?&quot;&lt;/p&gt;
&lt;p&gt;这个问题问得就很好?. 首先window.read()返回得是 事件和值, 然而这个值并不是数组, 而是字典. 可以通过给组件加上key属性来设置这些字典的key. 如果将上面的代码改写一下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;layout = &amp;amp;#91;&amp;amp;#91;sg.Text(&apos;用户名:&apos;, size=(6, 1)), sg.InputText(key=&quot;_username&quot;)],
          &amp;amp;#91;sg.Text(&apos;密码:&apos;, size=(6, 1)), sg.InputText(password_char=&apos;❀&apos;, key=&quot;_pasword&quot;)],
          &amp;amp;#91;sg.Button(&apos;登录&apos;)]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么实际输出的value就是 {&apos;_username&apos;: &apos;123&apos;, &apos;_pasword&apos;: &apos;123&apos;}, 这样舒服多了吧. 如果在tkinter中想要调用某个输入框的值, 就需要设置全局变量, 或者类中内部变量.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;文中提到的四个库前两个其实使用起来都很简单方便, 但是就是没有窗口设计器. 不能实时的查看到窗口内容的变化. 对大型项目来说有点难受. 而第三四个PyQT是QT的python实现, 这是一个跨平台GUI大户, 有自家完成的设计器. 唯一缺点就是商业授权和学习成本. wxPython可以理解为是QT高压版, 而且还开源.&lt;/p&gt;
&lt;p&gt;小伙子, 这几个库还有更多的组件等你去探索, 等嘛呢~ ?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关链接:
tkinter: https://docs.python.org/zh-cn/3/library/tkinter.html
PySimpleGUI: https://pysimplegui.readthedocs.io/en/latest/
PyQt: https://www.riverbankcomputing.com/static/Docs/PyQt5/
代码: https://github.com/Virace/python-jgah/tree/master/Main/2153&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Python之点到为止: 调用Windows API</title><link>https://x-item.com/python-jgah-win-api.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-win-api.html</guid><description>本文简单了解一下Windows API, 以及ctypes和pywin32的使用.</description><pubDate>Sun, 05 Apr 2020 23:30:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;上一期讲过如何调用dll: &lt;a href=&quot;https://x-item.com/python-jgah-dll.html&quot;&gt;Python之点到为止: 调用动态链接库(DLL)&lt;/a&gt;, 这期进一步深入Windows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Windows API&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Note that this was formerly called the Win32 API. The name Windows API more accurately reflects its roots in 16-bit Windows and its support on 64-bit Windows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;之前叫做Win32 API, 后来更名为Windows API. 随着64位操作系统以及软件的普及, 原来的名字已经不合适了, 已经囊括了对16位、64位系统得支持所以叫现在得名字更合理. 有了这些API才有得现在Windows上所有得软件.&lt;/p&gt;
&lt;p&gt;然而这些API不需要去记住, 只是用到得时候去查文档就好了(详见文章末尾).&lt;/p&gt;
&lt;h2&gt;模块&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ctypes —— Python 的外部函数库&lt;/li&gt;
&lt;li&gt;pywin32 —— Python对Windows的扩展&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前面也说了, 这些Windows API, 不需要去记太多了. 模块部分也不介绍太多, 直接演示代码.&lt;/p&gt;
&lt;h2&gt;实操&lt;/h2&gt;
&lt;p&gt;假如有个需求, 需要执行某些操作后给个提示弹窗. 当然有知道GUI库的童鞋会想到用他们, 很好可以联想到. 但是如果仅仅是一个弹窗就用上GUI库是不是有点浪费了. 当然本期主题是调用Windows API, 自然再Windows环境上操作.&lt;/p&gt;
&lt;p&gt;首先我们去查一下, Windows API中哪个函数是信息框.  &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw&quot;&gt;https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw&lt;/a&gt; , 直接发给大家有兴趣可以按照微软的文档查看其他API.&lt;/p&gt;
&lt;aside class=&quot;md-aside&quot;&gt;
&lt;p&gt;PS: MessageBox函数分两种 MessageBoxA, MessageBoxW. 在C系列直接调用MessageBox就可以了, 编译器可以自动帮你选择是用A或者W. A和W的区别就是一个用于窄字符一个用于宽字符. 窄字符多指ANSI(单字节占用8 bit), 宽字节多指UNICODE(单字节占用16 bit) . Python中默认编码UTF-8所以直接用MessageBoxW就行.&lt;/p&gt;
&lt;/aside&gt;
&lt;blockquote&gt;
&lt;p&gt;扩展: ANSI编码, 还是Windows上使用的默认编码, 例如中文以GBK编码标准. 各个国家文字不同编码标准也不同, 乱糟糟也不能互相转换. 所以有了UNICODE编码, 但是默认编码1个字符占用16 bit, 如果是简单的一串英文很显然是ANSI的两倍, 然后UTF-8编码标准就来了, 这个大哥来了就说&quot;你们ANSI之前那些字符我要了还占用6 bit, 然后其他的字符按情况往上加.&quot;, 哎这就解决了占用大的问题, 还可以完美显示全字符.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;int MessageBoxW(
  HWND    hWnd,
  LPCWSTR lpText,
  LPCWSTR lpCaption,
  UINT    uType
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看到API定义之后就好办了, 文档下面也解释了对应参数的作用.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hWnd: 窗口句柄, 来判断这个信息框是从哪个窗口弹出来的&lt;/li&gt;
&lt;li&gt;lpText: 你提示的信息&lt;/li&gt;
&lt;li&gt;lpCaption: 信息框标题&lt;/li&gt;
&lt;li&gt;uType: 信息框的类型&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ctypes实现&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from ctypes import *
messagebox = windll.user32.MessageBoxW
ret = messagebox(0, &apos;提示信息&apos;, &apos;提示标题&apos;, 0)
print(ret)

user32 = windll.LoadLibrary(&apos;user32.dll&apos;)
messageboxA = user32.MessageBoxA
ret = messageboxA(0, &apos;提示信息&apos;.encode(&apos;ansi&apos;), &apos;提示标题&apos;.encode(&apos;ansi&apos;), 1)
print(ret)

messageboxW = user32.MessageBoxW
ret = messageboxW(0, &apos;提示信息&apos;, &apos;提示标题&apos;, 2)
print(ret)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdgzq6zwzuj20mc05egls.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;为了观看方便, 将三个截图拼接了一下. 实际是一个一个弹出的&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A和W的区别不在多说, 大家可以动手试试. 对于这三个信息框不同的地方那就是按钮了, &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw#parameters&quot;&gt;https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw#parameters&lt;/a&gt; 可以看下 参数 uType 值得范围. 使用方法就是这些数直接加在一起.&lt;/p&gt;
&lt;p&gt;新需求来了, 一段代码执行之后出错了提示一下是否重新执行.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from ctypes import *

user32 = windll.LoadLibrary(&apos;user32.dll&apos;)
messageboxW = user32.MessageBoxW

def todo():
    try:
        assert False, &apos;执行出错&apos; # 出错代码
    except Exception as e:
        # 5代表重试和取消按钮, int(&apos;20&apos;, 16) 是叹号提示(16进制的20转10进制)
        ret = messageboxW(0, &apos;错误:{}, 是否要重试?&apos;.format(e), &apos;出错&apos;, 5 + int(&apos;20&apos;, 16))
        if ret == 4:
            print(&apos;重试执行&apos;)
            todo()

if __name__ == &quot;__main__&quot;:
    todo()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中要注意的就是文档中给的值都是16进制. 返回值文档中也有, 不想看的话代码跑一下print或者debug就知道了. 这样你就有一个稍微人性化点的提示了(只是某个方面上).&lt;/p&gt;
&lt;h3&gt;那么用pywin32来实现呢?&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from win32api import MessageBox
from win32con import MB_RETRYCANCEL, MB_ICONQUESTION, IDRETRY

def todo():
    try:
        assert False, &apos;执行出错&apos; # 出错代码
    except Exception as e:
        ret = MessageBox(0, &apos;错误:{}, 是否要重试?&apos;.format(e), &apos;出错&apos;, MB_RETRYCANCEL + MB_ICONQUESTION)
        if ret == IDRETRY:
            print(&apos;重试执行&apos;)
            todo()

if __name__ == &quot;__main__&quot;:
    todo()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这就更简单了, API名字包括常量名字都和微软文档的一摸一样, 你直接从文档中复制过来直接 import 就OK了.&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;本文讲的一个非常简单的例子, 只是可能扩展部分有点多, 选择性观看. 这只是Windows API中的冰山一角哦. 曾经的一个朋友(易语言患者)因为我走了Python来&quot;嘲讽我&quot;, 说Python能写修改器么. ??? 这世上恐怕没什么事情是不能做的, 只是该不该或是有没有必要罢了.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关资料:
Windows API文档: https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list
ctypes文档: https://docs.python.org/zh-cn/3.7/library/ctypes.html
pywin32: https://github.com/mhammond/pywin32
pywin32文档: 有兴趣的可以加交流群98354582, 文档也是在上面的库中提取的&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Python之点到为止: 系列教程目录</title><link>https://x-item.com/python-jgah.html</link><guid isPermaLink="true">https://x-item.com/python-jgah.html</guid><description>博主原创系列教程索引目录</description><pubDate>Sun, 05 Apr 2020 13:39:07 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;点到为止系列是博主原创的一系列教程, 或是说本人当时学习遇到的痛点. 而并非难点大部分都有个特点: 文档难查、百度没用这一类的. 当前百度搜索那些CSDN博客出来的东西不用看, 没什么有用的.
Google、stackoverflow又全靠翻译~~~&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;h3&gt;基础篇&lt;/h3&gt;
&lt;p&gt;这个基础篇还在考虑是否写出, 因为不远的将来有一个视频计划.?&lt;/p&gt;
&lt;h3&gt;实践篇&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/python-jgah-dll.html&quot;&gt;Python之点到为止: 调用动态链接库(DLL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/python-jgah-win-api.html&quot;&gt;Python之点到为止: 调用Windows API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/python-jgah-gui-dev.html&quot;&gt;Python之点到为止: 关于GUI开发&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/python-jgah-cef.html&quot;&gt;Python之点到为止: 给你的GUI换个feel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python之点到为止: 优美的打包发布你的代码(一)基础&lt;/li&gt;
&lt;li&gt;Python之点到为止: 优美的打包发布你的代码(一)优化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;番外篇&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/py-youtube.html&quot;&gt;Python之点到为止: 下载Youtube视频&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;交流群: 98354582&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS: 所有教程如有外出引用都会用引用块(斜体)标出, 文章最后也会标注来源地址. 教程也有许多不完善的地方还请大家积极反馈.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Python之点到为止: 调用动态链接库(DLL)</title><link>https://x-item.com/python-jgah-dll.html</link><guid isPermaLink="true">https://x-item.com/python-jgah-dll.html</guid><description>本文带大家了解一下, Python中调用链接库的几种方式. 这几种方式之间的差别, 还有就是x64和x32能混用么?Just give a hint.</description><pubDate>Wed, 01 Apr 2020 15:41:37 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;在Windows编程中, 免不了与动态链接库打交道. 它可以试得程序模块化, 方法重用的等等. 对, 类似Python中的模块.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;使用环境&lt;/h2&gt;
&lt;p&gt;整理了一下几种Python会调用动态链接库的环境, 毕竟这种情况很少. 一般多出在旧项目改造.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;没有DLL源码.&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;不会C/C++&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;懒&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第二种情况是不推荐使用这种方法调用已经存在的dll文件, 除非那个DLL文件内部函数很简单, 不涉及到什么指针一类的东西(不是python无法完成这样的操作, 而是对不懂C/C++的童鞋来说无论是理解还是操作都比较痛苦).&lt;/p&gt;
&lt;h2&gt;相关库&lt;/h2&gt;
&lt;p&gt;毕竟Python是跨平台的, 所以操作dll自然不在话下. 这要归功于ctypes这个库.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.python.org/zh-cn/3.7/library/ctypes.html#module-ctypes&quot;&gt;&lt;code&gt;ctypes&lt;/code&gt;&lt;/a&gt; 是 Python 的外部函数库。它提供了与 C 兼容的数据类型，并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;关于调用DLL的方式:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import ctypes

ctypes.windll.LoadLibrary(&apos;d.dll&apos;)
ctypes.WinDLL(&apos;d.dll&apos;)

ctypes.oledll.LoadLibrary(&apos;d.dll&apos;)
ctypes.OleDLL(&apos;d.dll&apos;)

ctypes.cdll.LoadLibrary(&apos;d.dll&apos;)
ctypes.CDLL(&apos;d.dll&apos;)

ctypes.pydll.LoadLibrary(&apos;d.dll&apos;)
ctypes.PyDLL(&apos;d.dll&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;分为四组, 组内两条语句结果是一样得. 我们就按照四组来对比说一下.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;WinDLL&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;OleDLL&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;CDLL&lt;/li&gt;
&lt;li&gt;PyDLL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其中1, 2只能在Windows上使用, 3,4则是跨平台的. 这别蒙也别弄混, 其他系统中. 比如Linux上使用的动态链接库不是 &lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;.dll&lt;/mark&gt; 文件, 而是 &lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;.so&lt;/mark&gt; 文件. 然而在Windows环境中这四种都可以使用, 1234之间明显区别除了跨平台那就是, *cdll加载使用标准&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;cdecl&lt;/mark&gt;调用约定导出函数的库，而windll、oledll库使用&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;stdcall&lt;/mark&gt;调用约定调用函数。*而pydll与cdll相同.&lt;/p&gt;
&lt;aside class=&quot;md-aside&quot;&gt;
&lt;p&gt;PS: &lt;em&gt;cdecl&lt;/em&gt; 就是标准的C/C++标准, &lt;em&gt;stdcall&lt;/em&gt; 常用于Win32. 如果不懂先不用了解, 后续可以百度看一下差别. 如果需要深入使用那么这个概念是要了解的。&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;1和2的区别是OleDLL会返回HRESULT代码, HRESULT就是一个用于描述错误或警告的32位值. 体现了DLL是否在正确就加载信息. 而WinDLL则作为标准输出来显示错误.&lt;/p&gt;
&lt;p&gt;那么至于PyDLL与其他三种的区别就是, 其他三种在调用由这些库导出的任何函数之前释放Python &lt;a href=&quot;https://docs.python.org/2.7/glossary.html#term-global-interpreter-lock&quot;&gt;全局解释器锁&lt;/a&gt;, 然后重新获取它. 而PyDLL并且在函数执行后检查了Python错误标志. 如果设置了错误标志, 则会引发Python异常. (ps:关于这个类, 没用过有没有了解的大神说一下在什么情况下使用这个类.)&lt;/p&gt;
&lt;aside class=&quot;md-aside&quot;&gt;
&lt;p&gt;PS: 这部分信息有些硬核, 对于Python的全局解释锁(GIL)就不深入了, 有兴趣可以单独拿出来讲讲.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2&gt;实操&lt;/h2&gt;
&lt;p&gt;:::tip
准备了两个简单的DLL文件&amp;gt;&amp;gt;&amp;gt;点击下载
:::&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/virace.cc/other/2121/x86.dll&quot;&gt;x86.dll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/virace.cc/other/2121/x64.dll&quot;&gt;x64.dll&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先用x86.dll举例子, 等下再说这两个有什么区别.  打开Python Shell, 或者编写个脚本自己测试怎么方便怎么来.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Python 3.8.1 (default, Mar  2 2020, 13:06:26) &amp;amp;#91;MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; import ctypes
&amp;gt;&amp;gt;&amp;gt; dll = ctypes.CDLL(r&quot;C:\Users\Virace\Downloads\x86.dll&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有些心急的怕是已经在解释器中敲上代码了, BUT, 这段代码在大部分人的环境下因该会报错像这样.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdeo3e81kqj20pa04cgqu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;解释一下为什么: 64位程序无法直接调用32位dll, 至于为什么百度去了解吧. 回过头看下我发的代码, python信息输出是不是有个 &lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;64 bit&lt;/mark&gt;, 这回了解为什么准备两个dll了吧. 当然实际使用对于前面说的两种情况(没有源码和不懂C), 只能切换Python.&lt;/p&gt;
&lt;p&gt;回到代码, 选择好正确得方式后你就可以加载dll了. 这两个dll只增加了三个简单的函数: add 、sub、msgbox , 下面是C源码.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;extern &quot;C&quot; __declspec(dllexport) int add(int a, int b)
{
    return (a + b);
}

extern &quot;C&quot; __declspec(dllexport) int sub(int a, int b)
{
    return (a - b);
}

extern &quot;C&quot; __declspec(dllexport) int msgbox(LPCWCH title, LPCWCH msg)
{
    return MessageBox(0, msg, title, 0);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么也知道怎么选择DLL或者Python位数了, 也知道DLL公开函数了. 下面就是使用方法了.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import ctypes

dll = ctypes.CDLL(r&quot;C:\Users\Virace\Downloads\x64.dll&quot;)
print(dll.add(22, 33))
print(dll.sub(22, 33))
dll.msgbox(&apos;这里是标题&apos;, &apos;这里是信息提示.&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;调用其实很简单, 但是如果不知道DLL有不同调用协议, 也不了解x64无法调用x32dll的话, 会是个大坑. 当你连位数都不清楚的时候当然也就想不到这方面的问题.&lt;/p&gt;
&lt;p&gt;哦对了, 我的测试环境Python环境为3.8. 如果使用老版本可能会与文中不符, 那只能查阅文档了(貌似一些旧版本还不支持中文路径dll导入??? 3.8是没有这种情况).&lt;/p&gt;
&lt;p&gt;这期文章虽然篇幅很长, 但还是点到为止系列. 至于为什么...... 小伙子~悟去吧.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;相关链接:
腾讯开发者手册(ctypes):  https://cloud.tencent.com/developer/section/1370537
官方文档(ctypes): https://docs.python.org/zh-cn/3.8/library/ctypes.html&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>重拾2016, 博客改造计划(三)</title><link>https://x-item.com/blog-rebuild-3.html</link><guid isPermaLink="true">https://x-item.com/blog-rebuild-3.html</guid><description>博客改造第三篇, 加入Animate.css. 整理了一下代码, 插件分享. 还有后续细节修改, 虽然为系列最后一篇文章, 但优化的道路远没有结束.</description><pubDate>Tue, 31 Mar 2020 12:09:33 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上文: 重拾2016, 博客改造计划(二)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;收尾工作&lt;/h2&gt;
&lt;p&gt;大改几乎没有了,剩下就是一些小细节东西. 修修补补.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改背景颜色(主题自带功能)使得修改后的404页面更和谐&lt;/li&gt;
&lt;li&gt;增加 wow.js 和 Animate.css.&lt;/li&gt;
&lt;li&gt;导航、文章列表动画&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本来还想修改一下评论UA功能, 比如将图片换成fontawesome. 但是一看代码,好家伙分的非常细, 打眼一看感觉有些系统图标可能没有. 这部分后续慢慢改也不是刚需.&lt;/p&gt;
&lt;h2&gt;继续精简&lt;/h2&gt;
&lt;p&gt;不得不说, 有些时候有些洁癖.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;去掉短代码支持. 因为我用的不多, 或是说几乎不用.&lt;/li&gt;
&lt;li&gt;清理函数中看板娘判断&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有些小细节改完都忘了, 具体改动可以看这:
&lt;a href=&quot;https://github.com/Virace/kratos-pjax-modify/commits/master&quot;&gt;https://github.com/Virace/kratos-pjax-modify/commits/master&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;优化部分&lt;/h2&gt;
&lt;p&gt;原来的插件大约有十几个是启用的, 除了前端增加了一堆没用的js、css之外没觉得有什么额外的加成.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Akismet Anti-Spam —— 垃圾评论拦截&lt;/li&gt;
&lt;li&gt;External Media without Import —— 导入外链媒体&lt;/li&gt;
&lt;li&gt;WPJAM BASIC —— 优化插件&lt;/li&gt;
&lt;li&gt;&lt;s&gt;RB External Thumbnail&lt;/s&gt; —— 外链图片设置特色图片&lt;/li&gt;
&lt;li&gt;&lt;s&gt;WP First Letter Avatar&lt;/s&gt; —— 没有头像的用户增加头像&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后两个插件目前未启用, 4号插件和2号功能上有些许重复, 虽然很长时间没更新但是hook函数没变也一只能用. 导入外链媒体还是推荐自建cdn创建备份, 以备不时之需. 头像插件很纠结, 现在网站首页文章几乎可以在500ms内加载完毕(不加载头像), 加了头像会增加200ms左右, 而且还不稳定. 这部分还值得研究一下.&lt;/p&gt;
&lt;p&gt;上了缓存的网站打开还是舒服多了, 已经回不去无缓的时候了.&lt;/p&gt;
&lt;h2&gt;没有结束&lt;/h2&gt;
&lt;p&gt;这系列三遍文章虽然结束了, 但是有些小细节还需要后续使用中在进行修改. 因为不是本专业所以修改的代码只能说能用, 不保证质量. 并且很多代码改动并未在移动端测试.&lt;/p&gt;
&lt;p&gt;还有原来文章的主图没有统一大小, 这款主题的手机端也没有固定主图宽高, 导致主页文章看起来比较乱, 这些细节后续慢慢改.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gddf62h0v0j20k00k0my6.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</content:encoded></item><item><title>重拾2016, 博客改造计划(二)</title><link>https://x-item.com/blog-rebuild-2.html</link><guid isPermaLink="true">https://x-item.com/blog-rebuild-2.html</guid><description>博客改造第二篇, 主要修改样式. 精简文件以及后续修改计划.</description><pubDate>Mon, 30 Mar 2020 15:45:24 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;上文: 重拾2016, 博客改造计划(一)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;继续改造&lt;/h2&gt;
&lt;p&gt;上文写完之后, 发现一些问题. 个人习惯性控制每行字体(这行就不控制了). 打几个字就一个回车. 导致文字整体偏左, 如果全部居中又显得别扭. 调整如下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首页文章标题加粗.&lt;/li&gt;
&lt;li&gt;文章的左右padding增加至了50px.&lt;/li&gt;
&lt;li&gt;诗句区块, 字体大小、行高、间距、颜色, 有些许调整.&lt;/li&gt;
&lt;li&gt;整站字体粗细从原来的300更改为350.&lt;/li&gt;
&lt;li&gt;文章内图片左右边距设置为0. 并增加了小小的阴影.&lt;/li&gt;
&lt;li&gt;有序列表加了个边框(和之前主题学的). 利用hover加了一个放大效果.&lt;/li&gt;
&lt;li&gt;无序列表去掉原来的圆点, 改为FontAwesome的一个对号. 并且增加渐变效果.&lt;/li&gt;
&lt;li&gt;引用块文字修改为斜体&lt;/li&gt;
&lt;li&gt;引文块来源标签前增加 &quot;——&quot;&lt;/li&gt;
&lt;li&gt;H2、H3增加一个划入下划线效果.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;//cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/virace.cc/img/post/2134/1.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;//cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/virace.cc/img/post/2134/2.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;改造并没有修改源文件, 而是参照 &lt;a href=&quot;https://github.com/Vtrois/Kratos&quot;&gt;kratos&lt;/a&gt; 最原始的主题 custom 大法. 在主题函数中增加调用.&lt;/p&gt;
&lt;p&gt;因为我毕竟是个后端程序员, 而且PHP只是略懂. 所以这东西好不好看就仁者见仁智者见智了.&lt;/p&gt;
&lt;h2&gt;精简计划&lt;/h2&gt;
&lt;p&gt;原主题带了一个看板娘, 就是左右下角有个小人眼睛还会跟随鼠标的一个纸片人. 好玩是挺好玩, 但是因为文件太大了, 前台加载有点难受= =. 直接去掉了.
接着就是主题主脚本kratos.js在加载的时候会清理控制台, 这部分代码注释掉了, 因为有时候测试需要看着控制台. 输出的版权信息也优化了一下, 直接输出GitHub地址.&lt;/p&gt;
&lt;h2&gt;后续操作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;404页面画风和整个主题不太符, 着手修改.&lt;/li&gt;
&lt;li&gt;加入animate.css&lt;/li&gt;
&lt;li&gt;尽量不动原来的文件, 这样后续更新也方便.&lt;/li&gt;
&lt;li&gt;......&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;404页面还有一个接口获取随机的一段话, 对于我来说是感觉有点&quot;徒增功耗&quot;了.哈哈.
现在只是把页头页脚加进来但是发现, PJAX没实现估计是容器选择的问题. 看了下代码有个div叫容器. 加过去就OK了. 但是变成黑白三明治了. ?????
难受~&lt;/p&gt;
&lt;aside class=&quot;md-aside&quot;&gt;
&lt;p&gt;唉, JS、CSS、PHP都当饭吃了.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;未完待续...&lt;/p&gt;</content:encoded></item><item><title>重拾2016, 博客改造计划(一)</title><link>https://x-item.com/blog-rebuild-1.html</link><guid isPermaLink="true">https://x-item.com/blog-rebuild-1.html</guid><pubDate>Mon, 30 Mar 2020 09:07:32 GMT</pubDate><content:encoded>&lt;p&gt;2014年底心血来潮, 在lofter开始分享自己的想法.&lt;/p&gt;
&lt;p&gt;那只是个开始, 2016年正式购入域名, 探索自建博客&lt;/p&gt;
&lt;p&gt;随着时间的推移, 慢慢淡忘了当年的激情.&lt;/p&gt;
&lt;p&gt;赶上2020年发了个大假, 心也沉下来了.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;是时候重拾当年的激情了.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/public/img/gif/ooo.gif&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/public/img/gif/tututu.gif&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Virace/jsDelivr-CDN/public/img/gif/aaa.gif&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;开干.&lt;/p&gt;
&lt;h2&gt;改头换面&lt;/h2&gt;
&lt;p&gt;从16年搭建开始, 就一直在使用收费主题, 因为感觉收费主题质量更好&lt;/p&gt;
&lt;p&gt;但是经过几年发现, 过段时间要么不更新 要么直接跑路&lt;/p&gt;
&lt;p&gt;跑就跑吧, 好歹把源码发一下. 验证的代码加密了验证服务器还失效了.&lt;/p&gt;
&lt;p&gt;无奈去花钱解密, 然后再改的. 这就是我用的上一个主题.&lt;/p&gt;
&lt;p&gt;这几天又去逛了一下, 最近都变成平台类了.&lt;/p&gt;
&lt;p&gt;多少钱加入平台会员, 然后平台内的主题会员可以使用.
想了想放弃了, 一个优化都够你受的还好几个维护.
倒不是多少钱, 而是怕这钱花了得不到应有的东西(更新服务).&lt;/p&gt;
&lt;p&gt;后续GitHub上看了一下, 开源主题很多.&lt;/p&gt;
&lt;p&gt;例如: &lt;a href=&quot;https://github.com/Vtrois/Kratos&quot;&gt;kratos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Vtrois/Kratos/inc/options-framework/images/about.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A responsive WordPress theme focused on the user reading experience&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;我个人是比较喜欢这种结构的, 包括之前用的所有收费主题都是这种类型的&lt;/p&gt;
&lt;p&gt;下载之后再本地搭建一个环境, 测试主题.&lt;/p&gt;
&lt;p&gt;问题还是有的, 其一是不支持无刷新加载(pjax).
在当年带宽没那么高的时候无刷新加载似乎还挺好,
防止一些花里胡哨的页面, 一刷新先白屏闪一会才出现.
其次就是没有对子主题做优化.
虽然作者留了custom 文件夹里面可以修改css、js、php加个函数啥的
但我个人还是喜欢是用WP提供的子主题.&lt;/p&gt;
&lt;p&gt;接着就发现我现在使用的这款: &lt;strong&gt;kratos-pjax&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/xb2016/kratos-pjax/screenshot.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A lovely WordPress theme &lt;a href=&quot;https://moedog.org/787.html&quot;&gt;https://moedog.org/787.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;看名字就知道支持pjax, 而且还是二次元.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdc0zfhao3j206f04imx1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;除了pjax问题也是一样, 对于子主体未作优化.
但是整体比较适合, 因为也懒得从头弄pjax了.&lt;/p&gt;
&lt;h2&gt;发现问题&lt;/h2&gt;
&lt;p&gt;使用后发现以下问题, 准备着手修改&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;二次创作者不喜欢新版编辑器, 这就带来很多新问题. 新版编辑器因为标签class 均有变化.使用新版编辑器编写的文章, 部分内容无样式&lt;/li&gt;
&lt;li&gt;图片灯箱不支持&lt;/li&gt;&lt;li&gt;支持嵌入播放器, 但是都放在一个js文件里. &lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;解决问题&lt;/h2&gt;
&lt;p&gt;没办法用自主体那只能修改本体了.
看了一下原作者和 二次创作者库的开源协议. GNU3.0
可以修改需要保留版权声明.
明确可以修改后就要动手了.&lt;/p&gt;
&lt;p&gt;灯箱好解决, 看了下代码. 调用的是  &lt;a href=&quot;http://layer.layui.com&quot;&gt;layer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在kratos.js中找到, 灯箱的函数  showPhotos&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var showPhotos = function(){
	layer.photos({
	  photos:&apos;.kratos-post-content p,.kratos-status-post p&apos;,
	  anim: 0
	});
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;选择器加上 &quot;.kratos-status-post wp-block-image&quot; 就可以了&lt;/p&gt;
&lt;p&gt;嵌入播放器, 代码在theme.min.js文件内.
虽然压缩了, 但还好保留了注释.
根据注释找到了 &lt;em&gt;APlayer&lt;/em&gt; 部分代码直接删除即可.&lt;/p&gt;
&lt;h2&gt;未完待续&lt;/h2&gt;
&lt;p&gt;因为博客用过超多的插件, 以至于数据库中又超多的与博客本身无关的表&lt;/p&gt;
&lt;p&gt;这一这次改造, 是先备份数据, 重新安装Wordpress&lt;/p&gt;
&lt;p&gt;再导入数据, 中间导入媒体的时候除了一些差错&lt;/p&gt;
&lt;p&gt;导致主图(特色图片), 获取不到了.&lt;/p&gt;
&lt;p&gt;也是花了很时间, 去找这方面问题.&lt;/p&gt;
&lt;p&gt;后来根据已经做好的备份, 在本地重新搭建, 然后只导出媒体.&lt;/p&gt;
&lt;p&gt;在回来导入才解决的问题.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gdc20sqo8nj207u09naa8.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;后台插件也只剩下三个, 一个垃圾评论拦截, 一个WPJAM必备.&lt;/p&gt;
&lt;p&gt;剩下那个是处理没有头像的用户给个头像, 但是对中文名字不支持. 后续可能考虑去掉.&lt;/p&gt;
&lt;p&gt;还剩下一些小的琐碎的问题, 将在后续文章中继续分享处理过程.&lt;/p&gt;</content:encoded></item><item><title>如何选择一款合适的杀毒软件?</title><link>https://x-item.com/anti-virus-software.html</link><guid isPermaLink="true">https://x-item.com/anti-virus-software.html</guid><description>小白向, 教你如何选择一款对你自己合适的杀毒软件.</description><pubDate>Fri, 27 Mar 2020 20:32:29 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;古话说的好: 杀毒不选好, 死机跑不了.&lt;em&gt;鲁迅&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;很多电脑小白有一颗想了解的心
但是却因为 &lt;strong&gt;明明都是中文 但是连在一起却看不懂&lt;/strong&gt; 的问题
望而却步
其实也不难, 本期就叫你选择合适自己的杀毒软件
因为面向小白, 所以一些收费或者略微硬核的就不推荐了&lt;/p&gt;
&lt;h3&gt;找准定位&lt;/h3&gt;
&lt;p&gt;意思就是你需要杀毒来干嘛
很多人蒙了, &quot;杀毒就是来杀毒的呗, 不然要他干什么&quot;&lt;/p&gt;
&lt;p&gt;对, 也不对.
因为国内大环境就是少有只为杀毒的杀毒软件.
别乱, 这类软件成为&quot;XX安全中心&quot; &quot;XX电脑管家&quot;&lt;/p&gt;
&lt;p&gt;这回熟悉了吧, 这些软件不只有杀毒功能, 还能帮你清理垃圾等&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gd93wd8oroj207804q0tc.jpg&quot; alt=&quot;腾讯电脑管家&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;腾讯电脑管家&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;当然不是&quot;点名批评&quot;, 这类软件对于小白来说很友好.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gd93yieicrj20mz0asmxr.jpg&quot; alt=&quot;腾讯电脑管家&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看官网上面的功能介绍就知道了, 哈哈&lt;/p&gt;
&lt;p&gt;那么问题就来了, 你到底需不需要这些功能?&lt;/p&gt;
&lt;h4&gt;1. 我就图个方便, 游戏电脑.&lt;/h4&gt;
&lt;p&gt;OK, 如果是这种情况, 国产这类安全软件很适合你.
也很省心&lt;/p&gt;
&lt;p&gt;例子: &lt;strong&gt;360安全卫士&lt;/strong&gt;、&lt;strong&gt;腾讯电脑管家&lt;/strong&gt;、&lt;strong&gt;火绒安全软件&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;2. 我只需要其中部分功能, 比如清理垃圾就行了&lt;/h4&gt;
&lt;p&gt;其实我感觉多数网友都是这种
还是不想自己的电脑打开就乱糟糟的&lt;/p&gt;
&lt;p&gt;例子: &lt;strong&gt;火绒安全软件&lt;/strong&gt;, 其实你也可以额外找个清理软件(^_^)&lt;/p&gt;
&lt;h4&gt;3. 我什么额外功能都不要, 别给我整那些没用的.&lt;/h4&gt;
&lt;p&gt;很好, 极简用户. 我是比较欣赏这部分用户的.
说你是不是处女座(日常迫害)&lt;/p&gt;
&lt;p&gt;例子: Windows安全中心(Win10自带) 、 360杀毒(国内版、国际版)、小红伞&lt;/p&gt;
&lt;h4&gt;4. &quot;裸奔&quot;&lt;/h4&gt;
&lt;p&gt;一般都是一些大手, 或者追求一个字&lt;strong&gt;轻&lt;/strong&gt;
亦或者爱折腾, 经常重装系统&lt;/p&gt;
&lt;h3&gt;切勿跟风&lt;/h3&gt;
&lt;p&gt;一些小白容易陷入一个误区&lt;/p&gt;
&lt;p&gt;其他人用什么就跟着用, 也不知道好不好用
见人就分享, 然后说我认识的XX大神人家就用这个&lt;/p&gt;
&lt;p&gt;这类杀毒有一个特点, 就是国际口碑不错
国际排名也经常前几
而且都是一些国外杀软&lt;/p&gt;
&lt;p&gt;这些国外杀软可能未必适用于国内环境, 你应该懂我意思
当然不是否定杀软的能力&lt;/p&gt;
&lt;p&gt;例子: 卡巴斯基、 Syman&lt;a href=&quot;https://bbs.kafan.cn/forum-51-1.html&quot;&gt;tec&lt;/a&gt;、NOD32等等&lt;/p&gt;
&lt;p&gt;其实这就和找对象一样
你说家里推荐相亲的就一定是适合你的么?
而且使用软件也是你适应一个软件的过程
有些软件算法不错的也在适应你&lt;/p&gt;
&lt;p&gt;时间长了都老夫老妻, 就什么都懂你了,&lt;/p&gt;
&lt;p&gt;最后放一个比较常见的杀软简单对比. 来结束今天的推荐&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;杀软名称&lt;/th&gt;
&lt;th&gt;是否适合小白&lt;/th&gt;
&lt;th&gt;优化功能&lt;/th&gt;
&lt;th&gt;国际测试&lt;/th&gt;
&lt;th&gt;防火墙&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;360套装&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;td&gt;未参加&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;腾讯电脑管家&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;td&gt;⭐ ⭐  __&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;火绒&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;td&gt;未参加&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows安全中心&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;⭐  ⭐  ⭐&lt;/td&gt;
&lt;td&gt;√&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;卡巴斯基&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;⭐  ⭐  ⭐&lt;/td&gt;
&lt;td&gt;免费版无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NOD32&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;⭐  ⭐  ⭐&lt;/td&gt;
&lt;td&gt;免费版无&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其实国产杀软近段时间也有不错的
例如: 微点、江民等等&lt;/p&gt;
&lt;p&gt;但是之前都一直在做企业杀毒, 个人杀毒也是最近再有
而且是收费, 对小白来说还是算了.&lt;/p&gt;
&lt;p&gt;如果你又更好的推荐, 可以在下方评论哦.^_^&lt;/p&gt;</content:encoded></item><item><title>漫步者真无线蓝牙耳机TWS1经典版测评</title><link>https://x-item.com/edifier-tws1.html</link><guid isPermaLink="true">https://x-item.com/edifier-tws1.html</guid><pubDate>Tue, 07 Jan 2020 15:40:38 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gaoff94yauj20ku06zwfz.jpg&quot; alt=&quot;漫步者真无线蓝牙耳机TWS1经典版测评&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;现在的旗舰机都没办法添加上技术非常高端的3.5毫米耳机接口
只能转到蓝牙耳机
在我上学时买过蓝牙耳麦
只能听听歌
打电话都有很长的延迟
现在这TWS爆火
也体验一下&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;突发事件，京东购买连续换货中...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2020年1月1日购买 2号收到发现有划痕换货&lt;/li&gt;
&lt;li&gt;3号收到一直没有详细的测评使用直到7号有严重的断流,换货&lt;/li&gt;
&lt;li&gt;7日申请换货8日到过没有发现明显问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结论: 延迟靠软件, 音质咱不懂. 不是Type-C, 充电不方便.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;测试环境: MIX3, MIUI 11 开发版20.x&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;本体&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;纯靠软件优化, 用系统播放器播放就直接能感受到延迟.&lt;/li&gt;
&lt;li&gt;再干扰比较强的地方?几乎无法使用. 再北京南站2楼候车室中央几乎无法使用. 只能到边缘地区才可以正常使用. 旁边那哥们带的airpods完全不受影响.&lt;/li&gt;
&lt;li&gt;上面所说的无法使用是指, 带着耳机手机在兜里. 手机摆脸附近还是能用的. 但是感觉像是带着耳机举着手机打电话.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;外观&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;充电盒与耳机外表容易刮花, 我的盒子用一周已经全是划痕.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这款耳机实话说, 买的有点后悔.  198购入, 感觉目前只是比较火.&lt;/p&gt;
&lt;p&gt;但是TWS的春天还远远未到.&lt;/p&gt;</content:encoded></item><item><title>VSCode Remote Development, Bad owner or permissions</title><link>https://x-item.com/vscode-remote-development.html</link><guid isPermaLink="true">https://x-item.com/vscode-remote-development.html</guid><pubDate>Sun, 29 Dec 2019 03:03:37 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;写了小项目用到了Celery
想在windows下使用这玩意是困难重重
总会遇到各种问题
所以尝试一下远程开发直接扔到服务器里
正好年底活动买了一个天翼云的服务器
解决办法直接拉到底
下面只是寻找问题的过程&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;直接安装插件:  &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack&quot;&gt;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gadd8fzcl9j20lm09cdgz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择打开配置文件或者直接选择add new ssh host使用ssh命令链接
这里先尝试连接一下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gaddaxavsaj20w502d3yk.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Windows10 提示权限有问题, 简单查了一下
&lt;a href=&quot;https://code.visualstudio.com/docs/remote/troubleshooting#_local-ssh-file-and-folder-permissions&quot;&gt;https://code.visualstudio.com/docs/remote/troubleshooting#_local-ssh-file-and-folder-permissions&lt;/a&gt;
按照给的命令执行(不用尝试了会报错的)
过程中提示安装了NuGet&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gaddesam7vj20rt0ghq5l.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gaddfzwwz3j211804njs1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;报错说签名问题, 很好
直接去github下载最新的包
&lt;a href=&quot;https://github.com/PowerShell/Win32-OpenSSH/releases&quot;&gt;https://github.com/PowerShell/Win32-OpenSSH/releases&lt;/a&gt;
位数按你系统下载
下载完解压个地方 我这就解压桌面了 用完就删&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Install-Module &quot;C:\Users\Virace\Desktop\OpenSSH-Win64\OpenSSHUtils.psm1&quot;

Repair-UserSshConfigPermission ~/.ssh/config
Get-ChildItem ~\.ssh\* -Include &quot;id_rsa&quot;,&quot;id_dsa&quot; -ErrorAction SilentlyContinue | % {
    Repair-UserKeyPermission -FilePath $_.FullName @psBoundParameters
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第二句引号里面得换成你自己刚才解压的目录&lt;/p&gt;
&lt;p&gt;理论上来说运行到这就没问题了, 可以正常链接了
BUT,
我这还是提示权限问题&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1gadeas4i88j210b0p8jup.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后查看设置有个配置文件
C:\Users\Virace.ssh\config
将刚才我们弄了半天的文件路径加进去
果然TM的链接成功了&lt;/p&gt;
&lt;p&gt;链接成功了但是并不知道问题在哪
到底是Win10自带的SSH权限问题
还是就是VSCode插件设置问题
还是两者都&lt;/p&gt;
&lt;p&gt;为了严谨, 装了个虚拟机测试了一下&lt;/p&gt;
&lt;p&gt;然而安装虚拟机之后
按照之前的步骤链接
没有任何报错, 也不存在什么权限问题
只是这个.ssh 文件夹没有 需要手动新建一下&lt;/p&gt;
&lt;p&gt;那么看来权限问题是这个.ssh 文件夹导致的
然而这个文件夹是给github添加密钥时候新建的&lt;/p&gt;
&lt;p&gt;结论就是如果使用过git中自带的ssh功能, 在使用win10自带的就会有权限问题&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;VSCode SSH-REMOTE 插件设置 配置文件给定路径(推荐)&lt;/li&gt;
&lt;li&gt;删除.ssh文件夹, 重新创建(不推荐)&lt;/li&gt;
&lt;li&gt;直接卸载Win10自带SSH, 使用git自带的SSH&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Wordpress更新提示Too Many Requests解决方案</title><link>https://x-item.com/wp-upgrader.html</link><guid isPermaLink="true">https://x-item.com/wp-upgrader.html</guid><description>两种修改方法解决Wordpress更新时因网络问题导致下载更新失败的问题.</description><pubDate>Thu, 28 Nov 2019 13:27:46 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;不怕有问题, 就怕你不会解决问题.&lt;em&gt;周树人&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/006k14saly1gjdt60vu37j30dw0efgmb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;发现问题&lt;/h3&gt;
&lt;p&gt;先解释一下Too Many Requests&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在HTTP协议中，响应状态码 429 Too Many Requests 表示在一定的时间内用户发送了太多的请求，即超出了“频次限制”。&lt;em&gt;https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/429&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;意思就是访问太频繁导致的, 但很多用户可能没有进行访问. 这可能与Wordpress验证机制有关吧, 猜测其他网站是按IP判断, wp官网可能用的IP段, 或是其他吧.&lt;/p&gt;
&lt;p&gt;这就导致你可能没有访问过Wordpress的官网, 还是会出现这个423的错误, 安装插件或是更新等操作都会报错.&lt;/p&gt;
&lt;h3&gt;做出假设&lt;/h3&gt;
&lt;p&gt;既然服务器无法访问, 那么试试本地是否可以. 如果可以的话, 在本地下载好所需压缩包, 上传到服务器使其使用本地文件更新.&lt;/p&gt;
&lt;p&gt;正常点击更新, 会有报错信息. 但是会有url信息, &quot;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;正在从: https://downloads.wordpress.org/release/zh_CN/wordpress-x.x.zip下载&lt;/mark&gt;&quot;, x.x就是更新的版本, 可以将连接复制一下直接下载下来.&lt;/p&gt;
&lt;h3&gt;提出方案&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;hook函数site_transient_update_core&lt;/li&gt;
&lt;li&gt;修改class-wp-upgrader.php文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一种是hook函数&quot;site_transient_update_core&quot;, 使其在更新的时候返回一个其他连接进行下载更新. 目前网络中很多博主会提供这个方法, 并且放上自己的CDN连接, &lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;切记不要轻易使用他人提供的连接进行更新&lt;/mark&gt;.&lt;/p&gt;
&lt;p&gt;第二种是直接改更新文件, 因为毕竟更新不是每天都需要的, 一两个月能用上一次, 所以改一次也不会浪费多少时间. 所以个人推荐这种, 毕竟所有操作透明都是自己操作.&lt;/p&gt;
&lt;h3&gt;实际实施&lt;/h3&gt;
&lt;p&gt;第一种很简单, 只需要在你的主题 functions.php(部分主题提供自定义代码文件所以并不是必须) 中添加以下代码.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add_filter(&apos;site_transient_update_core&apos;, function ($value) {
    foreach ($value-&amp;gt;updates as &amp;amp;$update) {
        if ($update-&amp;gt;locale == &apos;zh_CN&apos;) {
            $update-&amp;gt;download = &apos;#实际下载地址#&apos;;
            $update-&amp;gt;packages-&amp;gt;full = &apos;#实际下载地址#&apos;;
        }
    }
    return $value;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;简单解释一下, 判断如果语言是中文, 则将下载地址以及和包完整地址替换. 实际连接需要自己去搞定, 举例: 刚才不是下载完整包了么, 可以把这个包直接上传到你的网站根目录, 假设你的域名是 aabb.com, 更新的版本是5.5.1, 那么这个连接填写的就是&quot;https://aabb.com/wordpress-5.5.1-zh_CN.zip&quot;, 后面的文件名不必纠结, 改什么都无所谓.&lt;/p&gt;
&lt;p&gt;但是更新过后记得要把这段代码注释掉. 否则下次更新会一直循环, 检测到5.5.2个更新, 然后hook一直再给5.5.1的包.&lt;/p&gt;
&lt;p&gt;第二种也不难, 还是刚才下载的完整包, 上传到服务器中, 位置随意. 找到wordpress安装目录&quot;wp-admin/includes/class-wp-upgrader.php&quot;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * Download a package.
 *
 * @since 2.8.0
 * @since 5.5.0 Added the `$hook_extra` parameter.
 *
 * @param string $package          The URI of the package. If this is the full path to an
 *                                 existing local file, it will be returned untouched.
 * @param bool   $check_signatures Whether to validate file signatures. Default false.
 * @param array  $hook_extra       Extra arguments to pass to the filter hooks. Default empty array.
 * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
 */
public function download_package( $package, $check_signatures = false, $hook_extra = array() ) {
    /**
     * Filters whether to return the package.
     *
     * @since 3.7.0
     * @since 5.5.0 Added the `$hook_extra` parameter.
     *
     * @param bool        $reply      Whether to bail without returning the package.
     *                                Default false.
     * @param string      $package    The package file name.
     * @param WP_Upgrader $this       The WP_Upgrader instance.
     * @param array       $hook_extra Extra arguments passed to hooked filters.
     */
    $reply = apply_filters( &apos;upgrader_pre_download&apos;, false, $package, $this, $hook_extra );
    if ( false !== $reply ) {
        return $reply;
    }

    if ( ! preg_match( &apos;!^(http|https|ftp)://!i&apos;, $package ) &amp;amp;&amp;amp; file_exists( $package ) ) { // Local file or remote?
        return $package; // Must be a local file.
    }

    if ( empty( $package ) ) {
        return new WP_Error( &apos;no_package&apos;, $this-&amp;gt;strings&amp;amp;#91;&apos;no_package&apos;] );
    }

    $this-&amp;gt;skin-&amp;gt;feedback( &apos;downloading_package&apos;, $package );

    $download_file = download_url( $package, 300, $check_signatures );

    if ( is_wp_error( $download_file ) &amp;amp;&amp;amp; ! $download_file-&amp;gt;get_error_data( &apos;softfail-filename&apos; ) ) {
        return new WP_Error( &apos;download_failed&apos;, $this-&amp;gt;strings&amp;amp;#91;&apos;download_failed&apos;], $download_file-&amp;gt;get_error_message() );
    }

    return $download_file;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到这个 &quot;download_package&quot; 的函数. 在函数内的第一行添加以下内容.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$package = &quot;/tmp/wordpress-5.5.zip&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后面路径就是你上传的路径, 你也可以在这里添加上第一步制作的连接. 然后再回到后台点击更新就可以了, 这种方法的好处就是, 你修改过的这个文件会在更新的时候覆盖掉, 防止出现hook更新之后忘了注释导致的一些问题.&lt;/p&gt;
&lt;p&gt;方法二适用于更新主题和插件, 但是只有更新Wordpress会恢复文件, 如果更新插件或者主题, 改过记得改回去.&lt;/p&gt;
&lt;h3&gt;扩展&lt;/h3&gt;
&lt;p&gt;其实或多说少都有些许不方便, 毕竟涉及到代码. 在本地测试的时候因为从Wordpress后台直接安装或更新插件, 下载都很慢而且还容易因为网络问题下载出错.&lt;/p&gt;
&lt;p&gt;所以就在本地测试的时候给Wordpress一个Proxy, 这样走其他一些线路会快一点, 生产环境如果有靠谱的也可以这么使用.&lt;/p&gt;
&lt;p&gt;找到根目录下 wp-config.php, 添加以下代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define(&apos;WP_PROXY_HOST&apos;, &apos;127.0.0.1&apos;);
define(&apos;WP_PROXY_PORT&apos;, &apos;10001&apos;);
define(&apos;WP_PROXY_USERNAME&apos;, &apos;username&apos;);
define(&apos;WP_PROXY_PASSWORD&apos;, &apos;password&apos;);
define(&apos;WP_PROXY_BYPASS_HOSTS&apos;, &apos;localhost, *.xx.com&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;WP_PROXY_HOST: 代理主机的IP&lt;/li&gt;
&lt;li&gt;WP_PROXY_PORT: 代理主机的端口&lt;/li&gt;
&lt;li&gt;WP_PROXY_USERNAME: 代理认证所需要的用户名, 如果没有则留空&lt;/li&gt;
&lt;li&gt;WP_PROXY_PASSWORD: 代理认证所需要的密码, 如果没有则留空&lt;/li&gt;
&lt;li&gt;WP_PROXY_BYPASS_HOSTS: 排除名单, 名单内的网址网域不经过代理&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;出了代理, 其他办法都是千篇一律. 替换下载时候的连接而已, WP的大版本还是比较值的更新的, 毕竟会修复很多漏洞.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Electron-Vue，踩坑之Node版本升级</title><link>https://x-item.com/electron-upgrade-node.html</link><guid isPermaLink="true">https://x-item.com/electron-upgrade-node.html</guid><pubDate>Sat, 16 Nov 2019 03:00:05 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ty941pzkj20r8046q3k.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;node官网将v12版本作为LTS(长期支持版本)的默认下载项
已经有段时间
当时使用Electron-Vue还是v10版本
v10版本也将在明年4月份后进入维护阶段
那就又了今天的教程v10升级v12&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实升级node应该没什么好说的
官网下载12.13.0版本直接装就好了
这个版本号是发文时候最新的&lt;/p&gt;
&lt;p&gt;安装好后直接到项目中
跑了一下 yarn dev&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ERROR in Template execution failed: ReferenceError: process is not defined

   ERROR in   ReferenceError: process is not defined

      - index.ejs:102
        ../src/index.ejs:102:2

      - index.ejs:107 module.exports
        ../src/index.ejs:107:3

      - index.js:415
        [..]/[html-webpack-plugin]/index.js:415:16

      - async Promise.all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不出所料，报错了
直接百度了以下错误
已知的&quot;解决办法&quot;是将版本降回到v10
&lt;em&gt;这他娘的也算是解决办法真是哔了狗&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;没有深究这个webpack以及这个html-webpack-plugin插件的问题&lt;/p&gt;
&lt;p&gt;直接带着问题区github上找了一下
直接说解决方案
&lt;a href=&quot;https://github.com/SimulatedGREG/electron-vue/issues/871#issuecomment-529809406&quot;&gt;https://github.com/SimulatedGREG/electron-vue/issues/871#issuecomment-529809406&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;webpack.renderer.config.js 文件修改&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;new HtmlWebpackPlugin({
      filename: &apos;index.html&apos;,
      template: path.resolve(__dirname, &apos;../src/index.ejs&apos;),
      minify: {
        collapseWhitespace: true,
        removeAttributeQuotes: true,
        removeComments: true
      },
      isBrowser: false,
      isDevelopment: process.env.NODE_ENV !== &apos;production&apos;,
      nodeModules: process.env.NODE_ENV !== &apos;production&apos;
        ? path.resolve(__dirname, &apos;../node_modules&apos;)
        : false
    }),
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index.ejs 文件修改&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;zh&quot;&amp;gt;

  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
    &amp;lt;% if (htmlWebpackPlugin.options.nodeModules) { %&amp;gt;

      &amp;lt;script&amp;gt;require(&apos;module&apos;).globalPaths.push(&apos;&amp;lt;%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, &apos;\\\\&apos;) %&amp;gt;&apos;)&amp;lt;/script&amp;gt;
      &amp;lt;% } %&amp;gt;&amp;lt;/head&amp;gt;

  &amp;lt;body&amp;gt;

    &amp;lt;% if (!htmlWebpackPlugin.options.isBrowser &amp;amp;&amp;amp; !htmlWebpackPlugin.options.isDevelopment) { %&amp;gt;
      &amp;lt;script&amp;gt;window.__static = require(&apos;path&apos;).join(__dirname, &apos;/static&apos;).replace(/\\/g, &apos;\\\\&apos;)&amp;lt;/script&amp;gt;
      &amp;lt;% } %&amp;gt;
        &amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index 这个文件修改 改动是在下面部分 if标签里
作者原话是说
直接干掉了 process ，确实解决了问题
也没发现什么&quot;副作用&quot;&lt;/p&gt;
&lt;p&gt;后续BUG有待观察&lt;/p&gt;</content:encoded></item><item><title>Electron-Vue，踩坑之版本升级</title><link>https://x-item.com/electron-upgrade.html</link><guid isPermaLink="true">https://x-item.com/electron-upgrade.html</guid><pubDate>Fri, 08 Nov 2019 18:59:17 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ty941pzkj20r8046q3k.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;刚开始用electron的时候还在5.x版本
之前升级到6.x版本就一直没动
直到7.0版本更新去掉了electron.asar
我知道了，是时候更新了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;直接跑更新&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yarn add electron@latest -D
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;很好，下载的时候慢的要死
时间长了给你了timeout能愁死&lt;/p&gt;
&lt;p&gt;接着搜索引擎查找解决方案
至少直接搜索关键词是没有任何可用的方案&lt;/p&gt;
&lt;p&gt;查看源码可以得知
安装后续操作，需要冲github上下载electron
那么github的下载服务器在亚马逊
国内访问能有个几十kb不错了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i.loli.net/2019/11/09/XpVB1OR3IwLhF4E.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;@electron/get 中artifact-utils.js文件看到几个环境变量
根据这个环境变量又搜索了一下
总结&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yarn global add cross-env
cross-env npm_config_electron_mirror=&quot;https://npm.taobao.org/mirrors/electron/&quot; npm_config_electron_custom_dir=&quot;7.1.1&quot; yarn add electron
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这就很好理解了
设置镜像源为淘宝
7.1.1为electron版本 根据你想下载的修改
后面接yarn 或者 npm安装/更新命令就行了&lt;/p&gt;</content:encoded></item><item><title>本地虚拟机配置RabbitMQ(测试)</title><link>https://x-item.com/rabbitmq.html</link><guid isPermaLink="true">https://x-item.com/rabbitmq.html</guid><pubDate>Fri, 27 Sep 2019 09:03:45 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;环境：CentOS Linux release 7.7.1908(3.10.0-1062.el7.x86_64)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;1.镜像：[https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso](https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso)

2.安装好后键入 ip addr 查看本地ip，并使用Xshell链接最小化虚拟机

3.配置源  [https://mirrors.tuna.tsinghua.edu.cn/help/centos/](https://mirrors.tuna.tsinghua.edu.cn/help/centos/)

4.因为与python交互所以安装minconda环境，
[https://docs.anaconda.com/anaconda/install/linux/](https://docs.anaconda.com/anaconda/install/linux/)
和
[https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.7.10-Linux-x86_64.sh](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.7.10-Linux-x86_64.sh)

5. 安装好后重新打开新的Xshell窗口链接(使得conda生效)，并安装rabbitMQ

6.根据文档提供的链接安装erlang(环境)和rabbitmq 的源,
[https://www.rabbitmq.com/install-rpm.html#package-cloud](https://www.rabbitmq.com/install-rpm.html#package-cloud) ,
[https://packagecloud.io/rabbitmq/erlang/install#bash-rpm](https://packagecloud.io/rabbitmq/erlang/install#bash-rpm) ,
[https://packagecloud.io/rabbitmq/rabbitmq-server/install](https://packagecloud.io/rabbitmq/rabbitmq-server/install#bash-rpm)

7.分别键入 yum install erlang -y   yum install rabbitmq-server -y

8.根据教程 键入 chkconfig rabbitmq-server on  设定为开机启动，  /sbin/service rabbitmq-server start/stop 为启动关闭服务

9.配置下载默认配置(3.7版本以上支持此配置) https://github.com/rabbitmq/rabbitmq-server/raw/v3.7.x/docs/rabbitmq.conf.example ，存入/etc/rabbitmq/rabbitmq.conf

10.创建用户、虚拟机， rabbitmqctl add_user test password
rabbitmqctl add_vhost centos
rabbitmqctl set_permissions -p  centos test &quot;.*&quot; &quot;.*&quot; &quot;.*&quot;
创建用户test 密码password ,创建虚拟机centos 并允许test访问虚拟主机
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装调用都正常了，但是放弃了对RabbitMQ的使用= = 还是用redis吧&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;注意：直接修改主机名(/etc/hostname)会导致rabbitmq无法启动，hosts文件中别忘添加主机名&lt;/p&gt;</content:encoded></item><item><title>似梦非梦: 未来</title><link>https://x-item.com/the-future-in-dreams.html</link><guid isPermaLink="true">https://x-item.com/the-future-in-dreams.html</guid><description>似梦非梦</description><pubDate>Fri, 26 Jul 2019 01:50:49 GMT</pubDate><content:encoded>&lt;p&gt;2099年
地球板块大幅度位移
导致地球陆地变为一个不规则椭圆形
其余大面积都是海&lt;/p&gt;
&lt;p&gt;由于全球变暖加剧
南北极已不存在陆地
人类科技也到达了
前所未有的境界&lt;/p&gt;
&lt;p&gt;所有人的手持设备
或植入芯片
都可以实时查看到地球卫星影像&lt;/p&gt;
&lt;p&gt;不知何时
世界政府发布
人类濒危红色警告
物种入侵红色警告
地球上99%的青年人
失去任何联系
同时就在地球陆地的四周
8处之前不存在的庞大建筑赫然显现
陆地正中心也
出现了巨大的”陨石坑“
直径约为20多公里
但似乎看上去已存在百年以上
因为附近杂草丛生
坑中的一切，生机盎然
地面上没有任何人为处理过的痕迹&lt;/p&gt;
&lt;p&gt;和往常一样
我和狗蛋夜晚通宵游戏
次日中午才起床
打开电脑(其实不是电脑只是一块屏幕, 但是不知道什么原理= =)
弹出政府警告弹窗
此时再联系狗蛋已经无人接听
根据互相留下的ID信息
也无法定位
同时在卫星地图中
发现了政府标记的
红色骷髅标志
8个建筑的位置&lt;/p&gt;
&lt;p&gt;小区内早已乱成一锅粥
许多寻子心切的家长
在家里无能为力只能默默哭泣
也有很多人质疑政府是否知道内情
孩子的失踪是否和那些建筑有关&lt;/p&gt;
&lt;p&gt;其实政府早在不久前就发现了这些建筑
也派了不少&quot;观察者&quot;
&quot;观察者&quot;为新一代仿生机器人
但一切电子设备均在建筑外围10公里处失去联系
随着网络舆论越来越无法控制&lt;/p&gt;
&lt;p&gt;政府只能将无人机以及卫星视频影像
公布到网络中
影像表示：”建筑周围存在着某种力场
以至于在外部无法看清建筑的全貌
或是看见的只是一个投影而已
但人类与观察者均无法靠近
政府正在想尽一切办法找到失踪孩子
请大家放心&quot;&lt;/p&gt;
&lt;p&gt;这一消息打破了
许多家长想直接去找孩子的幻想
但似人们都被这些建筑物吸引了注意力
而我却觉得
陆地中的陨石坑与这些建筑脱不了干系
随即联系了几个还在孩子
和几个死气白咧吵着要找儿子的家长
一行6个人踏上了
探寻陨石坑的&quot; 不归路 &quot;&lt;/p&gt;
&lt;p&gt;由于整个地球只剩下者最后一块陆地
所以交通异常发达
到达陆地正中心不用飞机
只需要1个小时
到达之后
有些出乎意料
以为也和那些建筑一样
有某些立场导致从外侧无法分辨
然而这里就是热带森林
只能向中心探索
但有趣的是
越像中心走
电子产品的信号越弱
最后以至于
完全收不到实时的卫星影像
本打算原路返回的时候
发现有两位孩子的家长不见了
没办法我们只能继续探索&lt;/p&gt;
&lt;p&gt;因为没有定位
也不知道具体位置
但是越走越冷
从夏季直接到了冬季
开始下雪
紧接着就看见了
与政府发布的影像
中相同的建筑
再看下定位已恢复
却发现我们在
路地区的左下角
已经和卫星地图上的骷髅头重合
这可是2W多千米
可我们并没有觉得过了多长时间
或者走了多长路&lt;/p&gt;
&lt;p&gt;与影像中不同的是
建筑很普通
大门只有一个说着肯能是俄语的小孩在看守
小孩那纯真的外表下
似乎隐藏了什么
没等我们反应
那孩子就掏出枪
射杀了旁边走过类似囚犯的人
看了下那帮人的穿着
有理由相信
这应该就是我们要寻找的答案&lt;/p&gt;
&lt;p&gt;那孩子收起枪
打开大门
似乎已经提前知道到我们会来
没有退路只能前行
一行人通过大门
映入眼帘的是一个2层小楼
进入主楼
走到电梯
以为电梯是向下走的
但电梯中是从1楼开始
并且有一个正无穷( ∞ )按钮
那孩子按下正无穷的按钮
再电梯前行了一个标准的苏联军礼&lt;/p&gt;
&lt;p&gt;不知过了多久
电梯停下
开门后是一些人在走廊里走来走去
说也奇怪只有走廊
没有门窗甚至灯
但整个走廊并没有觉得昏暗
但却找不到光源&lt;/p&gt;
&lt;p&gt;有两位父亲找到了自己的孩子
拽着就下了电梯
我和另一位家长(朋友的父亲)
没等我们反应过来
他们已经按下电梯下楼了
但走廊中这些孩子
似乎并不正常
双眼无神，只是一直再向前走&lt;/p&gt;
&lt;p&gt;就在那两位家长带着孩子离开的时候
貌似出发了警报
整个走廊开始闪烁着红光
只持续了几秒钟
忽然发现在警报过后
这些孩子开始正常交谈
只是神情有些疲惫&lt;/p&gt;
&lt;p&gt;耗费了很长时间
可能是很长时间
因为进入这栋建筑后
对时间感觉很模糊
找到了狗蛋
并没多想
拉着狗蛋 一行三人就往
电梯方向逃&lt;/p&gt;
&lt;p&gt;电梯中也没有什么多余的话
只是默默等待着电梯到达1楼
但有趣的事情发生了
电梯到达底层开门后
却是在一座商场中
望着我手中的平板
却在卫星影像中找不到定位
似乎是没电了&lt;/p&gt;
&lt;p&gt;还在这个商场离家不远
和狗蛋就往小区走去
途中询问了一些事情
只要问关于建筑或者他是怎么去的问题
就开始答非所问
注意到每次问这些问题时
他的左臂衣服下有什么东西再闪烁
撸他的袖子
发现胳膊下被植入了一块显示屏
与其说是显示屏不如说是皮肤本身就变成了显示屏
其中有几个指数在跳动
还有一些按钮&lt;/p&gt;
&lt;p&gt;这时狗蛋已经停止脚步
眼神呆滞
回答很机械化
表情很痛苦
并且似乎想要往回走
就问了一句: 是要回去了么
他点点头
又问: 可以找到回去的路么
他用非常狰狞的表情说到
找人多的地方就可以了
之后就往街区走去&lt;/p&gt;
&lt;p&gt;当我想去拉住他的时候
发现力量不够
想叫他爸爸
却发现并不在身边
松开他的胳膊
呆在了原地
似乎他爸爸在电梯中就不见了
想到着感觉信息有点多
回家整理下&lt;/p&gt;
&lt;p&gt;回到家中
回想经过
觉得有很多疑点
我们是怎么传送的?
先下去的两位孩子和家长去哪了?
他爸爸去哪了?
还有为什么电梯下来是商场中?
吵闹的小区怎么静了下来?&lt;/p&gt;
&lt;p&gt;想到这发现似乎有什么东西在闪
撸起袖子
胳膊上有一块熟悉又陌生的屏幕...&lt;/p&gt;
&lt;p&gt;不知道有没有人闲着没事看完的&lt;/p&gt;
&lt;p&gt;其实这些只是我某一天晚上的梦&lt;/p&gt;
&lt;p&gt;醒来之后没有第一时间记录下来&lt;/p&gt;
&lt;p&gt;导致丢失很多细节BUG也很多&lt;/p&gt;
&lt;p&gt;看个乐呵吧。&lt;/p&gt;</content:encoded></item><item><title>罗技MX AnyWhere 2S，初体验</title><link>https://x-item.com/mx-anywhere-2s.html</link><guid isPermaLink="true">https://x-item.com/mx-anywhere-2s.html</guid><pubDate>Thu, 25 Jul 2019 14:25:05 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g5h4w6kupej20kf0bhjs4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;京东自营买东西是真的舒服
AnyWhere 2S 中午就到了
外形 真入我眼了
但是挺可惜的
&quot; 很重 &quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g5cfloczivj23dc268nph.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;优点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;三模: 接收器、有线、蓝牙&lt;/li&gt;
&lt;li&gt;小巧&lt;/li&gt;
&lt;li&gt;支持 Darkfield&lt;/li&gt;
&lt;li&gt;滚轮有精准和无阻尼两种模式&lt;/li&gt;
&lt;li&gt;滚轮有可编程侧键&lt;/li&gt;
&lt;li&gt;手势按钮&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;前三个优点不多说
重点就是无阻尼滚轮是太爽了
一定要看下这个视频:  https://space.bilibili.com/12353537/dynamic
2019年7月25日10点左右发布小视频
还有全局手势(需要 Logitech Options )
手势只要按下滚轮下方的按钮
但还是滚轮最靓了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;缺点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;“比较沉”&lt;/li&gt;
&lt;li&gt;相对有些小&lt;/li&gt;
&lt;li&gt;没有中键，CAD用户需要事应&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;鼠标中键换成切换滚轮方式了
所以一些习惯了中键快捷键的用户需要一段时间适应
拿为什么说比较沉还打引号呢
因为官方数据
AnyWhere 2S
高 x 宽 x 深： 100.3 毫米 x 61.6 毫米 x 34.4 毫米
重量: 106 克
Vertical
高 x 宽 x 深：78.5 毫米 x 79 毫米 x 120 毫米
重量: 135 克
明明Vertical 比AnyWhere 2S 重20克
但是拿在手里
感觉缺比Vertical要重很多
那是因为他比较小
放一张对比图&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g5cfvz9tk2j21890r0hb3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;感觉就是被压缩了= =
拿在手里就像个小钢弹
成也&quot;小巧&quot;，败也&quot;小巧&quot;
但考虑到这款鼠标的定位是
面向经常带电脑出差用户
这个大小是比较合适的
而且功能很足，还支持 Darkfield
还是值得入手的
但是对我来说
这款 PASS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;那么最终罗技面向高端办公鼠标
基本都测试过了
MX Master 2S 和 MX ERGO
都仅仅是简单使用，就不长篇大论对比测评了
Master 2S很大，玩游戏别闹了(办公时间长感觉也会很累)
除非你想一边健身一边玩
那么轨迹球系列ERGO
不用说了是为画图、微操用户准备的
你想用它玩游戏？是个技术活&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;至于罗技对于办公系列推出的 FLOW 功能
对于我目前来说并用不到
可能在老家 会用到多电脑合作
之前都是使用 Synergy 软件来实现
但是全屏应用的时候来回切换会有些问题
FlOW功能在其他测试机构测试的时候貌似没发现&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总结：这款AnyWhere 2S对于需要便携的办公用户，无可挑剔。&lt;/p&gt;</content:encoded></item><item><title>罗技MX Vertical, 24小时简单体验</title><link>https://x-item.com/mx-vertical.html</link><guid isPermaLink="true">https://x-item.com/mx-vertical.html</guid><pubDate>Thu, 25 Jul 2019 01:32:23 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g5h4uzsb2cj21hc0u0dl4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;跟了我几年的304也换过两次微动
现在又出现连点了
但是身边并没有任何工具
所以只能考虑暂时换一款鼠标&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;考虑过Master 2S 、ERGO、AnyWhere 2S 等这些办公产品&lt;/p&gt;
&lt;p&gt;最终在京东购入了MX Vertical&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;个人是比较倾向于小鼠的
只是用习惯了，觉得小鼠很&quot;灵动&quot;
但是考虑到人体工程学
各种测评说不会累的鼠标
没考虑太多，领个优惠券就买下了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g5bsr1e2cgj22zk27kkjq.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先外观的视觉冲击是很大的
与以往的鼠标完全不同
结合价格和外观看上去就感觉有种舒适感
体验了一天做点小总结&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;优点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;三模：接收器、有线、蓝牙&lt;/li&gt;
&lt;li&gt;人体工程学&lt;/li&gt;
&lt;li&gt;支持快充&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;展开讲一下：
我个人桌面是有一些洁癖的
比较讨厌很多的线走来走去
但是笔记本，这些都无法避免
所以很多东西去考虑无线产品
那么问题来了，无线产品真的就比有线产品延迟高么?
答案是否认的，具体可以看下
知名测试团队LTT的测试视频：av58531450
测试中均使用的是无线接收器
对于我这种几乎不玩竞技类游戏的人来说
蓝牙链接是个不错得选择
但首先你的笔记本最低支持蓝牙4.0
手里这款G7是蓝牙5.0在正常办公使用中
感觉不到明显延迟&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;那么说实话，这款鼠标
对于我来说优点除了无线
就没了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;缺点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;有使用环境要求&lt;/li&gt;
&lt;li&gt;不支持 Darkfield&lt;/li&gt;
&lt;li&gt;没有急速滚动&lt;/li&gt;
&lt;li&gt;重量不轻(135g)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;仅对与我，和我所处的环境
可以看一下这篇测评： http://www.sohu.com/a/278568879_116981
桌子、椅子以及一些外接因素导致
这款人体工程学鼠标在我手里使用
异常的累，
打字用鼠标需要来回转手腕
导致1~2小时手腕就很酸(可能是个人问题)
1是习惯了小鼠这种大鼠很不适应
2是鼠标很高(78.5 毫米)，键盘打字拉过来很容易将鼠标怼走
还有这款鼠标如果你手很容易出汗或者对热源敏感
还真不建议使用
握住鼠标手心位置正好是电池仓
使用的时候有轻微发热
会导致使用中有些不适&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;与Master 2S 和 AnyWhere 2S 不同
这款鼠标并没有上述两个标志性功能
可惜的就是急速滚动了
重量对于习惯了小鼠的我，觉得很重
鉴于Master 2S比Vertical还重10g
就只能远观了
不说了AnyWhere 2S已经在路上了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总结：这款鼠标无论是从功能还是外观，无可挑剔。那么对于长时间面对电脑坐着办公，并且桌子够大环境合适的人群来说，这么一款人体工程学鼠标是个不错的选择。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后吐槽罗技：
北京竟然没有一个罗技线下体验店
顶着37°的高温
大中午跑去中关村
并没有发现一家专卖店
唯一在鼎好四楼的两家
轨迹球只有M570
并且告诉我，罗技只有这一款轨迹球
其他的都停产了
MX ERGO???&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>英雄联盟台服语音修改分析(欺骗世界)</title><link>https://x-item.com/lol-tw.html</link><guid isPermaLink="true">https://x-item.com/lol-tw.html</guid><description>英雄联盟台服 文字/语音修改教程</description><pubDate>Wed, 10 Apr 2019 02:43:54 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;今天有个用户联系我说台服是否可以修改国服语音，按理说台服的目录格式和国服相同. garena也就是和国服的wegame类似的东西.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xa620kh5j20xr06ymz5.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;分析过程&lt;/h2&gt;
&lt;p&gt;首先按照正常的使用，启动器加载并且将国服的语音文件复制到游戏目录中
国服语音文件呢就是游戏目录中带有zh_CN字样的文件
语音文件还有包括一些文字翻译
复制过去，修改地区语言。
启动之后发现木有任何效果。&lt;/p&gt;
&lt;p&gt;也尝试了各种姿势，什么前入后入
未果！
但是有了新发现，Garena进入游戏界面旁边可以选择语言，
也仅仅只有繁体中文&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xaap3mimj20sg0k07v2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;考虑到Garena这个客户端用到的是cef框架
推测这个选项应该是动态的
抓了一下包
果不其然，在一个 /api/app_detail_info 地址的请求中&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xaeiqk3aj20ib0dhjvb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;虽然找到了这个安装语言的选项，
但想要让每个用户都去学会拦截请求，或者伪造请求
不现实
那么继续分析，直接启动游戏&lt;/p&gt;
&lt;p&gt;游戏并不是直接从Garena的启动器进程启动的，
而是在一个名为gxxsvc.exe的进程下
这个进程还是作为系统服务开机启动的= =&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xaklp8kmj20ra03cmye.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;紧接着看了一下，联盟进程的启动参数&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xaliu095j20gu0k1acb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;区域参数标注着zh_TW，紧接着将参数复制出来并关闭游戏&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xaqwxnqij21940a1wkf.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;部分参数做了模糊处理
复制出来之后将 --locale=zh_TW 更改为  --locale=zh_CN
然后复制所有，开始图标右键 “运行” —— “粘贴” —— “回车”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xatzo3j6j20zk0k076v.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;虽然没进去，当然就没觉得能进去
但是注意，这个错误提示已经变为简体了
就说明方向是正确的那么
那么如何修改这个参数呢&lt;/p&gt;
&lt;h2&gt;修改原理&lt;/h2&gt;
&lt;p&gt;首先想到的就是做一个跳转
正常流程
Garena启动游戏——执行LeagueClient.exe——启动成功
加了跳转之后
Garena启动游戏——&lt;strong&gt;执行跳转程序&lt;/strong&gt;——执行LeagueClient.exe——启动成功&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;2020年6月15日: 启动顺序变更, 原理不变.&lt;/mark&gt;&lt;/strong&gt;
那么作为这个跳转程序 首先想到的就是bat操作这个启动参数
比较方便&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@echo off
SET ARGS=%*
C:\Garena\Games\32775\LeagueClient\LeagueClient.exe %ARGS:zh_TW=zh_CN%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新之后:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@echo off
SET ARGS=%*
&quot;C:\Garena\Games\32775\Riot Client\RiotClientServices.exe&quot; %ARGS:zh_TW=zh_CN%
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释一下，第二行 意思 将启动参数赋值给变量 ARGS
第三行启动LeagueClient.exe(RiotClientServices.exe)游戏进程 后面加上启动参数并替换对应文本(将zh_TW的默认区域值修改为zh_CN, 可以修改你想修改的任意区域代码. 只要保证游戏内有这些文件即可, 否则游戏将会在载入时因为缺少文件而崩溃.)
这个进程位置修改成你游戏的位置&lt;/p&gt;
&lt;p&gt;这个bat的话，Garena肯定实不认的，将bat文件打包成exe文件.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xb1ulpl5j211s0ivtbm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个程序成品放到文章最底部.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;紧接着尝试下如何跳转，
LeagueClient.exe这个进程是无法改名的，重命名之后无法启动
我们要做的就是，欺骗Garena启动器
让他将我们这个中转程序当作真的游戏来启动&lt;/p&gt;
&lt;p&gt;我能想到的方法，那就是在复制一份游戏(Garena可能只会检测某几个文件，但是这里为了省时直接复制全部)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xb5w7f9cj208e08d0ss.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;左面是原来游戏，右面是新的游戏，新复制的文件名字无所谓
最后一步，将我们生成的exe，改名扔到新游戏的LeagueClient目录下覆盖&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xb77jd8tj20gw0bat9z.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这样我们就完成了，用假游戏欺骗Garena的任务，
然后将Garena客户端，的游戏位置修改成复制假的游戏客户端&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xba9393ij20b406cq39.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择之后，并没有什么异样，Garena也没有强制更新
直接启动游戏&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbbmg8s0j20zk0k03zv.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;成功！！！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbe0fspjj20zk0k0tme.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbe14znsj20zk0k0e57.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbe0skyyj20zk0k04fe.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbe14eetj20zk0k07vl.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;语音，文字均正常
但是还有一些小瑕疵，比如首页以及幸运商店均无法显示
经过一番调整&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbzjd21dj20zk0k0u0p.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xbzj9b96j20zk0k01kx.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首页也是正常的了，但是这个幸运商店
台服叫个人商店？，这个就不知道了。&lt;/p&gt;
&lt;h2&gt;验证&lt;/h2&gt;
&lt;p&gt;在看下我们的做的这个跳转进程&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xc64sdarj20sp06ztbm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;跳转进程启动得时候，是zh_TW&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1xc64su5bj20sy08yq6l.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;他传给游戏进程的时候就已经修改为zh_CN了。&lt;/p&gt;
&lt;p&gt;此方法可以将台服修改为任意国家语音,
当然这个思路适用于各个服游戏&lt;/p&gt;
&lt;p&gt;注意：更新得时候请将游戏切换回真游戏，更之后
理论只将 目录下 .gpipe 文件夹和 lol.version文件复制过去就行
但是没测试，如果不行那就都复制呗= =&lt;/p&gt;
&lt;p&gt;这种方法最好别再国服测试，小心TP办了你&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;利用假客户端骗过Garena, 通过跳转程序执行真客户端. 并修改启动参数.&lt;/p&gt;
&lt;h2&gt;更新(2020年6月15日)&lt;/h2&gt;
&lt;p&gt;有网友反馈已经失效, 但是今天测了一下还是可以用的. 但有可能是因为Riot在之前更改了启动顺序, 新增了一个 RiotClientServices.exe 程序.&lt;/p&gt;
&lt;p&gt;正常流程
Garena启动游戏——RiotClientServices.exe——执行LeagueClient.exe——启动成功
加了跳转之后
Garena启动游戏——&lt;strong&gt;执行跳转程序&lt;/strong&gt;——RiotClientServices.exe——执行LeagueClient.exe——启动成功&lt;/p&gt;
&lt;p&gt;整体变化不大, 原来替换的是LeagueClient.exe, 那么现在直接替换RiotClientServices.exe就好了. 其他变化都不大, 配置文件也耕者改一下就好. 转换器的使用方法已经更新.&lt;/p&gt;
&lt;h2&gt;更新(2020年7月1日)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://x-item.com/lol-locale.html&quot;&gt;英雄联盟语音&amp;amp;文字修改教程&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;成品&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;文中制作的转换器: &lt;a href=&quot;https://virace.lanzoui.com/iDJtUdohj5i&quot;&gt;https://virace.lanzoui.com/iDJtUdohj5i&lt;/a&gt; 密码:virace
使用说明在压缩包里, 该程序只是按照原理编写
并未实际测试, 效果应与文中制作的BAT文件相同&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;转载请注明出处，如果有更好的方法也可以在下方留言讨论&lt;/p&gt;</content:encoded></item><item><title>Electron-Vue，踩坑之调用DLL动态链接库(ffi)</title><link>https://x-item.com/electron-vue-dll.html</link><guid isPermaLink="true">https://x-item.com/electron-vue-dll.html</guid><pubDate>Mon, 08 Apr 2019 10:16:52 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ty941pzkj20r8046q3k.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;需接上文，搭建后之后，因为vue网站已经改建好了，
只是一些事务还未处理，不清楚是在主进程还是渲染进程处理。
vue项目文件复制到之前新建的项目钟后，安装依赖都是一些直观的小错误。
但是今天需要处理文件信息的时候发现，node.js fs模块需要的信息不够
所以决定调用win32 api。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;调用动态链接库&lt;/h3&gt;
&lt;p&gt;搜了一下，使用的是 ffi模块，
二话 不说直接 yarn add ffi
发现各种报错，都是  node-gyp 这个模块  报的错
随即看了下npm上，
&lt;a href=&quot;https://www.npmjs.com/package/node-gyp&quot;&gt;https://www.npmjs.com/package/node-gyp&lt;/a&gt;
Windows下需要，C++开发环境以及Python2.7&lt;/p&gt;
&lt;p&gt;检查了一下我这里安装的是vs2019的预览版，conda环境
就新建了一个 python2.7的环境
又试了几次安装，发现还是报错 还是C++的问题
有回头去npm上看了一下，上面说要VS2017.
又检查了以下报错信息，说是找不到MSBuild
恍然大悟，2017和2019路径不同，只好卸载2019重更新安装了2017
最终：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ve4gtvvij20bp072mxh.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;错误1：Python版本不对&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1vgx8m7dnj210n08dwfl.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这种或者类似这种就是Python问题，我这个错误是版本不对调用的是Python3
解决办法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可以按照node-gpy给的提示，直接安装构建环境。会默认安装python2.7,和C++构建工具。或手动去Python官网下载2.7版本的&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm install --global --production windows-build-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;修改全局配置，定向Python&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# 后面修改为你的2.7版本Python路径
npm config set python  C:\Program Files\Python2.7\python.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;错误2：C++构建工具不存在或版本不对&lt;/h4&gt;
&lt;p&gt;这个截图弄丢了，但是记住几个关键字就行了，就是让你安装.net2.0或vs2005
是中文提示但是有可能变成方块，这个控制台方块问题百度就行了。
解决办法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;还是按照上面的方法安装环境，但是前提是电脑里没有其他版本的开发环境。
因为我这里默认有个个2019的环境，之前修改c#程序安装的。再安装这个windows-build-tools 木有效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装vs2017，并指定构建工具版本
注意啊，这里的vs都是开发环境可不是运行环境。
紧接着用下面的命令设置 vs版本&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm config set msvs_version 2017
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;如果电脑里有2017或2017以下的开发环境，可以尝试直接指定版本
实测2019木有。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm config set msvs_version 2015
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;虽说通往成品的路上，全是大坑。
不要紧，我帮你添上了~&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Electron-Vue，踩坑</title><link>https://x-item.com/electron-vue.html</link><guid isPermaLink="true">https://x-item.com/electron-vue.html</guid><pubDate>Sun, 07 Apr 2019 04:20:23 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ty941pzkj20r8046q3k.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;之前一直研究的都是后端，四月份开始学习了下前端node.sj、vue等等。
以前也就熟知electron，但从未实操过，正好也是最近研究了下vue。
决定踩坑了！！！！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;脚手架&lt;/h3&gt;
&lt;p&gt;Electron官方推荐了一个vue模板：&lt;a href=&quot;https://github.com/SimulatedGREG/electron-vue&quot;&gt;https://github.com/SimulatedGREG/electron-vue&lt;/a&gt;
随后根据提供的文档开始使用：&lt;/p&gt;
&lt;p&gt;初始化项目之后，发现依赖包版本都有些低
直接 yarn upgrade --latest。
升级之后 yarn dev ，试了一下果然各种大红。也没指望他可以直接运行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 先升级babel，用官方提供的工具升级
npx babel-upgrade --write --install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一套升级完基本上大问题都解决了。
BUT：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1txvly6gjj20xf0bfdgr.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;竟然把vue标签解释称 jsx.
二话没说直接百度、google，结果不尽人意。&lt;/p&gt;
&lt;p&gt;紧接着检查.eslintrc.js，插件用着 &apos;html&apos;
果断安装  eslint-plugin-vue
跟着官方教程
&lt;a href=&quot;https://eslint.vuejs.org/user-guide/#installation&quot;&gt;https://eslint.vuejs.org/user-guide/#installation&lt;/a&gt;
操作之后木有问题了。
yarn dev 也正常了。所有包也都是最新的了(其实 不推荐使用最新的包)。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1ty1a5qwxj20yx0lhq7p.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从没用过npm yarn 这些包管理工具，也没有太深究过前端的我
鼓捣这个东西，略有难度。
从初始化项目——更新包——运行demo
共耗时5个小时。其实不更新也是可以运行的~ 只是要试试&lt;/p&gt;
&lt;h4&gt;本文在后续还会持续更新&lt;/h4&gt;</content:encoded></item><item><title>Python之点到为止: 下载Youtube视频</title><link>https://x-item.com/py-youtube.html</link><guid isPermaLink="true">https://x-item.com/py-youtube.html</guid><pubDate>Sat, 06 Apr 2019 02:36:26 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;作为一个新晋搬运UP主
&lt;strong&gt;能做的就是尽可能的保证“同步更新”！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注：以下内容可能会造成小白不适，请适当观看&lt;/p&gt;
&lt;h3&gt;需要准备得：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;BeautifulSoup&lt;/li&gt;
&lt;li&gt;youtube_dl&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;先分析下YouTube:&lt;/h4&gt;
&lt;p&gt;比如：油管上NBA视频，
&lt;a href=&quot;https://www.youtube.com/user/NBA/videos&quot;&gt;https://www.youtube.com/user/NBA/videos&lt;/a&gt;
默认给出该用户最近上传的30个视频，往下拖动发现是瀑布流ajax加载数据
因为本教程只考虑最新的视频，老视频不考虑所以这个接口对我们来说意义不大
当然你如果想要爬YouTube全站就另说了。&lt;/p&gt;
&lt;p&gt;紧接着看一下源代码，浏览器直接右键查看源代码就行了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1sohw8n8fj21ba0ew11g.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;发现视频信息放在一个 script 的标签内 一个window下的变量内
随后有了如下代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import requests
from bs4 import BeautifulSoup
url = &apos;https://www.youtube.com/user/NBA/videos&apos;
proxies = {
    &quot;http&quot;: &quot;http://127.0.0.1:10086&quot;,
    &quot;https&quot;: &quot;http://127.0.0.1:10086&quot;,
}
res = requests.get(url, proxies=proxies)
print(res.text.find(&apos;window[&quot;ytInitialData&quot;]&apos;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行之后输出的-1，竟然并没有找到这个 “window[&quot;ytInitialData&quot;]” 这个字符串
用Postman调试了一下，发现如果请求头没有带 User-Agent ，就回给你返回一个完整的格式化好的html,就没有这些js数据了，其实也是可以使用 BeautifulSoup 直接进行格式化的。
只是之前找到了一个js的开头那就要继续下去。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;headers = {
    &apos;User-Agent&apos;:
    &apos;Mozilla/5.0 (Windows NT 10.0; Win64; x64) &apos;
    &apos;AppleWebKit/537.36 (KHTML, like Gecko) &apos;
    &apos;Chrome/74.0.3702.0 Safari/537.36&apos;
}
res = requests.get(url, proxies=proxies, headers=headers)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;加上请求头之后，就可以找到那段js代码的位置了。
紧接着我们把重要的数据拿出来，&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;headers = {
    &apos;User-Agent&apos;:
    &apos;Mozilla/5.0 (Windows NT 10.0; Win64; x64) &apos;
    &apos;AppleWebKit/537.36 (KHTML, like Gecko) &apos;
    &apos;Chrome/74.0.3702.0 Safari/537.36&apos;
}
res = requests.get(url, proxies=proxies, headers=headers)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;分析过程不难，我们知道他将数据放入了 script 标签中，那就用BeautifulSoup取出所有 script 标签，一共有15个(可能不一样无所谓的)，测试之后发现这段代码总在倒数第三个script 标签内，所以直接取 [-3].
第四行代码就是将实际的json数据取出来，其他的js代码我们不要
后两行为解析json数据并只将视频信息部分取出来&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g1sp6xjdouj20zc0kb426.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;循环输出以下发现这个item里面存放了，视频ID、预览图、访问量等等等一些数据。
随后就回到了我们今天的主题，如何保证我们的视频是最新的。
拿到了最新的视频列表，就可以写个死循环定时得去爬取。
和原来的数组去对比，如果有差异那那个视频就是最新的。
根据视频ID，再利用 youtube_dl 就可以直接将视频下载到本地&lt;/p&gt;
&lt;p&gt;youtube_dl ，也是用Python写的所以调用起来也非常方便
能实现得呢就是，定时爬取该用户上传得视频。
有更新得时候直接将视频和预览图下载到本地！
你只需要做的就是上传视频。没了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那么我就点到为止了
Just give a hint.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>基于LeagueSkin的一款小工具</title><link>https://x-item.com/leagueskin.html</link><guid isPermaLink="true">https://x-item.com/leagueskin.html</guid><pubDate>Mon, 11 Feb 2019 08:20:27 GMT</pubDate><content:encoded>&lt;h2&gt;LeagueSkin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一款国外知名英雄联盟换肤软件&lt;/li&gt;
&lt;li&gt;网址： &lt;a href=&quot;http://leagueskin.net/&quot;&gt;http://leagueskin.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是这个换肤软件，其实使用中有一些地方还是可以优化一下的。&lt;/p&gt;
&lt;h2&gt;小工具的功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;自动更新/下载LeagueSkin。(原版是弹出更新网页手动下载)&lt;/li&gt;
&lt;li&gt;自动选取英雄。(客户端选人后自动选取，类似WeGame选完人可以点天赋一样)&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1g02ivpitx7g20og0f0e84.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里强调一点，LeagueSkin是一款完全免费的软件。所以这款小工具也不会收取任何费用。并且没有大问题就不会更新这款小工具。&lt;/p&gt;
&lt;p&gt;下载地址： &lt;a href=&quot;https://one.virace.cc/home/LeagueSkin&quot;&gt;https://one.virace.cc/home/LeagueSkin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;源程序只在C盘根目录释放文件，所以小工具写死了也只在C盘。如果电脑没有配置C这个盘符，那么将会无法使用&lt;/li&gt;
&lt;li&gt;LeagueSkin 右下角“AUTO MOD SKIN”选项勾选后则不用启动软件默认修改皮肤，取消勾选则反之&lt;/li&gt;
&lt;li&gt;删除换肤则需要删除C盘Fraps文件夹以及联盟Game目录下hid.dll文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任何第三方工具都会有封号的可能&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;原理分析&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;下载更新就不多讲了，就是爬取下载网页找到下载地址，然后两次解压到C盘目录&lt;/li&gt;
&lt;li&gt;至于自动选择英雄，则用到客户端LCU的一些API接口&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;LEAGUE CLIENT API&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;客户端从6.24彻底改版后，就启用了现在的这种CEF架构。简单说就是浏览器显示界面，后面用C++实现功能。详细了解可以看这：&lt;a href=&quot;https://engineering.riotgames.com/news/architecture-league-client-update&quot;&gt;https://engineering.riotgames.com/news/architecture-league-client-update&lt;/a&gt; 和 拳头(Riot)开发者中心  &lt;a href=&quot;https://developer.riotgames.com/&quot;&gt;https://developer.riotgames.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;采用了CEF架构之后就使用了很多API接口，比如：当前小工具用到的&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Win7用户&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;由于Win7系统的winhttp不支持TLS1.1/TLS1.2协议，所以需要安装以下微软官方补丁&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.catalog.update.microsoft.com/search.aspx?q=kb3140245&quot;&gt;http://www.catalog.update.microsoft.com/search.aspx?q=kb3140245&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi&quot;&gt;http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;第一个是补丁，第二个则是注册表修改工具均为微软官方程序&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;/lol-login/v1/session # 获取登录信息，用来获取你的账户ID
/lol-champ-select-legacy/v1/implementation-active # 判断你是否处于选人状态
/lol-champ-select-legacy/v1/session # 获取当前游戏信息,自己以及队友和对面的选人、皮肤，剩余选人时间等等一些信息
获取天赋页，修改天赋页，获取好友等等。客户端你看见的看不进的信息都可以获取或者是修改。
还有一些静态资源。比如说英雄介绍以及已经皮肤图片、头像等等
/lol-game-data/assets/v1/champions/22.json # 这就是寒冰射手的信息 后面的22为寒冰射手的ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个API也是当年6.24版本改版后，找修改语音方法的时候在Github中认识了一个台北小伙给我的，当年他才13岁，自己仿照LOL多玩盒子弄了一个台服用的盒子自己用。&lt;/p&gt;</content:encoded></item><item><title>树莓派3B+(Raspbian)，使用记录</title><link>https://x-item.com/raspbian.html</link><guid isPermaLink="true">https://x-item.com/raspbian.html</guid><pubDate>Sun, 24 Jun 2018 07:11:17 GMT</pubDate><content:encoded>&lt;p&gt;更换国内软件源(清华大学)：&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;`pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list`&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib
 deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;网络中大部分就到此结束了，但是实测还是会有原来的源使用&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;`pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list.d/raspi.list`&lt;/pre&gt;
&lt;p&gt;还需要将这个文件中的源注释掉，则只会使用后来设置的源了！&lt;/p&gt;</content:encoded></item><item><title>Python 数据挖掘及机器学习笔记之基础模块</title><link>https://x-item.com/ml_models.html</link><guid isPermaLink="true">https://x-item.com/ml_models.html</guid><description>Python机器学习笔记之基础模块</description><pubDate>Wed, 09 May 2018 16:19:01 GMT</pubDate><content:encoded>&lt;h2&gt;基础模块：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;numpy:数值计算扩展&lt;/li&gt;
&lt;li&gt;pandas:基于numpy，用于数据探索与分析&lt;/li&gt;
&lt;li&gt;scipy:用于高等数据处理&lt;/li&gt;
&lt;li&gt;matplotlib:数据可视化工具&lt;/li&gt;
&lt;li&gt;statsmodels:用于统计分析&lt;/li&gt;
&lt;li&gt;Gensim:用于文本挖掘&lt;/li&gt;
&lt;li&gt;sklearn(scikit-learn):机器学习&lt;/li&gt;
&lt;li&gt;keras:深度学习
 &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;因为需要的模块比较多，故使用Anaconda来管理Python环境&lt;/h3&gt;
&lt;p&gt;👇👇👇👇👇👇👇👇👇点击展开👇👇👇👇👇👇👇👇👇&lt;/p&gt;
&lt;details class=&quot;md-fold&quot; data-icon=&quot;file&quot;&gt;&lt;summary class=&quot;md-fold-summary&quot;&gt;Anaconda安装步骤&lt;/summary&gt;&lt;div class=&quot;md-fold-body&quot;&gt;
&lt;p&gt;官网：&lt;a href=&quot;https://www.anaconda.com&quot;&gt;https://www.anaconda.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;清华镜像源：&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;官网下载较慢，所以使用&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;清华大学开源软件镜像站&lt;/mark&gt;下载并安装&lt;/p&gt;
&lt;p&gt;Anaconda：&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Miniconda：&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;顾名思义，Mini版本可以理解为精简版，下载哪个版本无所谓因为包都可以后期安装&lt;/p&gt;
&lt;p&gt;安装方法和其他安装软件一样，基本是无脑下一步。&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;安装完毕之后，别忘了配置国内conda镜像源：https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/&lt;/mark&gt;&lt;/p&gt;
&lt;h4&gt;但需要注意以下几点：&lt;/h4&gt;
&lt;h4&gt;1.管理员运行安装&lt;/h4&gt;
&lt;h4&gt;2.安装问题1&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fr5id0dbanj209103gglm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;上图默认为&quot;Just Me&quot;，意为仅当前用户安装。这里按需选择，推荐选择第二项&quot;All Users&quot;全部用户安装。&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;3.安装问题2&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fr5id0g286j20iq06xwfq.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;上图第一个选项意为，将Anaconda添加到系统环境变量，貌似Anaconda4.x版本后就不推荐添加到环境变量了&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;如果添加就可以直接使用CMD或Powershell直接调用conda命令&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;如果不添加则只能在&quot;Anaconda Prompt&quot;(Anaconda自带的命令窗口)中调用对应命令&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;第二个选项意为，将Anaconda自带的Python3.6注册为系统默认Python(就是将Anaconda带的python加入环境变量了)&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;如果你之前系统有安装Python，并且不想删除那这两项请不要勾选&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;如果你没有安装过Python，为了防止冲突请仅勾选第二项(推荐)&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;如果你没有安装过Python，并且就想在CMD下执行conda命令那请全部勾选&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;4.Anaconda与Java环境变量冲突会导致无法创建开始菜单等&lt;/h4&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;先记录并删除Java环境变量重启后安装Anaconda后再添加回来&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;安装的时候可能会出现各种各样的问题，别慌。先在往上查找是否有解决方法，不行就重头再来。&lt;/p&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;安装模块(创建虚拟环境)：&lt;/h2&gt;
&lt;pre&gt;conda create -n default pandas scipy matplotlib statsmodels Gensim scikit-learn keras python=3.6&lt;/pre&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;conda create&lt;/mark&gt; 创建虚拟环境，&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;-n default&lt;/mark&gt; 虚拟环境命名 名字随便， 后面接需要安装的模块 以及指定python版本如不指定版本默认为最新，这样conda会安装好这些模块所需的全部依赖包期间你只需要输入一下Y(确认)等待完成即可。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;activate default
deactivte default&lt;/pre&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;activate 环境名&lt;/mark&gt; 即可进入虚拟环境；&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;deactivte  即可退出虚拟环境&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;进入 创建的 default 环境后键入&lt;/p&gt;
&lt;pre&gt;conda list&lt;/pre&gt;
&lt;p&gt;可以查看当前环境下已经安装的全部包。&lt;/p&gt;
&lt;details class=&quot;md-fold&quot; data-icon=&quot;file&quot;&gt;&lt;summary class=&quot;md-fold-summary&quot;&gt;实例截图&lt;/summary&gt;&lt;div class=&quot;md-fold-body&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fr6bw1pztaj217z0q3b29.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;模块的使用：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;numpy&lt;/mark&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import numpy
&amp;gt;&amp;gt;&amp;gt; array1 = numpy.array([8,4,9,3,2,0,33,77])
&amp;gt;&amp;gt;&amp;gt; array2 = numpy.array([[&apos;virace&apos;,&apos;virgo&apos;,&apos;ace&apos;],[&apos;a&apos;,&apos;b&apos;,&apos;c&apos;],[&apos;d&apos;,&apos;e&apos;,&apos;f&apos;]])
&amp;gt;&amp;gt;&amp;gt; array1.sort()
&amp;gt;&amp;gt;&amp;gt; array1
array([ 0, 2, 3, 4, 8, 9, 33, 77])&lt;/pre&gt;
&lt;h3&gt;array1为一维数组， array为二维数组。Numpy模块支持多为数组。array.sort()为数组排序(仅支持一维数组)&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; array3 = numpy.array([[12,66,23,45,64],[97,43,57,74,23],[32,56,79,56,77]])
&amp;gt;&amp;gt;&amp;gt; array3.max()
97
&amp;gt;&amp;gt;&amp;gt; array3.min()
12
&amp;gt;&amp;gt;&amp;gt; array4 = numpy.array([[&apos;12&apos;,&apos;66&apos;,&apos;23&apos;,&apos;45&apos;,&apos;64&apos;],[&apos;97&apos;,&apos;43&apos;,&apos;57&apos;,&apos;74&apos;,&apos;23&apos;],[&apos;32&apos;,&apos;56&apos;,&apos;79&apos;,&apos;56&apos;,&apos;77&apos;]])
&amp;gt;&amp;gt;&amp;gt; array4.max()
Traceback (most recent call last):
 File &quot;&quot;, line 1, in 
 File &quot;D:\Office\Anaconda3\envs\default\lib\site-packages\numpy\core\_methods.py&quot;, line 26, in _amax
 return umr_maximum(a, axis, None, out, keepdims)
TypeError: cannot perform reduce with flexible type&lt;/pre&gt;
&lt;h3&gt;Numpy支持多维数字类型数组取最大最小值，array.max();array.min()&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; array1[1:3]
array([2, 3])
&amp;gt;&amp;gt;&amp;gt; array1[:3]
array([0, 2, 3])
&amp;gt;&amp;gt;&amp;gt; array2[:3]
array([[&apos;virace&apos;, &apos;virgo&apos;, &apos;ace&apos;],
 [&apos;a&apos;, &apos;b&apos;, &apos;c&apos;],
 [&apos;d&apos;, &apos;e&apos;, &apos;f&apos;]], dtype=&apos;&amp;gt;&amp;gt; array2[:2]
array([[&apos;virace&apos;, &apos;virgo&apos;, &apos;ace&apos;],
 [&apos;a&apos;, &apos;b&apos;, &apos;c&apos;]], dtype=&apos;&amp;gt;&amp;gt; array2[:2][1:3]
array([[&apos;a&apos;, &apos;b&apos;, &apos;c&apos;]], dtype=&apos;
&lt;h3&gt;Numpy支持多维数组切片，大体和Python字典类型切片一样。多维数组切片只需要一层一层切即可。&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;pandas&lt;/mark&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;In [1]: import pandas as pd

In [2]: a = pd.Series([6,7.5,8,3,1])

In [3]: a
Out[3]:
0    6.0
1    7.5
2    8.0
3    3.0
4    1.0
dtype: float64&lt;/pre&gt;
&lt;h3&gt;这里换了iPython解释器，在虚拟环境中键入ipython即可进入(代码无区别)，Series(序列)暂时将他理解为一维数组(因为还没有深入使用)。&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;In [4]: b = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])

In [5]: b
Out[5]:
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

In [6]: b.head(1)
Out[6]:
   0  1  2
0  1  2  3

In [7]: b.tail(1)
Out[7]:
   0  1  2
2  7  8  9

In [8]: b.describe()
Out[8]:
         0    1    2
count  3.0  3.0  3.0
mean   4.0  5.0  6.0
std    3.0  3.0  3.0
min    1.0  2.0  3.0
25%    2.5  3.5  4.5
50%    4.0  5.0  6.0
75%    5.5  6.5  7.5
max    7.0  8.0  9.0

In [9]: b.T
Out[9]:
   0  1  2
0  1  4  7
1  2  5  8
2  3  6  9&lt;/pre&gt;
&lt;h3&gt;DataFrame11(数据框)，可以理解为Excel表格，或数据库表。&lt;/h3&gt;
&lt;h3&gt;DataFrame.head(n)，取前n行，默认为5；DataFrame.tail(n)，取后n行，默认为5&lt;/h3&gt;
&lt;h3&gt;DataFrame.describe(),简单统计信息(count：总数；mean：均值；std：标准差；min：最小值；25%：四分之一分位数；50%：中位数；75%：四分之三分位数；max：最大值)&lt;/h3&gt;
&lt;h3&gt;DataFrame.T,转置，横纵坐标相反&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;pd.read_csv(filename)：从CSV文件导入数据
pd.read_table(filename)：从限定分隔符的文本文件导入数据
pd.read_excel(filename)：从Excel文件导入数据
pd.read_sql(query, connection_object)：从SQL表/库导入数据
pd.read_json(json_string)：从JSON格式的字符串导入数据
pd.read_html(url)：解析URL、字符串或者HTML文件，抽取其中的tables表格
pd.read_clipboard()：从你的粘贴板获取内容，并传给read_table()
pd.DataFrame(dict)：从字典对象导入数据，Key是列名，Value是数据&lt;/pre&gt;
&lt;h3&gt;一些基础的数据导入方法。&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;pd.read_feather
pd.read_hdf
pd.read_msgpack
pd.read_sas
pd.read_sql_table
pd.read_fwf
pd.read_parquet
pd.read_stata
pd.read_gbq
pd.read_pickle
pd.read_sql_query&lt;/pre&gt;
&lt;p&gt;上面这些是其他一些导入的方法，用到的时候会讲~&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;:::warning
&lt;a href=&quot;https://x-item.com/ml_models.html&quot;&gt;【处女座之最，未经许可，禁止转载】&lt;/a&gt;
:::&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/pre&gt;</content:encoded></item><item><title>Ubuntu 下 Ansible 使用记录</title><link>https://x-item.com/ansible_log.html</link><guid isPermaLink="true">https://x-item.com/ansible_log.html</guid><description>Ubuntu 下 Ansible 安装以及使用记录</description><pubDate>Tue, 08 May 2018 06:06:59 GMT</pubDate><content:encoded>&lt;h2&gt;环境：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;: 18.04 LTS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ansible&lt;/strong&gt;: 2.5.2&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;: 2.7.15rc1
 &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安装：&lt;/h2&gt;
&lt;pre&gt;apt-get install ansible
或
pip install ansible&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;配置：&lt;/h2&gt;
&lt;pre&gt;vi /etc/ansible/hosts&lt;/pre&gt;
&lt;p&gt;修改一下远程配置，把需要远程的服务器地址填入(可以自己配置一个组)&lt;/p&gt;
&lt;pre&gt;# This is the default ansible &apos;hosts&apos; file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the &apos;#&apos; character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

**&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;[localserver]
192.168.137.139
192.168.137.140&lt;/mark&gt;**
# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10&lt;/pre&gt;
&lt;p&gt;这里我添加了一个localserver组，加入了本地测试用安装的虚拟机地址(蓝色部分)&lt;/p&gt;
&lt;p&gt;保存并退出&lt;/p&gt;
&lt;p&gt;实际服务器测试当中，还会出现以下错误&lt;/p&gt;
&lt;pre&gt;FAILED! =&amp;gt; {&quot;failed&quot;: true, &quot;msg&quot;: &quot;ERROR! Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host&apos;s fingerprint to your known_hosts file to manage this host.&quot;}&lt;/pre&gt;
&lt;p&gt;现在服务器都会开启密钥检查(因为测试环境仅为账号密码登陆所以不考虑公钥验证，后期遇到会添加)&lt;/p&gt;
&lt;p&gt;如出现上述错误，则还需修改配置文件&lt;/p&gt;
&lt;pre&gt; vi /etc/ansible/ansible.cfg

....
# option lets you increase or decrease that
# timeout to something more suitable for the
# environment.
# gather_timeout = 10

# additional paths to search for roles in, colon separated
#roles_path    = /etc/ansible/roles

# uncomment this to disable SSH key host checking
&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;#host_key_checking = False&lt;/mark&gt;

# change the default callback, you can only have one &apos;stdout&apos; type  enabled at a time.
#stdout_callback = skippy
.....
&lt;/pre&gt;
&lt;p&gt;去掉 host_key_checking = False 前面的注释即可(红色部分)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;测试：&lt;/h2&gt;
&lt;pre&gt;ansible localserver -m ping -u root -k

SSH password:
192.168.137.140 | SUCCESS =&amp;gt; {
 &quot;changed&quot;: false,
 &quot;ping&quot;: &quot;pong&quot;
}
192.168.137.139 | SUCCESS =&amp;gt; {
 &quot;changed&quot;: false,
 &quot;ping&quot;: &quot;pong&quot;
}&lt;/pre&gt;
&lt;p&gt;localserver 就是刚才配置的组，也可以指定一个服务器，直接键入IP就行&lt;/p&gt;
&lt;pre&gt;ansible 192.168.137.139 -m ping -u root -k

SSH password:
192.168.137.139 | SUCCESS =&amp;gt; {
 &quot;changed&quot;: false,
 &quot;ping&quot;: &quot;pong&quot;
}&lt;/pre&gt;
&lt;h3&gt;参数说明：-m 后接命令  -u 用户名 -k 连接前询问密码(因为本地测试没使用公钥认证，进使用账号密码登陆)&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;基础命令&lt;/h2&gt;
&lt;h3&gt;远程查询以下剩余内存(执行命令)&lt;/h3&gt;
&lt;pre&gt;root@server:~# **ansible 192.168.137.139 -m command -a &quot;free -m&quot; -k**
SSH password:
192.168.137.139 | SUCCESS | rc=0 &amp;gt;&amp;gt;
 total used free shared buff/cache available
Mem: 961 231 210 12 519 569
Swap: 2043 0 2043&lt;/pre&gt;
&lt;h3&gt;复制文件&lt;/h3&gt;
&lt;pre&gt;root@server:~# touch test_file
root@server:~# **ansible 192.168.137.139 -m copy -a &quot;src=/root/test_file dest=/root&quot; -k**
SSH password:
192.168.137.139 | SUCCESS =&amp;gt; {
    &quot;changed&quot;: true,
    &quot;checksum&quot;: &quot;da39a3ee5e6b4b0d3255bfef95601890afd80709&quot;,
    &quot;dest&quot;: &quot;/root/test_file&quot;,
    &quot;gid&quot;: 0,
    &quot;group&quot;: &quot;root&quot;,
    &quot;md5sum&quot;: &quot;d41d8cd98f00b204e9800998ecf8427e&quot;,
    &quot;mode&quot;: &quot;0644&quot;,
    &quot;owner&quot;: &quot;root&quot;,
    &quot;size&quot;: 0,
    &quot;src&quot;: &quot;/root/.ansible/tmp/ansible-tmp-1525760764.39-252880811110737/source&quot;,
    &quot;state&quot;: &quot;file&quot;,
    &quot;uid&quot;: 0
}&lt;/pre&gt;
&lt;h3&gt;查询文件信息(状态)&lt;/h3&gt;
&lt;pre&gt;root@server:~# **ansible 192.168.137.139 -m stat -a &quot;path=/root/test_file&quot; -k**
SSH password:
192.168.137.139 | SUCCESS =&amp;gt; {
    &quot;changed&quot;: false,
    &quot;stat&quot;: {
        &quot;atime&quot;: 1525760766.1826777,
        &quot;attr_flags&quot;: &quot;e&quot;,
        &quot;attributes&quot;: [
            &quot;extents&quot;
        ],
        &quot;block_size&quot;: 4096,
        &quot;blocks&quot;: 0,
        &quot;charset&quot;: &quot;binary&quot;,
        &quot;checksum&quot;: &quot;da39a3ee5e6b4b0d3255bfef95601890afd80709&quot;,
        &quot;ctime&quot;: 1525760766.1826777,
        &quot;dev&quot;: 64768,
        &quot;device_type&quot;: 0,
        &quot;executable&quot;: false,
        &quot;exists&quot;: true,
        &quot;gid&quot;: 0,
        &quot;gr_name&quot;: &quot;root&quot;,
        &quot;inode&quot;: 274007,
        &quot;isblk&quot;: false,
        &quot;ischr&quot;: false,
        &quot;isdir&quot;: false,
        &quot;isfifo&quot;: false,
        &quot;isgid&quot;: false,
        &quot;islnk&quot;: false,
        &quot;isreg&quot;: true,
        &quot;issock&quot;: false,
        &quot;isuid&quot;: false,
        &quot;mimetype&quot;: &quot;inode/x-empty&quot;,
        &quot;mode&quot;: &quot;0644&quot;,
        &quot;mtime&quot;: 1525760765.906087,
        &quot;nlink&quot;: 1,
        &quot;path&quot;: &quot;/root/test_file&quot;,
        &quot;pw_name&quot;: &quot;root&quot;,
        &quot;readable&quot;: true,
        &quot;rgrp&quot;: true,
        &quot;roth&quot;: true,
        &quot;rusr&quot;: true,
        &quot;size&quot;: 0,
        &quot;uid&quot;: 0,
        &quot;version&quot;: &quot;3915031093&quot;,
        &quot;wgrp&quot;: false,
        &quot;woth&quot;: false,
        &quot;writeable&quot;: true,
        &quot;wusr&quot;: true,
        &quot;xgrp&quot;: false,
        &quot;xoth&quot;: false,
        &quot;xusr&quot;: false
    }
}&lt;/pre&gt;
&lt;h3&gt;远程下载&lt;/h3&gt;
&lt;pre&gt;ansible 192.168.137.139 -m get_url -a &quot;url=https://x-item.com dest=/root/virace.html&quot; -k&lt;/pre&gt;
&lt;h3&gt;远程包管理&lt;/h3&gt;
&lt;pre&gt;ansible 192.168.137.139 -m yum -a &quot;name=python3&quot; -k&lt;/pre&gt;
&lt;h4&gt;&lt;/h4&gt;
&lt;h4&gt;未完待续&lt;/h4&gt;</content:encoded></item><item><title>安全软件真的安全么？</title><link>https://x-item.com/virus.html</link><guid isPermaLink="true">https://x-item.com/virus.html</guid><description>卡巴斯基软件的创始人Eugene Kaspersky接受采访时承认，他们确实在用户的电脑中拷贝了非病毒文件</description><pubDate>Mon, 06 Nov 2017 14:14:05 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;**8月份：**美国联邦调查局（FBI）曾向私营部门发出警告，声称总部位于莫斯科的网络安全公司卡巴斯基实验室（Kaspersky Lab）对国家安全存在严重威胁，相关私营企业最好停止使用卡巴斯基软件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;**9月13日：**美国国土安全部下令全国所有联邦机构停止使用卡巴斯基实验室的软件，原因是俄政府方面似乎可以访问该软件。
针对美国政府的禁令，卡巴斯基实验室同一天发表声明说：“美国的指责都是基于虚假指控和不准确的假设，没有人或任何机构公开提供任何可靠的证据。”声明强调，卡巴斯基从来没有帮助过或将帮助世界上的任何政府从事网络间谍或网络攻击活动。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;**11月份：**卡巴斯基软件的创始人Eugene Kaspersky接受采访时承认，他们确实在用户的电脑中拷贝了非病毒文件，不过这并不是用来“作恶”。Eugene Kaspersky没有透露更多细节，比如他们从用户电脑中拷贝的到底是什么文件，拷贝出文件后用它做了什么等等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fl8pn4mq75j20b40bxglp.jpg&quot; alt=&quot;安全软件真的安全么？&quot; /&gt;
&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fl8pn5yyp7j20l10d60t5.jpg&quot; alt=&quot;安全软件真的安全么？&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-tip&quot; data-tone=&quot;tip&quot;&gt;试想一下我们到底给了这些安全软件多大的权限？&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;.它可以监控电脑中的所有文件&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;.它可以获取电脑中所有的网络出入站请求&lt;/p&gt;
&lt;p&gt;.它也可以随意操作你的文件，当文件被视为病毒的时候&lt;/p&gt;
&lt;p&gt;想过之后回头看一下标题：&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;安全软件真的安全么？&lt;/mark&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;**这确实是非常让人感到惊讶的事情，因为相当于你的安全软件在监视你的电脑文件，并且竟然利用系统权限来将你的文件给另外一个毫不相干的人查看！**很显然这样的做法，必须要征得用户的同意，但卡巴斯基强调，他们此举只是为了找到网络罪犯。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;留下两个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你是否会继续使用安全软件(杀毒软件)？&lt;/li&gt;
&lt;li&gt;如果继续使用，你会选择国产软件还是国外软件？&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>CompactGUI,基于Windows10压缩功能,减小游戏体积还不影响性能</title><link>https://x-item.com/compactgui.html</link><guid isPermaLink="true">https://x-item.com/compactgui.html</guid><pubDate>Wed, 18 Oct 2017 04:08:02 GMT</pubDate><content:encoded>&lt;p&gt;随着屏幕分辨率的不断升级，拥有4K材质包的“完全体”《中土世界：战争之影》和《极限竞速7》的容量都在100G左右，不过Win10自带了一个非常有效的硬盘压缩功能，压缩游戏文件大小的同时，还不会对实际的游戏性能带来影响，而国外网友也制作了一个更简洁好用的UI界面，并命名为CompactGUI，方便玩家们进行使用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fkm9oiloq5j20li0vl78r.jpg&quot; alt=&quot;CompactGUI,基于Windows10压缩功能,减小游戏体积还不影响性能&quot; /&gt;&lt;/p&gt;
&lt;p&gt;根据Reddit论坛上的网友反映，这个软件对于不同的游戏实际的效果可能会有所不同，有网友总结了自己25个游戏的压缩测试结果，并制作了一张表格。可以看到，压缩率最高的游戏《兽人必须死》达到了48%，但也有根本没法进行压缩的游戏《使命召唤8：现代战争2》，不过这个功能的确会给喜欢囤积游戏的玩家们节约不少空间。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fkm9pr7c3cj20dm0grq4e.jpg&quot; alt=&quot;CompactGUI,基于Windows10压缩功能,减小游戏体积还不影响性能&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个压缩功能和传统压缩工具不同的是，压缩之后的文件仍然会以正常的文件夹形式展现，玩家们也可以对其内容进行浏览，游戏时也会正常运行，没有任何性能损失。&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href=&quot;http://pan.baidu.com/s/1boOO2lx&quot;&gt;http://pan.baidu.com/s/1boOO2lx&lt;/a&gt;
Github：https://github.com/ImminentFate/CompactGUI/releases
如果想体验预览版，在文章发布（2017年10月18日14点23分）的14小时前，推出了1.4.0的预览版，百度网盘中为1.3.5.1&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1fkmayr4upbj20jt0namyv.jpg&quot; alt=&quot;CompactGUI,基于Windows10压缩功能,减小游戏体积还不影响性能&quot; /&gt;
看门狗2压缩实测&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;本文转自&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;游民星空&lt;/mark&gt;，因保证图片质量重新链接原图(未保留水印)&lt;/p&gt;</content:encoded></item><item><title>如何在没有光盘、U盘的情况下，在Win10环境重装Win7</title><link>https://x-item.com/win10_win7.html</link><guid isPermaLink="true">https://x-item.com/win10_win7.html</guid><pubDate>Thu, 18 May 2017 08:28:03 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;h2&gt;要求：无光驱、无U盘；Win10正常启动或已无法正常启动(硬盘内有系统镜像)重装系统&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;正常重装系统需要的媒介有：光盘、U盘等其它存储设备。但很多情况下这些条件无法满足，之前讲过用&lt;a href=&quot;https://x-item.com/win10-hdd.html&quot;&gt;硬盘重新安装系统&lt;/a&gt;，其弊端为无法格式化硬盘。有不少情况是需要格式化硬盘(例如：中毒重装、系统垃圾太多直接重装清理等等)。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;废话不多说直接切入正题&lt;/h2&gt;
&lt;p&gt;教程环境：Win10创意者版本(本教程适用于Win8以上重装至其他Windows系统)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpjonap44j20sg0lc0vb.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;0x01 准备工作&lt;/mark&gt;&lt;/h2&gt;
&lt;h3&gt;a.系统镜像：系统镜像可以在 MSDN, 我告诉你 网站中寻找，还可以使用博主推荐的LDPY系统镜像&lt;/h3&gt;
&lt;h3&gt;b.必要驱动(可选)：根据你电脑的硬件型号去下载对应驱动(一般设备无需准备驱动，稍微上点年纪的设备只需要网卡和显卡驱动)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpjzwuo28j203o058dfq.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里使用的是Win7 Sp1 x64 原版镜像，镜像可以解压也可以不解压(因为Win8以上自带虚拟光驱可直接装载镜像)。&lt;/p&gt;
&lt;h3&gt;小结：推荐下载安装版系统，Ghost版本系统未测试理论可行，如果有童鞋测试过请在下方留言。&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;0x02 进入“PE”&lt;/mark&gt;&lt;/h2&gt;
&lt;p&gt;解释一下，这里的 “PE” 指的是，系统自带高级启动中的“命令提示符”模式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkcljp54j20sg0lcgnr.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkchnyrcj20px0ii75d.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkcdxtxkj20sg0lcaaj.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkc7ccwij20sg0lc74r.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkc42mtdj20sg0lcmya.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkc0pwi3j20sg0lcaae.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkbwq2t7j20sg0lcwek.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;小结：选择账户步骤会提示输入账户密码，如果密码为空则不用输入直接回车。&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;0x03 运行安装程序&lt;/mark&gt;&lt;/h2&gt;
&lt;p&gt;“命令提示符”模式，相当于是一个PE系统。但它没有文件管理器，可以用命令直接运行安装程序，这里介绍一个 “笨方法”。&lt;/p&gt;
&lt;h3&gt;a.命令提示符窗口中键入&quot;notepad&quot; 启动记事本，没有引号。&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkmhkff4j20sg0lc3yr.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;b.“文件”—&amp;gt;“打开”,打开对话框就可以临时代替文件管理器&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkmjhpbjj20sg0lc3zk.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;c.找到镜像所在位置，并将文件类型改为所有文件 (这里镜像已经解压，如果没解压则右键装载，返回此电脑可以看到一个新的盘符里面是已经装载的镜像文件)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkmlfaynj20sg0lcmy8.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;d.选择安装程序右键打开(切勿用右下角打开~)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpkmq2hkvj20sg0lcta6.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;小结：善用系统自带工具。&lt;/h3&gt;
&lt;h2&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;0x04 开始安装&lt;/mark&gt;&lt;/h2&gt;
&lt;p&gt;如果前几步操作正确，应该可以看到安装提示了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl11xuw7j20sg0lcjyi.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;a.下一步，然后开始安装(下图出现时，很可能会有错误提示，点击确定无视掉就可以了)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl26xcdcj20sg0lc7lg.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;b.选择自定义(高级)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl3a3f7jj20sg0lck3w.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;c.选择磁盘，这里注意多数情况盘符较多如果需要格式化请再三确认。&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl3efvexj20sg0lc4au.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;d.安装开始，漫长的等待~ 可以去喝杯茶，展开时间在5~20分钟(根据硬盘读写速度而定)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl68njm1j20sg0lcqew.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;e.经过数次重启，安装设置不在赘述 输入用户名一直下一步就可以&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl8dyta8j20m80go775.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;f.看到了久违的欢迎界面，安装完毕&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://up.image.x-item.com/large/a1e6bd2bly1ffpl9fb1boj20m80go46b.jpg&quot; alt=&quot;如何在没有光盘、U盘的情况下，在Win10环境重装Win7&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;小结：选择盘符时可以通过盘符大小判断硬盘分区。&lt;/h3&gt;
&lt;h2&gt;总结：本教程的亮点是无任何媒介参与，但也有一个必要的前提就是你本地硬盘得有系统镜像。如果你没有任何存储设备、没网、没镜像，那还是洗洗睡吧，或者去电脑城给你重装一下系统(价格在20~300之间)。教程中有任何问题、疑问或是在实际操作中遇到任何情况，可以在下方留言。&lt;/h2&gt;</content:encoded></item><item><title>收藏向: 私用Windows系统(xp、7)</title><link>https://x-item.com/windows.html</link><guid isPermaLink="true">https://x-item.com/windows.html</guid><pubDate>Tue, 10 May 2016 18:17:40 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这篇文章是16年攥写的, 所有百度网盘的分享链接都年久失修. 个人也比较喜欢这些老系统, 尤其是那些安装版的Win7和XP. 当年比较沉迷安装版, 因为当时全都是Ghost, 只是单纯的感觉安装版NB而已= =&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;重新补一下连接: 链接: &lt;a href=&quot;https://pan.baidu.com/s/1UL6D6Voynr4J8cPXstgWWw&quot;&gt;https://pan.baidu.com/s/1UL6D6Voynr4J8cPXstgWWw&lt;/a&gt; 提取码: bdiv, 以下是原文.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.taopic.com/uploads/allimg/140720/240467-140H00K62786.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;前几天做出了安装Win10的三种方法，在这里说一下教程不仅限于安装Windwos10版本。（除XP外安装方法都是大同小异。）&lt;/p&gt;
&lt;p&gt;今天给大家分享一下博主从Win Xp直到现在Win10之间所用过的各种经典系统。&lt;/p&gt;
&lt;p&gt;首先提一下“雨林木风工作室”，当年Xp时代大V个人最喜欢的一款系统就是由这个工作室制作的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;亲爱的会员朋友们： 基于多方面的原因，我们不得不很遗憾地告诉大家，经过雨林木风工作室管理层慎重考虑，决定于2008年12月31日起正式解散。今后，雨林木风将以自主研发软件产品为主，继续为网民提供服务（不再进行未开源操作系统技术研究），所有成员与工作室脱离一切隶属关系，而雨林木风论坛将继续独立运营，不受本工作室解散之影响。&lt;/mark&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可惜由于番茄花园事件，雨林木风也被迫解散！&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;Windows Xp：雨林木风 WinXP SP3安装版YS8.0&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;这是雨林木风最后一款安装版的Windows Xp，虽然不是纯净版，但是里面的软件都是选择性安装。&lt;/p&gt;
&lt;p&gt;而且大V本人独爱安装版系统所以Xp我推荐这款做虚拟机的测试系统还是不错的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 7：LDPY Windows7 SP1 X64 纯净选择安装版（LDPY_Win7_Sp1_AZB_X64_V5.1.iso）&lt;/li&gt;
&lt;li&gt;LDPY Windows7 SP1 X64 纯净选择Ghost版（LDPY_Ghost_Win7_Sp1_X64_V5.1.iso）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;零度飘逸Win7时代用过的最稳定的系统。&lt;/p&gt;
&lt;p&gt;然而从Win8以上就再也没用过Ghost了，所以下面推荐的都是官方原版镜像。&lt;/p&gt;</content:encoded></item><item><title>Windwos 10 安装图文教程（包含双系统）之PE</title><link>https://x-item.com/win10-pe.html</link><guid isPermaLink="true">https://x-item.com/win10-pe.html</guid><pubDate>Sat, 07 May 2016 06:50:51 GMT</pubDate><content:encoded>&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/win10-u.html&quot;&gt;U盘安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;硬盘安装&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;PE安装&lt;/mark&gt;
教程开始：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;教程中系统镜像采用的是官方镜像“&lt;em&gt;cn_windows_10_enterprise_version_1511_x64_dvd_7224788.iso&lt;/em&gt;“，下载地址参考博客中的”&lt;a href=&quot;https://x-item.com/zhuangji.html&quot;&gt;Windwos系统装机推荐&lt;/a&gt;“。&lt;/p&gt;
&lt;p&gt;PE安装需要先搭建环境，需要一个U盘（推荐为8G）。最好做一个应急启动U盘，以备急用。&lt;/p&gt;
&lt;p&gt;用软碟通先打开PE镜像，然后选择&quot;启动&quot;-&amp;gt;&quot;写入硬盘镜像&quot;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/PE%E5%88%B6%E4%BD%9C1-1.jpg&quot; alt=&quot;PE制作1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果需要安装PE后的U盘可以它用的话，在隐藏启动分区下拉选中选择“隐藏”或“高级隐藏”。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/PE%E5%88%B6%E4%BD%9C2-1.jpg&quot; alt=&quot;PE制作2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后重启进入U盘引导。详情见“&lt;a href=&quot;https://x-item.com/win10-u.html&quot;&gt;Windwos 10 安装图文教程（包含双系统）之U盘&lt;/a&gt;” 中的第二步。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/start_pe_1.jpg&quot; alt=&quot;进入PE1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;进入后打开桌面的“安装系统”，其他PE可能名为“Windows安装器”等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/start_pe_2.jpg&quot; alt=&quot;进入PE2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里直接把镜像用虚拟光驱加载或者解压。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/Installer_1.jpg&quot; alt=&quot;安装器1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注意文件路径。（图片中红框）&lt;/p&gt;
&lt;p&gt;引导驱动器：可能是没有盘符的一个盘或是名叫系统保留的盘符，如果是EFI那么盘符名字就叫EFI。&lt;/p&gt;
&lt;p&gt;其他参数可以按照意愿来修改。&lt;/p&gt;
&lt;p&gt;双系统：安装磁盘位置选&lt;mark class=&quot;md-highlight tone-important&quot; data-tone=&quot;important&quot;&gt;除原系统&lt;/mark&gt;之外的盘符即可，然后再用启动项修复工具（PE里面有）修复一下就可以或可以开机后手动添加。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;文中使用的PE下载链接如下：&lt;a href=&quot;https://yunpan.cn/cPzkwDei8KGt9&quot;&gt;点击访问&lt;/a&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;（提取码：4061）&lt;/mark&gt;&lt;/p&gt;</content:encoded></item><item><title>Windwos 10 安装图文教程（包含双系统）之硬盘</title><link>https://x-item.com/win10-hdd.html</link><guid isPermaLink="true">https://x-item.com/win10-hdd.html</guid><pubDate>Sat, 07 May 2016 06:49:54 GMT</pubDate><content:encoded>&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x-item.com/win10-u.html&quot;&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;U盘安装&lt;/mark&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;硬盘安装&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;PE安装&lt;/mark&gt;
教程开始：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;教程中系统镜像采用的是官方镜像“&lt;em&gt;cn_windows_10_enterprise_version_1511_x64_dvd_7224788.iso&lt;/em&gt;“，下载地址参考博客中的”&lt;a href=&quot;https://x-item.com/zhuangji.html&quot;&gt;Windwos系统装机推荐&lt;/a&gt;“。&lt;/p&gt;
&lt;p&gt;与U盘安装不同在于我们不用漫长的等待制作U盘镜像，只需将镜像解压在非安装盘（例如需要安装的系统盘符为C，就将镜像解压到D,E,F...）或用虚拟光驱加载就可以了。系统版本从Win8之后就自带虚拟光驱了，所说这就不放虚拟光驱的链接了，Win7以上的可以解压的方法。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/disk_installation_1.jpg&quot; alt=&quot;硬盘安装1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上图就是用虚拟光驱加载的效果（Win8以上系统自带虚拟光驱），直接解压的话除了盘符不必在意文件位置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/disk_installation_2.jpg&quot; alt=&quot;硬盘安装2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;直接打开“Setup.exe”就可以开始安装了。&lt;/p&gt;
&lt;p&gt;双系统：运行“\sources\Setup.exe”，后续操作详情见&lt;a href=&quot;https://x-item.com/win10-u.html&quot;&gt;Windwos 10 安装图文教程（包含双系统）之U盘&lt;/a&gt; 第二步之后。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_1.jpg&quot; alt=&quot;安装界面1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_2.jpg&quot; alt=&quot;安装界面2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看到许可条款接受就可以！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_3.jpg&quot; alt=&quot;安装界面3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果选择无缝安装的话，就选择“保留文件和内容”。其它选项请查询搜索引擎。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_4.jpg&quot; alt=&quot;安装界面4&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_start_1.jpg&quot; alt=&quot;开始安装1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;连续的重启数次后，就完成了升级。&lt;a href=&quot;https://x-item.com/win10-u.html&quot;&gt;Windwos 10 安装图文教程（包含双系统）之U盘&lt;/a&gt; 详见最后两幅图。&lt;/p&gt;
&lt;p&gt;到此硬盘安装Win10的教程就结束了，正常开机后的激活、安装驱动、优化请移步“&lt;a href=&quot;https://x-item.com/zhuangji.html&quot;&gt;Windows系统装机推荐&lt;/a&gt;”&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content:encoded></item><item><title>Windwos 10 安装图文教程（包含双系统）之U盘</title><link>https://x-item.com/win10-u.html</link><guid isPermaLink="true">https://x-item.com/win10-u.html</guid><pubDate>Sat, 07 May 2016 06:43:43 GMT</pubDate><content:encoded>&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;U盘安装&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;硬盘安装&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;&lt;mark class=&quot;md-highlight tone-note&quot; data-tone=&quot;note&quot;&gt;PE安装&lt;/mark&gt;
教程开始：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;教程中系统镜像采用的是官方镜像“&lt;em&gt;cn_windows_10_enterprise_version_1511_x64_dvd_7224788.iso&lt;/em&gt;“，下载地址参考博客中的”&lt;a href=&quot;https://x-item.com/zhuangji.html&quot;&gt;Windwos系统装机推荐&lt;/a&gt;“。&lt;/p&gt;
&lt;p&gt;U盘大小推荐为8G大小，镜像解包后大小为4G以上，所以不能使用4G U盘，如果没有U盘请看其他教程（&lt;a href=&quot;https://x-item.com/win10-hdd.html&quot;&gt;硬盘安装&lt;/a&gt;、&lt;a href=&quot;https://x-item.com/win10-pe.html&quot;&gt;PE安装&lt;/a&gt;）。U盘在制作过程中会删除盘内全部内容，所以请做好数据备份！&lt;/p&gt;
&lt;p&gt;软件准备：软碟通或软媒U盘启动。（本文所需工具会在最下方提供）&lt;/p&gt;
&lt;p&gt;本教程中使用软媒工具，软碟通的方法就是 写入硬盘镜像 就可以了。&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;1.制作启动U盘；&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/make_usb.jpg&quot; alt=&quot;制作U盘启动&quot; /&gt;&lt;/p&gt;
&lt;p&gt;制作之前注意U盘数据备份！！点击开始制作之后会等一段时间，等待时间取决于U盘写入速度。&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;2.进入U盘引导；&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;制作好启动盘后，重启电脑。选择从USB启动即可进入安装环境。一般品牌机都有选择启动介质的快捷键，这些快捷键通常为F12等等，开机出现品牌机logo后按快捷键，然后在出现的列表中选择USB或者类似的选项即可从USB启动即可。如果找不到快捷键，那就先进入BIOS设置界面，在BIOS设置中找到Boot相关设置选项，将USB选项设置为第一启动选项，按F10保存后重启即可进入U盘引导启动。（因为电脑不同操作不同建议先在搜索引擎下搜索自己的机型）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_start.jpg&quot; alt=&quot;U盘启动1&quot; /&gt; &lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install.jpg&quot; alt=&quot;U盘启动2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;看到这个界面就进入成功了。&lt;/p&gt;
&lt;p&gt;&lt;mark class=&quot;md-highlight tone-warning&quot; data-tone=&quot;warning&quot;&gt;3.进行安装；&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;“下一步”后点击“开始安装”，然后一直下一步&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/win_install_type.jpg&quot; alt=&quot;进行安装1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果你想将当前系统无缝升级（即将当前系统的软件以及设置迁移到新系统并替换当前系统）的推荐升级安装，并无视下列分区步骤。如果不是推自定义安装，这里我们选择自定义。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/select_partition.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;删除系统分区以及系统保留分区（如果安装双系统就不要删除分区，直接选择事先分好的第二个系统分区下一步就OK），然后新建一个合适大小的分区会自动生成系统保留分区（EFI）单击下一步。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/installing.jpg&quot; alt=&quot;进行安装3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后就是漫长的等待和数次的重启。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/quick_setup.jpg&quot; alt=&quot;完成安装&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;assets/wp-content/uploads/2016/05/setup_complete.jpg&quot; alt=&quot;完成安装2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;到此U盘安装Win10的教程就结束了，正常开机后的激活、安装驱动、优化请移步“&lt;a href=&quot;https://x-item.com/zhuangji.html&quot;&gt;Windows系统装机推荐&lt;/a&gt;”&lt;/p&gt;
&lt;p&gt;所需U盘制作工具下载地址如下：&lt;a href=&quot;https://yunpan.cn/cPzuaHI9RtrFy&quot;&gt;点击访问&lt;/a&gt;&lt;mark class=&quot;md-highlight tone-caution&quot; data-tone=&quot;caution&quot;&gt;（提取码：0c94）&lt;/mark&gt;&lt;/p&gt;</content:encoded></item><item><title>Windows(10/11)装机软件推荐2022版</title><link>https://x-item.com/zhuangji.html</link><guid isPermaLink="true">https://x-item.com/zhuangji.html</guid><pubDate>Sat, 07 May 2016 03:45:51 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;分享一些个人比较喜欢常用或是感兴趣的软件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐&lt;/h2&gt;
&lt;h3&gt;系统&lt;/h3&gt;
&lt;p&gt;老规矩：&lt;a href=&quot;https://next.itellyou.cn/&quot;&gt;https://next.itellyou.cn/&lt;/a&gt; &lt;em&gt;&lt;strong&gt;MSDN, 我告诉你&lt;/strong&gt;&lt;/em&gt;的新版网站，需要登录后才可以下载相关镜像，非常不错的网站。但是更多用的是 &lt;em&gt;&lt;strong&gt;UUP dump&lt;/strong&gt;&lt;/em&gt; &lt;a href=&quot;https://uupdump.net/?lang=zh-cn&quot;&gt;https://uupdump.net/&lt;/a&gt; 其项目开源：&lt;a href=&quot;https://github.com/uup-dump&quot;&gt;https://github.com/uup-dump&lt;/a&gt;，所以可能会有很多类似的网站但网址不相同，注意鉴别官网。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UUP dump&lt;/strong&gt;&lt;/em&gt; 好就好在可以将最新的补丁封装在镜像中，这样安装好后的系统也不用额外去更新了，当然，如果不需要更新的用户可以不用考虑。&lt;/p&gt;
&lt;h3&gt;安全软件&lt;/h3&gt;
&lt;p&gt;个人是推荐 &lt;strong&gt;火绒&lt;/strong&gt; 或Win10之后版本系统自带的 &lt;em&gt;&lt;strong&gt;Microsoft Defender&lt;/strong&gt;&lt;/em&gt; ，就是Windows安全中心里面的杀毒。非常够用，如果你只是轻办公，那么不用额外去安装其他的杀毒软件。&lt;/p&gt;
&lt;p&gt;那么会有朋友说 &lt;em&gt;&lt;strong&gt;Defender&lt;/strong&gt;&lt;/em&gt; 误报严重，当然这分情况，如果你经常使用破解软件那么很显然自带杀毒对你来说误报率肯定是高的，像破解程序或注册机对于软件甚至系统来说它就是恶意软件，这没什么可讨论的。毕竟是个国际软件，并没有对多数的国内使用环境(破解、绿色软件)进行更多的优化。所以在这点上可以理解，更推荐这部分用户去使用火绒等国内一些常见的安全软件，按照自己的习惯来指定自己想要的规则。&lt;/p&gt;
&lt;p&gt;当然还有一部分小白用户，很可能都不会看这篇文章，但是还要说一句，其实&lt;strong&gt;360安全软件&lt;/strong&gt; 就很不错了，没有嘲讽，没有恶意。360这么多年做的也很不错(单指软件)，没有必要再这个这类软件上浪费更多时间去研究，交给他就行了。专心做其他的事情，毕竟对于小白来讲，一个探讨这个并不会对实际体验带来什么实质性的提升。&lt;/p&gt;
&lt;h3&gt;影音图像&lt;/h3&gt;
&lt;p&gt;这部分没什么可说的，都是常用软件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本地音频播放：&lt;em&gt;&lt;strong&gt;AIMP&lt;/strong&gt;&lt;/em&gt;&lt;a href=&quot;https://www.aimp.ru/&quot;&gt;https://www.aimp.ru/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;本地视频播放：&lt;em&gt;&lt;strong&gt;PotPlayer&lt;/strong&gt;&lt;/em&gt;&lt;a href=&quot;https://potplayer.daum.net/&quot;&gt;https://potplayer.daum.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;网络音频播放：&lt;strong&gt;网易云音乐&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;图像查看：ImageGlass&lt;a href=&quot;https://imageglass.org/&quot;&gt;https://imageglass.org/&lt;/a&gt;，之前推荐过360看图、ACDSee，都因为功能过少和太臃肿放弃了其实微软默认的图片查看器也很好用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;其他常用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;浏览器：Edge、Chrome、Firefox，三巨头，平常最多用的就是Chrome和Edge，当一个浏览器成为你的使用习惯的时候，再去想说换其他浏览器已经很难了，各种插件、脚本迁移都是件很麻烦的事情。国内浏览器用得少，没什么发言权就不提了。&lt;/li&gt;
&lt;li&gt;下载：&lt;strong&gt;Internet Download Manager&lt;/strong&gt;、&lt;strong&gt;迅雷&lt;/strong&gt;、&lt;strong&gt;Aria2&lt;/strong&gt;，idm和aria2多线程下载很好用，迅雷不用不行，很多种子、磁力因为做种得人很少又玩不起PT，迅雷P2P在这里优势还是很明显的。&lt;/li&gt;
&lt;li&gt;解压缩：&lt;strong&gt;Bandizip&lt;/strong&gt; &lt;a href=&quot;http://www.bandisoft.com/bandizip/&quot;&gt;http://www.bandisoft.com/bandizip/&lt;/a&gt;、&lt;strong&gt;WinRAR&lt;/strong&gt; &lt;a href=&quot;https://www.win-rar.com&quot;&gt;https://www.win-rar.com&lt;/a&gt;、&lt;strong&gt;7-Zip&lt;/strong&gt; &lt;a href=&quot;https://www.7-zip.org/&quot;&gt;https://www.7-zip.org/&lt;/a&gt;，没什么可讲究的个人会分发一些资源，所以压缩率最高得7-Zip是必需品。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;小众软件&lt;/h2&gt;
&lt;p&gt;以下只是我个人认为的小众软件，但使用体验很不错的。&lt;/p&gt;
&lt;h3&gt;listary 6&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.listary.com/&quot;&gt;https://www.listary.com/&lt;/a&gt; 这款软件真的是用了好多年，直到作者前段时间回归更新之后花了49元入正了。起初是在 “&lt;a href=&quot;https://www.iplaysoft.com/listary.html&quot;&gt;异次元软件世界&lt;/a&gt;”看到的软件推荐，大概是14年的时候，Windows8那个时代。从能查到的记录来看2011年9月份3.x版本就是免费软件，这些年系统更新也挺频繁的，Windows8、8.1、10，但是17 18年因为作者工作原因疏于更新了，可能会在新系统上遇到各种问题，那个时候就不怎么用了。&lt;/p&gt;
&lt;p&gt;19年作者发布listary 6的beta版本，算是当时画的饼吧，从那时候开始就一直使用这个beta版本，功能不全但是好在新系统上没遇到什么问题。也是直到2022年的5月份作者恢复更新，并且在官方论坛公布了回复更新的消息。&lt;/p&gt;
&lt;p&gt;这里借用以下异次元的图，这只是其中的功能之一，快速的切换已打开的文件夹。也可以去异次元查看完整的介绍：&lt;a href=&quot;https://www.iplaysoft.com/listary.html&quot;&gt;https://www.iplaysoft.com/listary.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img-dp.iplaysoft.com/dispatch/1e28c73204178c7bca0d349639a8ba0f.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;他可以极大的提升的工作效率，据了解(各大论坛发帖)这个功能没有其他软件做过。&lt;/p&gt;
&lt;p&gt;用过Listary、Wox，这都是当年的标杆，有了他们之后国内才兴起一阵效率软件的热潮，utools等这类软件。但体验都不如前两款，可能是前两款软件都没有中文官方，国内了解的人不多？但其实这两款软件开发者都是国人(华人？) Wox还是开源的，之后也一样停更了很长时间，现在好象是被微软收编了，微软出的PowerToys套件中，PowerToys Run使用的就是Wox的代码(不严谨)。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;与其说是一个装机推荐，不如说是一个软件杂谈，聊一聊有趣的软件，以及现在软件环境。希望看官能畅所欲言。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item></channel></rss>