2014/12/22

找工作該如何選擇?

以前我認為找工作最重要的是薪水高不高,上班時間有沒有被壓榨。

現在我認為選擇工作,是在選擇自己的人生方向,應該選擇有前景的領域,因為機會是留給準備好的人。


關聯在哪?


如果你的工作不能讓你學習有前景的領域知識,那麼你就不可能成為【準備好的人】。

那接下來所有的好機會都輪不到你...

所以選擇工作很重要。

2014/12/11

【問題】 MVC的網站架構中 Model 的最佳實作

我認知中的MVC,是在看完 Stanford University 的 Developing iOS 7 Apps 這堂課之後才完整建立的。
http://youtu.be/ZqKbN_C4Yvg?t=14m20s
從14分到30分講MVC架構。


假設我有三個畫面,要顯示同一個 Table 的內容
第一個畫面需要 Table join A1 才能拿到足夠多的資訊
第二個畫面需要 Table join A2
第三個畫面需要 join A1 跟 A2

如果我要用一個 Model 層把 view 跟 DB 隔開,那我該提供哪些函數?

方法1:
只寫一個取出所有欄位的函數
Model.GetData   (WithA1 And A2)
缺點是會取到多餘的欄位

方法2:
為了解決方法1的問題,分別寫3個不同的SQL
Model.GetData
Model.GetA1
Model.GetA2
好處是我不會取到多餘的欄位
缺點是DB request 的次數會變多

方法3:
為了解決方法2的問題,分別寫3個不同的SQL
Model.GetDataWithA1
Model.GetDataWithA2
Model.GetDataWithA1AndA2
好處是我不會取到多餘的欄位,每次要取資料的時候只會產生1次DB request
缺點是,每當View 需要不同的欄位數的時候,我就要多作一個函數,會造成函數數量爆炸和管理困難,其實這樣寫的結果就等於是在View層上面寫SQL


問題是,一般情況下遇到這個問題會用什麼方法來解?為什麼選擇這個方法?

我問了幾個人答案都是採用方法1,是不是我想太多了?

2014/12/4

Swift 泛型繼承



class A{}

class A2:A{}

class B<T:A>{}

class B2<T:A2>:B<T>{}


Class A2 繼承 Class A
Class B 有一個泛型T,T繼承 Class A
Class B2 繼承 Class B、B2 有一個泛型T, T 繼承 Class A2

冒號前面的泛型是宣告泛型變數,冒號後面的是使用泛型變數
舉例來說 class B2<T:A2> 講的是 宣告一個泛型T 繼承 A2
:B<T> 這裡的 T 講的是使用剛剛宣告的 T

2014/10/16

Google在 SSL 3.0 中發現設計缺陷

今天 Facebook 登入的那段C#程式掛了,錯誤訊息是「要求已經中止: 無法建立 SSL/TLS 的安全通道。」

在網路上搜尋這個問題,所有的解都是說只要加入下列程式就能解決:

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

但我的程式裡早有這行,所以不是這個問題。

繼續找的結果是,因為我寫了一行程式:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;

把這行改成

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;

或是直接把那行註解掉即可

為什麼這樣改就會好?

我查了一下發現是因為SSL3有缺陷,已經要被各大網站棄用啦!

以下節錄:
「2014年10月,Google發布在SSL 3.0中發現設計缺陷,建議禁用此一協議。Google在自己公司相關產品中陸續禁止回溯相容,強制使用TLS協議。計劃於11月25日發布的Firefox 34中,Mozilla 將徹底禁掉 SSL 3.0。」




2014/9/26

Swift Optional 變數的處理方法

在學習 Swift 語法的時候,我遇到最大的障礙是 Optional(!?)。驚嘆號跟問號和型別轉換的問題,這兩個符號寫在變數型別上時,定義了變數是否可以為空值(nil),以及變數預設為空值(?)或預設為有值(!)。在語言設計上,我們可以知道 Apple 會這樣設計,目的是為了寫程式的人必須處理當變數為空值時的情形,這是為了程式的安全性。

在變數宣告上寫作

var s:String = "s"
var s0:String!
var s1:String! = "s1"
var ss0:String?
var ss1:String? = "ss1"

其中s不可為空值,s0, s1, ss0, ss1 可為空值,s0, s1 預設不為空值,ss0, ss1 預設為空值。
在變數使用上,假設我們現在要做的事情是取得字串長度,預設為空值的變數必須經過一個轉換才能使用,基本的用法如下:


1. 用 lf let 解開變數封裝
var stringLength1:Int = 0
if let ss0 = ss0 {
    //如果ss0有值會進入這裡,且ss0的型別被改為String
    stringLength1 = ss0.utf16Count
}
else
{
    //如果是空值會進入這裡
}


2. 用問號,當 ss0 是 nil 時 return nil ,所以等號左邊必須也用可為空值的變數去接
var stringLength2:Int!
stringLength2 = ss0?.utf16Count


3. 用驚嘆號強制解開變數封裝,這種寫法當 ss0 是 nil 時程式就 crash
var stringLength3:Int
stringLength3 = ss0!.utf16Count

方法 1 清楚地描述了 ss0 是空值或不是空值分別該怎麼做。
方法 2 是說當 ss0 是空值時,stringLength2 就設為空值。
方法 3 則是當 ss0 是空值時,程式就要 crash。

方法 1 或方法 2 都有處理當 ss0 為 nil 時該怎麼做,而方法 3 沒有,所以方法 3 是危險的。
也許我們可以當 ss0 為空值時給 ss0 一個預設值,讓程式繼續執行下去,做法如下:
if ss0 == nil {
   ss0 = "nil" 
}


ss0 = ss0 == nil ? "nil" : ss0

我們把設定預設值的動作寫成函數,以便日後使用。
public func unwarp(string:String?) -> String{
    return string == nil ? "nil" : string!
}
unwarp(ss0)
// return "nil"
unwarp(ss1)
// return "ss1"

我們也可以也把它寫成泛型,並且加入預設值的設定。
public func unwarp<T>(value:T?, defaultValue:T) -> T{
    return value == nil ? defaultValue : value!
}
unwarp(ss0, "XDDD")
// return "XDDD"
unwarp(ss1, "XDDD")
// return "ss1"

於是我們可以對所有型別都做出 unwarp function。


