2024年3月10日 星期日

獵殺反社會

夢的一開始,我在一輛特種部隊出動的車上,全副武裝。車子正在前往目的地,說收到線報,發現了一個 sociopath(反社會人格)家庭,我們要去撲殺他們。車上應該有四個人吧我也不確定。在夢裡面,sociopath 是爸媽有小孩一定有的 100% 遺傳。毫無同情心也不會有罪惡感,看起來跟人類一樣,但是為了自身利益就會隨便殺人,智商非常高,所以會很乾淨的清理犯罪現場,連屍體都清理的很乾淨,大多沒留下什麼東西。根本抓不到。而且看起來很正常人一樣,行為也精明,非常難抓。我們 team 就是政府成立其中一個負責撲殺 sociopath 的特種部隊。

到了目的地以後,我們翹鎖,然後衝進去,看到一個老奶奶,跟一個大概國小年紀小男孩。

跟一般被攻堅的家庭不同,這兩個人異常淡定。一般他們發現被攻堅以後,就會逃跑,但這兩個人動都沒動,老奶奶還是繼續坐著看電視,小男孩則是冷靜的看著我們。因為沒有逃,所以我們就沒有像平常那樣開槍射殺。小夥伴們上前去把老奶奶痛歐到地上,上銬以後,兩個把老奶奶先抓回總部了。剩下我跟另外一個小夥伴,還有小男孩,在 sociopath 的巢穴埋伏,等待祖孫三代的中間那一代回來,因為顯然爸爸或是媽媽應該是去上班了。留下了奶奶跟小孩在家裡。

等待的時候,我跟小夥伴就在觀察他們家,看起來跟一般的巢穴很類似,就是跟普通人的家庭根本沒兩樣。這也是過往我心裡一直有點疑惑,就是 sociopath 真的跟我們不一樣嗎?我知道他們不一樣,但有害嗎?我們沒有見過他們殺人,而且以前我們獵殺他們的時候,他們的反應也跟正常人一樣,會驚慌失措、會害怕,求我們別殺他們,哭喊著說他們不是 sociopath 只是正常人,叫我們別開槍(但我們當然還是會突突突突的把他們通通射死,畢竟 sociopath 雖然沒有感情不會害怕,但他們很會裝)這個房子看起來也就像是普通人的房子。唯一不正常的,就是今天的老奶奶跟小男孩,太冷靜了。

因為距離一般人的下班時間還很久,所以我們就審訊小男孩,跟在房子裡搜查,東看看西看看看看能不能發現什麼東西,跟我一起留下來的小夥伴,也是跟我感情最好的同事,他很強,搜查很順利,他一下就找到了一本奇怪的通訊錄,感覺可能是其他 sociopath 的聯絡方法。我們打算事情結束以後帶回總部。搜查完以後我們就開始審訊小男孩,但他幾乎什麼都不說。因為反正他最後一定會死,所以我們都很不介意用毆打跟恐嚇的方法讓他開口,他嘴也沒這麼硬,就是真的我們快要開槍殺他的時候,他就會透漏一些訊息給我們。

在等待的這幾個小時當中,我越來越有一種違和感。這個小孩對我們的行為準則太熟了,他知道自己再不開口就會死,也知道開口給我們資訊就可以換時間。特別是這點讓超級疑惑。還有那個小男孩看我跟看我小夥伴的眼神有點不一樣,他看我有敵意,他看我小夥伴就沒有敵意。

我想著想著,想到我的小夥伴感覺對這棟屋子也太熟了,廁所跟水在哪裡都知道,又想到為什麼我們一進屋子的時候,老奶奶跟小孩這麼淡定,他們顯然知道我們是幹嘛的也知道不要逃跑就不會開槍……不會吧……我慢慢往右轉頭,看著我的小夥伴,發現小夥伴也看著我,整個夢最恐怖的就是接下來的幾秒之間,我心裡想「他在觀察我,我現在是什麼眼神?我裝不知道的話是不是就沒事了,他在看我,幹我好害怕,幹我好害怕,我好害怕我好害怕完了我現在害怕一定寫在臉上了幹他的眼神變了幹他已經發現我發現了我現在假裝沒發現還來得及嗎怎麼辦怎麼辦已經來不及了就算我現在假裝沒事表情的變化本身就是一種透漏我發現了」

小夥伴露出跟往常一樣親切的微笑,說「我真心希望你沒發現,只能怪你太聰明了」

2024年3月9日 星期六

隔壁考古系

 奇群一夥人不知道為啥在一個巨大的校園。雖然是高中,但整個腹地是大學規模,甚至還佔據一整片山頭的那種。校園大到,後山還有古文明遺跡。學校的考古系就在那邊挖,我也不知道為什麼高中會有考古系,反正夢境裡面大家都是高中生,但是學制像是大學。學校還有自己的軍隊。不是那種大頭兵部隊,而是特種部隊那種。軍隊的工作之一就是防止盜墓者。

我們不是考古系的,我們是什麼人工智慧系的,說是學生,但平常做的事情根本就是新創開發東西。然後考古系在我們同棟大樓隔壁。大樓類似 L 形,所以我們可以透過窗戶看到考古系,考古系也可以看到我們,然後平常我們也會透過窗戶在那邊互嘴,就很歡樂這樣。

然後學校從遙遠的深山原始森林裡,連馬路都沒有的那一種,整個都像是熱帶雨林,挖到了古墓,把裡面的一個遺體搬到了考古系,由考古系跟軍隊護送,搬回了考古系,清理研究。這次他們挖到東西,我們也有去看,服裝看起來有點像是中國古代形式的,就覺得幹好酷,我們還在那邊說「乾該不會屍變吧哈哈哈」。

然後我們就回自己系上,到了晚上大家還在加班(?),然後隔壁系也有一些人在加班,包含特種部隊也有人在值班,因為怕有人來偷遺體,考古系的東西都還蠻有價值的,所以他們如果系上有東西的時候,特種部隊都會常駐。我們就在這邊看著斜外面燈也亮著感覺就有人陪,不孤單大家就工作到很晚。然後中場休息的時候,我們又一如往常的,隔著窗戶在那邊互嘴,我們這邊幾個人,他們那邊幾個人,都趴在窗戶邊對著外面,然後突然我們看到他們後面有個人影。因為有點距離,又有點被窗戶第一排的人遮住,看不是很清楚,但看起來不像是我們認識的考古系的同學。只看到他往窗邊走。移動的方式很詭異,不像是走路,也不是跳,也不是飄,而是帶著一種笨重感的平移,還伴隨著一些抽動跟振動。就像是履帶有問題的坦克。然後那個人影移動到窗戶邊一個人後面,那個人就突然被往後抓,一聲都來不及出,然後被咬死了。其他人都還沒發現。

但我們這邊看得很清楚,很清楚,但因為畫面太意外了,我們還在想「啥?」然後又一個人被咬死了,我們就開始大喊,也不知道要喊什麼,因為想不出合適的詞語,要精簡說明整個狀況太難了「你們帶回來的屍體變成殭屍了已經咬死了兩個人阿就在你們後面你們快點逃阿」這樣根本太慢了,結果變成只能尖叫跟指著他們身後,他們終於轉頭了,然後看得出來,他們也傻了。這個時候我們已經聽到槍聲了,感覺是特種部隊的人開槍了。但看起來沒有什麼用。過沒多久,那邊的人就全死光了。

然後殭屍就站在窗戶邊看著我們。一動也不動。乾那個眼睛好恐怖。根本不是人。

我們真的嚇爛了。當時我們真的超害怕他從窗戶直接跳過來的。我們也不敢動,我們怕一動,刺激到它,它就跳過來。然後等了很久,它就往門口的方向移動,因為太害怕了,我們就盯著它看,看了幾秒才反應過來,幹!!!它門打開,走廊過來就是我們辦公室了,我們估計等我們跑到門口,其實它也應該到門口了。感覺就是跑不掉了。它如果真的是跳過來,我們還可以往走廊跑,但它從走廊過來,我們就只能往窗戶跳了,幹幹幹幹幹!是有機會可以跳到考古系,但只有最接近角落的那個窗戶跟對面夠近,絕對不夠時間所有人都逃命,太害怕了,就嚇醒了。

