美化桌面快捷图片的小键头
如果你之前改过这个,发现桌面的快捷方式不能放在超级任务栏上,那说明你的那种方法不正确。以下是我找到的正确方法可以去掉快捷方式图标的小键头:
找一透明ico图标,保存到C:\windows文件夹中,文件名为Empty.ico
新建一文本文档,粘贴以下内容,另存为扩展名reg的注册表文件,
双击导入,注销后重新登录即可
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons]
"29"="C:\\Windows\\Empty.ico,0"
如果你之前改过这个,发现桌面的快捷方式不能放在超级任务栏上,那说明你的那种方法不正确。以下是我找到的正确方法可以去掉快捷方式图标的小键头:
找一透明ico图标,保存到C:\windows文件夹中,文件名为Empty.ico
新建一文本文档,粘贴以下内容,另存为扩展名reg的注册表文件,
双击导入,注销后重新登录即可
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons]
"29"="C:\\Windows\\Empty.ico,0"
今天遇到一个问题,jQuery的Ajax取得卡余额
var url='${ajaxGetCardBalance}';
jQuery.ajax({
url : url,
type : "get",
dataType : "json",
data : params,
success : function(data) {
var result = eval("(" + data + ")");
if(result.code == '1') {
jQuery('#lblCardBalance').html(result.pros.balance);
}
else if(result.code == '-1'){
alert(result.message);
}
}
});
怎么也取不到值,点击后没有反应,
仔细分析,原来这个页面使用了ssl,但访问这个页面却是普通http链接,导致ajax用https访问,但当前域却是http模式,导致出问题,比如当前域(浏览器地址栏里面)是http://www.xxx.com,则ajax的url也需要基于http://www.xxx.com,不能是https://www.xxx.com,同理如果当前域是https://www.xxx.com,ajax的url也不能用http。
还有一个问题需要注意,如果页面设置了<base href="http://www.xxx.com/"/>,则ajax也不能访问ssl模式的url(即便当前域是ssl模式也不行),目前测试看,firefox是可以的,但ie系列没法返回,现象和上面一样。
来自:http://linct21.blog.163.com/blog/static/847219382012991575680/
var url='${ajaxGetCardBalance}';
jQuery.ajax({
url : url,
type : "get",
dataType : "json",
data : params,
success : function(data) {
var result = eval("(" + data + ")");
if(result.code == '1') {
jQuery('#lblCardBalance').html(result.pros.balance);
}
else if(result.code == '-1'){
alert(result.message);
}
}
});
怎么也取不到值,点击后没有反应,
仔细分析,原来这个页面使用了ssl,但访问这个页面却是普通http链接,导致ajax用https访问,但当前域却是http模式,导致出问题,比如当前域(浏览器地址栏里面)是http://www.xxx.com,则ajax的url也需要基于http://www.xxx.com,不能是https://www.xxx.com,同理如果当前域是https://www.xxx.com,ajax的url也不能用http。
还有一个问题需要注意,如果页面设置了<base href="http://www.xxx.com/"/>,则ajax也不能访问ssl模式的url(即便当前域是ssl模式也不行),目前测试看,firefox是可以的,但ie系列没法返回,现象和上面一样。
来自:http://linct21.blog.163.com/blog/static/847219382012991575680/
Q: 我正在写一个unix server程序,不是daemon,经常需要在命令行上重启它,绝大多数时候工作正常,但是某些时候会报告"bind: address in use",于是重启失败。
A: Andrew Gierth
server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于TIME_WAIT状态,你无法避免,那是TCP协议的一部分。阅读全文
A: Andrew Gierth
server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于TIME_WAIT状态,你无法避免,那是TCP协议的一部分。阅读全文
背景:mysql的严格模式有一句:my.cnf加了:sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",中间有一个:NO_AUTO_CREATE_USER。
参看:https://jackxiang.com/post/6810/
阅读全文
参看:https://jackxiang.com/post/6810/
阅读全文
背景:各位同事,请大家根据表中的明细,自查下 各自名下的设备 看看数量和序列号是否 都符合,如果有问题,尽快跟我反馈 部分同事名下设备较多,请逐一核查,不要有遗漏。你会看标签还是直接通过键盘查哩?
————————————————————————————————————————————————————————————————————
一、最简单的查看显示器的方式:
右击“我的电脑”--“管理”--“设备管理器”--“监视器”--右击“即插即用监视器”--“属性”--“详细信息”--里面会有显示DISPLAY\AOCxxxx\......类似这样的信息,一看就知道是Dell E2011H (Digital)的显示器了~
{这是直接读出显示器的EDID,从而有这些相关资料,所有的工具都是这个原理}
二、最简单的查看电脑型号的方式(软件不太好查):
答1:我觉得你的提问有问题,机子的品牌从外部标签或商标处可得到查看。不过如果系统盘是品牌机赠送的,那点“我的电脑”右键属性即可看出。如果想了解你机器的硬件配置情况可下载一款名为“鲁大师”的软件进行检测。
答2:如果电脑可以正常开机,可以在开机看到启动画面的时候,按键盘的<F2>键,进入BIOS查看服务编号。
如果电脑有故障,无法进入BIOS查看服务编号,那么,可以掀开笔记本底部的金属铭牌,查看服务编号。
微软 Windows 系统的 COA 标签,也贴在金属铭牌下方。
请注意,XPS L321x 底部的金属铭牌卡扣固定的比较紧,建议使用塑料撬棒等工具
摘自1:http://zhidao.baidu.com/question/197920028.html?qbl=relate_question_0&word=Win%3Bdows7%20%C8%E7%BA%CE%B2%E9%BF%B4%CF%D4%CA%BE%C6%F7%D0%CD%BA%C5
摘自2:http://jingyan.baidu.com/article/5553fa820b14ed65a3393472.html
————————————————————————————————————————————————————————————————————
一、最简单的查看显示器的方式:
右击“我的电脑”--“管理”--“设备管理器”--“监视器”--右击“即插即用监视器”--“属性”--“详细信息”--里面会有显示DISPLAY\AOCxxxx\......类似这样的信息,一看就知道是Dell E2011H (Digital)的显示器了~
{这是直接读出显示器的EDID,从而有这些相关资料,所有的工具都是这个原理}
二、最简单的查看电脑型号的方式(软件不太好查):
答1:我觉得你的提问有问题,机子的品牌从外部标签或商标处可得到查看。不过如果系统盘是品牌机赠送的,那点“我的电脑”右键属性即可看出。如果想了解你机器的硬件配置情况可下载一款名为“鲁大师”的软件进行检测。
答2:如果电脑可以正常开机,可以在开机看到启动画面的时候,按键盘的<F2>键,进入BIOS查看服务编号。
如果电脑有故障,无法进入BIOS查看服务编号,那么,可以掀开笔记本底部的金属铭牌,查看服务编号。
微软 Windows 系统的 COA 标签,也贴在金属铭牌下方。
请注意,XPS L321x 底部的金属铭牌卡扣固定的比较紧,建议使用塑料撬棒等工具
摘自1:http://zhidao.baidu.com/question/197920028.html?qbl=relate_question_0&word=Win%3Bdows7%20%C8%E7%BA%CE%B2%E9%BF%B4%CF%D4%CA%BE%C6%F7%D0%CD%BA%C5
摘自2:http://jingyan.baidu.com/article/5553fa820b14ed65a3393472.html
背景:有时一个文件,往往想知道是谁在写,是哪个进程,是哪个用户组的进程等,如:日志文件太大了,一直在写,但关了还有程序在写,能反查到是谁在写么?看起来简单,但是如果这个日志是多台机器都往里写:加载的NFS,Linux都挂载到日志上了。你怎么知道是哪台机器的进程在写能知道么?我没有NFS资源,但我想这都是一个问题:怎么我都关闭所有机器往该文件的写进程了,怎么用tail -f log文件,还有日志在写呢,这样的需求场景是有时会有的,于是有此博文出现。
一)在Linux下:
请问如何确认一个文件正在被哪个进程读写?
用lsof试一试
lsof|awk '/\<filename\>;/{print $2}'
就简单的用:lsof 文件名
实践如下,PHP-FPM进程日志文件作实验如下:
根据进程号找到这个进程,Linux下如下命令即可找到:
于是,原来是php-fpm的主进程在写这个文件,明白了。
本站blog 之前问过同事的Url备查链接:https://jackxiang.com/post/6800/
二)在Windows上:
filemon.exe 追踪特定程序运行的过程,包括读取的文件等等。你可以用这个试试
Download: http://butian.org/soft/721.html
以下来自:
http://bbs.chinaunix.net/thread-2225994-1-1.html
http://zhidao.baidu.com/link?url=m6sJQBdrwYsCRoc9poMMldQSihlRxjq_oUOMwBJUE2F7gEny4qgkoRhGenYYA7xtyKXVtlB1AbDYNvmz-AsHMa
Linux下的用得比较多,摘自:http://blog.csdn.net/guang11cheng/article/details/16980667
有许多情况下,我们需要查看一个进程当前打开了哪些文件,反过来我们也希望知道某一个文件正在被哪些进程所读写。在Linux下有许多有用的工具可以帮我们完成这两个工作,下面介绍这两个工具:lsof与fuser。
fuser find files or sockets' user
格式:fuser [选项] fname
-k 如果找到打开文件的进程,则发送SIGKILL杀死此进程,通过-i选项,可以为用户提供交互选择
-signal 用户可以指定使用何种信号去kill进程,如果-k参数指定,则忽略此参数
-m 如果指定一个文件,则所有访问那个文件所在文件系统的进程都会被列出来
-n type 指定不同的文件类型,默认类型为file,此外还支持tcp和udp类型,此时可以简写作port/tcp
-u 显示进程属主
-v 显示详细进程与打开文件信息
-4/-6 只搜索IPv4/IPv6套接字
例如,我们想查看端口TCP端口9000由哪个进程打开 fuser -v -u 9000/tcp
查看哪些进程在访问/home挂载分区 fuser -mv /home
lsof list open file
格式:lsof [选项] [names]
单独执行lsof将输出系统中所有打开的文件,我们可以grep过滤出我们关心的内容,不过lsof提供了相应的参数帮助我们精确查找
lsof name 将输出所有使用文件name的进程
-p pid 列出进程pid所打开的所有文件
-d FD_pattern 列出所有已经打开的FD值为FD_pattern的文件FD的值有整数,TXT,MEM等等
-a lsof后可以加多个匹配条件,默认为or连接,此参数将多个条件变成and关系
-i [46] [proto] [@hostname|ip][:service|port] 用来选择占用某个端口的进程
+d/+D dir 非递归或递归的显示打开dir下文件的进程
-c string 显示进程的command中包含string的进程所打开的文件
-u username 显示属于user的进程所打开的文件
-g gid
以上这些参数已经足够用了,上面这两个工具都是读取/proc文件系统中的数据进行工作的。网上有提到借助于lsof的查找功能,可以对一个删除的文件进行恢复,前提是占用这个文件的进程当前还没有关闭。通过被删除的文件,找到对应的进程及在进程中的fd-num,然后通过cat /proc/process-num/fd/fd-num即可恢复被删除的文件。
一)在Linux下:
请问如何确认一个文件正在被哪个进程读写?
用lsof试一试
lsof|awk '/\<filename\>;/{print $2}'
就简单的用:lsof 文件名
实践如下,PHP-FPM进程日志文件作实验如下:
根据进程号找到这个进程,Linux下如下命令即可找到:
于是,原来是php-fpm的主进程在写这个文件,明白了。
本站blog 之前问过同事的Url备查链接:https://jackxiang.com/post/6800/
二)在Windows上:
filemon.exe 追踪特定程序运行的过程,包括读取的文件等等。你可以用这个试试
Download: http://butian.org/soft/721.html
以下来自:
http://bbs.chinaunix.net/thread-2225994-1-1.html
http://zhidao.baidu.com/link?url=m6sJQBdrwYsCRoc9poMMldQSihlRxjq_oUOMwBJUE2F7gEny4qgkoRhGenYYA7xtyKXVtlB1AbDYNvmz-AsHMa
Linux下的用得比较多,摘自:http://blog.csdn.net/guang11cheng/article/details/16980667
有许多情况下,我们需要查看一个进程当前打开了哪些文件,反过来我们也希望知道某一个文件正在被哪些进程所读写。在Linux下有许多有用的工具可以帮我们完成这两个工作,下面介绍这两个工具:lsof与fuser。
fuser find files or sockets' user
格式:fuser [选项] fname
-k 如果找到打开文件的进程,则发送SIGKILL杀死此进程,通过-i选项,可以为用户提供交互选择
-signal 用户可以指定使用何种信号去kill进程,如果-k参数指定,则忽略此参数
-m 如果指定一个文件,则所有访问那个文件所在文件系统的进程都会被列出来
-n type 指定不同的文件类型,默认类型为file,此外还支持tcp和udp类型,此时可以简写作port/tcp
-u 显示进程属主
-v 显示详细进程与打开文件信息
-4/-6 只搜索IPv4/IPv6套接字
例如,我们想查看端口TCP端口9000由哪个进程打开 fuser -v -u 9000/tcp
查看哪些进程在访问/home挂载分区 fuser -mv /home
lsof list open file
格式:lsof [选项] [names]
单独执行lsof将输出系统中所有打开的文件,我们可以grep过滤出我们关心的内容,不过lsof提供了相应的参数帮助我们精确查找
lsof name 将输出所有使用文件name的进程
-p pid 列出进程pid所打开的所有文件
-d FD_pattern 列出所有已经打开的FD值为FD_pattern的文件FD的值有整数,TXT,MEM等等
-a lsof后可以加多个匹配条件,默认为or连接,此参数将多个条件变成and关系
-i [46] [proto] [@hostname|ip][:service|port] 用来选择占用某个端口的进程
+d/+D dir 非递归或递归的显示打开dir下文件的进程
-c string 显示进程的command中包含string的进程所打开的文件
-u username 显示属于user的进程所打开的文件
-g gid
以上这些参数已经足够用了,上面这两个工具都是读取/proc文件系统中的数据进行工作的。网上有提到借助于lsof的查找功能,可以对一个删除的文件进行恢复,前提是占用这个文件的进程当前还没有关闭。通过被删除的文件,找到对应的进程及在进程中的fd-num,然后通过cat /proc/process-num/fd/fd-num即可恢复被删除的文件。
[mysql]不要再执着于thread_concurrency
结论:
thread_concurrency 在GNU/Linux系统上没有用的。
不过很多LINUX自带的mysql包里面的配置文件都有thread_concurrency选项,
甚至Mysql官方源码里面的my-large.cnf my-innodb-heavy-4G.cnf里面也有。。
Xml代码 收藏代码
# This permits the application TO give the threads system a hint FOR the
# desired NUMBER OF threads that should be run at the same TIME. This
# VALUE ONLY makes sense ON systems that support the thread_concurrency()
# FUNCTION CALL (Sun Solaris, FOR example).
# You should try [NUMBER OF CPUs]*(2..4) FOR thread_concurrency
thread_concurrency = 8
于是在网上就流传开了,在一些优化mysql配置的文章中,都说要把thread_concurrency设置为 CPU核数*2。
但是千万别上当,调整这个选项纯属浪费时间。
它只在Solaris < 9 的系统中有用。。。
而且从mysql5.6.1开始,这个选项就被废了。
http://bugs.mysql.com/bug.php?id=55001
INNODB:
innodb_thread_concurrency = 128
innodb_purge_threads = 32 # 5.6之后才支持大于1, 5.5上会自动变成1
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
结论:
thread_concurrency 在GNU/Linux系统上没有用的。
不过很多LINUX自带的mysql包里面的配置文件都有thread_concurrency选项,
甚至Mysql官方源码里面的my-large.cnf my-innodb-heavy-4G.cnf里面也有。。
Xml代码 收藏代码
# This permits the application TO give the threads system a hint FOR the
# desired NUMBER OF threads that should be run at the same TIME. This
# VALUE ONLY makes sense ON systems that support the thread_concurrency()
# FUNCTION CALL (Sun Solaris, FOR example).
# You should try [NUMBER OF CPUs]*(2..4) FOR thread_concurrency
thread_concurrency = 8
于是在网上就流传开了,在一些优化mysql配置的文章中,都说要把thread_concurrency设置为 CPU核数*2。
但是千万别上当,调整这个选项纯属浪费时间。
它只在Solaris < 9 的系统中有用。。。
而且从mysql5.6.1开始,这个选项就被废了。
http://bugs.mysql.com/bug.php?id=55001
INNODB:
innodb_thread_concurrency = 128
innodb_purge_threads = 32 # 5.6之后才支持大于1, 5.5上会自动变成1
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
背景:
Nginx模块fastcgi_cache后会在启动时候出现cache manager process和cache loader process 进程,查了下得知这玩意是用来作header使用的,PHP输出后由经它后给替换了header,有点像NAT出去时经过外网的路由时给把IP头给替换一个道理,这样有它的好处,也就是cache控制由前端nginx而不是由php本身,起到分层的作用:
程序代码是Discuz!论坛, 随便开启测试了几下,发现/dev/shm/nginx_cache/下没有任何目录建立,也没有文件创建。调试的http header响应头里的X-Cache-CFC 结果一直是MISS。从服务器进程上来看,Nginx cache manager process 跟Nginx cache loader process 进程也正常运行:
1 root 3100 1 0 14:52 ? 00:00:00 nginx: master process /usr/sbin/nginx
2 www-data 3101 3100 0 14:52 ? 00:00:00 nginx: worker process
3 www-data 3102 3100 0 14:52 ? 00:00:00 nginx: cache manager process
4 www-data 3103 3100 0 14:52 ? 00:00:00 nginx: cache loader process
不知道为何会这样,为何没有cache成功,我以为我配置参数有问题,只好阅读WIKI。发现fastcgi_ignore_headers 参数下解释有这么一段
fastcgi_ignore_headers
Syntax: fastcgi_ignore_headers field …
Default:
Context: http
server
location
Reference: fastcgi_ignore_headers
This directive forbids processing of the named headers from the FastCGI-server reply. It is possible to specify headers like “X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”.
也就是说这个参数的值,将会被忽略掉,同样被忽略掉的响应头比如”X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”,而nginx配置中并没有fastcgi_ignore_headers参数的设定,那么问题会不会出现在FASTCGI响应结果里包含了类似”X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”这几个响应头呢?用strace抓包,看了下nginx与fpm进程通讯的数据
1 ####为了确保准确抓到处理该http请求的进程,我把nginx 、fpm都只开启了一个进程处理。
2 //strace -ff -tt -s 1000 -o xxx.log -p PHPFPM-PID
3 14:52:07.837334 write(3, "\1\6\0\1\0\343\5\0X-Powered-By: PHP/5.3.10-1ubuntu3.5\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\nPragma: no-cache\r\nContent-type: text/html\r\n\r\nHello cfc4n1362034327\0\0\0\0\0\1\3\0\1\0\10\0\0\0\0\0\0\0\0\0\0", 256) = 256
4
5 //strace -ff -tt -s 1000 -o xxx.log -p Nginx-PID
6 15:05:13.265663 recvfrom(12, "\1\6\0\1\0\343\5\0X-Powered-By: PHP/5.3.10-1ubuntu3.5\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\nPragma: no-cache\r\nContent-type: text/html\r\n\r\nHello cfc4n1362035113\0\0\0\0\0\1\3\0\1\0\10\0\0\0\0\0\0\0\0\0\0", 4023, 0, NULL, NULL) = 256
从抓取的数据包里可以看到,fpm确实返回了包含“Expires”、“Cache-Control”头的http 响应头信息。那么疑问来了:
nginx的fastcgi_cache没缓存这条http响应,是因为响应头里包含“Expires”、“Cache-Control”的原因吗?
程序里并没有输出“Expires”、“Cache-Control” http header的代码,这是谁输出的呢?
既然是fpm响应的时候,就已经有了,那么是php的core模块,还是其他拓展模块输出的?
“Expires:”时间为何是“Thu, 19 Nov 1981 08:52:00 GMT”?
疑问比较多,一个一个查起,先从Nginx的fastcgi_cache没缓存这条http响应查起。我根据测试环境nginx版本1.1.9(ubuntu 12.04默认的),到nginx官方下了对应版本的源码,搜索了fastcgi参数使用的地方,在http\ngx_http_upstream.c找到了。虽然不能很流程的读懂nginx的代码,但粗略的了解,根据了解的情况加以猜测,再动手测试实验,也得出了结论,确定了nginx的fastcgi_cache的规则。
来自:http://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
Nginx模块fastcgi_cache后会在启动时候出现cache manager process和cache loader process 进程,查了下得知这玩意是用来作header使用的,PHP输出后由经它后给替换了header,有点像NAT出去时经过外网的路由时给把IP头给替换一个道理,这样有它的好处,也就是cache控制由前端nginx而不是由php本身,起到分层的作用:
程序代码是Discuz!论坛, 随便开启测试了几下,发现/dev/shm/nginx_cache/下没有任何目录建立,也没有文件创建。调试的http header响应头里的X-Cache-CFC 结果一直是MISS。从服务器进程上来看,Nginx cache manager process 跟Nginx cache loader process 进程也正常运行:
1 root 3100 1 0 14:52 ? 00:00:00 nginx: master process /usr/sbin/nginx
2 www-data 3101 3100 0 14:52 ? 00:00:00 nginx: worker process
3 www-data 3102 3100 0 14:52 ? 00:00:00 nginx: cache manager process
4 www-data 3103 3100 0 14:52 ? 00:00:00 nginx: cache loader process
不知道为何会这样,为何没有cache成功,我以为我配置参数有问题,只好阅读WIKI。发现fastcgi_ignore_headers 参数下解释有这么一段
fastcgi_ignore_headers
Syntax: fastcgi_ignore_headers field …
Default:
Context: http
server
location
Reference: fastcgi_ignore_headers
This directive forbids processing of the named headers from the FastCGI-server reply. It is possible to specify headers like “X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”.
也就是说这个参数的值,将会被忽略掉,同样被忽略掉的响应头比如”X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”,而nginx配置中并没有fastcgi_ignore_headers参数的设定,那么问题会不会出现在FASTCGI响应结果里包含了类似”X-Accel-Redirect”, “X-Accel-Expires”, “Expires” or “Cache-Control”这几个响应头呢?用strace抓包,看了下nginx与fpm进程通讯的数据
1 ####为了确保准确抓到处理该http请求的进程,我把nginx 、fpm都只开启了一个进程处理。
2 //strace -ff -tt -s 1000 -o xxx.log -p PHPFPM-PID
3 14:52:07.837334 write(3, "\1\6\0\1\0\343\5\0X-Powered-By: PHP/5.3.10-1ubuntu3.5\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\nPragma: no-cache\r\nContent-type: text/html\r\n\r\nHello cfc4n1362034327\0\0\0\0\0\1\3\0\1\0\10\0\0\0\0\0\0\0\0\0\0", 256) = 256
4
5 //strace -ff -tt -s 1000 -o xxx.log -p Nginx-PID
6 15:05:13.265663 recvfrom(12, "\1\6\0\1\0\343\5\0X-Powered-By: PHP/5.3.10-1ubuntu3.5\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\nPragma: no-cache\r\nContent-type: text/html\r\n\r\nHello cfc4n1362035113\0\0\0\0\0\1\3\0\1\0\10\0\0\0\0\0\0\0\0\0\0", 4023, 0, NULL, NULL) = 256
从抓取的数据包里可以看到,fpm确实返回了包含“Expires”、“Cache-Control”头的http 响应头信息。那么疑问来了:
nginx的fastcgi_cache没缓存这条http响应,是因为响应头里包含“Expires”、“Cache-Control”的原因吗?
程序里并没有输出“Expires”、“Cache-Control” http header的代码,这是谁输出的呢?
既然是fpm响应的时候,就已经有了,那么是php的core模块,还是其他拓展模块输出的?
“Expires:”时间为何是“Thu, 19 Nov 1981 08:52:00 GMT”?
疑问比较多,一个一个查起,先从Nginx的fastcgi_cache没缓存这条http响应查起。我根据测试环境nginx版本1.1.9(ubuntu 12.04默认的),到nginx官方下了对应版本的源码,搜索了fastcgi参数使用的地方,在http\ngx_http_upstream.c找到了。虽然不能很流程的读懂nginx的代码,但粗略的了解,根据了解的情况加以猜测,再动手测试实验,也得出了结论,确定了nginx的fastcgi_cache的规则。
来自:http://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
[实践OK]Linux下将脚本添加到 /etc/rc.d/rc.local 中开机启动,相当地windows下的启动项。
Unix/LinuxC技术 jackxiang 2014-8-29 15:30
这个相当于windows里的启动项
vi /etc/rc.d/rc.local
按i
然后把你的命令贴进去 ,一行一条命令
/bin/bash /usr/local/scripts/autoStartNginxEnterSSLKey.sh
然后按 esc
再 :wq 保存 注意前面有两点的冒号
下次重启的时候这个就会自动执行你添加的命令。
vi /usr/local/scripts/autoStartNginxEnterSSLKey.sh
./startNginx.sh
cat ./startNginx.sh
/usr/local/nginx/sbin/nginx
来自:http://zhidao.baidu.com/link?url=D7tZLZFqg7LODR60qIkvAeoSk-ocjBWgLppmxkHh_gSxH3AvOkZ_S9SxTj-C50espCswUiYZRK9F4JYi2nVC8K
vi /etc/rc.d/rc.local
按i
然后把你的命令贴进去 ,一行一条命令
/bin/bash /usr/local/scripts/autoStartNginxEnterSSLKey.sh
然后按 esc
再 :wq 保存 注意前面有两点的冒号
下次重启的时候这个就会自动执行你添加的命令。
vi /usr/local/scripts/autoStartNginxEnterSSLKey.sh
./startNginx.sh
cat ./startNginx.sh
/usr/local/nginx/sbin/nginx
来自:http://zhidao.baidu.com/link?url=D7tZLZFqg7LODR60qIkvAeoSk-ocjBWgLppmxkHh_gSxH3AvOkZ_S9SxTj-C50espCswUiYZRK9F4JYi2nVC8K
背景:在云vps里安装了一个virtualbox后,好象云vps可以有啥启动后,导致上面的virtualbox下的虚拟机(虚拟机下面的linux下面的虚拟机xp),启动不起来,出现异常。
一、从virtual box的环境下手排查:
之前由于openSUSE的/var不足引起系统不正常重启后,virtualbox也报虚拟机异常退出无法启动和配置。再次重新重启系统后,提示需要在root状态下执行:/etc/init.d/vboxdrv setup。
执行后,虚拟机又可以正常启动了。
执行如下:
rpm -e VirtualBox-4.3-4.3.20_96996_el6-1.x86_64
rpm -ihv VirtualBox-4.3-4.3.24_98716_el6-1.x86_64.rpm
摘自:http://blog.sina.com.cn/s/blog_62d4d5900101eupz.html
二、还是有问题,那就打开windows xp的日志记录吧,如下所示:
—————————————————————打开Windows XP 日志记录—————————————————————————
点击“开始→运行”,在运行对话框中输入“gpedit.msc”命令,启动组策略编辑器。然后依次展开“计算机配置→管理模板→Windows 组件→Windows Installer”,双击打开右侧的“日志记录”选项,在日志记录属性窗口中选择“已启用”选项,然后在“日志记录”栏中输入“voicewarmup”参数选项,最后点击“确定”按钮就启用了日志记录功能。
—————————————————————查看Windows XP 日志记录—————————————————————————
控制面板→性能和维护→管理工具→事件查看器→里面有四项:(应用程序、安全性、系统、Internet Explorer)
========================================================================
打开windows xp日志链接来自:http://blog.sina.com.cn/s/blog_3c98f3a101000982.html
查看windows xp日志的图例子:http://jingyan.baidu.com/article/3065b3b6c006f2becef8a46d.html
一、从virtual box的环境下手排查:
之前由于openSUSE的/var不足引起系统不正常重启后,virtualbox也报虚拟机异常退出无法启动和配置。再次重新重启系统后,提示需要在root状态下执行:/etc/init.d/vboxdrv setup。
执行后,虚拟机又可以正常启动了。
执行如下:
rpm -e VirtualBox-4.3-4.3.20_96996_el6-1.x86_64
rpm -ihv VirtualBox-4.3-4.3.24_98716_el6-1.x86_64.rpm
摘自:http://blog.sina.com.cn/s/blog_62d4d5900101eupz.html
二、还是有问题,那就打开windows xp的日志记录吧,如下所示:
—————————————————————打开Windows XP 日志记录—————————————————————————
点击“开始→运行”,在运行对话框中输入“gpedit.msc”命令,启动组策略编辑器。然后依次展开“计算机配置→管理模板→Windows 组件→Windows Installer”,双击打开右侧的“日志记录”选项,在日志记录属性窗口中选择“已启用”选项,然后在“日志记录”栏中输入“voicewarmup”参数选项,最后点击“确定”按钮就启用了日志记录功能。
—————————————————————查看Windows XP 日志记录—————————————————————————
控制面板→性能和维护→管理工具→事件查看器→里面有四项:(应用程序、安全性、系统、Internet Explorer)
========================================================================
打开windows xp日志链接来自:http://blog.sina.com.cn/s/blog_3c98f3a101000982.html
查看windows xp日志的图例子:http://jingyan.baidu.com/article/3065b3b6c006f2becef8a46d.html
为什么Android手机总是越用越慢?
Unix/LinuxC技术 jackxiang 2014-8-26 22:02
WebSocket数据包协议详解
smark
https://github.com/IKende/
WebSocket数据包协议详解
其实我一直想不明白HTML5包装个应用层办议作为Socket通过基础目的是为了什么,其实直接支持Socket tcp相对来说更加简单灵活.既然标准已经制定而浏览器也支持那对于我们开发者来说只能用的分.最新版本的WebSocket协议于2011-12其标准规范已经明确下来,所以现在可以根据这标准进行相应的开发.详细参考http://datatracker.ietf.org/doc/rfc6455/?include_text=1
WebSocket协议主要分为两部分,第一部分是连接许可验证和验证后的数据交互.连接许可验证比较简单,由Client发送一个类似于HTTP的请求,服务端获取请求后根据请求的KEY生成对应的值并返回.
连接请求内容:
GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket
服务端接收请求后主要是成针对Sec-WebSocket-Key生成对就Sec-WebSocket-Accept 的key,生成Sec-WebSocket-Accept 值比较简单就是Sha1(Sec-WebSocket-Key+258EAFA5-E914-47DA-95CA-C5AB0DC85B11)即可,C#代码如下:
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = Encoding.UTF8.GetBytes(request.SecWebSocketKey+ "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
string str_sha1_out = Convert.ToBase64String(bytes_sha1_out);
response.SecWebSocketAccept = str_sha1_out;
服务端返回内容:
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Server:beetle websocket server
Upgrade:WebSocket
Date:Mon, 26 Nov 2012 23:42:44 GMT
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:content-type
Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=
经过服务器的返回处理后连接握手成功,后面就可以进行TCP通讯.WebSocket在握手后发送数据并象下层TCP协议那样由用户自定义,还是需要遵循对应的应用协议规范...这也是在文章之说没有直接基于Socket tcp方便的原因.
数据交互协议:
这图有点难看懂...里面包括几种情况有掩码,数据长度小于126,小于UINT16和小于UINT64等几种情况.后面会慢慢详细说明.整个协议头大概分三部分组成,第一部分是描述消息结束情况和类型,第二部分是描述是否存在掩码长度,第三部分是扩展长度描述和掩码值.
从图中可以看到WebSocket协议数据主要通过头两个字节来描述数据包的情况
第一个字节
最高位用于描述消息是否结束,如果为1则该消息为消息尾部,如果为零则还有后续数据包;后面3位是用于扩展定义的,如果没有扩展约定的情况则必须为0.可以通过以下c#代码方式得到相应值
mDataPackage.IsEof = (data[start] >> 7) > 0;
最低4位用于描述消息类型,消息类型暂定有15种,其中有几种是预留设置.c#代码可以这样得到消息类型:
int type = data[start] & 0xF;
mDataPackage.Type = (PackageType)type;
第二个字节
消息的第二个字节主要用一描述掩码和消息长度,最高位用0或1来描述是否有掩码处理,可以通过以下c#代码方式得到相应值
bool hasMask = (data[start] >>7) > 0;
剩下的后面7位用来描述消息长度,由于7位最多只能描述127所以这个值会代表三种情况,一种是消息内容少于126存储消息长度,如果消息长度少于UINT16的情况此值为126,当消息长度大于UINT16的情况下此值为127;这两种情况的消息长度存储到紧随后面的byte[],分别是UINT16(2位byte)和UINT64(4位byte).可以通过以下c#代码方式得到相应值
mPackageLength = (uint)(data[start] & 0x7F);
start++;
if (mPackageLength == 126)
{
mPackageLength = BitConverter.ToUInt16(data, start);
start = start + 2;
}
else if (mPackageLength == 127)
{
mPackageLength = BitConverter.ToUInt64(data, start);
start = start + 8;
}
如果存在掩码的情况下获取4位掩码值:
if (hasMask)
{
mDataPackage.Masking_key = new byte[4];
Buffer.BlockCopy(data, start, mDataPackage.Masking_key, 0, 4);
start = start + 4;
count = count - 4;
}
获取消息体
当得到消息体长度后就可以获取对应长度的byte[],有些消息类型是没有长度的如%x8 denotes a connection close.对于Text类型的消息对应的byte[]是相应字符的UTF8编码.获取消息体还有一个需要注意的地方就是掩码,如果存在掩码的情况下接收的byte[]要做如下转换处理:
if (mDataPackage.Masking_key != null)
{
int length = mDataPackage.Data.Count;
for (var i = 0; i < length; i++)
mDataPackage.Data.Array[i] = (byte)(mDataPackage.Data.Array[i] ^ mDataPackage.Masking_key[i % 4]);
}
来自:http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html
阅读全文
smark
https://github.com/IKende/
WebSocket数据包协议详解
其实我一直想不明白HTML5包装个应用层办议作为Socket通过基础目的是为了什么,其实直接支持Socket tcp相对来说更加简单灵活.既然标准已经制定而浏览器也支持那对于我们开发者来说只能用的分.最新版本的WebSocket协议于2011-12其标准规范已经明确下来,所以现在可以根据这标准进行相应的开发.详细参考http://datatracker.ietf.org/doc/rfc6455/?include_text=1
WebSocket协议主要分为两部分,第一部分是连接许可验证和验证后的数据交互.连接许可验证比较简单,由Client发送一个类似于HTTP的请求,服务端获取请求后根据请求的KEY生成对应的值并返回.
连接请求内容:
GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket
服务端接收请求后主要是成针对Sec-WebSocket-Key生成对就Sec-WebSocket-Accept 的key,生成Sec-WebSocket-Accept 值比较简单就是Sha1(Sec-WebSocket-Key+258EAFA5-E914-47DA-95CA-C5AB0DC85B11)即可,C#代码如下:
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = Encoding.UTF8.GetBytes(request.SecWebSocketKey+ "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
string str_sha1_out = Convert.ToBase64String(bytes_sha1_out);
response.SecWebSocketAccept = str_sha1_out;
服务端返回内容:
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Server:beetle websocket server
Upgrade:WebSocket
Date:Mon, 26 Nov 2012 23:42:44 GMT
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:content-type
Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=
经过服务器的返回处理后连接握手成功,后面就可以进行TCP通讯.WebSocket在握手后发送数据并象下层TCP协议那样由用户自定义,还是需要遵循对应的应用协议规范...这也是在文章之说没有直接基于Socket tcp方便的原因.
数据交互协议:
这图有点难看懂...里面包括几种情况有掩码,数据长度小于126,小于UINT16和小于UINT64等几种情况.后面会慢慢详细说明.整个协议头大概分三部分组成,第一部分是描述消息结束情况和类型,第二部分是描述是否存在掩码长度,第三部分是扩展长度描述和掩码值.
从图中可以看到WebSocket协议数据主要通过头两个字节来描述数据包的情况
第一个字节
最高位用于描述消息是否结束,如果为1则该消息为消息尾部,如果为零则还有后续数据包;后面3位是用于扩展定义的,如果没有扩展约定的情况则必须为0.可以通过以下c#代码方式得到相应值
mDataPackage.IsEof = (data[start] >> 7) > 0;
最低4位用于描述消息类型,消息类型暂定有15种,其中有几种是预留设置.c#代码可以这样得到消息类型:
int type = data[start] & 0xF;
mDataPackage.Type = (PackageType)type;
第二个字节
消息的第二个字节主要用一描述掩码和消息长度,最高位用0或1来描述是否有掩码处理,可以通过以下c#代码方式得到相应值
bool hasMask = (data[start] >>7) > 0;
剩下的后面7位用来描述消息长度,由于7位最多只能描述127所以这个值会代表三种情况,一种是消息内容少于126存储消息长度,如果消息长度少于UINT16的情况此值为126,当消息长度大于UINT16的情况下此值为127;这两种情况的消息长度存储到紧随后面的byte[],分别是UINT16(2位byte)和UINT64(4位byte).可以通过以下c#代码方式得到相应值
mPackageLength = (uint)(data[start] & 0x7F);
start++;
if (mPackageLength == 126)
{
mPackageLength = BitConverter.ToUInt16(data, start);
start = start + 2;
}
else if (mPackageLength == 127)
{
mPackageLength = BitConverter.ToUInt64(data, start);
start = start + 8;
}
如果存在掩码的情况下获取4位掩码值:
if (hasMask)
{
mDataPackage.Masking_key = new byte[4];
Buffer.BlockCopy(data, start, mDataPackage.Masking_key, 0, 4);
start = start + 4;
count = count - 4;
}
获取消息体
当得到消息体长度后就可以获取对应长度的byte[],有些消息类型是没有长度的如%x8 denotes a connection close.对于Text类型的消息对应的byte[]是相应字符的UTF8编码.获取消息体还有一个需要注意的地方就是掩码,如果存在掩码的情况下接收的byte[]要做如下转换处理:
if (mDataPackage.Masking_key != null)
{
int length = mDataPackage.Data.Count;
for (var i = 0; i < length; i++)
mDataPackage.Data.Array[i] = (byte)(mDataPackage.Data.Array[i] ^ mDataPackage.Masking_key[i % 4]);
}
来自:http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html
阅读全文
Warning: Call-time pass-by-reference has been deprecated解决方法
Php/Js/Shell/Go jackxiang 2014-8-26 16:12
/*
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of getimagesize(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. ind:\vhost\include\inc_custom_fields.php on line178
*/
我把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。
虽然没有什么影响。但是心里还是有个疙瘩。。。
百度上没有找到什么答案,然后在google上 找到了。
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On
ps
文档注解为:
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
可以在函数里修改外面变量的值:
这样写就有前面描述的一系列问题:
说白了就是不能传一个地址给一个定义的函数参数里不是地址,这会有问题。
这块特别是在foreach这块的php实现上可能有一点缺陷也好,总之,想抛弃c的&取地址符号是php简单的根源。
执行结果如下:
---------- 调试PHP ----------
Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
PHP Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
输出完成 (耗时 0 秒) - 正常终止
像pdo的foreach陷阱和这有关,究其原因, 也就是bindParam和bindValue的不同之处, bindParam要求第二个参数是一个引用变量(reference),引用这种东东在PHP里出现其实怎么说好呢,有它有好处,用不好大大的坏,陷阱的根源,像c不是c的PHP的问题是PHP发展的争议根源,如果多都用c里的特性,那PHP完全可以成为一个类java的常驻内存server,乃至内存实现上也可有进步,但会编写复杂,掌握难度加大:
http://weibo.com/1170999921/ylgFcpe1f
http://www.laruence.com/2012/10/16/2831.html
https://jackxiang.com/post/7425/
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of getimagesize(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. ind:\vhost\include\inc_custom_fields.php on line178
*/
我把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。
虽然没有什么影响。但是心里还是有个疙瘩。。。
百度上没有找到什么答案,然后在google上 找到了。
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On
ps
文档注解为:
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
可以在函数里修改外面变量的值:
这样写就有前面描述的一系列问题:
说白了就是不能传一个地址给一个定义的函数参数里不是地址,这会有问题。
这块特别是在foreach这块的php实现上可能有一点缺陷也好,总之,想抛弃c的&取地址符号是php简单的根源。
执行结果如下:
---------- 调试PHP ----------
Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
PHP Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
输出完成 (耗时 0 秒) - 正常终止
像pdo的foreach陷阱和这有关,究其原因, 也就是bindParam和bindValue的不同之处, bindParam要求第二个参数是一个引用变量(reference),引用这种东东在PHP里出现其实怎么说好呢,有它有好处,用不好大大的坏,陷阱的根源,像c不是c的PHP的问题是PHP发展的争议根源,如果多都用c里的特性,那PHP完全可以成为一个类java的常驻内存server,乃至内存实现上也可有进步,但会编写复杂,掌握难度加大:
http://weibo.com/1170999921/ylgFcpe1f
http://www.laruence.com/2012/10/16/2831.html
https://jackxiang.com/post/7425/
背景:tadb.exe好像对豌豆荚的PC运行程序下插入usb的手机识别有些问题...需要对其进行干掉或特殊处理。
方法一:
第一步:首先通过快捷键“Win+R”来打开“运行”菜单。
第二步:输入“gpedit.msc”回车确认,进入我们电脑中的组策略编辑器。
第三步:然后选择“用户配置-管理模板-系统”,双击右侧的“不要运行指定的windows应用程序”。
第四步:在打开的对话框里,选择“已启用”,然后点击“不允许的应用程序的列表”后面“显示”。
第五步:在弹出的“显示内容”的对话框里把想要禁止的程序输入即可。比如把tadb.exe添加进去。
方法二:
QQ---设置---提醒---安卓设备连接提醒(对勾去掉)
方法三:
最好的办法是找到tadb.exe所在的目录,向上一层,直接把那个tadb.exe干掉。
实在不行,直接把那个tadb所在的文件夹清空,改权限,设只读,完事。
方法四:
删掉那个AndroidAssist文件夹之后,右键新建文本文件,改名为“AndroidAssist”,没有扩展名,再给这个文件加个只读属性
方法五:
删掉tadb.exe这个文件,然后创建一个文本文档,改名为tadb.exe(exe为后缀名)
方法六:
C:\Users\Administrator\AppData\Roaming\Tencent\AndroidAssist
找到此文件夹,将其删除,再新建文件夹AndroidAssist,右键设置安全属性,将所有用户对这个文件夹的权限全都设置为“拒绝”
来自:http://blog.sina.com.cn/s/blog_53fe14e10102ecqk.html
方法一:
第一步:首先通过快捷键“Win+R”来打开“运行”菜单。
第二步:输入“gpedit.msc”回车确认,进入我们电脑中的组策略编辑器。
第三步:然后选择“用户配置-管理模板-系统”,双击右侧的“不要运行指定的windows应用程序”。
第四步:在打开的对话框里,选择“已启用”,然后点击“不允许的应用程序的列表”后面“显示”。
第五步:在弹出的“显示内容”的对话框里把想要禁止的程序输入即可。比如把tadb.exe添加进去。
方法二:
QQ---设置---提醒---安卓设备连接提醒(对勾去掉)
方法三:
最好的办法是找到tadb.exe所在的目录,向上一层,直接把那个tadb.exe干掉。
实在不行,直接把那个tadb所在的文件夹清空,改权限,设只读,完事。
方法四:
删掉那个AndroidAssist文件夹之后,右键新建文本文件,改名为“AndroidAssist”,没有扩展名,再给这个文件加个只读属性
方法五:
删掉tadb.exe这个文件,然后创建一个文本文档,改名为tadb.exe(exe为后缀名)
方法六:
C:\Users\Administrator\AppData\Roaming\Tencent\AndroidAssist
找到此文件夹,将其删除,再新建文件夹AndroidAssist,右键设置安全属性,将所有用户对这个文件夹的权限全都设置为“拒绝”
来自:http://blog.sina.com.cn/s/blog_53fe14e10102ecqk.html
背景:swoole有一个Websocket示例,我作为swoole的顾问,群里反映cocos2dx下的websocket长连接,语言是不一样,但websocket是一样的,swoole是支持Websocket的,作下简单实践。
WebSocket的JavaScript例子,一个WebSocket的简单Echo例子:
例子代码来自:http://www.websocket.org/echo.html
上面这个链接可以当作一个websocket的工具调试并使用。
一、当然,得下载swoole服务扩展并安装:
git clone https://github.com/swoole/swoole-src.git
You should add "extension=swoole.so" to php.ini
二、动态服务端代码:
cd /data/codesdev/swoole/
git clone https://github.com/matyhtf/swoole_framework.git
/data/codesdev/swoole/swoole_framework/examples/websocket_server.php
上面是swoole_framework提供的代码,我们就直接运行这个服务端的server侦听9443端口:
php websocket_server.php
三、静态Js代码,通过firefox访问下,当然其他支持websocket的浏览器也可以,这块暂没从swoole_framework里摘,在网上摘的js,后面会补上从哪儿摘来的Url地址:
/data/htdocs/tools.jackxiang.com/websocket.html
vi websocket.html
四、在Firefox或chrome下访问这个支持websocket的Js代码:
WebSocket Test
CONNECTED
SENT: WebSocket rocks
RESPONSE: Server: WebSocket rocks
DISCONNECTED
说明这个php是真支持websocket的,否则不会输入什么就输出什么,得证。
参考:http://www.xyhtml5.com/websocket-javascript-example.html
——后来发现swoole_framework里的example里居然有对这个websocket的php配套的简单测试代码——
后记,其实swoole_framework下提供了和websocket相关的html测试及php客户端测试:
websocket_client.html websocket_client.php websocket_server.php
(1)前端:websocket_client.htm
把wss换成ws,wss好像是https的websocket:
//var wsServer = 'wss://127.0.0.1:9443'; //IP也换下
var wsServer = 'ws://119.10.6.23:9443';
访问下:http://tools.jackxiang.com/websocket_client.html
Connected to WebSocket server.
这个实例不如上面复杂,但服务端确实收到消息了:
[2014-08-22 17:16:47] INFO new http request. fd=12
[2014-08-22 17:16:47] INFO WebSocket connection #12 is connected
(2)后端:websocket_client.php 这里可能要结合swoole_framework的类java包机制:
修改9503修改为9443,运行测试下:
[root@jackxiang examples]# php websocket_client.php
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
^C
得证。
WebSocket的JavaScript例子,一个WebSocket的简单Echo例子:
例子代码来自:http://www.websocket.org/echo.html
上面这个链接可以当作一个websocket的工具调试并使用。
一、当然,得下载swoole服务扩展并安装:
git clone https://github.com/swoole/swoole-src.git
You should add "extension=swoole.so" to php.ini
二、动态服务端代码:
cd /data/codesdev/swoole/
git clone https://github.com/matyhtf/swoole_framework.git
/data/codesdev/swoole/swoole_framework/examples/websocket_server.php
上面是swoole_framework提供的代码,我们就直接运行这个服务端的server侦听9443端口:
php websocket_server.php
三、静态Js代码,通过firefox访问下,当然其他支持websocket的浏览器也可以,这块暂没从swoole_framework里摘,在网上摘的js,后面会补上从哪儿摘来的Url地址:
/data/htdocs/tools.jackxiang.com/websocket.html
vi websocket.html
四、在Firefox或chrome下访问这个支持websocket的Js代码:
WebSocket Test
CONNECTED
SENT: WebSocket rocks
RESPONSE: Server: WebSocket rocks
DISCONNECTED
说明这个php是真支持websocket的,否则不会输入什么就输出什么,得证。
参考:http://www.xyhtml5.com/websocket-javascript-example.html
——后来发现swoole_framework里的example里居然有对这个websocket的php配套的简单测试代码——
后记,其实swoole_framework下提供了和websocket相关的html测试及php客户端测试:
websocket_client.html websocket_client.php websocket_server.php
(1)前端:websocket_client.htm
把wss换成ws,wss好像是https的websocket:
//var wsServer = 'wss://127.0.0.1:9443'; //IP也换下
var wsServer = 'ws://119.10.6.23:9443';
访问下:http://tools.jackxiang.com/websocket_client.html
Connected to WebSocket server.
这个实例不如上面复杂,但服务端确实收到消息了:
[2014-08-22 17:16:47] INFO new http request. fd=12
[2014-08-22 17:16:47] INFO WebSocket connection #12 is connected
(2)后端:websocket_client.php 这里可能要结合swoole_framework的类java包机制:
修改9503修改为9443,运行测试下:
[root@jackxiang examples]# php websocket_client.php
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
Received from server: Server: hello world
^C
得证。
背景:这块企业QQ也用到PHP的扩展实现Server以供高性能,同时利用PHP的编码效率高、调试快、修改快、迭代快、门槛低实现企业级应用,实为罕见,目前除开QQ有这样的架构外,Swoole也有这样的能力,通过纯C实现了一个PHP的Server扩展,达到很高的长连接数,并且开发入门低、开源、稳定可靠,可以值得从swoole窥探企业QQ的PHPServer的中间层实现,异曲同工之处,值得深入玩味。:-)
对比IaaS和PaaS,SaaS得到的关注显然要少一些。究其根本,不仅因为SaaS关注的是功能方面的探索,更偏向于某个领域或层面的实际应用,还归结于相较前两者,软件的云化已基本趋于成熟,些许突破并不能带来产业上的变革。然而,较少的关注并不意味着缺乏明星产品:放眼国外,企业级SaaS服务已成为许多公司的一项重要收益来源,比如Salesforce、Oracle;而聚焦国内,同样有很多值得我们关注的产品,就比如本次我们关注的焦点——腾讯企业QQ。这里,我们接触到了企业QQ的Web技术团队,与他们团队的王帅、甘德建、赵凯、陈胜强、唐朝等几位核心人员进行了深入沟通,了解了基于LNMP,超过4万付费企业办公平台的架构及优化经验。由王帅代表团队回答。
阅读全文
对比IaaS和PaaS,SaaS得到的关注显然要少一些。究其根本,不仅因为SaaS关注的是功能方面的探索,更偏向于某个领域或层面的实际应用,还归结于相较前两者,软件的云化已基本趋于成熟,些许突破并不能带来产业上的变革。然而,较少的关注并不意味着缺乏明星产品:放眼国外,企业级SaaS服务已成为许多公司的一项重要收益来源,比如Salesforce、Oracle;而聚焦国内,同样有很多值得我们关注的产品,就比如本次我们关注的焦点——腾讯企业QQ。这里,我们接触到了企业QQ的Web技术团队,与他们团队的王帅、甘德建、赵凯、陈胜强、唐朝等几位核心人员进行了深入沟通,了解了基于LNMP,超过4万付费企业办公平台的架构及优化经验。由王帅代表团队回答。
阅读全文