***  2014/10/9 更新  ***
上述的泛型 unwarp 函數在輸入的兩個變數型別不同時會以 value 為主
以下的 code 修正這個問題,改為以 defaultValue 的型別為主

public func unwarp(value:AnyObject?, defaultValue:T)->T{
    if let value: AnyObject = value {
        return value is T ? value as T : defaultValue
    }else{
        return defaultValue
    }
}
unwarp("1.0",0.0)
// return 0.0
unwarp(1.0,0.0)
// return 1.0
unwarp(nil,0.0)
// return 0.0
var a1:Int = unwarp(3.5,1.5)
// a1 = 3
var a2:Int = unwarp("3.5",1.5)
// a2 = 1


***  2015/2/12 更新  ***
發現內建處理解開封印時加入預設值的運算子 ??

var ss:String?
ss ?? "QQ"
// return QQ

2014/9/5

有一種人在出手前,就已經確定他會成功,你覺得他是哪種人?

很多人都知道作事情的方法是

1. 事前準備:包含收集資料、分析、規劃等
2. 實作
3. 完成

如果不考慮失敗的話當然是這樣沒錯,一旦考慮失敗的話,方法就變成這樣:「事前準備→實作→失敗→調整→實作→失敗→調整→實作→失敗→調整→實作→失敗...」,不知道失敗了幾次,最後終於成功。


有一種人在出手前,就已經確定他會成功,你覺得他是哪種人?

1. 他以前作過,而且他成功了。
2. 他收集了很多資料,爬了很多文,作了很多分析,寫了很多規劃,下了很多苦工,但是他沒作過。


答案應該很明顯。如果你還在事前準備,那你打算什麼時候才開始實作?如果實作成本不高,那就該盡早實作,並且作紀錄,做好失敗的心理準備,根據紀錄來推斷該怎麼調整,嗯?這不就是作實驗的方法嗎?

最近在看的影片,真的很棒。


2014/9/3

關於 iBeacon

為什麼,商店老闆發現他可以當你在商店門口時立即發一份 coupon 給你,老闆們就高潮了?難道老闆們平常不發coupon?不是的,因為一個東西的價值,是根據環境決定。

一包衛生紙沒有什麼價值。但是當你在廁所裡大完便,發現只剩一張衛生紙,你卻會小心翼翼的使用他。

一瓶礦泉水沒有什麼價值。但是當你在沙漠裡,已經不記得上一次喝水是什麼時候,看著你手上唯一的一瓶礦泉水,卻捨不得喝。

當東西處於一個被需要的環境時,價值可能會超乎想像。而 iBeacon 可以幫助你抓住這個時機。

看看網路上對於 iBeacon 的應用,可以知道大部分提供的服務內容是原本就有提供的服務,而改變的是服務的時機。正因為提供服務的時機改變了,其價值就上升了。當你在使用者最需要地圖的時候,給他地圖,地圖的價值就上升了,沒人注意到的是地圖可能早就公開在網路上。

也就是說,如果要發想 iBeacon 可以作什麼?我認為把現有服務調整到使用者真的需要這項服務的時機,是 iBeacon 最應該做的。並不是不考慮那些原本就從未被滿足的需求,而是從那裡出發,很難具體地想像出一個正確的 iBeacon 服務。

2014/8/27

三缺一按鈕


這個 GG Button 按鈕是老外作的,還蠻貴的,一個大概300多塊。他剛出的時候我一次買了5個。


==


今天想到台灣人喜歡打麻將,應該作一個三缺一按鈕。

最適合作這件事的人,應該是明星三缺一的軟體開發商,因為他們手上有音效檔的版權,和遊戲介面上的按鈕設計圖。


三缺一按鈕的概念圖大致上長這樣,四個方形按鈕成並排狀,按下後隨機發出音效聲,假設按下「胡」,明星三缺一遊戲中有許多「胡」的音效,隨機挑選一種播放。

也可以提供客製化,讓客戶挑選想要的人聲,三缺一按鈕按下後發出固定的人聲。比方說我想買吳宗憲的三缺一按鈕,那四顆按鈕按下後發出的聲音就會固定是吳宗憲的聲音。

按鈕設計應考慮按鈕大小,必須適合放在牌桌上,不能太大。

按鈕設計應考慮按鈕大小,必須適合讓人能快速按下,不能太小。

按鈕設計應考慮按鈕傾斜角度,也許應該向使用者傾斜20~30度,方便使用者看到按鈕上的字以及按下按鈕。

喇叭的位置應該朝向牌桌中心。


可惡想買。

2014/8/26

年輕就是最大的資本

最近開始感覺到什麼叫做年輕就是最大的資本。

當你在面臨一個選擇的時候,通常可分為兩種,保守派跟激進派。

保守派是在確保回到現狀的可能性下求改變、穩定發展,低風險低報酬。

激進派則是不留退路,破釜沈舟,一去不回頭。高風險高報酬。

乍看之下保守派似乎是比較好的選擇,但仔細想想又覺得不是這麼簡單。

選擇保守派的缺點是什麼呢?

1. 為了保留回到現狀的可能性,需要多付出一些成本。

2. 當改變後覺得不好,決定回到現狀,就是作白工、浪費時間。

3. 一直不敢衝的結果,就是錯過衝刺的最佳時機。


而那些看起來很瘋狂的選項,卻可以豐富人生經驗,沒試過怎知道?

2014/8/16

為什麼你應該讓小孩管理自己的錢?

唉,我擔心的事情還是發生了。

昨天你家小孩在晚上9:00跟我說他下班了,晚上10:50跟我說他還在店裡幫忙。

我問:「你在店裡幹嘛?」

他說:「他們叫我幫他們忙。」

我說:「那你為什麼9點下班?」

他說:「因為店長說9點要下兩個人,不然他會被罵。」

我說:「那你不就是在做白工?」

他說:「又沒關係。」

我說:「你作5個小時,只拿3個小時錢,你的時薪從 115 降到 69 你說沒關係?下班就應該要趕快走,要不然你就不要9點打卡,11點再打卡阿!如果你認為你的時間只有這個價值,那麼你的時間就真的只剩這點價值了阿!」

他說:「115 變 69 又有什麼關係,我賺的錢我又拿不到!」

我說:「為什麼你拿不到你的錢?」

他說:「因為我家人說我會亂花錢阿,存摺跟提款卡都在他們手上。」