2022年3月14日 星期一

Ethen 的心理史學

 昨天做了一個怪夢。

夢裡面 ethen 不知為啥搬到我家樓下二樓住。然後因為已經財務自由,所以也不用工作了,每天躲在家裡不知道在幹嘛。除了 Under Eats 以外基本沒有什麼外界交流。有時候我會去樓下看看阿喵喇喇賽之類的。突然有一天 ethen 衝上來找我,披頭散髮的,跟我說「我在心理史學上獲得了突破性的進展,這可以改變人類的歷史……哈里謝頓說,一個人類個體的行為不可預測,但是一整群人類的行為,就像氣體分子動力論描述的氣體一樣,是高度可預測的。但事實上『一個人類,一個氣體分子,一群人類,一群氣體分子』這個類比不完全正確,因為單一一個人類不太可預測,但是單一一顆氣體分子的行為是高度可預測的。」我:「喔幹!一顆氣體分子可預測,一大群氣體分子也可以預測,真正不可預測的,是半多不少,中規模尺度氣體分子啊!因為他是一個複雜系統,在秩序跟混沌的邊緣!」「對!所以,一個人類個體,其實不能被類比到一顆氣體分子,而是一群中尺度的氣體分子,因為人類本來就是一個複雜系統,行為也不像氣體分子這麼單純。如果一個人就是一團中尺度氣體分子,這代表⋯⋯」「這代表⋯⋯天哪」「對,我可以大幅降低可預測群體的人數理論下限。」後來 ethen 又龜回二樓去了。繼續深居簡出,接下來兩個月的時間,我完全沒有任何 ethen 的消息,彷彿他消失了一樣。然後科學界出了一條大新聞「中尺度人群的可預測性」的論文被匿名發布了,所有人都在討論,說這是繼哈里謝頓之後最偉大的突破,人類的歷史將會被改寫之類的。大家都在找這個人是誰。我知道 ethen 把他的發現寫成論文了。然後 ethen 突然傳訊息給我,說明天金曲獎頒獎,他要邀請朋友一起來家裡看金曲獎頒獎,可能會很吵,不如我也下樓去一起看吧,一起吵就不會被吵了。隔天傍晚開始就一堆人進入我家這棟,我時間快到之前也下樓去了,不知道為啥我家的房子變超大,十幾坪的房子進去以後竟然是一個類似兩廳音樂會的現場,一個階梯大會場,也太多人了,大概 800 1000 人之類的吧,幾乎所有的人我都不認識 = =|| 台上還有很多人正在玩著樂器,感覺是 ethen 的音樂好朋友,我看這根本不是看金曲獎,是金曲獎本身吧,然後時間快要到之前,有個類似主持人的,我猜也是 ethen 朋友,就說「現在要請主人 ethen 上台講話」,大家就「喔喔喔喔」但是結果 ethen 沒有上台,整個家裡不管怎麼找,都找不到 ethen。但是在一個地方的地上看到一大灘血跡,還有很多凌亂的痕跡,感覺是有什麼爭執發生,後來警察來了,現場 800 多個人裡面還有人是偵探的,總之最後結論是「這個失血量,人絕對死了」,最後 DNA 驗出來這些血也是 ethen 的,但是因為沒有找到屍體,總之法律上以失蹤為結論,但事實上大家都認為 ethen 死了。我就把阿喵帶回家養了,還好現在我都整天在家,可以照顧阿喵。結果過了一陣子我在家裡餵貓的時候,ethen 突然出現,我「:ppp: 哪齣」「政府要抓我,我只好詐死 XD」「為啥要抓你?」「中尺度人群可預測,就代表中尺度人群可操弄,包含軍隊,企業,選民,都在這個規模,影響太大」「那天金曲獎是怎回事?」「800 個人是達成相信我已死的理論下限,再少就沒有足夠的群體動力讓你們互相從眾相信我真的死了,如果只有兩個人,那當中只要有一個人懷疑我裝死,那就是 50% 的人懷疑我裝死,但 800 個人的話,開根號以後只要不到 30 個人懷疑,我就很安全,那份名單我是挑過的,沒這麼多聰明人 XD」「我也沒懷疑 :ppp: 」「但你看到我的時候也沒多驚訝」「那接下來?」「不知道,還沒想到,先躲在你家過日子,以後再說」後來就醒了

2020年1月21日 星期二

臨摹

夢的一開始,忘記為啥了,反正是在一個圖書館,好像是參加什麼活動,幫忙整理館藏。

照著索引,把很多東西放到該放的地方,那個圖書館,除了書,還有很多書以外的東西,一些藝品之類的。

然後還有辦展,辦藝文活動。那天我們幫忙整理完館藏以後,就去參加活動,其中一個活動好像是畫圖,臨摹之類的。但是我們沒有畫畫的道具。然後我記得整理館藏的時候,有看到畫畫道具。

那個是可以借來用的,我就去拿來用,那個畫畫道具,是放在一本書裡面,那本書很特別,他雖然叫做書,但是每一頁間隔都很大,裡面夾了很多東西。有一些腰帶之類的設計,可以把很多小東西掛附在書頁裡面。

所以那本書也沒有幾頁,每一頁,就是一個藝術家的作品,還有很多小東西,實體的,像是我要借的那一頁,就是有那個畫家的水彩跟筆,還有很多他的小雜物,書頁也貼了一些他的畫,都是那種開開心心很夢幻的東西。

都有用一些很俏皮的字,寫著一些很快樂的語句,比方說在雨中跳舞阿之類的。

我借了畫筆跟水彩,畫完了以後,就要把東西拿去夾回去,然後想說,那我也來臨磨一下他的作品好了,所以我就開始畫,畫的過程,我感覺自己非常投入,我臨摹的成果幾乎一模一樣,我都覺得很不可思議,自己竟然畫的這麼好。我感覺我完全走入那些畫的心境裡面去了。我感覺此時此刻,我跟那個畫家同調了,我感覺她的靈魂就在我身上,我們兩個這個時候一定有著同樣的感覺。我似乎能感受到她在想什麼,聽到什麼,看到什麼。彷彿我就是她

那是一個靈魂的高度同步…

然後突然我看到了好多東西,在她的畫裡面,有很多東西,是乍看看不到的,非要是她自己,才能看到。

然後這個時候,我發現,她的畫,都是看起來很開心,但是其實會在某個小小的角落,有一個小小細解,藏著一個隱喻,一旦看懂那個隱喻,整個畫頓時會有完全不同的解讀。

每幅畫都是一個巨大悲傷。一切都是這麼的沈重跟悲傷。然後因為我就是她,那瞬間我突然被巨大的悲傷包住。

然後那書頁裡,除了畫具,還有各種雜物,其中一個,是一個那種晶片鎖,就是碰到門感應會開的那種。

上面有著手寫的超可愛字體,寫著「跳~就沒事了~」

因為感覺很可愛,我就大聲的念出來~跳~就沒事了!

突然感覺到好開心。

圖書館裡面,周圍的人聽到了,也跟著我一起喊「跳,就沒事了~」突然一切都好開心,我感覺自己被這個小東西深深的感染了情緒~

然後我就在想「為什麼晶片鑰匙會在這邊阿?她怎麼不用了?是用不到了嗎?她為什麼用不到了???」

然後我看懂了。

然後因為高度的同步化,我突然被 100% 的絕望感吞噬。看著門口外面的走廊,是在高樓的走廊,牆很矮,一下就可以跨過去,我只要……跳,就沒事了。

就在那瞬間,我嚇死了,因為,我就是她,我的心境已經完全跟她一樣,我一定會自殺,我一定會自殺,我一定會自殺,我一定會自殺,我真心的相信我一定會自殺。我全身麻痺,我感覺到我的心臟嚇到麻痺了。我嚇到不能動,躺在地上,我聽到周圍的人在叫我。可是聲音越來越遠。我慢慢感覺不到他們了,我對外界的感官封閉了,我沉到了自己的世界裡面。

