【笔记】解决 could not load /lib/modules/2.6.35-22-generic/modules.dep

今天给ubuntu升级到10.10 ,但是开机出现错误
modprobe:FATAL: could not load /lib/modules/2.6.35-22-generic/modules.dep No such file or directory
modprobe:FATAL: could not load /lib/modules/2.6.35-22-generic/modules.dep No such file or directory

解决办法:
1:sudo gedit /etc/initramfs-tools/initramfs.conf(建议先备份一下这个文件)
把MODULES=most改为MODULES=dep
2:echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
3:sudo update-initramfs -u
参考资料:
http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=297091
http://forum.ubuntu-gr.org/viewtopic.php?f=4&t=14532&start=0

Nov 28th, 2010 | Filed under LINUX
Tags: ,

【转】ThreadLocal 解决SimpleDateFormat非线程安全

大致意思:Tim Cull碰到一个SimpleDateFormat带来的严重的性能问题,该问题主要有SimpleDateFormat引发,创建一个 SimpleDateFormat实例的开销比较昂贵,解析字符串时间时频繁创建生命周期短暂的实例导致性能低下。即使将 SimpleDateFormat定义为静态类变量,貌似能解决这个问题,但是SimpleDateFormat是非线程安全的,同样存在问题,如果用 ‘synchronized’线程同步同样面临问题,同步导致性能下降(线程之间序列化的获取SimpleDateFormat实例)。

Tim Cull使用Threadlocal解决了此问题,对于每个线程SimpleDateFormat不存在影响他们之间协作的状态,为每个线程创建一个SimpleDateFormat变量的拷贝或者叫做副本,代码如下:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 使用ThreadLocal以空间换时间解决SimpleDateFormat线程安全问题。
 * @author
 *
 */
public class DateUtil {
 
	private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
 
	@SuppressWarnings("rawtypes")
	private static ThreadLocal threadLocal = new ThreadLocal() {
		protected synchronized Object initialValue() {
			return new SimpleDateFormat(DATE_FORMAT);
		}
	};
 
	public static DateFormat getDateFormat() {
		return (DateFormat) threadLocal.get();
	}
 
	public static Date parse(String textDate) throws ParseException {
		return getDateFormat().parse(textDate);
	}
}

创建一个ThreadLocal类变量,这里创建时用了一个匿名类,覆盖了initialValue方法,主要作用是创建时初始化实例。也可以采用下面方式创建;

//第一次调用get将返回null
private static ThreadLocal threadLocal = new ThreadLocal()//获取线程的变量副本,如果不覆盖initialValue,第一次get返回null,故需要初始化一个SimpleDateFormat,并set到threadLocal中
public static DateFormat getDateFormat()
{
	DateFormat df = (DateFormat) threadLocal.get();
	if(df==null){
		df = new SimpleDateFormat(DATE_FORMAT)
		threadLocal.set(df);
	}
	return df;
}

我们看下我们覆盖的initialValue方法:

protected T initialValue() {
        return null;//直接返回null
    }

当然也可以使用:
apache commons-lang包的DateFormatUtils或者FastDateFormat实现,apache保证是线程安全的,并且更高效。

Nov 7th, 2010 | Filed under java

博客恢复访问

由于之前的服务器不稳定,经常down机,现已切换到新服务器。

Oct 24th, 2010 | Filed under OTHER
Tags:

【分享】andriod手机当电脑摄像头

今天,给大家带来的是一款android系统下的一款手机做视频摄像头。
这款软件名字叫“usbwebcam”,官方地址是:http://www.placaware.com/,E文好的朋友可以去了解一下这款软件。
软件分PC客户端及手机客户端两个软件。点击下面的链接地址分别下载相应的软件:
下载PC客户端
usbwebcam_for_android_x86_win_r0040.exe
启动的时候,要确保手机端已经打开了,并连接好USB数据线
同时注意打开:”设置“ -> “应用程序” ->“开发” -> “USB调试” 打勾,我就是因为这个原因,搞了很久
下载手机端APK
在 market 中输入 “usb webcam” ,下载安装即可
PC端及手机端安装过程就不讲了,大家应该都很熟悉。
从入手google手机那天起,我就一直在苦苦的寻找这种软件,今天终于盼到了,泪牛满面呀。

Jul 11th, 2010 | Filed under andriod

【分享】分享2个好用的andriod app

最近在andriod 论坛里逛,发现几个非常好的apps
一个是wifikeybord ,可以从电脑上连接手机,并输入文字,特别在写短信的时候,可以在电脑端直接输入,手机端就可以显示出来,很方便
另外一个是 PRemoteDroid , 可以当作无线鼠标使用
再一个就是 web sharing,可以给手机当作一个webserver,通过wifi连接,很容易上传下载手机文件

Jul 10th, 2010 | Filed under ARCH

【转】关于敏捷开发的26个心得

我收集各式各样的至理名言。最近我一直在研究敏捷软件开发;有收获吗?下面就是能够指导敏捷软件开发团队的26条核心原则。

