2015年6月25日 星期四

「閱讀筆記」 這些 Google 幫我做好的事:用 Google 思維重建10倍速工作流程

閱讀筆記 這些Google幫我做好的事:用Google思維重建10倍速工作流程 20150625

資訊爆炸,工作爆炸,生活爆無,學習用 Google 的思維去解決問題

大綱

工作爆炸

專注工作流程

團隊合作/協同工作

...

工作爆炸

把工作做好,生活過好

和自己的缺點對抗

工作要有效率,要避免多餘的動作。

用自己的方法,以科技工具輔助,重新建立流程,提升效率。

以 Google 思維,學習,提煉適合自己的方法。

專注工作流程

聚焦在核心工作,讓雲端智能簡化你的工作

以 Google 來連接工作。

Gmail 作為接收工作,當作工作清單,完成的工作(郵件) 作封存,封存時可作分類儲存

以 Google 日曆排定工作,用顏色標記重要性。

Google Drive 作為資料儲存中心

雲端智能簡化你的工作

ex: 挑照片,搜尋,分類,連結工作項目

團隊合作/協同工作

利用 Google Docs, 協同作文書編輯

線上圖表繪製,心智圖...

其他

個人化與社群化,社群,讓一件事產生更多價值

Google 文化典藏

筆記備註

文化典藏中有一個我超喜歡的,那就是 World Wonders, 世界文化遺產結合街景服務,帶你看全世界。

書目

這些Google幫我做好的事:用Google思維重建10倍速工作流程

作者: 電腦玩物站長
出版社:PCuSER電腦人文化
出版日期:2014/07/19

2015年6月10日 星期三

55歲開始的 Hello Life - 村上龍

55歲開始的 Hello Life - 村上龍_20150610_joncash_01

55歲開始的 Hello Life - 村上龍

本文是閱讀「55歲開始的 Hello Life」 之感想,並記錄部份書中部份段落

書中部份段落

並非所有的故事都有摘錄,a, b, c 編號也非對應書中的故事順序

故事 a

"那是一種憤怒,一種被無力感壓垮,為了不放棄某種重要的事物,作為最後手段的憤怒,如果不以憤怒鼓舞自己,就無法振作起來。"

故事 b

"嘴角顯示內心的堅強。"
"死纏爛打,真正的業務是被拒絕後才開始。"
"做一些事也是為了擁有自己的時間。"
"變軟弱了,真不像你。"
"業務需要的是體力,商品知識和溝通技巧"
"工作時期所擁有的權力,造成目中無人"
"中高年齡要自我分析,覺得困難是理所當然的,只要坦然面對自己,客觀的檢視自己。想做什麼?能做什麼?"
"想做什麼 : 想成為業務員,再度站在第一線,任何職場都可以。"
"能做什麼 : 能在別人放棄時,開始挑戰"
"人會想像,所以內心軟弱時,經常會受到想像所苦,受到想像所苦的人,會因為擔憂或害怕而消耗心神"

故事 c

"只是感到寂寞,人生中該守護的東西越來越多,生活方式變得保守。"

故事 d

"人生失敗的人,個個渡過這座淚橋,流落到這個小鎮,我和你總有一天會獲得光榮,倒著走出這座淚橋 --小拳王"

感想

在經歷了許多人生中不平順後,我總是不斷的想著活著的目的是什麼。責任未了,現在還不能走,而且太消極,太軟弱,這真不像我。

暫時還找不到答案,但是我想,總能找到一條出路,閱讀,應該能給我帶來一些啟發。

人無遠慮,必有近憂。有緣份的看到了村上龍的新書,「55歲 開始的 Hello Life」,我想,應該能從中得到點什麼。

看著一篇篇的中長篇故事,一個個將自己代入。想過新生活的離婚婦人; 中年退休的大叔; 失去愛犬的妻子; 失去工作的中年男子。

每一個別人的事實,都不是自己的現實。

一個念頭,我不想要這樣。面對困境,一定有積極的解決方法。

柯 P 語錄說的很好,面對人生各種挫折打擊,卻不失去對人世的熱情。

我要 Hello Life。

2015年6月9日 星期二

色彩檢測

色彩檢測

色彩檢測