在我的世界裡面,我躺在一張床上,依然全身麻痺,不能動。

是我的床,在永和的床,我醒了。

全身麻痺,一個夢境到現實的無縫接軌,然後夢中對於生命的放棄跟絕望感,也無縫接軌的留了下來……

媽的是禮拜天早上,我從來沒有「煮飯好累我不要去」可是那天,我真的不想去,我不知道我為什麼要去上煮飯課。

生命到底要幹嘛?我也不知道我潛水要幹嘛?

那天之後到現在,我從一個什麼都想嘗試的人,突然被抓進自殺畫家的自我裡面……

2019年6月28日 星期五

廟裡打坐的和尚

忘了是跟誰,但總之不是我自己一個人。到了一個類似寺廟的地方。應該是去玩吧,類似體驗寺廟生活,像是要打坐之類的,除了我們,還有很多其他人。寺廟晚上能讓人寄宿來著。不過有的人晚上並不在睡房睡覺,可以選擇在大殿打坐。

其實應該說,有很多人選擇在大殿打坐。人數很多很多,大殿挑高可能有十米,然後牆面從低到高被設計成像是書櫃一樣的一層一層的,有十多層,每一層大概都是一個人盤腿以後可以坐在裡面的高度。然後,大殿的牆壁其實是被坐滿的,也就是說有滿滿四面牆的人在那邊打坐。白天的時候,有一些人會下來,會有空位,但到了晚上,一定會被坐滿,可是白天也不是所有人都會下來,會覺得「是不是有人一直都坐在上面阿?」裡面大部分的人都已經剃髮了。

半夜睡到一半,醒了,覺得是有什麼聲音,跟尿意混合在一起,讓我醒了。於是起來去廁所。要回房間的時候,聽到大殿傳來類似有人講話的聲音。便走了過去。到了大殿門外,便透過微微搖曳的燭光,看到牆上滿滿的人,微微搖曳的燭光,映著幾百個人沒有表情的臉。

我聽到哭聲,還有人說話的聲音「快把他換掉,不然他就吵醒別人了」從右邊傳來。

於是我稍微走進去,轉頭往右邊說話的聲音看去,是從旁邊那處,有兩個寺廟的工作人員正圍著一個打坐的人,其中一個人只是站在旁邊看,但另外一個工作人員的姿勢很怪,他背著我,兩手抓著那打坐的人的肩膀,遮住了打坐的人的身體,工作人員的頭,在打坐的人的頭的位置,並不是靠著,而是重疊,就像是那人已經沒有頭了,而工作人員正在啃食他。

時間不夠我看清楚,才不到一秒,左邊傳來聲音「你醒啦?」我往左邊一看,是住持,這邊的住持非常年輕,是個十多歲的小孩,住持站在大殿門口的位置,距離我大約十公尺,穩穩的站著。我嚇了一跳,又往右邊看去,發現那打坐的人已經坐在本來的位置上,但是卻只剩下站著的那一個工作人員了,本來抓著打作人的那個不見了……不對,那個打坐的人,怎麼這麼像那個工作人員?「他被吃了?被換掉了?」的念頭瞬間在我腦海浮現。我再往左邊看去,住持還是穩穩的站著,但距離我只剩下五公尺。「他正在靠近我……」我往右邊看,看到本來站著的那個工作人員也還是穩穩的站著,但是也距離我更進了「他要抓我……」

我不再往左邊看了,立刻轉身就跑。

「他跑了!」

幹!這間寺廟會吃人!他們會把來這邊參訪的人吃掉,然後替換掉,然後坐在大殿的牆壁上,靠,那些裡面很多都已經不是人了!都是妖怪!幹,殺小!

我聽到後面來拼拼砰砰的聲音,很多人從高處往下跳,落地的聲音。我一轉頭,看到一狗票臉上沒表情的人,穿著袈裟,落地,在搖曳的燭光中向著我跑過來。跑,我跑。我往寺廟後面睡房的方向跑,然後把朋友們叫起來,大家在混亂中亂成一片,最後只有幾個人跟到了我。我一直跑,跑到寺廟後方有很多小建物,大多是寺廟用來當倉庫堆東西的,找了一間,跟我的朋友鑽了進去。只剩下一個朋友了,嗚嗚,其他的都已經被抓走了

進去以後,是一個很奇怪的小房間,這個小房間的牆壁超級多,根本就是一個超小迷宮,由牆壁構成的超小迷宮,走到都很窄很窄,只能一個人走,牆壁就摩擦到肩膀,我只好拉著朋友在這個迷宮裡面鑽,鑽著鑽著,我突然覺得「靠,我認得這個地方,這個地方的盡頭,會有一個往下的密道」。我聽到外面好多的聲音,那些妖怪正在搜捕我們。阿,我聽到門打開的聲音,他們進來了,就要抓到我們了!我拉著朋友趕快往彎彎曲曲的道路裡面走,走到最後,路變個更窄,已經無法正面通過了,只能側著身體硬擠進去一個窄縫,然後縫的最近頭,的地上,有一個小洞。

那些妖怪和尚已經追來了,他們因為都沒吃飯,臉都很瘦,身體也很瘦,在狹窄的空間裡面移動的比我們還要快,一下就追到我們了。

我們很艱難的鑽了進去小洞,然後我就放心了,因為我知道(我也不知道我是怎麼知道的但我就是知道)這邊進來以後,會進入一個空間,這個空間是有神在顧的,進去以後,是一個四面牆壁都亮著白光的廣大空間,果然看到一個人,他說「你們在逃命,我都知道了,不用擔心,這是我的地方,他們進不來的。」可是這個房間沒有出口,我問神們能去哪裡,神仙沒有理我。他的意思是我的格不夠,所以他沒有要回答我這個問題。

我跟我朋友說「只剩下你了嗎?我們怎麼辦?」神看到我朋友以後,打量了一下,突然整個人變得很恭敬,對我朋友說「你有神格。你本來就是神,而且自己跑去當人,為了作善事。你修了很多業,累積的陰德本來這世是要當神的,但你自己立願要再當一世人來助人」

神說完以後,有一塊地板浮了起來,是個隱藏在地下的電梯,門打開了,神叫我們兩個進去,神跟我說「你本來是沒格進去的,你是好人,但還差一點點,托你朋友的福,你才能進去,因為他就是來助人的」

電梯向下。

這是一個玻璃電梯,可以看到外面的那種,可是我們的周圍一直都是岩石,黑黑的。下了不知道多久,幾個小時吧。還在下,我覺得我應該是要到地獄去了。這段時間就跟朋友聊天,也不知道能幹麻,然後想說我是不是我要去地獄了。唉。

突然四周出現了光亮!是天空!我們從一個奇怪的浮在天上的石頭的底部往下冒出來了,是白天,是天空!好亮阿!電梯向下,我們在空中一直向下,最後電梯終於落地了,是在一個公園,我認出來,是大安森林公園。天那,我們終於回到文明世界了……

朋友說她要走了,她說她好像有點想起來自己是誰了,她要去作她想做的事情了。於是我在大安森林公園,看著熙來攘往的人群臉上洋溢著幸福的笑容,覺得這場景好不現實阿。

2019年2月26日 星期二

一個奇怪的夢

夢的開頭是,我醒了,在一個周圍都是樹的有庭院的日式房子裡面。全身是傷,有個女生在照顧我的傷勢,我不知道自己為什麼會搞成這樣,什麼記憶都沒有。每天因為全身都痛,也不能動,我就是躺在地板上看著周圍的樹木,隨著風搖動。那個女生話不多,她白天都要去旁邊的田裡面工作,所以除了照顧我以外幾乎都在忙,要砍柴,要種田,要維修房子,因為是木頭的其實很需要修理。夢裡面我是話很少的人,她話也很少,我們都很少講話。

周圍似乎都沒有別的人家,就她自己一個人住在這裡,不知道為什麼。也不知道被照顧了多久,後來身體能動了。我沒地方去,因為我什麼記憶都沒有了,從哪裡來的也不知道。就幫她一起下田、作家事、砍柴、修房子,還有一個我有幫助的,就是我很擅長沒有聲息的移動,所以打獵很成功,以前她很難吃到的肉,現在也都有的吃了。我體格很好,這些事情我作起來超拿手的。

