领导管理的原则

2014年2月14日 09:34

作之君,作之亲,作之师
君: 代表领导,代表以身作则
亲: 是父母,代表关怀,代表爱护
师: 代表处处引导他,教诲
 
管理的好坏全在其中,三者缺一不可。

 

评论(0) 阅读(807)

SQL标准规定中null值判断是否合理?

2014年2月11日 18:50

在postgres中判断null值时,下面语句的结果不相等,为什么?
select * from user_info where user_name is null
select * from user_info where user_name = null
 
原因是postgres遵循sql标准,在ANSI SQL(SQL-92)标准中规定的Null值的比较取值结果都为False.
它认为NULL 代表一个未知的数值,无法知道两个未知的数值是否相等。
 
这个理由很不充分,既然无法判断,那么is null又是如何判断它是空的呢?
 
虽然null表面含义是未知值,但是计算机中不可能有不确定的表示. 常见程序语言中null实际都是一个特殊值,一个确定的特殊值。所以在编程语言中是允许使用null=null(值比较)的. SQL中不允许是否合理?
 

Tags: sql;postgres
评论(0) 阅读(915)

postgres递归查询

2014年2月11日 16:58

Tags: postgres
评论(0) 阅读(1311)

jquery对象是否相同

2014年2月11日 13:46

通过不同形式得到同一个htnl元素,如何比较它是否相同?
假设得到后,两者变量名是A和B. (A和B是js元素,还是jquery对象,此时不清楚)
 
第一个想到的是方法是$(A) == $(B),结果返回false
再试试$(A)[0] == $(B)[0],结果返回true
 
它比较的是什么?
 
看看下面例子,下面的两个input比较,会相同吗.
<div id="content">
    <input name="user_name"/>
    <input name="user_name"/>
</div>
 
它们不同
$(function(){
    var inputs = $("#content input")
    console.info(inputs[0] == inputs[1]);  //false
    console.info($(inputs[0]) == $(inputs[0])); //false
});
 
其实比较只有两种类型: 值类型和引用类型.
上面就是引用比较. jquery的$会产生新对象,每次的引用都不同,自然就不相等.
所以只能用最初的引用进行比较,而不是jquery转化后的.

评论(1) 阅读(3880)

理解select模块--等待IO完成

2014年1月26日 17:24

Tags: 非阻塞 python
评论(0) 阅读(1448)

socket.error: [Errno 32] Broken pipe错误的原因

2014年1月26日 15:47

linux下的socket程序,尝试发送消息到已关闭的socket上,会出现此错误.
 
示例代码
服务端server.py
#encoding=utf-8
import socket
import time


def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('0.0.0.0', 8050))
    sock.listen(5)

    client_sock, address = sock.accept()
    while True:
        msg = client_sock.recv(1024)
        print msg
        client_sock.send('from server: %s' % msg)
        time.sleep(1)
    client_sock.close()
    sock.close()


if __name__ == '__main__':
    main()
 
客户端client.py
#encoding=utf-8
import socket
import time


def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('0.0.0.0', 8050))
    while True:
        sock.send('hi')
        print sock.recv(1024)
        time.sleep(1)
    sock.close()


if __name__ == '__main__':
    main()
 
运行server.py和client.py,然后中断client.py会出现上面错误。

Tags: socket
评论(0) 阅读(6737)

ssh在远程执行多个命令

2014年1月21日 11:18

执行单个命令

ssh wyq@135.32.9.98 'ps -ef |grep process.py'

在远程主机上执行命令"ps -ef |grep process.py",在本机就可以看到输出.

使用分号分隔,允许一次执行多个命令

ssh wyq@135.32.9.98 'cd ~/src; sh start.sh'

进入到~/src目录,然后执行脚本sh start.sh

 

评论(0) 阅读(3889)

yum更新initscripts和selinux失败

2014年1月20日 09:32

来源 http://stevenrosenberg.net/blog/linux/fedora/2014_0118_fedora_update_scriptlet_problem

最近在fedora20中用yum更新,会出现问题

[wyq@localhost ~]$ sudo yum -y  update
已加载插件:fastestmirror, langpacks, refresh-packagekit
Loading mirror speeds from cached hostfile
 * fedora: mirrors.yun-idc.com
 * fedora-sohu: mirrors.yun-idc.com
 * updates: mirrors.yun-idc.com
 * updates-sohu: mirrors.yun-idc.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 initscripts.x86_64.0.9.50-1.fc20 将被 升级
---> 软件包 initscripts.x86_64.0.9.51-1.fc20 将被 更新
---> 软件包 selinux-policy-targeted.noarch.0.3.12.1-116.fc20 将被 升级
---> 软件包 selinux-policy-targeted.noarch.0.3.12.1-117.fc20 将被 更新
--> 解决依赖关系完成

依赖关系解决

================================================================================
 Package                     架构       版本                  源           大小
================================================================================
正在更新:
 initscripts                 x86_64     9.51-1.fc20           updates     414 k
 selinux-policy-targeted     noarch     3.12.1-117.fc20       updates     3.6 M

事务概要
================================================================================
升级  2 软件包

