<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技术分享 &#8211; A.X.MEMO</title>
	<atom:link href="https://axmemo.com/category/technology/feed" rel="self" type="application/rss+xml" />
	<link>https://axmemo.com</link>
	<description>I will be here, in your future!</description>
	<lastBuildDate>Wed, 07 Oct 2020 09:26:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.7</generator>
	<item>
		<title>最终关闭了群晖二次验证</title>
		<link>https://axmemo.com/technology/disable-2-step-verification-in-synology.html</link>
					<comments>https://axmemo.com/technology/disable-2-step-verification-in-synology.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Wed, 07 Oct 2020 09:24:39 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[硬件设备]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[二次验证]]></category>
		<category><![CDATA[群晖]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=4203</guid>

					<description><![CDATA[我有两台群晖，平时放在两个不同的地方做异地同步备份。之前因为群晖出现过一些漏洞啥的问题，所以根据网上的建议我开启了群晖的二次验证功能，不过最近突然出现二次验证密码一直报错的情况。我在网上找了一下，好像也有很多人遇到类似情况。所以我今天特别跑了一趟，去关闭群晖的二次验证功能。 至于导致二次验证功能的原因，我很难去分析了，有一种说法是因为时间同步的问题，不过我已经启用了群晖上的自动网络授时，这个问题应该不大。然后就是我最近经常在gmail里面收到群晖DDNS离线的消息，我看了一下我的路由器日志和群晖日志，并没有存在断电重启的情况。不过今天我发现那边的电脑无法上网了，一看好像是IPV6的锅。就是应该是运营商远程启用了IPV6，应该是中间有过断拨号（但不是断电），然后重新拨号后，获取到了IPV6+IPV4的地址，之后呢，就遇到了DNS的问题，貌似自动调取了IPV6的DNS，然后就BUG不断了。后来我把家里的路由器全部重置了，网络就好了。我对比了一下，重置后的路由器默认关闭了IPV6功能。所以很有可能是因为这个原因导致授时失败，或者是DDNS连接失败，进而影响到这个二次验证的功能。 好吧，既然决定关闭二次验证了，就看怎么操作了。网上的说法是按住屁股后面的reset按键4秒钟等待“嘀”的一声，然后完成重启就好。我第一次没成功，应该是没有戳到底的缘故，第二次就成功了。然后用路由器获取新地址，或者用那个群晖的辅助工具扫描获取新地址也行，通过默认的5000端口登录管理网页。输入admin和空密码点击下一步，然后再进行新的密码设置就可以了。之后就可以进入管理页面，将之前我的管理账户的二次验证彻底关闭。再换回管理账户，禁用掉默认的admin。 这两台群晖全部关闭了SSH服务以及admin账户，用了一个罕见的管理账户登录，密码也已经是强密码了。为了省的以后被莫名其妙的问题困扰，我还是关闭了群晖的二次验证功能，还是老老实实的改端口、关服务、修改强密码好了！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="disable2step" src="https://axmemo.com/wp-content/uploads/2020/10/disable2step.jpg" alt="disable2step" width="625" height="252" border="0" /></p>
<p>我有两台群晖，平时放在两个不同的地方做异地同步备份。之前因为群晖出现过一些漏洞啥的问题，所以根据网上的建议我开启了群晖的二次验证功能，不过最近突然出现二次验证密码一直报错的情况。我在网上找了一下，好像也有很多人遇到类似情况。所以我今天特别跑了一趟，去关闭群晖的二次验证功能。<span id="more-4203"></span></p>
<p>至于导致二次验证功能的原因，我很难去分析了，有一种说法是因为时间同步的问题，不过我已经启用了群晖上的自动网络授时，这个问题应该不大。然后就是我最近经常在gmail里面收到群晖DDNS离线的消息，我看了一下我的路由器日志和群晖日志，并没有存在断电重启的情况。不过今天我发现那边的电脑无法上网了，一看好像是IPV6的锅。就是应该是运营商远程启用了IPV6，应该是中间有过断拨号（但不是断电），然后重新拨号后，获取到了IPV6+IPV4的地址，之后呢，就遇到了DNS的问题，貌似自动调取了IPV6的DNS，然后就BUG不断了。后来我把家里的路由器全部重置了，网络就好了。我对比了一下，重置后的路由器默认关闭了IPV6功能。所以很有可能是因为这个原因导致授时失败，或者是DDNS连接失败，进而影响到这个二次验证的功能。</p>
<p>好吧，既然决定关闭二次验证了，就看怎么操作了。网上的说法是按住屁股后面的reset按键4秒钟等待“嘀”的一声，然后完成重启就好。我第一次没成功，应该是没有戳到底的缘故，第二次就成功了。然后用路由器获取新地址，或者用那个群晖的辅助工具扫描获取新地址也行，通过默认的5000端口登录管理网页。输入admin和空密码点击下一步，然后再进行新的密码设置就可以了。之后就可以进入管理页面，将之前我的管理账户的二次验证彻底关闭。再换回管理账户，禁用掉默认的admin。</p>
<p>这两台群晖全部关闭了SSH服务以及admin账户，用了一个罕见的管理账户登录，密码也已经是强密码了。为了省的以后被莫名其妙的问题困扰，我还是关闭了群晖的二次验证功能，还是老老实实的改端口、关服务、修改强密码好了！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/disable-2-step-verification-in-synology.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>解决佳明表盘设置无法同步</title>
		<link>https://axmemo.com/technology/solve-garmin-watchface-sync-error.html</link>
					<comments>https://axmemo.com/technology/solve-garmin-watchface-sync-error.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Mon, 26 Aug 2019 04:19:16 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[移动终端]]></category>
		<category><![CDATA[Garmin]]></category>
		<category><![CDATA[同步]]></category>
		<category><![CDATA[表盘]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=4141</guid>

					<description><![CDATA[最近这几天发现Garmin Connect在同步表盘设置的时候会失败，主要表现在同步之后表盘设置不会被应用，或者会直接初始化为最初版本。当前受到影响版本是4.22的版本，不确认这个问题是不是在之前就出现，所以上网找了一下原因，在这里记录下供大家参考。当然可能过几个版本之后，Garmin修复了错误，那就不用看本文了。 这个表盘设置同步失败的问题，其实并不是最近才出现的，三个月之前，就已经有人在社区中反馈类似的问题。开发者们发现了大量多用户反馈报错，后来才发现应该是Garmin软件本身的问题。当时的BUG主要体现在，如果表盘设定中有针对日期的设定，如果你没有进行设置的话，同步之后就会导致配置文件失败，然后就没有然后了。 只是没想到的是，这次的Garmin软件更新，直接把这个BUG扩大化了，所有的表盘几乎全部被波及。如果你没有修改过表盘设置，其实你感觉不到，但是如果你一旦修改了设置，或者更新了新版本的表盘，然后恭喜你，你就只能使用初始化表盘而且无法修改配置了。 而我们知道，Garmin Connect是必装的软件，所以这个BUG看似在系统更新前是无解了，不过聪明的网友似乎又找到了其他的办法。 其实你可以在应用商店中找到多个Garmin的APP，原本我们只要用左边这个就可以了，但是不知道为什么Garmin又搞了右边那个出来，而右边那个仅仅具备商店的功能而已。不过这就刚好成为了我们的备选之策，现在如果通过右边那个APP来同步表盘设置，是OK的！ 好了，今天的文章就写到这里，其实用一句话就能讲清楚的事情，哈哈！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="garmin-IQ" src="https://axmemo.com/wp-content/uploads/2019/08/garmin-IQ.jpg" alt="garmin-IQ" width="625" height="252" border="0" /></p>
<p>最近这几天发现Garmin Connect在同步表盘设置的时候会失败，主要表现在同步之后表盘设置不会被应用，或者会直接初始化为最初版本。当前受到影响版本是4.22的版本，不确认这个问题是不是在之前就出现，所以上网找了一下原因，在这里记录下供大家参考。当然可能过几个版本之后，Garmin修复了错误，那就不用看本文了。<span id="more-4141"></span></p>
<p>这个表盘设置同步失败的问题，其实并不是最近才出现的，三个月之前，就已经有人在社区中反馈类似的问题。开发者们发现了大量多用户反馈报错，后来才发现应该是Garmin软件本身的问题。当时的BUG主要体现在，<span style="color: #ff0000;">如果表盘设定中有针对日期的设定，如果你没有进行设置的话，同步之后就会导致配置文件失败</span>，然后就没有然后了。</p>
<p>只是没想到的是，这次的Garmin软件更新，直接把这个BUG扩大化了，所有的表盘几乎全部被波及。如果你没有修改过表盘设置，其实你感觉不到，但是如果你一旦修改了设置，或者更新了新版本的表盘，然后恭喜你，你就只能使用初始化表盘而且无法修改配置了。</p>
<p>而我们知道，Garmin Connect是必装的软件，所以这个BUG看似在系统更新前是无解了，不过聪明的网友似乎又找到了其他的办法。</p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="garmin2app" src="https://axmemo.com/wp-content/uploads/2019/08/garmin2app.jpg" alt="garmin2app" width="625" height="252" border="0" /></p>
<p>其实你可以在应用商店中找到多个Garmin的APP，原本我们只要用左边这个就可以了，但是不知道为什么Garmin又搞了右边那个出来，而右边那个仅仅具备商店的功能而已。不过这就刚好成为了我们的备选之策，<span style="color: #ff0000;">现在如果通过右边那个APP来同步表盘设置，是OK的！</span></p>
<p>好了，今天的文章就写到这里，其实用一句话就能讲清楚的事情，哈哈！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/solve-garmin-watchface-sync-error.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Chrome浏览器插件推荐</title>
		<link>https://axmemo.com/internet/chrome-extensions-recommendation.html</link>
					<comments>https://axmemo.com/internet/chrome-extensions-recommendation.html#comments</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Thu, 28 Feb 2019 01:59:50 +0000</pubDate>
				<category><![CDATA[互联网相关]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[插件]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=4056</guid>

					<description><![CDATA[以前我一直用360极速或者QQ这种混合内核的浏览器，主要是因为国内某些网站对Chrome的兼容性不好，随着这几年网站的优化以及之前的银行网站功能逐步由手机取代，因此大概从半年前开始，我将我的主力服务器彻底迁移到了Chrome，这多少也解决了一些我对于国内软件在隐私保护方面的顾虑，今天给大家介绍几款推荐的插件。 首先要说一点的是，Chrome浏览器的内存消耗不小，不过现在内存基本上已经不再是我们所要关注的问题了，而另一方面，Chrome的引擎的确是快的可以，这点在对比使用中的确可以明显感觉出来。虽然后面有出更强劲的Firefox引擎，但是从使用习惯以及账号管理等方面考虑，我依然还是继续选择使用Chrome。 插件的使用，可以给Chrome带来更多的功能，但是同样会影响系统启动以及页面加载的性能，因此强迫症患者自然会选择尽量少和优质的插件方案，对于一些日常不是经常使用的插件，我基本上会选择删除或者禁用，等需要的时候再重新安装就好了。 现在我的Chrome只加载了下面这些插件： Infinity New Tab：最好用的启动页面，强烈推荐 Proxy SwitchyOmega：啥都别说了，你懂的… uBlock Origin：一个更轻量化的广告拦截插件 Yet Another Drag and Go：拖放插件基本功能都差不多 什么值得买：这个完全是为了买买买… Pagespeed：网站响应分析插件（平时禁用） Bark：就是前两天我说的对iOS推送的插件（平时禁用） 原来还装过User-Agent插件，不过现在可以通过开发工具来自定义终端就可以模拟了，所以这个插件现在就没装。至于油猴脚本之类，个人觉得基本上并不是那么必须，所以也就没有加入，用好Chrome内置的开发工具能做很多事情。 好了，找个时间来清理一下你的Chrome插件吧！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="chromeext" src="https://axmemo.com/wp-content/uploads/2019/02/chromeext.jpg" alt="chromeext" width="625" height="252" border="0" /></p>
<p>以前我一直用360极速或者QQ这种混合内核的浏览器，主要是因为国内某些网站对Chrome的兼容性不好，随着这几年网站的优化以及之前的银行网站功能逐步由手机取代，因此大概从半年前开始，我将我的主力服务器彻底迁移到了Chrome，这多少也解决了一些我对于国内软件在隐私保护方面的顾虑，今天给大家介绍几款推荐的插件。<span id="more-4056"></span></p>
<p>首先要说一点的是，Chrome浏览器的内存消耗不小，不过现在内存基本上已经不再是我们所要关注的问题了，而另一方面，Chrome的引擎的确是快的可以，这点在对比使用中的确可以明显感觉出来。虽然后面有出更强劲的Firefox引擎，但是从使用习惯以及账号管理等方面考虑，我依然还是继续选择使用Chrome。</p>
<p>插件的使用，可以给Chrome带来更多的功能，但是同样会影响系统启动以及页面加载的性能，因此强迫症患者自然会选择尽量少和优质的插件方案，对于一些日常不是经常使用的插件，我基本上会选择删除或者禁用，等需要的时候再重新安装就好了。</p>
<p>现在我的Chrome只加载了下面这些插件：</p>
<ul>
<li>Infinity New Tab：最好用的启动页面，强烈推荐</li>
<li>Proxy SwitchyOmega：啥都别说了，你懂的…</li>
<li>uBlock Origin：一个更轻量化的广告拦截插件</li>
<li>Yet Another Drag and Go：拖放插件基本功能都差不多</li>
<li>什么值得买：这个完全是为了买买买…</li>
<li>Pagespeed：网站响应分析插件（平时禁用）</li>
<li>Bark：就是前两天我说的对iOS推送的插件（平时禁用）</li>
</ul>
<p>原来还装过User-Agent插件，不过现在可以通过开发工具来自定义终端就可以模拟了，所以这个插件现在就没装。至于油猴脚本之类，个人觉得基本上并不是那么必须，所以也就没有加入，用好Chrome内置的开发工具能做很多事情。</p>
<p>好了，找个时间来清理一下你的Chrome插件吧！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/internet/chrome-extensions-recommendation.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>微信分享带缩略图的小技巧</title>
		<link>https://axmemo.com/internet/share-web-in-wechat-with-feature-image.html</link>
					<comments>https://axmemo.com/internet/share-web-in-wechat-with-feature-image.html#comments</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Fri, 22 Feb 2019 14:32:16 +0000</pubDate>
				<category><![CDATA[互联网相关]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[微信]]></category>
		<category><![CDATA[缩略图]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=4018</guid>

					<description><![CDATA[大家在微信朋友圈中看到分享网页内容的时候，都会在边上有一个缩略图，这虽然看起来是一个很简单的东西，但实际上实现起来并不容易。最早的时候，微信会自动获取页面中第一个大于300像素的图片，自行缩放比例以后作为缩略图，但是去年的时候，微信上了新的JS-SDK来规范分享图片的定义。如果你是一个在国内正常备案的网站，那么去申请SDK认证就可以，但是像我这种主机丢在国外懒得备案什么的，就没有办法了。 如果不使用JS-SDK，在默认的情况下，你分享出来的网页的缩略图将会是一个默认的断链的图片，是不是感觉挫爆了~ 如果你只是通过Safari来分享页面，那么Open graph Metadata能帮你解决一些问题。将下面的代码加入到你的页面顶部meta定义中，然后你从Safari分享的时候，就能取到一个指定的图片了。 &#60;meta property=&#8221;og:type&#8221; content=&#8221;website&#8221; /&#62; &#60;meta property=&#8221;og:title&#8221; content=&#8221;页面标题&#8221;&#62; &#60;meta property=&#8221;og:description&#8221; content=&#8221;页面描述&#8221;&#62; &#60;meta property=&#8221;og:image&#8221; content=&#8221;https://axmemo.com/axicon.png&#8220;&#62; &#60;meta property=&#8221;og:url&#8221; content=&#8221;https://axmemo.com/&#8220;&#62; 不过因为Meta定义的局限性，只能指定固定图片，否则写代码会比较麻烦（因为你要提前去获取当前页面的特色图片），所以看来我们还需要寻找更好的解决方案。后来，我发现用QQ浏览器或者用QQ进行分享的时候，浏览器会根据页面生成一张网页缩略图放在这里，这似乎可以有一个取巧的方法。 首先，你必须从Wordpress中取到特色图片，这个应该没有太大的难度对吧，然后呢，你需要把这张图片放置到页面顶部，然后通过CSS设置成全屏宽度的正方形图片。然后，你把页面拖动到顶部的时候，再通过QQ来分享，系统就会自动截取顶部这部分页面，来生成缩略图。要说明的是，你需要在页面顶部再预留50px左右的高度，因为貌似QQ截图的时候，是扣除了顶部的一定像素高度。 我们实现了缩略图的截取和生成，但是这样对于访问者来说，太恶心了，因为顶部多了这么一个大图片。所以，我就在页面加载过程中，加入了一个自动滚动的脚本，等页面下载完成之后自动跳转到正常的顶部位置，除非用户向上拖动，才知道顶上藏了一个图片。 因为这张图片完全就是为了让QQ截图分享而使用的，所以对于其他浏览器和用户来说，这是一个没用的东西，为了避免对其他用户的影响，我在Wordpress中加入了对访问浏览器的识别，也就意味着，只有通过QQ打开这个页面的时候，才会加载这张图片，而如果你是通过微信打开，或者Safari打开，根本是看不到这张图片的，从而将对用户的影响降低到最小。 现在我通过Wordpress发完文章之后，只需要进入QQ来进行一下分享就OK了！这并不是正规的方式，所以只能说是奇技淫巧了，除此之外，貌似并没有找到更好的方法，如果有人发现更好的方法，敬请留言指教。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="wechatshare" src="https://axmemo.com/wp-content/uploads/2019/02/wechatshare.jpg" alt="wechatshare" width="625" height="252" border="0" /></p>
<p>大家在微信朋友圈中看到分享网页内容的时候，都会在边上有一个缩略图，这虽然看起来是一个很简单的东西，但实际上实现起来并不容易。最早的时候，微信会自动获取页面中第一个大于300像素的图片，自行缩放比例以后作为缩略图，但是去年的时候，微信上了新的JS-SDK来规范分享图片的定义。如果你是一个在国内正常备案的网站，那么去申请SDK认证就可以，但是像我这种主机丢在国外懒得备案什么的，就没有办法了。<span id="more-4018"></span></p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="eff01" src="https://axmemo.com/wp-content/uploads/2019/02/eff01.jpg" alt="eff01" width="625" height="252" border="0" /></p>
<p>如果不使用JS-SDK，在默认的情况下，你分享出来的网页的缩略图将会是一个默认的断链的图片，是不是感觉挫爆了~ 如果你只是通过Safari来分享页面，那么Open graph Metadata能帮你解决一些问题。将下面的代码加入到你的页面顶部meta定义中，然后你从Safari分享的时候，就能取到一个指定的图片了。</p>
<blockquote><p>&lt;meta property=&#8221;og:type&#8221; content=&#8221;website&#8221; /&gt;</p>
<p>&lt;meta property=&#8221;og:title&#8221; content=&#8221;页面标题&#8221;&gt;</p>
<p>&lt;meta property=&#8221;og:description&#8221; content=&#8221;页面描述&#8221;&gt;</p>
<p>&lt;meta property=&#8221;og:image&#8221; content=&#8221;<a href="https://axmemo.com/axicon.png">https://axmemo.com/axicon.png</a>&#8220;&gt;</p>
<p>&lt;meta property=&#8221;og:url&#8221; content=&#8221;<a href="https://axmemo.com/">https://axmemo.com/</a>&#8220;&gt;</p></blockquote>
<p>不过因为Meta定义的局限性，只能指定固定图片，否则写代码会比较麻烦（因为你要提前去获取当前页面的特色图片），所以看来我们还需要寻找更好的解决方案。后来，我发现用QQ浏览器或者用QQ进行分享的时候，浏览器会根据页面生成一张网页缩略图放在这里，这似乎可以有一个取巧的方法。</p>
<p>首先，你必须从Wordpress中取到特色图片，这个应该没有太大的难度对吧，然后呢，你需要把这张图片放置到页面顶部，然后通过CSS设置成全屏宽度的正方形图片。然后，你把页面拖动到顶部的时候，再通过QQ来分享，系统就会自动截取顶部这部分页面，来生成缩略图。要说明的是，你需要在页面顶部再预留50px左右的高度，因为貌似QQ截图的时候，是扣除了顶部的一定像素高度。</p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="showit" src="https://axmemo.com/wp-content/uploads/2019/02/showit.jpg" alt="showit" width="609" height="392" border="0" /></p>
<p>我们实现了缩略图的截取和生成，但是这样对于访问者来说，太恶心了，因为顶部多了这么一个大图片。所以，我就在页面加载过程中，加入了一个自动滚动的脚本，等页面下载完成之后自动跳转到正常的顶部位置，除非用户向上拖动，才知道顶上藏了一个图片。</p>
<p>因为这张图片完全就是为了让QQ截图分享而使用的，所以对于其他浏览器和用户来说，这是一个没用的东西，为了避免对其他用户的影响，我在Wordpress中加入了对访问浏览器的识别，也就意味着，只有通过QQ打开这个页面的时候，才会加载这张图片，而如果你是通过微信打开，或者Safari打开，根本是看不到这张图片的，从而将对用户的影响降低到最小。</p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="eff02" src="https://axmemo.com/wp-content/uploads/2019/02/eff02.jpg" alt="eff02" width="625" height="252" border="0" /></p>
<p>现在我通过Wordpress发完文章之后，只需要进入QQ来进行一下分享就OK了！这并不是正规的方式，所以只能说是奇技淫巧了，除此之外，貌似并没有找到更好的方法，如果有人发现更好的方法，敬请留言指教。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/internet/share-web-in-wechat-with-feature-image.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Bark：实现私有iOS推送服务</title>
		<link>https://axmemo.com/technology/use-bark-to-push-ios-notification.html</link>
					<comments>https://axmemo.com/technology/use-bark-to-push-ios-notification.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Fri, 22 Feb 2019 01:49:15 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[移动终端]]></category>
		<category><![CDATA[bark]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[消息推送]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=4011</guid>

					<description><![CDATA[现在如果你想在电脑和手机之间传送一些文本消息，绝大多数你会选择用微信的文件传输助手，我一直在寻找一种更加轻便快捷的消息传递方式，而通过iOS的推送服务似乎是其中最方便快捷的方式，可是很久以来都没有找到特别合适的软件。虽然其实类似的软件的确有一些，但是要么不稳定，要么应用服务太复杂了，直到最近几天我看到了这个软件。 Bark是一个很简单的软件，它的作用就是把你的文本消息以iOS的标准的通知方式推送到你的手机上，看起来这是一个很不起眼的作用，但最大的优势在于，这个服务的服务端是可以自行搭建，而且整个项目都是在GitHub上面开源的。这也就意味着说，你可以放心你传递的消息仅存放在自己的服务器和Apple的推送服务器上，而且你可以有效的管控服务的稳定性。 现在你可以在App Store里面找到这个叫做Bark的程序，安装完成之后，其实你就可以进行推送了，软件的开发者提供了一个位于北京腾讯云的服务器提供消息中转服务，使用方式很简单，你直接在地址栏输入相应的地址就可以推送消息了，同时爱好者也提供了Chrome扩展，这是一个更方便的使用方式。 简单的应用就不说了，下面我们来说说如何搭建自己的Bark推送服务器。作者在个人网站上提供了详细的安装说明，你只需要根据自己的服务器版本获取对应的服务器应用就可以了，安装完成以后，通过命令行可以将该服务运行到指定的端口上，例如： ./Bark_linux_amd64 -ip=0.0.0.0 -port=10080 是不是看着http连接很不爽，我们来想办法换成https连接吧，操作的方式就是在这台服务器上再部署一套Nginx服务，然后注册免费的SSL证书，先把网站的SSL连接建立起来，然后再通过配置Nginx的反向代理，将标准的443端口的请求转发到我们配置的10080端口上就可以了。完成这一步之后，你就可以在软件里面配置通过https链接了。 最后我们要做的是将这个应用做成系统服务，并进行守护，我采用的是systemd的方式来实现的，具体的操作方式大家自行搜一下就可以了，配置完成之后，将所有服务重启一次，然后确认后台查看指定的服务端口和进程正确启动，然后在手工杀一次进程看看是否正常被重新唤醒，如果一切OK，那就好了！ 由于隐私的问题，并不能把这私有的IOS推送服务器公布给大家，我把服务器部署在一台LA的CN2 GIA服务器上，响应速度还是很快的，希望本文的内容能给你带来帮助。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="bark" src="https://axmemo.com/wp-content/uploads/2019/02/bark.jpg" alt="bark" width="625" height="252" border="0" /></p>
<p>现在如果你想在电脑和手机之间传送一些文本消息，绝大多数你会选择用微信的文件传输助手，我一直在寻找一种更加轻便快捷的消息传递方式，而通过iOS的推送服务似乎是其中最方便快捷的方式，可是很久以来都没有找到特别合适的软件。虽然其实类似的软件的确有一些，但是要么不稳定，要么应用服务太复杂了，直到最近几天我看到了这个软件。<span id="more-4011"></span></p>
<p>Bark是一个很简单的软件，它的作用就是把你的文本消息以iOS的标准的通知方式推送到你的手机上，看起来这是一个很不起眼的作用，但最大的优势在于，这个服务的服务端是可以自行搭建，而且整个项目都是在<a href="https://github.com/Finb/Bark">GitHub上面开源</a>的。这也就意味着说，你可以放心你传递的消息仅存放在自己的服务器和Apple的推送服务器上，而且你可以有效的管控服务的稳定性。</p>
<p>现在你可以在App Store里面找到这个叫做<a href="https://itunes.apple.com/cn/app/bark-customed-notifications/id1403753865">Bark</a>的程序，安装完成之后，其实你就可以进行推送了，软件的开发者提供了一个位于北京腾讯云的服务器提供消息中转服务，使用方式很简单，你直接在地址栏输入相应的地址就可以推送消息了，同时爱好者也提供了<a href="https://chrome.google.com/webstore/detail/bark/pmlkbdbpglkgbgopghdcmohdcmladeii">Chrome扩展</a>，这是一个更方便的使用方式。</p>
<p>简单的应用就不说了，下面我们来说说如何搭建自己的Bark推送服务器。作者在个人网站上提供了详细的<a href="https://day.app/2018/06/bark-server-document/">安装说明</a>，你只需要根据自己的服务器版本获取对应的服务器应用就可以了，安装完成以后，通过命令行可以将该服务运行到指定的端口上，例如：</p>
<blockquote><p>./Bark_linux_amd64 -ip=0.0.0.0 -port=10080</p></blockquote>
<p>是不是看着http连接很不爽，我们来想办法换成https连接吧，操作的方式就是在这台服务器上再部署一套Nginx服务，然后注册免费的SSL证书，先把网站的SSL连接建立起来，然后再通过配置Nginx的反向代理，将标准的443端口的请求转发到我们配置的10080端口上就可以了。完成这一步之后，你就可以在软件里面配置通过https链接了。</p>
<p>最后我们要做的是将这个应用做成系统服务，并进行守护，我采用的是systemd的方式来实现的，具体的操作方式大家自行搜一下就可以了，配置完成之后，将所有服务重启一次，然后确认后台查看指定的服务端口和进程正确启动，然后在手工杀一次进程看看是否正常被重新唤醒，如果一切OK，那就好了！</p>
<p>由于隐私的问题，并不能把这私有的IOS推送服务器公布给大家，我把服务器部署在一台LA的CN2 GIA服务器上，响应速度还是很快的，希望本文的内容能给你带来帮助。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/use-bark-to-push-ios-notification.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>iOS中GPS被持续唤醒的问题</title>
		<link>https://axmemo.com/technology/ios-gps-be-wake-up-frequently.html</link>
					<comments>https://axmemo.com/technology/ios-gps-be-wake-up-frequently.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Wed, 13 Feb 2019 01:52:09 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[移动终端]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[唤醒]]></category>
		<category><![CDATA[运动校正和距离]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3997</guid>

					<description><![CDATA[虽然这篇文章的篇幅不长，但这是由两次DFU惨痛代价所换回来的。昨天早上的时候，我装了一个配置文件更新，后来重启以后就发现系统的GPS被持续唤醒，后来删除了配置文件，重启以及硬重启之后都没有将该问题解决，于是开始了我的漫长折腾之旅。 系统出现的症状，就是GPS被持续的频繁调用，这一点可以由系统左上角的图标提示所看出来，这个GPS图标功能默认在系统中是关闭的，你可以在设置中找到并打开它。 后来我翻看了之前的系统截图，发现貌似这个问题可能并不是由早上的配置文件更新所引起的，而是最近就出现了有一段时间了。不过在去年底的时候，该现象并未发生，我核对了一下近期的IOS更新，确认应该不是由某个系统系统更新导致。 针对GPS图标的显示说明，系统里面给出了上面的说明，根据这个说明，我们从系统中查询到近期唤起GPS的是“运动校正和距离”这个功能模块，而且后面通过实践也证明，只要关闭这个功能模块之后，这个问题就不见了。 难道这是一个系统BUG？我找了一台其他人的手机来看，虽然同样打开这个功能，但是并没有出现我手机上的现象。那么，这个“运动校正和距离”到底是干嘛用的呢？我在网上查询了一大圈，大致的说明是，这个功能是用于运动相关的，某些时候，和Apple Watch会产生关联效应，不过作为穷逼的我，并没有Apple Watch啊… 为了彻底排查是否是系统软件本身或者是硬件原因所导致，我进行了DFU操作，万幸的是，DFU之后这个现象就消失了，然后我挨个的装回软件并进行初始化，突然，这个症状又出现了，看来，是某个傻逼软件导致的，而这个傻逼软件肯定是调用了系统的运动数据，这么以来目标很快就锁定了，就是小米运动这个软件没错。 不过悲剧的是，就算是我禁用这个软件的调用权限，或者是删除这个软件，然后进行重启或者硬重启，这个问题一旦出现，就无法进行修复。我心中千万匹草泥马狂奔而过，所以，我只能默默的再进行了一次DFU… 最终，我终于在一个Apple网站的讨论帖中寻找到了大致的答案，虽然不是官方的解答但遇到的情况和推论基本上还算合理： 就是某些应用程序一旦要求访问运动和健身数据，就会发起一个运动校准循环，在我这里是MiFit这个程序，而网友发现Runtastic也有类似的情况发生。所体现出来的现象，就是左上角出现空心的箭头，并且间断随机的会出现GPS调用和校准操作，而这个循环无法被终止，即便是你重置系统GPS设置也没意义…唯一的办法只有重装iOS，但是该网友也说，这个现象仅出现在iPhoneX上，因为我手上没有其他设备，所以也无法进行测试了。 当然，你也可以关闭顶部的GPS图标显示，来做到眼不见心不烦，但是毋庸置疑的是，这样的循环调用，肯定会给手机带来额外的电池消耗，而这样的消耗是毫无意义的… 好吧，折腾了一个晚上累死了，希望能给大家带来帮助。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="iphonegps" src="https://axmemo.com/wp-content/uploads/2019/02/iphonegps.jpg" alt="iphonegps" width="625" height="252" border="0" /></p>
<p>虽然这篇文章的篇幅不长，但这是由两次DFU惨痛代价所换回来的。昨天早上的时候，我装了一个配置文件更新，后来重启以后就发现系统的GPS被持续唤醒，后来删除了配置文件，重启以及硬重启之后都没有将该问题解决，于是开始了我的漫长折腾之旅。<span id="more-3997"></span></p>
<p>系统出现的症状，就是GPS被持续的频繁调用，这一点可以由系统左上角的图标提示所看出来，这个GPS图标功能默认在系统中是关闭的，你可以在设置中找到并打开它。</p>
<p>后来我翻看了之前的系统截图，发现貌似这个问题可能并不是由早上的配置文件更新所引起的，而是最近就出现了有一段时间了。不过在去年底的时候，该现象并未发生，我核对了一下近期的IOS更新，确认应该不是由某个系统系统更新导致。</p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="info" src="https://axmemo.com/wp-content/uploads/2019/02/info.jpg" alt="info" width="625" height="252" border="0" /></p>
<p>针对GPS图标的显示说明，系统里面给出了上面的说明，根据这个说明，我们从系统中查询到近期唤起GPS的是“运动校正和距离”这个功能模块，而且后面通过实践也证明，只要关闭这个功能模块之后，这个问题就不见了。</p>
<p>难道这是一个系统BUG？我找了一台其他人的手机来看，虽然同样打开这个功能，但是并没有出现我手机上的现象。那么，这个“运动校正和距离”到底是干嘛用的呢？我在网上查询了一大圈，大致的说明是，这个功能是用于运动相关的，某些时候，和Apple Watch会产生关联效应，不过作为穷逼的我，并没有Apple Watch啊…</p>
<p>为了彻底排查是否是系统软件本身或者是硬件原因所导致，我进行了DFU操作，万幸的是，DFU之后这个现象就消失了，然后我挨个的装回软件并进行初始化，突然，这个症状又出现了，看来，是某个傻逼软件导致的，而这个傻逼软件肯定是调用了系统的运动数据，这么以来目标很快就锁定了，就是小米运动这个软件没错。</p>
<p>不过悲剧的是，就算是我禁用这个软件的调用权限，或者是删除这个软件，然后进行重启或者硬重启，这个问题一旦出现，就无法进行修复。我心中千万匹草泥马狂奔而过，所以，我只能默默的再进行了一次DFU…</p>
<p>最终，我终于在一个Apple网站的<a href="https://discussions.apple.com/thread/8195564">讨论帖</a>中寻找到了大致的答案，虽然不是官方的解答但遇到的情况和推论基本上还算合理：</p>
<p>就是某些应用程序一旦要求访问运动和健身数据，就会发起一个运动校准循环，在我这里是MiFit这个程序，而网友发现Runtastic也有类似的情况发生。所体现出来的现象，就是左上角出现空心的箭头，并且间断随机的会出现GPS调用和校准操作，而这个循环无法被终止，即便是你重置系统GPS设置也没意义…唯一的办法只有重装iOS，但是该网友也说，这个现象仅出现在iPhoneX上，因为我手上没有其他设备，所以也无法进行测试了。</p>
<p>当然，你也可以关闭顶部的GPS图标显示，来做到眼不见心不烦，但是毋庸置疑的是，这样的循环调用，肯定会给手机带来额外的电池消耗，而这样的消耗是毫无意义的…</p>
<p>好吧，折腾了一个晚上累死了，希望能给大家带来帮助。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/ios-gps-be-wake-up-frequently.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>如何在Win10下聚合网卡带宽</title>
		<link>https://axmemo.com/technology/how-to-combine-network-in-win-10.html</link>
					<comments>https://axmemo.com/technology/how-to-combine-network-in-win-10.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Tue, 31 Jul 2018 04:32:52 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[Win10]]></category>
		<category><![CDATA[带宽聚合]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3878</guid>

					<description><![CDATA[由于公司接入了多条网络链路以确保网络的稳定性，所以我就盘算着如何能把网络资源的带宽使用发挥到极致，于是就有了这篇文章。首先，你需要有两块网卡，现在有一些高阶主板是自带两块Intel网卡的，这种情况下，直接用Intel的网卡驱动就可以实现带宽的绑定。而更多时候，你可以会选择外接一块USB网卡。 我的选择是一块网卡接入有线网络，另外买了一块AC的USB网卡来接入无线网络，这样就算一路断开了另外一条线路依然可以保持正常运行。首先，我参阅了网上关于用PowerShell来建立网卡链路聚合的文章，但是，没操作几步就报错了。后来到网上查了一下，原来这个功能只在某个版本的Win10中出现过，后来微软认为这个功能应该是服务器版本才有的功能，所以就将他永久的封禁了。再后来，我又找到了第二个方法，并且测试成功，所以和大家分享。 简单的来说，就是来设置“接口跃点数（Interface Metric）”，具体的设置位置，就在你的网络和共享中心里，你点击网卡后选择属性。也就是平时手工设置IP地址的那个地方。 选择IPV4，点击属性，就来到了平时设置IP地址的地方，这时候点击右下方的“高级”，然后在弹出页面最底部的接口跃点数的那个地方，把自动属性关闭，然后输入一个数值即可，一般建议有线网络输入10，无线网络输入20。 千万别搞错，我的意思不是让你两块网卡输入不同的值，最关键的来了，为了实现自动均衡，在这里要输入一样的数字，然后就可以了。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="netspeed" src="https://axmemo.com/wp-content/uploads/2018/07/netspeed.jpg" alt="netspeed" width="625" height="252" border="0" /></p>
<p>由于公司接入了多条网络链路以确保网络的稳定性，所以我就盘算着如何能把网络资源的带宽使用发挥到极致，于是就有了这篇文章。首先，你需要有两块网卡，现在有一些高阶主板是自带两块Intel网卡的，这种情况下，直接用Intel的网卡驱动就可以实现带宽的绑定。而更多时候，你可以会选择外接一块USB网卡。<span id="more-3878"></span></p>
<p>我的选择是一块网卡接入有线网络，另外买了一块AC的USB网卡来接入无线网络，这样就算一路断开了另外一条线路依然可以保持正常运行。首先，我参阅了网上关于用PowerShell来建立网卡链路聚合的文章，但是，没操作几步就报错了。后来到网上查了一下，原来这个功能只在某个版本的Win10中出现过，后来微软认为这个功能应该是服务器版本才有的功能，所以就将他永久的封禁了。再后来，我又找到了第二个方法，并且测试成功，所以和大家分享。</p>
<p>简单的来说，就是来设置“接口跃点数（Interface Metric）”，具体的设置位置，就在你的网络和共享中心里，你点击网卡后选择属性。也就是平时手工设置IP地址的那个地方。</p>
<p>选择IPV4，点击属性，就来到了平时设置IP地址的地方，这时候点击右下方的“高级”，然后在弹出页面最底部的接口跃点数的那个地方，把自动属性关闭，然后输入一个数值即可，一般建议有线网络输入10，无线网络输入20。</p>
<p>千万别搞错，我的意思不是让你两块网卡输入不同的值，<span style="color: #ff0000;"><strong>最关键的来了，为了实现自动均衡，在这里要输入一样的数字，然后就可以了。</strong></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/how-to-combine-network-in-win-10.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>如何禁用Windows更新驱动</title>
		<link>https://axmemo.com/technology/disable-windows-update-drivers.html</link>
					<comments>https://axmemo.com/technology/disable-windows-update-drivers.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Fri, 09 Feb 2018 04:35:43 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[硬件设备]]></category>
		<category><![CDATA[自动更新]]></category>
		<category><![CDATA[驱动]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3790</guid>

					<description><![CDATA[今天安装完X240的新触摸板之后，发现系统自动更新会把驱动程序给升级掉了，后果就是直接按键不可用。所以，只好去网上找一下如何禁用系统自动更新驱动程序。 首先，我们先说简单的方式：点击&#8221;我的电脑&#8221;；右键选择“属性&#8221;；选择&#8221;高级系统设置&#8221;；选择”硬件“分页，点击下方”设备安装设置“；选择”否“，就可以了。 当然，你也可以选择更加专业的方式：在命令行输入gpedit.msc，运行组策略编辑器；选择”计算机配置-管理模板-系统-Internet通信管理“；选择”关闭Windows更新设备驱动程序搜索“。启用该组策略，即可禁止自动更新驱动。 还有一种方式就是直接修改注册表，位于：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching 找到编辑器右侧有一个叫 SearchOrderConfig 键值，其值默认为 “1”，如果要禁用自动更新驱动，我们需要将其值改为“0”。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="driversupdate" src="https://axmemo.com/wp-content/uploads/2018/02/driversupdate.jpg" alt="driversupdate" width="625" height="252" border="0" /></p>
<p>今天安装完X240的新触摸板之后，发现系统自动更新会把驱动程序给升级掉了，后果就是直接按键不可用。所以，只好去网上找一下如何禁用系统自动更新驱动程序。</p>
<p>首先，我们先说简单的方式：点击&#8221;我的电脑&#8221;；右键选择“属性&#8221;；选择&#8221;高级系统设置&#8221;；选择”硬件“分页，点击下方”设备安装设置“；选择”否“，就可以了。<span id="more-3790"></span></p>
<p>当然，你也可以选择更加专业的方式：在命令行输入gpedit.msc，运行组策略编辑器；选择”计算机配置-管理模板-系统-Internet通信管理“；选择”关闭Windows更新设备驱动程序搜索“。启用该组策略，即可禁止自动更新驱动。</p>
<p>还有一种方式就是直接修改注册表，位于：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching</p>
<p>找到编辑器右侧有一个叫 SearchOrderConfig 键值，其值默认为 “1”，如果要禁用自动更新驱动，我们需要将其值改为“0”。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/disable-windows-update-drivers.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>用KeyCDN给WordPress加速</title>
		<link>https://axmemo.com/internet/enable-keycdn-for-wordpress.html</link>
					<comments>https://axmemo.com/internet/enable-keycdn-for-wordpress.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Mon, 05 Feb 2018 01:08:51 +0000</pubDate>
				<category><![CDATA[互联网相关]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[keyCDN]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3773</guid>

					<description><![CDATA[昨天晚上在WordPress后台的时候，突然看到一个叫做CDN Enabler的插件，点开一看，原来是一家叫做KeyCDN公司做的插件，取了这么一个含糊的名字，难怪我莫名其妙装上了，这也算是一种不错的营销方式吧！既然这样，不如就来看看怎么用好了！ 其实，国内也有很多CDN的服务商，比如：阿里云、七牛云什么的，不过由于政策监管的关系，这些网站无一例外的需要进行ICP备案，我这个域名一直放在国外，所以自然就没有进行 备案了，这个叫做KeyCDN的网站在自己网站上吹的各种屌，我们况且试试看好了。 一、注册KeyCDN账户 这个就不用解释了，大家按部就班注册就可以了 二、添加Zone 登陆到KeyCDN的后台，在Zones的菜单下，新增一个网站即可。一般默认采用pull模式就可以。设置完成之后，你就可以在后台看到一个叫做 axmemo-abb7.kxcdn.com 的网站。接下来系统会进行缓存操作。如果你的网站是http模式访问的，那么等缓存完成之后，你就可以直接通过浏览器访问这个地址了。 三、添加Zonealiases 在这里我们要对之前申请到的zone增加别名，比如新增一个cdn.axmemo.com 的CNAME解析，指向到前面申请的那个 axmemo-abb7.kxcdn.com 的网站上面。这个操作需要在你的DNS服务器上进行操作，至于在KeyCDN上的操作，只要填写以下就可以了。等DNS生效之后，你通过命令行ping一下，看到跳转就没有问题了。这时你可以用cdn.axmemo.com 来进行网站的访问。当前前面这一切都是基于你采用的是http的方式访问。如果你和我一样使用了lecsencrypt的证书，那么你同样要为你的CDN网站也进行相应的SSL配置，使之支持https访问请求。 四、增加https支持 这时候我们要重新回到Zones设置的地方，点击之前我们配置好的Zone，然后选择Edie，然后再打开Advanced 模式，我们这时候就可以看到SSL选项了。这里，我们要选择 lecsencrypt模式，就是现在网站用的这个免费ssl证书的模式（使用lecsencrypt证书必须启用别名模式，也就是前面的第三步操作，否则证书会被判定不安全）。等设置完成之后，进行保存，之后系统会自动再进行一次配置操作，等待它完成就可以了。等SSL证书生成完成之后，你就可以通过 https://cdn.axmemo.com 来进行访问了，顺便看一下证书内容是否正常。 五、配置Wordpress后台 在WordPress后台启用CDN Enabler插件。然后在CDN URL里面输入之前配置的别名地址，也就是，cdn.axmemo.com，然后单选框激活HTTPS支持。至于下面的两个框，API KEY你可以在keydns后台的Account Setting 下面的 Authentication Settings 里面可以找到，你选择刷新一下API Key就可以获取了。而Zone ID，可以在之前的Zones管理中找到，保存设置就可以了。 六、验证系统是否正常运行 在激活CDN插件之后，你可以访问一下网站的首页，然后查看一下源代码，你就会看到在头文件和很多图片调用的地方，已经改成了CDN地址，这样就说明你的CDN已经完全生效了。 经过上面这么一番操作，终于完成了CDN的配置操作并且正常运行了，但是最后我并没有选用keyCDN这家网站的服务，因为经过我的测试，这家网站到大陆的主机质量并不是特别稳定，而且在不同网络环境接入的时候，效果不是特别好。总体网络质量还不如我现在正在用的CN2线路的VPS主机，所以设置了以后反倒速度还更慢了。 不过怎么说也是折腾了大半个晚上，总要写点东西下来作为纪念的，也希望这篇文章可能对你会有所帮助，今天就写到这里，下次见！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="keycdn" src="https://axmemo.com/wp-content/uploads/2018/02/keycdn.jpg" alt="keycdn" width="625" height="252" border="0" /></p>
<p>昨天晚上在WordPress后台的时候，突然看到一个叫做CDN Enabler的插件，点开一看，原来是一家叫做KeyCDN公司做的插件，取了这么一个含糊的名字，难怪我莫名其妙装上了，这也算是一种不错的营销方式吧！既然这样，不如就来看看怎么用好了！<span id="more-3773"></span></p>
<p>其实，国内也有很多CDN的服务商，比如：阿里云、七牛云什么的，不过由于政策监管的关系，这些网站无一例外的需要进行ICP备案，我这个域名一直放在国外，所以自然就没有进行 备案了，这个叫做KeyCDN的网站在自己网站上吹的各种屌，我们况且试试看好了。</p>
<p><strong>一、注册KeyCDN账户</strong></p>
<p>这个就不用解释了，大家按部就班注册就可以了</p>
<p><strong>二、添加Zone</strong></p>
<p>登陆到KeyCDN的后台，在Zones的菜单下，新增一个网站即可。一般默认采用pull模式就可以。设置完成之后，你就可以在后台看到一个叫做 axmemo-abb7.kxcdn.com 的网站。接下来系统会进行缓存操作。如果你的网站是http模式访问的，那么等缓存完成之后，你就可以直接通过浏览器访问这个地址了。</p>
<p><strong>三、添加Zonealiases</strong></p>
<p>在这里我们要对之前申请到的zone增加别名，比如新增一个cdn.axmemo.com 的CNAME解析，指向到前面申请的那个 axmemo-abb7.kxcdn.com 的网站上面。这个操作需要在你的DNS服务器上进行操作，至于在KeyCDN上的操作，只要填写以下就可以了。等DNS生效之后，你通过命令行ping一下，看到跳转就没有问题了。这时你可以用cdn.axmemo.com 来进行网站的访问。当前前面这一切都是基于你采用的是http的方式访问。如果你和我一样使用了lecsencrypt的证书，那么你同样要为你的CDN网站也进行相应的SSL配置，使之支持https访问请求。</p>
<p><strong>四、增加https支持</strong></p>
<p>这时候我们要重新回到Zones设置的地方，点击之前我们配置好的Zone，然后选择Edie，然后再打开Advanced 模式，我们这时候就可以看到SSL选项了。这里，我们要选择 lecsencrypt模式，就是现在网站用的这个免费ssl证书的模式<span style="color: #ff0000;">（使用lecsencrypt证书必须启用别名模式，也就是前面的第三步操作，否则证书会被判定不安全）</span>。等设置完成之后，进行保存，之后系统会自动再进行一次配置操作，等待它完成就可以了。等SSL证书生成完成之后，你就可以通过 https://cdn.axmemo.com 来进行访问了，顺便看一下证书内容是否正常。</p>
<p><strong>五、配置Wordpress后台</strong></p>
<p>在WordPress后台启用CDN Enabler插件。然后在CDN URL里面输入之前配置的别名地址，也就是，cdn.axmemo.com，然后单选框激活HTTPS支持。至于下面的两个框，API KEY你可以在keydns后台的Account Setting 下面的 Authentication Settings 里面可以找到，你选择刷新一下API Key就可以获取了。而Zone ID，可以在之前的Zones管理中找到，保存设置就可以了。</p>
<p><strong>六、验证系统是否正常运行</strong></p>
<p>在激活CDN插件之后，你可以访问一下网站的首页，然后查看一下源代码，你就会看到在头文件和很多图片调用的地方，已经改成了CDN地址，这样就说明你的CDN已经完全生效了。</p>
<p>经过上面这么一番操作，终于完成了CDN的配置操作并且正常运行了，但是最后我并没有选用keyCDN这家网站的服务，因为经过我的测试，这家网站到大陆的主机质量并不是特别稳定，而且在不同网络环境接入的时候，效果不是特别好。总体网络质量还不如我现在正在用的CN2线路的VPS主机，所以设置了以后反倒速度还更慢了。</p>
<p>不过怎么说也是折腾了大半个晚上，总要写点东西下来作为纪念的，也希望这篇文章可能对你会有所帮助，今天就写到这里，下次见！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/internet/enable-keycdn-for-wordpress.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>通过禁用表情加速WordPress</title>
		<link>https://axmemo.com/technology/disable-emoji-in-wordpress.html</link>
					<comments>https://axmemo.com/technology/disable-emoji-in-wordpress.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Thu, 25 Jan 2018 05:13:12 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3748</guid>

					<description><![CDATA[之前也对自己的网站进行了几次优化，其实网页的功能代码已经被精简的差不多了，所以按理来说打开页面时间应该会蛮快，但实际使用起来还是会有些卡卡的。今天在逛网站的时候，发现了WordPress中有关emoji表情的优化，试验了一下效果很好。 简单来说，就是WordPress在头文件中，会加载一个s.w.org的站点，然后去调用其中的图片来选择文章内容以及评论中的标准emoji图标，而这样的访问请求势必会影响整体站点的加载速度，而且这个地址国内是无法访问。 解决的办法很简单，就是直接禁用emoji功能就好了，只要在当前主题的functions.php中，加入下面代码进行屏蔽就可以了。 remove_action(&#8216;admin_print_scripts&#8217;,    &#8216;print_emoji_detection_script&#8217;); remove_action(&#8216;admin_print_styles&#8217;,    &#8216;print_emoji_styles&#8217;); remove_action(&#8216;wp_head&#8217;,        &#8216;print_emoji_detection_script&#8217;,    7); remove_action(&#8216;wp_print_styles&#8217;,    &#8216;print_emoji_styles&#8217;); remove_action(&#8217;embed_head&#8217;,        &#8216;print_emoji_detection_script&#8217;); remove_filter(&#8216;the_content_feed&#8217;,    &#8216;wp_staticize_emoji&#8217;); remove_filter(&#8216;comment_text_rss&#8217;,    &#8216;wp_staticize_emoji&#8217;); remove_filter(&#8216;wp_mail&#8217;,        &#8216;wp_staticize_emoji_for_email&#8217;); add_filter( &#8217;emoji_svg_url&#8217;,        &#8216;__return_false&#8217; ); 相关技术资料，感谢水煮鱼提供整理，原始链接在：这里。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="disableemoji" src="https://axmemo.com/wp-content/uploads/2018/01/disableemoji.jpg" alt="disableemoji" width="625" height="252" border="0" /></p>
<p>之前也对自己的网站进行了几次优化，其实网页的功能代码已经被精简的差不多了，所以按理来说打开页面时间应该会蛮快，但实际使用起来还是会有些卡卡的。今天在逛网站的时候，发现了WordPress中有关emoji表情的优化，试验了一下效果很好。<span id="more-3748"></span></p>
<p>简单来说，就是WordPress在头文件中，会加载一个s.w.org的站点，然后去调用其中的图片来选择文章内容以及评论中的标准emoji图标，而这样的访问请求势必会影响整体站点的加载速度，而且这个地址国内是无法访问。</p>
<p>解决的办法很简单，就是直接禁用emoji功能就好了，只要在当前主题的functions.php中，加入下面代码进行屏蔽就可以了。</p>
<blockquote><p>remove_action(&#8216;admin_print_scripts&#8217;,    &#8216;print_emoji_detection_script&#8217;);</p>
<p>remove_action(&#8216;admin_print_styles&#8217;,    &#8216;print_emoji_styles&#8217;);</p>
<p>remove_action(&#8216;wp_head&#8217;,        &#8216;print_emoji_detection_script&#8217;,    7);</p>
<p>remove_action(&#8216;wp_print_styles&#8217;,    &#8216;print_emoji_styles&#8217;);</p>
<p>remove_action(&#8217;embed_head&#8217;,        &#8216;print_emoji_detection_script&#8217;);</p>
<p>remove_filter(&#8216;the_content_feed&#8217;,    &#8216;wp_staticize_emoji&#8217;);</p>
<p>remove_filter(&#8216;comment_text_rss&#8217;,    &#8216;wp_staticize_emoji&#8217;);</p>
<p>remove_filter(&#8216;wp_mail&#8217;,        &#8216;wp_staticize_emoji_for_email&#8217;);</p>
<p>add_filter( &#8217;emoji_svg_url&#8217;,        &#8216;__return_false&#8217; );</p></blockquote>
<p>相关技术资料，感谢水煮鱼提供整理，原始链接在：<a href="http://blog.wpjam.com/m/diable-emoji/">这里</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/disable-emoji-in-wordpress.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>解决Chrome颜色异常的问题</title>
		<link>https://axmemo.com/technology/chrome-display-color-error.html</link>
					<comments>https://axmemo.com/technology/chrome-display-color-error.html#comments</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Mon, 25 Dec 2017 02:51:41 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[chrome]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3676</guid>

					<description><![CDATA[在安装新版本的Chrome以后，不知道从哪天开始，就发现在Chrome中显示的图片颜色和平时的不一样。同样出现问题还有内置了Chrome最新内核的QQ浏览器等。一开始我以为是我自己眼睛花，后来才发现这个显示异常的问题真实存在，不过好在有万能的Google（这个网站并不存在），让我找到了解决问题的办法。 首先，我们要知道，显示器上显示的颜色可能和图片本身的颜色会有所区别，因为显示器本身会加载一个叫做颜色配置的文件，也就是ICC文件。通过这个文件来对不同批次生产的显示器个体进行微调，从而使得在显示上保持一致。一般用于进行双屏或者多屏幕使用的时候。不过话说回来，如果你用的是TN面板的显示器，再怎么调试也是那个鬼样子，多屏幕的视觉角度差异基本就让这事情成了无解。 好了，废话说了很多，还是进入正题吧，之前我的浏览器是这样子的： 大家看到，上面两个图中，IE和Chrome中显示的颜色是不同的，如果看不出来你好去看医生了，哈哈。而究其根本的问题，是因为在新版的Chrome中加载了颜色配置文件所导致的。这原本是一个高级的功能，但是在大多数时候，普通用户的颜色配置文件都是管理混乱的，所以就傻逼了…所以最好的方法就是禁用这个功能，或者把这个功能配置为一个和IE相同的标准值。下面就是配置的办法： 在Chrome的地址栏输入：chrome://flags 找到 Force color profile 的设置栏目，然后调整设置。默认的设置是Default，如果你现在浏览器显示正常呢，那就保持不动，如果不正常，就在这里选择为sRGB。 嗯，这样弄完以后就搞定了~ 希望这个小技巧能给大家带来帮助。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" class="alignnone size-full wp-image-3679" src="https://axmemo.com/wp-content/uploads/2017/12/chromeX.jpg" alt="" width="570" height="230" srcset="https://axmemo.com/wp-content/uploads/2017/12/chromeX.jpg 570w, https://axmemo.com/wp-content/uploads/2017/12/chromeX-300x121.jpg 300w" sizes="(max-width: 570px) 100vw, 570px" /></p>
<p>在安装新版本的Chrome以后，不知道从哪天开始，就发现在Chrome中显示的图片颜色和平时的不一样。同样出现问题还有内置了Chrome最新内核的QQ浏览器等。一开始我以为是我自己眼睛花，后来才发现这个显示异常的问题真实存在，不过好在有万能的Google（这个网站并不存在），让我找到了解决问题的办法。<span id="more-3676"></span></p>
<p>首先，我们要知道，显示器上显示的颜色可能和图片本身的颜色会有所区别，因为显示器本身会加载一个叫做颜色配置的文件，也就是ICC文件。通过这个文件来对不同批次生产的显示器个体进行微调，从而使得在显示上保持一致。一般用于进行双屏或者多屏幕使用的时候。不过话说回来，如果你用的是TN面板的显示器，再怎么调试也是那个鬼样子，多屏幕的视觉角度差异基本就让这事情成了无解。</p>
<p>好了，废话说了很多，还是进入正题吧，之前我的浏览器是这样子的：</p>
<p><img decoding="async" loading="lazy" class="alignnone size-full wp-image-3680" src="https://axmemo.com/wp-content/uploads/2017/12/errorX.jpg" alt="" width="570" height="427" srcset="https://axmemo.com/wp-content/uploads/2017/12/errorX.jpg 570w, https://axmemo.com/wp-content/uploads/2017/12/errorX-300x225.jpg 300w" sizes="(max-width: 570px) 100vw, 570px" /></p>
<p>大家看到，上面两个图中，IE和Chrome中显示的颜色是不同的，如果看不出来你好去看医生了，哈哈。而究其根本的问题，是因为在新版的Chrome中加载了颜色配置文件所导致的。这原本是一个高级的功能，但是在大多数时候，普通用户的颜色配置文件都是管理混乱的，所以就傻逼了…所以最好的方法就是禁用这个功能，或者把这个功能配置为一个和IE相同的标准值。下面就是配置的办法：</p>
<ul>
<li>在Chrome的地址栏输入：chrome://flags</li>
<li>找到 Force color profile 的设置栏目，然后调整设置。默认的设置是Default，如果你现在浏览器显示正常呢，那就保持不动，如果不正常，就在这里选择为sRGB。</li>
</ul>
<p>嗯，这样弄完以后就搞定了~ 希望这个小技巧能给大家带来帮助。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/chrome-display-color-error.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>IOS系统的中文联系人排序</title>
		<link>https://axmemo.com/technology/sort-cn-contact-in-en-interface.html</link>
					<comments>https://axmemo.com/technology/sort-cn-contact-in-en-interface.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Mon, 18 Dec 2017 01:16:45 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3670</guid>

					<description><![CDATA[貌似从大学使用Windows 2000开始，基本上都是使用英文系统，这个习惯一直延续到了后来使用手机。再加上iPhone 初代发布的时候根本就没有中文好吗！所以一路过来都是在使用着手机的英文界面（你说我装逼，好！我认了。）即便作为一个大学四级英语涉险过关的差等生，使用英文界面也不会太多问题，不过有一个问题比较头痛，就是在英文界面的时候，联系人的排序会按照英文的方式来进行。所有的中文联系人都会被整理到#排序下面，这样就尴尬了。 其实，如果你可以把手机越狱，这个问题就好解决了，我大概在2009年的时候（那时候还是iOS 2.2.1）就找到了那个排序文件，如下： /System/Library/Frameworks/AddressBook.framework/English.lproj/ABContactSections.plist 后来就算是iOS改版了再多次，你只要按图索骥的找到这个目录就可以的，把英文目录下的这个plist文件，用中文目录下的同名文件进行覆盖，然后切换两次语言就可以生效了。这个办法我一直用到&#8230;iOS 9.3.2 再后来，就换了一台手机，iPhone X没错，这下没法越狱了，傻逼了！所以在很长一段时间我都在用中文界面，然后前两天又心血来潮想看看是不是又有新的招数，哎哟不错，还真的有。其实，在iOS的联系人字段中，有两个附加字段，叫做Phonetic First/Last Name，翻译过来我也不知道怎么说，叫做语音联系人么？还是联系人的发音？反正就是这个字段就对了，只要在这个字段中输入拼音，就可以在英文界面下，把联系人分组到相应的英文字母排序下面。 好了，现在我们知道了方法，手工来弄么？那几百个联系人不是要弄死了，还好，我们有工具！在应用商店里面，有一款叫做 Phonetic Contacts的应用软件，就是转么用来为中文联系人添加这个字段的，而且还支持缩写功能方便你进行搜索。不过我觉得那个缩写不美观，所以就没有加了。下载以后，直接运行一下，几百个联系人大概就30秒不到的时间就全部添加好了辅助字段。如果你弄错了，那也没关系，在应用里面双击一下，可以全部清理掉重来。 不过在做这些操作前，个人还是建议你先备份一次联系人，以防万一。然后，就OK了~ 虽然现在不能越狱，但是有一个比较方便的搜索联系人的方法，就是在任何界面下拉呼出spotlight，然后输入联系人名称的前几个字，系统会自动智能匹配出联系人，如果你平时联系的多，这里推荐的联系人还是比较精准的。这也就当是系统还没有Kuaidial之前的妥协方案吧。 最后，其实我最近兴起的真正原因，是我突然一天发现在我的笔记本上，Finder变成了“访达”，使我毅然决定要切回英文界面！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="contacts" src="https://axmemo.com/wp-content/uploads/2017/12/contacts.jpg" alt="contacts" width="570" height="230" border="0" /></p>
<p>貌似从大学使用Windows 2000开始，基本上都是使用英文系统，这个习惯一直延续到了后来使用手机。再加上iPhone 初代发布的时候根本就没有中文好吗！所以一路过来都是在使用着手机的英文界面（你说我装逼，好！我认了。）即便作为一个大学四级英语涉险过关的差等生，使用英文界面也不会太多问题，不过有一个问题比较头痛，就是在英文界面的时候，联系人的排序会按照英文的方式来进行。所有的中文联系人都会被整理到#排序下面，这样就尴尬了。<span id="more-3670"></span></p>
<p>其实，如果你可以把手机越狱，这个问题就好解决了，我大概在2009年的时候（那时候还是iOS 2.2.1）就找到了那个排序文件，如下：</p>
<p>/System/Library/Frameworks/AddressBook.framework/English.lproj/ABContactSections.plist</p>
<p>后来就算是iOS改版了再多次，你只要按图索骥的找到这个目录就可以的，把英文目录下的这个plist文件，用中文目录下的同名文件进行覆盖，然后切换两次语言就可以生效了。这个办法我一直用到&#8230;iOS 9.3.2</p>
<p>再后来，就换了一台手机，iPhone X没错，这下没法越狱了，傻逼了！所以在很长一段时间我都在用中文界面，然后前两天又心血来潮想看看是不是又有新的招数，哎哟不错，还真的有。其实，在iOS的联系人字段中，有两个附加字段，叫做Phonetic First/Last Name，翻译过来我也不知道怎么说，叫做语音联系人么？还是联系人的发音？反正就是这个字段就对了，只要在这个字段中输入拼音，就可以在英文界面下，把联系人分组到相应的英文字母排序下面。</p>
<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="image" src="https://axmemo.com/wp-content/uploads/2017/12/image.png" alt="image" width="549" height="342" border="0" /></p>
<p>好了，现在我们知道了方法，手工来弄么？那几百个联系人不是要弄死了，还好，我们有工具！在应用商店里面，有一款叫做 Phonetic Contacts的应用软件，就是转么用来为中文联系人添加这个字段的，而且还支持缩写功能方便你进行搜索。不过我觉得那个缩写不美观，所以就没有加了。下载以后，直接运行一下，几百个联系人大概就30秒不到的时间就全部添加好了辅助字段。如果你弄错了，那也没关系，在应用里面双击一下，可以全部清理掉重来。</p>
<p>不过在做这些操作前，个人还是建议你先备份一次联系人，以防万一。然后，就OK了~ 虽然现在不能越狱，但是有一个比较方便的搜索联系人的方法，就是在任何界面下拉呼出spotlight，然后输入联系人名称的前几个字，系统会自动智能匹配出联系人，如果你平时联系的多，这里推荐的联系人还是比较精准的。这也就当是系统还没有Kuaidial之前的妥协方案吧。</p>
<p>最后，其实我最近兴起的真正原因，是我突然一天发现在我的笔记本上，Finder变成了“访达”，使我毅然决定要切回英文界面！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/sort-cn-contact-in-en-interface.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>修复iOS相片和相册丢失问题</title>
		<link>https://axmemo.com/technology/rebuild-ios-photo-library.html</link>
					<comments>https://axmemo.com/technology/rebuild-ios-photo-library.html#comments</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Fri, 15 Sep 2017 01:41:16 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[移动终端]]></category>
		<category><![CDATA[ios]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3647</guid>

					<description><![CDATA[昨天晚上，正在Happy的拍着夜景，突然间iPhone的相机程序死机了，我也没觉得什么，重启后继续拍了几张。等我到图库中查看的时候，顿时傻眼了，我发现在相簿一栏中，什么都没有了！不过幸好我还能在照片中看到图片，那说明至少文件还没有丢失，只是无法显示而已，应该还有办法挽回（其实当时心在发抖）。 开始，我用了一些常规的方法来尝试，是否能重建相簿文件，包括：重启、切换语言版本、新建一个新相簿…但是一直都不行。我奇怪的是，我通过Procam能看到完整的相簿信息，但是在官方应用中还是看不到，我最终已经做好最坏的打算，就是换一个应用来管理相片。有朋友肯定说，你为什么不重置一次iPhone呢，因为我越狱了啊。因为某些原因，我暂时还不想升级到iOS 11，而且万一恢复完了还不能解决问题呢？我之前有一台iPad mini2 就是这样莫名其妙的升级了以后也没解决问题。 看来，只能自己动手去处理系统文件了。用iPhone这么多年，其实对于iOS的文件结构也算是有所了解，虽然这几个版本更新调整了一些，但是大致位置都还能找到。前提是，幸好我有越狱！ iOS的相片管理文件位于：/var/mobile/Media/PhotoData/ 里面有一个叫做 Photos.sqlite的文件，就是相册的数据库信息文件了，将这个文件删除，然后你会发现你打开相机会闪退，没关系，重新启动iPhone就可以。 在这里，网上有建议是采用硬启动的方式，就是按住HOME+POWER到强行关机后再启动，反正你看着办就好了。然后硬启动之后的时间会比较长，慢慢等着。 等系统启动完成之后，再点开相册应用，你会发现里面什么都没有了，我当时看到这一幕也是超级懵逼的。退出以后，过一会再点进来看，你会发现，嗯？相簿已经有几个出现了，但是里面的相片数为0，别怕，经过之前的恐吓你应该心理足够强大。因为这已经意味着，系统已经在重建相片库的索引文件。 耐心等待，系统需要重建：相片库，缩略图…..好多的事情，你让它慢慢来，等一切做完了，你会发现一切恢复原样了…嘘~长出一口气，还好我有越狱！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="plibrary" src="https://axmemo.com/wp-content/uploads/2017/09/plibrary.jpg" alt="plibrary" width="570" height="230" border="0" /></p>
<p>昨天晚上，正在Happy的拍着夜景，突然间iPhone的相机程序死机了，我也没觉得什么，重启后继续拍了几张。等我到图库中查看的时候，顿时傻眼了，我发现在相簿一栏中，什么都没有了！不过幸好我还能在照片中看到图片，那说明至少文件还没有丢失，只是无法显示而已，应该还有办法挽回（其实当时心在发抖）。<span id="more-3647"></span></p>
<p>开始，我用了一些常规的方法来尝试，是否能重建相簿文件，包括：重启、切换语言版本、新建一个新相簿…但是一直都不行。我奇怪的是，我通过Procam能看到完整的相簿信息，但是在官方应用中还是看不到，我最终已经做好最坏的打算，就是换一个应用来管理相片。有朋友肯定说，你为什么不重置一次iPhone呢，因为我越狱了啊。因为某些原因，我暂时还不想升级到iOS 11，而且万一恢复完了还不能解决问题呢？我之前有一台iPad mini2 就是这样莫名其妙的升级了以后也没解决问题。</p>
<p>看来，只能自己动手去处理系统文件了。用iPhone这么多年，其实对于iOS的文件结构也算是有所了解，虽然这几个版本更新调整了一些，但是大致位置都还能找到。前提是，幸好我有越狱！</p>
<p>iOS的相片管理文件位于：/var/mobile/Media/PhotoData/</p>
<p>里面有一个叫做 Photos.sqlite的文件，就是相册的数据库信息文件了，将这个文件删除，然后你会发现你打开相机会闪退，没关系，重新启动iPhone就可以。</p>
<p>在这里，网上有建议是采用硬启动的方式，就是按住HOME+POWER到强行关机后再启动，反正你看着办就好了。然后硬启动之后的时间会比较长，慢慢等着。</p>
<p>等系统启动完成之后，再点开相册应用，你会发现里面什么都没有了，我当时看到这一幕也是超级懵逼的。退出以后，过一会再点进来看，你会发现，嗯？相簿已经有几个出现了，但是里面的相片数为0，别怕，经过之前的恐吓你应该心理足够强大。因为这已经意味着，系统已经在重建相片库的索引文件。</p>
<p>耐心等待，系统需要重建：相片库，缩略图…..好多的事情，你让它慢慢来，等一切做完了，你会发现一切恢复原样了…嘘~长出一口气，还好我有越狱！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/rebuild-ios-photo-library.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress图片服务优化</title>
		<link>https://axmemo.com/technology/wordpress-image-optimize.html</link>
					<comments>https://axmemo.com/technology/wordpress-image-optimize.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Fri, 02 Jun 2017 01:52:20 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3455</guid>

					<description><![CDATA[这两天的WordPress折腾之旅即将画上尾声，前面根据Google的网站分析工具，进行了不少的优化和修复，不过Insights测试的分数还是没有很高，但也无所谓了，最后要进行优化的，是其中图像存储和显示部分。目的是通过对WordPress的服务和图像的优化，提升页面响应速度和用户的访问感受。 优化的参考来自于Google 的PageSpeed，里面可以对当前页面提出了很多优化建议，经过我一阵折腾以后，还有下面一些问题是无法解决的： 网页中的JS和CSS嵌入：这部分问题在桌面版上还好，只是两个jquery和一个CSS，我之前把其他几个小的CSS都进行了合并，如果全部嵌入页面显然不现实。这部分可以通过服务器缓存来进行提升速度。不过在移动版的网页中，由于又调用了遮罩脚本，所以多嵌入了几个js代码也没办法了。 网页上图片的优化：这部分工作，我是用WP的插件来完成的，经过对比，我最终选择了“Compress JPEG &#38; PNG images”这款插件。注册完成以后，每个月可以进行500张图片的优化，而且无缝的整合入媒体库中，还可以对历史文件进行优化，其实，你只要选择优化大图就可以了，所以每个月的额度绰绰有余。不过实际使用下来，相较我用PS保存的文件，只有10%左右的优化空间。 使用浏览器缓存：这个需要在nginx上面进行新的缓存策略设定，我开始以为是设置在nginx主配置文件里面的，后来发现是要设置到vhost的虚拟站点配置文件里面，设置完成之后，重启一下服务就好了，为了方便调试，我还是把css的缓存时间给设置小了一些，而其他的都设置的比较久。 缩减CSS：其实CSS本身尺寸就很小，所以无所谓缩减了，因为缩减完成以后，在阅读性上面会差很多，我还是喜欢按自己的习惯来写。 另外，就是写一下关于Lazy load的设置，这是一个针对图片显示的插件，在WP上用的很多的一个就是这个，另外一个就是 Infiniti Scroll，不过因为我设置了分页，所以的话我觉得只要配置Lazy load就好了，有很多不同的Lazy load插件，其实只要选择最简单的那个就可以了，所实现的效果就是：当页面需要显示图片的时候再进行加载，然后用fade的方式进行显示，感觉效果还是不错的。 Lazy load的原理是先加载一个1*1px的透明图片，等需要的时候，再加载整个图片内容，我在实际使用的时候，在PC版本上面显示的很好，但是在移动版本上面发现完全没有用，我开始以为是Safari没有捕获到视窗口大小，后来发现是我修改了标准的文章展示模版，在标准模块之前提前加载了图片，导致插件的代码没有对这张图片产生影响。解决的办法就是手工把Lazy load的属性代码添加到手工写的代码当中，就好了。 后来又发现一个问题，在模拟页面加载的时候，手机端网页会先出现很长一块空白然后再进行回缩，以我聪明的才智，发现是css中的一个img属性出现了问题，默认的情况下，img的属性是 width:100%, height:auto; 结果那个1*1px的透明图片在撑满100%宽度的时候，高度也就变成了正方形大小。解决办法就是自己再写一个透明图片，宽度和当前题图一样，高度依然是1px，然后用来替换题图的加载。这个问题在PC版本里面并不会出现的原因，是因为在PC版的CSS中没有对img做这样的限制。 这次的WordPress终于告一段落了，这几天写的代码好像比我之前一年写的都还要多，下次不知道什么时候才有精力再来折腾这个了，要不弄个微信小程序玩玩？]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="imgoptimize" src="https://axmemo.com/wp-content/uploads/2017/06/imgoptimize.jpg" alt="imgoptimize" width="570" height="230" border="0" /></p>
<p>这两天的WordPress折腾之旅即将画上尾声，前面根据Google的网站分析工具，进行了不少的优化和修复，不过Insights测试的分数还是没有很高，但也无所谓了，最后要进行优化的，是其中图像存储和显示部分。目的是通过对WordPress的服务和图像的优化，提升页面响应速度和用户的访问感受。<span id="more-3455"></span></p>
<p>优化的参考来自于Google 的PageSpeed，里面可以对当前页面提出了很多优化建议，经过我一阵折腾以后，还有下面一些问题是无法解决的：</p>
<ul>
<li><strong>网页中的JS和CSS嵌入：</strong>这部分问题在桌面版上还好，只是两个jquery和一个CSS，我之前把其他几个小的CSS都进行了合并，如果全部嵌入页面显然不现实。这部分可以通过服务器缓存来进行提升速度。不过在移动版的网页中，由于又调用了遮罩脚本，所以多嵌入了几个js代码也没办法了。</li>
<li><strong>网页上图片的优化：</strong>这部分工作，我是用WP的插件来完成的，经过对比，我最终选择了“Compress JPEG &amp; PNG images”这款插件。注册完成以后，每个月可以进行500张图片的优化，而且无缝的整合入媒体库中，还可以对历史文件进行优化，其实，你只要选择优化大图就可以了，所以每个月的额度绰绰有余。不过实际使用下来，相较我用PS保存的文件，只有10%左右的优化空间。</li>
<li><strong>使用浏览器缓存：</strong>这个需要在nginx上面进行新的缓存策略设定，我开始以为是设置在nginx主配置文件里面的，后来发现是要设置到vhost的虚拟站点配置文件里面，设置完成之后，重启一下服务就好了，为了方便调试，我还是把css的缓存时间给设置小了一些，而其他的都设置的比较久。</li>
<li><strong>缩减CSS：</strong>其实CSS本身尺寸就很小，所以无所谓缩减了，因为缩减完成以后，在阅读性上面会差很多，我还是喜欢按自己的习惯来写。</li>
</ul>
<p>另外，就是写一下关于Lazy load的设置，这是一个针对图片显示的插件，在WP上用的很多的一个就是这个，另外一个就是 Infiniti Scroll，不过因为我设置了分页，所以的话我觉得只要配置Lazy load就好了，有很多不同的Lazy load插件，其实只要选择最简单的那个就可以了，所实现的效果就是：当页面需要显示图片的时候再进行加载，然后用fade的方式进行显示，感觉效果还是不错的。</p>
<p>Lazy load的原理是先加载一个1*1px的透明图片，等需要的时候，再加载整个图片内容，我在实际使用的时候，在PC版本上面显示的很好，但是在移动版本上面发现完全没有用，我开始以为是Safari没有捕获到视窗口大小，后来发现是我修改了标准的文章展示模版，在标准模块之前提前加载了图片，导致插件的代码没有对这张图片产生影响。解决的办法就是手工把Lazy load的属性代码添加到手工写的代码当中，就好了。</p>
<p>后来又发现一个问题，在模拟页面加载的时候，手机端网页会先出现很长一块空白然后再进行回缩，以我聪明的才智，发现是css中的一个img属性出现了问题，默认的情况下，img的属性是 width:100%, height:auto; 结果那个1*1px的透明图片在撑满100%宽度的时候，高度也就变成了正方形大小。解决办法就是自己再写一个透明图片，宽度和当前题图一样，高度依然是1px，然后用来替换题图的加载。这个问题在PC版本里面并不会出现的原因，是因为在PC版的CSS中没有对img做这样的限制。</p>
<p>这次的WordPress终于告一段落了，这几天写的代码好像比我之前一年写的都还要多，下次不知道什么时候才有精力再来折腾这个了，要不弄个微信小程序玩玩？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/wordpress-image-optimize.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress实用插件推荐</title>
		<link>https://axmemo.com/technology/wordpress-plugin-recommend.html</link>
					<comments>https://axmemo.com/technology/wordpress-plugin-recommend.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Wed, 31 May 2017 04:42:53 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3445</guid>

					<description><![CDATA[最近这段时间，又心血来潮的折腾了一阵子WordPress，其实前前后后写博客也有十多年的时间了，从一开始的各种兴奋折腾，到后来的慢慢归于平淡，就像主题也是越变越简单，其实发帖也变的越来越少了不是么？所以其实已经好久没有折腾WordPress的插件了，作为全球最大的博客应用程序，有好多的开发者在此基础上进行了优化和改进，今天就给大家推荐一下当前自用的插件。 AMP：这个不用说了，前面几天我折腾就是为了这个插件 Antispam Bee：用于对垃圾评论进行屏蔽，这个反正一直都在用 BackWPup：进行网站的全站文件和数据库备份，支持Dropbox存储 Latest Comments：显示最新评论内容，可以用于首页展示 Disable Google Fonts：禁用Google字体，加速后台管理页面显示 Google Analytics Dashboard for WP：这个不用解释也知道 Google XML Sitemaps：这个也不用解释了吧 MobilePress：针对移动设备访问，设置不同的主题 Server Status：在后台方便的查看系统参数和状态 WordPress Importer：官方要求安装的导入插件 WP Super Cache：用的人很多的快速缓存功能，摸索中 WP-Optimize：WordPress的优化插件，功能不多但实用 WPJAM：国内用户开发的优化插件，搭配微信机器人使用 微信机器人：支持微信公众号和Wordpress的对接功能 其他的一些插件我就暂时没有在用了，比如：图像优化之类的功能，因为毕竟网站上面用的图片也不是很多嘛，基于能简洁则简洁的想法，都没有使用。今天的文章就这么短，希望上面的推荐能给你带来参考。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="wordpressplugin" src="https://axmemo.com/wp-content/uploads/2017/05/wordpressplugin.jpg" alt="wordpressplugin" width="570" height="230" border="0" /></p>
<p>最近这段时间，又心血来潮的折腾了一阵子WordPress，其实前前后后写博客也有十多年的时间了，从一开始的各种兴奋折腾，到后来的慢慢归于平淡，就像主题也是越变越简单，其实发帖也变的越来越少了不是么？所以其实已经好久没有折腾WordPress的插件了，作为全球最大的博客应用程序，有好多的开发者在此基础上进行了优化和改进，今天就给大家推荐一下当前自用的插件。<span id="more-3445"></span></p>
<ul>
<li><strong>AMP：</strong>这个不用说了，前面几天我折腾就是为了这个插件</li>
<li><strong>Antispam Bee：</strong>用于对垃圾评论进行屏蔽，这个反正一直都在用</li>
<li><strong>BackWPup：</strong>进行网站的全站文件和数据库备份，支持Dropbox存储</li>
<li><strong>Latest Comments：</strong>显示最新评论内容，可以用于首页展示</li>
<li><strong>Disable Google Fonts：</strong>禁用Google字体，加速后台管理页面显示</li>
<li><strong>Google Analytics Dashboard for WP：</strong>这个不用解释也知道</li>
<li><strong>Google XML Sitemaps：</strong>这个也不用解释了吧</li>
<li><strong>MobilePress：</strong>针对移动设备访问，设置不同的主题</li>
<li><strong>Server Status：</strong>在后台方便的查看系统参数和状态</li>
<li><strong>WordPress Importer：</strong>官方要求安装的导入插件</li>
<li><strong>WP Super Cache：</strong>用的人很多的快速缓存功能，摸索中</li>
<li><strong>WP-Optimize：</strong>WordPress的优化插件，功能不多但实用</li>
<li><strong>WPJAM：</strong>国内用户开发的优化插件，搭配微信机器人使用</li>
<li><strong>微信机器人：</strong>支持微信公众号和Wordpress的对接功能</li>
</ul>
<p>其他的一些插件我就暂时没有在用了，比如：图像优化之类的功能，因为毕竟网站上面用的图片也不是很多嘛，基于能简洁则简洁的想法，都没有使用。今天的文章就这么短，希望上面的推荐能给你带来参考。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/wordpress-plugin-recommend.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>没事千万别乱动数据库</title>
		<link>https://axmemo.com/technology/do-not-play-database.html</link>
					<comments>https://axmemo.com/technology/do-not-play-database.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Tue, 30 May 2017 12:55:05 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[AMP]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3435</guid>

					<description><![CDATA[在这个端午小长假里，我花了整整一天的时间，为我之前的一条数据库指令所造成的后果进行补救，这就再一次教育了我们，没事千万别乱动数据库。幸好，我每天进行了数据备份，所以可以有足够多的版本来进行重建和对比，最终找到解决方案，但整个过程还是付出了惨痛的教训。下面就说说事件的经过，让大家开心一下。 事情的起因还是之前的AMP页面结构优化，我发现其实只要指定了特色图片，AMP就能自动捕获到文件。但是，因为之前就没有设置特色图片，所以一直找不到。于是，我花了整整一个上午来研究如何批量的给历史文章重置特色图片，但后来，又突然发现，其实只要文章里面有图片，就能捕获到了，但为什么我一直不成功呢？经过一天时间的抽丝剥茧，终于把问题弄明白了，里面涉及了好几个和Wordpress有关的讨论，一并展开说明： 1. 关于文章ID不连续的问题： 之前，我们看到过关于Wordpress的文章标题编号不连续的讨论，很奇怪的是为什么Wordpress在生成文章页面的同时，会将上载的图片也生成一个post_id，这是一个让强迫症患者很不爽的做法，但是好像也没什么特别好的办法。 后来有一天，我看到了一个关于关闭Wordpress自动保存的帖子，帖子的里面除了说明加入一些函数以外，还有下面两条SQL代码： DELETE FROM wp_posts WHERE post_status = &#8216;inherit&#8217;; DELETE FROM wp_posts WHERE post_status = &#8216;auto-draft&#8217;; 就是前面这条红色的语句，让我陷入了万劫不复的深渊！ 2. 关于文章和图片的关联关系： 在后台的媒体库里面，我们可以看到，图片有一个属性，是是否和文章进行了关联，在后台的发文环境中，如果你在编写过程中上载了图片，这个图片就会被认为被上载并关联到当前文章里面。只要有这样的属性，就可以用很多工具来进行缩略图生成，或者是特色图片的指定，这一切都是依赖于图片和文章建立起关联关系的前提。 但是，特么我发现我的媒体库里面，一张图片都没有！即便用扫描目录批量导入媒体库，同样没法建立起图片和文章的关联，这是我今天折腾的最核心的问题。 而后来，我发现，正是因为我运行了前面那个红色的语句，导致了媒体库的清空，以及图片和文章关联的断裂。其中图文关联的原理如下: 系统正常发帖，生成帖子post_id和图片的post_id 帖子ID的状态是Publish，图片ID的状态是inherit 图片ID有一个属性是post_parent，会指向帖子的ID 帖子ID的post_parent，则显示为0 我之前那个致命的操作，就是在于删除了状态为inherit的post_id，然后就一次性把图片以及图片和帖子的关联关系全部删除掉了！杯具！ 3. 重建以后的缩略图恢复： 由于我前面花了一个晚上配置短链接，所以恢复到老版本网站简直是悲剧，所以只能从老板网站中提取状态为inherit的post_id，然后导入回正式数据库中进行融合。在本地重建了一份老的数据库，发现受影响的有近700多条！ 然后就进行逆向操作，把状态为非inherit的post_id全部删除，然后改一个表名之后导出，然后再在正式系统导入，再将数据（不含结构）迁移回正式表。 结果，后台的媒体库是能看到图片名了，但是缩略图没有了！这时候我特么的去找了一个重建缩略图的插件，结果又让自己悲剧了一把，重建缩略图导致把我的文件几乎全部清洗了一遍，我只能再次在服务器端删除所有文件，用备份再恢复一次。 看来还是要从数据库里面找问题，后来才发现，受到影响的除了wp_post表以外，还有一张wp_postmeta表也受到影响，这里面受到影响的字段主要是： _wp_attached_file _wp_attachment_metadata 这两个字段定义了图片和文章关联信息以及缩略图的特性，就像前面所说的，要用老数据恢复，就必须把自动生成的缩略图毁掉，重新恢复成老样子。经过对老数据表的清理，然后重新汇入到新的正式库中，终于，媒体库里面可以看到缩略图了。 这样一来，数据库后台的修复才算是大功告成，眼泪已经流了一地。 &#8211; &#8211; &#8211; 关于AMP的优化 &#8211; &#8211; &#8211; 最后说一下，在昨天基础上针对AMP的优化，既然有了图片和文章关联信息，之前我们所说的AMP插件就可以自动获取到图片信息了，不过这里有一个小问题，就是前面所说到的image的属性中必须宽度大于700px，而我的题图只有500多一点，这里的话就需要手工修改AMP插件的代码了，把系统读取的宽度改为等比例缩放以后的固定值，像我的网站题图缩放以后就是700*282的尺寸，要修改的文件位于： amp/includes/class-amp-post-template.php 具体怎么改我就不详细说了，看一下找到对应的字段直接写死固定值就可以了，然后再用google提供的结构化工具验证一下（在这里），就可以了！ 前前后后折腾了一整天，也算是在端午节给自己的大脑做个头脑体操吧，还好最后的结果是完美的，以后再也不敢乱动数据库了。]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="border: 0px currentcolor; display: inline; background-image: none;" title="database" src="https://axmemo.com/wp-content/uploads/2017/05/database.jpg" alt="database" width="570" height="230" border="0" /></p>
<p>在这个端午小长假里，我花了整整一天的时间，为我之前的一条数据库指令所造成的后果进行补救，这就再一次教育了我们，没事千万别乱动数据库。幸好，我每天进行了数据备份，所以可以有足够多的版本来进行重建和对比，最终找到解决方案，但整个过程还是付出了惨痛的教训。下面就说说事件的经过，让大家开心一下。<span id="more-3435"></span></p>
<p>事情的起因还是之前的AMP页面结构优化，我发现其实只要指定了特色图片，AMP就能自动捕获到文件。但是，因为之前就没有设置特色图片，所以一直找不到。于是，我花了整整一个上午来研究如何批量的给历史文章重置特色图片，但后来，又突然发现，其实只要文章里面有图片，就能捕获到了，但为什么我一直不成功呢？经过一天时间的抽丝剥茧，终于把问题弄明白了，里面涉及了好几个和Wordpress有关的讨论，一并展开说明：</p>
<p><strong>1. 关于文章ID不连续的问题：</strong></p>
<p>之前，我们看到过关于Wordpress的文章标题编号不连续的讨论，很奇怪的是为什么Wordpress在生成文章页面的同时，会将上载的图片也生成一个post_id，这是一个让强迫症患者很不爽的做法，但是好像也没什么特别好的办法。</p>
<p>后来有一天，我看到了一个关于关闭Wordpress自动保存的帖子，帖子的里面除了说明加入一些函数以外，还有下面两条SQL代码：</p>
<ul>
<li><span style="color: #ff0000;">DELETE FROM wp_posts WHERE post_status = &#8216;inherit&#8217;;</span></li>
<li>DELETE FROM wp_posts WHERE post_status = &#8216;auto-draft&#8217;;</li>
</ul>
<p>就是前面这条红色的语句，让我陷入了万劫不复的深渊！</p>
<p><strong>2. 关于文章和图片的关联关系：</strong></p>
<p>在后台的媒体库里面，我们可以看到，图片有一个属性，是是否和文章进行了关联，在后台的发文环境中，如果你在编写过程中上载了图片，这个图片就会被认为被上载并关联到当前文章里面。只要有这样的属性，就可以用很多工具来进行缩略图生成，或者是特色图片的指定，这一切都是依赖于图片和文章建立起关联关系的前提。</p>
<p>但是，特么我发现我的媒体库里面，一张图片都没有！即便用扫描目录批量导入媒体库，同样没法建立起图片和文章的关联，这是我今天折腾的最核心的问题。</p>
<p>而后来，我发现，正是因为我运行了前面那个红色的语句，导致了媒体库的清空，以及图片和文章关联的断裂。其中图文关联的原理如下:</p>
<ul>
<li>系统正常发帖，生成帖子post_id和图片的post_id</li>
<li>帖子ID的状态是Publish，图片ID的状态是inherit</li>
<li>图片ID有一个属性是post_parent，会指向帖子的ID</li>
<li>帖子ID的post_parent，则显示为0</li>
</ul>
<p>我之前那个致命的操作，就是在于删除了状态为inherit的post_id，然后就一次性把图片以及图片和帖子的关联关系全部删除掉了！杯具！</p>
<p><strong>3. 重建以后的缩略图恢复：</strong></p>
<p>由于我前面花了一个晚上配置短链接，所以恢复到老版本网站简直是悲剧，所以只能从老板网站中提取状态为inherit的post_id，然后导入回正式数据库中进行融合。在本地重建了一份老的数据库，发现受影响的有近700多条！</p>
<p>然后就进行逆向操作，把状态为非inherit的post_id全部删除，然后改一个表名之后导出，然后再在正式系统导入，再将数据（不含结构）迁移回正式表。</p>
<p>结果，后台的媒体库是能看到图片名了，但是缩略图没有了！这时候我特么的去找了一个重建缩略图的插件，结果又让自己悲剧了一把，重建缩略图导致把我的文件几乎全部清洗了一遍，我只能再次在服务器端删除所有文件，用备份再恢复一次。</p>
<p>看来还是要从数据库里面找问题，后来才发现，受到影响的除了wp_post表以外，还有一张wp_postmeta表也受到影响，这里面受到影响的字段主要是：</p>
<ul>
<li>_wp_attached_file</li>
<li>_wp_attachment_metadata</li>
</ul>
<p>这两个字段定义了图片和文章关联信息以及缩略图的特性，就像前面所说的，要用老数据恢复，就必须把自动生成的缩略图毁掉，重新恢复成老样子。经过对老数据表的清理，然后重新汇入到新的正式库中，终于，媒体库里面可以看到缩略图了。</p>
<p>这样一来，数据库后台的修复才算是大功告成，眼泪已经流了一地。</p>
<p><strong>&#8211; &#8211; &#8211; 关于AMP的优化 &#8211; &#8211; &#8211;</strong></p>
<p>最后说一下，在昨天基础上针对AMP的优化，既然有了图片和文章关联信息，之前我们所说的AMP插件就可以自动获取到图片信息了，不过这里有一个小问题，就是前面所说到的image的属性中必须宽度大于700px，而我的题图只有500多一点，这里的话就需要手工修改AMP插件的代码了，把系统读取的宽度改为等比例缩放以后的固定值，像我的网站题图缩放以后就是700*282的尺寸，要修改的文件位于：</p>
<ul>
<li>amp/includes/class-amp-post-template.php</li>
</ul>
<p>具体怎么改我就不详细说了，看一下找到对应的字段直接写死固定值就可以了，然后再用google提供的结构化工具验证一下（<a href="https://search.google.com/structured-data/testing-tool" target="_blank" rel="noopener noreferrer">在这里</a>），就可以了！</p>
<p>前前后后折腾了一整天，也算是在端午节给自己的大脑做个头脑体操吧，还好最后的结果是完美的，以后再也不敢乱动数据库了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/do-not-play-database.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>修复AMP插件结构数据报错</title>
		<link>https://axmemo.com/technology/fix-amp-plugin-error-for-wordpress.html</link>
					<comments>https://axmemo.com/technology/fix-amp-plugin-error-for-wordpress.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Sat, 27 May 2017 13:39:27 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[AMP]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3430</guid>

					<description><![CDATA[这个事情首先要从AMP说起，AMP的全称是“Accelerated Mobile Pages”，它由AMP HTML, AMP Runtime 和AMP Components三部分组成，具体细节我们在这里就不展开讨论了，主要的意思就是它可以通过对HTML的精简，实现在移动设备上的高速加载，而另一方面，Google作为全球最大的搜索引擎，会对AMP网页进行优化抓取，并将AMP的页面结果缓存从而是实现对用户的更高效的推送和展现。 这些咱们都先放到一边，太高级的事情不用做过细的研究，我们可以在Wordpress的后台找到一款AMP插件，使得整个网站实现对AMP的支持，而激活这个插件以后，你可以从帮助中找到你的AMP站点链接。如果你是伪静态模式的话： 如果默认的页面链接是：http://server/page.html 那么该页面的AMP的地址就是：http://server/page.html/amp 你打开后面这个链接之后，就会看到一个干净无比的页面，也就是前面所说的实现在移动设备和网络环境中的加速功能。amp的站点链接同样可以被google所捕获到并收录，而我也就是在这个时候发现的问题。 前两天，在研究Google Webmaster Search Console的时候，看到在AMP的统计信息项中出现了“结构化数据元素无效”的非严重问题，作为强迫症患者，一定要去一探究竟没错，于是点开某个单独的告警页面，可以直接调用Google的结构化数据检测工具来进行检测，然后出现了下面错误： 关于结构化数据的讨论，在这里也就不展开了，简单的来说，结构化数据不是给人看的，而是给机器，给搜索引擎看的，优秀的结构化数据可以帮助搜索引擎更快的识别页面所包含的内容信息。 还是让我们回到这个报错本身： A value for the logo field is required. A value for the image field is required. 这是一个最终的访问页面，结构化数据报错告诉我们，缺少了两个结构化数据信息，一个是logo，一个是image。其实解释一下就是，缺少了一个网站的标志信息，以及当前文章页面的图片介绍。 后来，我在网上搜索解决方法，发现那个logo的报错，可以通过Wordpress 管理后台中的“Appearance-Customizing-Site Identity”，找到那个关于Site Icon定义的地方，上载图片之后就可以解决。不过那个image的缺失却没有解决。 再后来，只能到这个插件的开发者网站中，寻找相关说明。终于找到了结局的办法，其实就是需要修改当前主题中的functions.php，加上下面代码： 这些代码在前面提到的开发者网站中也有提到，为了考虑页面布局，我就直接用图片的方式插入了，大家直接去那边拷贝代码吧。 但是有一个地方要说明，就是按理说，这个image的结构化信息，最好是取当前页面的题图会比较好，但是，这个结构化验证工具对于这个image的宽度有最低要求，就是宽度必须大于700px，我看看我自己的文章题图，只有500px多，于是就干脆直接指定了一个静态的image链接地址作罢。 其实，wordpress上面也有类似的插件来实现相关的功能，你可以在后台的插件管理中搜索一个名叫“Schema”以及“Schema Default Image”的插件来解决这个问题，不过我觉得这个插件插入了太多的结构化数据，想想还是自己手工来写好了。 好吧，今天的帖子就写到这里，大家下次再见~]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="amp" src="https://axmemo.com/wp-content/uploads/2017/05/amp.jpg" alt="amp" width="570" height="230" border="0" /></p>
<p>这个事情首先要从AMP说起，AMP的全称是“Accelerated Mobile Pages”，它由AMP HTML, AMP Runtime 和AMP Components三部分组成，具体细节我们在这里就不展开讨论了，主要的意思就是它可以通过对HTML的精简，实现在移动设备上的高速加载，而另一方面，Google作为全球最大的搜索引擎，会对AMP网页进行优化抓取，并将AMP的页面结果缓存从而是实现对用户的更高效的推送和展现。<span id="more-3430"></span></p>
<p>这些咱们都先放到一边，太高级的事情不用做过细的研究，我们可以在Wordpress的后台找到一款AMP插件，使得整个网站实现对AMP的支持，而激活这个插件以后，你可以从帮助中找到你的AMP站点链接。如果你是伪静态模式的话：</p>
<ul>
<li>如果默认的页面链接是：<a href="http://server/page.html">http://server/page.html</a></li>
<li>那么该页面的AMP的地址就是：<a href="http://server/page.html/amp">http://server/page.html/amp</a></li>
</ul>
<p>你打开后面这个链接之后，就会看到一个干净无比的页面，也就是前面所说的实现在移动设备和网络环境中的加速功能。amp的站点链接同样可以被google所捕获到并收录，而我也就是在这个时候发现的问题。</p>
<p>前两天，在研究Google Webmaster Search Console的时候，看到在AMP的统计信息项中出现了“结构化数据元素无效”的非严重问题，作为强迫症患者，一定要去一探究竟没错，于是点开某个单独的告警页面，可以直接调用Google的结构化数据检测工具来进行检测，然后出现了下面错误：</p>
<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="err" src="https://axmemo.com/wp-content/uploads/2017/05/err.png" alt="err" width="518" height="195" border="0" /></p>
<p>关于结构化数据的讨论，在这里也就不展开了，简单的来说，结构化数据不是给人看的，而是给机器，给搜索引擎看的，优秀的结构化数据可以帮助搜索引擎更快的识别页面所包含的内容信息。</p>
<p>还是让我们回到这个报错本身：</p>
<ul>
<li>A value for the logo field is required.</li>
<li>A value for the image field is required.</li>
</ul>
<p>这是一个最终的访问页面，结构化数据报错告诉我们，缺少了两个结构化数据信息，一个是logo，一个是image。其实解释一下就是，缺少了一个网站的标志信息，以及当前文章页面的图片介绍。</p>
<p>后来，我在网上搜索解决方法，发现那个logo的报错，可以通过Wordpress 管理后台中的“Appearance-Customizing-Site Identity”，找到那个关于Site Icon定义的地方，上载图片之后就可以解决。不过那个image的缺失却没有解决。</p>
<p>再后来，只能到这个插件的<a href="https://github.com/Automattic/amp-wp" target="_blank" rel="noopener noreferrer">开发者网站</a>中，寻找相关说明。终于找到了结局的办法，其实就是需要修改当前主题中的functions.php，加上下面代码：</p>
<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="code" src="https://axmemo.com/wp-content/uploads/2017/05/code.png" alt="code" width="550" height="390" border="0" /></p>
<p>这些代码在前面提到的开发者网站中也有提到，为了考虑页面布局，我就直接用图片的方式插入了，大家直接去那边拷贝代码吧。</p>
<p>但是有一个地方要说明，就是按理说，这个image的结构化信息，最好是取当前页面的题图会比较好，但是，这个结构化验证工具对于这个image的宽度有最低要求，就是宽度必须大于700px，我看看我自己的文章题图，只有500px多，于是就干脆直接指定了一个静态的image链接地址作罢。</p>
<p>其实，wordpress上面也有类似的插件来实现相关的功能，你可以在后台的插件管理中搜索一个名叫“Schema”以及“Schema Default Image”的插件来解决这个问题，不过我觉得这个插件插入了太多的结构化数据，想想还是自己手工来写好了。</p>
<p>好吧，今天的帖子就写到这里，大家下次再见~</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/fix-amp-plugin-error-for-wordpress.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>为WordPress加上SSL证书</title>
		<link>https://axmemo.com/technology/add-ssl-to-your-wordpress.html</link>
					<comments>https://axmemo.com/technology/add-ssl-to-your-wordpress.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Tue, 16 May 2017 07:22:53 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3401</guid>

					<description><![CDATA[其实给网站加上SSL证书这个事情，其实以前就想做了，但是一直懒着。前两天看到有朋友说起微信小程序的事情，才又动起了这个念头。本文是记录了整个过程，以备以后参考，也希望能给其他朋友提供帮助。 1. 安装cerbot：因为虚拟主机是CentOS7，所以直接运行下面代码： yum install epel-release yum install certbot 2. 配置nginx准备验证：需要在虚拟主机配置文件里面加入一个目录进行验证，在我的网站上是在axmemo.com.conf 的文件里面 location ^~ /.well-known/acme-challenge/ { default_type &#8220;text/plain&#8221;; root     /home/wwwroot/axmemo.com/; } location = /.well-known/acme-challenge/ { return 404; } 3. 重启nginx，开始申请证书：根据向导完成证书的申请操作，申请完成的证书会位于/etc/letsencrypt/live/ 目录下面 certbot certonly &#8211;webroot -w /home/wwwroot/axmemo.com -d  axmemo.com 4. 修改nginx配置，改为SSL访问模式：在配置文件里面进行如下修改 listen 443 ssl; …. ssl_certificate      /etc/letsencrypt/live/axmemo.com/fullchain.pem; ssl_certificate_key  /etc/letsencrypt/live/axmemo.com/privkey.pem; 5.对原有的http访问增加301跳转： server {   listen 80; server_name axmemo.com [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="SSL" src="https://axmemo.com/wp-content/uploads/2017/05/SSL.jpg" alt="SSL" width="570" height="230" border="0" /></p>
<p>其实给网站加上SSL证书这个事情，其实以前就想做了，但是一直懒着。前两天看到有朋友说起微信小程序的事情，才又动起了这个念头。本文是记录了整个过程，以备以后参考，也希望能给其他朋友提供帮助。<span id="more-3401"></span></p>
<p><strong>1. 安装cerbot：</strong>因为虚拟主机是CentOS7，所以直接运行下面代码：</p>
<blockquote><p>yum install epel-release</p>
<p>yum install certbot</p></blockquote>
<p><strong>2. 配置nginx准备验证：</strong>需要在虚拟主机配置文件里面加入一个目录进行验证，在我的网站上是在axmemo.com.conf 的文件里面</p>
<blockquote><p>location ^~ /.well-known/acme-challenge/<br />
{<br />
default_type &#8220;text/plain&#8221;;<br />
root     /home/wwwroot/axmemo.com/;<br />
}</p>
<p>location = /.well-known/acme-challenge/<br />
{<br />
return 404;<br />
}</p></blockquote>
<p><strong>3. 重启nginx，开始申请证书：</strong>根据向导完成证书的申请操作，申请完成的证书会位于/etc/letsencrypt/live/ 目录下面</p>
<blockquote><p>certbot certonly &#8211;webroot -w /home/wwwroot/axmemo.com -d  axmemo.com</p></blockquote>
<p><strong>4. 修改nginx配置，改为SSL访问模式：</strong>在配置文件里面进行如下修改</p>
<blockquote><p>listen 443 ssl;</p>
<p>….</p>
<p>ssl_certificate      /etc/letsencrypt/live/axmemo.com/fullchain.pem;</p>
<p>ssl_certificate_key  /etc/letsencrypt/live/axmemo.com/privkey.pem;</p></blockquote>
<p><strong>5.对原有的http访问增加301跳转：</strong></p>
<blockquote><p>server<br />
{   listen 80;<br />
server_name axmemo.com www.axmemo.com *.axmemo.com;<br />
return 301 https://$server_name$request_uri;    }</p></blockquote>
<p><strong>6. 重启nginx，修改Wordpress配置：</strong>进入Wordpress后台，将站点的地址改为<a href="https://axmemo.com">https://axmemo.com</a>，然后再重新启动一次nginx</p>
<p><strong>7. 修改数据库内部静态链接：</strong>把原来的http指向全部改为https就可以了。</p>
<p><strong>8. 测试自动刷新证书的操作：运行下面语句</strong></p>
<blockquote><p>certbot renew &#8211;dry-run</p></blockquote>
<p><strong>9. 添加定时运行脚本，每周运行一次：</strong></p>
<blockquote><p>sudo crontab –e</p></blockquote>
<p>然后添加下面内容</p>
<blockquote><p>01 1 * * 0 /usr/bin/certbot renew &gt;&gt; /var/log/ssl-renew.log</p>
<p>06 1 * * 0 lnmp nginx restart</p></blockquote>
<p><strong>10. 到SSL检测网站去看看安全情况：</strong>咦，怎么是B等级？</p>
<blockquote><p><a title="https://www.ssllabs.com/ssltest/analyze.html" href="https://www.ssllabs.com/ssltest/analyze.html">https://www.ssllabs.com/ssltest/analyze.html</a></p></blockquote>
<p>下面的步骤，是用于在网站上开启SSL的强加密步骤：</p>
<p><strong>1. 生成Diffie-Hellman组：</strong></p>
<blockquote><p>sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048</p></blockquote>
<p><strong>2. 添加配置文件：</strong>也放到vhost目录下，nginx会自动加载，随便命名一个conf</p>
<blockquote><p>ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br />
ssl_prefer_server_ciphers on;<br />
ssl_ciphers &#8220;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&#8221;;<br />
ssl_ecdh_curve secp384r1;<br />
ssl_session_cache shared:SSL:10m;<br />
ssl_session_tickets off;<br />
ssl_stapling on;<br />
ssl_stapling_verify on;<br />
resolver 8.8.8.8 8.8.4.4 valid=300s;<br />
resolver_timeout 5s;<br />
# disable HSTS header for now<br />
#add_header Strict-Transport-Security &#8220;max-age=63072000; includeSubDomains; preload&#8221;;<br />
add_header X-Frame-Options DENY;<br />
add_header X-Content-Type-Options nosniff;</p>
<p>ssl_dhparam /etc/ssl/certs/dhparam.pem;</p></blockquote>
<p><strong>3. 重启nginx，然后再试试检测看，搞定~</strong></p>
<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="SSL2" src="https://axmemo.com/wp-content/uploads/2017/05/SSL2.jpg" alt="SSL2" width="570" height="230" border="0" /></p>
<p>参考的文章：<a href="https://www.hrwhisper.me/install-lets-encrypt-ssl-centos-nginx/" target="_blank" rel="noopener noreferrer">这里</a>，还有 <a href="https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/" target="_blank" rel="noopener noreferrer">这里</a>，以及<a href="http://www.restran.net/2017/01/24/nginx-letsencrypt-https/" target="_blank" rel="noopener noreferrer">这里</a>！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/add-ssl-to-your-wordpress.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>12306选座算法分析和应用</title>
		<link>https://axmemo.com/technology/how-to-choose-the-seat-in-12306.html</link>
					<comments>https://axmemo.com/technology/how-to-choose-the-seat-in-12306.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Sun, 12 Mar 2017 08:04:00 +0000</pubDate>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[12306]]></category>
		<category><![CDATA[火车]]></category>
		<category><![CDATA[选座]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3286</guid>

					<description><![CDATA[事情的起因是最近经常要来回于杭州和北京，由于比较讨厌来回机场的奔波，所以如果有高铁的话我尽量就选择高铁了。而从杭州到北京的高铁最快也要5个小时，由于公司报销的原因，屌丝只能选择二等座，所以，就想着怎样才能用相同的价格选到更加舒服的位置。国内高铁的二等座，采用的是3+2的作为布局方式，分别为A.B.C+D.F的座位编号，所以位置的优劣应该就是F&#62;A&#62;D&#62;C&#62;B。而我们的目标，就是如何能通过网站或者客户端软件选中里面的F座。 首先，要知道的是国内的12306网站只允许在一天内三次取消订单，而最后的座位编号是在出订单以后才确认的，所以下面的操作需要多个帐号进行配合操作。 接下来，我们就来说说12306的选座算法（这是我经过了几十次取消订单估算出来的，虽然说不能确保100%准确，但是实际验证下来，我后面连续七八次都可以操作成功，所以这个算法应该差不多了）。现在看来，12306采用的保留最大连续区块的算法，也就是用户发起订票操作以后，会优先选取当前车厢中的零散票，然后，再一次从前往后销售车票。 下面用实际场景来说几个案例，假设当前车厢第7排位置全空为例： 如果买1张车票，分配7A；继续买1张车票，7B；依次顺推； 如果买2张车票，分配7A,7B；继续买两张车票，分配7D,7F； 如果买3张车票，分配7A,7B,7C； 如果买4张车票，分配7A,7B,7C,7D； 我们的目的，就是要把当前的座位行的A,B,C,D填充满，但同时保留最后一个F座空闲，就可以达到我们的目标了。 但现在有一个问题，就是我们要确定当前排具体的剩余位置情况，也就是填充的初始值。所以，先发起1张订票申请。 情况A： 如果这1张订票获取到的是7A，也就说明待分配的这一行全空，那么取消这张订票，然后发起一次4张订票，占据7A,7B,7C,7D就可以了 情况B： 如果这1张订票是7B，那么分配前座位可能是 A,_,_,_,_,或者是A,_,C,D,F。 接下来我们再发起3张订票，如果分配到的是7C,7D,7F,说明是前者，如果分配到8A,8B,8C则说明是后者。 如果是前者，接下来我们参考（情况A）再发起4张订票就能挤出F座，如果是后者，取消这个3张订票，再按（情况A）发起4张也就能挤出F座了。 情况C： 如果这1张订票是7C，那么分配前的位置要么是A,B,_,_,_，要么是A,B,_,D,F。 接下来我们再发起2张订票，如果分配到的是7D,7F,说明是前者，如果分配到的是8A,8B则说明是后者。 如果是前者，接下来我们参考（情况A）再发起4张订票就能挤出F座，如果是后者，就取消这两张订票，再按（情况A）发起4张也就能挤出F座了。 情况D： 如果这1张订票是7D，那么分配前的位置要么是A,B,C,_,_，要么是A,B,C,_,F。 接下来我们再发起1张订票，如果是前者你会直接得到F座，如果是后者，那么取消订单之后再按（情况A）发起4张也就能挤出F座了。 情况F： 如果这1张订票是7F，那么，恭喜你，一次成功。 &#8211; &#8211; &#8211; &#8211; &#8211; 我是分割线 &#8211; &#8211; &#8211; &#8211; &#8211; 但是，上面的招数不一定每次都成功，因为还有一种例外情况，就是后续位置中有用户退票导致的零星空窗，这样的话，单独的1张订票就很可能被塞到后面去，这种情况就只能单独用一个帐号来填充这个空位了。 由于坐火车的人太多，没有那么多和我们一样无聊的人，所以，基本上多试几次，就能订到F了。不说了，我要去订车票去了&#8230;]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="train" src="https://axmemo.com/wp-content/uploads/2017/03/train.jpg" alt="train" width="570" height="230" border="0" /></p>
<p>事情的起因是最近经常要来回于杭州和北京，由于比较讨厌来回机场的奔波，所以如果有高铁的话我尽量就选择高铁了。而从杭州到北京的高铁最快也要5个小时，由于公司报销的原因，屌丝只能选择二等座，所以，就想着怎样才能用相同的价格选到更加舒服的位置。国内高铁的二等座，采用的是3+2的作为布局方式，分别为A.B.C+D.F的座位编号，所以位置的优劣应该就是F&gt;A&gt;D&gt;C&gt;B。而我们的目标，就是如何能通过网站或者客户端软件选中里面的F座。<span id="more-3286"></span></p>
<p>首先，要知道的是国内的12306网站只允许在一天内三次取消订单，而最后的座位编号是在出订单以后才确认的，所以下面的操作需要多个帐号进行配合操作。</p>
<p>接下来，我们就来说说12306的选座算法（这是我经过了几十次取消订单估算出来的，虽然说不能确保100%准确，但是实际验证下来，我后面连续七八次都可以操作成功，所以这个算法应该差不多了）。现在看来，12306采用的保留最大连续区块的算法，也就是用户发起订票操作以后，会优先选取当前车厢中的零散票，然后，再一次从前往后销售车票。</p>
<p>下面用实际场景来说几个案例，假设当前车厢第7排位置全空为例：</p>
<p>如果买1张车票，分配7A；继续买1张车票，7B；依次顺推；</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-1" src="https://axmemo.com/wp-content/uploads/2017/03/tr-1.jpg" alt="tr-1" width="540" height="114" border="0" /></p>
<p>如果买2张车票，分配7A,7B；继续买两张车票，分配7D,7F；</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-2" src="https://axmemo.com/wp-content/uploads/2017/03/tr-2.jpg" alt="tr-2" width="540" height="114" border="0" /></p>
<p>如果买3张车票，分配7A,7B,7C；</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-3" src="https://axmemo.com/wp-content/uploads/2017/03/tr-3.jpg" alt="tr-3" width="540" height="114" border="0" /></p>
<p>如果买4张车票，分配7A,7B,7C,7D；</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-4" src="https://axmemo.com/wp-content/uploads/2017/03/tr-4.jpg" alt="tr-4" width="540" height="114" border="0" /></p>
<p>我们的目的，就是要把当前的座位行的A,B,C,D填充满，但同时保留最后一个F座空闲，就可以达到我们的目标了。</p>
<p>但现在有一个问题，就是我们要确定当前排具体的剩余位置情况，也就是填充的初始值。所以，先发起1张订票申请。</p>
<ul>
<li><strong>情况A：</strong></li>
</ul>
<p>如果这1张订票获取到的是7A，也就说明待分配的这一行全空，那么取消这张订票，然后发起一次4张订票，占据7A,7B,7C,7D就可以了</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-x1" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x1.jpg" alt="tr-x1" width="540" height="114" border="0" /></p>
<ul>
<li><strong>情况B：</strong></li>
</ul>
<p>如果这1张订票是7B，那么分配前座位可能是 A,_,_,_,_,或者是A,_,C,D,F。</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border-width: 0px;" title="tr-x2" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x2.jpg" alt="tr-x2" width="540" height="114" border="0" /></p>
<p>接下来我们再发起3张订票，如果分配到的是7C,7D,7F,说明是前者，如果分配到8A,8B,8C则说明是后者。</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border: 0px;" title="tr-x3" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x3.jpg" alt="tr-x3" width="540" height="163" border="0" /></p>
<p>如果是前者，接下来我们参考（情况A）再发起4张订票就能挤出F座，如果是后者，取消这个3张订票，再按（情况A）发起4张也就能挤出F座了。</p>
<ul>
<li><strong>情况C：</strong></li>
</ul>
<p>如果这1张订票是7C，那么分配前的位置要么是A,B,_,_,_，要么是A,B,_,D,F。</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border: 0px;" title="tr-x4" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x4.jpg" alt="tr-x4" width="540" height="117" border="0" /></p>
<p>接下来我们再发起2张订票，如果分配到的是7D,7F,说明是前者，如果分配到的是8A,8B则说明是后者。</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border: 0px;" title="tr-x5" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x5.jpg" alt="tr-x5" width="540" height="163" border="0" /></p>
<p>如果是前者，接下来我们参考（情况A）再发起4张订票就能挤出F座，如果是后者，就取消这两张订票，再按（情况A）发起4张也就能挤出F座了。</p>
<ul>
<li><strong>情况D：</strong></li>
</ul>
<p>如果这1张订票是7D，那么分配前的位置要么是A,B,C,_,_，要么是A,B,C,_,F。</p>
<p><img decoding="async" loading="lazy" class="autosize" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 13px; display: inline; padding-right: 0px; border: 0px;" title="tr-x6" src="https://axmemo.com/wp-content/uploads/2017/03/tr-x6.jpg" alt="tr-x6" width="540" height="113" border="0" /></p>
<p>接下来我们再发起1张订票，如果是前者你会直接得到F座，如果是后者，那么取消订单之后再按（情况A）发起4张也就能挤出F座了。</p>
<ul>
<li><strong>情况F：</strong></li>
</ul>
<p>如果这1张订票是7F，那么，恭喜你，一次成功。</p>
<p>&#8211; &#8211; &#8211; &#8211; &#8211; 我是分割线 &#8211; &#8211; &#8211; &#8211; &#8211;</p>
<p>但是，上面的招数不一定每次都成功，因为还有一种例外情况，就是后续位置中有用户退票导致的零星空窗，这样的话，单独的1张订票就很可能被塞到后面去，这种情况就只能单独用一个帐号来填充这个空位了。</p>
<p>由于坐火车的人太多，没有那么多和我们一样无聊的人，所以，基本上多试几次，就能订到F了。不说了，我要去订车票去了&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/technology/how-to-choose-the-seat-in-12306.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>如何更好的用云盘管理文件</title>
		<link>https://axmemo.com/internet/use-cloud-storage-to-manage-files.html</link>
					<comments>https://axmemo.com/internet/use-cloud-storage-to-manage-files.html#respond</comments>
		
		<dc:creator><![CDATA[A.X]]></dc:creator>
		<pubDate>Tue, 25 Oct 2016 14:36:09 +0000</pubDate>
				<category><![CDATA[互联网相关]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[数据备份]]></category>
		<guid isPermaLink="false">https://axmemo.com/?p=3211</guid>

					<description><![CDATA[话说这两天国内互联网的一件大事，就是360云盘宣布关停服务，顿时间哀鸿遍野。我默默的打开云盘，看看上面的50T+的文件，默默的又关上了。在关闭时限之前下载完文件基本是不可能，再说50T数据如果用硬盘存储，也将是一个巨大的费用。所以只能让它随风而去了… 所以呢，今天我们就来谈谈如何更好的用云盘的管理文件和进行同步。我尝试了应用软件、NAS服务器、第三方同步服务程序等多种应用，并足足花了一天来考虑各种同步场景，希望下面的讨论，可以给你带来帮助。 一、网盘应用场景的变化 在之前很长一段时间，我都是用Dropbox来进行跨终端和系统的文件同步，不得不说，Dropbox的软件设计和同步算法非常高效。虽然服务器在国外，速度是慢了一点，但是日常的文档同步还是非常方便的。中间尝试过好几个其他的同步网盘，但都不如dropbox来的方便和智能。那时候的网盘，还仅仅是用于同步个人文件。 但是现在，网盘容量的急剧增加，使得网盘除了用于个人文件管理之外很多时候更是资源分发的渠道，这也就是为什么我会在360云盘上面有50T的资源，而这些资源，我基本只是放在那里看着爽，而不会下载回来本地的。 二、合理的区分数据类型 区分数据类型的目的是为了制定合理的同步策略，有了第一部分的讨论，建议大家把数据分为下面几类：1.个人数据，2.备份数据，3.网盘资源，4.暂存数据。 第1类数据就不用解释了；第2类数据就是那种你整理好一批音乐或者电子书籍，上传到网盘当作仓库备份用；第3类数据就是指你在网络上找到并转存的各种网盘资源；而第4类数据主要是指一些暂时的文件，可能过一段时间就会删除掉的，你需要在多个电脑上临时处理这些文件。我们可以根据数据类型的不同，来建立相应的目录层级结构，以方便后续制定不同的同步策略使用。 三、制定相应的同步策略 区分完数据类型，建立好目录结构以后，我们就要制定同步策略了。对于第1类数据，建议进行双向自动同步；对于第2，3类数据，就不要同步了，直接丢在网盘上就好，省的占据本地硬盘空间；对于第4类数据，可以根据个人需要选择同步或者不同步，个人是建议同步，反正这些数据量不大，而且会定时清理掉。 四、关于同步软件的选择 前面我试验过了好几种同步软件，最后，我还是选择了“百度云”作为最终的选择。再次声明，本人对百度并没有什么感情，这样选择也是实属无奈。前面也说了，同步机制上dropbox绝对碾压各应用，但我没有选择的原因是：速度！没错！ 选择百度云的原因在于：1.多平台支持，2.提供自动同步功能，3.上下载速度还算不错（我不会告诉你我用的XX客户端的…）。其实，我原本也想选择微云的，但是微云的软件和同步逻辑实在是烂到不行，无奈放弃。 至于为什么不选择安全性更高和更没有容量限制的QNAP私有云或者P2P云技术，说到底，还是因为速度的原因，在现在网络环境下，多个地点直接向公有云存取数据的速度已经非常快了，而点对点的私有云，因为运营商端口控制和不对等网络的原因，传输速率依然很慢。所以，我最终选择了公有云。 当然，对于隐私关键信息，例如身份证，软件许可证信息等，我是不会上传到公有云的，而是直接访问NAS的远程管理界面，通过网页的方式直接上传到私有服务器上，以确保数据信息不被泄漏。至于其他的，就随便了… 五、具体的设置方式说明 最后简单的说一下我现在的设置方式，在百度云上，根据前面的讨论设置四个目录，包括：1.个人数据、2.存档备份、3.网盘资源、4.暂存目录。其中，将个人数据和暂存目录设置为自动同步目录，就可以了。至于下面的二级目录结构，就根据个人自己的喜好来进行设定了，在此不做说明。 然后平时使用的时候，你可以将“暂存目录”建立一个快捷方式到桌面上，这样如果你想把文件从单位传输回家里，只要把文件丢到这个目录里面去就可以了。 &#8211; &#8211; &#8211; 大概就是这样子了 &#8211; &#8211; &#8211; 上面就是我花了一整天想出来的同步软件选择和同步策略，刚才把原有的自动同步目录清理了一下，有20000+的文件，我整个人是崩溃的…但是，总算把同步场景给考虑完成了，至于接下来的事情可以慢慢来完成。大家晚安！]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="sync" src="https://axmemo.com/wp-content/uploads/2016/10/sync.jpg" alt="sync" width="570" height="230" border="0" /></p>
<p>话说这两天国内互联网的一件大事，就是360云盘宣布关停服务，顿时间哀鸿遍野。我默默的打开云盘，看看上面的50T+的文件，默默的又关上了。在关闭时限之前下载完文件基本是不可能，再说50T数据如果用硬盘存储，也将是一个巨大的费用。所以只能让它随风而去了…</p>
<p>所以呢，今天我们就来谈谈如何更好的用云盘的管理文件和进行同步。我尝试了应用软件、NAS服务器、第三方同步服务程序等多种应用，并足足花了一天来考虑各种同步场景，希望下面的讨论，可以给你带来帮助。<span id="more-3211"></span></p>
<p><strong>一、网盘应用场景的变化</strong></p>
<p>在之前很长一段时间，我都是用Dropbox来进行跨终端和系统的文件同步，不得不说，Dropbox的软件设计和同步算法非常高效。虽然服务器在国外，速度是慢了一点，但是日常的文档同步还是非常方便的。中间尝试过好几个其他的同步网盘，但都不如dropbox来的方便和智能。那时候的网盘，还仅仅是用于同步个人文件。</p>
<p>但是现在，网盘容量的急剧增加，使得网盘除了用于个人文件管理之外很多时候更是资源分发的渠道，这也就是为什么我会在360云盘上面有50T的资源，而这些资源，我基本只是放在那里看着爽，而不会下载回来本地的。</p>
<p><strong>二、合理的区分数据类型</strong></p>
<p>区分数据类型的目的是为了制定合理的同步策略，有了第一部分的讨论，建议大家把数据分为下面几类：1.个人数据，2.备份数据，3.网盘资源，4.暂存数据。</p>
<p>第1类数据就不用解释了；第2类数据就是那种你整理好一批音乐或者电子书籍，上传到网盘当作仓库备份用；第3类数据就是指你在网络上找到并转存的各种网盘资源；而第4类数据主要是指一些暂时的文件，可能过一段时间就会删除掉的，你需要在多个电脑上临时处理这些文件。我们可以根据数据类型的不同，来建立相应的目录层级结构，以方便后续制定不同的同步策略使用。</p>
<p><strong>三、制定相应的同步策略</strong></p>
<p>区分完数据类型，建立好目录结构以后，我们就要制定同步策略了。对于第1类数据，建议进行双向自动同步；对于第2，3类数据，就不要同步了，直接丢在网盘上就好，省的占据本地硬盘空间；对于第4类数据，可以根据个人需要选择同步或者不同步，个人是建议同步，反正这些数据量不大，而且会定时清理掉。</p>
<p><strong>四、关于同步软件的选择</strong></p>
<p>前面我试验过了好几种同步软件，最后，我还是选择了“百度云”作为最终的选择。再次声明，本人对百度并没有什么感情，这样选择也是实属无奈。前面也说了，同步机制上dropbox绝对碾压各应用，但我没有选择的原因是：速度！没错！</p>
<p>选择百度云的原因在于：1.多平台支持，2.提供自动同步功能，3.上下载速度还算不错（我不会告诉你我用的XX客户端的…）。其实，我原本也想选择微云的，但是微云的软件和同步逻辑实在是烂到不行，无奈放弃。</p>
<p>至于为什么不选择安全性更高和更没有容量限制的QNAP私有云或者P2P云技术，说到底，还是因为速度的原因，在现在网络环境下，多个地点直接向公有云存取数据的速度已经非常快了，而点对点的私有云，因为运营商端口控制和不对等网络的原因，传输速率依然很慢。所以，我最终选择了公有云。</p>
<p>当然，对于隐私关键信息，例如身份证，软件许可证信息等，我是不会上传到公有云的，而是直接访问NAS的远程管理界面，通过网页的方式直接上传到私有服务器上，以确保数据信息不被泄漏。至于其他的，就随便了…</p>
<p><strong>五、具体的设置方式说明</strong></p>
<p>最后简单的说一下我现在的设置方式，在百度云上，根据前面的讨论设置四个目录，包括：1.个人数据、2.存档备份、3.网盘资源、4.暂存目录。其中，将个人数据和暂存目录设置为自动同步目录，就可以了。至于下面的二级目录结构，就根据个人自己的喜好来进行设定了，在此不做说明。</p>
<p>然后平时使用的时候，你可以将“暂存目录”建立一个快捷方式到桌面上，这样如果你想把文件从单位传输回家里，只要把文件丢到这个目录里面去就可以了。</p>
<p>&#8211; &#8211; &#8211; 大概就是这样子了 &#8211; &#8211; &#8211;</p>
<p>上面就是我花了一整天想出来的同步软件选择和同步策略，刚才把原有的自动同步目录清理了一下，有20000+的文件，我整个人是崩溃的…但是，总算把同步场景给考虑完成了，至于接下来的事情可以慢慢来完成。大家晚安！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://axmemo.com/internet/use-cloud-storage-to-manage-files.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