就一起生活,她話不多,也很少講自己的事情,我也沒有問,我只是覺得生活就是這樣一天一天,好像也很好。就這麼過了不知道多久,也許是幾個月,感覺習慣了,這就是我的人生了。雖然不知道我本來是怎樣的人過怎樣的人生,但現在的人生很好,很幸福。我們兩個每天都過得很開心,她也很常笑,我也是。

有一天晚上睡覺睡一半,我頭好痛好痛,越痛越來有很多奇怪的畫面閃過眼前,好痛好痛好痛!阿阿阿阿好痛好痛好痛!我好像想到很多東西,我好像想起來發生什麼事了……

我是一個組織的殺手,類似忍者之類的東西,因為背叛組織,所以被追殺。我逃了好久,但是最後還是被派出來追殺我的殺手們找到了。在被追殺的過程,我把來追殺我的那一票殺手全部幹掉了,但是自己也受了重傷。最後在樹林裡面逃啊逃,逃到這棟房子以後氣力也放盡,一放鬆就昏過去了。(怪不得我體格這麼好,種田劈柴幹嘛的都超順手 XD)

醒過來了 @@ 看著天花板,所有的事情都想起來了。完了,根據我對組織的了解,他們不可能放過我,那些人全部被我幹掉了,他們沒有回去回報任務成功,組織一定會再派出人來找我。找到我只是時間的問…

我聽到了…周圍的樹林裡面有人…天花板上也有人…他們已經找到我了…他們正在慢慢靠近,有很多人,很多人……如果她現在醒過來,她一定會死,如果我留在這邊,她一定會死…我沒有辦法跟她說再見了……

我沒有聲息的起來,小心的看著她的臉,確定她沒有被我吵醒。我聽得很清楚,他們正在慢慢的靠近,我穿好衣服,拿起受傷時落在身邊的刀現在被收好的刀,跑進周圍的樹林,一直往前跑,一直往前跑,離房子越遠越好。我聽到後面有好多聲音跟來了……那我就放心了……

2017年7月12日 星期三

Boost.Python 小記

建構子

沒有建構子的 class 要在宣告 mapping 的時候給建構子的 prototype

std::vector<>

跟 python 對接的陣列,要用  boost::python::list 

Overloading function

使用「明確轉型」來指定特定的 overloading 版本

import_array()

使用 numpy 要  import_array()  ,不然執行期用  PyArray_SimpleNewFromData()  建立陣列的時候會 segmentation fault。特別注意的是  import_array()  其實是一個陣列,他會去初始化一個 static variable 叫做  PyArray_APIPyArray_API  是一個 compile unit static variable,所以每一個 .cpp 檔自己都要  import_array() ,但重複 import 又會錯,所以呼叫前要先檢查  PyArray_API  這個變數是否已經被設定。

if (PyArray_API == NULL) {
    import_array();
}


2017年6月28日 星期三

tf.slim deploy trained model

用 tf.slim train 好了 model 以後,要拿來做 inference 才發現腦袋不大清楚不知道怎麼弄,查了一下,看到這邊,原來 tensorflow 本身就有提供 freeze 的工具,slim 也有 script 讓使用者可以方便的 export model。

照著註解裡面步驟做就可以了,兩步,橫簡單,連我都會。

昨天浪費了我幾個小時在那邊摸索,真的很笨。不知道昨天為什麼突然忘記「開始動手做之前先看看別人怎麼做」我的天哪...

[0] https://github.com/tensorflow/models/blob/master/slim/export_inference_graph.py

2017年6月22日 星期四

TF.slim 吃自訂格式的 data

Tensorflow.slim 預設是吃他 TFRecord。但我的圖很多,我不想全部轉成 TFRecord,這樣會吃掉很多硬碟,我想要保留 .jpg 的檔案在硬碟裡,然後有一個文字檔,裡面描述了哪些檔案有哪些 label。

0.jpg -1:* 1:0,7  
1.jpg -1:* 1:1,2,4...

表示 0.jpg 這張圖,有第 0 個 label 跟第 7 個 label。這兩個 label 是 1,其他都是 0。然後 1.jpg 這張圖,有第 1 第 2 第 4 個 label,其他都沒有。至於總共有多少 label,在描述 dataset 的 .py 檔會有寫。

slim 有自己的 reader class,有做了 parallel reader,對於需要大量訓練的時候可以加快 read data 的時間,但是 reader 讀進來之後,decoder 卻只有一個人。如果 decoding 需要很多時間,那這邊就會有問題。為了繞過這個問題,我決定把 reader 跟 decoder 合併在一起。

我根據 slim 的 parallel_reader.py 加了一個 parallel_reader_decoder.py,multi-thread 在讀取檔案以後,同時就會去 decode,之後才放進一個 common queue 讓之後的 node 取用。

這邊註記幾點:
  1. 寫 decoder 的時候,真的要注意效能問題,本來我用很 python 的方法在處理 numpy 陣列,後來發現效能慘不忍睹,改用 numpy style 以後 performance 快了幾百倍。
  2. tf.py_func() 就很好用,不一定要用 C++ 去寫 Op,當然如果真的需要就不要偷懶。
  3. tf.losses 會幫忙把 loss 登錄到 GraphKey.LOSSES,之後會有人去取用,所以不要覺得好奇怪為什麼這個 loss 都沒有人用到
  4. 記得把 slim 的 preprocessing thread 的數量也開到對,不然你會發現 reading 夠快,decoding 夠快,GPU 的 forward computation 跟 backward propagation 也夠快,但是 throughput 就是有夠低。最後發現是死在 preprocessing thread 數量太少。這個數值跟你的 model 所需要的 preprocessing 複雜度有關。mnist 的 preprocessing 很簡單,一個說不定就夠了,inception 可能要 4(或 8?)。
  5. slim 裡面有幾個 queue,queue capacity 記得要改到夠大,pop 以後的 min-size 也要調整(小),不然你會發現他一批一批的做,比方說你 queue capacity 是 16,min-size 卻是 8,但是你有 8 個 clone,這樣他一次要吃掉 8 個,吃完以後這個 queue 的 producer 才會做事,很不方便。這樣這個 queue 等於沒有 buffering 的效果。
    1. Filename Queue (after enumerate files)
    2. Parallel Reading Queue (after read)
    3. Prefetch Queue (after preprocessing)
    4. Batch Queue (after batch packing)
  6. 開太多 preprocessor 的話,tensorboard 秀 graph 會 gg =_=||
  7. sigmoid_cross_entropy 不要亂餵,他的值域就是 0 ~ 1,雖然我自己的 multi-label 標注方法是 1 positive, -1 negative, 0 don't care,但計算的時候,不要去把 logit 轉換到 -1 ~ 1,而是要把 label 從 -1 ~ 1 轉換成 0 ~ 1(但是 label 真的是 0 的時候,要記得 don't care)用tf.abs 跟 tf.maximum 可以做到。不難。
腦子不管用了,剩下的等想到再寫

2017年6月18日 星期日

tensorflow 自訂 operator

考慮開發速度的話,先使用  tf.py_func  [0]
如果遇到限制,或是考慮執行效能的話,再去看 Adding a New Op [1]

雖說 [1] 比 [0] 麻煩,但其實也相當簡單,不用害怕,進去看著照做就可以了,半個小時的事情

[0] https://www.tensorflow.org/api_docs/python/tf/py_func
[1] https://www.tensorflow.org/extend/adding_an_op

2017年5月31日 星期三

undefined symbol: _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringB5cxx11Ev

解法

編譯的時候加上  -D_GLIBCXX_USE_CXX11_ABI=0  [0]

說明

gcc 5.3 以後導入了新的 ABI,如果你去 link 一個用 5.3 之前的版本編譯的 library,用的還是舊的 ABI,這個時候就會發生錯誤 [1]

參考