我說:「你現在就是在亂花錢阿,每個月把賺來的錢都送一半給你店長!」

他說:「我又沒差。」

我說:「那如果你賺的錢你可以拿得到呢?」

他說:「那我就會爭取阿,我就不會9點打卡還作到11點阿。」

我說:「所以你覺得你家人寧願把錢送你店長 也不要讓你亂花?」

他說:「嗯。」

我說:「那你不要做啦,反正你有沒有賺錢對你來講根本沒差阿!」

他說:「有差阿!我不想待在家裡被念阿!」

我說:「所以你寧願在公司做白工也不願意待在家裡!?」

他說:「嗯。」

我說:「那你來我家打工,我一個小時給你10元阿。」

他說:「蛤?那麼少。」

我說:「你又沒差。」


為什麼跟你說這個事情?

因為你們應該讓他管理自己的錢!

為什麼你們應該讓他管理自己的錢?

1. 授人以魚,不如授人以漁:你們要教他怎麼管理自己的錢,而不是替他管理。

2. 激勵理論:任何店長都知道要給做得好的員工加薪,對他來說做多少領的錢都是零,那幹嘛認真作?他的價值觀已經錯亂。

3. 自我應驗預言:當你相信他可以管理自己的錢管理的很好時,他真的能做到的機率就會上升。

4. 強制扣薪條款:如果說他真的有欠你們錢,就算是銀行強制扣薪也只會扣三分之一。

5. 什麼人工作領不到薪水:只有奴隸工作領不到薪水,就算是佃農都有薪水領。

我希望你們真的用心,好好處理這件事。

你家小孩不是我的責任,但我希望他可以當個正常人。

2014/6/6

網路剪貼簿

名詞定義

外部資料:網頁上的某個區塊的HTML內文,他不是畫面截圖。

概念

使用者可以把外部資料貼到網路剪貼簿上,當外部資料發生變動時,網路剪貼簿也會隨之變動。

準確地說,可以用類似 jQuery 的寫法取出指定網頁中的指定 html tag 再 append 到剪貼簿上。

使用者可以調整剪貼來的資料,可以決定顯示的大小、位置、樣式等。

使用者可以對剪貼來的資料做二次剪貼、整理、或用別種形式顯示,例如圖表。

使用者可以新增文字方塊欄位作為資料來源

實作

核心功能:
1. 會員系統
2. 新增剪貼簿
3. 在剪貼簿中新增外部資料
4. 編輯外部資料設定

進階功能:
1. 以文字方塊作為資料來源
2. 在 chrome plugin 做剪貼簿的新增外部資料
3. 剪貼簿的二次剪貼
4. 資料圖表化

社群功能:
1. 剪貼簿可設定公開或不公開
2. 最新剪貼簿列表
3. 剪貼簿人氣值紀錄
4. 人氣剪貼簿列表




2014/4/23

記憶學 - 瞬間記憶超長數字的方法

為什麼記憶高手可以瞬間記憶超長數字

記憶高手可以在一瞬間記憶一串超長數字,其中的訣竅在於製造差異化,數字和數字之間的同質性太高,所以容易造成混淆,只要透過一些手段排除掉同質性,就能瞬間記住超長數字。

怎麼製造差異性?

使用聯想來將數字轉換成其他的名詞,因為一連串名詞是最容易記憶,一連串動詞/形容詞不容易記,因為動詞/形容詞並不容易在腦內產生影像串聯

那麼數字怎麼轉換成名詞?舉個例,比方說透過諧音 14 轉換成醫師,15 轉換成鸚鵡,你總不會把醫師跟鸚鵡搞錯。

實際運作時,我們會先把一連串的數字拆成兩兩一組,各自轉換成名詞之後,再對名詞作影像串聯,整個過程會在很短的時間內完成。


實際運作時遇到的困難

原理了解後,你會發現任何一組數字給你,你總是花很長的時間才把數字轉換成名詞。未經訓練的大腦聯想力實在是太低了,這是需要多訓練的。從數字到名詞的轉換、名詞串聯都是需要多練習的項目。

建立數字記憶表

從數字到名詞的轉換會經常用到,所以可以事先建表,加以練習。先從00到99分別找到一個名詞對應,可以嘗試用「講到OO就想到XX」的方式去想。每個人所學的知識不同、學過的詞彙,對詞彙的熟悉度也不同,若使用別人建的表格會造成聯想上的障礙。比方說我的66是ㄌㄌ,從ㄌㄌ聯想到蘿莉。如果你不知道什麼是蘿莉,就無法產生影像串聯。

如果真的想不到的話,可以從這裡找別人建好的表來作修改。

我自己用的表是這樣

背表

最難的事情 - 「建立數字表」已經度過了之後,再來就是練習看到數字就能在很短時間內轉換成名詞。我找到一個非常適合用來練習這事的軟體:Quizlet

Quizlet是單字卡軟體,但我們可以在單字卡的兩邊分別填入數字跟名詞,就成了最佳的練習軟體。這篇文章對Quizlet有很詳細的介紹。

如果一開始填的名詞聯想夠直覺的話,應該很快就可以背完。

記憶學 - 影像串聯

什麼是影像串聯?

影像串聯是圖像記憶法裡的一種技術,功能是幫助你記憶一連串的名詞,也稱為鎖鏈記憶法。優點是記得序列和順序,缺點是如果忘掉一個,接下來整串就全忘了。

怎麼使用影像串聯?

影像串聯的原理是讓兩兩名詞之間產生關連性,建立關聯性有兩種常用的方法:

1. 名詞A 對名詞B 做某件事
2. 名詞B 位在名詞A 的哪裡

要在腦海產生畫面才算完成。畫面越稀有、新奇、驚悚就記得越牢。

試試看

這裡有一個示範,下列20樣東西按照順序記憶的方法:蘋果、旗魚、衣架、小鳥、望遠鏡、胡蘿蔔、猩猩、戒指、馬桶、小烏龜、旗幟、手套、鑰匙、鱷魚、電腦、冰箱、火車、礦泉水、痛苦、賺錢。

每個人對兩兩名詞建立的關聯不必相同,最後兩個字不是名詞,需要稍微轉換一下。

我說一下自己串聯的過程

1 蘋果上插著冷凍旗魚
2 旗魚尾上掛著衣架
3 衣架上(橫桿的部分) 站著小鳥
4 小鳥拿著望遠鏡
5 從望遠鏡看到胡蘿蔔
6 胡蘿蔔正在追擊大猩猩
7 大猩猩手上戴著戒指
8 戒指掉到馬桶裡
9 馬桶裡有隻烏龜
10 烏龜爬上旗桿
11 旗桿頂端掛著手套
12 手套拿著鑰匙
13 鑰匙插進鱷魚屁股
14 鱷魚咬住電腦
15 電腦放進冰箱
16 冰箱放到火車上
17 火車上有賣礦泉水
18 礦泉水賣給痛苦(口渴)的人
19 痛苦的人給了錢

如果你在腦海中跟隨我的描述建立起一個個的畫面的話,這20個項目你也背下了。

2014/4/6

盲解滑塊 / Blindfold Sliding Puzzle

最近看了一些影片,說明記憶力跟腦力是可以經過訓練得到改善的。



我的記憶力很不好,所以想來訓練一下,也許盲解益智遊戲會是個不錯的選項。我只有看過盲解魔術方塊,不過那對於一個想訓練記憶力的初學者來說太難。所以我想滑塊會是一個比較簡單,適合練習盲解的遊戲。

滑塊的遊戲目標是排出剛進入遊戲時的畫面,隨機彩色版則必須在進入遊戲時先背下目前的色表。

在盲解模式下,第一次的移動將會觸發盲解,點選 Normal 或 Blindfold 選擇遊戲類型,然後使用鍵盤的[W][S][A][D] 或 [↑][↓][←][→]進行遊戲,按Enter等同於按下右邊的按鈕。

不熟悉滑塊遊戲進行方式的玩家可以先試著用數字板練習,如果由上而下解,就是先排123,先排出下圖:

23
1**
***

然後用 [→] [→] [↑] 就可以排出第一排了,456以此類推,78會自動排好。

彩色方塊版:https://etrex.tw/js/sliding_puzzle/SlidingPuzzle.html


這也是我第一個純JS的遊戲,之前都作FLASH的。

2014/4/1

專門為台灣人設計的五十音濁音記法

記憶學裡面提到,記憶就是將已知跟未知進行連結,這是最有效率的方法。

聽說全世界只有台灣在用注音符號系統,因此對台灣人來說,利用已知的注音符號來記憶五十音規律確實是最佳的方法。

以下將介紹濁音與清音之間的關聯性,下圖標記相同顏色就代表相同發音。


為了方便說明,我只取日文的あ段和少數的例外出來說明。

你有注意到濁音通常是落在清音的正上方嗎?

你有注意到濁音全是注音符號的第一排嗎?

濁音其實是很好推測的。把規則記下後就不需要一個個地背。

藍色的 か(ka) が(ga) 如果對應到注音符號的話,是ㄎ(k) ㄍ(g) ,是不是符合規則呢?

紅色的さ(sa) ざ(za) 如果對應到注音符號的話,是 ㄙ(s) ㄗ(z) ,是不是符合規則呢?

綠色的た(ta) だ(da) 如果對應到注音符號的話,是 ㄊ(t) ㄉ(d) ,是不是符合規則呢?

紫色的は(ha) ば(ba) ぱ(pa) 如果對應到注音符號的話,是 ㄏ(h) ㄅ(b) ㄆ(p)是有點歪掉不過還是有個撐住,ふ(fu) 上去也是跟ㄅㄆㄈ同一排的。

我們還剩下幾個跑錯棚的

し(shi)  じ(ji) 對應到正上方的
ち(chi) ぢ(ji) 對應到正上方的
つ(tsu) づ(zu) 對應到正上方的

所以除了對應到ㄅㄆ之外其他都是找注音符號正上方的發音就對了


2014/3/26

2014/3/25 立法院一遊

今天去立法院外圍繞了一圈,體驗一下現場在幹嘛。

在立法院的正門,這裡是民進黨的營地,大多數是中老年人,中間有一個人在嘴,我不太喜歡問答式的發言,但是中老年人們似乎很喜歡,我們很快就離開這裡。

警察的數量真的很少。

在立法院兩側的道路上,也就是青島東路和濟南路,是整排的學生靜坐,大多數的人一看就是知道是10~30歲之間。

這張全景照是濟南路的情形。

在這條路上,地上有用繩子之類的東西作格線標示哪裡是靜坐區,哪裡是走道。基本上走道分三條分為上中下路,人行道的兩旁跟馬路的正中央,正中央的走道是工作人員專用的走道,功能有配發物資跟緊急醫療。而兩側的走道會設置物資區,醫療區,手機充電區,資源回收區等等。

靜坐區的地上舖著被拆開來的紙箱。紙箱是從物資區取得,大多數都是來自於一箱箱的礦泉水。我們在青島東路和濟南路各找了一個地方坐了一下,一邊觀察一邊玩手機遊戲,不過這裡手機的收訊不是很好,應該是人太多的關係。

約莫過了三十分鐘,有工作人員拿貼紙在發,同時也有工作人員拿肉羹在發,他說:「這邊有人需要肉羹嗎?」顯然是免費的肉羹,不過我們沒有拿肉羹,我們拿了貼紙。合理推論有些人的頭巾也是配發得到的,只要坐得夠久就有機會拿到。

配發的貼紙,拿了一張證明到此一遊。

這裡的廣播有點類似排麥系統,是用登記發言順序。就像你去KTV唱歌,要先點歌,然後等到輪到你才可以唱。通常上台的人都會先說自己是什麼學校什麼系的,之後才接著講他想講的內容,其中一人在發言的時候說他從下午兩點開始等,等到現在(8點)才輪到他,我想如果是KTV通常都唱4小時,那就是你一進場就點歌,直到結束都沒機會輪到你啦。還有一個還蠻有趣,是6歲大班的小男孩,發言也很天真,但是全場歡呼了,因為他說:「希望警察哥哥不要打大葛格大姐結。」太萌拉~~~~

青島東路的視角,這邊可以看到有人從立法院的二樓窗戶出入。

現場氣氛大概就像書展或漫畫展熬夜排隊的感覺,大部分的人在做自己的事情,偶而會回應一下正在發言的同學。有在玩手機的,看書的,在聊天的,也有在野餐吃麥當勞的。沒辦法,附近好像沒有肯德雞。我們買了五十嵐跟地瓜在這裡野餐了一下。在坐著的時候觀察那些在移動的人,覺得他們像是來逛街的。

附近的攤販大概4~5攤左右,只記得有賣香腸的跟賣地瓜的,其他的攤販也是賣吃的,但沒注意是賣什麼吃的。我想起之前跟朋友討論的在這裡賣雞排賺不賺的問題,當時朋友說要是民眾凹你捐雞排怎麼辦,我想也是,不過我沒有膽去要求攤販捐個兩根香腸。

在街道的兩旁,是大量的文創作品,有些還蠻好笑的。

在這個環境下,我很自然的聯想到康輔社。康輔社的晚會,和康輔社的海報設計,幾乎就是那樣的調調。

路邊的 SNG 車很多台,各家都有。


最後因為尿急又不想上流動廁所,就回家了,總共待了大約2小時。

2014/3/19

Skype 清除對話紀錄就會 Crash

發生這個問題的 Skype 版號是 6.14.1.104 

在 Skype 裡面有一個功能,叫做清除對話紀錄。


正常人不會去用,像我這種每天大量發廢文不正常的人才會去用,因為同一天之內訊息太多就會LAG,解決方法就是把訊息清掉。

清掉之後,只要你第一個打開的對話是群組對話,就會當掉。


還要自己去工作管理員關才關得掉

2014/3/18

Google Hangouts 試用結果

因為目前使用的 SkypeLine 很爛不能滿足需求,所以我嘗試使用其他的通訊軟體,詳情請見上一篇

如果只有自己安裝 Hanguts 的話是什麼屁也測不出來的,就跟世界上第一支電話一樣,所以我要求一個平常在 Skype 聊天的群組成員改用 Hanguts。不過你也知道,要導入一個新的資訊系統不是那麼容易的:「我 Skype 用得好好的,為什麼我要換?」、「蛤好麻煩哦」、「怎麼用,我不會用」、「介面好難用哦」、「你自己去 Hanguts 吧,我們在 Skype 聊就好」看來我面臨的是一個難題。

要求註冊不算困難,因為 Hanguts 是 Google 出的,有 Google 帳號就可以登入,所以幾乎大家都有帳號,我們大概花了3天左右的時間才把大家弄到 Hanguts 裡面並且加入群聊。但是大家還是習慣在 Skype 聊天。

我們一群人大概8~9個人,在 Skype 有一個群組,在 Line 也有一個。現在在Hanguts 又多了一個,所以他們覺得Hanguts 很多此一舉,我們習慣在 PC上用 Skype ,在手機上就用 Line ,不過我們也都有裝PC版的 Line

大概有一半的人願意嘗試使用Hanguts,另一半的人比較不願意,所以就會看到 Skype 在聊天,Hanguts也在聊天的結果。這樣的狀況維持了2天左右,我決定關掉 Skype 看看能不能把其他人引到 Hanguts。結果當然是不能,他們只有在聊到跟我有關的事情才會在Hanguts上聊。

又過了幾天,大家比較習慣在Hanguts上聊了,大概一天有八成的對話是在Hanguts上進行,剩下的就在 SkypeHanguts 的優點也慢慢展現出來,像是上傳圖片會自動建立相簿,可以在Google+上面看到照片牆,這點很棒。在圖片品質上,如果是 Line ,上傳的圖片、影音、聲音都會被降低解析度才傳到對方那,不過Hanguts 是原汁原味的,這點也很好。

在已讀標記方面, Skype 是不標記的,而 Line 是標記已讀幾人,Hanguts用每個人的大頭照來標記每個人目前讀到哪裡,這很有趣,因為在 Skype 有人習慣只讀不回,但是在Hanguts就會被發現他都有在看,我們說這功能是無所遁形術。

其實最棒的還是 Hanguts 可以在多台電腦、iPhone和iPad上同時登入,這點 Line 不行,因為你如果在iPhone登入了,又想在iPad上登入的話,你的iPhone上的登入和對話紀錄都會完全被洗掉,完全不知道沙小。

關於在 Skype 上訊息過多的時候,發訊息會LAG的問題,在Hanguts上也有發生。在 Skype 上發生這個問題的解法是清除對話的歷史紀錄,在Hanguts 上的解法是關掉對話框重新打開即可。所以在這點上也是 Hanguts 勝出。

不過在複製對話內容這點,Hanguts 是大輸 LineSkype 的。我有時候會複製 Skype 的對話貼到 Line 或者複製 Line 的對話貼到 Skype ,複製到的內容都很好讀,但是在 Hanguts 就會複製到完全不知道是沙小,看不出來誰說什麼的東西。

最後我們認為 Skype 很爛,但是沒有爛到不想用。而 Hanguts 很好,但是沒有好用到非用不可。

不過我們一致認為,不考慮 Line 貼圖的情況下,Hanguts 完勝 Line


2014/3/17

從 Threes 來的地獄遊戲:9007199254740992

Threes 是一個手機遊戲。是一個需要付費的手機遊戲。因為是付費遊戲所以當下沒有買來玩,光是免費的遊戲就玩不完了。

iTunes :https://itunes.apple.com/us/app/threes!/id779157948?mt=8

Google Play :https://play.google.com/store/apps/details?id=vo.threes.exclaim



過了幾天,2048出現了。這遊戲在一個4x4的棋盤上進行,使用鍵盤的上下左右來移動畫面中的所有方塊,每個方塊身上會帶有一個數字,當相同數字的兩個方塊被堆疊在一起時就會合成一個數字更大的方塊,而遊戲目標就是合出一塊 2048 囉。因為是免費的所以我就玩了幾次,感覺還蠻好玩的,但是抓不到高分的訣竅。

2048:http://gabrielecirulli.github.io/2048/



又過了幾天,我朋友貼了 9007199254740992 的連結給我,他是在8x8的棋盤上進行相同的遊戲,遊戲的目標試產生一塊 9007199254740992 (2的53次方),一開始覺得新奇,玩了5分鐘才意識到好像根本不會死!?於是開始上下左右亂按,分數增加的很快,連續按了20分鐘(手很痠)之後,分數來到了20萬,我覺得再按下去我就是智障了,所以我就寫了一段程式來幫我按。想說看一下亂按可以拿幾分。

9007199254740992:http://www.csie.ntu.edu.tw/~b01902112/9007199254740992/



因為我朋友也想看到底可以玩到幾分,所以我就開實況,結果是48個小時拿到1億多分還沒死。最後想說刻意移動讓他死亡的方式玩死他,結果好像就crash 了,明明還沒有達成死亡條件就判定死亡了。

48小時的實況影片:http://www.twitch.tv/et284vu065k3/b/511290655


1億多分的死亡(其實繼續亂按的話估計還可以放個5天)


最後我重新試了一次最快死亡(最低分)可以拿幾分,結果大概是3萬左右。


我的自動移動程式碼如下:


game = new GameManager(8, KeyboardInputManager, HTMLActuator, LocalScoreManager);

function go() {
    var r = Math.random();
    var d = 0;
    if (r < 0.25)
        d = 0;
    else if (r < 0.5)
        d = 1;
    else if (r < 0.75)
        d = 2;
    else
        d = 3;
    game.inputManager.emit("move", d);
}
var t;

function gooo(speed) {
    go();
    t = setTimeout(gooo, speed, speed);
}

function stop() {
    clearTimeout(t);
}
gooo(10);


如果想要使用我的程式進行自動移動的話

就用 Chrome 開啟遊戲畫面,按下F12,然後選擇 Console

在下面文字框>貼上我的程式 按下Enter即可。

然後我今天發現他補上了自動移動的功能了。


2014/2/28

asp.net mvc 在 aspx 頁面上讀不到類別

現象

在 controller 讀得到的類別,換到view上就讀不到了

錯誤訊息

編譯錯誤

描述: 資源編譯無法完成 (錯誤發生於服務要求)。請檢閱下列的特定錯誤詳細資料,並視情況修改您的原始程式碼。

編譯器錯誤訊息: CS0012: The type 'EtrexLib.某個類別' is defined in an assembly that is not referenced. You must add a reference to assembly 'EtrexLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

解決方法

在web.config 上的 assemblies 加一行
<add assembly="EtrexLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
根據你的錯誤訊息顯示的內容,你應該要修改上面這行

2014/2/26

我開始嘗試在使用通訊軟體上尋求改善

最近我們覺得SKYPE越來越爛了,當對話數量過多的時候,縮放SKYPE的視窗就會延遲到爆炸,甚至是打個字都要等好幾秒才顯示,按下ENTER送出等了幾秒之後才看到訊息送出,每次遇到這種情形,我會選擇清除歷史對話紀錄,然後他才正常。

上傳圖片後對方要先下載才能看到圖,手機板還不能上傳圖片,也是SKYPE不方便的地方。所以我們嘗試在通訊軟體上尋求改善,找一款可以滿足需求的通訊軟體。

首先看LINE,雖然可以上傳圖片,而且上傳圖之後對方可以馬上看到,但我覺得LINE不夠好用,因為他不能在多個行動裝置上登入,也不能在多個電腦上登入,傳圖時必須先製作出圖檔,不能用 print screen 鍵加貼上傳圖,而這點在SKYPE是有作到的。

後來我們去找了AIM,AIM是一個國外的通訊軟體,功能十分強大,經過一些設定,我可以透過AIM的UI傳訊息給我的Facebook朋友,和GTalk朋友,但是他不能切換到中文輸入法...

我們又去找了Cubie來試用,但我發現一個致命的問題,我因為工作上的關係,需要不斷重開Chrome,因為Cubie在本地端是以一個Chrome應用程式的形式存在,所以如果不把 Cubie也一起關掉,我就沒辦法做到重開Chrome,當然我也可以選擇從避免重開 Chrome 著手。

ICQ不支援中文輸入

HipChat 不支援 5人以上的群組免費使用

Hangouts 在PC上也是綁 Chrome

到這裡,回頭分析一下我們對通訊軟體的需求:
1. 順暢使用
2. 可以傳圖片
3. 可以不用下載就看到對方傳的圖片
4. 可以用 print screen 截圖之後在對話框按貼上後傳圖
5. 可以多平台登入
6. 可以輸入中文
7. 可以搜尋對話紀錄
8. 不需要在瀏覽器上執行
9. 需要支援約15人的群組功能

目前仍持續在尋找符合需求的通訊軟體中。如果找不到,我會選擇聯絡那些我嘗試過的軟體開發商,並且向他們提出我的需求建議。我相信這麼作對我,或者對軟體開發商都是好事。


改善生活品質的方法:
在現況中找到不滿足的地方,並且尋找改善方案。一邊嘗試各種方案一邊記錄自己的需求,如果現況沒有任何一個方案可以滿足自己的所有需求,可以在現狀中選一個最接近的方案,給他提出需求建議,或者自己創造一個新的。

2014/2/24

人生目標不該是賺錢,而是改善生活品質

最近有一個朋友問我怎麼評價一個人是否成功,是用賺多少錢嗎?我想了一個月終於有了答案。評價一個人是否成功是一種價值觀,而價值觀會影響行為。

每次過年都會聽到一些親戚問:「現在一個月賺多少錢阿?什麼時候結婚生小孩阿?聽說那個誰年薪百萬還結婚了。」他們不斷在你和強者我朋友的兒子的財產上作比較來打壓你來判斷你是否成功,洗腦你的價值觀是錢最重要。

價值觀和人生目標是互相呼應的,你認為錢最重要,你的人生目標就是努力賺錢。而我認為快樂最重要,我的人生目標是改善生活品質。

卡米:「我覺得人活著不應該是追求錢,而是追求快樂。」

朋友:「沒錢,哪來的快樂?」「具體怎麼作才會快樂?」

卡米:「快樂就是生活品質得到改善。」

朋友:「沒錢改善個屁生活品質。」

卡米:「所以就要為了錢犧牲生活品質嗎?」

我剛好認識一個奴隸,他每天加班沒有假日。老闆星期六晚上下班前安排工作給他,星期日早上就問他作完了沒。老闆表示:「你應該利用下班時間完成工作。」。奴隸的阿公去世的時候,公司老闆還不讓他請喪假。我問他為什麼不離職,他說:「這是我第一份工作,我現在離職不就是草莓族了嗎?」幹到底在怕什麼標籤阿,奴隸有一天決定要離職,好不容易擠出一份離職信遞了出去,老闆收到之後給他摸了一下頭然後說:「你再考慮看看」,奴隸竟然就留下來了,如果這不是奴隸,什麼是奴隸!更慘的是還被降月薪,唉!

為了薪水犧牲生活品質是錯的,你一定可以找到更好的工作。太多的人倒果爲因,以為要先有錢,才有生活品質,其實是先有生活品質,才會有錢。因為大部份的經濟活動都建立在改善別人的生活品質上,像這種惡質老闆遇到就趕快跑吧。

卡米:「正確的賺錢方法是改善自己的生活品質,並把方法分享給別人。」

朋友:「上次跟我說把好用的產品告訴別人就有錢的人,就是他媽的直銷阿!」

卡米:「哪個直銷賣的東西有改善生活品質嗎?」

其實知名部落客作的事也是改善別人生活品質。美食部落客教你怎麼吃,旅遊部落客教你怎麼玩、技術部落客教你怎麼用電腦、翻譯部落客幫助你的國際觀,實況主帶給你娛樂。

卡米:「知名部落客也是在改善別人的生活品質。他們也賺了不少。」

朋友:「那不想當部落客的人呢?」

很多產品被發明出來,就是因爲世界上找不到滿足自己需求的產品,於是自己作了一個,作者發現很好用之後分享給其他人用。如果真的好用就會大賣。判斷好不好用的依據就是有沒有改善生活品質。

卡米:「一個成功的產品設計也是改善別人的生活品質。有聽過Dropbox嗎?」

朋友:「蛤那沒有設計天分的人要準備吃土了嗎?」

改善你的工作流程,使你的主管上班時的生活品質得到改善,並說服他採取跟你相同的行動,使主管的主管上班時的生活品質得到改善,具體改善工作流程是指使繁瑣重複的事變成自動化並且節省時間,節省成本。你的價值將會反應在你的薪水上。

卡米:「嘗試改善你的工作流程,並且使你的主管嘗試改善工作流程,也是在幫助別人改善生活品質。」

朋友:「幹那就還是要好好當個奴隸呀!」

卡米:「不是每家公司都是奴隸制阿,先確認你不是在奴隸公司上班阿。」

你有嘗試過任何使同事上班心情變快樂的方法嗎?嘗試作一些使同事快樂的事吧!這將會改善你的人際關係,同時也會使同事的生活品質獲得提升,這會反應在你的工作內容上。

卡米:「嘗試使你周遭的人快樂吧,改善你的人際關係,同時也是改善別人的生活品質。」

從今以後,不要再用賺多少錢來當作你的KPI了是否成功的依據了,你改善了多少人的生活品質,才是你是否成功的依據。

從今以後,不要再認為先有錢,才有生活品質了,在生活中到處都有改善生活品質的地方,即使得到很多的錢,你終究要學會懂得把錢轉換成生活品質,如果以前只想賺錢、省錢,卻沒有想過怎麼花錢才能改善生活品質,可以開始好好想一想了。

從今以後,不要再把好東西藏起來了,現在已經是大分享時代了。

2014/2/20

卡米語錄

對不刷牙的人說:
「如果你接受吃飯用沒洗過的碗筷,就不要刷牙阿。有些人筷子在使用前還特地沖一下水咧!他們就沒想過牙齒比筷子還近的問題。」

對奴隸說:
「你一輩子有三分之一的時間在睡覺,就會想要買一張好一點的床了,怎麼沒想過一輩子有三分之一的時間在上班,不找一個作得快樂的工作?哦不是,有些人是二分之一的時間在上班。^_<」

估價的方法:
「作出自己認為最完美的作品,開出身為專家純手工打造的精品價格。也就是估計出最完美作品的工時乘上自己的身價。對於工匠來說,還有什麼比打造精品更令人興奮的呢?」

對機器人說:
「當科學家在研究如何喚醒機器人,讓機器人學會思考的同時,有多少人卻像機器人一樣不懂得思考,只會聽從指令呢?讓我來喚醒你們吧!」

2014/2/18

龍族拼圖和神魔之塔在遊戲設計上的差異

自從GungHo作出了龍族拼圖之後,許多遊戲廠商紛紛致敬,也作出類似的遊戲。在台灣,最有名的是神魔之塔。

一個遊戲要做得有深度,就要作到易學難精。要讓玩家容易入門,但是需要大量時間練習或大量時間養成才能拿到高分。簡單的做法就是在一個基本的遊戲上,增加玩家的條件限制,當玩家達成條件就給予獎賞(高分)。

獎勵制度:達成限制條件 → 加分

舉個例:
「龍族拼圖中的聖海神・伊西斯(水埃及神)
隊長技能:尼羅河的恩惠
3種或以上不同屬性同時攻擊時,所有寵物的攻擊力變為3倍。」
限制玩家在一次轉珠中消除3種以上的顏色珠並產生攻擊,達成後使寵物攻擊力變3倍。

但是在神魔之塔,他增加玩家的條件限制,當玩家沒有達成條件就給予懲罰(扣分)。

懲罰制度:未達條件限制 → 扣分

舉個例:
「神魔之塔中,敵人身上的三屬盾
技能:三屬盾
官方說明:同時消除水符石,火符石及木符石才會對敵人造成攻擊傷害
補充說明:每回合需同時消除水符石,火符石及木符石才能對敵人造成傷害,否則對敵人的傷害都是1」
限制玩家在一次轉珠中消除特定的三種顏色珠,未達成使寵物攻擊力變成1。

類似的例子有太多,就不一一列舉。
成就感在兩種制度的條件達成後都會得到,不過只有獎勵制度會有爽感,懲罰制度得到的是被虐感。

獎勵制度 → 成就感 + 爽感
懲罰制度 → 成就感 + 被虐感

不過神魔之塔真的還蠻虐的,很多在龍族拼圖寵物身上的強力技能被作在神魔之塔的敵人身上,像是反擊、每回合補血等。

我還是比較喜歡獎勵制度。


2014/2/17

一個資訊人員維護系統的心得

一個系統的維護工作,除了定期備份之外,多半是去修改某筆紀錄的某個值。

比方說使用者執行動作之後要求復原,但在前台上並沒有提供復原功能,於是使用者聯絡客服人員尋求協助,客服人員將問題紀錄下,並且轉告給資訊人員,資訊人員如果有權限執行復原的話,資訊人員就可以去資料庫下一個SQL指令解決問題。

