所以假設我今天想要自殺

未命名-1

當然,我沒有要自殺ww

讓我們來分析一下 Facebook 的這個貼心提醒,你可能以為很貼心,

但是如果你真正暸解想要自殺的人,他們並不會覺得這個提醒很貼心。


這,算是警告?

你發現到這個提示窗,最上面是以「警告」來提醒嗎?

一個真正需要被關心的人,用點勉勵一點的字行不行,例如說:「幹你娘別死啊!」


防自殺中心跟防自殺中心。

我很清楚知道你跟防自殺中心合作,但是出現太多次,會造成反感,

「我做錯什麼事情了嗎?」、「你們合作,所以我會被抓走嗎?」,

婊子拜託喔,可不可以用委婉一點的方式去告訴想自殺的人:「其實我們真的很關心你」?


我已詳細閱讀訊息?

我是在看成人網站嗎,要不要順便填寫「我已滿 18 歲」,

更何況這個勾不打,就不能繼續,感覺 Facebook 到處都在咄咄逼人 ..

如果你好奇,伊繁星校徽的來由

未命名dd-1

繁:這個字基本上就是校名:「伊繁星」,當初選用這個字是因為我覺得「繁」筆畫多,好漂釀 (?)

梅花:這個是台灣的國花,想說想在校徽裡加點台灣的什麼,總不可能是臭豆腐 …

稻米:老實說原本想掰故事的,不過真正原因只是我家附近有農田罷了。

EVENTS:這個是伊繁星的英文,同時也是「很多事件」的意思。

圓圈:OK,這個真的是沒屁用。

Facebook 怎麼做到標記的?

螢幕快照 2015-08-22 下午10.01.37

自從之前解析 Facebook 的 Textarea 後,就發現當你輸入「@人名」的時候,

在送出時其實會變成「@[使用者編號:1:人名]」,此時 FB 會順便記錄你「標記了誰」。


送出的基本欄位

螢幕快照 2015-08-22 下午10.10.55

基本有兩個,一個是文章內容,一個則是用來記錄你標記了誰的陣列,舉例來說:

content 欄位記載了「今天我跟 @[32:1:卡莉絲] 去吃飯欸!」

tags 欄位則記載了32」這個數字,當然如果有多個人,可以變成「32, 33, 34」這樣送出。


伺服器端怎麼處理標記?

tags 可以透過 PHP 中的 explode 功能,將「32, 33, 34」中透過「,符號將字串切成陣列

$Tags = explode(', ', '32, 33, 34');

那文章內容怎麼讓人易讀?

那你可能會想:「文章內容要怎麼辦?」,

很簡單,那就是 Regex

螢幕快照 2015-08-22 下午10.13.33

上面的 Regex 我暫時寫的,但就是這種做法,

所以你知道我們可以透過 tags 取得這個文章「有誰」接下來取得 tags 裡所有人的「名字」

然後就是將那些「標籤」透過 Regex 然後 Replace(替換)成他們的名字,大概是這樣

螢幕快照 2015-08-22 下午10.18.27

接下來就可以如期的輸出你要的內容了:

螢幕快照 2015-08-22 下午10.20.50

TeaMeow 的懶人教室 —— 條件式

這裡是我本身會寫的懶人作法,有時候會讓程式更簡潔,通常是 PHP 或者 JS 都可以用。


如果⋯⋯

你可以把「如果怎樣,這個值就怎樣的」方式縮短,例如原本:

if($Foo)
{
    $Bar = 'OK';
{
else
{
    $Bar = 'Not OK';
}

可以變成

if($Foo)
    $Bar = 'OK';
else
    $Bar = 'Not OK';

更可以變成

$Foo = ($Bar) ? 'OK' 
              : 'Not OK';

必須⋯⋯

有時候你會用「IF 去框住,例如必須大於多少,才可以」的方式,大概是:

function Foo($Bar)
{
    // 必須大於 50 才執行下面語句
    if($Bar > 50)
    {
        $Msg  = 'Im Really OK.';
        $Time = time();
    }
}

可以改成

function Foo($Bar)
{
    // 直接在開頭就先做了斷
    if($Bar > 50) return;

    $Msg  = 'Im Really OK.';
    $Time = time();
}

Tocas 的新功能 「Binder」

螢幕快照 2015-08-20 下午2.18.01

其實這個功能是看到這一篇「Backbone 的 View」有感而發的,

在 Backbone.js 裡面這裡的範例是這樣:

events:
{
    "click #add-friend":  "showPrompt",
    "click .delete"    :  "delete_li"
}

我想說:「喔?還不錯。」

然後就打算自己也在 Tocas 加了一個類似的功能,不過寫法不同,

因為看起來 Backbone.js 是透過「空白」來區隔「事件」跟「元素」的,

但是我想說有時候可能會加很多「事件」,有時候可能會有很多「元素」,或者很多「回傳」。


 

Tocas 做法

所以我後來研發出來的寫法是這樣:

$.binder = function(Binds)
{
    for(var i in Binds)
    {
        /** Split the event and the target first */
        var Splits  = i.split('|'),
        /** The first array is events */
            Events  = Splits[0],
        /** Split the targets */
            Targets = Splits[1].split('&')
        
        /** Each target */ 
        for(var t in Targets)
            if(Binds[i].isArray)
                /** Bind each callback if it's a callback array */
                for(var f in Binds[i])
                    $(Targets[t]).on(Events, Binds[i][f])
            else
                $(Targets[t]).on(Events, Binds[i])
    }
}

用法

$.binder
({  
    'click     | img & a' : meow.addNew,
    'mouseover | img'     : meow.removeNew
})

翻譯成中文可以像這樣

$.binder
({  
    '事件 事件 事件 | 元素 & 元素' : 回傳,
    '事件          | 元素'       : [回傳, 回傳]
})

所以你可以有多個事件,或是多個元素,甚至多個回傳(用陣列包起來)。


 

比照圖

螢幕快照 2015-08-20 下午2.18.01

看起來至少比下面的一般 $.on 還要好多了 ..

螢幕快照 2015-08-20 下午2.10.21