E_ALL & ~E_NOTICE 与 E_ALL ^ E_NOTICE

在某个论坛上发现了三年前的有趣话题, 哈哈哈哈哈哈, 希望它们看过”数据结构”教科书,也许它们上学时有这本, 也许它们至今还珍藏并且从未看过

我觉得这话题, 的确会有一部分人会理解, 但是我希望给不理解的那部分人看的, 也许这问题本身就很粗浅, 但是我们都高估了计算机专业科班出身的那群孩子的专业知识

error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL ^ E_NOTICE);

要理解这个问题, 得从位运算的基础说起

PHP中, 整形为32个位, 换句话说,

 1 = 00000000000000000000000000000001
~1 = 11111111111111111111111111111110

其实对于 E_NOTICE 使用 & ~ 或者 ^ 的结果, 出现问题的几率是0, 因为 E_NOTICE 的确是包含在 E_ALL 中
那我们换个常量来用看看, E_STRICT 在 PHP 5.0 中被定义, 而它的特殊性, 导致它并没有被定义在 E_ALL 中,

假设某个童鞋写了一个程序, 而我们的程序作者同学对 E_STRICT 不包含在 E_ALL 中并不知情
error_reporting(E_ALL ^ E_STRICT);
这时问题就出现了, 假定当前PHP版本为5.2, 这时

E_ALL    = 6143 = 00000000000000000001011111111111
E_STRICT = 2048 = 00000000000000000000100000000000

这里可以看出来, 6143的第12位为0, 而2048为1,
###########################################
我们来说^是什么, ^的作用是: 当 操作数A 和 操作数B 中当前位不同时, 返回结果的当前位设为1, 反过来理解就是, 当 A或B 中当前位相同时, 返回的结果的当前位为0

而我们的作者童鞋正是希望它的反向结果,也就是由于A/B中当前位相同,所以得到0,相当于去掉这个2048,事与愿违的是,,

由于6143中不包含2048, 所以6143和2048的每一位都不同, 所以我们的6143被填上了第12位的1, 变成了8191, 而不是预期的去掉第12位的1, 而作者的意图很明显的是希望去掉它, 很遗憾的是作者并不知道它本来就不在其中
程序运行的结果就是所有的E_STRICT错误被展示给所有访问者欣赏
###########################################
那么我们再看 & ~的结果
首先说, &的含义是 将 A 和 B 中当前位都为1的位设为1, 反过来就是 A 或 B 中任意一个的当前位不为1, 当前位的结果都是 0
而~的含义是将操作数种所有的位翻转过来, 以前是1的变成0, 以前是0的变成1, 所以:

~2048 = 11111111111111111111011111111111

那么接下来由于 6143 的第12位为0, 被翻转的2048中第12位也为0, 而 & 只有在 A 和 B 的当前位皆为1时才将结果范围为1,其他皆为0, 那么第12位仍然保持0, 其他位不同的为0, 此时~2048中除第12位其他皆为1, 在6143中原有的为1的位保持不变,其他不同的变成了0,得到的结果仍然是6143
###########################################
至此我们得到一个结论

使用 A^B 希望将B排除在外, 希望这个条件成立, 只有在A中绝对包含B的情况下才能实现,而A中不包含B的情况下,相当于A加上B, 也就是说 ^ 在A中有B时去掉B,在A中没有B时加上B,是这么个作用

而使用 A&~B可以在无论是否已知A中是否包含B的情况下都可以无条件的让结果中不包含B, 等于说安全的从A中去掉B
###########################################
捎带介绍下 | , 它的作用是 A 和 B 中任意一个当前位为1的情况下, 结果的当前位即为1 , 这相当于 无论中 A中是否存在B, 都可以安全的添加B,不会让结果溢出
###########################################
简易理解方式:

使用 A ^ B  : A中有B就去掉, A中没有B就加上
使用 A & B  : 返回双方都包含的部分, 可用于判断某个或某些位是否存在
使用 A & ~B : A中有没有B都去掉B,不影响其他位
使用 A | B  : A中有没有B都加上B, 不影响其他位

phpMyAdmin Hack: Add change field order function

Only PMA 3.3.3

首先我没有太多空闲可以用来随时维护这个我自己偶尔要用的小功能,其次我并没有义务去做各种版本的兼容性/安全性测试,本功能仅适用于PMA和PHP的高级用户,我个人完全不保障该功能的安全性和兼容性,所以如果你坚持想用它,请自己保证服务器和数据的安全,我个人仅在PMA当前3.3.3版本上突然需要这个功能而做出来的,过分期待不要

如果我自己使用了新版PMA,并且我有空做这种事,我可能会提供兼容新版PMA的方法,在此之前,如果你先用了新版,如果它不兼容,请自行修改,如何修改,电子产品的说明书上都有说过:有请专业人士

修改方法:

1, 将以下链接文本中的两段代码分别复制到 PMA 333指定的行尾,该行当前版本应为空行

