leisure

JAVA - exceed,helloworld
随笔 - 50, 文章 - 0, 评论 - 11, 引用 - 0
数据加载中……

nginx gzip 代理服务器没效

昨天新上线了一个新应用。经测试发现,采用代理,没有开启到gzip压缩。
查了一下API,将gzip_proxied设为any即可。
gzip_proxied系根据某些请求和应答来决定是否在对代理请求的应答启用压缩。

posted @ 2011-11-16 14:53 leisure 阅读(429) | 评论 (0)编辑 收藏

utuntu登录qq(qq2010协议)

#add-apt-repository ppa:microcai/forchina
#apt-get install libqq-pidgin
如果安装过程中提示E: Unable to locate package libqq-pidgin,请先更新一下库:
#apt-get update

接着重新再安装一次。安装完后,在empathy中添加账号,在高级处,记得把qq2008改成qq2010这个协议了!

posted @ 2011-11-12 16:17 leisure 阅读(379) | 评论 (0)编辑 收藏

ubuntu开启ssh服务

ubuntu默认情况下只安装了openssh-client,没有安装openssh-server。
#sudo apt-fast install openssh-server
#/etc/init.d/ssh start
#netstat -tlp
显示tcp 0 0 *:ssh *:* LISTEN即说明SSH启动成功。

posted @ 2011-11-06 12:54 leisure 阅读(223) | 评论 (0)编辑 收藏

ubuntu安装五笔输入法(ibus-table-wubi)

IBus-Table是为基于码表的输入法即所谓的形码开发的输入法框架,常见的形码有郑码、五笔、仓颉、二笔等。

安装如下:
# apt-get install ibus-table-wubi

开启ibus输入法,按操作提示即可。
System - Preferences - Keyboard Input Methods

开启完后,回到刚才的配置选项
Input Method - 选择 Chinese - 五 Wubi86 - Add

在文本框里,ctrl + space即可切换输入法。

默认情况下,ibus-table不开启直接上屏模式(即敲完四个码,没有重码时,直接显示到屏幕上),在五笔输入法下 Ctrl + / 即可。

开机自动启动ibus
System - Preferences - Startup Applications - Add
Name: ibus daemon
Command: /usr/bin/ibus-daemon -d
Comment: start ibus daemon when gnome start

posted @ 2011-11-06 12:31 leisure 阅读(39759) | 评论 (2)编辑 收藏

android浏览本地html

android访问本地html,有几种方法。

1,可以采用自带的浏览器,地址栏键入content://com.android.htmlfileprovider/sdcard/index.html

2,可以通过opera浏览器,地址栏输入file://localhost/mnt/sdcard/index.html

3,通过ireader直接打开浏览

看html文档的话,第一,二两点完美,可以灵活缩放,浏览起来跟在线浏览没区别,至于第三点,不支持缩放,并且样式也有点小问题。另外,第一点可以直接打开apk,而第二点需要先下载,根据提示打开。呵呵,这种情况适合刷了官方room并且没有文件浏览器的情况下安装软件。

posted @ 2011-11-05 20:17 leisure 阅读(1124) | 评论 (0)编辑 收藏

resin下定义mime-mapping

mime-mapping系web服务器提供给web站点管理员能够将文件扩展名与媒体相关联的方法。
由于某种原因,有些请求到了/favicon.ico。chrome变了下载。
resin的conf/app-default.xml
<mime-mapping extension=".ico" mime-type="image/jpeg"/>

posted @ 2011-11-03 15:47 leisure 阅读(370) | 评论 (0)编辑 收藏

SimpleDateFormat多线程并发下的不安全隐患

最近偶然发现一些数据的日期有错乱,而且时间出错格式无规律,有些去了1970年了,有些月份错了,有些号数变了,而日志上看并没有异常信息!

根据用户反应,常出现在某个批量更新操作中,于是乎,也按照用户描述的,线下操作了数遍,也没有出现这种情况。

有趣的是,就算在线上操作,也并不是一定会出现这种问题,只是偶然!

我开始怀疑底层代码问题了,因为那个操作,并没有修改到日期相关的字段,为了证实这点,经过我一番的排查,
问题终于定位在DateUtil.parse等方法上,parse方法调用了一个静态的simpleDateFormat.parse方法,为什么?!为什么这个方法不稳定的?
仔细阅读了java.util.SimpleDateFormat的api,发现此信息:

Synchronization

Date formats are not synchronized. It is recommended to create separate format instances for each thread.
If multiple threads access a format concurrently, it must be synchronized externally.


很明显simpledateformat并不是线程同步的,以致并发的时候不安全!为了证实这点于是乎写了一个简单的测试程序。

package com.leisure;
import java.text.ParseException;
public class TestSimpleDateFormatThreadSafe extends Thread {
    @Override
    public void run() {
        while(true) {
            try {
                this.join(2000);
            } 
catch (InterruptedException e1) {
                e1.printStackTrace();
            }
            try {
                System.out.println(DateUtil.parse(
"2011-10-11 06:02:20"));
            } 
catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        for(int i = 0; i < 20; i++)
            new TestSimpleDateFormatThreadSafe().start();
    }
}

package com.leisure;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

    
public static Date parse(String str) throws ParseException {
        
return sdf.parse(str);
    }
}

输出结果:

Tue Oct 11 18:02:20 CST 2011

Tue Oct 11 18:02:20 CST 2011

Sun Oct 11 18:02:20 CST 1970

Tue Oct 11 18:02:20 CST 2011

Thu Jan 01 18:02:20 CST 1970

Sat Dec 11 18:02:20 CST 2010

Tue Oct 11 18:02:20 CST 2011

Exception in thread "Thread-18" java.lang.NumberFormatException: multiple points

at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)

at java.lang.Double.parseDouble(Unknown Source)

at java.text.DigitList.getDouble(Unknown Source)

at java.text.DecimalFormat.parse(Unknown Source)

at java.text.SimpleDateFormat.subParse(Unknown Source)

at java.text.SimpleDateFormat.parse(Unknown Source)

at java.text.DateFormat.parse(Unknown Source)

at com.leisure.DateUtil.parse(DateUtil.java:12)

at com.leisure.TestSimpleDateFormatThreadSafe.run(TestSimpleDateFormatThreadSafe.java:16)

Fri Dec 23 19:02:20 CST 2011

Fri Dec 23 18:02:20 CST 2011

输出结果很明显了,跟线上数据出现的问题基本一致。不过按照这里看到的结果,有报错,再仔细阅读了应用的底层代码,
某个位置拦截了部份异常,没有记录也没有向上抛出处理,到这里,我只想问一句:底层代码谁写的?

posted @ 2011-10-15 00:22 leisure 阅读(2845) | 评论 (0)编辑 收藏

30个开发人员最常用的linux命令

free 查看内存使用信息
top 显示cpu进程信息
ps 显示进程列表
kill 杀死进程
df 查看硬盘剩余空间
crontab 系统定时任务
passwd 密码管理
cal 查看日历
date 查看时间
chmod 改变文件权限
clear 屏幕显示信息太多?清理一下
cat/tail 查看文件
sort 排序文本内容
vi 编辑文件
find 查找文件
grep 查找文件中配匹配的信息
cp  复制文件
touch 创建文件
mv 移动文件
rm 移除文件
ls 显示目录的文件列表
mkdir 创建文件夹
tar GNU 压缩工具
make GNU make 工具
gzip zip压缩工具
ln/lndir 建立链接
mount 挂载信息
ftp ftp链接工具
telnet telnet连接工具
ssh ssh连接工具

posted @ 2011-10-14 10:44 leisure 阅读(271) | 评论 (0)编辑 收藏

Internet Explorer 无法打开Internet 站点http://xxx.com 已终止操作


Internet Explorer 无法打开Internet 站点http://xxx.com
已终止操作
确定
在ie6或者ie7,会出现这种情况,原因绝大多数是在页面尚未加载完就操作节点。

解决方法:把初始化操作的脚本放到页面底部,或把初始化操作的脚本放到window.onload函数中,如果是加载外部script,在script标签中加入class="defer"属性。
注意:曾经尝把初始化操作脚本放在setTimeout函数中,经长期测试,绝大多数时候可行,但在页面数据比较多,刷新多次偶然也会出现!

posted @ 2011-10-13 10:21 leisure 阅读(660) | 评论 (0)编辑 收藏

jstl创建map和对map赋值

jstl本身是没有语法技持创建对象的,不过我们可以使用jsp:useBean标签来创建,然后使用c:set标签来赋相
应的值。
<jsp:useBean id="map" class="java.util.HashMap" scope="request">
<c:set target="${map}" property="a" value="b" />
</jsp:useBean>
${map}
另外c:remove可以移除相应的属性。

posted @ 2011-10-12 08:46 leisure 阅读(1420) | 评论 (0)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5 下一页