本文是學習筆記,記錄及延伸學習 Halcon 影像處理軟體之色彩辨識範例相關知識

前言

在計算機中,彩色數位影像有兩種類型,RGB 及 CMYK [1]。 RGB 彩色圖像是由 R (Red), G (Green), B (Blue) 三種顏色所組成。 CMYK 則是由 C (Cyan), M (Magenta), Y(Yellow), K (Black)。

這裡要講的是 RGB。

在 Halcon 中,將 RGB 彩色影像的每一個顏色分為 1 個 Channel, 你可以利用 Halcon 提供的運算子 decompose3,將一張彩色影像分為 R, G, B 三張獨立的影像。

好的,我們知道在彩色影像中,紅色,其 R, G, B 三個分別的數值表示為 255, 0, 0,我們記為 RGB (255, 0, 0), 綠色則是 RGB (0,255,0), 藍色則是 RGB(0,0,255)。

其中,每一個頻道的數值範圍為 0-255,數值越大,則表示該顏色越強。

說到這,那要如何作色彩辨識呢?

Halcon 範例提供的方式我分為兩大類,

  1. 將顏色作模型訓練,以此訓練模型來分辨顏色
  2. 將 RGB 色彩模型轉換為 HSV 模型[2],利用 Hue 的色度來分辨顏色

顏色模型訓練

Halcon 範例檔

  1. classify _ fuses _ gmm _ based _ lut.hdev
  2. color _ pieces.hdev
  3. color _ pieces _ euclid.hdev

其中,classify _ fuses _ gmm _ based _ lut.hdev 應用了 GMM classifier 來做色彩分類訓練,GMM 是 Gaussian Mixture Model 的縮寫,是單一高斯機率密函數的延伸,常應用在數位訊號的處理上。

處理流程就是

  1. 建立訓練模型
  2. 訓練模型進行訓練
  3. 建立顏色對照表
  4. 開始辨識

其餘 2 個訓練模型,color _ pieces.hdev 範例, 是應用 MLP (Multilayer Perceptron) 作為訓練模型。 ** color _ pieces _ euclid.hdev** 則是應用 Euclid 作為訓練模型

以我的電腦設備 (Intel Core i7-3667U) 執行範例檔,可以發現,classify _ fuses _ gmm _ based _ lut.hdev 範例 辨識一張 1024 * 768 的影像需要花費 2-4 ms。

RGB to HSV 色彩辨識

HSV (Hue, Saturation, Value; 色相,飽和度,明度亦即為亮度)。

色相就是基本的顏色,如紅色,黃色,綠色等, 0-360 [3]

飽和度是指色彩的純度,數值高則越純,0-100%

明度就是亮度,數值高則越亮,0-100%

Halcon 範例檔

  1. color _ fuse.hdev
  2. color _ simple.hdev

兩個範例都是先將 RGB 色彩模型轉換為 HSV 色彩模型,再以 Hue 色相進行色彩辨識

結論

兩種色彩辨識的效果都不錯,訓練模型的方式稍嫌麻煩,因為要先訓練; 而 Hue 辨識不用訓練模型,但要決定色相的區間,雖然有標準數據可參照 [3],但實際的影像受到光線,角度等因素影響,反應出來的色相值可能偏高或偏低,特別是顏色相近時,容易判別錯誤。

2015-06-10 補充

在色相中並無標示黑色及白色,那要如何識別呢? 此時,就要看明度了 [4] 的範例中,給定了一個黑與白的參考數值。

範例程式碼- 使用 C#

public string Classify(Color c)
{
    float hue = c.GetHue();
    float sat = c.GetSaturation();
    float lgt = c.GetLightness();

    if (lgt < 0.2)  return "Blacks";
    if (lgt > 0.8)  return "Whites";

    if (sat < 0.25) return "Grays";

    if (hue < 30)   return "Reds";
    if (hue < 90)   return "Yellows";
    if (hue < 150)  return "Greens";
    if (hue < 210)  return "Cyans";
    if (hue < 270)  return "Blues";
    if (hue < 330)  return "Magentas";
    return "Reds";
}

參考資料

[1] 數字圖像 - 維基百科

[2] HSV/HSL 色彩空間 - 維基百科

[3] 色相 - 維基百科

[4] How can I Classify Some Color To Color Ranges - Statckoverflow.com

2015年5月27日 星期三

檢查資料庫之資料表索引是否應該重建或重組

檢查資料庫之資料表索引是否應該重建或重組

MSSQL 檢查資料庫之資料表索引是否應該重建或重組

本文是學習筆記,內容來自於 [1] ,摘錄語法重點

目的

索引維護,改善效能

範例

檢查索引狀態

引用 [1] 之範例

SELECT OBJECT_NAME(dt.object_id) as TableName  ,
   si.name,
   dt.avg_fragmentation_in_percent,
   dt.avg_page_space_used_in_percent
FROM
   (SELECT object_id   ,
   index_id,
   avg_fragmentation_in_percent,
   avg_page_space_used_in_percent
   FROMsys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'DETAILED')
   WHERE   index_id <> 0
   ) AS dt --does not return information about heaps
   INNER JOIN sys.indexes si
   ON si.object_id = dt.object_id
  AND si.index_id  = dt.index_id

根據 [1] 之說明,重建或重組之建議條件如下

索引重組的時機

  • 檢查 External fragmentation 部分

    當 avg_fragmentation_in_percent 的值介於 10 到 15 之間
    
  • 檢查 Internal fragmentation 部分

    當 avg_page_space_used_in_percent 的值介於 60 到 75 之間
    

索引重建的時機

  • 檢查 External fragmentation 部分

    當 avg_fragmentation_in_percent 的值大於 15
    
  • 檢查 Internal fragmentation 部分

    當 avg_page_space_used_in_percent 的值小於 60
    

重建索引

引用 [1] 之範例, 僅檢查 External Fragmentation

SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +
   CASE
  WHEN ps.avg_fragmentation_in_percent > 15
  THEN 'REBUILD'
  ELSE 'REORGANIZE'
   END +
   CASE
  WHEN pc.partition_count > 1
  THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX))
  ELSE ''
   END,
   avg_fragmentation_in_percent
FROM   sys.indexes AS ix
   INNER JOIN sys.tables t
   ON t.object_id = ix.object_id
   INNER JOIN sys.schemas s
   ON t.schema_id = s.schema_id
   INNER JOIN
  (SELECT object_id   ,
  index_id,
  avg_fragmentation_in_percent,
  partition_number
  FROMsys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)
  ) ps
   ON t.object_id = ps.object_id
  AND ix.index_id = ps.index_id
   INNER JOIN
  (SELECT  object_id,
   index_id ,
   COUNT(DISTINCT partition_number) AS partition_count
  FROM sys.partitions
  GROUP BY object_id,
   index_id
  ) pc
   ON t.object_id  = pc.object_id
  AND ix.index_id  = pc.index_id
WHERE  ps.avg_fragmentation_in_percent > 10
   AND ix.name IS NOT NULL

有需要重建的索引,其重建索引語法會被列出來,複製後執行即可完成索引之維護

參考資料介紹

[1] 介紹索引重建的語法及重建時機

[2] 介紹什麼是索引,其原理,資料結構,索引類型,等等知識。 (含範例),這篇很詳細,篇末還有索引維謢的線上教學影片

參考資料

[1] The Will will Web - 讓 SQL Server 告訴你有哪些索引應該被重建或重組

[2] TechNet 台灣部落格 - 如何寫出高效能 TSQL - 關於索引不可不知道的事

2015年5月26日 星期二

MS SQL Trigger Example

MSSQL_Trigger_Demo

MS SQL Trigger Demo

使用時機

資料表異動時,想記錄異動的資料列。參考 [1] 有很棒的說明。

範例

已知 :

有一個資料表 [MyUser],你想要記錄該資料表的異動狀態,並將該異動狀態記錄在 [MyUser_Log] 資料表中

[MyUser] 資料表設計如下

CREATE TABLE [dbo].[MyUser](
    [SN] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL, 
 CONSTRAINT [PK_MyUser] PRIMARY KEY CLUSTERED 
(
    [SN] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

解題

Step 1. 建立 [MyUser_log] 資料表,記錄異動狀態,包含異動狀態又時間,設計如下

CREATE TABLE [dbo].[MyUser_Log](
    [SN] [int],
    [Name] [nvarchar](50),  
    [ST] [nvarchar](50),
    [CreatedDate] [datetime]
    )

其中,CreateDate 記錄異動的時間,ST 記錄異動狀態

Step 2. 建立 [MyUser] 資料表的 Trigger, 如下

CREATE Trigger [dbo].[MyUser_I_U_D] ON [dbo].[MyUser] AFTER UPDATE, INSERT, DELETE
AS
BEGIN
    --INSERT
    IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
    BEGIN
        Insert Into MyUser_Log Select *, N'After Inserted', getdate() From Inserted
    END   

    -- UPDATE
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
BEGIN
        Insert Into MyUser_Log Select *, N'Before Update', getdate() From deleted
        Insert Into MyUser_Log Select *, N'After Updated', getdate() From Inserted      
    END   

    --DELETE 
   IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
   BEGIN
    Insert Into MyUser_Log Select *, N'Before Deleted', getdate() From deleted
   END
END

測試

新增

--新增一筆資料
  INSERT INTO MyUser(Name)VALUES(N'J')
  SELECT * FROM MyUser_Log

修改

  --更改一筆資料
  UPDATE MyUser SET Name = N'M'
  SELECT * FROM MyUser_Log

刪除

  --刪除一筆資料
  DELETE MyUser
  SELECT * FROM MyUser_Log

參考資料介紹

[1] 說明 Trigger 用途,介紹 Trigger 運作原理,Trigger 使用範例 (資料儲存使用 XML) 及 XML 查詢方式

[2] 說明 Trigger 用途, Trigger 範例, Step by Step (圖文並茂)

[3] MSDN Trigger 語法

參考資料

[1] 軟體開發的天空-使用 Trigger 紀錄資料表的新增、修改、刪除的行為

[2] SQL Server,Trigger 的簡單範例,以「訂單的流程系統」為例

[3] MSDN-CREATE TRIGGER (Transact-SQL)

2014年10月10日 星期五

LLA 的愛情故事短篇集 3


    連禽獸都不如的人,他的心情不知道是如何?他該如何自處
"我不懂愛。但是我知道,我喜歡她,很深。當我見到她,我感覺到,我的心再也不屬於我自己,我的心屬於她。如果她想要,我會無條件奉獻給她,只希望知道她也愛我。"
"你這個…"
"白癡"
"說的沒錯"
"太童話故事了,你是古代人嗎?"
"這是瘋了的節奏,你說,你為什麼放棄治療"
……………
    在強烈的炮火攻擊下,禽獸都不如的人,只有一杯接著一杯
"我建議你呀,趕快積極的採取行動,直接表白,這樣比較快"
"是呀!雖然你很白癡,但是,我們挺你啦!"
"就是,大不了,收一收好人卡,我們陪你再喝過"
"什麼鳥,你們安靜一點,好吵" (某人睡著了~說夢話來著)
"別理阿呆,拉他進房間去睡,別讓他在這搗亂!"
"吶!哥們我,借你二本寶典,保證你手到擒來…"
"真假,我也要!"
"別,這是還在革命的同志們才有的福利,你名草有主的人,現在不行,等你失戀了再說。"
"靠!那還是算了"
    七嘴八舌之下,事情好像有了正面的思考,眼看有人倒了,終於,最後一位,悲慘的故事,展開~
"在我們分手過後,她的心就不屬於我的了。愛,情,移,轉。只是,當她說,她們只是朋友,我以為我仍有機會挽回,事實上,我沒有,然後,我成了第三者。"
"老大,你這不算吧!"
"惦惦,讓老大說~"
"就是,打什麼岔"
"我是慢慢發現的,發現她們不只是朋友。我以為我們的感情是存在的,只是她的愛情移轉了,我沒辦法想像,我從沒過這樣的經驗。我想起了,很久以前,曾經,我摯愛的人,因著很多因素,她心裡終於被第 3 者攻陷了。變了心的女朋友,就再也回不來了。"
    老大深深的吸了一口氣
"我掙扎,每天,每天,每天。每天我都在想,當初,我深思熟慮後作出的分手,是不是對的,然而,人生沒有後悔的藥可以吃,作出的決定,就不要後悔。後來,老天似乎跟我開了一個玩笑,讓我以為她仍然愛著我,等著我回頭。悲劇就發生了,就是現在這個局面。我是第 3 者。"
    老大再次深深的吸了一口氣 (唉)
"之前的分手,是因為我沒辦法信任她,我頭上有綠綠的光芒。既然,她有更好的選擇,我便主動放手。現在,我成了第 3 者,但我沒放手,卻是因為,我不想再次失去,摯愛的人。我想努力的試試看,如果,她仍有心。"
    大家,真的很安靜,都沒插嘴
"我不完美,我生氣的時候,不說話。我怕說出去的話,傷了最愛的人,我不願意,我寧可平靜思考後再說。可是,她不喜歡我這樣。在她身上,我學到了很多。伴侶,對我來說,就是相互扶持,一起成長,是一個可以把背後交給對方的生死相交的隊友。"
"我們在一起的時候,我很快樂,要分開的時候,我很難過。每天,我都不禁這樣想,那些年,第 3 者介入了我和她之間,奪走了她的心。她是個難以下決定的人,她很想分手,於是我幫她做了決定,我離開了。現在,我成了第 3 者,我該怎麼做。我想到了以前的我,我不願有第 3 者,可是我成了第 3 者,我不想做決定。"
"我把決定權交給她,她的回應讓我明白,這個壞人還是得我來當,我就是那永遠的反派角色,只是不可愛和迷人。提出分手的人,一般來說都會有很深的罪惡感,如果他曾愛過,這個罪惡感,從不存在我身上,我只有深深的痛苦,等待時間撫平我的傷痕,讓我有勇氣去追尋下一段感情,期待下一位天使會愛上我這個凡人。"
"老大,所以你現在~"
"我不再是第 3 者了,我是個陌生人。她有一手好牌,都是幸福,可是她只能選一張,而我,是被放棄的那一張。"
    幹~什麼,好 sad...........
這個結局,大家都沒想到,我們都以為,老大會獲得勝利,然而,過去的經歷,讓老大無法當那個第 3 者。
我知道,老大不願讓她難為,特別是他感覺到,她愛對方多一點的時候。
該斷不斷,反受其亂。兩個世界,只好情深,縁淺。

2014年9月11日 星期四

LLA 的愛情故事短篇集 2


    上集故事說了一半,讓我接著說下去…
喝完了一杯,再一杯,喝完了這杯,還有三杯。酒精越多,人的自制力越低,這是研究上的數據,事實上卻也是如此,傷心事如果跑馬燈,如同失韁的野馬,反覆不停的衝擊著自制的那道防線,終於潰散,傾巢而出。
"那個誰,那個誰,求婚成功,但沒落得好下場的,難過夠了,就該勇敢的走出來,下一個才是你的真命天女"
    不知道誰起頭唱起了歌…
好朋友,你麥鬱卒,查埔子是袂凍哭。若是凍袂住,就吞咧腹肚內,若想欲買醉,阮挺你夠夠。
查某人擱找就有,像你這緣投,免驚推無炮,啦~~,茫酥酥 啦~~ 茫酥酥。
    這就是 LLA 之歌,然後一段未完的傷心故事又開始了
"你喜歡的人,不喜歡你,真的是很難受,成熟的我們,知道強扭的瓜不甜,愛情不可強求。但是,那思念的感覺,要忍住,真的會讓人瘋掉,如果突然又再見到她,真的很難按耐的住。"
"怎麼回事?"
"上次大夥聚會,我見到她了,有預期,很忐忒,很期待,很害怕。然後,幾杯酒下肚,差點,就差那麼點,我就要撲上去抱住她了,好危險呀!我就想呀,這樣不行,要拿東西擋一下"
"所以,你~不會去廁所, DIY 吧!"
"下流!"
"無恥!"
"真男人!"
"我只是想抱抱她,不是要做什麼事,你們的思想,真的是~。後來,我找了個替代品抱著,就這樣,穩穩的渡過全場。這種感覺很難受,我想,和吸血鬼想吸血有異曲同工之妙,想關心她,又害怕~~。"
"怕啥!"
"直接給她親下去就好,我就是這樣 ~~ 嘿嘿"
"誰像你,禽獸!"
===================================
禽獸至少明確的表達牠的喜愛,可憐之人,連禽獸都不如