iPhone 5 进水换电池纪录

  国庆期间很不幸的把手机掉水盆里了,完完整整的泡了几秒钟。赶紧关机后置于米袋中大半天后,发现屏幕里面还是有水迹,随后拿到就近的手机维修店开机烘烤了个把小时,总算把水迹弄干了,没过多检查就先拿回家了。

  用了一段时间后发现电池出现了异常,电量指示的百分比在开机后就不会再变了,每次都是开机时的电量,且在电量低于40%左右,会频繁的重启,几乎无法使用。于是想到用iTools的“电池专家”来看看有无头绪,果然已经检测不到电池容量了,电压,温度,充放电循环次数都无法显示,仅剩一个序列号。出于职业习惯,打开了系统实时日志,发现大量的Error是在获取电池信息,具体为:

CLTM[23] <Error>: CLTM: Could not get event from service (gas gauge battery)
CLTM[23] <Error>: CLTM: Could net get value for gas gauge battery
...

  至此有七成把握是电池上的芯片出问题了(这块的电路无法完全断电),当然也有可能是主板的电源接口附近的某个部件短路而损坏,但几率小得多。这也是为什么一定要尽快关机的原因,如果能直接扣电池则最好。更具体来讲可以参考这篇博客,详细解释了iPhone电池的四个连接点用途。可见正是因为第三根SWI信号线失去了作用,导致的报错。

  后来在万能的淘宝上购买了一块副产电池,抱着试一试的心态,发现果然正常了,看来这台iPhone 5还能多用一段时间。之所以没有选择原厂Sony电池是因为毕竟机器已经停产很久了,即便有也是放置了很久的,还不如副产出产较新的好点。换电池过程比较简单,卸下底部的两个螺丝,用吸盘吸住底部屏幕,用点力气就可以将屏幕抠出来。这里要注意顶部的排线,屏幕抬起角度不要超过90度。实际上iPhone 6以后都采取了防水设计,可以有效的阻止水侵入内部。

为花图相册开启全站https

是否为花图相册开启全站https其实考虑已久:一来是发现目前越来越多的网站都走向了https,即便不是电子商务的网站,例如百度。二是服务器计算能力越来越强大,似乎也不必要在乎加解密,握手所消耗的这点资源。三是出于程序员思维,好东西自然要折腾一番,且不说在Chrome地址栏中绿色的scheme是多么的诱人。

1. SSL证书分类

SSL证书大致可以分为Class 1~5这五种,级别依次递增,数字越高,信用级别越高,自然收费也更高。
Class 1(DV),只验证域名真实性,即保证所访问的域名是真实有效的,这个级别的证书申请也是最简单的,只需提供域名管理者邮箱或者以域名为后缀的几个特定邮箱即可。通常用于个人或邮件。
Class 2(IV)验证域名和个人身份证明。
Class 3(OV)验证域名和组织机构信息。
Class 4(EV)电子商务,网上交易等。
Class 5私有组织或政府部门,比较少见。

这里虽然有等级之分,其实也就是准入门槛越来越高而已,增加了造假难度,但底层加密方式可以都是一样的。

2. 证书申请

这里不得不提到两家免费证书提供商,国内的Wosign和国外的StartSSL,这两家都有试用过,这里简单记录下使用过程:

Wosign的免费证书申请地址隐藏比较深,官网拉倒最下面才有个注册入口。由于是国内的,注册就容易多了,基本上顺着向导很容易就能拿到证书,而且提供的证书非常全面,涵盖了常用的几个服务器,包括Apache,Nginx,Tomcat等,可以说非常便捷。

StartSSL就麻烦多了,首先注册时候填写的资料必须是个人的真实的,或者说看起来要真实。其二需要人工审核,一般也很快,十分钟左右就能收到邮件。而这家最该死的设计就是以后的登录必须靠首次登陆所安装的证书来识别,因此需要备份好证书。可惜的是我这里Chrome下首次安装失败了,建议用IE。意味着我只要退出登录了就再也进不来了。不过并不妨碍继续申请域名证书,首先是验证域名,再申请证书,得到的私钥需要用openssl解密,或者在toolbox中在线解密。然后再下载他们家的sub class1证书附加到域名证书中,才可以正常使用。

在实际测试中,Wosign的免费证书顶级CA居然是StartSSL签发的,Wosign作为一个二级CA,有点奇怪,证书链比StartSSL多一层,理论上验证也要花费更多时间。

3. Nginx服务器配置

主要是增加443端口监听,别忘了在防火墙上也要允许通过443端口。开启ssl,很简单。ssl_ciphers可能还需要优化,目前来讲RC4算法已经不太安全了,可以禁用。由于加密所需要的握手次数和时间都增加不少,因此很有必要调节下ssl_session的缓存大小和超时时间。官方资料是1m cache大概能存储4000个会话,timeout 10m是十分钟。部分代码如下:

listen       80;
listen       443 ssl;
server_name  snapast.com www.snapast.com;

ssl			on;
ssl_certificate		/etc/nginx/ssl/ssl.crt;
ssl_certificate_key	/etc/nginx/ssl/ssl.key;
ssl_protocols		TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 		EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers	on;
ssl_session_cache	shared:SSL:10m;
ssl_session_timeout	10m;

开启后,还需要将非https请求从定向到https,这里我做了两步处理:首先host不等于snapast.com的转为snapast.com,即将带www的转为不带www。scheme不是https的转到带https,同时带上上下文和参数。

if ($host != 'snapast.com') {
rewrite ^/(.*)$ https://snapast.com/$1 permanent;
}

if ($scheme != "https") {
rewrite ^/(.*)$ https://snapast.com/$1 permanent;
}

4. 其他说明

Tomcat也可以开启http所访问,但由于都是内网,因此没必要再开启https了,但需要注意的是,在Tomcat看来还是http的请求,所以通过request.getScheme()得到的依然是http,凡有用到的需要注意一下,容易出现在拼接basePath的地方。

出于安全规范,全站https后,若有脚本等资源还是http引入的浏览器都会拒绝加载,而我之前用的51.la统计工具便不支持https,试过腾讯统计也不支持,目前发现百度统计可以用,因为他的脚本没有限定scheme。

到此就算完成了,欢迎访问花图相册看效果:https://snapast.com:cool:

使用Java控制路由器获取公网IP

  不知道是公网IP不够用了,还是什么鬼原因,近期我这的联通ADSL拨号很大程度上获取的是一个10.开头的内网IP。虽说通常情况下无需关心,但跑PT,VPN等速度上大打折扣。投诉无果后只能自己写个脚本来自动更换IP。

  其原理很简单,模拟登录到路由器上检查WANIP是否是10.或0.开头,如是则断开重连,以此循环。代码是Java编写,无任何依赖,运行在树莓派上,24小时监视,在运营商完全分配内网IP之前还可以挣扎一阵子。有需要的朋友可以参考下。

  我这用的是TP-LINK WR720N路由器,设置了局域网IP为192.168.30.1 端口88,通过Chrome登录到路由器,可以在开发者工具中查看到Basic加密的Key,替换相应的位置即可。

查询IP的链接

http://192.168.30.1:88/userRpm/StatusRpm.htm

断开拨号的链接

http://192.168.30.1:88/userRpm/StatusRpm.htm?Disconnect=%B6%CF%20%CF%DF&wan=1

重新拨号的链接

http://192.168.30.1:88/userRpm/StatusRpm.htm?Connect=%C1%AC%20%BD%D3&wan=1

代码如下:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckIP {
	private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

	public static void main(String[] args) throws Exception {
		do {
			String currentIP = getIP();
			if (currentIP.startsWith("10.") || currentIP.startsWith("0.")) {
				System.out.println(simpleDateFormat.format(new Date())
						+ " 检测到异常:" + currentIP);
				getHtml("http://192.168.30.1:88/userRpm/StatusRpm.htm?Disconnect=%B6%CF%20%CF%DF&wan=1");
				Thread.sleep(1000 * 1);
				getHtml("http://192.168.30.1:88/userRpm/StatusRpm.htm?Connect=%C1%AC%20%BD%D3&wan=1");
				Thread.sleep(1000 * 3);
			}
			Thread.sleep(1000 * 3);
		} while (true);
	}

	private static String getIP() throws Exception {
		String wanPara = getHtml("http://192.168.30.1:88/userRpm/StatusRpm.htm");
		if (null != wanPara) {
			wanPara = wanPara.substring(wanPara.indexOf("var wanPara"),
					wanPara.length());
			wanPara = wanPara.substring(0, wanPara.indexOf(");") + 2);
		}
		return getFirstIp(wanPara);
	}

	private static String getHtml(String address) throws Exception {
		URL url = new URL(address);
		URLConnection connection = url.openConnection();
		connection.setRequestProperty("Authorization", "Basic YWRtaW46d3Npa3Nr");
		connection.connect();
		InputStream inputStream = null;
		StringBuffer stringBuffer = new StringBuffer();
		inputStream = connection.getInputStream();
		BufferedReader bufferedReader = new BufferedReader(
				new InputStreamReader(inputStream));
		String line;
		while ((line = bufferedReader.readLine()) != null) {
			stringBuffer.append(line);
		}
		bufferedReader.close();
		inputStream.close();
		return stringBuffer.toString();
	}

	private static String getFirstIp(String packet) {
		Pattern p = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");
		Matcher m = p.matcher(packet);
		if (m.find()) {
			return m.group();
		} else {
			return null;
		}
	}
}

编译

pi@raspberrypi ~ $ javac CheckIP.java

后台运行

pi@raspberrypi ~ $ nohup java CheckIP &

日志

pi@raspberrypi ~ $ tail -f nohup.out 