[0] https://github.com/tensorflow/tensorflow/issues/1569#issuecomment-200021340
[1] https://stackoverflow.com/questions/34970607/g-new-abi-problems

2017年4月6日 星期四

mysql utf8

原來要 mysql 支援 utf8 不是這麼預設的,好煩 = =||

好吧,歷史因素,可以體諒。

首先看這邊[1]看看怎麼設定(或是變更現有的 database)mysql 支援 unicode

看就好,先不要動手!

注意你要的 collate 是啥。「collate」指的是 DB 用來比對字串的時候所使用的準則,utf8mb4 預設的 collate 是「utf8mb4_general_ci」,這個很有可能不是你要的,因為他會把「ç」跟「c」當作同一個字元,你需要的可能是「utf8mb4_bin」。

然後如果你用的是 docker,不用去寫 my.cnf,run image 的時候直接下命令[2]。

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

好,如果你不是用 docker,那現在你可以動手了。去 alter 你的 DB 跟寫你的 my.cnf。
用 docker 的人只要 alter DB 就好,然後 run image 的時候用下指令的。

Note: MySQL 的 utf8 charset 不是真的 utf8,他只支援到 unicode 的一個子集,最多三個 byte。到了 5.5.忘了 版之後才有 utf8mb4 charset 支援整個 unicode codepoint。

[1] https://mathiasbynens.be/notes/mysql-utf8mb4
[2] https://hub.docker.com/_/mysql/

mysql -h localhost 失敗

一直無法使用
mysql -h localhost -P 3306 -u root -pkerker
連線到我 local 的 mysql server,氣死我老百姓,錯誤訊息:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
結果最後發現是要用
mysql -h 127.0.0.1 -P 3306 -u root -pkerker
原來 127.0.0.1 跟 localhost 還是不一樣的 XD

reference
[1] http://stackoverflow.com/questions/9714899/php-mysql-difference-between-127-0-0-1-and-localhost
[2] https://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html

2016年9月13日 星期二

YouCompleteMe in MSYS2 on Windows

Table of Content

To use YouCompleteMe in an MSYS shell, you will need to:
  1. Install MSYS2
  2. Install CMake
  3. build libclang
  4. Install YCM (and vundle, of course)
  5. Bulid YCM

Install MSYS2

reference https://www.youtube.com/watch?v=pb6Yb819pF0
  1. Download MSYS2 64bit version is better
  2. Execute the installer binary, install MSYS2 to  C:\msys64 
  3. Run a MSYS2 shell, execute  update-core 
  4. Close the MSYS2 shell window
  5. Run a MINGW64 shell
  6. Execute  pacman -Su 
  7. Close the MINGW64 shell window
  8. Run a MINGW64 shell
  9. Execute  pacman -Su  AGAIN
  10. Execute  pacman --needed -S git mingw-w64-x86_64-gcc base-devel  install compiler tool chain
Check following:
  1. vim  :echo has('python')  it should be 1
  2.  gcc -v 
  3.  make -v 
  4.  cmake  should NOT installed, if installed, REMOVE it. Because we don't want MINGW's cmake, but Windows'. Only Windows version can generate "MSYS Makefiles" format, which is what we need.

Install CMake

  1. Download from here, download the Windows 64 bit version
  2. Install to  C:\CMake 

Build libclang

reference
http://clang.llvm.org/get_started.html
https://github.com/rust-lang/rust/issues/34489

  1. Get LLVM and Clang source. We don't clone the whole repo, just download the tar file. It's much faster.
    1.  wget http://llvm.org/releases/3.9.0/llvm-3.9.0.src.tar.xz -O llvm.tar.xz 
    2.  wget http://llvm.org/releases/3.9.0/cfe-3.9.0.src.tar.xz -O clang.tar.xz 
    3.  tar xvfJ llvm.tar.xz 
    4.  tar xvfj clang.tar.xz 
    5.  mv clang llvm/tools 
  2. Use CMake to generate make file.
    1. Before run cmake, you need to apply some modification:
      1. Use Windows version python, not MSYS's python, to generate correct source path.  vi llvm/CMakeLists.txt  replace  COMMAND ${PYTHON_EXECUTABLE} ${LLVMBUILDTOOL}  with  COMMAND C:/Python27/python.exe ${LLVMBUILDTOOL} 
      2. Add CXX flag  --Wa,-mbig-obj  otherwise the output .obj file will be too large.
      3. Add LINK flag  -L/usr/lib 
    2. Generate the make file.
      1.  mkdir build-llvm 
      2.  cd build-llvm 
      3.  /c/CMake/bin/cmake.exe -G "MSYS Makefiles" ../llvm 
    3. Make it
      1.  make 
    4. FAIL. Build fail at last step link the result file liblibclang.dll, the error message is ld.exe: cannot find -ldl but I did not pass -ldl to the linker, and I don't know how to remove it. according to http://discourse.chaiscript.com/t/basic-question-about-compiling-chaiscript-with-mingw-g/170 "dl is only needed in unix". so why my toolchain try to link it? after more search, maybe add a -L/usr/lib can fix that problem. That is weird the toolchain didn't add it at default.

To Be Continue




2016年4月20日 星期三

Universal Windows Platform XAML 自訂 Button Style

最近在寫 Windows 程式,我想要在 XAML 裡面設定 Button 滑鼠移上去,也就是 hover 的時候的顏色。CSS 當然簡單啦,直接可以設定 hover 的樣式。但 XAML 就花了我一點功夫才弄懂。

首先 XAML 也是有 Style 的。就叫做 Style(對我專講廢話)。XAML 所預設提供的每一個 Control 都已經有配上 Style。所以如果要改變 hover 的顏色,需要 override 掉他預設的 Style。以下介紹怎麼 override 掉一個 Button 預設的 Style。

首先,先來看看一顆 Button 平常的樣子(左邊),跟滑鼠移上去的樣子(右邊),右邊有個深灰色的框框。


假設我不喜歡那個框框,我希望背景變色,然後字也變色,那我們就要去修這個 Button 的 Style。

開始,首先,每個 Control 都有所謂的 template,Style 是決定在這個 template 裡面。所以我們其實要編輯的是這個 Button 的 template。現在,讓我們在 Visual Studio 裡面,拉出一個 Button 放到 design 視窗裡面。


接著在 Button 上按滑鼠右鍵,選「編輯範本」→「編輯副本」


範本就是 template,那編輯副本(edit copy...)是什麼意思呢?因為其實 Button 本身已經有一個預設的 template,那一個預設的 template 是我們動不了的,所以我們要從那個 template copy 一份出來編輯。你可以看到「編輯目前項目」這個選項是 disabled 的,表示我們無法直接編輯這個 Button 目前所套用的那個 template。「建立空白」則是說我們想要從頭建立一個 template,但我們不想,太麻煩了,我們想要從現有的這個改。


現在你有幾個選項可以選,上面那個「全部套用」我不知道是啥意思,我很無知。但我知道取個名字是什麼意思 XD 我來取個鳥名字叫做「ChangeColorButtonStyle」。下面那個選項「定義於」比較簡單,因為 template 也是用 XAML 描述的,所以他其實就是問你要把這個範本存在哪邊。


  1. 應用程式(App)的話,就是整個 App 到處都可以使用到這個 template,應該是會放在 App.xaml 裡面
  2. 此文件,那就是存在你目前編輯的這個 XAML 檔裡面,你還可以選擇你要放在哪裡,是要放在整個 Page 裡面,還是你只想要放在這個 Button 裡面。如果你放在這個 Page 裡面,那只要在這一頁裡面,其他的 Button 也都可以使用這個 Style。如果放在 Button 裡面,就只有這個 Button 可以使用了,假設你有好幾種 Style 想要讓這個 Button 自己切換,且別人都用不到這些 Style,就可以使用這個選項。
  3. 資源字典(Resource Dictionary)是 XAML 裡面用來管理 Resource 集合的容器,因為我目前沒有自訂任何 Resource Dictionary,所以他也不讓我選,算了,哼哼。


以這個範例來說,因為我只有一個 Page,我就放在 Page 吧。按下「確定」


可以看到我的 XAML 檔從本來的


變成


