给iCal添加2012农历

Continue Read..

只需要在iCal里订阅以下地址就可以了
https://www.google.com/calendar/ical/12c67nodq13cecp0m4vm13pdp2kjdvf9%40import.calendar.google.com/public/basic.ics

一个看起来莫名其妙的问题

Continue Read..

昨天在开发过程中出现了一个意料之外的错误,经很长时间的调试才找到错误原因所在,唉~粗心要不得啊。

开发环境:
Nginx+PHP-FPM+MySQL,连接MySQL使用的是MySQLi。

错误描述:
在插入新数据时MySQL返回1064错误,1064是语法错误。

相关代码:

$row = array('userId'=>$uid, 'orderId'=>$oid, 'money' => $money,
      'change' => json_encode($change), 'createTime' => time());
if ($this->db->insert('recharge', $row)) {
    return true;
}else {
    return false;
}

这段代码会生成类似以下的SQL,并执行,出错1064错误

INSERT INTO recharge (userId, orderId, money, change, createTime)
 VALUES (2102103, '2012xxxxxxxxx', 200.00, '经json_encode编码的数组', 1326970280);

(更多…)

年初的一点点打算

Continue Read..

前几天正式向公司提出了辞职,打算对这四年的工作做一个总结,迎接下一份工作的挑战。

下一份工作的主要内容是游戏服务架构和一些简单的编程,而对我来说有挑战性的就是高并发大容量服务的效率问题,下一步将着重学习这方面的知识并努力应用于项目中。

而对于我个人的一些打算,准备尽可能的抽出时间学一些移动开发,我觉得做为一个一直奋斗在技术第一线的战士,我的Android系统中如果没使用到我自己开发的程序,那将是我最大的失败。

一直以来都受惠于众多的开源项目,而我对开源却从来没有做出过一点贡献,哪怕是在开源项目的基础上做出的一些开发也因为公司要求保密而无法公开使用,因为将要在项目中使用到消息队列,而目前没找到适用的开源软件,所以,我的下一个目标是尽快的实现一个消息队列,而这也将是我第一个真正开源的项目,希望能按计划尽快完成,并能对大家有所帮助。

献给广大的程序猿——颈椎保养

Continue Read..

颈椎的24小时保养

亡羊补牢永远比不上未雨绸缪,与其等到颈椎受伤,再去接受长期繁琐的治疗,还不如先发制人,主动出击,让颈椎受到我们的精心照顾,不发生事故。

保养秘笈一 7:00

 

早晨主动调温
古人喜欢穿长衣服,一方面是为了礼仪,其实另一方面也是养生之需。无论冬夏,都要给自己的颈椎以舒适的温度。即使是为了美丽,也要在办公室准备一件披肩,以保护好颈背部。偶然有受寒现象,给自己煎一碗驱寒汤:材料是红糖2汤匙、生姜7片,水煎10分钟,饮用1~2次就可以驱走寒气。

保养秘笈二 10:00

5分钟的颈椎操
即使身处人多的办公室,你也可以很好地保养颈椎,比如利用工间休息练习一下颈椎操:端坐,全身不动,单头部运动,分别做低头、抬头、左转、右转、前伸、后缩;顺、逆时针环绕动作。每次坚持5分钟,动作要轻缓、柔和。

保养秘笈三 14:00

两种按摩的方法
经过一个上午的工作,到了下午两点钟,可能脖子早已疲惫不堪,精力有些不支,这里有两个最简单的急救方法:
(1)脖子后面,从头颅底端到躯干上部这一段分布着百劳穴的3个点。在不遗余力工作时,不妨抽出短短几分钟来按摩这3个反应点,即刻缓解颈椎疲劳,放松全身。
(2)两手手指互相交叉,放在颈部后方,来回摩擦颈部,力度要轻柔,连续摩擦50次,颈部发热后,会有很放松和舒适的感觉。 (更多…)

如何写好工作日志

Continue Read..

写工作日志是自我工作管理的一种方法。养成坚持每天写工作日志的习惯,可以确保每天工作不会出现遗漏,帮助日后回忆和检视,在日积月累潜移默化中提高了自身的事务管理和时间管理能力,也为日后出现争议时提供佐证。
工作日志主要是写给自己看的,不要当做应付主管检查的道具。日志看似简单,记录好的话,将是一笔人生经历的宝贵财富。

一、工作日志内容

