2014年12月29日 星期一

亞洲的範圍到哪裡?

Hao Chuang:

中國屬於亞洲?或者說亞洲的範圍到哪裡?這實在是一個有趣的事情。

當 asia 這個概念剛剛形成的時候,拉丁人的世界觀是圍繞著地中海的。海北岸稱為 europe,南岸稱為africa,東岸稱為asia,西邊則是大西洋。但其實這些詞都來自於希臘而不是羅馬人發明的。

對拉丁人來說,europe 的範圍就是羅馬帝國的範圍,不在帝國領域內的土地應該叫做「蠻荒」而不是歐洲的一部份。而非洲的邊界是撒哈拉沙漠,沙漠以南?抱歉那不具有意義。

所以說,那時候的asia,頂多包括兩河流域,連亞歷山大(非拉丁人)曾經征服的印度都不見得算是「asia」的一部份,更不用說當時是否知道中國的存在?

歷史上第一次的東西交流,大概是中國漢朝,也就是羅馬帝國成立以後的事情。在那之前,asia的居民也許聽過東方的東方的東方的故事,但直到絲綢之路打通前,東方終究只是個二手的傳說,沒有任何實質的證據(像是絲)。

直到中國漢朝、羅馬帝國這兩個穩固、長久的帝國同時成立之後,東西方的交流才成為一種常態,而不再只是少少少數冒險家口中的傳說世界。(對雙方來說都是這樣。)

原網址:https://www.facebook.com/tzyhao/posts/10203487205605759

2014年12月27日 星期六

台灣歷史相關影片

台灣史望春風


李筱峰 - 唱台灣歌.說台灣史


20140508 歌曲與台灣史-李筱峰教授主講

平埔族相關的資料

文章:

留下原住民地名的平埔人漢人部落
漸漸消迭的內門平埔族
FAVORLANG,消失在濁水溪口的神祕獵鹿人

【沒有名字的人】系列 粉絲專頁
【沒有名字的人】我媽問我:你是這麼想當原住民喔?
【沒有名字的人】如果有一天,我們拒絕在歷史裡流浪
【沒有名字的人】小時候,阿爸臥房的木門掛了支獵槍喔
【沒有名字的人】04 陳以箴

來看一個漢化的平埔公廨~高雄內門大埔公廨

影片:

20100714獨立特派員第155集{以祖先之名} part 1/2


20100714獨立特派員第155集{以祖先之名} part 2/2


平埔族第一次大遷徙(共有四部,第一次到第四次)


商業相關的書單


  1. 給予:華頓商學院最啟發人心的一堂課
  2. 左派商學院:以人為本,勇於創新求異
  3. 長尾理論最新增訂版 : 打破80/20法則
  4. 免費! : 揭開零定價的獲利秘密
  5. 小眾,其實不小:中間市場陷落,小眾消費崛起
  6. 沃爾瑪傳奇

教育相關的書單

  1. 你的孩子不是你的孩子:被考試綁架的家庭故事 一位家教老師的見證
  2. 教育應該不一樣

中國相關的書單

  1. 沒有墓碑的草原:內蒙古的文革大屠殺實錄
  2. 野心時代:在新中國追求財富、真相和信仰

2014年12月26日 星期五

正確的英文縮寫

例如:「e.g.」是拉丁文exempli gratia的縮寫,意思是舉例來說、例如、譬如、比如,英文也就是for example或for instance。

等等:「etc.」是etcetera或 et cetera的縮寫,意思是...等等,意思相當於英文的and so on或 and so forth。

e.g. 和 etc. 不能出現在同一句話中,因為 e.g. 是表示泛泛的舉幾個例子,並沒有囊括所有的實例,其中就已經包含“等等”,如果再加一個 etc. 就畫蛇添足了。


換言之:「i.e.」是拉丁文id est的縮寫,意思是換句話說、換言之,用來進一步解釋前面說過的話,英文就是that is、in other words。
例句:
It happened in October, i.e., two months ago. →(O)
(i.e. = in other words)




原文網址: 3個誤用的英文縮寫,不要再用ex.啦! | 鍵盤大檸檬 『i.e.』『 e.g.』『etc.』的正確用法

2014年12月21日 星期日

Protocol 協定

介紹

在 Objective-C 裡,每一個類別是單繼承的,一個類別只會有一個父類別,而這個父類別也只會有一個父類別,這樣一直往上追朔直到根類別 NSObject,但如果你需要呼叫一個不在這整個繼承鏈裡的方法,protocol 協定就是一個可以幫你解決這個問題的方法(註一)。

製作 protocol


解說:
  • protocol 本身不會實作,只會宣告 method,實作的部分由使用這個 protocol 的 class 來實作。
  • 在Objective-C 2.0 之後,加了 @required 跟 @optional 的語法,你可以設定某些method是optional,也就是這些 method 沒有一定要實作出來。預設是 @required,要注意的是@required跟 @optional 這兩個語法的影響範圍,是從它以下所有的 method 都會被影響,直到另一個 directive 或是 @end 為止。
  • 就像 class 可以繼承另一個 class 裏所有的 method 一樣,protocol 也可以繼承自另一個 protocol,大多數的 protocol 都是繼承自 <NSObject> 這個根 protocol(註二),但我們並不需要實作 <NSObject> 裡的 method,因為不管是我們自定或是系統提供的 class 都會繼承自 NSObject 這個 class,自然也就有 <NSObject> 的實作了(註三)。