太 awesome 了。看不懂,沒關係,不重要,重點就是上面那一整駝,就是他生出來的用來描述 Style 的 XAML。然後他也幫你把 Button 指定的 Style。看到沒有,名字一樣。


所以接下來,我們只要編輯上面那個 XAML 就可以了……昏倒……那真不是人幹的,所以我要用「Blend」,今日最重要關鍵字,沒有之一。

Blend 是微軟用來 design XAML 的 GUI 工具,長的有點像 Visual Studio,但是專注在 design UI 上。現在請到「方案總管(Solution Manager)」在你那個 XAML 上,按滑鼠右鍵,選「Edit in Blend」


等一段時間,如果你從來沒有執行過 Blend,他第一啟動會有點久 = =|| 耶~終於好了!

他會跳一個你看不懂的視窗。一個好的程式設計師的習慣,就是一定要搞懂每一個細節,不能放任東西不懂就這樣過去了,所以我們按下「不要再提示我」跟「確定」,叫他閉嘴。


搭拉~傳說中的 Blend


在 Button 上按下右鍵,現在我們要來編輯這個 Button 的 Style。因為我們剛剛已經有幫他建立 Style 了,所以這次「編輯目前項目」是可以選的,選他,因為我們要編輯我們剛剛給名字的那個 ChangeColorButtonStyle。

好,講古時間到。在 XAML Style 裡面,有一種東西叫做 VisualState。什麼是 Visual State 呢?就是「看起來什麼樣」比方說 Button 在「平常」是一個 VisualState,在「滑鼠滑上去」的時候是另外一個 VisualState,在「按下去」的時候是另外一個 VisualState,在「Disable」的時候又是另外一個 VisualState。所以 Button 總共有四種 VisualState:

  1. Normal 正常
  2. Pressed 起蕊
  3. Disabled 失常
  4. PointerOver 指標在上


Blend 讓你可以分別輕鬆的設計這四種 VisualState 長什麼樣子。

那我們要怎麼編輯這些 VisualState 呢?來,看到畫面左上方


那個 State 給他點下去,我們就可以看到,Button 有四個 VisualState。
我們隨便看兩個,請點一下 Normal,可以看到 Button Normal 的樣子


嗯,很 normal,現在點下 PointerOver 來看看很什麼樣子


嗯,很 over。

我現在想要把這個 Border 拿掉,點一下那顆 Button,畫面右邊會顯示這個 Button 的屬性,但是你會發現他 BorderThinkness 的地方,被黃色的框框框起來,不給你改!ㄟ!其實是因為這些屬性已經被之前我們 copy 的那個 Style 設定過了,所以如果我們要再設定他的話,要先 reset 他


然後就可以改變那些值了,我要把他改成 0 = =||
你現在可以按下 F5 執行看看,滑鼠移上去,邊已經不會顯示了。

但是現在這樣也不太能看的出來有沒有 hover,所以我還要改背景顏色。好像不用我多說這個改,太簡單了,請自己動手。那我就選個霞光虹好了


按下 F5 執行,成功啦!

其實他還可以設計「VisualState 間切換的動畫」,不過我懶的寫了,自己上 youtube 找 XAML Blend Animate 就這樣。掰。

2015年11月30日 星期一

Universal Windows Platform debug output

= =|| 宇宙崩潰,找一個 debug output 方法找超久!!

踹盡網路上各種方法!

什麼  System::Diagnostics::Debug::WriteLine  鬼的根本編譯不會過!

最後才知道根本應該  ::OutputDebugString(L"abc");  才對!

Universal Windows Platform 當關鍵字找到都是錯的 = =||

請用 WinRT 當關鍵字。

然後,project 設定,debugging 那一頁,記得設定成 native

2015年5月4日 星期一

Mycestro 使用心得

先看影片,看看 Mycestro 是什麼東西


就是個像 Wii 的手把一樣,利用加速度計來當作輸入的裝置。
因為越來越懶了,不廢話,直接列優缺點:

優點:


  • 手不用在鍵盤跟滑鼠中間來來去去,對像我這樣的 vim 的使用者很方便,手不用離開鍵盤。
  • 沒了。

缺點:


  • 貴,一隻要價 149 美金,相當於 4500 台幣,還不算運費。運費 30 美金,總價 5400 台幣。
  • 連續使用的話,大概七八個小時以後沒電。其實也蠻久了,畢竟人平常也不太可能連續使用七八個小時,加上他充電也很快。而且沒電的時候就剛好站起來走一走 XD 這樣好像不算缺點
  • 需要一個特製的 BlueTooth dongle,不見,就沒了,就不能用了,要的話,不好意思,再買一隻,19 美金,運費 30 美金,總價 1500 台幣。神奇的來了!MacBook Air 不知道為什麼不需要這個特製的 dongle 就可以直接使用!不理解為什麼 Windows 使用者就得多花錢買一個特製 dongle,寫信給他們,來來回回好幾封,跟我轉圈圈,沒回答。
  • 適應期長,大概要一個禮拜以後才會熟練,可以取代一般的滑鼠。
  • 戴久了手指有點悶悶的
  • Linux 上面沒有 driver,無法控制他的靈敏度,但出廠的預設值調的非常小,用起來要人命。問官方,官方回答「也有人在 Linux 上面沒有 driver 也用的很好」我管別人用的好不好,我要 driver 阿 = =||

Q & A:


  • 可以取代滑鼠嗎?可以,但需要一段時間適應
  • 貴嗎?貴
  • 好用嗎?好用
  • 重嗎?一點點,還好,不會影響打字
  • 推薦買嗎?很難說,他很貴,你很有錢的話就 OK,不然不推

2015年4月20日 星期一

撿到四隻小貓

第一天晚上

大概十二點多回到家,聽到防火巷裡面傳來「哇哇嗚嗚」的聲音,我在想「老鼠又在打架了」不過現在的老鼠還真大膽了,叫這麼大聲,都不怕給貓抓到。

第二天早上

十點,經過防火巷外面,聽到跟昨天晚上一樣的聲音。耶,這就奇怪了,老鼠不可能叫一整個晚上。於是我就探過去看,跟著聲音找,赫然發現地上有一個小東西在動,幹,什麼東西?老鼠?貓!是貓!超小的貓!乳牛貓!連眼睛都還沒有睜開耶,腳被樹根給纏住了,卡住了,走不開,好可憐喔。嘗試想要幫他解開,發現纏得很緊,怪不得他會哭。只好拿出隨身的小剪刀,幫他把那個樹根剪斷。ㄟ?跟樹根纏在一起的這是什麼……胎盤?他的臍帶跟地上的樹根纏在一起了,怪不得他走不開,而且乾掉的臍帶跟樹根也太像了吧……拿在手上,好小喔,真的好小喔……但竟然也是一個生命 @@ 覺得好神奇……

聽到旁邊還有聲音,看了一下,發現旁邊約五十公分處的花圃裡面,是另外一隻小貓,同樣也是被自己的臍帶卡住,巨大的胎盤被卡住,爬不動,也是在哭,也幫他把臍帶剪了。感覺母貓應該是想要把小貓生在這個花圃裡,但不知道為什麼有一隻生在外面。看了一下花圃,非常的深,小貓不可能自己爬出來。怎麼會一隻生在裡面一隻生在外面?

我知道遇到小貓不能隨便撿,因為貓媽媽照顧小貓會比人類照顧好很多。但這小貓這樣在外面實在太危險了,我幫他兩隻放在一起,都在花圃裡面,這樣比較不會跑出來,到時候跑不見就完蛋了……

放好以後就要離開了……走出防火巷的時候,看到第上有一隻死老鼠,靠!嚇死我了,差一點就踩到!怎麼會有一隻死老鼠在這邊!死了!仔細看仔細看,發現不是老鼠……是貓!又是一隻貓!跟剛剛的一樣大,應該是同一胎,怎麼會在這麼遠的地方?隔好幾公尺耶!貓媽媽在幹麻 @@ 三隻小貓生三個地方,而且都沒有顧,太奇怪了!阿!動了!沒死,叫了 @@ 還好有看到,不然真的會踩到,沒死也沒我踩死。一樣幫他撿起來,放到那個花圃裡面。希望他媽媽回來會好好照顧。

