無標題文檔

从墩布到大褂

看了韩磊的 从大褂还是内裤 有感,所以写下我的个人看法。作者首先是从一个笑话开始的:

有个相声说,某人买了一丈布,要找裁缝做大褂。其妻自告奋勇,称自己
也会做,就接手做了。两个月后问她,说做是做,只是把布剪坏啦,改做
小褂吧。如此循环,从大褂变成小褂,小褂变成肚兜,肚兜变成内裤,内
裤变成口罩,最后只好扎了墩布。

这是一个笑话,作者也阐明了自己立场,就是 设计程序应该是越简单越好。这个道理虽然简单易懂,但是目前国内的软件开发环境来说,很容易犯这种错误。

就拿本人亲身经历的事来说,作为某行业的 B2B 交易平台打算做一个类似于淘宝旺旺在线交流工具。但是我个人在之前就认为应该在开发某项产品和功能之前,应该慎重考虑下是否有其实现的必要和支付此损耗(无论是时间、人力还是财力)的能力。

然而,最后由于种种原因而导致此项目不了了之,但已经损耗的资源已经是无法挽回的了。这就好比上述笑话中的那个自告奋勇的妻子一样,想一口气做一个大褂,但是没有慎重评估自己的能力,最终失败甚至还闹出了笑话。

笑话中,如果说布是作为资源的比喻的话,那么项目的功能就好比是将这块布做出的成品(大褂还是墩布?)。软件设计思想中有著名的 KISS 原则(Keep It Simple and Stupid) ,所表达的也是这个意思。譬如从上述我亲身所经历的失败项目中吸取教训,就可以很容易的得知:如果在前期做足了充分的需求调查以及可行性分析,那么结果可能会更理想一些

作为互联网从业人员之一,我也看见了有很多的项目从当初简陋到逐步的累积完善,这样的案例有 鲜果阿里妈妈 等等。 他们都具有优秀的团队所拥有的气质 。这些团队的发展和所取得的成就,对于我来说也是一种激励和借鉴。

从墩布到大褂是逐步累计的过程,就好比 鲜果 Blog 上的签名一样,「罗马不是一天建成的,我们每天都在建」。那么,如果懂得这一道理的话,就不会再做贪心的吞象蛇了。

Shell 不是 BASH,BASH 是 Shell

标题听起来像是在绕口令,不过很多兄弟都会将 BASH、CSH 和 ZSH 以及 Shell 之间的关系搞混。本人似乎又在「误人子弟」了,下面是我和 ghosTM55 兄弟 的一些聊天记录,整理如下。

ghosTM55: 自动补全是 Shell 极为有用的一项拓展功能 ,这句话有没有错?
手气不错: 应该是 BASH,Shell 是一个接口,而不是程序
ghosTM55: 好的,明白了。那么为什么有 Shell 分类这种说法呢?
手气不错: Shell 的主要功能就是封装内核和系统调用,提供统一的接口供
          用户使用。比如你编辑 /etc/passwd 更改用户默认的 shell 为
          ls,那么就显示一下当前用户目录就退出了。这是因为 ls 发送
          了 Shell 退出同样的信号(通常为 EXIT_SUCCESS)。
ghosTM55: 对
手气不错: 同时 Shell 会在幕后做很多的事情。比如你在 Shell 中输入 ls
          回车。它要做的事情首先就是在 PATH 中寻找 ls 程序。
ghosTM55: 恩
手气不错: 然后 exec() 运行 ls,等待 ls 返回,然后 shell 获得 ls 的
          退出返回值(信号),程序结束。
          这你可以看 time ls 就知道,有一个用户进程和内核进程的概念。
          大致的流程就这样,不过通常 shell 要做的事情比上述要做的事
          情要复杂得多。
ghosTM55: 那么 Shell 的种类这种讲法是不存在的?
手气不错: 这就回到上面所提到的了,shell 我个人认为是一个接口,可以有
          不同的实现(有一个叫 POSIX 标准的东西),对比 bash、csh、
          zsh 等等这些 Shell,这就像虚拟终端(Virtual Terminals)有 
          xterm、rxvt 一样。所以,引证上面的话,说终端都有半透明功能,
          这是不正确的 - 有可能就 rxvt 有这样的功能。
ghosTM55: 哦

简而言之,可以用下面的图来理解 内核 - Shell - 应用程序 - 用户 之间的的关系(图片引自 这里 )。

https://friable.rocks/_/2008_01_09/536750136.jpg

想更深入了解 Shell 机制的,可以参看 这里这里

更正:感谢寂寞烈火等兄弟的 指正 ,「应该是 BASH,Shell 是一个接口,而不是程序」这句话是 错误 的。应该是:

理论上,只要你愿意,任何一个程序都可以作为你的 Shell。- 引自 r2007 兄弟

转换字符串至 NCR

看见 PHPChina 上转帖 andot 的一篇文章《 在任意字符集下正常显示网页的方法 》,非常的受用,于是将代码粘贴到这里收藏一下。

同个页面呈现不同语言字符的编码使用 UTF-8 是目前主流的应用方案。但是在一些极端的情况下,我们不得不在某些西方字符编码的页面上显示中文。

这时候,作者非常「取巧」地想到了使用 Numeric character reference 解决这一问题。原理引述原文:

原理很简单,就是把除了 ISO-8859-1 编码中前 128 个字符以外的所
有其他的编码都用 NCR(Numeric character reference) 来表示。比如
「汉字」这两个字,如果我们写成「汉字」这种形式,
那么它在任意字符集下都可以正确显示。

下面是我做的一些无关痛痒的修改,希望作者见谅:

/**
 * nochaoscode - 转换字符串至 NCR
 *
 * @param  string $str     原字符串
 * @param  string $encode  原字符串的编码,默认 UTF-8
 * @return string 原字符串的 NCR 字符
 * @see http://en.wikipedia.org/wiki/Numeric_character_reference
 */
function nochaoscode($str, $encode = "utf-8")
{
    if (!function_exists("iconv") || !function_exists("mb_strlen")) {
        return $str;
    }

    $str = iconv($encode, "utf-16", $str); 
    for ($i = 0; $i < mb_strlen($str); $i+=2) { 
        $code = ord($str{$i}) * 256 + ord($str{$i + 1}); 
        if ($code < 128) {
            $output .= chr($code); 
        } else if ($code != 65279) {
            $output .= "&#" . $code . ";"; 
        }
    }

    return $output; 
}

原作者的 DEMO 在这里 ,但是不知道什么原因我打不开,请各位了解的告之。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章