Latest Entries »

百日祭

100天了,不知道是怎么度过的,北京的阴雨连绵又来了,好压抑,好想念,好伤心,好孤独。

 

爸妈,我100天没有见到你们了。不知道你们什么时候才会回来,也不知道咱们什么时候才能相见。

 

就连唯一能在梦里见到你们的机会,你们也不愿意给么?

生活的将来

毕竟,人不能总是活在悲伤中,事情过去了20多天了,虽然我的情绪还是不是很稳定,但是基本上要比以前理智得多了,很多事情我们无法预测,看似完美的事情,也许只需要一瞬间,就能变得支离破碎,但是即使真的是支离破碎了,活着的人,总是仍然还要继续活下去,继续的奋斗,红尘之中,也许不知道自己哪天就要离开,但是我们都没得选择。

我现在的担忧开始渐渐的变多,可惜这些要来的事情是谁也无法阻止的,也许这就是生活,充满了戏剧性,不确定性,但是为什么我们的故事充满了悲剧,那么多幸福的人,我们就不能成为他们之中的一员么。我们注定就要悲剧下去么?

我很不服气,非常的不服气,妈的,为什么我就要这么悲哀,我要奋斗,我要奋斗!不管遇到什么困难,除非我死了,否则生命不息,奋斗不止!

最近的心情

我想我终于开始有资格提这2个字了,悲伤。原来这种感觉这么难以形容。甚至还有一种看破红尘的错觉,有人说悲伤的人心会痛,可是我却没有感觉到,我只是感觉到难以呼吸。无法入睡,闭上眼睛就是各种往昔的时光,像一部电影一样,不停的在眼前播放,憋得很久以后,就必须得从床上坐起来,然后再屋子内不停的踱步,也不知道目的是什么,反正就是要不停的踱步。这样似乎可以减少一下内心的憋闷,让呼气和吸气变得顺畅一些。有时候我会目不转睛地看着一些旧的物什,然后根据这个物什,回忆起当初的那些岁月来,有时候我会觉得空气中有某些灵异的存在,他们在看着我,担心着我,不放心我们能撑起这种悲伤,不放心我们将来能撑起这个家,然后照片中的他们却永远都是笑着的,也许是因为那只是记载了当初的心情吧。我很想知道他们在那边过得到底好不好,可是我越想知道就越觉得自己无法知道,有时候我想我应该快点死掉,这样就可以看到那边的光景了。就可以看到他们了,然后我就知道答案了,可是我又知道,生命不能重新来过。死了就不能再活了。有时候我空坐着,就是那么的空空的坐着,似乎人也是空着的,座子也是空着的。我在想什么呢,我在想过去,大部分都是过去,因为他们活在过去,然后我会想流泪,是悲伤的眼泪么,也许吧,于是我不打算让他们流下来,所以我开始想其他的事,想现在,现在还没有处理完的事情,可是这样我又开始烦乱,觉得没有希望,周围的人都在鼓励我,说没有过不去的坎儿,我觉得是有的,例如死亡,怎么也不能再活过来。当思绪怎么逃避不了的时候,我开始让自己转移注意力,想想工作,想想将来,想想我的女朋友。然后心情似乎就会稍微舒畅些。我和我哥都在和努力的想继承一些东西下来,除了这不算很小的家业外,倒也没什么其他的了,还好我们都是佛教徒,虔诚的很,所以对于生老病死也都还算看得开些吧。师傅也说,这应该也是前世业力吧。

using namespace std;
#include <iostream>
#include <ctime>
/**
* 实现线程休眠的函数
**/
int my_sleep(unsigned int sleepSecond)
{
timeval t_timeval;
t_timeval.tv_sec = sleepSecond;
t_timeval.tv_usec = 0;
select( 0, NULL, NULL, NULL, &t_timeval );
return 0;
}
int main (int argc, char * const argv[]) {
string fanguan[] = {
“我擦,恭喜你,得去吃烤肉啦!!”,
“冰城”,
“太熟悉”,
“肉饼”,
“面馆”,
“大成旺家”,
“驴火”
};
int fanguan_size = sizeof(fanguan)/sizeof(fanguan[0]);
cout << “一共有” <<fanguan_size<<”种选择:” << “\n”;
char quit = ‘a’;
bool already_selected = false;
srand(time(0));//声明一个随机时间种子
while (quit != ‘q’) {
if(!already_selected){
cout << “做好选餐馆的准备了吗?(Y/N)” ;
}else{
cout << “还要继续吗?(Y/N)” ;
}
cin >> quit;
if (quit == ‘d’ || quit == ‘D’) {
cout << “让我们屏息以待。。。。。。。。。。。\n”;
my_sleep(2);
for(int i=0; i<100; i++){
int result_index = rand()%time(NULL)%(fanguan_size – 1 );
cout << “\n激动人心的结果出来了:” << fanguan[result_index] << “\n”;
}
already_selected = true;
}else if (quit == ‘Y’ || quit == ‘y’) {
cout << “让我们屏息以待。。。。。。。。。。。\n”;
my_sleep(2);
int result_index = 1 + rand()%time(NULL)%(fanguan_size – 1 );
cout << “\n激动人心的结果出来了:”<< fanguan[result_index] << “\n”;
already_selected = true;
}else {
cout << “我知道,你的手在颤抖。。。。。\n”;
already_selected = true;

}

}
return 0;
}