我們知道一個資訊人員上班時,不是在開發新功能,就是在維護舊功能。

當使用者越來越多,以及系統提供的功能越來越多的時候,維護工作的需求量就越來越大。當維護舊功能佔據了整個資訊人員的上班時間時,資訊人員就只能用下班時間就沒有時間開發新功能了。

身為一個資訊人員,最喜歡偷懶最擅長的就是改善工作流程。於是這個資訊人員把常用的SQL存起來,並且寫下一份文件說明如何使用這個SQL,當有類似的維護工作時,修改一下SQL的參數就可以完成工作。

但是這樣並沒有完整的解決問題。

資訊人員開始製作所謂的後台,並且把維護工作放到後台上,這麼作可以把執行SQL變成在網頁上填表單,對於資訊人員來說,他再也不需要重複閱讀相同的SQL了,但是維護效率似乎沒有增加,對他來說執行SQL比填表單容易得多。

但接下來發生的事情是關鍵。

當資訊人員調整後台到適合使用的程度之後,寫下後台的使用文件,並且開始教客服人員如何使用後台,從此之後維護工作就不需要資訊人員來作了,資訊人員從此之後省下了這項工作的維護時間,客服人員也可以節省和資訊人員溝通的時間,直接幫使用者解決問題。

最後,資訊人員想到其實應該把最根本的問題交給使用者作,也就是把復原功能加到前台上,滿足權限的使用者就可以執行復原動作。

根本不需要客服,或者人人都是客服,才是一個穩定的系統。

2014/2/12

教你學會吃漢堡

只適用於用紙袋裝的食物 ^_<

這是剛買來漢堡的樣子 (早餐店買的)


步驟1. 首先把紙袋的右側撕開


步驟2. 把上半部的右下角對折上去


步驟3. 也把下半部的右下角對折


步驟4. 拿起來發現漢堡已經通通露出了>////<


然後就開始吃啦~

這樣吃的好處是臉比較不會碰到紙袋上的油

而且看起來比較好吃!

2014/2/7

有效利用

如果買了一台新的 iphone ,怕 home 鍵被按壞所以不按 home 鍵,那跟 home 鍵已經壞了有什麼不同呢?所以不要再用什麼模擬 home 鍵了。

如果買了書不看,那跟沒有買有什麼不同呢?喔,有啦!放在書架上有客人來的時候還可以展現一下氣質。

如果買了衣服不穿,那比沒有買還慘,因為還佔衣櫃空間呢,所以買了衣服就要穿。

如果已經不穿的衣服還放在衣櫃裡,那就趕快拿去舊衣回收吧,不然哪有空間放新衣服,難道要再買衣櫃嗎?

如果買了冷氣只開一次,還是買的時候試用的那次,那跟開一次冷氣就要花一台冷氣機價格有什麼不同呢?所以買了冷氣,該開的時候就要開。

如果去KTV不唱歌只吃東西,那跟去餐廳有什麼不同呢而且你還是分母?餐廳的食物還比較好吃呢,所以去KTV就是要唱歌。

如果一個東西買了不使用,那比沒有買還慘,因為沒買還不用花錢呢,所以買了東西就要用。

如果想要用東西因為家裡沒有所以出去買了,某次大掃除後來才發現家裡有,那就跟原本家裡沒有是一樣的,所以東西要放在適當的位置以便想要東西的時候可以立即取得。

如果一個抽屜裏面沒有放東西,那比沒有抽屜還慘,因為抽屜還佔一個空間呢,所以抽屜裏面要放東西。

如果一個抽屜裏面放滿東西,但根本不知道放了什麼東西,那就跟沒有放東西是一樣的,所以什麼東西放在抽屜裡是要記得的。

如果一個作品作出來之後就塵封,那跟沒有作品是一樣的,所以作品要放到作品集裡展示出來。

如果一個研究出來不發表,那比沒有研究還慘,因為沒有研究還不用花時間呢,所以研究出來要發表。

如果存了錢不花,那跟沒有錢有什麼不同?所以存的錢就是要拿來花。

如果花了錢沒有得到滿足,那跟錢掉了被別人撿走有什麼不同?所以花錢就是要花在有價值的地方上。

如果買了癌症險,每年又為了省錢不去做健康檢查,等到後期才發現,那跟保壽險有什麼不同?所以只買壽險就好啦~買了癌症險就要去做健康檢查。


這是從即時戰略遊戲中學到的:所有村民都要保持工作,所有建築物都要保持生產,所有戰鬥單位都要保持戰鬥,手上的資源要用盡,應用在生活上的結果
ja → zh-TW
如果買Ryogan疾病宣告,每年Matatame亮,笑錢不薩做健康檢查, Hitoshiita晚老發現,那跟Hokotobuki險有INMO差距?為什麼只買了尚志險就不錯啦〜 GaiRyogan疾病險就主要薩做健康檢查。

2014/1/30

過年吃東西 完全沒有罪惡感

音樂:http://www.youtube.com/watch?v=kKVCZQuppFA


離開地球表面 - 卡卡米改


吃掉漢堡 吃薯條 吃掉碳烤 再吃焗烤

吃掉粽子 吃煎餃 吃掉蛋糕 再吃雪糕

吉野家 麥當勞 吃啥都有人唱反調 喝得多 拉得少

體重越跳越瘋 越跳越高 被男友甩掉


體重計噗通噗通的狂飆 一瞬間煩惱煩惱煩惱全忘掉

我再也不要 再也不要 委屈自己一秒

體重計噗通噗通的狂飆 一瞬間煩惱煩惱煩惱全忘掉

我乾掉啤酒 啤酒乾掉 我要放棄治療


吃掉油條 吃湯包 吃掉豬腳 再吃串燒

吃掉起司 吃香蕉 吃掉年糕 再吃米糕

肚子大 胸部小 吃飯不用靠別人叫 喝得多 拉得少

體重越跳越瘋 越跳越高 被男友甩掉



米其林噗通噗通的狂跳 一瞬間煩惱煩惱煩惱全忘掉

我再也不要 再也不要 委屈自己一秒

米其林噗通噗通的狂跳 一瞬間煩惱煩惱煩惱全忘掉

我乾掉啤酒 啤酒乾掉 體重越跳越高


我乾掉啤酒 啤酒乾掉 我要放棄治療