2014年3月

做互联网的,提到地图,就想到google,然后想到百度。
google的卫星地图在进行拼接的时候,每一块就这种图片:
http://mt3.google.cn/vt/[email protected]&hl=zh-CN&gl=CN&src=app&x=53975&y=24816&z=16&s=Galile
这个x、y是什么呢?就涉及到墨卡托投影,具体含义可以自行百度或google。

- 阅读剩余部分 -

上回书说到说mac地址,这次的其实还是同一个东东,只不过想自动收集周边的wifi及基站信息。
基站信息且不谈,wifi列表很有特点。
我的策略是当定位成功,发现离上次定位点超过50米时,记录下周边的wifi及基站列表。
用我的三星mega在城铁上测试,基站变化很及时,wifi列表存在刷新周期的问题:城铁跑了几公里,wifi列表取出来的还是同一批,这显然有问题。
临时用一个很低劣的手段处理:当发现本次的wifi列表跟上次完全相同时,忽略本次wifi列表采集。这样只会取位移变化达到条件时,第一条发现这批wifi的位置,相对来说更准确一些。
当然了,事情到这还没完。

- 阅读剩余部分 -

纯属个人兴趣,最近学Android开发,搞了个小软件,用来跟踪使用者,记录这个设备在什么时间在哪个位置,及海拔和速度。
准备搞成自己的航迹图,将来哪天想查一天,自己某天的某时去了哪里,可以直接查到。自己的忠实记录仪。
采集后本地存储,有网就上传,然后通过百度地图或google地图实时跟踪。
当然,由于伟大的GFW,我不得已选了百度地图,不过用起来扩展性也还行。好吧,跑题了。

问题来了,需要有一个唯一标识来识别这个设备。比如软件重装了,唯一标识就变了,跟之前的记录连不上,这就有问题了。
我首先想到的是mac地址,用的是这个方法
[code]
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
NetworkInterface ni = nis.nextElement();
if (ni.isLoopback()) {
continue;
}
if (ni.getHardwareAddress() == null)
continue;
return ni.getHardwareAddress();
}
[/code]
除了loopback外,取第一个。
后来很悲剧的发现,重装后(也可能是做了别的什么操作),这个值会变,我把getNetworkInterfaces()全列出来,大概有七八个。
其中有一个name很面熟wlan0,确认它是wifi无线网卡,就果断用它。
试用发现,当wifi未连接时,这一项就没有。结论是:此路不通。

- 阅读剩余部分 -

今天看到一段代码,有个比较经典的错误。一般喜欢搞协议编解码或自己实现持久化的童鞋应该都会碰到。
[code]
public static long toLong(byte... b) {
long l = 0;
int len = b.length;
if (len > 0) l = b[0];
if (len > 1) l = ((long) l << 8 | b[1]);
if (len > 2) l = ((long) l << 16 | b[2]);
if (len > 3) l = ((long) l << 24 | b[3]);
if (len > 4) l = ((long) l << 32 | b[4]);
if (len > 5) l = ((long) l << 40 | b[5]);
if (len > 6) l = ((long) l << 48 | b[6]);
if (len > 7) l = ((long) l << 56 | b[7]);
return l;
}
[/code]

- 阅读剩余部分 -

一台测试服务器上的Tomcat进程经常莫名挂掉,无任何异常信息。
因为之前有killall java的先例,就按这个思路查,未果。
后来发现上面别的Tomcat正常,怀疑是应用本身的问题。
于是,加上gc日志,等待下一次的挂掉。

- 阅读剩余部分 -

有一台服务器,连续几次出现问题,表象如下:
1、ssh上去,不管输入什么命令,全是同一个错误提示
[code]
-bash: fork: Cannot allocate memory
[/code]
2、偶尔可以成功执行命令,free -m的结果如下,free的内存还是很充裕的,8G
[code]
total used free shared buffers cached
Mem: 15949 1069 8880 0 67 6359
-/+ buffers/cache: 642 15307
Swap: 999 0 999
[/code]
3、Java Application的日志中有大量的OutOfMemoryError
[code]
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
[/code]

- 阅读剩余部分 -