http://taeky.javaeye.com/blog/575257

留个记号,以便将来忘记

int a = 1;//假设这是权限设置第一位
int b = 2;//第二位
int c = 4;//第三位
int d = 0;//第四位没有设置,如果设置的话应该是8
int e = 16;//第五位
System.out.println(b | a | c | d | e);//
System.out.println(25 & e);//

关于Rose,rose是人人web页面使用的一种web框架,基本上是一种遵循着约定优于配置的基于spring封装的一层简化配置的框架。具体可参考 http://code.google.com/p/paoding-rose/

我介绍的是Rose中的portal,一种基于多线程的servlet模块化读取技术。一般较适用于大规模流量的网站和商业化个性化较严重的广告页面。目前成熟的作品有 人人网首页:http://www.renren.com/home,公共主页:http://www.renren.com/home#//page/?from=homeleft

Portal的优点是显而易见的,它可以随时切掉那些因为数据读取缓慢而超时的页面模块,还可以提供可供配置的后台,来给同样的页面以各种不同的展现,例如公共主页的皮肤,广告位等都是可以随意插拔的。

下面介绍Rose的基本原理:

基本原理是在一个servlet中,启动一个master线程,他负责管理和控制其他逻辑线程用来获取页面数据。加入有3个slave线程在运作加载一个页面的3个模块,我们将面临以下几个问题:

1.如何把数据写入到一个request当中,从而返回一个完整页面?

2.如何保证线程之间的request对象不会互相污染?

3.如果数据库挂了,刚好读取当前库业务逻辑这个线程应该做怎么做?

问题1答案:当我们从1个servlet中获取1个request对象的时候,将会全部传递到后续线程中进行参数的读取。这样,线程中将可以取到页面参数,从而进行逻辑组合。

问题1将会导致假如线程1修改了request中的某一个参数,将可能导致线程2,3取不到预期的结果。也就是页面传递过来的参数被线程1改变了。

问题2就是为了解决上述问题而产生的,我们可以在request对象传递过来的时候生成一个不变副本,线程2,3从不变副本中读取信息,从而解决了问题1所引发的问题。

问题3答案是我们一般会在一个超时间设置抛弃处理,这个模块将不会在页面上被显示。当时如数据库速度较慢的时候,规定时间你取不到数据,也有可能会被抛弃。此事线程将回收到线程池中。

我们会最终将获取到的动态信息置入request对象中,从而返回给页面。这样不但加快了页面访问速度,还给予了用户的最佳体验。

为什么要抛弃SVN?

我自己有几个理由:

1.相对臃肿,比起git来,SVN不是一般的臃肿

2.整合困难,和apache整合经常会出现各种诡异问题。

3.版本管理艰难,不够清爽

4.每个文件夹下都有.svn文件夹,当你想让一个项目断绝和svn的链接,这种文件夹都成了垃圾文件,当你想打包的时候,这种问文件夹也会被打包进去。

这时候我发现了git,安装简单,配置轻量,在版本管理方面有很大的优势,和linux简直就是完美整合。

关于git的安装和配置可以参考这里

http://progit.org/book/zh/ch4-4.html

还有

http://www.thoughtrails.com/episodes/14-git-server-setup-using-gitosis-for-Centos

这两篇文章都是有问题的文章,很不靠谱,他们并没有把一个完整的搭建过程描述清楚,当时2篇一起看,你会发现问题,这里我就不再赘述了。

关于安装的时候遇到的一些问题:

1.如果你的git没有安装在/usr/bin下面那么你需要为他配置环境变量,例如我的配置是vim /etc/profile/底部添加了

