*(type*)(addr as int)
这种方法还真是暴力…
举例:
一个sector里有2KB空间。要访问第250个sector的第一个byte:
printf(“%d, *(char*)(250*2048));
*(type*)(addr as int)
这种方法还真是暴力…
举例:
一个sector里有2KB空间。要访问第250个sector的第一个byte:
printf(“%d, *(char*)(250*2048));
trim (PHP 4, PHP 5)
trim — Strip whitespace (or other characters) from the beginning and end of a string
string trim ( string $str [, string $charlist ] )
首先声明,这里讨论的是在不指定charlist的情况下,以及在utf8下,为什么没有mb_trim。
根据php手册,可以找到,trim会处理如下字符:
” ” (ASCII 32 (0×20)), an ordinary space.
“\t” (ASCII 9 (0×09)), a tab.
“\n” (ASCII 10 (0x0A)), a new line (line feed).
“\r” (ASCII 13 (0x0D)), a carriage return.
“\0″ (ASCII 0 (0×00)), the NUL-byte.
“\x0B” (ASCII 11 (0x0B)), a vertical tab.
不难发现,将这些字符换成二进制后,其高四位都是0。
根据utf-8标准:
最高位为0, 当且仅当该字符在0-127范围内。
当需要使用超过1个byte的长度来表示的时候,所有byte的最高位都是1。
所以,trim默认并不会影响多字节字符。所以也就没有mb_trim了。
但是是不是对其他编码也都适用,暂时不太清楚。
中文常见的,比如
GB2312:双字节表示。第一字节使用0xA1-0xF7,第二字节使用0xA1-0xFE。
GBK:表示中文为双字节。第一字节81–FE。
以上编码在表示字母的时候都和ASCII兼容。
容易看出来,这些也没什么问题。
mysql(i)_set_charset不仅影响mysql字符集,同时影响escape_string。
后者是过滤危险SQL的关键。
只使用set names,则仅修改mysql字符集,escape_string仍然将按照单字节处理字符串。
参考:
http://www.laruence.com/2010/04/12/1396.html
方法1:switch –relocate
1。进入工作复本
#> cd ~/test
2。查看仓库地址(URL)
#> svn info
路径:.
地址(URL):http://192.168.28.1/repos/test
档案库 UUID:a81f9bed-3506-0410-b369-e50476f75162
修订版:44
节点种类:目录
调度:正常
最后修改的作者:yanghong
最后修改的修订版:44
最后修改的时间: 2005-11-24 16:05:30 +0800 (四, 24 11月 2005)
可以看到地址为:”http://192.168.28.1/repos/test”
3。更改仓库地址(URL)
#> svn switch –relocate http://192.168.28.1/repos/test https://192.168.28.1/repos/test
验证“https://192.168.28.1:443”的服务器凭证时发生错误:
- 本凭证并不是由受信任的权威机权所核发。请手动利用指纹以验证
凭证的有效性!
- 本凭证的主机名称不符。
凭证信息:
- 主机名称:(www|svn|ftp|developers).cocreate.com.cn
- 有效期间:自 Dec 22 02:52:50 2005 GMT 至 Jan 21 02:52:50 2006 GMT
- 发行者:Co-Create Open Source Software Co.,Ltd., BeiJing, BeiJing, CN
- 指纹:63:62:b9:9e:61:c2:10:d2:ae:49:81:87:a3:57:a8:e4:76:42:6f:c8
(R)拒绝,(t)暂时接受 或 (p)永远接受?p
Q:我的SVN服务器换地址了,我在客户端要做什么变化?
A:
1,将当前的用户在SVN客户端当前路径切换到当初更新SVN的位置上.
2,执行命令:svn switch –relocate (Old Repository Root) (New Repository Root)
Old Repository Root可以通过:svn info来查看.
3,svn update就可以正常的更新你的系统了.
附SVN INFO的内容范例:
$ svn info
Path: .
URL: http://svn.svn.com/ProjectName/Trunk/Project
Repository Root: http://svn.svn.com/ProjectName
Repository UUID: 149e7728-2900-0410-bded-c30b68e36566
Revision: Numbver
Node Kind: directory
Schedule: normal
Last Changed Author: Programmer Nme
Last Changed Rev: Number
Last Changed Date: 2009-02-14 12:39:08 +0800 (Sat, 14 Feb 2009)
方法2:
svn relocate FROM-PREFIX TO-PREFIX [PATH...]
svn relocate TO-URL [PATH]
参考:
http://hi.baidu.com/gacmotor/blog/item/ffb3db4478770a37869473dd.html
http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.relocate.html
包叫pptpclient。
配置文件在/etc/ppp/option.pptp和/etc/ppp/peers/
pty “pptp
name
remotename PPTP
require-mppe-128 #if you need
file /etc/ppp/options.pptp
ipparam
在/etc/ppp/chap-secrets里添加这样一行:
测试运行:pon
如果没有自行终止,那么就是成功了。这时候ifconfig里能看到ppp0出现。
添加路由条目:
route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0
最后。pptpsetup不靠谱。不知道它自动创建的那些东西都是什么……
参考:http://log4d.com/2011/09/pptpclient
事情是这样的。
group表中有一列是count,指明这个组里当前有多少人。在添加或者删除member表中数据的时候,程序会更新这个字段。
group表使用innodb,而member表采用myisam。所以无法使用事务来保证数据一致性。
故有需求,在一周内访问量最小的时候,要手动检查所有组的count,保证数据一致性。
诚然,一个带子查询的长长的SQL就可以搞定。但是为了更强的控制力,避免query意外无法终止,并且得到一些中间信息,需要程序先从group中select出每一行,得到group_id,然后再到member表中找对应数据求和,之后再update group表。
这时便引出了一个问题,是否需要确定数据真的不一致后再update?
猜测是MYSQL看到update的数据和原数据一致就不会再写入了。
测试环境是这样:
mysql> select count(1) from g\G
*************************** 1. row ***************************
count(1): 500000
1 row in set (0.00 sec)
mysql> show create table g\G
*************************** 1. row ***************************
Table: g
Create Table: CREATE TABLE `g` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topid` int(10) unsigned DEFAULT NULL,
`title` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
mysql> select count(1),topid,id%10 from g group by topid,id%10\G
*************************** 1. row ***************************
count(1): 50000
topid: 0
id%10: 0
*************************** 2. row ***************************
count(1): 50000
topid: 1
id%10: 1
*************************** 3. row ***************************
count(1): 50000
topid: 2
id%10: 2
*************************** 4. row ***************************
count(1): 50000
topid: 3
id%10: 3
*************************** 5. row ***************************
count(1): 50000
topid: 4
id%10: 4
*************************** 6. row ***************************
count(1): 50000
topid: 5
id%10: 5
*************************** 7. row ***************************
count(1): 50000
topid: 6
id%10: 6
*************************** 8. row ***************************
count(1): 50000
topid: 7
id%10: 7
*************************** 9. row ***************************
count(1): 50000
topid: 8
id%10: 8
*************************** 10. row ***************************
count(1): 50000
topid: 9
id%10: 9
10 rows in set (0.00 sec)
在set profiling=1之后,测试开始。
mysql> show profiles; +----------+------------+--------------------------------------+ | Query_ID | Duration | Query | +----------+------------+--------------------------------------+ | 1 | 6.99172800 | update g set topid=101 where id%10=1 | | 2 | 6.57200100 | update g set topid=102 where id%10=2 | | 3 | 6.53877500 | update g set topid=103 where id%10=3 | | 4 | 6.60186700 | update g set topid=104 where id%10=4 | | 5 | 6.33133300 | update g set topid=5 where id%10=5 | | 6 | 6.77799700 | update g set topid=6 where id%10=6 | | 7 | 6.35638200 | update g set topid=7 where id%10=7 | | 8 | 7.28370100 | update g set topid=8 where id%10=8 | | 9 | 6.86780100 | update g set topid=9 where id%10=9 | | 10 | 0.88183700 | update g set topid=0 where topid=0 | +----------+------------+--------------------------------------+
1-4效果应是一致的,不过时间差的好多= =。
取2作为样本:
mysql> show profile CPU,SWAPS,BLOCK IO for query 2; +----------------------+----------+----------+------------+--------------+---------------+-------+ | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps | +----------------------+----------+----------+------------+--------------+---------------+-------+ | starting | 0.000101 | 0.000000 | 0.000000 | 0 | 0 | 0 | | checking permissions | 0.000018 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Opening tables | 0.000027 | 0.000000 | 0.000000 | 0 | 0 | 0 | | System lock | 0.000011 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Table lock | 0.000013 | 0.000000 | 0.000000 | 0 | 0 | 0 | | init | 0.000064 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Updating | 6.440069 | 1.692106 | 0.216014 | 0 | 132744 | 0 | | end | 0.000029 | 0.000000 | 0.000000 | 0 | 0 | 0 | | query end | 0.000007 | 0.000000 | 0.000000 | 0 | 0 | 0 | | freeing items | 0.131636 | 0.000000 | 0.000000 | 0 | 360 | 0 | | logging slow query | 0.000017 | 0.000000 | 0.000000 | 0 | 0 | 0 | | cleaning up | 0.000009 | 0.000000 | 0.000000 | 0 | 0 | 0 | +----------------------+----------+----------+------------+--------------+---------------+-------+ 12 rows in set (0.00 sec)
5-9也差好多。取7吧:
mysql> show profile CPU,SWAPS,BLOCK IO for query 7; +----------------------+----------+----------+------------+--------------+---------------+-------+ | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps | +----------------------+----------+----------+------------+--------------+---------------+-------+ | starting | 0.000099 | 0.000000 | 0.000000 | 0 | 0 | 0 | | checking permissions | 0.000018 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Opening tables | 0.000027 | 0.000000 | 0.000000 | 0 | 0 | 0 | | System lock | 0.000010 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Table lock | 0.000014 | 0.000000 | 0.000000 | 0 | 0 | 0 | | init | 0.000063 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Updating | 6.247032 | 1.636102 | 0.212014 | 0 | 125256 | 0 | | end | 0.000025 | 0.000000 | 0.000000 | 0 | 0 | 0 | | query end | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | 0 | | freeing items | 0.109057 | 0.000000 | 0.004000 | 0 | 560 | 0 | | logging slow query | 0.000019 | 0.000000 | 0.000000 | 0 | 0 | 0 | | cleaning up | 0.000010 | 0.000000 | 0.000000 | 0 | 0 | 0 | +----------------------+----------+----------+------------+--------------+---------------+-------+ 12 rows in set (0.00 sec)
10是个奇葩。不过也贴出来看看:
mysql> show profile CPU,SWAPS,BLOCK IO for query 10; +----------------------+----------+----------+------------+--------------+---------------+-------+ | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps | +----------------------+----------+----------+------------+--------------+---------------+-------+ | starting | 0.000074 | 0.000000 | 0.000000 | 0 | 0 | 0 | | checking permissions | 0.000016 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Opening tables | 0.000023 | 0.000000 | 0.000000 | 0 | 0 | 0 | | System lock | 0.000010 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Table lock | 0.000012 | 0.000000 | 0.000000 | 0 | 0 | 0 | | init | 0.000056 | 0.000000 | 0.000000 | 0 | 0 | 0 | | Updating | 0.880922 | 0.856054 | 0.024002 | 0 | 0 | 0 | | end | 0.000026 | 0.000000 | 0.000000 | 0 | 0 | 0 | | query end | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | 0 | | freeing items | 0.000675 | 0.000000 | 0.000000 | 0 | 0 | 0 | | logging slow query | 0.000010 | 0.000000 | 0.000000 | 0 | 0 | 0 | | cleaning up | 0.000005 | 0.000000 | 0.000000 | 0 | 0 | 0 | +----------------------+----------+----------+------------+--------------+---------------+-------+ 12 rows in set (0.00 sec)
主要对比Updating,可以看到,update时即使新旧数据一致,也会产生IO消耗,也就是说mysql还是会老老实实的更新一遍数据。
这是知乎上的问答:域名的所有权怎么保证是自己的呢?
王小川,搜狐CTO / 搜狗CEO
商家还是比较有道德的,实在发生了这个可以打官司。如果他做恶被告了,还可能被上游关停服务,所以应该比较安全。怕的是.cn域名,这个的最终解释权在国内,你懂的。
在以前发生过很多网站域名被停止解析,比如这里:知名网站电玩巴士被关闭 万网称执行上级要求
中国万网于二月二十日接到上级主管部门的通知,要求对部分网站停止域名解析。万网在接到该通知后,对列明的网站,包括tgbus.com(电玩巴士)进行了停止域名解析操作。万网作为专业的域名注册服务机构,将及时执行政府通知,除此情况外,在域名指向的站点中不存在违法信息的前提下,万网不会对用户的域名解析和指向做任何操作。同时,万网呼吁广大用户及时检查网站内容的合法性。
域名解析是网站访问的首要动作。服务器在国内被k,可以移动到国外。域名被k可就彻底没了办法了。
更换域名和更换服务器完全是两个运营难度。域名算是一个站点的核心资产了。
在国内,生态圈比较险恶。网站实名制下达最后通牒 拒绝备案域名将被关停
目前专项行动第二阶段结束(9月30日)在即,按照工信部的工作要求和有关规定,以下三种情况网站可能被关停:“未履行备案手续,擅自从事非经营性互联网信息服务,或者超出备案的项目提供服务的”、“对网站未备案的域名不予解析(含跳转)”、“域名注册信息不真实、不准确、不完整的”
小站长真的不好活。
密码学中的碰撞(Collision):
不同的数据,得到了相同的结果值(包括但不限于HASH值)。
现在最常见的HASH算法有CRC,MD5和SHA1。
虽然都已经被证明可以发生碰撞,但是安全性不同。
CRC
主要用在通讯中校验数据完整性,实现简单,速度快,但是容易碰撞。发生碰撞的风险随着CRC位数的增加而减小,但总体来说还是在通讯底层应用的更多一些。仅使用CRC校验的高层应用越来越少见了。
MD5
Message Digest 5。较CRC要安全的多。较为常见。散列结果通常为128bit长度。已发现碰撞的可能,并且已经发现有单消息块实现碰撞的例子。
SHA家族
Secure Hash Standard,有SHA-1、SHA-224、SHA-256、SHA-384和SHA-512(后四者通常并称SHA2)。
结果长度为160bit。目前貌似是相对安全的。
如果只是做用户登录的密码验证,那么SHA1(新浪weibo在用)和MD5(广泛采用)都应该是可靠的。
碰撞:http://bbs.pediy.com/showthread.php?t=133270
http://www.metsky.com/archives/337.html
http://www.cnbeta.com/articles/131295.htm
好像InnoDB这种表类型,目前对于我来说,只是事务上占优。
当然传说中的InnoDB适合多写环境,MyISAM适合多读环境,这个还有待进一步测试了。到底阈值在哪里没个准数。
tab是个10M rows的InnoDB表。
复制的结果是这样:
mysql> create table tab10M engine=innodb default charset utf8 select * from tab;
Query OK, 10000000 rows affected (8 min 32.08 sec)
Records: 10000000 Duplicates: 0 Warnings: 0
mysql> create table tab10Mi engine=myisam default charset utf8 select * from tab;
Query OK, 10000000 rows affected (1 min 8.85 sec)
Records: 10000000 Duplicates: 0 Warnings: 0
MyISAM求count爆快!10M级表瞬间结果!InnoDB要上秒级了。
count的结果是这样:
mysql> select SQL_NO_CACHE count(1) from tab10Mi;
+———-+
| count(1) |
+———-+
| 10000000 |
+———-+
1 row in set (0.00 sec)
mysql> select SQL_NO_CACHE count(1) from tab;
+———-+
| count(1) |
+———-+
| 10000000 |
+———-+
1 row in set (29.99 sec)
当带where的时候,MyISAM还是可以很占优势:
(id加了unique索引)
mysql> select SQL_NO_CACHE count(1) from tab10Mi where id<10000000000000000;
+----------+
| count(1) |
+----------+
| 10000000 |
+----------+
1 row in set (5.81 sec)
mysql> select SQL_NO_CACHE count(1) from tab where id<10000000000000000;
+———-+
| count(1) |
+———-+
| 10000000 |
+———-+
1 row in set (10.22 sec)
安装:
pacman -S fcitx
修改配置文件:
/etc/profile 底部加入:
export XMODIFIERS=@im=fcitx export GTK_IM_MODULE=xim export QT_IM_MODULE=xim
配置xfce autostart启动脚本:
ln -s /usr/share/applications/fcitx.desktop ~/.config/autostart/fcitx.desktop
重启搞定。