总下载量:4.0 M
Downloading packages:
Delta RPMs reduced 414 k of updates to 194 k (53% saved)
(1/2): initscripts-9.50-1.fc20_9.51-1.fc20.x86_64.drpm     | 194 kB   00:01     
(2/2): selinux-policy-targeted-3.12.1-117.fc20.noarch.rpm  | 3.6 MB   00:13     
--------------------------------------------------------------------------------
总计                                               253 kB/s | 3.8 MB  00:15     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
error: %pre(initscripts-9.51-1.fc20.x86_64) scriptlet failed, exit status 127
Error in PREIN scriptlet in rpm package initscripts-9.51-1.fc20.x86_64
error: initscripts-9.51-1.fc20.x86_64: install failed
error: %pre(selinux-policy-targeted-3.12.1-117.fc20.noarch) scriptlet failed, exit status 127
Error in PREIN scriptlet in rpm package selinux-policy-targeted-3.12.1-117.fc20.noarch
initscripts-9.50-1.fc20.x86_64 was supposed to be removed but is not!
  验证中      : initscripts-9.50-1.fc20.x86_64                              1/4 
  验证中      : selinux-policy-targeted-3.12.1-117.fc20.noarch              2/4 
selinux-policy-targeted-3.12.1-116.fc20.noarch was supposed to be removed but is not!
  验证中      : selinux-policy-targeted-3.12.1-116.fc20.noarch              3/4 
  验证中      : initscripts-9.51-1.fc20.x86_64                              4/4 

失败:
  initscripts.x86_64 0:9.50-1.fc20                                              
  initscripts.x86_64 0:9.51-1.fc20                                              
  selinux-policy-targeted.noarch 0:3.12.1-116.fc20                              
  selinux-policy-targeted.noarch 0:3.12.1-117.fc20 

需要关闭selinux

sudo setenforce 0 //临时关闭selinux

sudo yum -y update //此时再更新,即可

sudo setenforce 1 //开启selinux

评论(0) 阅读(988)

什么是异常,其实我不是很清楚

2014年1月17日 17:24

起因

平时能较好的处理异常。但在自定义异常时才发现,并不了解异常。对于用的api也不真明白为什么要抛出异常,而不用其它方式。
 
针对自己的疑惑,觉得有必要好好思考下
 

异常机制的产生

语言发展是从汇编到C再到C++. 在汇编和C语言中都没有异常机制。
它们用的是错误编码机制. 直到C++才出现异常机制。
 
什么导致C++中出现异常机制?要回答它,需先了解错误编码机制的存在的缺点。
* 错误信息不全
调用信息不全; 错误种类很多,返回会过于简单.
* 默认可以被忽略
默认可以不用检查返回的错误编码,很容易使程序处在不正常状态.
* 不能跨作用域传送
只能一层层的向上传送,每层都有一堆检查错误的代码,会掩盖正常处理。
 
编码机制是为解决程序错误这个需求而生。在错误发生时最重要的是:
错误内容是什么?
在哪儿出错了?
为什么出错?
编码机制存在着缺点,不能很好解决这几个需求。
 
异常机制能完善的解决了这些问题. 所以后来语言中都加入了异常机制。
 
异常机制也就了两个重要特点:
* 沿着调用堆栈向上传递错误
* 不可忽略
前者可获得完整的调用信息,方便定位错误地点. 也可将错误处理代码分离出来。
后者明确拒绝不健康运行状态,是程序正确性的关键。
 

对异常的疑惑

一个简单的python异常
>>> a = {"a": 1, "b": 2}
>>> a.pop(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
对于它我有很多疑问:
1. 为什么抛异常?返回特殊标记不行吗.
2. 什么是异常?为什么它会被定义为异常.
 
回答第一个问题
异常的特点是就是"不可忽略",上面的pop没有任何值适合作为标记,它只能抛异常. 如果忽略了,可能会让程序处在不健康状态。
 
回答第二个问题
异常是判断词,与它对的应是正常。
那么什么是正常?回答它也就可回答第二个问题了.
异常与正常其实隐藏着一个判断, 隐藏着一个判断标准。
 
那么谁在判断,谁在制定标准。答案是你。
你在决定什么是异常,什么时候该抛异常,抛什么类型的异常。
例子中就是python作者在背后做了思考/定义,决定它应该作为异常。
 

如何使用异常

当定义好什么是正常,知道哪些是不正常而且不可忽略时,就是使用异常的时候。为防止不健康运行状态. 而且不可忽略.
 
值得注意的是:通常是没法考虑全面的,会有漏掉的情况,应以保守的方法处理,对未考虑到的情况全部作为异常处理,再分辨,逐步完善。
 
异常的重要性
它是软件好坏的重要标志,任何在这上面处理不好的软件,无不是充满了坑。
 

Tags: 异常
评论(2) 阅读(1439)

在用proxychains时, ping用不了怎么办

2014年1月16日 10:49

一般用ping来测试网络是否连通. 在用proxychains代理时,发现ping用不了
[wyq@localhost ~]$ proxychains ping 135.32.9.98
ProxyChains-3.1 (http://proxychains.sf.net)
ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded: ignored.
PING 135.32.9.98 (135.32.9.98) 56(84) bytes of data.
proxychains支持的是socks,http, https协议.它们以tcp或者udp协议为基础. 所以proxychains只支持使用tcp或udp协议的程序. ping用的是ICMP协议,不以tcp或udp为基础,所以用不了。
 
有其它办法吗?
以tcp或udp为基础,测试网络是否可用的工具,比较好用的有wget
[wyq@localhost ~]$ proxychains wget 135.32.9.98
ProxyChains-3.1 (http://proxychains.sf.net)
--2014-01-16 09:44:57--  http://135.32.9.98/
正在连接 135.32.9.98:80... |S-chain|-<>-192.168.1.115:1080-<><>-135.32.9.98:80-<--denied
失败:拒绝连接。
虽然提示拒绝连接,但是输出信息,已能说明网络连通了.
 
wget本身简单易用,在这种情况下,用来测试网络是否可用,还是比较适合的。
 

评论(0) 阅读(2427)