Bertrand Russell: "Three passions, simple but overwhelmingly strong, have governed my life: the longing for love, the search for knowledge, and unbearable pity for the suffering of mankind."
2017年4月18日 星期二
2017年4月16日 星期日
丫髻山 - 橫洲與周邊的發展
早前看到 文化葫蘆 Hulu Culture 在Facebook上有一個活動宣傳 — 「入鄉‧隨續」X 元朗 & 屯門 :元朗棕地問題考察團,上丫髻山看橫洲了解該處的棕地情況。這丫髻山最初是因為攝影界日落水田的景色而認識,去年橫洲事件之後,這篇《橫洲登山記》也勾起興趣該親自走走看看。
上周日,一行人下午三時才在朗屏村出發,經過巴士站後橫過朗屏路,上山的路徑在東莞學校對面。在這段路旁的屋外已見寫上「不遷不拆」等橫條。據帶隊的區議員張生講解,在朗屏路這邊路旁的舊屋,就是橫洲「第一期」4000伙公屋計劃的選址。收地涉及綠化地帶上的三條非原居民村 - 永寧村、鳳池村及楊屋新村。據指當年政府初步估計當中永寧村只有14伙住戶,計劃出台時才知有40多戶。沿小徑在「梁山后土之神」兩邊各有上山的路,右邊是石屎梯級,我們走左面的泥路。這段路線也是附近居民晨運行山的路,前行不久便會到一個風雨亭,旁邊有晨運花園和觀音廟。當日也有上來參拜的人。向右望對面的山頭就是丫髻山,山高只有約百米,但已是元朗平原上最高的小山丘,兩丘南北相連,形如頭上雙髻而得名。清明過後,一面山坡被山火燒成啡啡黑黑的,山上多墳,混凝土的灰白也格外顯眼。
上周日,一行人下午三時才在朗屏村出發,經過巴士站後橫過朗屏路,上山的路徑在東莞學校對面。在這段路旁的屋外已見寫上「不遷不拆」等橫條。據帶隊的區議員張生講解,在朗屏路這邊路旁的舊屋,就是橫洲「第一期」4000伙公屋計劃的選址。收地涉及綠化地帶上的三條非原居民村 - 永寧村、鳳池村及楊屋新村。據指當年政府初步估計當中永寧村只有14伙住戶,計劃出台時才知有40多戶。沿小徑在「梁山后土之神」兩邊各有上山的路,右邊是石屎梯級,我們走左面的泥路。這段路線也是附近居民晨運行山的路,前行不久便會到一個風雨亭,旁邊有晨運花園和觀音廟。當日也有上來參拜的人。向右望對面的山頭就是丫髻山,山高只有約百米,但已是元朗平原上最高的小山丘,兩丘南北相連,形如頭上雙髻而得名。清明過後,一面山坡被山火燒成啡啡黑黑的,山上多墳,混凝土的灰白也格外顯眼。
2017年4月4日 星期二
R User Group 的 Machine Learning for Beginners (三月)
三月另一個開始的活動,是R User Group 辦的Machine Learning for Beginners。共四堂,暫時上了一半,雖然不幸收工前總有意外,兩次都錯過了開頭的部份,還好有source code 看著理解,和對基本的統計總算仍有概念,
第一堂主是R 的數據處理。主要用"tidyverse"套件包,"tidyverse"是打包了一組有著共同資料形態和'API'設計,方便一齊使用的套件。透過"tidyverse"處理這些套件的 install (core + select) 和 load (core)的工序。當晚用到的主要指令包括來自 "magritti" 的 piping operator %>%,可以將一個output當做另一個指令的1st input,這個比起要括號配對括號的寫法的確方便很多。另外,還有來自 "dplyr" 的6個指令,包括'select', 'filter', 'arrange', 'mutate', 'group_by', 'summarise' 。在dataframe的數據處理上算十分方便。還有n, top_n, tally等一起使用。之後我把這用在處理問卷資料上已比去年方便得多了。
這些專門處理dataframe的數據,tidyverse有一個叫lubridate的套件處理日期時間,但另一方面自己所仍要找尋xts, zoo 等財務上時間序列的處理方法。見到有另一個"tidyquant"的套件,大概之後可以一試。
"tidyverse"的介紹和教學可以到:
第一堂主是R 的數據處理。主要用"tidyverse"套件包,"tidyverse"是打包了一組有著共同資料形態和'API'設計,方便一齊使用的套件。透過"tidyverse"處理這些套件的 install (core + select) 和 load (core)的工序。當晚用到的主要指令包括來自 "magritti" 的 piping operator %>%,可以將一個output當做另一個指令的1st input,這個比起要括號配對括號的寫法的確方便很多。另外,還有來自 "dplyr" 的6個指令,包括'select', 'filter', 'arrange', 'mutate', 'group_by', 'summarise' 。在dataframe的數據處理上算十分方便。還有n, top_n, tally等一起使用。之後我把這用在處理問卷資料上已比去年方便得多了。
- select: 根據給定的變數名稱選擇column
- filter: 根據設定的條件做篩選row
- arrange: 根據選定的變數內容做排列
- mutate: 根據給定的值賦予新變數,或是變更舊變數
- group_by: 根據給定變數做group,以銜接summarise
- summarise: 資料整併
這些專門處理dataframe的數據,tidyverse有一個叫lubridate的套件處理日期時間,但另一方面自己所仍要找尋xts, zoo 等財務上時間序列的處理方法。見到有另一個"tidyquant"的套件,大概之後可以一試。
"tidyverse"的介紹和教學可以到:
2017年3月29日 星期三
重溫拼布熊仔的做法
之前上完了青年廣場開的一個三堂的拼布熊仔工作坊。雖然不是第一次玩拼布公仔,但上一次是兩年多前的Felissimo 拼布松鼠。之後那年學勾冷公仔,還未有完成.... 今次學這個雖然都是拼布公仔,但有些步驟已經忘記,還好今次再學可以重新回憶下。
2017年3月8日 星期三
富亨/松嶺的後山徑-大埔第9區和頌雅路附近的舊徑新修
為了要證實報導所見的傻人樂園是不是自己認識的大埔「傻人樂園」,上星期也花了一個早上上山看看。走的是我每次行九龍坑山首選的富亨邨山徑,山徑無名,但山下本來有個松嶺村,山上有人漆上「玉秀峰」。從富亨邨後的匡智松嶺學校旁開始上山,到288標高柱後向大埔頭方向落山,落山途中就會經過大埔的「傻人樂園」。當初都有進去過,但之後都只是從外經過,今次刻意走進去了解規模。這個「傻人樂園」的地方不大,是一個連接康樂園只有幾層的後花園,除了從衛奕信徑分支一小段出來和連接康樂園外,不見得會有連接金山衛徑「傻人樂園」的路。而且今次所見,連昔日衛徑上的避雨亭的詩全都不見了,果樹也留意不到了。不知還有多少人會打理這個後花園?金山「傻人樂園」都只剩90多歲的公公婆婆參與過當年1970年的落成。大埔傻人樂園不知歷史如何?大埔康樂園前身是李福林的果園,到1980年代後人創立加拿大發展公司發展建成康樂園,猜想是當時的屋主有模仿金山傻人樂園的主意。現在不知還有多少人來打理這個「傻人樂園」?
【傻人樂園·影片】侵佔者講舊時:山上大世界如何建成
昔日貼滿詩句的避雨亭 |
「傻人樂園」 |
今次最意外的是重修的山徑已接近完成。從前這段路只有起步不久時的石屎涼亭和近山頂的晨運健身處搭建的避雨亭,現在中間再多了兩個涼亭。新建的梯級可以上到晨運健身處,有了這條梯級路應該晚上夜行也可以,當晚已經急不及待的再上來影相。
2017年3月4日 星期六
主教山 - 石硤尾的晨運綠洲
九龍區另一條晨運路線,可以數石硤尾的主教山,它是位於巴域街的聖方濟各堂後的一座小山。當初聽聞這個地方,是源於2016年<香港01>的一篇報導,主教山山頂的一片小草地因為是配水庫範圍,一直由水務署管理,也就是以鐵絲網圍封不動。但十多年來附近街坊早已習以為常地「闖入」。開闖為晨運勝地,還有「土炮」健身器材供街坊使用。不過2015年有搞手用作舉辦派對的場地,惹來附近居民投訴,令水務署和警方一度加強了管理。之後,兩棵10-20年前由街坊種植的樹,也因為擔心影響水庫結構而有計劃提出要砍掉。地區聲音希望保存大樹和善用這個空地。今日所見一切尚能保存。香港在城市空間的規劃、部門間的協調、對於自下而上的使用習慣和意見是否做到從善如流?
Totoro Typhoon: An Inside Look At Hong Kong’s Secret Pop-Up Parties
主教山配水庫晨運樂園攻防戰-街坊開墾-水務署報警-計劃斬樹
Totoro Typhoon: An Inside Look At Hong Kong’s Secret Pop-Up Parties
主教山配水庫晨運樂園攻防戰-街坊開墾-水務署報警-計劃斬樹
2017年2月21日 星期二
嘉頓山 - 靜看今夜的市區燈火
嘉頓山,在深水埗也可以暫時離開密集的樓宇,只花半個小時就可以輕輕鬆鬆的上山。它和附近的主教山一樣,都是座落九龍市區之中,因著水庫而留下的小山,也正好當起城市的綠色區肺。方便的位置令它也是地區人士的一個晨運選擇。不過,我想不少人(特別是攝友)和我一樣,都是經過深水埗城市夜景的相片而知道嘉頓山這個地方。
一直想到這鬧市中的小天地看看,渣馬當日下午才決心出動,我覺得都是動者恆動的一種心理上的習慣因素吧。我大約五時半到山上看日落的位置,已經有很多腳架放好有利位置(近樓梯那邊,可以直望拍攝深水埗欽洲街)。還有很多年輕的情侶會上來影相。要走到最入邊,大約是薩凡納學院上面才有坐下來的空間。日落過後會走了一些人,但拍夜景的人就繼續留下。
繼續沿樓梯向上就會看到標高柱,只有幾步路的距離。山岡頂是一片水泥平台的空地,周圍有休憩的座椅。這裡不忘嘉頓山在成為新文青拍照熱點之前,還是附近居民的晨運休憩處。另一天刻意下午過來,補拍些引路的相,叔叔伯伯和小朋友們就在這邊遛狗、閑遊、和玩樂。山後的小路有鐵絲網封住了配水庫。網上看過前人的記錄,這裡鐵絲網的網門本來是長開的,走進去是一大片綠草地,找到石峽尾第三配水庫幾個大字之後,對面有另一個破損了的鐵絲網,穿過鐵絲網會有褔德祠和山徑下山。可惜現在出了名就通通給修補了。 在啟德還是舊機場而非新發展區的年代,人們記得這裡還有座訊號燈塔。不知那個年代,是否也有某對情侶,會牽著手走上來,在這個當年仍是北九龍裁判處的後山,看著山下的萬家燈火,看飛機在低空飛過。傾訴著對幾十年後生活的憧憬?
一直想到這鬧市中的小天地看看,渣馬當日下午才決心出動,我覺得都是動者恆動的一種心理上的習慣因素吧。我大約五時半到山上看日落的位置,已經有很多腳架放好有利位置(近樓梯那邊,可以直望拍攝深水埗欽洲街)。還有很多年輕的情侶會上來影相。要走到最入邊,大約是薩凡納學院上面才有坐下來的空間。日落過後會走了一些人,但拍夜景的人就繼續留下。
繼續沿樓梯向上就會看到標高柱,只有幾步路的距離。山岡頂是一片水泥平台的空地,周圍有休憩的座椅。這裡不忘嘉頓山在成為新文青拍照熱點之前,還是附近居民的晨運休憩處。另一天刻意下午過來,補拍些引路的相,叔叔伯伯和小朋友們就在這邊遛狗、閑遊、和玩樂。山後的小路有鐵絲網封住了配水庫。網上看過前人的記錄,這裡鐵絲網的網門本來是長開的,走進去是一大片綠草地,找到石峽尾第三配水庫幾個大字之後,對面有另一個破損了的鐵絲網,穿過鐵絲網會有褔德祠和山徑下山。可惜現在出了名就通通給修補了。 在啟德還是舊機場而非新發展區的年代,人們記得這裡還有座訊號燈塔。不知那個年代,是否也有某對情侶,會牽著手走上來,在這個當年仍是北九龍裁判處的後山,看著山下的萬家燈火,看飛機在低空飛過。傾訴著對幾十年後生活的憧憬?
2017年2月16日 星期四
月記 - 大阪假期、PMP、夢、渣馬2017
生活上的事,農曆年前和女友去了一趟大阪,同事都笑說日本唔似我會旅遊的地方。強韌的印象太深入民心了吧,不過想來這年工餘時候其實是懶了很多,比上年少了運動,覺得都已經略見肚腩了。本來想起日本旅行,就有個印象:日本是應該會讓女人瘋狂購物的地方,誰知計起來我比女朋友花了更多錢購物。先歸咎低日圓的匯率和高質素的產品,消費上只有交通是比較貴,食和買都感覺比香港抵。男裝比女裝貴是常識吧,主要是買了兩件大衣和袋;然後買了個健身的腹輪啞鈴、少許藥品,足夠令我的購物金額超越女友。不過,到了上機時看到別人手提的行李,也許我們是很節制了。
新年假期開始,約好今年要完成PMP,再下定決心完成之前擱下了大半年,當作35 contact hours 的online course。之後報名入會PMI,也交了PMP Program的申請。現在是要按圖書館借的p的《Rita Exam Prep》自習了,目標今年上半年要順利考到合格。
舊同事走,新同事來,現在的職位也上任快半年了,努力用新腦袋做事。要讓自己慢活下來,不知是否年紀漸大,感覺下班後少了時間/精力再做自己想做的事。好的領導者角色,要學習如何管理好事情的輕重緩急,下放事情時做到放手而不放任⋯⋯
踏入二月,一早就應該為渣馬練跑了。只有在新年後跑了兩次不足10k 的距離。擔心當日能不能完成21公里的挑戰,會不會身體應付不來而有意外。 大約個多星期前就嘗試從大埔跑到沙田練習。練跑的時候想起Newton 1st law,大概身體也是一直不動就會繼續不想動,動起來就會持續的動。雖然,渣馬前還是只跑過兩次不足十公里的路程。
想記下一個夢境:
「新學期開始,不過走了好多課沒有上。有一課由"陳敏華"教的歷史課,我是連上堂的課室也不知道,這天打算上堂了。在校園裡周圍找一個正在教歷史的課室,不過看到最像樣的只有一個教書法的教室。尋找的過程中遇到中學時的Miss Lam,原來鄺Sir介紹了她到新開的"駿昇"學院進修,這是之前鄺Sir也有讀過的。傾談間講到要一邊返工一邊上課就要如何遷就時間,有時直到下午一時的整個上午都要過來上課,那天中學就不安排教上午的班⋯⋯然後夢境變成我帶著行李出遊,趕著車⋯⋯然後又變了一個跑步的場景,是要打倒對手鬥快到終點的。臨近終點時有兩個跑在前面,我手上有一件很長的武器,像拿著長劍的手法握著,武器的質料像是紙做的,我伸盡武器,但在對手過終點後才能擊中。」
從幾星期前開始記,寫到現在渣馬後。今年挑戰渣馬前未有好好準備,最近連十公里都沒有跑過。事前幾日沒有信心的,抱著心態是大不了就是跑不完全程,先去試試,不會出事就可以。起碼要有10k,之後每跑得多些少都已經是成就。 當日,從彌敦道出發,跑到5公里的標誌時,心想跑了這麼久才只是5k... 繼續一直跑到10k,超過一小時了。起步時預算過如果能夠保持前年十公里跑一小時的狀態,那就最多有2小時完成餘下的11k(半馬限3小時內完成),就應該不成問題了。嗯,所以現在要繼續努力跑⋯⋯還好之後不經不覺就跑到20k了,可能是這一段的新鮮景色,還有特別是跑西隧時大家的興奮。到了最後 1-2 公里才開始感到雙腳的肌肉很緊。
回想3年前開始跑步,以渣馬十公里作為目標,半馬/全馬當時是太困難和遙遠的難以想像。晚上從2k、4k、8k的慢慢跑得更多。完成渣馬十公里後的那年,十公里賽只是小事,山野跑是挑戰,也一次次的成功做到。現在完成到渣打半馬,有種感覺全馬好像也不是那麼遙遠了,不是只有少數的專業跑者才能跑到,我也會可以的。 有個憧憬想到海外跑,日本的馬拉松、澳洲和美國的山野跑⋯⋯。下年要達到2小時內完成半馬,之後應該就可以跑到全馬。
[渣馬2017大數據] 一張圖睇下自己成績屬百分之幾
![]() |
腹胸兩用。當健腹輪開始熱門時,就想要一個這樣的設計了。 |
新年假期開始,約好今年要完成PMP,再下定決心完成之前擱下了大半年,當作35 contact hours 的online course。之後報名入會PMI,也交了PMP Program的申請。現在是要按圖書館借的p的《Rita Exam Prep》自習了,目標今年上半年要順利考到合格。
舊同事走,新同事來,現在的職位也上任快半年了,努力用新腦袋做事。要讓自己慢活下來,不知是否年紀漸大,感覺下班後少了時間/精力再做自己想做的事。好的領導者角色,要學習如何管理好事情的輕重緩急,下放事情時做到放手而不放任⋯⋯
踏入二月,一早就應該為渣馬練跑了。只有在新年後跑了兩次不足10k 的距離。擔心當日能不能完成21公里的挑戰,會不會身體應付不來而有意外。 大約個多星期前就嘗試從大埔跑到沙田練習。練跑的時候想起Newton 1st law,大概身體也是一直不動就會繼續不想動,動起來就會持續的動。雖然,渣馬前還是只跑過兩次不足十公里的路程。
想記下一個夢境:
「新學期開始,不過走了好多課沒有上。有一課由"陳敏華"教的歷史課,我是連上堂的課室也不知道,這天打算上堂了。在校園裡周圍找一個正在教歷史的課室,不過看到最像樣的只有一個教書法的教室。尋找的過程中遇到中學時的Miss Lam,原來鄺Sir介紹了她到新開的"駿昇"學院進修,這是之前鄺Sir也有讀過的。傾談間講到要一邊返工一邊上課就要如何遷就時間,有時直到下午一時的整個上午都要過來上課,那天中學就不安排教上午的班⋯⋯然後夢境變成我帶著行李出遊,趕著車⋯⋯然後又變了一個跑步的場景,是要打倒對手鬥快到終點的。臨近終點時有兩個跑在前面,我手上有一件很長的武器,像拿著長劍的手法握著,武器的質料像是紙做的,我伸盡武器,但在對手過終點後才能擊中。」
從幾星期前開始記,寫到現在渣馬後。今年挑戰渣馬前未有好好準備,最近連十公里都沒有跑過。事前幾日沒有信心的,抱著心態是大不了就是跑不完全程,先去試試,不會出事就可以。起碼要有10k,之後每跑得多些少都已經是成就。 當日,從彌敦道出發,跑到5公里的標誌時,心想跑了這麼久才只是5k... 繼續一直跑到10k,超過一小時了。起步時預算過如果能夠保持前年十公里跑一小時的狀態,那就最多有2小時完成餘下的11k(半馬限3小時內完成),就應該不成問題了。嗯,所以現在要繼續努力跑⋯⋯還好之後不經不覺就跑到20k了,可能是這一段的新鮮景色,還有特別是跑西隧時大家的興奮。到了最後 1-2 公里才開始感到雙腳的肌肉很緊。
![]() |
西區海底隧道 |
[渣馬2017大數據] 一張圖睇下自己成績屬百分之幾
2017年1月18日 星期三
[Java] 將照片的像素資料儲存成csv檔
之前Show Me The Code的講者介紹 Machine Learning 的 Python版本,上星期找到如何用 R 做之後,就只差準備資料。
記得學Java時有處理過圖片的。以下就是要將 3 (MaxN) 張 32*32 (Heigth*Width) 的JPEG 相片,轉換成灰階資料,儲存成 3*1024 的CSV 檔案。
當中幾個 Functions 提供以下功能:
記得學Java時有處理過圖片的。以下就是要將 3 (MaxN) 張 32*32 (Heigth*Width) 的JPEG 相片,轉換成灰階資料,儲存成 3*1024 的CSV 檔案。
當中幾個 Functions 提供以下功能:
- 相片轉換成灰度,記錄到 2D Array:
convertTo2DUsingGetRGB() 或 convertTo2DWithoutUsingGetRGB()
- 2D Array 轉換成 1D Array:
two2oneD() - 3. 2D Array 儲存成 Csv 檔:
save2csv()
2017年1月13日 星期五
[R] Show Me The Code - Machine Learning的簡易入門
上星期去了一個程式員的講座交流活動,6個講者就著不同題目介紹和展示相關的coding。怎樣擔起一場有魅力的演說,這種能力很多時候都需要。大約10分鐘的演講,不用Powerpoint的投影片,即場示範效果和做法。同一個活動,今個星期就見到別人已經好好地寫出一篇『親睹Machine Learning辨別靚仔靚女』。
收工到場時已經錯過第一位講者講的WebVR。第二位分享用elm這個前端應用開發的經驗,只有少量Javascript認識的我只記得它是讓開發者可以寫完後compile成HTML+CSS+JS,因為先編譯,就不會等到執行時才出現運行時期的錯誤。第三位的標題很吸引,『如何用十分鐘開發Facebook Bot』。原來前排見過的應用程式是透過這種工具開發。這技術可以充當你專頁的回覆的機械人,也可以是當FB Messager成為你應用程式的用戶介面。講者用的應該是PHP,網上也有其他用Node.JS,Python 的示範。
「[程式開發] Facebook Messenger 聊天機器人 API 環境建置 教學 (Node.JS)」
「用 Python 開發 Facebook Bot」
第二節開始的一個講者介紹API.AI,雖然示範的只是特定句子的對答,但API.AI這家被Google收購了機械人對話開發公司,還做到更多型式的文字/語音辨析。然後見到R、Python這些比較有親切感的語言。 R有電鋸陳分享他在Network Analysis的過程中,用Rcpp套件以C寫looping 的經驗,這樣編譯和運行的時間可以比用apply function的即譯式更快。之後嘗試rJava時可以留意這個用法吧。不過他的分享中其實有很多時間是放在解釋研究的方法:怎樣的數據形式、什麼是Network analysis 的Triad Census。他做過的分析和文章可以參考明報的報道,報道版當時也讓我深感佩服,原來香港還是有做數據分析的人。
「通識導賞﹕佔領時代的facebook專頁版塊巴爾幹化社會網絡分析」
「數據新聞:香港網絡生態系列之三 沒有最撕裂 只有更撕裂——後佔領時代的Facebook專頁板塊」
用Python 的Andy展示的是所謂Machine Learning、Deep Learning 今天已經可以如何容易地做到。示範用 Keras套件 以神經網絡Neural Network 的方式分辨男或女的面孔照片。有男女各大約1300+ 張相片,32*32 pixel的黑白大頭照。轉換成共約2800行1024列的數據集。2/3 Training, 1/3 Testing。想想這件事應該可以用R 做吧?如果先準備好代表這些相片的矩陣,就可以讓R做緊接的神經網絡分析。數據仍需要準備,但Coding的例子呢? 有,Google 一下就找到 R-Bloggers 上的Coding 例子:
收工到場時已經錯過第一位講者講的WebVR。第二位分享用elm這個前端應用開發的經驗,只有少量Javascript認識的我只記得它是讓開發者可以寫完後compile成HTML+CSS+JS,因為先編譯,就不會等到執行時才出現運行時期的錯誤。第三位的標題很吸引,『如何用十分鐘開發Facebook Bot』。原來前排見過的應用程式是透過這種工具開發。這技術可以充當你專頁的回覆的機械人,也可以是當FB Messager成為你應用程式的用戶介面。講者用的應該是PHP,網上也有其他用Node.JS,Python 的示範。
「[程式開發] Facebook Messenger 聊天機器人 API 環境建置 教學 (Node.JS)」
「用 Python 開發 Facebook Bot」
第二節開始的一個講者介紹API.AI,雖然示範的只是特定句子的對答,但API.AI這家被Google收購了機械人對話開發公司,還做到更多型式的文字/語音辨析。然後見到R、Python這些比較有親切感的語言。 R有電鋸陳分享他在Network Analysis的過程中,用Rcpp套件以C寫looping 的經驗,這樣編譯和運行的時間可以比用apply function的即譯式更快。之後嘗試rJava時可以留意這個用法吧。不過他的分享中其實有很多時間是放在解釋研究的方法:怎樣的數據形式、什麼是Network analysis 的Triad Census。他做過的分析和文章可以參考明報的報道,報道版當時也讓我深感佩服,原來香港還是有做數據分析的人。
「通識導賞﹕佔領時代的facebook專頁版塊巴爾幹化社會網絡分析」
「數據新聞:香港網絡生態系列之三 沒有最撕裂 只有更撕裂——後佔領時代的Facebook專頁板塊」
用Python 的Andy展示的是所謂Machine Learning、Deep Learning 今天已經可以如何容易地做到。示範用 Keras套件 以神經網絡Neural Network 的方式分辨男或女的面孔照片。有男女各大約1300+ 張相片,32*32 pixel的黑白大頭照。轉換成共約2800行1024列的數據集。2/3 Training, 1/3 Testing。想想這件事應該可以用R 做吧?如果先準備好代表這些相片的矩陣,就可以讓R做緊接的神經網絡分析。數據仍需要準備,但Coding的例子呢? 有,Google 一下就找到 R-Bloggers 上的Coding 例子:
2017年1月5日 星期四
香港的郊野公園動植物記 - 2016年末
2016年12月29日 星期四
[R] RJDBC的例子,透過顧客行為的相似度建立推薦系統
自從之前安裝好R上的 rJava 和 RJDBC 套件(這篇:R 上安裝 RJDBC 和 rJava 的除錯),就應該可以借回那本書繼續學習R上連結用MySQL的例子。加上最近又想繼續股票短線的技術分析模型,希望將計算後的指標輸出到 Excel可以接手做試驗的形式,於是這幾天都在對著RStudio。股票方面思考過匯出怎樣的資料和格式才方便Excel處理,整理過之前的幾段Scirpt, 但想要的結果仍在做回溯測試中。而SQL的例子就可以告一段落了。
這個例子中的"Sakila"數據是MySQL 提供的樣本,假設一間DVD租售店的營運,數據庫的結構參考: https://dev.mysql.com/doc/sakila/en/sakila-structure.html。這個教學例子是利用顧客的租借記錄,以及電影的類別、分級等資料,製做一個推薦系統,為顧客推薦他可能有興趣的電影。一個方法是計算利用顧客的借閱記錄計算顧客間的相似性,這個就是下面的例子。書中也提及另一個方法是利用被電影被借閱的記錄計算電影間的相似性。實際上,更好的算法應該還要考慮在新的顧客或電影時如何更新推薦。
這個例子中的"Sakila"數據是MySQL 提供的樣本,假設一間DVD租售店的營運,數據庫的結構參考: https://dev.mysql.com/doc/sakila/en/sakila-structure.html。這個教學例子是利用顧客的租借記錄,以及電影的類別、分級等資料,製做一個推薦系統,為顧客推薦他可能有興趣的電影。一個方法是計算利用顧客的借閱記錄計算顧客間的相似性,這個就是下面的例子。書中也提及另一個方法是利用被電影被借閱的記錄計算電影間的相似性。實際上,更好的算法應該還要考慮在新的顧客或電影時如何更新推薦。
2016年12月21日 星期三
[Java/Excel] 用 Eratosthenes Sieve (和 Euler Sieve) 求質數表,以及因式分解
上星期想破頭的數論之後,這星期都在看質數相關的Coding。
雖然最終要求的是:$ x^2+y^2 =N $ 的整數解,過程中也回顧了 Eratosthenes's Sieve 求質數表,和用質數表做因式分解 的方法。所用的語言方面,一個目標是自己想要熟習,而且資源又常見的Java;另一個是如果自己在中學時期想這樣做的話,應該會用到的VBA。
Java的例子不少,但試過才知道即使實現的是同一套算法,效率也可以有很大差別。從前只知道應用數學中會看一套算法的Big O去比較時間複雜度,但原來實踐起來用什麼語言、什麼變數物件,結果用什麼什麼形式去表現⋯⋯都會大大影響速度。就是為了找出實際運行得更快的寫法,就一頭栽到這個質數的做法上。雖然一開始時用LinkedList、Map等寫法真的很方便理解,但之後還是儘量換成基本的陣列。
下面這樣的Java寫的 Eratosthenes Sieve 求 一億($10^8$)之內的質數,大約是10秒。如果不計最後一個for loop用來製作傳回值的LinkedList<Integer>的話,主流程大約4秒。不過要求更大的質數,應該還要考慮該程式對使用整數的上限(int: [-2,147,483,648, 2,147,483,647]),大數字在記憶體的儲存方法,整數表的儲存方法等。很多事情都是這樣吧,開始時只要求做到是容易的,但要追求深究下去就會困難⋯⋯
最後還有兩個方法是Modified Eratosthenes Sieve 和 Euler Sieve,都是理論上應該更有效率的算法,不過實踐起來還是達不到應有的分別,要怪我對如何更好地寫代碼還是不熟識吧。 Eratosthenes Sieve的Modification的想法是一開始就不考慮2和3的倍數,只看6k+1和6k+5的情況。至於 Euler Sieve 是改善Eratosthenes Sieve中一個合成數會重覆被質數篩去而浪費的時間,例如,合成數6 會在篩選質數 2和3 的倍數時重覆考慮。理想中Eratosthenes Sieve的時間複雜度是 O( n*log(log(n)) ),而Euler Sieve的時間複雜度是O(n)。實測中,同樣求一億($10^8$)之內的質數,大約是2-3秒的時間。
雖然最終要求的是:$ x^2+y^2 =N $ 的整數解,過程中也回顧了 Eratosthenes's Sieve 求質數表,和用質數表做因式分解 的方法。所用的語言方面,一個目標是自己想要熟習,而且資源又常見的Java;另一個是如果自己在中學時期想這樣做的話,應該會用到的VBA。
Java的例子不少,但試過才知道即使實現的是同一套算法,效率也可以有很大差別。從前只知道應用數學中會看一套算法的Big O去比較時間複雜度,但原來實踐起來用什麼語言、什麼變數物件,結果用什麼什麼形式去表現⋯⋯都會大大影響速度。就是為了找出實際運行得更快的寫法,就一頭栽到這個質數的做法上。雖然一開始時用LinkedList、Map等寫法真的很方便理解,但之後還是儘量換成基本的陣列。
下面這樣的Java寫的 Eratosthenes Sieve 求 一億($10^8$)之內的質數,大約是10秒。如果不計最後一個for loop用來製作傳回值的LinkedList<Integer>的話,主流程大約4秒。不過要求更大的質數,應該還要考慮該程式對使用整數的上限(int: [-2,147,483,648, 2,147,483,647]),大數字在記憶體的儲存方法,整數表的儲存方法等。很多事情都是這樣吧,開始時只要求做到是容易的,但要追求深究下去就會困難⋯⋯
最後還有兩個方法是Modified Eratosthenes Sieve 和 Euler Sieve,都是理論上應該更有效率的算法,不過實踐起來還是達不到應有的分別,要怪我對如何更好地寫代碼還是不熟識吧。 Eratosthenes Sieve的Modification的想法是一開始就不考慮2和3的倍數,只看6k+1和6k+5的情況。至於 Euler Sieve 是改善Eratosthenes Sieve中一個合成數會重覆被質數篩去而浪費的時間,例如,合成數6 會在篩選質數 2和3 的倍數時重覆考慮。理想中Eratosthenes Sieve的時間複雜度是 O( n*log(log(n)) ),而Euler Sieve的時間複雜度是O(n)。實測中,同樣求一億($10^8$)之內的質數,大約是2-3秒的時間。
2016年12月12日 星期一
[Math] 由3個連續數組成的平方和組合 - Consecutive Triple, which are simultaneously sum of 2 squares
前言
先看一下以下數式,有某些數字可以寫成2個平方的和。$
00 = 0^2 + 0^2\\
01 = 1^2 + 0^2\\
02 = 1^2 + 1^2\\
03 = ---..... =3;\\
04 = 2^2 + 0^2\\
05 = 2^2 + 1^2\\
06 = ---...... =2*3\\
07 = ---...... =7\\
08 = 2^2 + 2^2\\
09 = 3^2 + 0^2\\
10 = 3^2 + 1^2 \\
11 = ---..... =11 \\
12 = ---..... =2*2*2*3\\
13 = 3^2 + 2^2\\
14 = ---..... =2*7\\
15 = ---..... =3*5\\
16 = 4^2 + 0^2\\
17 = 4^2 + 1^2\\
18 = 3^2 + 3^2\\
19 = ---..... =19\\
20 = 4^2 + 2^2\\
......\\
$
$
25 = 4^2 + 3^2 = 5^2 + 0^2\\
......\\
65 = 7^2 + 4^2 = 8^2 + 1^2\\
......\\
$
- 某些數字可以寫成2個平方的和,某些則不能,而要寫成更多個平方的和。公元3世紀時的Diophantus提出「是否每一個正整數都是四個平方數之和」的問題。更一般性的問題是 18世紀時的Waring’s problem,他猜想:「對於每個非1的正整數 k,皆存在正整數 g(k),使得每個正整數都可以表示為至多g(k)個k次方數之和。」Diophantus的提問即是當 k=2 的情況 。Lagrange證明了這個情況是 g(2) = 4:任何一個正整數可用4個平方數之和得出。
(e.g. $60=7^2+3^2+1^2+1^2$)
其他情況的證明有 Arthur Wieferich:g(3)=9。Joseph Liouville:g(4)=19。陳景潤:g(5)=37。任何一個正整數可用9個立方數之和、或19個4次方數之和、或37個5次方數之和得出。
- 而對於一個正整數是否可以寫成兩個平方數之和。
首先可留意到上面3、7、11、15、19.... 這些 $(4k+3)$ 的單數項都不能表達成兩個平方數之和。要將一個單數寫成兩個平方之和,兩數必定是一正一負,寫成: $(2k+1)^2 + (2k)^2 = 4(2k^2 + k) + 1$。Fermat首先證明對於單數的質數,可以寫成 (4k+1) 是該數能否寫成兩個平方數之和的充分及必要的條件。 然後,再留意上面寫不到平方和的例子,質因數分解中都出現單數次(4k+3) 形式的質因數項。Euler 證明出以下的條件:
"A number N is expressible as a sum of 2 squares if and only if in the prime factorization of N, every prime of the form (4k+3) occurs an even number of times! "$$N = {2}^{a_0} {p_1}^{2a_1}...{p_r}^{2a_r} {q_1}^{b_1}...{q_s}^{b_s}$$
於是,我們可以分辨出一個數是否可以寫成兩個平方之和。
2016年12月11日 星期日
2016年秋 - 一個月的外地工作:印度班加羅爾(Bangalore)-食
今年終於成行到印度的Bangalore的部門,訓練這邊的同事接手部份工作。居住和工作的地方都位於Bellandur區,附近都是辦公室的地區,有幾個科學園區、商業園區、工業園區,這些有點像香港的科學園般,我們公司就用到園區內某大樓的數層作辦公室。
如果在Google上尋找,你會看到Bengaluru這個名字,話說在2014年正式改名為Bengaluru之前這裡一直是稱為Bangalore,平時生活基本上都是見習慣用Bangalore的。而印度政府早在20年代至今一直有將一些城市改名,例如Bangalore附近的Mysore(舊)改名為Mysuru(新)、旅遊地點Ooty(習慣)與Udhagamandalam(正式),我一直認知的交易所Bombay(舊)原來即是Mumbai(新)。在找資料時記得有時用舊名更方便。
雖然今次出差有一個月的日子,不過星期一至五專心工作,自己也帶了電腦、書和電路板繼續項目,都是周未才會外出。除了Bellandur附近的街道,也就去了Bangalore的市中心,跟當地團去參觀Bangalore附近的城市Mysore。今次正正經歷到 8/11 印度總理 宣佈大額紙幣 500和1000盧比 即晚起停止流通,逼使國民存回銀行和申報。他目的是打擊國民瞞稅和權貴舞弊而藏在家中的"黑錢",事前未有透露計劃,由宣佈到實行只有4小時。Mysore之行正好在廢鈔令之後的周未,在擔心缺錢下,由包車也改為跟團,總算遊了一趟。
在印度一個月的「食、住、行」方面的體驗,「食」留下的照片最易整理,就先記錄食的部份。還有很多沒有拍下的就留在印象中,有拍照的如下:
Dosa:Dosa有兩種,比較喜歡煎成脆身的Dosa,內裡可以加入餡料,再沾些醬汁。圖中是綠色帶薄荷/香草的Mint Chutney,一向比較喜歡。其他地方試過最喜歡那種白色不帶辣的Coconut Chutney,另一款辣的甘醬就不太合口味了。
如果在Google上尋找,你會看到Bengaluru這個名字,話說在2014年正式改名為Bengaluru之前這裡一直是稱為Bangalore,平時生活基本上都是見習慣用Bangalore的。而印度政府早在20年代至今一直有將一些城市改名,例如Bangalore附近的Mysore(舊)改名為Mysuru(新)、旅遊地點Ooty(習慣)與Udhagamandalam(正式),我一直認知的交易所Bombay(舊)原來即是Mumbai(新)。在找資料時記得有時用舊名更方便。
雖然今次出差有一個月的日子,不過星期一至五專心工作,自己也帶了電腦、書和電路板繼續項目,都是周未才會外出。除了Bellandur附近的街道,也就去了Bangalore的市中心,跟當地團去參觀Bangalore附近的城市Mysore。今次正正經歷到 8/11 印度總理 宣佈大額紙幣 500和1000盧比 即晚起停止流通,逼使國民存回銀行和申報。他目的是打擊國民瞞稅和權貴舞弊而藏在家中的"黑錢",事前未有透露計劃,由宣佈到實行只有4小時。Mysore之行正好在廢鈔令之後的周未,在擔心缺錢下,由包車也改為跟團,總算遊了一趟。
在印度一個月的「食、住、行」方面的體驗,「食」留下的照片最易整理,就先記錄食的部份。還有很多沒有拍下的就留在印象中,有拍照的如下:
小食
公司園區外有一堆流動小食檔,由下午4-5時開檔至凌晨。賣茶或咖啡(和煙)的檔主第二朝一早就已經見佢開檔,仲會帶住脆口的零食。
2016年12月4日 星期日
Android + Arduino 小車的手機藍牙遙控計劃
對於手機的Android Apps今次是作為初學者的第一個項目。但不枉我在這次印度公幹期間,電腦之外,我都執了幾件零件和書。在印度試好了如何在Android上用藍牙連接Arduino,簡單的按鍵去傳送方向指令(數字),和預備日後作其他用途的顯示和輸入介面。詳細的檔案己經放到下面的dropbox link。
Arduino Sketch: https://dl.dropboxusercontent.com/u/71621110/Blogger/Sketch_CarBT.ino
Android Project: https://dl.dropboxusercontent.com/u/71621110/Blogger/myFirstBluetoothApp.zip
連接藍牙到Arduino時要像以下般連接,藍牙模組會直播接連到板子上的TX,RX 腳位。當Arduino開始"setup()"時除了設定相關腳位的pinMode外,也需設定Serial的通訊。之後的程式上就可以像Serial 通訊般互傳指令。而Serial Rate 要跟自己藍牙模組的Baud Rate 相同,才可以在同一頻率下理解訊息。之前在電腦上搜尋這藍牙時,確定自己用的是HC-05的藍牙組件。HC-05出廠設定是rate=9600,配對密碼1234。
Arduino Sketch: https://dl.dropboxusercontent.com/u/71621110/Blogger/Sketch_CarBT.ino
Android Project: https://dl.dropboxusercontent.com/u/71621110/Blogger/myFirstBluetoothApp.zip
Arduino
首先,Arduino 的Sketch中,令小車移動的指令是連接L298D的4個腳位控制個馬達的正轉反轉和速度。先把向前向後轉左轉右等指令包裝成forward()、backward()、left()、right()、brake()等指令:int Left_motor_go=8; //左馬達前進(IN1)
int Left_motor_back=9; //左馬達後退(IN2)
int Right_motor_go=10; // 右馬達前進(IN3)
int Right_motor_back=11; // 右馬達後退(IN4)
void forward() // 前進
{
digitalWrite(Right_motor_go,HIGH); // 右馬達前進
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW); // 左馬達前進
digitalWrite(Left_motor_back,HIGH);
analogWrite(Right_motor_go,200);
analogWrite(Right_motor_back,0);
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,200);
}
連接藍牙到Arduino時要像以下般連接,藍牙模組會直播接連到板子上的TX,RX 腳位。當Arduino開始"setup()"時除了設定相關腳位的pinMode外,也需設定Serial的通訊。之後的程式上就可以像Serial 通訊般互傳指令。而Serial Rate 要跟自己藍牙模組的Baud Rate 相同,才可以在同一頻率下理解訊息。之前在電腦上搜尋這藍牙時,確定自己用的是HC-05的藍牙組件。HC-05出廠設定是rate=9600,配對密碼1234。
Bluetooth's TX <--> Arduino's RX
Bluetooth's RX <--> Arduino's TX
Bluetooth's GND <--> Arduino's GND
Bluetooth's VCC <--> Arduino's 5V
2016年11月21日 星期一
[R] R 上安裝 RJDBC 和 rJava 的除錯
話說早前有關R找到本不錯的教學書,試過模仿它測試股票投資策略的那一章後,正要嘗試 R與MySQL的連接,但想從書中的RODBC Library改為用RJDBC Library。當時已經安裝好MySQL,MySQL Workbench,下載了JDBC Connector 的 jar 檔,在 R 上安裝了 RJDBC Library,但要使用時卻一直在報錯而用不到。在印度的最後幾天,想起再繼續 R 的項目,跟 rJava 的設定糾纏了幾小時,在最氣餒的時候終於有了突破,一步步順利的通關。
原本報錯的情況,是在載入 library(RJDBC) 的時候,回報說在調用 library(rJava) 的 .jinit() 時出錯,找不到要用的JVM。
R> .jinit()
JavaVM: requested Java version ((null)) not available. Using Java at "" instead.
JavaVM: Failed to load JVM: /bundle/Libraries/libserver.dylib
JavaVM FATAL: Failed to load the jvm library.
Error in .jinit() : JNI_GetCreatedJavaVMs returned -1
之後己經事前準備好的:
1. R 和 Java 是本身己經在用的,本身分別搭配著 R Studio 和 Eclipse 使用
2. 安裝好MySQL 和 MySQL Workbench。記住連接用的user和pwd
(
下載:http://dev.mysql.com/downloads/mysql/;http://dev.mysql.com/downloads/workbench/)3. 下載JDBC Connector 的jar檔:
(
下載:http://dev.mysql.com/downloads/connector/j/)2016年10月16日 星期日
Arduino 淘寶小車 - 焊接/使用CH341的Driver/功能測試
從Arduino的Starter Kit之後,在淘寶上買了一架Arduino的小車,大概兩天便有貨到手了。這個標榜從做中學的科教玩具,到貨時有一塊Arduino底板,轉接板的印刷電路板(PCB),和將會安裝上面的電子零件,以及組裝小車所需的零件等。大約200港幣,全套包括循跡、紅外線/超音波的避障、紅外線/藍牙的遙控。
焊接
因為那份轉接板是需要把零件遂件焊接的。為此先到鴨寮街買了一支3x元40W的焊機,試過後有時見太熱也會令底板變色,也怕燒壞底板。原來焊頭有不同的輸出功率和溫度,30W的大概已經夠用,高溫和貴點的可以換不同焊頭,可以作刻劃之用,不過也用不著。選購焊錫的過程中會經常見到松香的出現。錫作為焊料,松香作為助焊劑,對焊接有幫助,不過也不是必須吧。建議買一支低功率的焊機,包裝內就連少量焊料的那種。焊接時所有IC先不要安裝到插槽上。Arduino 的 Starter-Kit Project 2
旅行前完成了Starter Kit 後半的項目。最感興趣的是電容的實驗,當中重要部份是電子方面的原理。Processing的實驗也按步驟的做完,但這個Processing應該有更大的發展空間。有過之前的基本了解,並不難實踐以下的項目。然後也決定跟著Starter Kit做完一次之後,要用組裝一輛玩具車作為下一個學習項目。現在就先補充Starter Kit的後半部:
Project 06
蜂鳴器(Piezo)的使用,可以用tone() function 去設定輸出的音調。有點類似analogWrite() 的PWM輸出般並不是單純的 High/Low 電位,但不同的是tone()改變的是一組訊號的Period長度,也即是改變Frequency。而duty cycle永遠是50%。analogWrite()的PWM是透過固定Period中0%-100%的duty cycle去模擬類比輸出。
Project 06
蜂鳴器(Piezo)的使用,可以用tone() function 去設定輸出的音調。有點類似analogWrite() 的PWM輸出般並不是單純的 High/Low 電位,但不同的是tone()改變的是一組訊號的Period長度,也即是改變Frequency。而duty cycle永遠是50%。analogWrite()的PWM是透過固定Period中0%-100%的duty cycle去模擬類比輸出。
2016年10月2日 星期日
[R] 閱後測試-R語言與股票市場的預測
原來上水圖書館的電腦類書有不少我想要的題目,打算去找點數學的書,結果卻捧了一堆電腦程序的書回來。
《巨量資料的第一步-R語言與商業應用》
《實戰Java-9個別具特色的實作經驗》
《Arduino錦囊妙計》
《Raspberry Pi 機器人自造專案》
這本學習R的書,算是我看過的R中文書當中很好的一本,特別是案例的部份的學習價值就很高。基本內容都有提及一些我不熟悉的。例如時間和時間序列的類型、資料連接SQL資料庫、處理遺留數據等。
上月初,周末加班時就帶著電腦和書,在坐車時跟著書去嘗試。誰知把書放在椅背休息一下,落車時就忘了帶走。好在一星期後發現有人已經代為把書還了圖書館,感謝這個好心人。
首先跟著這本書試的是這一章「股票市場的預測」。 它是用quandmod套件中的getSymbols()功能獲得xts時間序列類型的股價資訊。建立一個自行定義的回報觀察值去衡量價格變動,再用常見的技術分析指標作變數,建立決策樹Decision Tree的模型。最後評價模型的預測誤準確度。
《巨量資料的第一步-R語言與商業應用》
《實戰Java-9個別具特色的實作經驗》
《Arduino錦囊妙計》
《Raspberry Pi 機器人自造專案》
這本學習R的書,算是我看過的R中文書當中很好的一本,特別是案例的部份的學習價值就很高。基本內容都有提及一些我不熟悉的。例如時間和時間序列的類型、資料連接SQL資料庫、處理遺留數據等。
上月初,周末加班時就帶著電腦和書,在坐車時跟著書去嘗試。誰知把書放在椅背休息一下,落車時就忘了帶走。好在一星期後發現有人已經代為把書還了圖書館,感謝這個好心人。
首先跟著這本書試的是這一章「股票市場的預測」。 它是用quandmod套件中的getSymbols()功能獲得xts時間序列類型的股價資訊。建立一個自行定義的回報觀察值去衡量價格變動,再用常見的技術分析指標作變數,建立決策樹Decision Tree的模型。最後評價模型的預測誤準確度。
訂閱:
文章 (Atom)