Download / pmahack.txt / 1.61 KB

2, success

使用方法:

单击查看

单击查看

5, 点不点保存别问我

QQ2009 第一个非官方皮肤

标题很光辉吧!! 我是标题党!!

其实我也不算标题党的, 因为我的确是发布QQ2009非官方皮肤主题第一人

首先我首发的这个并不是网上流传已久的修改QQ2009自带文件的修改玩法,而是像QQ2009以前的那种自制皮肤, 独立文件包, 不需要修改QQ自身

说下使用前提, 前提就是你要用QQ2009, 废话对吗? 绝对不是! QQ2009到底有多少个版本了你知道吗-_-!! 这里的要求是QQ2009正式版, 几天前刚刚放出来的, 现在还是QQVip优先体验版, 更新:刚刚已经正式发布了,不需要会员权限-_

下载之后,你要做的就是双击-_-,

演示:

单击查看


单击查看

对于使用者的介绍到此为止, 接下来发布QQ2009皮肤制作第一个教程, 连官方都没出呢-___-

QQ2009的主题制作很简单, 首先你需要一个CAB打包工具, 我想XP可以胜任, 具体如何打包不在本文讨论范围, 菜鸟问题请去电脑之家, 驱动之家, PC之家等等家里研究…

接着, 你需要一个编辑器, 我想记事本可以胜任-_-,别再问我怎么用了-_

再然后,你需要QQ2009正式版,接下来,你可以打开QQ系统设置,在皮肤设置里,已经有两个皮肤可选,一个默认,也就是完全塞进QQ资源文件只能拆解修改的版本,立个另外一个是需要下载的个性海滩皮肤,当你点它之后,会要你下载,它会存放在
系统盘:\Documents and Settings\你的当前用户名\Application Data\Tencent\QQ\Themes\Download,是一个扩展名为kipx的文件,

它是一个cab的包,解压方法自己考虑

下面开始列表讲解:其中有一个themeconfig.xml是必需品,打开它,怎么打开我不说了,之后也不再说类似问题了-_-


<theme-config PackPreview="这是显示在皮肤管理中的皮肤图标,默认preview.jpg" PackName="皮肤名称" PackMinVer="1695" PackVersion="1.0" PackID="皮肤ID,用来识别,默认是什么不重要,写上一串6位HEX范围的数字就好,比如B5AE1A"> <extcontrol> <adjustcolor enable="false"/>
</extcontrol>
<titlecontrol>
<titlevisible enable="false"/>
</titlecontrol>
<colorlist>
<color value="63599e"/>
加上上面下面这两个,一共可以定义8个颜色,这是qq2009皮肤的功能,让皮肤作者指定8个不同皮肤色调,显示在调色栏
<color value="526f9f"/>
</colorlist>
<backgroundlist>
<background preview="底纹的预览图标,png图片" maintopfile="QQ主面板上方底纹,png图片" mainbottomfile="QQ主面板下面的底纹,png图片" chattopfile="聊天窗口上方底纹,png图片" color="指定该底纹颜色"/>
加上上下两个,一共可以显示9个皮肤底纹,
<background preview="bg_preview_x.png" maintopfile="main_up_empty.png" mainbottomfile="main_down_x.png" chattopfile="aio_up_empty.png" color="63599e"/>
</backgroundlist>
<configlist>
<themeconfig file="main.png" anchor="topright" position="0" offset="-2,-14"/>这是QQ主面板上方的主纹理,上面的底纹部分,其实是显示在这个主底纹的上层
<themeconfig file="aio.png" anchor="topright" position="1" offset="-2,0"/>这是QQ聊天窗口上面的主底纹,概念同上
</configlist>
</theme-config>

我想这个讲解可以给部分想做QQ皮肤的人以帮助,至于想自制皮肤的电脑白痴,这里没办法再出一份30万字的傻瓜教程了,等有缘人出吧-_-

Download / qq2009-themes.7z / 264 KB

包里一个MC.kipx是我做的皮肤,一个A752E7.kipx是官方版,研究一下图片对应的位置和xml里的书写就能明白怎么做QQ2009皮肤了,还是很简单的

WordPress Cookies Expires

WordPress 有个特点, 饼干保质期(我在假扮自动翻译软件)很短很短, 最短 两天 最长 两周

本来就没多大一件事, 多余的话不多说了,

以 2.7.1 为例

wp-includes/pluggable.php:623

