Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

回想起第一次接触到WordPress,是什么时候呢?应该是大二的时候。事情的起因大概是这样的,那时候有个很火的产品,叫Space,是微软出品的,现如今,那个产品已经烟消云散了。当年Space火的时候,很短的时间,就有一伙人,将Space打理得有声有色,定制得完全不似是Space了,简直绚丽夺目,因为Space允许注入CSS和JS,你想那不就相当于万能么,而我那时候不知道有一伙人,叫Web工程师。

后来Space做出了一次重大改革,就是人人痛恨的Space改版,大体上是把Space改成了类似现今的Qzone一样的东西,页面都是模块化的,一个豆腐干一个豆腐干的,然后用户可以自由拖动,但是从此不支持CSS和JS的注入了。你想,一夜之间,所有的Space长得千篇一律了,shit!摔!

阅读全文 »

其实以前我遇到过Html表单里面的这个checkbox的问题,这个被定义成一个feature也可以,一个bug也未尝不可,至少我这么认为。

表单中的checkbox,只有在状态是on的时候,才会提交到服务器,否则相关键值不会提交。这个从语意上,貌似是没有错的,checkbox,翻译成复选框,就代表这个可有可无。那用户没有勾选的时候,没有任何东西提交上来,这很公平,合理,这是一个feature。

阅读全文 »

在Google搜索这个问题的答案的关键字 How to split a camel style string 或者更直接 split a string by capital letter

一般,这个功能的应用场景,至少有一个是用来做字符串映射,比如在某些框架里面,把类名映射成路径之类的,如果你用过,就会懂我在说什么。

PHP的header函数用来发送Http头信息,我在使用中,有个场景,就是代理请求的场景。

从服务器A代理请求服务器B,然后把B的回包透传回客户端浏览器。

这里面尤其重要的是Cookie,因为我要实现Cookie换域,因为Cookie种在服务器B的域名上,我要替换其种在A的域名上,于是就有了这么一个代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);

$temp = explode("\r\n\r\n", $result, 2);
$header = $temp[0];
$content = $temp[1];

$matches = array();
$ret = preg_match_all('#^Set-Cookie.*$#m', $header, $matches);
if ($ret) {
foreach ($matches[0] as $cookieinfo) {
$cookieinfo = str_replace('server.b.domain.com', 'server.a.domain.com', $cookieinfo);
header($cookieinfo); // <--- 陷阱就在这里,Set-Cookie不止一行,
// 但是header函数的第二个参数replace,默认是true,
// 所以,理论上只有最后一个cookie会被正确种上
// 这个bug困扰了很久,引以为戒,应改为header($cookieinfo, false);
}
}

微信是时下最为火爆的话题了,我也不能免俗地要来聊一聊微信了。没有什么独家,没有什么秘籍,就随便聊聊作为一个微信重度用户的想法,一个痛点。

我记得我是微信的第一万多名用户,那时候我还用的是诺基亚S60系列的E63,那时候微信上没什么人,也不好用,后来我紧接着买了Nexus S,然后微信的Android版本要好的多,不过还是没什么人,我同时也用米聊,但是都没啥意思,因为用的人不多。最后等到我换了iPhone,微信突然火爆了,就是火山喷发式的那种火爆。“摇一摇”只是催化剂而已,在互联网圈子里吹得很火,但是对于真实用户,摇一摇未必真那么神奇。

阅读全文 »

给公司的项目做了一个内部运维站点,日久天长,发现功能越来越多,而且很多至关重要的东西都在上面,如果一个小白,胡乱点点,可能引发致命运维事故。于是乎,希望能做一个访问控制。

第一个想到的是Yii框架自己支持的RBAC系统,每个Yii App默认加载一个组件,就是authManager,可以应用一种基于角色的访问权限控制体系。以前虽然早就知道了这个,但是从来没用过,而且也从来没觉得好用过。光看了文章吹捧怎么科学了。

今天仔细研究了一下,官方站点有个实作模块,叫srbac,流传很广,就用了这个,希望顺便搞懂这东西。

阅读全文 »

写PHP是我工作的主要内容之一,我尤其喜欢使用的IDE是Netbeans,所以,之前心血来潮,做了一个Netbeans的皮肤站点(http://netbeanstheme.com)供大家交流Netbeans配色方案用。

因为是心血来潮,就要一个“快”字,火速申请域名,用WordPress搭了小站,然后用了一个极简的Portfolio类型的皮肤,每个Post一个Feature Image作为截图预览,然后用Custom Fields来记录下载链接,一个Download键用来记录链接,一个Author域用来记录作者,然后又用cformsII插件做了一个上传皮肤配置文件的表单,一个小站就算完毕了。

然后,网上随便挂了几个月,发现貌似挺受欢迎,获得了很多的反响。于是乎,发现一个现象,就是有些皮肤下载的人多,有些下载的人少,根据留言数目看出来的。当然了,做互联网的这种直觉一开始就该有的,当初太偷懒了。当然,现在也不迟啦,马上加一个统计,记录所有的配色方案的下载次数。既要兼容以前已经有的Post,又要使用简单,肿么办?

阅读全文 »

在Ubuntu服务器上,执行apt-get或者aptitude,可以列出软件包的名字,每行一个,最前面有个表明状态的字母标识:

  • p 在系统里没有关于该软件包的相关操作记录
  • c 软件包已经删除,但是配置文件仍旧保留在系统中
  • i 软件包已经安装过了
  • v 软件包是虚拟的(由若干其他软件包组合而成)

第二个位置上的字母,表明即将执行的动作

  • i 即将被安装
  • d 即将被删除
  • p 软件包和配置文件将被删除
  • A 表示软件包已经自动安装了

到底什么是NAT呢?在不同的领域里估计有不同的含义,本文里的NAT特指计算机网络领域的专有名词Network Address Translation,翻译成中文是网络地址转换。(在此,特别声明,以下要描写的东西,都是对该概念的基本内涵的个人理解,并没有什么新鲜的东西,也不保证正确,感兴趣请参阅《计算机网络》第四版)

阅读全文 »

我是一个 Python 入门级别用户,虽然我一天到晚黑 Python,但是到了用的时候,又不得不用,这真的很悲哀。我讨厌 Python 就因为一个原因,就是其垃圾一样的文档。

这次我被一个绊脚石绊住两次,是因为有点搞不明白 Python 函数的参数。Python 语言的函数参数,到底是用值传递,还是引用传递?其实要思考这个东西,都是从 C++ 带来的一些习惯,虽然我不是一个 C++ 的程序员,但是也是通过学习 C++ 来学习编程的,不可避免地就要带有 C++ 的习惯。在那个语言里,是需要搞清楚这些东西的,编程语言并没有向程序员隐藏这些细节。以至于到了使用动态语言的时候也很容易陷在这种细节里面。

阅读全文 »