StarTech 3.5寸移动硬盘盒

  随着拍摄的照片越来越多,一个500G的移动硬盘和Macbook的256G空间已经快塞满了,于是再购置了一块3.5寸台式机硬盘。由于是连接到Macbook使用,必须要再加装移动硬盘盒。

  要是没有特别要求,那这事就简单了,市面上硬盘盒一大把,十几上百的都有。可偏偏符合我要求的就少之又少,主要要求如下:

  1. 支持Mac USB 3.0 (5 Gbit/s)
  2. 支持硬盘4T以上
  3. 支持硬盘SATA III (6 Gbps)
  4. 支持UASP协议
  5. 支持智能休眠,磁盘卸载,自动停转
  6. 稳定,可长时间运行
  7. 仅需要1个盘位

  好吧,这样一来,没多少可选的了。本来早在今年4月份就在JD一起下单买了希捷2T和数据巴士S320I,结果S320I唯独不支持Mac系列的USB 3.0,表现为读取缓慢,并且掉盘,极其严重的问题,导致丢失了好几百张照片。后来看说明书上的系统支持里面Mac那一栏居然写着一串小字,不支持USB 3.0,但购买的时候网上介绍都没特别说明,只是概括的说支持Mac电脑,看来是信息没有及时更新。后来在一台Windows主机上测试,一切正常。数据巴士的做工真是无力吐槽了,明明设计是免工具插拔的,结果硬盘塞进去,非得用蛮力才能拔出,检查一看是一个塑料卡脚太粗了,死死的卡在硬盘螺丝孔内,导致难以取出,无奈只好退货。后来官方客服说是芯片太老了,新款有几个是可以的,不过不打算再试了。

  最后在美亚上找了一款,也就是现在测试的StarTech.com HDD Enclosure with UASP (S3510BMU33B),支持USB 3.0,SATA III硬盘,有散热风扇。虽说也不确定是不是知名度很高的品牌,不过这小众需求压根也没大厂看得上。从startech.com官网看了下,还挺正规的,产品种类齐全,各种参数一目了然,价格也不贵,最重要的是明确支持Macbook USB3.0和UAPS协议,邮件客服响应速度也挺快的。直邮过来,正好今天收到了,迫不及待的开箱测试了一番。通过Blackmagic旗下的Disk Speed Test软件测速,顺序读写均能稳定在200MB/S,结果大大出乎意料,基本上是目前机械硬盘的极限速度了。而之前在Windows上测试S320I也才100多的水平,看来UASP协议还是有点用的,据说这个是为SSD硬盘准备的。

  接下来就是迁移照片了,我习惯在Lightroom中导入并管理照片,一般情况下都会保留相机原始的RAW文件,所以体积比较大。很简单直接将源路径的照片剪切到移动盘,再通过Lightroom的查找丢失照片选择新的目录,就可以完成迁移了。粗略算了下,从10年到今天共计16451张照片,167.54GB,也算是个不小的战绩了。

IMG_0170IMG_0174speed

时代的车轮

  再一次看到百度空间即将关闭的提示,不得不表示遗憾。

  2007年至2010年间,正好是整个大学生涯,在百度空间上纪录了不少的东西。大约150篇的文章,虽说都是些折腾的纪录,在现在看来也没多少技术含量。不过恰逢和朋友吹水聊天的时候,偶尔触及一些话题也能让人发出“当年如何如何”的感概时候,这时候如果能找到当时的文章就显得有理有据了,吹牛逼格瞬间高了几个档次。当然更大的价值还是在于自己。现在的问题是要关闭了,各种原因就不用说了,总归是人去楼空,时代变了。百度也算做了个好事,都备份到网盘了,只不过只能自己浏览。也罢,免的我写脚本导入到这个博客。

  作为混迹在互联网上近十多年的“老江湖”也遇到过不少的服务曾经红极一时,而后随着大势起起伏伏,转型的,倒闭的不计其数。最初用过pjblog程序搭建过一个博客,也写过不少心的。而后微软的asp渐渐淡出,接班人php一路红火起来,于是我也转到wordpress阵营。在那个还不需要备案的年代,虚拟主机满天飞,质量也良莠不齐。用现在角度来看就是野蛮生长状态。放纵下的自由竞争,同时也富裕了一大批“站长”们。

  我想这是为免费付出的代价,倒不是说如果一开始收费就能一直存在下去,或许用户早就跑了。而是即便有付费用户,但整体用户使用率下降,产生的信息交换越来越少,不足以维持高额的运营成本,势必要转型或关闭了。互联网用户都是实实在在的人,不断成长,从一个圈子转移到另一个圈子。人们只会对新事物才有好奇心,时代的车轮总是不断的向前滚动,谁能说得定呢。任何看似大众的事物都有可能变的小众,这也是我一直对“云”的看法。在时间的长河中,产品如何求的生存,但我想一定不能只靠“大众”。

  ”It was the best of times, it was the worst of times.”