為了讓程式模組化,會建議把 protocol獨立寫在一個標頭檔(Header File)裡。


    使用 protocol

    方法如下,如果要一次使用多個 protocol 用逗號分開就可以了:

    定義變數

    protocol 也可以當作一種型別來定義變數。
    這段程式的意思是:delegate 這個變數,它可以是任意資料型態,但一定要遵循 protocolName 這個 protocol,也就是說,delegate 的實體必需要實作 protocolName 裡@required所有的  method。


    這種用 @protocol 來定義方法的稱做 formal protocol,從名字看大概猜得出來一定也有叫做 informal protocol 的東西,不過這個會在介紹 category 的時候再做說明。


    註一:另一種對於 protocol 使用的說法:對於繼承自不同父 class 的 class 來說,如果需要有共同的方法名稱,就需要使用 Protocol。我還沒完全搞清楚@@
    註二:每次要建立新的 protocol 時,Xcode都會自訂幫我們繼承 <NSObject>,但我發現這個可有可無,我把 <NSObject> 刪掉也沒有出現編譯錯誤,我現在還不知道什麼時候要繼承 <NSObject> 什麼時候不用。
    註三:這句其實我沒有完全看懂,因為我沒有看到哪裡有繼承 NSObject class 我也不懂為什麼他說繼承了 NSObject class, 裏的 method 就會自動幫你實作,但確實我沒有實作 NSObject class 裏的 method 也沒出現編譯警告。


    資料整理自:
    Objective-C: Protocols
    http://shenfive.pixnet.net/blog/post/49325290-protocol-語法

    Protocol in Objective-C 高見龍
    Protocol 協定的使用方式 Furnace iOS 程式設計中文學習網站
    http://iosdevelopersnote.blogspot.tw/2010/11/protocol-delegate.html




    蘋果官方文件:Programming with Objective-C:Working with Protocols

    2014年12月13日 星期六

    NSDate 相關的 method

    下面這些是關於NSDate所有的整理自蘋果官方的文件,推薦看網頁版,網頁版的現在設計得互動性非常高,一開始會把每個method列出來,如果想要細看哪個method的話,再點下去所有的細節就會通通展開來,包括:
    1定義(Declaration)
    2參數(Parameters)
    3回傳值(Return Value)
    4Import Statement
    5可使用版本(Availability)
    6探討(Discussion)
    7相關(See Also)
    另外也可以選擇要顯示的語言,Objective-C還是Switf或是兩個都顯示。

    關於NSDate背後的架構(是這樣說嗎!?找不到一個適當的詞@@)可以去看官方文件,因為我自己也還沒有完全看懂,所以就不在這裡做翻譯了Orz

    大部份的method都可以望文生義,如果有不懂得再去看官方文件就可以了,我這裡只是整理了所有的mehtod,讓我們可以看得更一目了然。前半段是我目前最常用的method。

    Creating and Initializing Date Objects


    Comparing Dates


    Getting Time Intervals


    Adding a Time Interval


    Getting Temporal Boundaries


    + dateWithTimeIntervalSinceReferenceDate:
    + dateWithTimeIntervalSince1970:
    - initWithTimeIntervalSinceReferenceDate:
    - initWithTimeIntervalSince1970:
    + timeIntervalSinceReferenceDate
      timeIntervalSinceReferenceDate
      timeIntervalSince1970
    
    其中這幾個函數我還不是很搞得清楚到底是做什麼用途的,以initWithTimeIntervalSinceReferenceDate:為例,官方文件是這樣說明的:Returns an NSDate object initialized relative the first instant of 1 January 2001, GMT by a given number of seconds.,翻成中文就是:會得到一個以西元兩千年一月一號零分零秒為開始,(由使用者輸入)往後推幾秒的時間點,我實際使用了一下,如果輸入下列這行程式
    NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:10];
    
    顯示結果如下:
    確實照著文件的說明實現了,可是我的問題是這可以幹嘛??我現在還不知道這個函數存在的意義,如果我以後知道了,我會在這裡更新。2014/12/14



    後面這幾個是我比較不常用的

    Representing Dates as Strings


    Constants


    Notification





    蘋果官方文件:NSDate Class Reference


    NSDate Manipulation Made Easy in iOS 8

    2014年12月7日 星期日

    2014年12月6日 星期六

    NSDate, NSTimeInterval, NSCalendar, NSDateComponents, NSDateFormatter基本教學

    下面是一些跟時間相關的class,以及其簡單的使用方法,而每個class背後的原理,我會另外分幾篇網誌來寫。

    NSDate

    NSDate儲存的是世界標準時間(UTC),是絕對時間,當要輸出時間的時候會(註一)根據當地時區轉換成當地的時間。
    下面這段程式是讀取現在時間的程式碼。

    NSDateFormatter

    說到NSDateFormatter,就不得不提關於NSDateFormatter 的二三事這篇網誌,這篇網誌把很多(註二)參數都整理出來了。
    下面是NSDateFormatter的使用方式。

    設定NSDateFormatter也可以使用Xcode提供的幾種制式化格式


    NSTimeInterval

    特別要注意NSTimeInterval的資料型態是double。


    NSCalendar, NSDateComponents

    下面三種方法得出來的結果都一樣,只是取用的方式不同。(註三)



    註一:我現在還不完全清楚它的原理,不知道是「會」根據當地時區作轉換,還是「需要」知道當地的時區來作轉換。2014/12/7
    註二:我不知道是不是全部,一時沒時間去查,但我要用的話幾乎都在那篇裡找得到。2014/12/7
    註三:我還搞不清楚差在哪,我查到後這裡會更新。2014/12/7

    2014年11月24日 星期一

    我們希望台灣成為什麼樣的國家?

    這篇文章寫得太好了!!!
    我怕這篇文章的原連結會消失所以最後面有全文,下面是我摘錄的精彩片段:
    無論是個人、企業還是國家,只想著贏過對手的人,最後往往是輸家。蘋果難道是為了打倒微軟或PC而誕生嗎?Google難道是想打敗Yahoo!才創辦?創造成功的個人、企業或國家,從來是想著如何達到自己所設定的願景,想著如何達到目標,而非打倒沿途碰到的競爭對手。
    一如競選不是為了打敗競選對象的遊戲,而是為了宣揚自己施政理念以獲得青睞的過程,經濟發展也不是打敗韓國、日本或美國,而是朝自己的目標邁進。
    經濟發展應該只是手段,用來完成台灣社會夢想的手段,而非目標,我們從來都搞錯了順序,甚至瞧不起願景,只在乎賺錢。
    台灣經濟的振興,不需要假想敵,而是需要新的願景,到底台灣要往哪裡去?變成怎樣的一個國家?島上的人民希望過怎樣的生活?
    讓我們平心靜氣想一想,台灣的經濟發展的願景是什麼?台灣要在國際分工體系中扮演什麼樣的角色?
    韓國跟多少國家簽訂FTA,根本不是重點,重點是台灣社會到底找到自己未來二十年要走的路沒有?如果台灣連自己想成為什麼樣的國家,以什麼樣的面貌在世界分工體系中嶄露頭角,就算全世界都跟台灣簽定FTA,台灣還是不會贏過韓國,GDP就算再成長再多,果實也落不到小老百姓的口袋。
    丟掉腦中的潛在競爭假想敵吧!重點是我們想成為什麼樣的國家,為此需要做甚麼樣的基礎建設調整與產業政策修訂,而不是打倒韓國!

    全文:
    最近一陣子,台灣因為中韓終於達成簽訂FTA的協議,吵得滿城風雨。政府和企業大老紛紛跳出來高呼不妙,直指中韓簽訂FTA後台灣經貿將因此重創,然後話鋒一轉,直指台灣應該趕快簽兩岸服貿協議,通過自由貿易經濟區等法案,提升台灣競爭力。
    雖然也有不少學者專家反駁政府誇大其實,不過,恐怕許多小老百姓對於兩造雙方的說法是有聽沒有懂,唯一知道的一點是,如今的台灣不只輸給中國,而且也輸給了韓國,這兩國過去都比台灣弱,如今隨便一國都比台灣強,而且還打算在經貿上聯手,感覺台灣會被邊緣化。
    中韓FTA在台灣引爆的爭議,說穿了就是台灣害怕被國際分工邊緣化,以及十幾年來景氣停滯的焦慮,遲遲無法有效排除。
    可能還有很多人不清楚,這世界上早就沒有亞洲四小龍了。香港被納入中國的一個特別行政區,韓國和新加坡早就邁入已開發國家,且以上三個國家地區的GDP都遠遠甩開台灣,不是達到三萬美元就是往三萬美元挺進,且都順利完成經濟發展的轉型,擺脫了代工製造業。只有台灣,面臨土地與人事成本不斷飆升之後,仍不思轉型升級,只想著往外探詢更便宜的生產基地,剛好碰到中國崛起跟東南亞的抬頭,製造業把生產基地往外撤,台灣繼續眷戀代工製造業,直到下一波的土地與人事成本抬頭壓縮代工製造業的毛利為止。
    台灣被國際分工邊緣化的原因,根本不是沒跟中國簽自由貿易協定或沒能加入東協的問題。過去二十年來,台灣靠著中國與東協為了發展經濟,跟台灣的商人簽了多少優惠台灣的條款,比韓國多拿多少優勢,韓國還曾經被東亞金融風暴重創,差點滅頂,發展條件比台灣差很多好嗎?
    台灣社會有一個非常大的思考偏誤,錯以為在經濟發展道路上,只要能打敗其他對手,就能自動升級。所以,過去日本、新加坡成為我們的潛在假想敵,後來是中國和韓國,也許將來將會是越南、馬來西亞等東協國家也說不一定,因為台灣只想著維持既有模式,根本不想進化升級。
    當韓國的目標是成為亞洲的德國,與美日中等大國平起平坐,在國際分工上佔一個獨一無二的缺,讓世界不可缺乏韓國的存在,又怎麼會把台灣看在眼裡?
    為此,韓國砸大錢做次世代產業的基礎建設,扶植文創產業,推動韓國品牌,向全球布局與行銷。
    反觀台灣,卻只會搞抹黑韓國來自我感覺良好。部分媒體使用中國的山寨假新聞和韓國在國際賽事上的一些醜聞,極力醜化韓國,彷彿在暗示國人,韓國的崛起與成功都是靠作弊換來,以此逃避台灣落後韓國的事實。
    無論韓國有沒有和中國簽訂FTA,台灣早就輸給韓國了,韓國從來沒把台灣放在眼裡,也沒當成競爭對手,韓國堅持走自己的國家發展道路,只是剛好有部分產業跟台灣重疊,在國際市場上有所競爭而已。台灣卻反而以此為韓國社會的全貌,成天把韓國當假想敵,什麼經貿協議簽不過都要牽拖將會輸韓國多少。
    無論是個人、企業還是國家,只想著贏過對手的人,最後往往是輸家。蘋果難道是為了打倒微軟或PC而誕生嗎?Google難道是想打敗Yahoo!才創辦?創造成功的個人、企業或國家,從來是想著如何達到自己所設定的願景,想著如何達到目標,而非打倒沿途碰到的競爭對手。
    一如競選不是為了打敗競選對象的遊戲,而是為了宣揚自己施政理念以獲得青睞的過程,經濟發展也不是打敗韓國、日本或美國,而是朝自己的目標邁進。
    經濟發展應該只是手段,用來完成台灣社會夢想的手段,而非目標,我們從來都搞錯了順序,甚至瞧不起願景,只在乎賺錢。
    台灣經濟的振興,不需要假想敵,而是需要新的願景,到底台灣要往哪裡去?變成怎樣的一個國家?島上的人民希望過怎樣的生活?
    讓我們平心靜氣想一想,台灣的經濟發展的願景是什麼?台灣要在國際分工體系中扮演什麼樣的角色?
    韓國跟多少國家簽訂FTA,根本不是重點,重點是台灣社會到底找到自己未來二十年要走的路沒有?如果台灣連自己想成為什麼樣的國家,以什麼樣的面貌在世界分工體系中嶄露頭角,就算全世界都跟台灣簽定FTA,台灣還是不會贏過韓國,GDP就算再成長再多,果實也落不到小老百姓的口袋。
    丟掉腦中的潛在競爭假想敵吧!重點是我們想成為什麼樣的國家,為此需要做甚麼樣的基礎建設調整與產業政策修訂,而不是打倒韓國!

    原網址:台灣最大的錯誤─把韓國當成假想敵 王乾任

    論金馬獎與文化統戰

    金馬》前8獎中國包辦 網友酸:乾脆辦在北京
    今年(2014)金馬獎得獎的又幾乎都是中國的電影,因為在大腸花效應後(你沒看錯就是大腸花),台獨的議題完全浮上檯面,網路上開始有在討論關於文化統戰的議題,下面是一些整理:

    這三篇文章在網路上流傳最廣
    台灣電影或許技不如人,但假裝金馬獎沒有「文化統戰」不是太傻就是太天真 王乾任
    從金馬獎的歷史看文化統戰 Hao Chuang
    這世界並不存在第二個影展如同金馬獎一樣,是以泛主義概念作為分類原則 佛國喬

    兩篇支持金馬獎的

    金馬獎已經是全球華人最有公信力的電影獎 陳玉勳

    2014年11月1日 星期六

    Ubountu 教學

    什麼是LAMP?

    Short for Linux, Apache, MySQL and PHP, an open-source Web development platform, also called a Web stack, that uses Linux as the operating system, Apache as the Web server, MySQL as the RDBMS and PHP as the object-oriented scripting language. Perl or Python is often substituted for PHP.
    The key to the idea behind LAMP, a term originally coined by Michael Kunze in the German magazine c't in 1998, is the use of these items together. Although not actually designed to work together, these open source software alternatives are readily and freely available as each of the components in the LAMP stack is an example of Free or Open Source Software (FOSS).

    資料來源:http://www.webopedia.com/TERM/L/LAMP.html


    Mac上的連線軟體:

    Mac OS X 平台有哪些好用的 SSH 客户端?
    在Mac上連接SSH
    求大侠推荐一个mac下好用的ssh工具

    [Mac] SSH Tunnel Manager – 開啟 SSH 通道,透過遠端主機建立 Proxy 代理伺服器!

    Is there a GUI SSH client for OS X?


    圖形化介面

    WinSCP alternatives for Mac OS X
    Fugu


    SSH連線

    直接打開Mac的終端機工具,輸入下面的指令就可以進行SSH連線了:
    ssh 使用者帳號@IP
    例:ssh im@140.135.113.43

    儲存連線,這樣每次連線就不用輸入指令


    基本指令

    cd:前往某個資料夾,例:cd var
    cd ..:前往目前資料夾的母資料夾(..前面要有一個空白)
    vim:編輯,如果該檔案不存在,系統就會自動幫你建立
    pwd:查看目前所在位置的路徑
    rm:刪除某個檔案,remove的縮寫
    mkdir:新增資料夾,make directory,直翻成中文是新增目錄,經過修飾就是新增資料夾囉
    mv:重新命名,其實在Linux底下沒有處理rename的直接指令,不過可以透過mv這個指令,得到重新命名的效果。mv原本是用來處理「移動檔案」到不同的目錄底下,因此可以透過mv將原檔案移至原目錄底下新的檔名,就可以嗄到重新命名的效果。範例:將a.out改名稱為b.out,mv a.out b.out 


    建立新的使用者帳號

    1. sudo useradd -m [欲建立的使用者帳號名稱]:系統會要求你再輸入一次超級使用者的密碼
    2. sudo psswd [使用者帳號]:設定密碼,系統會要求你輸入兩次做確認,如果成功的話會出現passwd: password updated successfully


    指令教學文

    ubuntu(Linux)指令集
    Ubuntu 常用指令

    [Linux] 使用 SCP 指令,讓您傳送檔案至遠端、下載檔案

    2014年10月30日 星期四

    int vs. NSInteger vs. NSNumber

    NSInteger vs. int

    NSInteger is typedef'ed based on the target architecture. In other word, it's an architecture-safe (64 vs 32 bit) type to support different platforms and implementations of C. Targeting a 32-bit CPU and OS it's 32-bits wide, on a 64-bit OS it's 64-bits wide.

    What follows is how NSInteger is defined in NSObjCRuntime.h file :

    And this is what Apple say in Foundation Data Types Reference :
    When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.

    Simply, the NSInteger typedef does a step for you: if the architecture is 32-bit, it uses int, if it is 64-bit, it uses long. Using NSInteger, you don't need to worry about the architecture that the program is running on. 

    Apple recommends that you use NSInteger over normal types anyway, I would assume for portability!

    結論:除非你有特定要int或是long,要不然就建議用NSInteger,這樣就不必去煩惱使用者用的是32-bit還是64-bit的iDevice。

    更深入探討

    Why use int at all?
    Apple uses int because for a loop control variable (which is only used to control the loop iterations) int datatype is fine, both in datatype size and in the values it can hold for your loop. No need for platform dependent datatype here. For a loop control variable even a 16-bit int will do most of the time.
    Apple uses NSInteger for a function return value or for a function argument because in this case datatype [size] matters, because what you are doing with a function is communicating/passing data with other programs or with other pieces of code; see the answer to When should I be using NSInteger vs int?in your question itself...
    Apple use NSInteger (or NSUInteger) when passing a value as an argument to a function or returning a value from a function.
    資料來源:http://stackoverflow.com/a/5320359/3295047

    延伸閱讀:64-Bit Transition Guide for Cocoa Touch



    NSNumber

    NSNumber is an Objective-C class, a subclass of NSValue to be specific. Where a NSInteger or int will fit in a register, a NSNumber is an object that can hold/encapsulate any scalar type (IIRC - I don't use NSNumber if I can help it.  Way too slow.), It can be used when you need an NSObject that holds a scalar value.

    You can create an NSNumber object from a signed or unsigned char, short int, int, long int, long long int, float, double or BOOL.

    One of the primary distinctions is that you can use NSNumber in collections, such as NSArray or NSSet, where an object is required. For example, if you need to add a float into an NSArray, you would first need to create an NSNumber object from the float:
    1
    2
    3
    4
    
    float percentage = 40.5;
    ...
    // Create NSNumber object, which can now be inserted into an NSArray
    NSNumber *percentageObject = [NSNumber numberWithFloat:percentage];

    Cocoa提供了NSNumber類來包裝(即以物件object形式實現)基本數據類型。

    例如以下創建方法:
    + (NSNumber*)numberWithChar: (char)value;
    + (NSNumber*)numberWithInt: (int)value;
    + (NSNumber*)numberWithFloat: (float)value;
    + (NSNumber*)numberWithBool: (BOOL) value;
    例:NSNumber *n = [NSNumber numberWithInt:5];

    將基本類型數據封裝到NSNumber中後,就可以通過下面的實例方法重新獲取它:
    - (char)charValue;
    - (int)intValue;
    - (float)floatValue;
    - (BOOL)boolValue;
    - (NSString*)stringValue;
    例:int i = [n intValue];



    資料來源:
    http://www.quora.com/What-is-the-difference-between-NSInteger-NSNumber-int-and-all-the-different-ways-to-represent-an-integer
    http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html
    http://stackoverflow.com/a/5870916/3295047
    http://stackoverflow.com/a/4445224/3295047
    http://www.wuleilei.com/blog/335

    2014年10月26日 星期日

    Local Notification介紹

    基本設定

    請求使用者運允許發送通知
    從iOS 8開始,如果打完上面的程式就執行會出現類似下面這樣的錯誤碼

    要把下面這段程式加上去,請求使用者允許App發送通知,我們的Local Notification才能正常運作,在iOS 8之前當然也要使用者的同意,不過可能以前是系統自動幫我們問吧,不過就像我常講的,其實我們不太需要知道以前是怎麼樣,反正現在這段程式是一定要寫就對了!

    自訂特定的時間
    一般fireDate的設定我們都是使用我們既有的資料或是稍微經過dateByAddingTimeInterval之類的處理,如果要完全自訂一個特定的時間的話,可以參考下面的程式碼。你會注意要我只設定了小時跟分鐘,如果想要設定通知是每天固定發出,只要設定小時跟分鐘就可以了。

    alertAction
    這段程式有個小問題,它可以執行,但我必須要自己去「設定」那裏把alert sytle從Banners改成Alerts,notification才會顯示成alert的形式,我目前還不知道問題出在哪裡,知道的人拜託告訴我~

    icon Badge
    注意第三行程式,我們也可以讀取目前的IconBadgeNumber做累加的動作

    重複

    使用自訂的聲音
    我沒想到要使用自訂的聲音竟然這麼簡單,只要將想要播放的音檔匯入project中,再如下面的程式碼打就可以了,不過有兩點需要注意:
    1音檔的長度不可以超過三十秒,要不然聲音會播不出來,我在Documentation裡沒看到這項規定,是在stackoverflow裡看到這篇回答才知道的,但我確定有這項限制,因為我之前就是卡關在這裡Orz
    2音檔只有一些特定的格式可以

    在通知中另外夾帶參數(一般是供其它地方的程式辨識用)

    取消Local Notification
    取消指定的通知
    其實沒有一定要用下面的方式來尋找指定的Local Notification,也可以用其他屬性像是fireDate、alertBody...等,只要你能找到你要的特定通知就可以了。另外,雖然可以抓到自己想要的特定通知,但我試過並不能再修改其屬性。

    取消全部

    按下發送出來的通知後怎麼處理
    當App已經沒有在運作

    當App已經還在運作(可能在背景或是或是正在使用)


    更深入的探討
    https://www.facebook.com/groups/iostw/permalink/906779296016087/
    https://www.facebook.com/groups/iostw/permalink/934380229922660/
    https://www.facebook.com/photo.php?fbid=10202759629864986&set=gm.967383696622313&type=1

    用Local Notification實現Alarm
    要實作一個Alarm需要做到下面這幾點:
    1播放音樂
    2在背景執行
    3定時
    其實上面三點是一句話拆開來講:「在一段時間後在背景播放音樂」
    我查了很多資料,發現目前Local Notification是唯一可以完全達到上面要求的方法,但那只是從技術面來看,實際使用的話會遇到兩個問題:
    1.1Local Notification的聲音最長只能到三十秒,如果要做的一個鬧鐘的程式,我們絕對不可能讓他只響三十秒,當然我們可以一連排程好幾的Local Notification,可是這樣使用者打開他的iPhone的時候就是看到四五個Notification,這樣的使用者體驗非常差。
    1.2我目前想到比較好的方法是:設一連串的Local Notification,只有第一個有設alertBody,後面幾個都設nil,因為我發現如果alertBody設nil,iDevice不會顯示任何東西,但音樂還是會播放。
    1.3不過後來經過測試,這樣的UX爛炸了,因為一般我要用自訂的聲音,音檔一般都會像是一首歌之類的,用上面的方法,這首歌每次只會播三十秒就重新播放,越聽只讓我越煩燥而已。
    2沒辦法像內建的鬧鐘可以有按鈕讓鬧鐘稍後再播放

    我去網路上問,不過看起來應該是無解了Orz

    2014年10月25日 星期六

    Xcode相關工具 (未整理)

    1. Faux Pas for Xcode:可以幫你找出程式碼中各種隱藏起來的臭蟲(三十天試用版、個人版89鎂、企業版189鎂)
    2. RunEverywhere – An Xcode plugin allowing you to run and stop projects on multiple physical iOS devices.
    3. Remote – An Xcode plugin for automatic on-device testing allowing you to record and playback macros that run on device.
    4. RTImageAssets – A configurable Xcode plugin that generates missing image assets based on missing sizes.
    5. rest2Mobile – An Xcode plugin that allows you to automatically generate code for a REST service.
    6. DBSmartPanels – A configurable plugin allowing you to automatically hide the debugger and utilities panels when unneeded.
    7. MarvinXcode – A plugin adding many hotkeyed ccommands for easier selection, duplication, and deletion of code.
    8. MCLog – A plugin that enhances the debug console with output filtering that can work in real time and supports regular expressions.
    9. GitDiff – A plugin for easy visualization of modified and changed code based on the projects Git repo.
    10. ACCodeSnippetRepositoryPlugin – A plugin allowing you to seamlessly integrate the Xcode snippets library with a Git repository.
    11. Extractor Localizable Strings – A plugin allowing you to quickly turn a string into a localizable string bringing up a popup where you can specify the localized string’s key on hotkey press.
    12. Peckham – A plugin allowing you to bring up a popup for quickly creating import statements from anywhere within your code.
    13. XCFui – A plugin allowing you to easily identify unused imports within your code bringing them up as warnings on compilation.
    14. XprobePlugin – A plugin allowing you to easily browse your application’s memory  in a nice UIWebView based interface with filtering and searching capabilities.
    15. XcodeBoost – A plugin adding many nice features such as allowing you to extract method declarations from your implementation to paste in the header file, highlight based on regex, paste lines while preserving code formatting and more..
    16. WCGitTagsPlugin – A plugin allowing you to easily add, view, and remove Git tags through a GUI within Xcode.
    17. BBUFullIssueNavigator – A plugin allowing you to display full content in the Xcode issue navigator (no more ellipsis).
    18. BBUDebuggerTuckAway – A plugin that automatically hides the debugger when you start typing within the code editor.
    19. CodePilot – Allows you to quickly search through Xcode projects using keywords allowing you to quickly search and navigate through an Xcode project. Formerly paid plugin now open source and working with Xcode 5.
    20. ClangFormat-Xcode – A plugin that allows you to format code using the Clang Format tool allowing you to chose from a number of preset configurations or your own.
    21. XToDo – A plugin that provides an interface allowing you to jump through todo’s, within your code labeled by your comments.
    22. XCAddedMarkup – A plugin that allows you enabling display of images and hyperlinks within your code using a special markup syntax.
    23. XAlign – A plugin for aligning your code automatically in user definable ways with a number of sample alignments such as align to first euqals included.
    24. ShowInGithub – An Xcode plugin allowing you to quickly jump to the corresponding location for a line or block of code on Github or Bitbucket.
    25. KFCocoaPods – A plugin for working with Cocoapods providing easy downloading and updating of CocoaPods, podfile editing with code completion, and CocoaPods output in the console.  (Xcode 5 tested)
    26. SCXCodeMiniMap – Creates a minimap of your code adjusting the color of the currently visible area of the editor so you can quickly see where you are within your code.
    27. Injection – Allows you to inject code in real-time to an app running in the simulator or device  so that you can tweak your code without recompiling.  Formerly a paid plugin, but now available as open source.
    28. Xcode Fixins - A collection of plugins for minimizing distractions in Xcode, and fixing code completion.
    29. XVim – Adds many Vim key bindings to Xcode.
    30. Mini-Xcode – Allows you to remove the large Xcode IDE toolbar to save screen space providing mini scheme and device selection.
    31. ColorSense – Provides a color picker for adjustments when you highlight a UIColor or NSColor within your code.
    32. BBUncrustifyPlugin -Enables easy use of the Uncrustify code beautification tool.
    33. Lin – Provides a neat interface directly within Xcode to make working with NSLocalizedString easier.
    34. KSImageNamed – Provides auto completion for UIImage imageNamed: within your code by scanning through image files within your workspace.
    35. HOStringSense – Provides a call out bubble in which you can work with an unescaped version of a string.
    36. XcodeColors – Allows you to color code messages in the debugging console so you can make errors stand out and easily separate different messages from differing parts of your code.
    37. AutoresizeMask – Allows you to visualize your autoresizing masks within code.
    38. JDListInstalledPlugins – Allows you to list your installed plugins, and one click remove.
    39. Alcatraz – Provides easy install/removal of Xcode plugins, color schemes, and templates.  A newer project so there is not too much in there, but a good idea.
    RunEverywhere – An Xcode plugin allowing you to run and stop projects on multiple physical iOS devices.
    Remote – An Xcode plugin for automatic on-device testing allowing you to record and playback macros that run on device.
    RTImageAssets – A configurable Xcode plugin that generates missing image assets based on missing sizes.
    rest2Mobile – An Xcode plugin that allows you to automatically generate code for a REST service.
    DBSmartPanels – A configurable plugin allowing you to automatically hide the debugger and utilities panels when unneeded.
    MarvinXcode – A plugin adding many hotkeyed ccommands for easier selection, duplication, and deletion of code.
    MCLog – A plugin that enhances the debug console with output filtering that can work in real time and supports regular expressions.
    GitDiff – A plugin for easy visualization of modified and changed code based on the projects Git repo.
    ACCodeSnippetRepositoryPlugin – A plugin allowing you to seamlessly integrate the Xcode snippets library with a Git repository.
    Extractor Localizable Strings – A plugin allowing you to quickly turn a string into a localizable string bringing up a popup where you can specify the localized string’s key on hotkey press.
    Peckham – A plugin allowing you to bring up a popup for quickly creating import statements from anywhere within your code.
    XCFui – A plugin allowing you to easily identify unused imports within your code bringing them up as warnings on compilation.
    XprobePlugin – A plugin allowing you to easily browse your application’s memory  in a nice UIWebView based interface with filtering and searching capabilities.
    XcodeBoost – A plugin adding many nice features such as allowing you to extract method declarations from your implementation to paste in the header file, highlight based on regex, paste lines while preserving code formatting and more..
    WCGitTagsPlugin – A plugin allowing you to easily add, view, and remove Git tags through a GUI within Xcode.
    BBUFullIssueNavigator – A plugin allowing you to display full content in the Xcode issue navigator (no more ellipsis).
    BBUDebuggerTuckAway – A plugin that automatically hides the debugger when you start typing within the code editor.
    CodePilot – Allows you to quickly search through Xcode projects using keywords allowing you to quickly search and navigate through an Xcode project. Formerly paid plugin now open source and working with Xcode 5.
    ClangFormat-Xcode – A plugin that allows you to format code using the Clang Format tool allowing you to chose from a number of preset configurations or your own.
    XToDo – A plugin that provides an interface allowing you to jump through todo’s, within your code labeled by your comments.
    XCAddedMarkup – A plugin that allows you enabling display of images and hyperlinks within your code using a special markup syntax.
    XAlign – A plugin for aligning your code automatically in user definable ways with a number of sample alignments such as align to first euqals included.
    ShowInGithub – An Xcode plugin allowing you to quickly jump to the corresponding location for a line or block of code on Github or Bitbucket.
    KFCocoaPods – A plugin for working with Cocoapods providing easy downloading and updating of CocoaPods, podfile editing with code completion, and CocoaPods output in the console.  (Xcode 5 tested)
    SCXCodeMiniMap – Creates a minimap of your code adjusting the color of the currently visible area of the editor so you can quickly see where you are within your code.
    Injection – Allows you to inject code in real-time to an app running in the simulator or device  so that you can tweak your code without recompiling.  Formerly a paid plugin, but now available as open source.
    Xcode Fixins - A collection of plugins for minimizing distractions in Xcode, and fixing code completion.
    XVim – Adds many Vim key bindings to Xcode.
    Mini-Xcode – Allows you to remove the large Xcode IDE toolbar to save screen space providing mini scheme and device selection.
    ColorSense – Provides a color picker for adjustments when you highlight a UIColor or NSColor within your code.
    BBUncrustifyPlugin -Enables easy use of the Uncrustify code beautification tool.
    Lin – Provides a neat interface directly within Xcode to make working with NSLocalizedString easier.
    KSImageNamed – Provides auto completion for UIImage imageNamed: within your code by scanning through image files within your workspace.
    HOStringSense – Provides a call out bubble in which you can work with an unescaped version of a string.
    XcodeColors – Allows you to color code messages in the debugging console so you can make errors stand out and easily separate different messages from differing parts of your code.
    AutoresizeMask – Allows you to visualize your autoresizing masks within code.
    JDListInstalledPlugins – Allows you to list your installed plugins, and one click remove.
    Alcatraz – Provides easy install/removal of Xcode plugins, color schemes, and templates.  A newer project so there is not too much in there, but a good idea.
    資料來源:https://maniacdev.com/xcode-plugins


    Xcode Plugin Listing – Quality Xcode Plugins
    Alcatraz:The package manager for Xcode

    CodePilot

    2014年10月16日 星期四

    atomic vs. nonatomic

    nonatomic :
    • does not enforce thread safety on the property, mainly for use when only one thread shall be used throughout a program.


    atomic(default) : 我目前有找到幾種解釋,因為還沒整理完,所以先都貼上來。
    • enforces thread safety on the property, mainly for use when multiple threads shall be used throughout a program
    • More precisely, tomic properties do not ensure thread-safety; rather it ensures atomicity. If thread A and thread B are both writing, atomic ensures that the outcome will be a whole value, meaning either one or the other. Which one is undefined. Writing thread-safe code is not as simple as using atomic properties. See the "Synchronization" section of the Threading Programming Guide
    • atomic是Objc使用的一種線程保護技術,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤。而這種機制是耗費系統資源的,所以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程,那麼 nonatomic 是一個非常好的選擇。
    • Atomicity has to do with how properties behave in a threaded environment. When you have more than one thread, it’s possible for the setter and the getter to be called at the same time. This means that the getter/setter can be interrupted by another operation, possibly resulting in corrupted data. Atomic properties lock the underlying object to prevent this from happening, guaranteeing that the get or set operation is working with a complete value. However, it’s important to understand that this is only one aspect of thread-safety—using atomic properties does not necessarily mean that your code is thread-safe.

    整理來源:
    http://stackoverflow.com/a/10753201/3295047
    http://stackoverflow.com/questions/9162926/ios-property-declaration-clarification
    http://rypress.com/tutorials/objective-c/properties.html

    2014年10月14日 星期二

    2014年10月13日 星期一

    吳祥輝書單

    1. 「拒絕聯考的小子」1975
    2. 「斷指少年」 1977
    3. 「拒絕國民黨的小子」 1984
    4 「李敖死了」 1986
    5 「吳祥輝選舉學」 2002
    4. 「芬蘭驚豔」 2006
    5. 「驚歎愛爾蘭」 2007
    6. 「我是被老師教壞的」 2008
    7. 「驚喜挪威」 2009
    8. 「陪你走中國」 2010
    9 「驚恐日本」 2011


    吳祥輝:「芬蘭驚豔 驚歎愛爾蘭 驚喜挪威
    是想讓台灣人更了解自己
    因為我從沒認識過一個真正認識台灣的人
    您可別把書看錯了
    這其實不是獨立的三本書
    而是一本書的上中下集
    陪你走中國 驚恐日本
    是想讓台灣人更了解別人
    因為我也從沒認識過一個了解日本和中國的台灣人」
    原網址:https://www.facebook.com/brianwuhsianghui/posts/723469104401713

    吳祥輝:「驚恐日本是繼芬蘭驚豔 驚歎愛爾蘭 驚喜挪威
    陪你走中國 後的 第五本 國家書寫
    也是父子三部曲的第二部
    父子三部曲是
    陪你走中國 驚恐日本 和寫作中的韓國
    台灣人可以用全新的角度
    看中國 日本 南韓 這三個鄰國
    這是寫這三個國家的本意」
    原網址:https://www.facebook.com/brianwuhsianghui/posts/723465251068765

    2014年10月10日 星期五

    日本人是怎麼看待中國文化

    我發現我用「日本人是怎麼看待中國文化」這幾的字搜尋,出來的幾乎都是中國那邊的東西,而且胡扯居多。

    我找到這兩本書:
    這本書的書評:
    「會去翻譯一本這樣的書,除了個人長期接觸日本文化這個單純動機外,最重要的是,我深刻體會到台灣對日本的深層依賴,以及認知到從被殖民至今的百年期間,反日、仇日、哈日、媚日等錯綜複雜的歷史情結如何糾結、如何捆綁一個台灣人的意識。因此,我先以《日本人論:從明治維新到現代》(以下簡稱《日本人論》)中的亞洲、從《日本人論》反思台灣人論這兩個脈絡去說明個人譯介《日本人論》到臺灣的意義。

    『日本人論』與台灣

    誠如南博在本書開宗明義所說的,日本人確實是一個好於自我定義的民族,在這自我定義的漫長百年中,日本一直透過他族來對照自己、找尋自己。從明治維新把日本推向近代國家開始,日本便把這個他族設定在所謂的西方人,至此之後,日本人論的論戰就在和西方人的對照之下不停地來回擺盪。人類學家青木保1在整理二次戰後日本文化論的流變時也提到,日本人論所指涉的他族或對話的他族,通常是限定在西方、西洋、美國、歐美等方位中。可以說,日本人在自我定義的百年時光裡,只有比日本人更高級、更上層、更值得模仿的西方人才足以列入日本人論的論戰之中。

    所以,包括《日本人論》在內的多數日本人論,其論述的對象都只限於西方,亞洲幾乎是不存在的,換言之,我們只看到「日本v.s.西方」的對照,很少看到「日本v.s.亞洲」的關係。以中國為例,中國是亞洲的一部份,但中國也幾乎是缺席的,在《日本人論》當中我們可以清楚看到,近世以來的日本多麼渴望擺脫中國的束縛,即便日本也承認中國文化與文明曾在歷史上帶給自己深遠的影響。

    雖然,亞洲在日本人論當中缺席,不過眾所周知地,當日本人在談論「日本v.s.亞洲」的關係時,日本式的東方主義(orientalism)總是無所不在。福澤諭吉主張日本必須脫離疲憊、停滯、落後、愚癡的亞洲,進入科學、文明、進步、近代的歐洲,脫亞入歐成為明治維新之後近代日本躋身強國之林最重要的意識型態,這種對亞洲東方主義式的偏見也束縛了日本對亞洲「其他可能」的認識。譬如,文學家谷崎潤一郎2或夏目漱石3都曾在二十世紀初去過中國,也曾露骨地表達他們在文化上及種族上對中國的歧視。不幸的是,這種歧視似乎沒有褪色,近年來,日本仍以優越的姿態看待台灣及亞洲的哈日現象,仍帶著有色的眼神去鄙視發展中的亞洲國家4。

    那麼,臺灣呢?臺灣又是如何地自我定位呢?

    如前所述,《日本人論》的對象是西方,如果也有所謂台灣人論的話,臺灣人論的對象不是日本就是中國,臺灣人很少會去和西方直接對話,更少有人會把台灣拿去和東南亞做比較。這可能是歷史的宿命,也是人類的通病,因為,人們總以「親密的強勢文化」做為模仿對象或參考指標,即便這些強勢者多是壓迫者。當看到《日本人論》的日本人徘徊在「西方崇拜v.s.西方批判」、「日本人優秀說v.s.日本人劣等說」之時,我們也該反思,台灣人論裡面同時存在著仇日媚日的兩極想法,統獨各方也分別設定了自我和中國的不等距離。或許對弱勢者而言,這種和親密強勢文化之間的拉扯,注定是一場永無止境的夢魘。另一方面,當在批評日本脫亞入歐的思維或日本對亞洲東方主義式的偏見時,我們也該想想,台灣到底如何對待自己的東南亞鄰人,比之於日本對亞洲的歧視,台灣對東南亞文化及人種上的鄙夷其實是有過之而無不及的5。

    因此,譯介《日本人論》到臺灣的意義就在於從「知彼知己、知己知彼」的過程中,找到屬於台灣人主體性的方位,這個方位既是多元的也是辯證的。」
    原網址:http://www.cc.ncu.edu.tw/~csa/oldjournal/33/journal_book_35.htm

    2014年10月9日 星期四

    @property 介紹

    @property是在Objective-C 2.0(2006年)新加入的功能,目的是要簡化一個實體變數(instance variable, 簡稱ivar)設定的過程。
    在沒有@property功能之前,要自己宣告setter跟getter。

    各種屬性介紹

    讀寫相關:
    • readwrite(default)
    • readonly

    記憶體管理相關:
    • Automatic Reference Counting(ARC):這部分對初學者來說比較難懂,簡單講,絕大部分時我們會用的是strong,weak是一些比較進階的功能才會用到,所以初學者每次在設定的時候用strong就可以了。如果想要知道背後詳細的原理及解釋可以看我另外寫的這篇Automatic Reference Counting(ARC)
      • strong:
      • weak:
    • Manual Reference Counting(MRC):這是上一代的記憶體管理方式,現在已經不用了,因為ARC遠遠比MRC好用太多了,只需要知道有這些屬性的存在就可以了,因為在網路上還是很容易找到比較舊的文章是用MRC。
      • assign(default) : 直接指派,不進行 retain
      • retain : 先 release 再 retain 新值
      • copy : 先 release 再 copy 新值

    多執行緒相關:對初學者來說,這部分比較難懂,我後面打的解釋是結果論,如果想要知道兩個屬性背後實際上是怎麼回事可以看這篇atomic vs. nonatomic
    • nonatomic : 沒有要用多執行序就選這個,但不知道為什麼Apple並沒有把這個屬性設為預設,所以幾乎是每次都要加上這個屬性。
    • atomic(default) : 如果要使用多執行序就選這個。

    setter/getter相關(accessors):
    • setter = setterName:重新命名setter名稱
    • getter = getterName:重新命名getter名稱,最常改的方式是在原本的名稱加「is」ex:@property (nonatomic, getter = isChosen) BOOL chosen;

    @synthesize

    @property DECLARES the accessors for your property, @synthesize will IMPLEMENT them.
    原本是在@interface的程式
    -(int) price;
    -(void) setPrice: (int) p;
    
    可以只要寫
    @property int price;
    

    在@implementation的程式從
    -(int) price
    {
      return price;
    }
    
    -(void) setPrice: (int) p
    {
      price = p;
    }
    
    變成只要寫
    @synthesize price;
    
    Xcode 4.3 之前,每一個 @property 都要在 @implementation 加上 @synthesize 變數名稱 或 @synthesize 變數名稱 =_ 變數名稱 但 4.4 之後就自動化了,如果沒寫,就等於寫了 @synthesize 變數名稱 =_ 變數名稱,而 @synthesize 的設定,也可以改變變數的名稱,如 【@synthesize 變數名稱;】 時,變數名稱前面就不再有 underline, 有興趣的讀可以查一下 @synthesize 的功能。

    2012年Objective-C加入了不少新功能,@synthesize變成預設值,現在有沒有寫@synthesize的差別只在於你取用變數的方式:
    有寫@synthesize
    price
    
    沒有寫@synthesize
    self.price
    

    自訂setter/getter

    但如果你要自訂自己的setter/getter的話,你就要自己寫setter/getter 函數,系統會以你自己寫的函數為主。
    例如我們自訂setter:
    -(void)setPrice:(int)p
    {
      price = p * 2;
    }
    
    這樣的話當我們在給price值的時候,就會自動變成兩倍,也就是當我們打的程式碼是:
    price = 3;
    
    price的值實際上是6而不是3,因為3傳入時還會被乘以二。


    Attribute 屬性

    在2006年發佈了Objective-C 2.0後,Objective-C也可以使用「.」來存取物件的屬性
    原本要設值是這樣
    [b setPrice:300];
    
    就可以寫成
    b.price = 300;
    

    不過在高見龍的部落格裡有提到點語法的一個小細節,有可能造成無窮回圈:
    -(void) setPrice: (int) p
    {
      self.price = p;
    }
    
    如果在自訂的setter裡使用了點語法,那就會不斷的呼叫自己(setter函數),變成無窮迴圈。


      整理來源:
      http://stackoverflow.com/questions/9162926/ios-property-declaration-clarification
      http://pydoing.blogspot.tw/2012/08/objc-property-and-synthesize.html
      http://shenfive.pixnet.net/blog/post/48054812-@property-
      http://blog.eddie.com.tw/2010/12/08/property-and-synthesize/

        支那是日本對中國的蔑稱,嗎?

        實際上「中國」這個詞也是中國思想遺毒,幾百年前大家早就知道地球是圓的了,只有自以為是的支那還自稱「中」國。

        另外關於「支那」一詞,很多人會認為那是日本人用的歧視用語,這是完全錯誤的認知,完全就是支那人不願承認自稱為「中國人」的荒謬所捏造的。

        「普遍认同的说法是“支那”起源于印度。印度古代人称中国为“cina”,认为Cina在梵文中表示中国“丝”,因中国是丝绸的故乡,古印度人和波斯人等都用中国丝(梵文Cina)代指中国,也有说法认为cina就是陶瓷(china)。

        汉明帝时,梵文Cina一词随着佛教传入中国,后又传到日本。古罗马称中国为“Sinoa”,后来的英文中的“China”,和法文中的“Chine”,都被认为是来自这个词源。不过“支那”一说并无贬义。

        至18世纪末,中日一战,中国战败并签订《马关条约》。一般认为,至此日本逐渐开始使用“支那”称呼中国,并带有蔑视和贬义。」
        http://news.ifeng.com/world/detail_2014_03/20/34944726_0.shtml
        可以看到直到日本稱中國為支那,支那一詞才開始歧視的意味,不過就是支那沒辦反接受小日本把他們打敗,而且還不稱他們為中國罷了。

        這篇報導裡說支那有歧視意味,根本邏輯不通,支那明明很明顯是China的音譯,何來歧視之說,更何況為什麼當地華人要歧視中國人??
        http://www.ettoday.net/news/20140314/334493.htm

        這類中國、中華的概念,只不過是中國不斷在推動以鞏固其政權的詞語罷了

        繁體字還是正體字?

        文字本來就會演變,沒有所謂的對錯,何來正統之說?

        最近在網路上看到這篇文章「如果正體字和媽祖都是「我們的」,那唐宋元明清是誰的?」,真的差點讓我暈倒,我沒想到還不少人會自稱台灣用繁體字為正體字。

               稱中國用的簡體字為殘體字,台灣用的中文為正體字,這我可以理解,因為這是標準台灣人對於中國常年打壓台灣的種種蠻橫行為的不滿的心理投射,但在這些稱呼背後所隱藏的觀念是錯誤的。

               既然中華人民共和國為聯合國認定的正統中國代表政權,那當然該國家所用的語言就是最為正統的中文,但很妙的是「正體字」 這個說法是台灣人自己說的, 醞釀中文的地方有黃河有長江,台灣根本沒有怎麼會有人敢自稱「正統」呢?打到這裡讓我想到彭明輝教授寫得一篇文章:
        『   德國人之所以為德國人,不只是因為他會講德語,還因為他們有共同的歷史和文化,承繼著類似的情感和價值觀。一個人如果不懂歌德、席勒的詩,聽不懂貝多芬的音樂,那他就跟德國的歷史與文化脫節。但是那些詩和音樂都是誕生於十九世紀以前的農業社會裡,如果德國的農村消失了,德國人還有機會懂得歌德和席勒的詩,聽懂貝多芬的音樂嗎?只要一個小小的想像實驗,我們就可以知道確切的答案。
               想像你在台北市的小學教一首李白的詩。你說:「床前明月光」,孩子們不懂,因為他們的生命經驗裡床前不可能有月光,頂多只有街燈和各種光害。你唸:「疑是地上霜」,沒人聽懂,你也不知道該如何解說,因為現在連電冰箱都已經無霜了。「舉頭望明月」,他們不懂:在高樓林立且光害充斥的天上,那顆看起來像蛋黃的東西有什麼好看的?「低頭思故鄉」,今天台北小孩有誰懂得「故鄉」的情懷?
               詩的生命不可能靠字典的解釋來傳承,而是靠蘊育出詩的生活情境來維繫;你必須有真實的農村生活體驗,才能感受到以農村為背景寫出來的文學與音樂。日本為了讓國人體會唐朝時代日本人的生活情境,甚至規定奈良唐昭提寺周圍的農地與農村必須維持原有景觀,不得變更。』
        http://www.appledaily.com.tw/realtimenews/article/new/20140316/360853/


               在文化上應該把台灣放在跟越南、韓國、日本一樣的位置上來看待才對,這些國家都深受中國文化影響,雖然我們說要看唐代的中國去日本,要看宋代的中國去韓國,但這些國家從來就不會以正統中國文化自居。

        越南
        原網址:https://www.facebook.com/IndependentGuts/photos/a.432311403556330.1073741828.395945433859594/638024779651657/?type=1&relevant_count=1

        韓國
        原網址:https://www.facebook.com/IndependentGuts/photos/a.432311403556330.1073741828.395945433859594/620755244711944/?type=1

               日本方面,我想我就不用貼什麼圖片了吧,台灣人對日本文化的熟悉應該是全世界數一數二的,我們都知道日本文化裡有很多看得到中國古代文化的影子,我就提點大家比較不知道的事情好了,我最近在看柯南才知道原來日本文化裡也有「十二生肖」。

               我們可以透過看看其他地方的人是怎麼看待中國文化跟漢字來思考何謂台灣的主體性(是這樣用嗎 囧)?

        我是直到前一陣子看到這部影片才知道原來除了新加坡外,在馬來西亞等東南亞地區也有人會講中文,這個影片中的女生說話完全是台灣腔,沒有半點中國腔的捲舌音,但我注意到這部影片 的簡介中「視頻」兩個字,這是中國用語,而且標題是用中國的那種英文拼音(是這樣說!?),我查了老半天才知道她是馬來西亞人!!!


        實際上除了中國跟台灣,世界上還有很多人會講中文


        關於馬來西亞華人用的中文可以看看這部影片,滿有意思的,在裡面也可以看到台灣文化輸出到馬來西亞的程度,什麼超級星期天、康熙來了他們都看過!?


        還有這部,北京話在馬來西亞真的跟廣東話還有馬來語融合得非常徹底


        星馬地區使用的台語


               最近開始有越來越多的澳門人跟香港人來中原讀書,我才發覺其實我們日常生活中用的中文也參雜了不少閩南語,並沒有像我們想像中的將中文跟閩南語完全分開來使用,各地的北京話都有跟當地的方言混在一起用。

               台灣用的中文有我們自己的文化,只是我們自己不知道而已,因為台灣是整個中文文化圈(註一)的文化輸出地,不管是中國還是東南亞的中裔馬來西亞人(註二),不管是台灣的偶像劇、綜藝節目或是歌(註三),因為我們自己是輸出地,所以渾然不知罷了。

        註一:俗稱華人文化圈
        註二:俗稱馬來西亞華人
        註三:講到台灣的歌,一定會有人問:那梁靜茹的歌算台灣的歌還是馬來西亞的歌?我認為應該要算是台灣的歌,因為梁靜茹的音樂是在台灣這個土壤裡生長出來的,她也用的是台灣的口音,徐若瑄去日本發展的作品,我們不會說那是台灣文化的一部份吧。

        另外台灣用的中文有我們自己的文化也顯現在「翻譯」上,雖然中國跟台灣都是用中文,表面上好像只有繁簡體的差別,但在翻譯上就可以明顯地看出雙方在語言的運用上的的差別。

        看看中國人怎麼看待它們的簡體字
        http://www.ted.com/talks/shaolan_learn_to_read_chinese_with_ease

        我舉iPhone 6的廣告詞 Bigger than Bigger為例:
        iPhone 6官网现身 又见苹果神翻译
        神翻译再见!iPhone 6大陆版口号也改为“岂止于大”
        太逗了:苹果发布会的神翻译 大陆又输给台湾

        顯然「比更大還要大」這個翻譯中國網友很不滿意,被吐槽的體無完膚
        「比更大還要大」 中國蘋果翻譯網友批完敗
        不滿意蘋果「豈止於大」的翻譯?網友:簡直大、比腎臟還大

        關於這次翻譯事件相關的深度文:
        什麼比bigger更重要?聊聊蘋果的iPhone 6文案翻譯
        为「比更大还更大」正名
        从iPhone6的文案看“假古文”翻译


               為了要去中國化,我最早想說那乾脆把台灣用的中文稱為台文好了,世界上應該沒有像繁簡體中文這樣,差異已經如此巨大還稱為同一種語言的吧,據我所知歐洲的很多語言間的差距歐非常小,很多用詞都可以互通,南島語族間的語言也是,既然他們可以分成不同語言,為什麼台灣不能。但是後來我認為鑑於中文是個有三千年文化的語言,現在直接一刀斬段把它變成台文有點過於牽強,畢竟那些成語都還是源自支那,所以我覺得稱台灣用的中文為「台式中文」比較好,要做到徹底去中國化,就要稱台灣用的中文為「台式中文」開始做起,然後規定外國人來台灣讀書都要會台式中文,其中一項重要的特徵就是會注音符號,要徹底的把支那用的中文隔絕出來,這樣關於台灣的輪廓就很明顯了。

        關於台式中文的書或文章:
        台灣人也不知道的台式國語
        一些讓我有奇怪聯想的台灣用語

               為了要將中文從教育與社會霸權的狀態下拉下,我對台灣國的想像,官方語言應該是北京話、閩南話、客家話還有所有的原住民均為官方語言才是。關於官方語言的態度,我覺得台灣可以參考分別有德語區、法語區、義大利語區跟羅曼語的瑞士。
        「但為了尊重各種官方語言,所以聯邦規定,在德語州的孩子要學法語,法語州的孩子要學德語,每一個瑞士人,不能只會講自己的母語,也要學習其他同胞的語言。」
        原網址:https://www.facebook.com/jenhausu/posts/938981256129744

               我在查資料的時候發現「通用注音字問世篇:方言的解放」這本書,我想這好像找到將其他語言文字化的方法了!現在北京話在台灣的社會霸權最主要的怡個原因就他有完整的文字及拼音系統。

        後記一:
        這是我貼在 「台獨論述研究所」裡所引發的討論
        原網址:https://www.facebook.com/groups/766871250019442/permalink/844043282302238/

        後記二:
        因為寫這篇文章我開始去思考「日本人是怎麼看待中國文化」這件事的,另外弄了篇blog

        2014年10月7日 星期二

        電腦椅的選擇

        這是我在Facebook上看到一篇關於高價電腦椅的評論,希望我以後有機會用到XDD

        「有人問我 Aeron 和 Embody 的 Review。
        我是六年前(2008) 年被推坑買 Aeron 的。就一直坐到現在。開公司幫同事買的椅子也是 Aeron。
        Aeron 最厲害的地方是這張椅子坐下去,你「不會有任何坐到厲害椅子的感覺」。但是坐幾個小時或一整天,去坐其它椅子的感想就會變成其它椅子「只是木板」而已。會有回不去的感覺。
        我當年要買椅子時,在 Aeron 和 Embody 間也是掙扎很久,一大部分是兩者相差大約 18K 卻沒有覺得有那個價差,所以放棄。就一直坐到現在。
        最近有同事想買我坐的 Aeron(對,我之前不只有一張,我大概有十張...),剛好趁這個機會就換台 Embody 看看。
        Embody 現在坐下去的感想,直接就會是「這是張很棒的椅子」。這也是辦公室其他有 Aeron 同事的感想。
        所以要買 Embody 的話,我可能還是要推薦有 Aeron 的人升級改換。沒坐過 Aeron 的話,其實有可能感受不到價值感在哪。
        這有點就會像 Ducky 要升 Filco / Cherry。沒用過 Filco 的狀況下說實在,要硬要去比 Filco / Cherry 還真的測不太出來。但是用過 Filco 就可以很強烈感受到 Cherry 的軟手感了。」

        https://www.facebook.com/xdite/posts/10152791996258552

        2014年10月6日 星期一

        Auto Layout 介紹

        Auto Layout 是個讓界面上的物件可以依據螢幕解析度大小的不同layout到畫面上正確的位置上的技術,2011年在Cocoa中發表,在2012年隨著iOS 6發表用來取代autosizing masks (struts-and-springs model) 。Auto Layout除了解決應對不同螢幕大小解析度或是螢幕方向的問題,同時也解決了在localization上會遇到的問題包括一些從右讀到左的語言。

        Auto Layout工具基本介紹:下面這些按鈕在Storyboard的右下角

        (圖片取自AppCoda網站)

        Align – 創造「對齊」相關的constraint
        右邊的數字是可以設定你要它離開中心點多遠,如果你要它在正中心的話,當然就設定為零就可以了。

        Pin – 創造spacing(空間)相關的constraint



        Issues – Resolve layout issues.


        Resizing – Specify how resizing affects constraints.
        Sibling 兄弟
        Ancestor 祖先
        Descendants 後人
        (這三個選項還不知道是做什麼的,只是先把英文翻出來Orz)

        有時創造的constraint會互相衝突,這些衝突顯示在Interface Builder outline view上,點選Storyboard右下角的按鈕就可以展開,就像寫程式一樣,如果警示的圖案中間是個圓圈的話,Xcode還會幫你修正自動加上它認為最合適的constraint。
        (圖片取自AppCoda網站)


        右邊的Utilities裡的Size inspector,顯示每個constraint以及其數據,也可以在這裡直接編輯,再下面可以設定各個contraint的priority。

        網路上找到別人寫的各個工具的細項介紹:IOS7.0 Xcode5 AutoLayout 备忘录


        正常成功的constraint在Storyboard上是顯示藍色的
        (圖片取自AppCoda網站)

         如果現有的constraint不足以完整地義該物件要放在哪裡,constraint就會是黃色的
        (圖片取自AppCoda網站)


               設定Auto Layout就像寫程式一樣,背後也有一套邏輯在運作,只要跟著邏輯走就沒錯了。

               設定Auto Layout的時候要同時考慮該物件的「長寬」以及「位置」,初學者一開始都只有在思考位置的問題,但這樣該物件的的大小形狀就會被擠壓到。
               以下面這張圖為例,可以看到分別有兩條設定長寬constraint跟四條設定置中的constrain,如果只有設定置中的contraint的話,在preview裡面是完全看不到東西的,因為沒有設定該物件的長寬,所以這個色塊會被縮小成一點完全看不見。
        但如果該物件的長寬是intrinsic Size,我們一般不會設定它的長寬,會讓它自動隨著需要做改變,像button跟label都是intrinsic size。

        其實Auto Layout除了用constraint設定外,也可以用程式設定,關於Auto Layout的API是NSLayoutConstraint,不過用Xcode就可以完成大部份的Layout設定了,如果真的要用程式碼來設定那應該是相當複雜,網路上關於這方面教學文更是少之又少,我目前只有找到下面這幾篇是在講程式的:
        NSLayoutConstraint 動態產生 Auto Layout 的效果
        AutoLayout (2) 手動建立 NSLayoutConstraint


        專有名詞解釋:

        Leading Space:左邊
        Trailing Space:右邊
        inferred:推斷
        Standard Value:Xcode建議的間隔大小


        設定Auto Layout 的小訣竅:

        1. 在設定constraint時最好不要設定特定的數字,不管是位置還是長寬。除非你自己很清楚我就是要讓某個關係(長寬或間格)是在特定的數字。
        2. 在設定Auto Layout時要同時思考position跟size的問題

        Xcode 6新增的功能:
        Compact Width | Compact Height : iPhone in landscape
        Compact Width | Regular Height : iPhone in portrait
        Regular Width | Regular Height : iPad in portrait or landscape
        所有設定一開始都一定要設定在Any Width | Any Height,要不然該設定就只會設定在特定的螢幕大小裡


        相關WWDC Session:

        • 2011 Session 103 : Cocoa Autolayout
          • Basics
          • Runtime
          • Layering
          • Debugging
          • Transition
          • 2012 Session 202 : Introduction to Auto Layout for iOS and OS X
            • Setting up Constraint-Based Layout
            • Layout Behind the Scenes
            • The Visual Format Language:make your code more easier to read
            • Things That Can Go Wrong
            • Compatibility Issue
          • 2012 Session 228 : Best Practices for mastering Auto Layout
            • 教程式
          • 2012 Session 232 : Auto Layout By Example
            • Transitioning to Auto Layout
            • Explicit Widths
            • Localization
            • New API
            • Animation
            • 2013 Session 406 : Taking Control of Auto Layout in Xcode 5
              • 一開始還是有介紹一下Auto Layout,主要都是示範,相當值得一看,到後面有比較複雜的操作。
            史丹佛的課程:9. Animation and Autolayout(從25分開始講Auto Layout)

            這個課程設計的非常棒,在短短四十分鐘裡就講了很多東西,強烈建議一定要看,其中他介紹了設定Auto Layout的三種方式:
            1. 使用Xcode建議的constraint:方法是把物件放在Xcode推薦的blue guidelines上,然後再按下Issues的Reset to Suggested Constraints選項,Xcode就會自動幫你設定他認為最適合的constraint,而要Xcode設定到最正確的constraint就是要用Xcode建議的blue guidelines。
            2. 使用下面Align跟Pin的功能
            3. 使用control-drag的方式創造constraint:如果在物件內部拖曳,可以設定長寬,橫著拖曳可以設定寬度,直著拖曳可以設定高度,斜著拖曳可以設定長寬比;如果點住該物件往外面空的地方拖曳,可以設定與邊界的間隔;如果往其他物件身上拖曳,可以設定兩個物件的關係。


            教學文:

            Introduction to Auto Layout(AppCoda):非常非常非常簡略的介紹,光看這篇的話是絕對學不會的,不過可以當作最入門的文章,因為Auto Layourt東西實在很多,一開始就看長篇大論教學文實在會很令人心煩。

            Beginning Auto Layout in iOS 6(Ray Wenderlich):非常長很詳細,有分Part1, Part2。從上一代作layout的技術autosizing masks的缺點講起,我想如果是iOS的初學者,這部分就可以跳過了,直接從Designing like you mean it這個部分開始看就可以了,我們不需要知道以前的技術有多麼的不方便,如果是從iOS 6前就開始開發iOS的人才比較需要看這段,比較兩個技術的差別也比較容易轉換到Auto Layout。
            • Auto Layout的運作邏輯 Designing Like You Mean It:
              • The big advantage of using constraints is that you no longer have to fiddle with coordinates to get your views to appear in the proper places. Instead, you can describe to Auto Layout how the views are related to each other and Auto Layout will do all the hard work for you. This is called designing by intent.
              • When you design by intent, you’re expressing what you want to accomplish but not necessarily how it should be accomplished. Instead of saying: “the button’s top-left corner is at coordinates (20, 230)”, you now say: “The button is centered vertically in its superview, and it is placed at a fixed distance from the left edge of the superview.”
              • Using this description, Auto Layout can automatically calculate where your button should appear, no matter how big or small that superview is.
              • This makes the design of your user interfaces much more descriptive. You simply define the constraints, and the system calculates the frames for you automatically.
            • Interface Builder only adds new constraints when the existing ones are no longer adequate.
            • 名詞解釋:User constraint,比較粗的那種T-bar。
            Auto-Layout-Showcase:Project for demonstrating several auto layout techniques on iOS.
            《Auto Layout 使用心得》系列文章

            相關工具:

            可以幫你寫 constraint 的 code
            http://constraints.icodeforlove.com/

            Code
            FLKAutoLayout:FLKAutoLayout is a category on UIView which makes it easy to setup layout constraints in code.


            相關討論

            https://www.facebook.com/groups/iostw/permalink/990792090948140/
            解法:

            Superview.bottom = label.top x 3 + 150
            在storyboard中 multiplier設定3 constant設定150

            根據要求,上下空間比例為 1:2,所以上下加起來的空間高度是上面空間高度的三倍,然後還差 img 的高度 150

            於是上面空間 x 3 + 150 就等於整個畫面的高度

            上面空間是 label.top
            整個畫面的高度則是 Superview.bottom


            深入探討:

            影片
            1. Achieving Zen With Auto Layout(投影片


            2. Auto Layout v.s Programmatically Layout by Claire Chang + Jamie Sa + Zonble @Cocoaheads Taipei


            文章
            1. iOS Autolayout Fun Facts and Tips
            2. 10 Things You Need To Know About Cocoa Auto Layout
            3. Content Compression and Hugging in Auto Layout


            蘋果官方文件:Auto Layout Guide


            Auto Layout的東西真的非常多,如果要打算一開始就把所有的東西都看完,我想是不太可能的,因為像priority這樣非常深入的工具,如果自己沒有這個需要,那是很難體會它的實用性,就算硬去學跟著操作一遍我想也是根本記不起來的。

            我個人推薦學習Auto Layout的順序是:
            1. 先看些非常簡單的教學,像是AppCoda這篇
            2. 然後再去一部教學影片,比如說史丹佛上課的那部
            3. 然後再去了解全部Auto Layout的功能,了解知道就好,這樣之後遇到問題就知道要往哪裡深入了解,可以看我這篇文章一開始的介紹,我把所有關於Auto Layout的工具都介紹過一遍了(如有遺漏請告訴我,感謝~)