好的工作日志应包括四方面内容:每日工作计划、完成情况、工作备忘、小结(心得体会)。具体如下:
(一)工作计划。即是当日工作任务编排。以要点方式记录每日要完成的工作任务。一般按时间安排来写,也可以按重要性次序来写。注意几种任务的时间编排,以提高工作效率:
1、可控性的工作按重要、次重要的先后排序;
2、不可控性的,紧迫性优先。
3、外勤任务考虑车程、路线来统筹时间安排。
4、预约的事务应予按时到达,编排时间提前量。
5、若分不清重要与次重要任务,可先罗列,适时调整。
(二)工作完成情况。每项工作任务完成情况都应做好记录,包括已完成或进展情况。简单任务完成后可以在任务后面打√,自己知道已完成即可。
(三)工作备忘。
内容包括:
1、工作过程中出现的问题。
2、执行任务中的偏差。
3、结论性,关键性的问题。
4、需寻求支持、请示的问题。
5、领导交办的事项。
6、其他杂七杂八的需记录以免遗漏的事项。
前述工作完成情况和备忘可以混合而言,特别是不能一天完成的事务,既要记录进度,又要提醒下一步跟进事宜。
(四)小结。包括评价、心得、体会、经验等。经验来源于实践,及时小结,自我提炼出工作模式,工作方法,或者人生哲理等等。可以是自己领悟出来的,也可以是从他人获知的。不一定每天都写,但一有所感悟最好马上记录下来,日积月累,这些将是人生的宝贵经验,智慧的精华。
二、写日志的时间要求和方法
总的来讲,首先要养成随手记录的习惯,随身带备记录本和笔,或者以手机、电脑记录。
1、每天下班前后要完成,同时编排次日的工作计划;
2、每件事毕,随手记录,同时查看下一任务,以提醒自己莫要遗漏;
3、简炼明了,看得明白即可,但不能过于简单。
4、每一项任务的前面,用时间来固定,如9:00—10:00,拜访某人;10:00—11:00,完成某项报表。
5、善用5W1H法。如果你是主管,应该以之对下属强调每项工作的每个细节,尤其是菜鸟;如果你是菜鸟,就应学会用最基本的5W1H法来写日志,尽可能详尽。
三、工作日志的形式
1、工作日记本的选择上若单位有要求的,按要求配备。自行选择的,可选择既方便携带又轻便的本子。
2、抬头应记录时间、天气等要素。
3、记录时,可以每项任务下空行,以便有空位作注释。
4、形成自我风格,如采用自己喜好的符号(√☆▲△○)、线条、颜色等做标记,以区分工作重点、注意事项和强调事宜。

无论从事何种岗位,形成写日志的习惯是最重要的。不妨每天早上洗脸的时候,把当天要办的事在脑海过一次,预测一下,如果办不了何事,转入办哪事,顺路可以办何事;同时激励一下自己,让自己充满信心和激情。

http://bbs.vsharing.com/Promotion/Work/1336880-1.html

Converting rewrite rules

Continue Read..

A redirect to a main site

People who during their shared hosting life used to configure everything using only Apache’s .htaccess files, translate usually the following rules:

RewriteCond %{HTTP_HOST} nginx.org
RewriteRule (.*) http://www.nginx.org$1
in something like this:

server {
listen 80;
servername www.nginx.org nginx.org;
if ($http
host = nginx.org) {
rewrite (.*) http://www.nginx.org$1;
}

}
This is a wrong, cumbersome, and ineffective way. The right way is to define a separate server for nginx.org:

server {
listen 80;
servername nginx.org;
rewrite ^ http://www.nginx.org$request
uri?;
}

server {
listen 80;
server_name www.nginx.org;

}
Another example, instead of backward logic: all that is not nginx.com and is not www.nginx.com:

RewriteCond %{HTTPHOST} !nginx.com
RewriteCond %{HTTP
HOST} !www.nginx.com
RewriteRule (.*) http://www.nginx.com$1
you should define just nginx.com, www.nginx.com, and anything else:

server {
listen 80;
server_name nginx.com www.nginx.com;

}

server {
listen 80 default_server;
server_name _;
rewrite ^ http://nginx.com$request_uri?;
}
(更多…)

mysql主备部署

Continue Read..

本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。
这样做的好处显而易见:有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器,减轻主用数据库的负担。

实施前提:
主用数据库的配置里至少有:

[mysqld]
log-bin=mysql-bin
server-id=1

建议主备的数据库版本一致。

我所知道的最简单的实施方式(不需要停主库,甚至不需要长时间地禁止主库写入):

主库操作:
在主库里建一个复制用的用户:

grant replication slave on *.* TO 'replication'@'备库地址' identified by 'replication';

导出主库的数据,并记下当然日志文件和偏移:

mysqldump --master-data=2 --single-transaction -uroot -p --all-databases >dumpfile

这里是把数据以SQL的形式导出,并记下导出瞬间的日志文件和偏移(得益于–master-data=2参数),出来的dumpfile的前面会有一行类似以下的注释信息,就是文件名和偏移值了:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673;

对于这步,网络上一般采用的方法为:

FLUSH TABLES WITH READ LOCK--先把主库设置成只读,然后导出SQL或者直接复制数据文件
SHOW MASTER STATUS; --记下日志文件和偏移
UNLOCK TABLES; --恢复主库写入

这样,至少在复制数据的那段时间,主库是不可提供服务的。

备库操作:
复制主库的/etc/my.cnf和dumpfile。
把主库配置里的 server-id 改成2(或者3、4,多个备库保存互不相同),再加上

relay-log = slave-relay.log
relay-log-index = slave-relay-log.index

导入数据:

mysql 进入mysql命令行执行:

SLAVE STOP;
CHANGE MASTER TO
MASTER_HOST='主库地址',
MASTER_PORT=3306,
MASTER_USER='replication',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=1061553673;
SLAVE START;

然后,就搞定了,可以在备库执行

SHOW PROCESSLIST;

查看同步的状态,如果此命令的输出里有两个“system user”的进程,并且Command都是“Connect”的话,就差不多OK了,此时,任何对主库的修改,都能准实时地从备库里查询出来。

参考文章:mysql官方中文手册

PHP函数fopen与file_get_content用法

Continue Read..

一直都是简单的使用fopen和file_get_content的函数,今天刚知道,这两个函数还能这么用,看来我火星了。

用file_get_contents或者fopen、file、readfile等函数读取url的时候,会创建一个名为$http_response_header的变量来保存http响应的报头,使用fopen等函数打开的数据流信息可以用stream_get_meta_data来获取。
php5中新增的参数context使这些函数更加灵活,通过它我们可以定制http请求,甚至post数据。

< ?php
$html = file_get_contents('http://www.example.com/');
print_r($http_response_header); 
// or 
$fp = fopen('http://www.example.com/', 'r'); 
print_r(stream_get_meta_data($fp)); 
fclose($fp); 
?>

(更多…)

MAILADV(邮件广告工具)

Continue Read..

公司要给会员群发一批邮件,没有找到合适的现成的工具,就自己写了一个,先是用Python写了一个,用起来感觉不是很爽,于是干脆用C重写了一个,好久没用C语言了,该是再拿起来的时候了,说起来还是C语言用着感觉好。

源代码:https://github.com/tobylee/mailadv

直接下载:mailadv-0.9.tar.bz2

程序说明:

本程序使用标准C编写,目前在FreeBSD和Linux(包括Gentoo/Debian/CentOS)进行
编译测试,完全兼容,在Windows下使用可能需要做一些修改,比如发送邮件时使用
sendmail.exe。

文件包内的Makefile只支持对较新版本的make兼容。

功能说明:

mailadv [-r] [-h] [-f < 发件邮箱>] [-t < 接收地址>] [-m < 邮件列表>] [-b < 邮件文件>] [-s < 邮件标题>] [-l < 日志文件>]

-f –from 发件邮箱. 默认: A.D.S
-t –to 收件邮箱,本设置可以和-m同时使用,但是本设置中的邮件发送情况不记入日志文件.
-m –maillist 邮件列表文件,每行一个邮件地址. 默认: 当前目录下的maillist
-b –content 邮件内容文件,需要HTML格式的文件. 默认: 当年目录下的mail.htm
-s –subject 邮件标题,此项是必须的.
-l –log 日志文件, . 默认: 当年目录下的maillog
-r –continue 继续执行上一次未发送完的邮件列表, 此功能以发送日志为判断依据.
-h –help 显示帮助信息.

C语言判断文本文件的编码

Continue Read..

不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:

ANSI:        无格式定义;
Unicode:       前两个字节为FFFE;
Unicode big endian: 前两字节为FEFF;
UTF-8:        前两字节为EFBB;
– 以上是在网上找到的内容,没再仔细找,比如GB2312/GB18030等,不过原理应该是一样的吧

以下是我写的一段测试用的代码

#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *f;
unsigned char code[2];
short rlen = 0;
if (argc &lt; = 1) { printf(" Usage: %s filename [ filename2 [...]]", argv[0]); return -1; } for ( ; --argc &gt; 0; ) {
f = fopen(*++argv, "rb");
if (f) {
rlen = fread(code, 1, 2, f);
if(rlen == 2) {
if (code[0]==0xEF &amp;&amp; code[1]==0xBB) {
printf("%s encode UTF-8\n", *argv);
}else if(code[0]==0xFF &amp;&amp; code[1]==0xFE) {
printf("%s encode Unicode\n", *argv);
}else if(code[0]==0xFE &amp;&amp; code[1]==0xFF) {
printf("%s encode Unicode Big Endlian\n", *argv);
}else {
printf("%s encode ASCII\n", *argv);
}
}else {
printf("%s unknow err\n", *argv);
}
fclose(f);
}else
printf("%s not exists\n", *argv);
}
}

无觅相关文章插件,快速提升流量