if ( $remember ) {
$expiration = $expire = time() + 1209600;

修改最后结尾的数字为你需要的,这里1209600是14天*24小时*60分*60秒

你可以考虑180*24*60*60,或者360*24*60*60,或者874!

WordPress Administration Panels Lite

当前版本: 1.4 更新记录和下载地址在最下面

嗯,这是个无聊插件, 确切的说, 它不过是我写的一个wp插件的框架模板, 用于填充, 作它纯粹为了设计一个良好的扩展模板, 比如说它只需要一个数组来保存, 为了整洁的数据库我希望所有插件都这样作-_-, 但是没几个人这么好心的, 大多数都会写成满数据库都是它的同个插件数据, 哪怕卸载了仍然如此-_-

那来说下这个插件吧, 你用IE进后台是不是会看到右下角有个让你觉得诈一看还算长的能看下去, 点了之后发现它很龌龊的东西, 对对, 就是它-_-

这个插件的第一个功能就是它,

接下来是一些特定人群专用东西, 比如我从不用tag, 所以管理文章的页面不需要显示一个全空白的tag栏目, 另外某些blog是完全不需要有人回复的, 所以tb和评论全关的blog自然也不需要在管理文章和管理页面的面板上显示评论数量

另外一些偏执到分类都不需要的人也可以隐藏掉分类-_-

另外还有个我估计大多数人用的着的, 不显示作者栏, 还是说后台那个管理文章和管理页面两个面板上的纵列啊, 这插件你看名字就知道和前台半点关系都没的

最后还有个功能是关掉后台首页的那些widget, 想关哪个都是单独的

其实都些小功能, 如果你有其他需求, 可以回帖, 这个是AP Lite, 只会加入新的删除wp原有功能的功能, 而且是针对wp后台的, 稍后还会有AP Plus, 是专门添加各种wp没有的部分

PS:只支持2.5+

更新记录:
Continue reading “WordPress Administration Panels Lite”

WordPress vs CMS

简单说这是一篇WP杂文, 闲聊下WP作为CMS的潜质

我想很多人都考虑过像我这样把WP作为整站程序, 这时候有几个问题让我很闹心

WP的定制性能, 这基本上对于blog来说它已经超越了, 但是对于网站的统一风格来说, 它的性能很弱了, 听我给你娓娓道来一下-_-

Continue reading “WordPress vs CMS”

WordPress的Feed

本篇文章并不是用来介绍WP的Feed的新手教程,更不会是歌颂WP的优秀功能,而是批判WP对Feed的近乎可憎的’优秀’易用程度

简单的说,WP用户都多少会发现WP的Feed遍布任何角落,附件,文章,页面,分类,链接分类,标签,每个东西都有一个Feed,而我并不希望它存在,确切的说,它很让我反感,因为无论你希望用户订阅你哪一个固定的Feed,你都没办法阻止,你都没办法统计到底有多少用户订阅了哪些不该订阅的,在统计外的Feed,这很讨厌,所以我决定砍死它,结果发现砍死它的结果无论你希望砍死哪一只,你都会让它全军覆没,从此不再提供Feed功能给你

Continue reading “WordPress的Feed”

Convert Movable Type Basename and Tags to WordPress

因为和blog有关,也和我用的wp有关, 所以这篇写出来最后决定塞进blog里, 虽然我不太喜欢在blog里讲技术上的事, 规矩就是拿来破例的…

其实这是个很遗憾的话题,MT是非常优秀的程序,但CGI的效率是可怕的,MT的效率是可怕的,综合起来就一个结果,空间商是可怕的,所以我想被迫从MT转WP的人并不会只有我的两个朋友而已…

切入主题,实际上wp有mt的导入程序,mt有导出程序,看起来很简单,但是MT3的导出并不输出文件名和TAGS,而WP继承了这点,WP的导入程序并不考虑MT的文件名和TAGS,所以才有了这篇文章,只为能帮上一点小忙…

Continue reading “Convert Movable Type Basename and Tags to WordPress”

You do not have sufficient permissions to access this page.

想看到这个提示很简单

方法如下:

默认的wordpress的数据库表前缀是wp_

你的也可能是把wp-config.php里的wp_改成其他,比如blog_吧

然后,手动把wp的10个表的前缀都改成cc_, 并且把wp-config.php中的也改成cc_

嗯,不错吧,你现在进后台就可以看到标题里那句很酷的话了!

照理说, 所有的内容都对上号了, 为什么会这样呢? 因为没有用户权限,为啥? 看下面…

哦,忘记说了,以上方法只是为了还原问题, 所造成的进不去后台问题本人概不负责!

应观众朋友们的热烈要求(虚构), 本人决定不仅提供实现方法, 并决定附送修复办法

Continue reading “You do not have sufficient permissions to access this page.”

SEO detail

最近发现SEO中有些东西满有趣,当然这并不表示我要作什么SEO站之类的,也没打算让我的内容非常少的网站做什么面向搜索引擎的优化,仅仅是一些细碎的关键词:细节\乐趣\吸引

有找过专门的软件和工具,以及一些测试方法,发现SEO还是满简单的一件事,其实如果网站够大,都是可以忽略的小细节罢了,而我喜欢细节的刻画

其实要说的事情很简单,通过对我自己网站的连接的测试以及内容的反复修改

我发现很多小细节容易被人忽视

这要归功于服务器端iis/apache等,因为他们把我们没有作的细节都补上了

看起来还没有进入主题,那么现在开始

Continue reading “SEO detail”