想了想,回到房間,把阿喵在家裡面的貓飼料通通倒到紙碗裡面,放到花圃的旁邊,這樣貓媽媽就不用因為覓食離開小貓很遠了。通常貓媽媽都會一直顧在小貓旁邊,這次可能是因為為了找東西吃,所以跑到很遠的地方。再確定一次三隻小貓都很正常,就去上班了。

第二天中午

中午的時候,跑去問了在公司旁邊,常去的動物醫院的醫生,說遇到了三隻臍帶連胎盤的小貓。醫生說通常貓媽媽都會在小貓身邊不會離開,如果遇到這種,就是不正常。如果確定貓媽媽不在的話,最好還是送醫院。我問醫生,如果媽媽不在旁邊,一天這樣會活嗎?醫生說如果沒有媽媽在,一天大概就死了,小貓最怕失溫,現在我們人類覺得很熱,但對小貓來說,晚上的溫度還是致命的。我想了想,小貓昨天晚上十二點可能就沒人顧了,到現在白天還好還蠻熱了,但再一個晚上,恐怕真的無法……

第二天下午

下午四點半的時候,實在是擔心阿,請了假就趕快回家,我怕等到六點下班天就涼了。回到家趕快跑去看小貓,發現飼料有被吃過的痕跡,不知道是別的貓吃的,還是貓媽媽吃的,但總之周圍沒有貓媽媽的跡象,這個時候三隻小貓正擠在一起取暖睡覺,樣子好可愛 ^^ 眼睛都沒打開,卻這麼可愛的很安祥的睡。可能是聽到我來了,就醒了,又開始嗚嗚阿阿的哭,也許是餓吧……

彎著腰,看著他們嗚嗚的時候,右邊傳來「哇哇」疑?聽錯了嗎?怎麼會有一聲是從旁邊傳來的?應該是聽錯了,繼續看著眼前的三隻小貓哇哇叫,真的好可愛阿…「哇哇」不對,沒有聽錯,真的是右邊有傳來哇哇聲!沿著聲音過去,又沒聲音了。沿著地上慢慢走,但是沒在地上看到任何東西阿…防火巷裡面因為很陰濕,所以地上某些地方有著厚厚的苔蘚跟泥,就在腳快要踩到的時候,突然有塊苔蘚動了一下 @@ 看到了,是一隻…乳牛貓…第四隻小貓…跟苔蘚混在一起了,胎盤也還在,臍帶跟胎盤,還有貓本身,都跟半乾的苔蘚乾在一起了。天哪,到底在這邊多久了?為什麼媽媽都有回來吃飯了,卻把自己的小孩丟在苔蘚泥巴裡面不管阿…距離早上我把飯放下去都已經好幾個小時了,明明就有回來吃飯,不可能連一隻貓都叼不回吧…可是還是不敢亂撿貓,媽媽照顧一定會比我好多了!把第四隻小貓也撿起來,放到花圃裡。跟他的兄弟姊妹一起取暖,四隻在一起好像很開心 ^^ 還是要再講一次,好可愛阿…而且感覺也很有活力,沒有問題!回公司上班去!

第二天晚上

九點多,下班,回家。第一件事就是衝去防火巷裡面,飼料又少了!有貓吃飼料。小貓還在花圃裡,果然憑他們自己的體型絕對爬不出這麼高的花圃。但媽媽到底去哪了,會不會我進來之前她還在,看到我來才跑掉?摸了摸小貓周圍的地面,冷的。貓媽媽沒有幫他們取暖,小貓的溫度感覺也比下午的時候更冷了一點。我判定媽媽棄養了。打了電話給獸醫,醫生說開到十點,我馬上帶著小貓衝去找獸醫了!途中先去路上買了醫生推薦的 BMR 貓奶粉。

在九點五十分的時候趕到了獸醫院,醫生幫忙看了一下,把第四隻小貓的胎盤跟臍帶剪掉,教我之後要怎麼餵奶粉,教我要怎麼促使小貓排泄。醫生用溼棉花輕輕拍著小貓的下腹部,地一隻小貓完全沒反應。醫生說可能是因為完全沒有進食,所以沒東西可以排泄,然後拍拍第二隻,竟然尿了一滴,但是是血尿…醫生說不確定是因為憋太久還是因為健康已經有問題。醫生把小指放到小貓嘴前,小貓有吸吸的動作,醫生說這樣就會吃奶,就還有機會。叫我要注意保暖的問題,這個天氣對人類可能覺得很熱,但對小貓來說,還是很致命的溫度,小貓很容易就失溫。我問醫生要怎麼保暖,醫生拿了一個電毯給我「我先借你一個,你真的有需要再買…」醫生人超好,哈哈哈,醫生想要找奶瓶給我,但是他的奶瓶已經丟掉了。但已經超過十點了,大部分的寵物店都關門了。醫生跟我說公館的金吉利還開著,我去金吉利買了奶瓶,回到辦公室,想要把小貓養在辦公室,這樣上班時間才有辦法照顧。

回到辦公室,發現 nan 還有 ryan 還在呢!跟 ryan 兩個人用阿喵的外出籠鋪了小貓的床,底下是電毯。然後跟 nan 兩個人開始手忙腳亂的泡奶粉,餵小貓。我嘗試餵,但好像不太成功 Q_Q 後來都是給 nan 餵的,可能 nan 是女生,比較會帶小孩吧,小貓真的有吃喔,喉嚨有做出吞嚥的動作。雖然只吃了一點點,四隻貓好像才吃了幾 cc 吧。然後把小貓放進暖暖的床,四隻就奎在一起睡了,好可愛喔,剛剛還是這麼餓的樣子一直叫的樣子,現在卻是吃飽飽了,然後睡在暖暖的床舖裡面。四隻堆在一起,腹部起伏起伏的,好像很舒服的樣子,摸了一下身體,溫度好像比較好了。就這樣睡了。

十二點多了,我回家,順路把 nan 也送回去。回家洗澡,想說洗完以後再跑來。這樣半夜如果貓貓肚子餓了,叫了,我就可以馬上餵他們吃飯。騎車回去的路上,我一直在想,怪不得有些貓中途,送養貓咪的時候,會對飼主的身份要求這麼多,如果是我這樣捧在手上帶大的,我一定也會希望小貓遇到的主人要對他很好,那是我捧在手心上的寶貝捏!怎麼可以讓人欺負!雖然沒當過父母,不過那瞬間好像可以體會一點點當父母的感覺,好像可以理解,為什麼以前遇過的一個很嚴厲的教授,在當了媽媽以後,整個眼神都改變了,那個當下我覺得我也有改變喔。真的。

回到家起完澡。東摸摸西摸摸,結果 muting 打電話來了,說他到了辦公室,叫我也趕快去吧,他說聽到小貓一直叫,我說應該是因為小貓餓了。我收收東西就出發了,大概快三點的時候到了辦公室。打開小貓的籠子,看他們睡的好靜喔…

太靜了…怎麼沒動…沒有起伏…

血、跟糞便。貓吐血了,也拉肚子。兩隻已經不會動了。還有兩隻,正在很痛苦的呼吸著。為什麼?才不過兩個多小時。怎麼會?剛剛還是吃很飽的,在那邊呼呼大睡,為什麼,我做錯了什麼事情嗎?哪邊出錯了?不懂。

小貓很痛苦,大口的喘著氣,我跟 muting 一人捧著一隻,小貓大口大口的,一口一口的喘氣,呼吸的間隔,越來越長。一開始是一秒一次,幾分鐘以後,變成幾秒一次,幾分鐘以後,變成十秒一次,幾分鐘以後,變成一分鐘一次,然後五分鐘,然後十分鐘。我就捧著他們,等著他們下一次的呼吸。一直等,不知道等了多久,我就接受了,沒有下一次的呼吸了……

實在無法讓 nan 知道小貓死的這麼慘,nan 知道的話一定會哭死的。趁著天亮之前,把小貓的屍體處理掉,奶粉跟奶瓶藏到包包裡。跟 nan 說小貓被當作中途的朋友領走了……