export PATH=/opt/git/bin:/opt/git/libexec/git-core:/opt/git/libexec/git-core/git-upload-pack:$PATH

这样还不行,还是会遇到git-receive-pack和git-upload-pack找不到的问题,这个时候我的解决方案是加软连接

ln -s /opt/git/libexec/git-core/git-upload-pack  /usr/bin

ln -s /opt/git/libexec/git-core/git-receive-pack  /usr/bin

2.当执行git push projectname master命令的时候,遇到了:

error: src refspec HEAD does not match any.
error: failed to push some refs to ‘root@119.57.16.85:/data/git/dreampool.git’

这个是因为你的本地目录下面为空,没有任何引用被提交。自己随便写个文件,然后重新执行git add -A

git commit -am “msg” git push projectname master 就好了。

Mysql 参数配置

[client]
socket=/tmp/mysql.sock

[mysqld]
datadir=/var/lib/mysql
user=mysql
port = 3306
socket = /tmp/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
#skip-locking
skip-name-resolve
back_log = 1024
set-variable = max_connections=5000
set-variable = max_connect_errors=100
set-variable = key_buffer_size=384M
set-variable = read_buffer_size=4M
set-variable = sort_buffer_size=4M
set-variable = max_allowed_packet=16M
set-variable = table_cache=168384
set-variable = query_cache_size=64M
#thread_cache_size = 8
#thread_concurrency = 8
#thread_stack = 256K
#write_buffer_size = 4M
#thread_cache_size = 64
#tmp_table_size = 256M
#wait_timeout = 10
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
log-error=/var/log/mysqld.log

log-slow-queries
long-query-time = 1
log-long-format

#innodb_data_home_dir = /usr/local/mysql/data/
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data/
# You can set .._buffer_pool_size up to 50 – 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 2G
innodb_additional_mem_pool_size = 20M
innodb_file_io_thread= 8
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 500M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50

以上试用InnoDB存储引擎。

innodb_flush_log_at_trx_commit = 2

//值为1的时候是每次事务都提交。值为2的时候每次都写到系统缓存。这样可以大大降低磁盘的IO。使得InnoDB和Myisam的茶具缩小很多

1.windows下面eclipse的提示有中文乱码,还有doc的导出也会出现乱码,前者可以到window-preference-general-contentTypes里面设置,注意里面有很多中文件编码这是方式,择情而定

2.xmemcaced和spring集成,这个比较悬,官方给出的文档也不完整, 还是自己玩出来的

1). xmemcached.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd “>
<bean name=”memcachedClientBuilder”>
<!– XMemcachedClientBuilder have two arguments.First is server list,and second is weights array. –>
<constructor-arg>
<list>
<bean>
<constructor-arg>
<value>119.57.16.83</value>
</constructor-arg>
<constructor-arg>
<value>11000</value>
</constructor-arg>
</bean>
<bean>
<constructor-arg>
<value>119.57.16.83</value>
</constructor-arg>
<constructor-arg>
<value>12000</value>
</constructor-arg>
</bean>
<bean>
<constructor-arg>
<value>119.57.16.83</value>
</constructor-arg>
<constructor-arg>
<value>13000</value>
</constructor-arg>
</bean>
<bean>
<constructor-arg>
<value>119.57.16.84</value>
</constructor-arg>
<constructor-arg>
<value>11000</value>
</constructor-arg>
</bean>
<bean>
<constructor-arg>
<value>119.57.16.84</value>
</constructor-arg>
<constructor-arg>
<value>12000</value>
</constructor-arg>
</bean>
<bean>
<constructor-arg>
<value>119.57.16.84</value>
</constructor-arg>
<constructor-arg>
<value>13000</value>
</constructor-arg>
</bean>
</list>
</constructor-arg>
<constructor-arg>
<list>
<value>2</value>
<value>2</value>
<value>2</value>
<value>2</value>
<value>2</value>
<value>2</value>
</list>
</constructor-arg>
<property name=”connectionPoolSize” value=”6″></property>
<property name=”commandFactory”>
<bean></bean>
</property>
<property name=”sessionLocator”>
<bean></bean>
</property>
<property name=”transcoder”>
<bean />
</property>
</bean>
<!– Use factory bean to build memcached client –>
<bean name=”memcachedClient” factory-bean=”memcachedClientBuilder” factory-method=”build” destroy-method=”shutdown” />
</beans>
2)。代码如此初始化:

private MemcachedClient memcachedClient;

@Autowired
public void setMemcachedClient(MemcachedClient memcachedClient) {
this.memcachedClient = memcachedClient;
}

———————end