Android取MAC地址

2014年3月24日 没有评论

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

问题来了,需要有一个唯一标识来识别这个设备。比如软件重装了,唯一标识就变了,跟之前的记录连不上,这就有问题了。
我首先想到的是mac地址,用的是这个方法

Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
	NetworkInterface ni = nis.nextElement();
	if (ni.isLoopback()) {
		continue;
	}
	if (ni.getHardwareAddress() == null)
		continue;
	return ni.getHardwareAddress();
}

除了loopback外,取第一个。
后来很悲剧的发现,重装后(也可能是做了别的什么操作),这个值会变,我把getNetworkInterfaces()全列出来,大概有七八个。
其中有一个name很面熟wlan0,确认它是wifi无线网卡,就果断用它。
试用发现,当wifi未连接时,这一项就没有。结论是:此路不通。
更多内容…

Java中byte做位运算的问题

2014年3月24日 没有评论

今天看到一段代码,有个比较经典的错误。一般喜欢搞协议编解码或自己实现持久化的童鞋应该都会碰到。

    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;
    }

更多内容…

分类: 工作 标签: , , ,

Tomcat莫名挂掉问题调查

2014年3月20日 没有评论

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

更多内容…

分类: 工作 标签: ,

一次诡异的内存溢出问题

2014年3月13日 没有评论

有一台服务器,连续几次出现问题,表象如下:
1、ssh上去,不管输入什么命令,全是同一个错误提示

-bash: fork: Cannot allocate memory

2、偶尔可以成功执行命令,free -m的结果如下,free的内存还是很充裕的,8G

             total       used       free     shared    buffers     cached
Mem:         15949       1069      8880          0         67        6359
-/+ buffers/cache:        642      15307
Swap:          999          0        999

3、Java Application的日志中有大量的OutOfMemoryError

java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:597)

更多内容…

初次用Python笔记

2014年2月27日 没有评论

没想到自己会有用Python写东东的时候,记一下这次碰到的几个简单的用法,备忘
基本规则:
别的语言中的{}代码块,用制表符(\t)也就是缩进取代
句末的结束符;可有可无

1、字符串拼串

a = "xx"
b = "xxx"
c = "xxxx"
xxx = ("aaa %s bbb %s ccc %s" % (a,b,c))

更多内容…

分类: 工作 标签: , ,

Zookeeper的Javaclient现空指针异常

2014年2月21日 2 条评论

一个困扰很久的问题,服务启动后,就抛这个异常,异常栈只有这么多

2014-02-20-01:15:29,002 ERROR   - Error while calling watcher
java.lang.NullPointerException
        at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:519)
        at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:495)

使用的zkclient版本是3.4.5

		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.5</version>
		</dependency>

当时没发现对业务有什么影响,就放着没管,今天找机会挖了一下。
更多内容…