第三天中午

拿著電毯,還有奶粉、奶瓶,去醫生那邊,走進醫院「醫生,這個還你」「用不到了?」「嗯…」「四隻都?」「嗯…」「盡人事了,本來就很難,不要難過,有救有機會」「嗯…」把奶瓶跟奶粉都給了醫生「醫生,這我用不到了,可以給你嗎?」「可以」「如果有人抱著小貓來,那就是有緣,這可以給他們」「嗯…如果有有緣人的話…」

想了想,當初醫生說「我先借你一個,你真的有需要再買…」當時我還聽不懂,為什麼會不需要?當然需要阿,原來是這樣…醫生一定早就知道了吧…

2014年9月7日 星期日

Effective Modern C++ 筆記:Type Deduction 規則

一邊讀《Effective Modern C++》一邊作筆記 = =||
太複雜了,一定會忘記

C++ 總共有三種 Type Deduction

I. template argument deduction


template < typename >
void f(ParamType param);
f(expr); // 從 expr 推導 T 跟 Param

template argument deduction 有三種 case

1. ParamType 是 pointer 或 ref,但不是 universal ref

  • 如果 expr 是 ref,把 ref 拿掉
  • pattern-match,導出  ParamType

2. ParamType 是 universal ref(就是有 && 的形式)

  • 如果 expr 是 lvalue,那 T  ParamType 都導成 lvalue ref
  • 如果 expr 是 rvalue,那就跟平常一樣(平常一樣是啥?)

3. ParamType 不是 pointer 也不是 ref

  • 如果 expr 是 ref,把 ref 拿掉
  • ref 拿掉之後,如果 expr 是 const/volatile,也拿掉
另外,array 跟 function 會退化成 pointer


II.  auto  deduction

跟 template argument deduction 幾乎一樣,除了初始化的時候對待  {...}  不一樣, auto  會把  {...}  推導成  std::initializer_list ,但 template argument 無法推導  {...} 

auto a = {1, 2, 3};  // a 是 std::initializer_list
f({1, 2, 3});        // 編譯失敗,無法推導 T

III.  decltype  deduction

什麼就是什麼

const int a = 7; // decltype(a) 就是 const int
const int& b = a; // decltype(b) 就是 const int&

 decltype  最常用來作的,就是用來傳遞「原原本本的型態」,比方說你有一個 wrapper function,需要 perfect forward,然後 return value 的型別也要一五一十的反應出來,那你的好朋友就是  decltype

template < typename F, typename ... Args >
auto func_timer(F&& f, Args&& ... args)
-> decltype(f(std::forward(args)...))
{
    auto begin = time();
    decltype(f(std::forward(args)...)) result = f(std::forward(args)...);
    std::cout << time() - begin << std::endl;
    return result;
}

func_timer(foo, 1, 2, 3);

因為  foo  的 return value 有可能是 reference,人家有可能寫

func_timer(foo, 1, 2, 3) = bar;

所以連 referenceness 也要保留,所以要用  decltype 。但那一大長串實在太麻煩,所以 C++14 提供  decltype(auto) ,讓你可以簡單

template < typename F, typename ... Args >
decltype(auto) func_timer(F&& f, Args&& ... args) {
    auto begin = time();
    decltype(auto) result = f(std::forward(args)...);
    std::cout << time() - begin << std::endl;
    return result;
}

喔,使用  decltype(auto)  的時候還有一個特例要記住。 decltype(auto)  有兩條規則:
1. 如果遇到單單一個 name 的 lvalue expression, decltype(auto)  就是那個 name 的型別
2. 如果不是單單一個 name 的 lvalue expression, decltype(auto)  帶有 ref

decltype(auto) f1() {
    int x = 0;
    return x;     // decltype(auto) 是 int,所以 f() 也是 int
}

decltype(auto) f1() {
    int x = 0;
    return (x);   // decltype(auto) 是 int&,所以 f() 也是 int&
}

2014/09/09 更新


因為有讀書有學到新東西,又感覺已經很久沒寫一些比較深的 C++ 了,所以中秋節剛好來自幹一個 variant (github repo)

2014年8月26日 星期二

我是「媽寶級白目」

突然發現自己不知道從什麼時候開始,
已經變成所謂一直發政治文的「政治魔人」了……

還記得以前覺得政治很無聊、很髒、不該碰……
覺得會去看政論節目的人腦袋都有問題……

從學校畢業以後進入業界,
然後發現這個業界有著很病態的超時工作文化,
雖然我自己沒遭到壓榨,但我開始注意勞工權益,
參加了電子電機資訊工會,然後開始慢慢了解「爭取」是什麼。

然後第一次去了抗議現場,
發現即使我們工會人不多,
但每次活動總有很多其他的社運團體會來支援我們。

然後第一次去了遊行活動,
然後才知道原來早就有很多人已經在街頭上努力了這麼久,
然後知道我們也應該在別的活動去支援別人。
然後知道在這個支援別人的過程,
我們也了解了別人所面臨的,別的社會議題。

然後慢慢知道了一些歷史課本不會寫的東西,
然後慢慢知道了一些新聞媒體不會報的東西,
然後真正體會了當初曾華璧老師在課堂上講的東西。
然後突然之間,那是一個相變的過程,很快速,
我的想法在很短的時間裡面蛻變的很快。
我想那也許就是「公民覺醒」。

我還記得以前有一次看到李敖在電視上說:

  一個真正民主的國家,投票率不會太高,
  如果投票率很高,代表政治對人民生活的影響非常大,
  『我支持的候選人沒上,我要去自殺!』這是不對的!
  民主社會的話,誰當選,對百姓的生活都不應該差太多,
  如果一個社會裡面『誰當選』差很多的話,
  那這個社會就不民主。

當時我的想法是:

  說的真好,那些對政治很投入的人真是白痴,
  台灣就是因為有你們這些人,才顯得台灣不民主。

現在想想當時真是愚蠢的不可思議。
不是因為他們的投入,才顯得台灣的不民主,
而是因為台灣不民主,害得他們不得不投入。

想到讀 Game Theory 講選舉的時候,裡面提到兩種模型,
一種是候選人可以選擇要提出什麼政見的模型,
一種是候選人無法選擇要提出什麼政見的模型。
第二種是因為政見不一定會履行,候選人完全可以胡說亂騙,
所以他的政見應該是他過去作了什麼,不是現在說了什麼。
而理智的公民是有記憶的,我們會記得你過去的為人處事,
所以實際上,候選人無須提出政見,
我們看你過去作了什麼,就知道你未來想幹麻。

兩種模型當然都跟現實有些距離,但還是很有啟發性,
特別是第二種,實質是遠比第一種好的多,
現實若偏向第一種,代表選民都是健忘的,
現實若偏向第二種,而候選人就無法欺瞞選民。
但要作到第二種的前提,是選民必須要長期的關注政治,
知道那些人到底在幹麻,而不是等到快要選舉的時候,
才看看選舉公報、甚至不看選舉公報就投票了。

如果是這種狀況,
那那些選民不過就是四年投一次票政治植物人罷了,
他們根本不會思考,也沒有記憶,
他們有民主的權利,卻沒有民主的能力。
他們胡亂的投票,結果卻是大家一起背負的。
讓所有人一起承擔選出惡劣候選人的責任。

這是不對的。

所以,如果你有投票權,
那麼,關注政治,就是你的社會責任。
因為你的那一票會影響別人,
放空亂投,是讓別人在背負你本來應該背負的責任。

請面對這個事實:「台灣,不是一個民主國家」,
選錯人,很嚴重,請關注政治,負起你的社會責任。

「太辛苦了,而且很沈重」你說

所以大家要看我的臉書。

每天都有又酸、又靠北、又北七的苦中作樂政治文,
把沈重跟嚴肅寄託在低能跟歡樂當中,
我發現我的文章越來越像國寶級白目了,
我真的有夠白目,不過我不到國寶等級,那就媽寶好了,
以後請大家叫我「媽寶級白目」。