2015/07/31

神來一筆 有趣的釣魚簡訊

Phishing SMS Message

本來在Study一些別的東西要來寫網誌,但突然在Facebook看到朋友po的一個圖片,我就分心了…
所以今天的主題就改了一下!

(幫搜尋引擎轉成文字:http://cht.tw/h/10dvj)

愈不能玩就愈想玩!

每次看到這種就很想點下去啊!~ 但還是不要太衝動得好!
在家是用Windows,不像Mac有一些習慣的好用工具,但還是勉勉強強進行下去。

1. 這個網址是什麼?

家裡的電腦是Windows,好多習慣的工具都沒有(連telnet client都沒灌XD)
猜想這個網址應該不會有太大的問題,但還是先把browser的javascript, cookie...等都先disable (這邊我用的是Chrome的Web Developer這個plugin),然後去連這個網址,果然發現只是個中華電信的Download頁面。

2. 處理下載的apk

照片還apk咧!這麼累~ 跟我中午吃飯時跟同事聊天提到要寫一個 WhereIsPenny.apk 差不多蠢嘛!

寫過Android的人就知道,寫在client的code是沒有什麼密秘的!一切都是透明公開的!
所以我們就來看看這個公開的下載包裡面是什麼東西!

首先apk就是個壓縮檔嘛!就改個附檔名變成.zip,解開來看看,再來找個工具把classes.dex轉成jar。(但是這樣一些AndroidManifest.xml會是binary的,不能直接閱讀,所以其實也有Apktool可以幫你處理apk)

來看看他的AndroidManifest.xml

原來他叫自己"System 設備管理器"啊!然後執行下去8成就會先跳出要取得Device Admin的畫面吧!
看到SMS_RECEIVED大概就猜得到他要幹嘛了…

這個App的名稱叫"系統服務"…

3. 來看看他的source code…




簡單看了一下難閱讀的Code,應該大自上就是先取得Device Admin的權限,然後送個SMS告訴0987712963這個號碼說成功安裝了,之後再把你手機所有收到的SMS轉發一份到這個號碼…

結論

...
...
...
...
...
沒有出軌的照片嘛!白忙一場…

2015/07/30

[敗家] 溯溪鞋

這兩天發的文章都是跟"當大自然的小孩"有關的敗家文。
昨天收到LED頭燈後,今天是溯溪鞋!

這是我跟小柔第一雙同款同色的"情侶鞋"!一定要發文紀念一下!

根據常常趴趴照、跟溪邊很熟的同事Roger的忠告,第一個要買的不應該是頭燈,是溯溪鞋!
因為在溪邊安全最重要!一雙好的溯溪鞋可以帶你上天堂~

其實在買頭燈的同時我也已經下訂了,事前作了簡單的功課,簡單來說我的考量是:

  1. 長版還是短版
  2. 有釘還是沒釘
針對#1,有人的提議是看行動的方便性,長版包覆性較高,可以保護比較多的部位,避免被刮傷。但是個人覺得短版比較好看! XD
針對#2,有人說你去溯溪的話,千萬不要買有釘的,不然沒人敢讓你踩肩膀…,我們應該不會那麼激烈,偶爾還可以玩一下猜拳踩腳的遊戲(誤),所以選了有釘的!


在露天拍賣找了一雙基本有釘短版的,售價是380元,好便宜啊!

突然想起之前去龍洞跳水,租一次溯溪鞋要50元…借個7,8次就能買一雙了!

接下來就來開箱吧!





釘子看起來沒有很厲害,但用手摸的時候發現其實有些角度的切割還蠻利的,加上身體的重量壓下去,被踩到應該很爽…

穿起來的樣子,後面的尺寸標記是膠片,不是紙張哦!

情侶鞋!


同樣的一句話,就等假日去溪邊玩耍時,再來試試好不好用!



2015/07/29

[敗家] LED頭燈

我要買很亮的頭燈

星期日到坪林用手電筒克難的抓蝦、加上一直被旁邊露營的人用頭燈閃瞎好幾次後,回來就上網做了點功課,訂了頭燈。我要閃瞎蝦子!
今天上班前去便利商店拿到貨,所以就來個簡單的開箱。

頭燈的挑選

LED燈炮

一開始我是在PCHome購物查了一下,先是看到LED燈炮的不同規格…不了解他的差異,查了一下基本上就是:

V5>V4>V3>V2>U5>U4>U3>U2>T6>T5>T4>T3>T2>S6>S5>S4>S3>S2>Q5>Q4>Q3>Q2

至於L2是啥?
L2全稱XM-L2,
指的是一種LED形狀,
是XML形狀的升級版,
不一定比XML的亮。
總之…L2不代表亮度,只是個銷售手法。

但在PCHome24小時購物一定是比較貴的,先有個概念後,再進去露天拍賣找,這時候心裡已經打好主意,我要買U2的!!! 

電池

電池大都是18650鋰電池,拿出我近十年前買的軍用手電筒,也是用這一個型號的電池。
所以我的選擇最好是跟我的手電筒一樣用18650鋰電池 (這個規格較普遍且C/P值高)。
另外要注意的是,保護板,這個東西可以防止鋰電池被放電放過頭到壞掉。
有些價錢會有一點差距,要注意是不是電池用便宜的(沒保護板的)而造成的價差。

另外的考量

在找尋的過程中,發現有一款是可以裝在自行車上用的,我有時會騎腳踏車上下班,晚上基本上就是摸黑回家,似乎有點危險!(別人看不到我啊~)
所以這次挑選時,就選了一款是能裝腳踏車上,又能當頭燈的兩用款。

開箱嘍

到公司後,就先拍幾張開箱照!

這次我買的是這兩款,
美國大眼蛙XML-L2三星保護板大全配伸縮調焦強光頭燈 (藍色那個) 500元
美國XM-L U2 LED 2用頭燈旋轉調光 (紅色的,可自行車、頭燈兩用的) 650元


先開單純頭燈組的。

他的電池座是直接固定在頭帶的後面,有簡單的防潑水蓋子 (網站上是寫產品為生活防水不可落水或淋雨以免損壞),兩個全新的18650電池,裝上去後閃亮亮!亮度很滿意!網拍上是標L2,實際上亮度不輸U2。
藍色的頭可以伸縮調焦,外表的玻璃面是球面的,球到幾乎是半圓了。
這個頭燈可以往下調角度,有4段,最底就往下調個50~60度這樣。

再來是第二款兩用的頭燈,這款標的就是U2了,後面藍色的電池是四顆18650並聯+串接的,一開始在公司簡單的試燈的時候,發現很不亮,後來才發現是沒電,回家充滿電之後,一樣超亮!
但這款的電池要用他附的一個套袋裝著,騎車時直接固定在車的骨架上還ok,但頭戴時掛後面會覺得電池有點重…(畢竟是4顆)
頭燈固定的方式,是用強力塑膠圈,把圈圈兩頭分別勾在燈上的勾子上,然後繞過要固定的車架或是頭燈帶上圓圓的那個燈座。
在頭燈帶上固定上去後,要調角度還蠻方便的,就自由的轉(燈架上會有小刻度來固定)
PS. 頭燈網站上是寫說防水IP65,但因為電池的關係,我覺得我才不敢把這電池弄到水啊!

兩個頭燈的近照

下班時裝在腳踏車上的樣子!

晚上在蠻亮的路燈下,U2的燈還是能有這麼亮的效果!(最後一張手很抖請見諒)

結論

真的要買"頭燈",會推薦買藍色的那個,一整組的、旁邊由燈接到後面電池的線也是彈簧型的,不會有整線的問題,當頭燈用戴起來比較方便。
拆封的時候也覺得藍色的包裝比較好。

但頭燈這東西畢竟不是天天拿出來用的,所以自行車兩用款其實還是有他可取的地方!

實際上使用的情況,就等週末有去找蝦子的時候才知道嘍!





2015/07/28

Scala Dispatch 處理Gzip Json

Scala HTTP Client

在開發Scala的專案的時候,當我們需要使用HTTP Client時,有許多不同的選擇:

  • Dispatch — Library for asynchronous HTTP interaction. It provides a Scala vocabulary for Java’sasync-http-client.
  • Netcaty - Simple net test client/server for Netty and Scala lovers.
  • Scalaxb — An XML data-binding tool for Scala that supports W3C XML Schema (xsd) and Web Services Description Language (wsdl) as the input file.
  • Spray — Actor-based library for http interaction.
  • Tubesocks — Library supporting bi-directional communication with websocket servers.
  • scalaj-http – Simple scala wrapper for HttpURLConnection (including OAuth support).
  • Finch.io — Purely Functional REST API atop of Finagle.
  • Newman — A REST DSL that tries to take the best from Dispatch, Finagle and Apache HttpClient. See here for rationale.
我個人在幾個Projects中,是使用Dispatch這個輕量的Asynchronous HTTP Client,並搭配json4s來處理Json。

在Dispatch中如何處理Gzip Encoding?

Dispatch簡單好用也很輕量,但就因為太輕量了,並沒有支援Gzip的處理,今天這篇就來解釋我在使用Dispatch時是怎麼處理Gzip Encoding的。

Gzip Json Response

使用Dispatch,可以透過很簡單的就取得HTTP response的結果:

但若是想handle gzip的response呢?
這邊我們依照as.String的實作方式,寫了一個GzipJson,來判斷回傳的Header中的Content-Encoding是不是Gzip,然後再做相對應的處理:

在使用GzipJson處理Dispatch的response就只要像下面這樣的用方即可:

Gzip Json Request

但是在Request中要傳入Gzip的payload呢?
這邊實作了GzipHelper,並定義implicit function來讓使用上更方便:
實際上傳送gzip的payload方式如下:

參考資料

2015/07/27

Synology DS412+ 記憶體升級

背景

自從買了Synology DS412+之後,頭腦變清楚了、考試都考100分呢!
一直以來都用得很開心,但是從安裝Docker與GitLab套件之後,發現GitLab跑得有夠慢…
觀察了之後,發現記憶體好像不太夠?上網查了才發現原來可以自己升級記憶體!
(其實也是這次才發現…原來412+的Ram只有1G...

作功課

上網查了[整理] Synology NAS 相容 RAM Module 整理,知道可以升級Ram之後,就打算來升級,突然想到中壢的朱先生曾跟我說他有一條多的Notebook的Ram,就問了他還在不在,然後跟他約了週末拿這條Ram。全新未拆封!謝謝朱先生!


但是拿回來後,發現這是條DDR 1600的記憶體,到底我的NAS是支援到哪種RAM?
查了一下What kind of CPU does my NAS have,發現我的CPU是Intel Atom D2700 Dualcore (2C/4T) 2.13GHz x86 Processor,支援的記憶體是DDR3 800/1066…哇咧!

再上網查了一下到底能不能用…查不到!但應該能降頻跑吧?
身為一個喜歡嘗試、不怕死的人,先裝再說吧!

更換前

可以看到,在更換前,我的記憶體使量率達81%,而GitLab在記憶體的使用上,幾乎是不夠用的!這也是他速度非常慢的原因。

開始換記憶體

接下來就要開始換記憶體了!
怎麼拆? 本來我是查到這個[分享] 我終於把 Synology DS412+ 給拆了,但後來找到這個影片描述的更清楚:

在跟Ram合照完之後,就要來動工了!



的確在一開始拆殼的時候會花了比較多的時間(不敢太用力嘛…)
拆開了就順便把滿滿的灰塵給清一清。


Ram升級了,試運轉

終於裝好了之後,把NAS裝回去,先開機試一下…
藍燈一直閃…藍燈一直閃…藍燈一直閃…藍燈一直閃…

等了一分多鐘還在閃!!! 可能是不支援吧…
又強制關機,重新開機,還是一直藍燈後,我就放棄,把原來的RAM裝回去了…

但裝回去開機時,又一直閃,上網查了一下…
一查之下,查到了這篇請問為何我無法完成安裝 Synology 產品,而且 LED 燈一直不斷閃爍?
想嚇死誰啊!只是裝個不確定能用的RAM,怎麼可能燒掉!
就等查要怎麼處理時…突然NAS嗶了一聲!開完機了… = =
靠! 太久沒重開機,不知道應來閃藍燈只是正常的開機過程…要閃個2、3分鐘才會開好…

我就默默的再拆一次,再把新的RAM裝上去,這次等了3,4分鐘後,終於開好機了!

升級到DDR3 1600 4G的Synology 412+

開完機看了一下,RAM的使用率只有32%,Docker也很夠用,GitLab試了一下發現速度終於正常了!

結論

原來DDR3-1600 4G的RAM可以用在Synology DS412+!
原廠1G的RAM掰掰嘍!


參考資料

[散步日] 坪林 大溪地 抓魚抓蝦餵蟲記

自從跟小柔在一起一年左右的時候,我們就訂了每個月的最後一個星期六是散步日,這個散步日是一個把時間留給對方、跟對方好好聊天論討一些不同話題的日子,散步日的目的當然就是希望能讓兩人的感情變得更好!

今天的散步日的晚上,我們有一個比較特別的活動,就是去坪林抓蝦!

大溪地渡假村

至於要去哪抓蝦比較好?之前有問過常去抓蝦的同事Roger,他說他很常去坪林,所以就Google了一下,找到"大溪地"營地,晚上大約六點左右到大溪地,天色還是很亮的,下面這張照片是離開時補拍的,所以很黑…


一進去就有個阿姨來攔車,要收入場費,很客氣的問了我們,因為他們場地的規則就是一進來每個人要100元的入場費,停車一台車也是100元,我們兩人就要300元,但我們只是要抓抓蝦,而且又那麼晚了,有問我們能不能接受。

因為人生地不熟的,想使用他們的衛浴設備,而且想說很多人在旁露營發生什麼時也才有得求救!當下很ok的就付錢入場了。


我們到的時候裡面已經有好多人,營地上也搭滿了帳篷,裡面就是延著溪,靠近門口的地方比較深,進去一點比較淺,阿姨建議我們這種生手,先在淺一點的地方比較安全!而且我們也沒有頭燈,只有手電筒,想說還是不要去太深的地方好了。(她一度有說他的頭燈如果沒有要巡場的時候可以借我們用,但後來我們也沒去找她借。)


開始抓蝦嘍!

一看到水裡有魚之後,小柔就拿著網子就衝過去了!而且意料之外的是,天還沒黑就有看到小蝦子,然後又意料之外的好抓!蝦子的反應真的慢慢的,蠻容易抓的!


之前買的洗車用水桶派上了用場!


沒有準備頭燈,只有一支手電筒,但人總是會找到生存的方式,一手拿網子、一手拿手電筒+樹枝來趕蝦子,一樣能很順利的抓到蝦!


抓著抓著天就愈來愈黑了!附上一段現場錄的影片。


戰利品

因為在比較淺的地方(而且都固定在同個地方),大部份都是抓到小蝦!難得有一隻特別大的,抓到時好爽!

魚很難抓,因為動作很快,但是在兩人合力之下,居然用網子抓到一隻大的苦花(經Roger指認應該是馬口魚!),這個爽度比抓到大蝦還開心!


插曲

默默的發現蝦子會往上爬,想逃走…
我就把畫面用手機拍了下來,但看到照片的時候,突然驚了一下!啊底下那條魚是怎麼回事?在給我裝死嗎?

趕快打開手電筒,用樹枝戳了他,發現他真的死了!
5分鐘前還好好的在那邊游泳,怎麼突然就掛了!

然後仔細的看了一下…咦!之前抓的另一隻比較大一點的魚怎麼不見了?
到底是被其他的蝦子聯手幹掉的,還是這條苦花吞了另一條魚被噎死了 (我外行人嘛,有比較智障的想法請專業的人見諒!),實在不知道怎麼回事…

最後抓到晚上快九點,應該有抓了四、五十隻魚蝦們,在回去之前我們就把所有的戰利品又放回了溪裡,下次再來抓他們! XD

註:回家後就上網做了點功課、訂了頭燈!不久後可能就有開箱文了吧!


2015/07/25

[ScaVa->Scala] 什麼是Monad?

什麼是Monad?

我一直不想寫這篇! 因為這很難解釋…我自己查個半天網路上的解釋看的都眼花了。

不信? 你看看Wiki上的定義:

Monad,單元(unit)的拉丁語,來自範疇論的一種技術,其已經被採用作為處理在功能性程序設計語言中狀態的一種方式,其使用 monads 來構建包含必須以特定順序來執行的操作程序。Monads 在功能性程序設計中的主要應用是表達輸入/輸出和改變狀態而不使用帶來副作用的語言。一個 monad 由三部分組成:增加一個現有類型的意思,從原始類型的值中創建一個新類型默認值的意思,和對與新的類型一起工作的舊的類型的基本應用程序操作符的一個替代。

………看得懂有鬼! (不然就是我的語言理解能力太差)

若是以實例來了解Monad之後,再回來看這段文字,其實勉強可以猜出他的描述。

網路上找到的一些例子中,在Scala裡最常舉的例子就是Option和Future了,接下來我試著以我的了解來解釋。
  • Monad是一種Pattern,而他的目的,當然是想讓程式寫起來更簡單、看起來也更簡單,所以他把一些多餘的程式碼給省略,這也是Functional Programming的程式寫起來很精簡易讀的幫手之一。
  • Monad讓你把原來型態的物件多包起來,所以會看到M[T],這個M就是某一種Monad,而T是你原來物件的型態,像是Option[String],就是Option的Monad而裡面的型態是String。
  • Monad雖然幫你把他包起來,但還是能讓你處理原來的型態,甚至能轉換成另一個型態,使用map或flatMap之類的可以把M[A] 轉成 M[B],就像是Option[String]可以轉成Option[Int],而你只要寫"怎麼轉"就行了。
  • Monad在轉型之後的M[B]當然還是個Monad,可以繼續不斷的以Monad的特性處理下去。

Option Monad

寫過程式的人都一定知道NullPointException,有跟潮流的人也知道現在的趨勢是不要再亂丟null了。
早期寫C#就有Nullable的型態、Swift也有Optional,現在Java 8也有Optional的型態,在Scala中的Option主要的目的也是一樣,就是幫你把null包起來,然後可以進行下面這些的動作。
  • 可以透過 .isEmpty問問他是不是空值
  • isDefined看看他是不是有值
  • get去抓他實際的值
  • getOrElse抓值的同時如果值不存在順便回傳預設值。
但是若這樣在寫code的時候,就會像以下這樣:

這樣寫起來還是很麻煩啊! 一堆的if/else要判斷!
所以Option Monad提供的map, flatMap其實就幫你把if/else這些處理掉了! 你直接在map裡給他一個你要把Type A轉成Type B的實作就行了!

Future Monad

Future就是個未來嘛! 他也是一個Monad,所以他也能讓你在不管Future的情況下,針對裡面的東西做處理(或轉成別的型態)。

就好像是傳入一個function,而這個function定義的是"等你拿到這個值的時候,把這個值怎樣怎樣的處理",你的function只要專心的定義拿到值要怎麼處理就行。


看完了這些解釋,是否對Monad有些了解了呢? 這時候再去看一開始wiki那段文言文,應該比較有感覺了吧!

2015/07/24

[敗家] Panasonic MS-N53-S 廚餘機

去日本要帶什麼回來?

今年(2015)六月的時候,跟小柔一起去東京玩,大家都會去日本搬些3C、電器回來,吹風機、水波爐、Macbook…不過這次我的目標是"廚餘機"!


我們家會種菜,所以我媽媽平常就有在"堆肥",把廚餘丟進一個大箱子裡,讓他自然的腐爛、發酵,所以就養了一堆蛆…和有一堆叫不出名字的小蟲…,我都快崩潰了!

所以要去日本前就做好了功課,什麼爐都不搬了,我就要搬一台廚餘機回來!
這台Panasonic MS-N53在台灣水貨的價錢大約要18000~20000以上,網路上查了日本的售價後有便宜到48399日幣左右(以當時的匯率x0.2526大約是12,200多台幣)


我比較隨興,所以想說價錢網路上查到了,應該就差不多這樣,現場找到價差不要太大的買買就行!
誰知道……到了日本才發現跟我想的不一樣!

小柔很貼心,知道這是我來日本的蠻重要的一個目標,所以第一天到的時候,晚上就陪我去有樂町的BicCamera,想不到…看到的標價是76,000日幣(約19,200台幣),哇咧! 啊我在台灣買不就好了?


當下我覺得還好,就沒太在意,想說到時候再去別間看看就好了…想不到,隔天到阿美橫町的時候看到某間連鎖電器也有去找,但沒賣,不然就是看到的價錢居然都差不多…有的也要6萬多日幣。

晚上回飯店就開始擔心了…半夜不睡覺上網查不知從網路訂來不來得及,也傳訊息問在日本的朋友,後來得知可以殺價!

第三天跑去新宿,先是在山田電機找到了終於覺得可以接受的價錢(56,440日幣)了,不過還沒殺價,就想說先去晃晃別間,沒找到更好的再回來問。


找了另一間BicCamera發現沒貨,最後和小柔分頭行動,小柔去藥妝店,我去路邊的好像也是山田電機的LABI,發現也是個日幣76,000(打個叉叉)的高價,想說隨口殺個價,若可以殺到跟上一間差不多的價錢,也就能接受了啦…



當下找隨便抓了個路過的店員,(他好像很想落跑,但沒想到還是被我抓到),問了他這台的價錢,他就說等一下,就跑去問別人了… 等了三分鐘回來跟我說 72,000日幣哦! 我就拿手機給他看我第一張未稅48,399日幣的圖片,他思考了一下,拿了計算機按了按,又叫我等一下,這次去了5分鐘才回來,最後說他只能算我未稅54,000之類的(有點忘了確切的價格),我想了幾秒想說應該就這樣吧! 我不想再走路了…就跟他說"好! 我要!"

他又跑去找別人,然後另一個人要幫忙拿貨,他就陪我站著等,等超久的!! 應該有快10分鐘…然後很乾啊! 我就只好跟他亂聊,(他英文也沒很好,就用簡單的單字溝通,日本口音也很重)

我:這個賣得怎麼樣呀? 好不好啊?

他說:這個很好啊! 是日本製的! (廢話)

我:日本很多人買這個嗎?

他說:很少,大概才不到3%的人會買吧,因為家裡很小,沒有地方種東西。

我:哦哦~是哦~

他又說:很環保、很好!如果他家空間大的話、有花園的話,他也會想買。

總之就是乾聊了10分鐘之後…另個店員提著我的廚餘機過來,帶我去櫃台結帳!!

我也不知為什麼最後刷卡的總金額是 48,380日幣(12,220台幣)
可能是刷信用卡又有什麼折扣之類的吧…


我請他們幫我包裝成可以手提的,當天外面有飄小雨(雖然我過去的時候雨已經停了),但是他還是很貼心的幫我先把外面的束帶剪掉,用塑膠袋整個包起來、貼起來,再重新用束帶+兩個手提的握把給包裝起來。


然後我就提著這個13多公斤重的箱子去找小柔要逛新宿,後來發現完全不行啊!這超重的!
還好日本車站寄物櫃真的好好用,塞進去就可以繼續去玩耍!


開箱嘍!

回到台灣後就馬上開箱啦!








晚上睡覺前,把我家狗狗挑食不吃放到壞掉的飯+荔枝皮、果殼+少量其他廚餘丟了進去,按下開始運轉後就去睡覺,隔天早上起來廚餘就變成有淡淡香氣的"乾貨"了!


體積差不多變成原本的7~8分之1,網路有說可以少到變10分之1,當然也是要看你放的是什麼東西。

我家目前還是比較少開火,廚餘的量不會很多,所以目前是用個有密封蓋的塑膠桶放在冰箱,一但累積滿了,就丟去餵他吃!

這台有個功能,是"不要那麼乾",好像是更適合拿來做堆肥,但試過一次,發現真的還是有點濕濕的,而且會有點臭,所以現在都是用標準模式,讓他把廚餘給烘乾!



My World