用例一完全能够运行后再开发用例二。厨房里有一种说法正好可以印证这个问题:“做好一盘菜后你再做下一盘”. 对于软件开发来说一个最大的问题就是人们喜欢并行开发多个任务。因为不可避免的,我们设计的功能中总会有一部分会被放弃砍掉,如果提前开发,很可能做无用 功。 一次只开发一个用例(或很少几个用例,这根据你的开发团队的大小而定); 让这个用例功能完整; 让相应的测试用例都能通过; 相应的文稳都补齐; 只有在当前的用例完全开发完成后,才做为一个整体提交到版本库,才进行下一个用例。

避免提交一个半成品。 这一点大家似乎都知道,但这条原则必须列入任何一个开发指导里。 能够听取这些忠告进行开发测试然后提交代码的程序员一定不会发生代码提交到版本库使整个项目无法编译码通过情况。 如果系统编译失败,那一定是有人抄近道到了。

不要在还没有任何使用案例的情况下设计通用模块。 只有在你知道有具体用例的情况下,你才可以实现一个具体的类,而且你在该类中只应该实现当前该用例需要的方法。 你也许会想到将来这个类会有其它的用途,你可以用注释的方式记录一下,但不要去实现它,只有在有了具体用例后你才可以实现它。

一定不要在没有使用例的情况下往类里添加成员方法。 这跟上面一条极其相似,除了这里针对的是数据成员。 开发人员很容易想到:一个‘客户记录’里应该有‘送货地址’的信息,但一定不要在没有任何用例要求这个属性的时候实现这个属性。

不要害怕做决定;不要害怕改变以前的决定。 敏捷开发的目的是应对客户需求的不确定。 开发前期你不可能获到全部的信息。 你应该尽可能的拖延做决定的时间,但一旦到了你该做决定的时候,你应该当机立断,让项目向前推进。 你不能说一直等到有了足够的信息才做决定。 相反,你要依赖现有的信息作出最正确们决定。 之后,当有新的信息出现后,不要害怕对以前的决定作出更改。 (老辈人有的称之为触发器,但我称之为随环境而变)
Read more…

Jul 9th, 2010 | Filed under ARCH

有趣的漫画:客户真正的需求

项目开发过程中,由
需求 -> PRD -> 技术方案 -> 开发 -> 测试 -> 产品提交 ,但往往由于沟通或需求理解的差异,出现一些偏差,这幅漫画很形象的描述了这个过程。

点击查看大图

漫画:客户正在需要的

Jul 9th, 2010 | Filed under ARCH
Tags:

【随笔】腾讯上线团购 国内团购走向热门

据消息报道,今天上午,腾讯启用了 http://tuan.qq.com 的团购域名,表示正式涉足团购业务
也正是由于国内团购网站的快速兴起,让国内大的网站逐渐耐不住寂寞,相继推出自己的团购业务,如:千橡的 糯米,淘宝的 聚划算 ,就连百度旗下的hao123都开始开放团购api:http://www.hao123.com/tuangou.htm

Jul 9th, 2010 | Filed under OTHER
Tags:

【分享】朋友发的一个godaddy域名优惠码$0.99

分享一下:
适用范围:新注册, 转入均可

COM, NET, ORG, US, MOBI, BIZ, CA, CO.UK, IN

优惠码:soccer99

支付方式:信用卡

有效期:未知

Jul 4th, 2010 | Filed under OTHER
Tags:

【笔记】入门 - Groovy环境配置及在eclipse中第一个HelloGroovy实例

上周公司组织培训,提到了运用groovy进行热部署,可以进行一些应急处理
今天正好有空(周末 ^_^),顺便动手了解一下,做个记录,供参考
1:安装groovy fro eclipse 插件
plugins 已经是2.0版本了,并且支持3.5和3.4.2的eclipse。
我的eclipse版本是 3.5,下面一起安装这个插件

Help -> install new software -> add -> 输入 name:groovy Location:http://dist.springsource.org/release/GRECLIPSE/e3.5/
然后Next -> finish 就完成了

2:安装groovy jdk 包
到官方网站上:http://groovy.codehaus.org/Download 下载相应版本的groovy
我下载的是:http://dist.codehaus.org/groovy/distributions/installers/windows/nsis/groovy-1.7.3-installer.exe
注意:Groovy默认是安装在Windows Program Files 下,安装路径中不能出现空格.所以,将默认的安装路径c:\Program Files\Groovy替换成类似于D:\java_server\java\Groovy 的路径
安装的最后,会自动创建 windows path
3:HelloWorld 检测是否正常
安装完后,到安装根目录下的bin中,运行 groovyConsole.exe

如果运行正常的话,说明groovy配置成功

4:在eclipse中创建HelloGroovy工程
安装完eclipse插件完,需要重启eclipse
然后:
在 Package Explore 中创建工程:
new -> other -> Groovy Project

然后 Next,输入Project Name: HelloGroovy -> Finish
在新创建的HelloGroovy.groovy 文件中输入:

class HelloGroovy{
 static void main(args) {
   println "Hello groovy"
 }
}

最后,运行groovy
右键 Run as -> groovy script
grovy run as
上面是直接创建groovy的工程,也可以在原有java工程基础上支持groovy
在普通java工程上右键:Configure -> Convert to Groovy Project

总结:groovy其实就是java,只不过语法有一些差异,编译完的字节码完全符合java规范

Jul 4th, 2010 | Filed under groovy
Tags: