2016年7月29日 星期五

[電腦視覺] 卡曼濾波器 (Kalman Filter) 介紹


  • 文字介紹


網路上找到對於影像處理中一些名詞的解釋,讓我對於Filter的名詞由來有更好的理解
利用從第一筆資料到目前的資料,來估算之前某一時刻的狀態值, 這種演算法稱為smoothing
利用從第一筆資料到目前的資料,來估算目前的狀態值, 這種演算法稱為filtering
利用從第一筆資料到目前的資料,來估算未來某一時刻的狀態值, 這種演算法稱為prediction
 By 資料來源[1]

維基百科[2]的英文版對於卡曼濾波器有更詳盡的解釋

這篇Blog [3]算是[1]的詳盡版本

這份投影片[4]則包含卡曼濾波器的數學解釋

本篇Blog[5]採用圖解的方式解說卡曼濾波器

  • 影片介紹

 Lec 16 | MIT 18.085 Computational Science and Engineering I

Dynamic estimation: Kalman filter and square root filter


-------------------------------------------------------------------------

[1] Kalman Filter 簡介

[2] Kalman filter_Wiki

[3] 卡爾曼濾波器(Kalman Filter) 說明與介紹

[4] Kalman Filtering Tutorial (pdf)

[5] How a Kalman filter works, in pictures

2016年3月22日 星期二

[轉錄]比勤奋更重要的,是深度思考的能力

原文在此,幫助我自己能夠更進一步的文章,所以分享在部落格中

--------------------------------------------------------------------------
作者/sunco 原创来源/前进前进(ID:sun-keqiang)

有个朋友是个理想型的,有想法、有激情、爱折腾,他说想放弃现有工作去找一份天使投资的工作,虽没从事过类似工作,但凭借着内心力量的驱动,他花费了半个月时间研究一个行业,写了一份行业投资分析报告,随后投了份简历。

这哥们如愿以偿的收获了面试邀请,看他给我描述时的神态还是有点小激动的,就此可以说明那份投资分析报告获得了一定的认可。但面试时HR总监问了几个问题把他问蒙圈了。

HR总监:“对你影响最深的一本书是什么,什么书名,作者是谁?”
他回答说了书中的几个观点,然后又说作者确实想不起来了。
HR总监:“平时看科幻电影吗?”
他回答:平时工作比较忙,很少看电影。—多么冠冕堂皇的回答啊。
HR总监又问:“你对什么痴迷?痴迷到什么程度?”
他回答:除了工作、看些书确实没对什么事物痴迷过。

面完试他就觉得这些问题回答的很糟糕,心里有些隐忧。在返程的路上,他收到了HR总监的回复,说“通过和同事的综合测评,你的经历不合适这份工作。”。

他有点不甘心,问HR总监“为什么面试没通过呢?”,HR总监回答:“知识的深度和广度不够,缺乏远见。”这一句话刺醒了他,多么痛的领悟啊。

深度,广度,远见不仅刺醒了他也深深刺醒了我,他如此自己又何尝不是呢。

再仔细分析那几个问题,其实针对性很强的。问什么书对你影响最深,意在考察你对这本书理解深度,做天使投资理解深度深度思考是基本素质。问看不看科幻电影意在考察对未来的关注程度。拿这个标准来衡量自己,发现对很多问题思考程度都很肤浅,想到一、两层之后就很难再深入下去了。

平时也喜欢看书,也买了不少书,但基本等于白看,仅仅记住几个观点没深刻理解书中的体系结构,知识不成体系是没多大价值的。看了没真正消化,不试图深入思考、理解、消化变成自己的东西,本质上跟没看是一样的。

以前看过一篇文章叫“深度思考比勤奋更重要”,当时看完后也只记住这句话,没什么切身体会,但经过朋友讲述他的痛苦遭遇后发现这句话太有分量了。于是又在网上搜索这篇文章认真的看了几遍,这其实是篇演讲稿,是晨兴资本刘芹写的。

雷军给刘芹打了一个电话跟他说:“我一直认为你做投资是有自己的独到之处,你能告诉我,到底怎么样才能做一个成功的投资者?你为什么投资能做得非常不错呢?”

他当时给了雷军一个答案,“我相信我极其的勤奋。我相信天道一定能酬勤!我相信如果勤奋的话,你一定能做一个非常好的投资者。”他本来以为这个答案至少能得到雷军的部分认同,结果他没想到,雷军给了他一个让人惊讶的反馈。这个答案就是天道并非一定酬勤。这个观点当时给了他非常大的刺激。

后来慢慢明白了,可能勤奋是必要的,但是勤奋是远远不够的。

深度思考比勤奋更重要,但我认为深度思考决定人生,是的,深度思考决定人生。理解这句话需要明确几个概念,什么是深度?深度是触及事物本质的程度,深入理解事物本质是深,只了解事物表面是浅。

决定意思是起决定性作用,但不是绝对作用。人生不是完全由深度思考决定,但起到决定性作用。有些人不需要太深刻照样可以过的舒服自在,比如富二代、官二代,买张彩票中了500万,什么深刻不深刻对他们来说都是扯淡。

细细研究各个领域成绩斐然的大咖所做的演讲、写的文章无不是对某个领域深刻思考的结晶,思考的深度及远见一般人望尘莫及。

马云对电商的深刻理解及远见成就了阿里,周鸿祎对流量的深刻理解使入主奇虎前后发生天壤之别的变化,中航502所对离子发动机技术的深度研究和理解造出了世界最先进的离子发动机,使地球去火星的飞行时间缩短到39天左右。

但深度思考并不是深不可及的,我们通过努力,不断练习是可以获得的一项技能,一旦深度思考成为习惯人生将大不同。



深度思考需要的几个前提



1、内心意愿

再好的事自己不想做也无济于事,内心想有这个意愿才能开启思考之门。

2、深度思考是自己的事

上学的时候有这个感觉,觉得学习是给别人学习的。在学校老师逼着学,到家家长逼着学,写完作业了吗?不写完作业不准睡觉,考试不好回到家还得挨揍。

长大后才明白学习是自己的,人和人的差距也是在毕业之后发生的。那些把读书当成自己事的人,毕业后更懂得自学的人通常混的都不会太差。深度思考始终是自己的事,虽一开始很难深入时间久了有了自己的方法论也就不难了。

3、一个自己喜欢的领域

前两天看了一部电影《星际穿越》,没有那种强烈的使命感和对亲人的爱,库珀是回不到地球的,同样也谈不上拯救人类了。你选择的领域直接影响你日后成就的大小。

4、决心

光想是远远不够的,没有决心就会给自己找各种借口,我没时间,工作都累个半死还有心思想这个,今天不下定决心深入思考、研究明天迟早是要还的。

更重要的是想成事一定要早,时间不等人啊。不要自欺欺人,不深刻思考也能成就人生,成为人生赢家,真的是白日梦啊。上帝只做了两件事,一是创造环境,二是建立竞争,羚羊时时刻刻想着怎么跑过狮子,必须有这种决心,否则只会成为狮子的盘中餐。

找到自己深度思考的土壤,还得拥有一套开垦土壤的工具,即有一套深度思考的方法论。



深度思考的方法论



1、可繁殖的知识量

可繁殖的知识这个概念来源于李笑来,李笑来把知识分为两种,一种是不可繁殖的,一种是可繁殖的,比如秦始皇是哪年统一六国的,这种知识是不可繁殖的,但像深度思考比勤奋更重要就是可繁殖的,它可以让你提高、进步,让你变得更深刻。

不能深刻思考的根本原因是见识少,知识积累量不够。现在是信息爆炸的时代,每天都产生大量信息,但并不是每条信息都是有价值的,对充斥的信息首先要做的就是甄别信息有无价值,无价值可以不看,重点是看有价值的。

真正聪明的人都是下苦功夫的,曾国藩读书的原则是一本不点读完决不读下一本书,真正的好书不能求快,快即是慢,快即是无,理解最重要。

2、思考频次

针对问题多思、多想,思、想,思、想不动脑哪来的思想。李小龙曾经也说明过这个问题,他说不怕一个人会100种功夫,只怕一个人把一个招式练100遍。

好功夫需要速度、力量、技巧,练100种功夫每种都是浅尝辄止,不能实战,把一招练100遍往往可以一招致命。对一个问题若想深刻想个一两遍想不明白了,通常都是很痴迷的状态,除了睡觉不想其他时间都在思索。

3、多维度思考

从前,有五个盲人,从来没有见过大象,不知道大象长的什么样,他们就决定去摸摸大象。第一个人摸到了鼻子,他说:“大象像一条弯弯的管子。”第二个人摸到了尾巴,他说:“大象像个细细的棍子。”第三个人摸到了身体,他说:“大象像一堵墙。”第四个人摸到了腿,他说:“大象像一根粗粗的柱子,”。但他们摸到的都是大象的一部分而非全部。

思考过程就像是盲人摸象的过程,努力从多层次,多角度看待问题。要想多层次思考的跟自己较劲,不能想到一两层就饶了自己,想到一两层以后按照一定的逻辑关系,把所有的问题都想全了。认识大象的过程其实是人类拥有的三种逻辑思维之一的结构思考逻辑,按照结构思考逻辑把各个部分找全。

4、细节

笑傲江湖第二季有个表演者叫沈小龙,他把打喷嚏分解开来演,很好玩。有时候我们对问题认识不深,一定程度上是对细节不掌握,仅仅了解个笼统的概念不往深里追求,追的越深认识越深刻。事物的本质都是被一层一层表象包裹着,不追问到底还以为表象呈现的东西是事物本质呢,这就误导自己了。

深刻是一种态度,事事不求细节,很难想象他能优秀到哪儿去。

5、金字塔原理

金字塔原理是很好的思考和表达方法,在思考、表达的时候为什么要构建金字塔结构呢?

因为研究表明人类能够记住、理解最多的项目是7个,比如:你写了一遍文章或做个演讲,把下图的论据A、B、C、A1、A2、A3……,一股脑的讲出来、写出来恐怕别人很难理解的,所以需要把多于7个的项目通过演绎推理和归纳推理组合成几组,同组内的内容按照因果逻辑、结构逻辑、程度逻辑展开,然后以此类推。

人的思考过程都是自下而上的,金字塔原理观点先行,先提出观点,然后通过归纳和演绎思考论据,把论据找充分。

上层思想是下层思想的总结,下层是上层的解释,这种结构就是疑问\回答式,下层其实是对上层的回答。通过疑问\回答不断深入构成整个金字塔结构,写出一遍文章。

6、概念清晰

以前看过一本幼儿教育的书,在婴儿呀呀学语的时候父母说话往往都是把馒头说成馒馒、把虫子说成虫虫、把的凳子说成凳凳,这本书建议别用这种语言和孩子交流,是馒头就说馒头,是虫子就说虫子,是凳子就说凳子,语言基础是文字,文字是思想和逻辑的基础,概念清楚思想才能清晰、深刻。

7、写作

写东西是整理思路最好的方法,把所思所想讲出来、写出来与他人分享才能变成自己的。

在写东西的时候刚坐下来一点思路都没有,写着写着思路就打开了,写东西是深度思考的过程,它会把存储在大脑中的不同区域零散的知识点调取出来组合成有深度的思想体系。

2016年1月24日 星期日

[MATLAB] 常用指令表查詢

PTT MATLAB板上的 常用指令表整理

之前常犯錯的就是邏輯指令打錯

例如太習慣把不等於打成 != , MATLAB中的不等於是 ~=

而AND則是一個 & , OR是一個 | 

下次別再打錯囉

2016年1月18日 星期一

[Ruby On Rails] Todo list

任務目標

實做一個 : todo list

功能包含

  1. 可以使用 fb 登入 
  2. 建立個人專屬的待辦事項(包含事項:大綱,是否有打星星) 
  3. 待辦事項可以調整狀態(待做,進行中,完成) 可以根據狀態過濾待辦事項(i.e. 只顯示 進行中 的事項,或是顯示打星星的待辦事項) 
  4. 可以針對特定待辦事項留言 
  5. 其餘功能或未提到之畫面呈現可自由發揮
------------------------------------------------------------------------------------------------------

由於手邊並沒有Mac,所以決定練習採用雲端開發平台 (這算是PaaS嗎? 算了,名詞的東西,Fuck it)

至於是使用 Heroku 還是 Cloud9

我想說測試自己的極限在哪裡,所以都來試試看吧

不過我還是會先以 Heroku 這個最多人採用的平台當作首次初體驗

這篇就當作我這一個月以來的開發日誌吧,

不論結果是成還是敗,我至少都學到了寶貴的一課


2015/7月,重新讓我檢視了我自己,找到人生的樂趣與學習方法

我想,是時候走自己的路了

就從2016開始吧

註 : 

Heroku : Heroku是一個支持多種程式語言的雲平台即服務。在2010年被Salesforce.com收購。

Heroku 作為最開始的雲平台之一,從2007年6月起開發,當時它僅支持Ruby,但後來增加了

對Java、Node.js、Scala、Clojure、Python以及PHP和Perl的支持。 維基百科

Cloud9 : EdX線上課程 BerkeleyX: CS169.1x Engineering Software as a Service, Part 1採用Cloud9

---------------------------------------------------------------------------------------------------

2016/1/5 1/6

本週目標 :

任務 1-可以使用 fb 登入

任務 2-建立個人專屬的待辦事項(包含事項:大綱,是否有打星星)

個人感想 : 論文程式進度稍微有點進展,決定趕快開始著手完成任務1、2

想起大四時,在自己的ACER的windows NB上胡搞瞎搞,想用Rails建立一個簡單的blog就弄得

滿頭大汗。

所以這次經驗告訴我,要嘛使用MAC、Ubuntu不然就是線上編寫環境,做事前先把工具跟環

境準備好,才有機會事半功倍,更何況是我這種非資工系的門外漢。


Inside上面有一系列的文章,我把我看過的都PO上來。

有些是初學者可以拿來當作參考索引,有些拿來當故事看看即可,當作一個紀錄

Inside系列文章

學習 Ruby 與 Rails 的最佳時機就是現在!

Ruby語言的雲端運算平台:Heroku

【以ROR開發Facebook應用程式】Rails on Facebook for Beginners

【Facebook應用程式開發教學2】用Ruby on Rails輕鬆開發第一支App,傻瓜入門術!

初學者教學文章

Ruby on Rails 自學推薦資源以及注意事項  (該買Macbook了嗎...)

本文中有詳細列出一系列的技能需要學習者學會,尤其是Git這些是資訊工程師必備的技能

我沒有不掌握的道理

線上基礎課程

Xdite 所開設的 Rails 101


2016/1/7

按照 Heroku ,練習了佈署一個Hello World等級的應用程式

[Ruby On Rails] 如何在Heroku 上佈署應用程式

(1)遇到了 DL is deprecated, please use Fiddle 的問題,我確認了一下我目前Ruby的版本是2.1.5

雖然是一個警告,不是錯誤,但是看來真正的原因應該是我使用的OS是Windows。

(2) 在升級 rails 4.2 的時候,遇到了無法從 https://rubygems.org/ 下載資料的狀況



國外的鄉民也遇到了一樣的問題( gem unable to download data from https://rubygems.org/ )

好吧,先試試看如何解決無法安裝的問題,順便練習如何利用cmd從Github下載更新檔

額外課題 : 30天學會Git 


2016/1/8

了解各個資料夾內,檔案的用處。(From Railsbridge)



ihower網站上介紹的基本的MVC架構


在Stack Overflow搜尋碰到的問題

Ruby on Rails “Template is missing” Error
註 : 發現是中間步驟有漏,所以補上之後便沒有問題

Rails ExecJS::ProgramError in Pages#home?
註 : 經過測試,windows 平台上面,兩個application都要改成default

5    = stylesheet_link_tag    "application", media: "all"   -->  default
6    = javascript_include_tag "application"                     --> default

同時,將疑似Tab變成兩個空格

2016/1/10

*將檔案上傳到Github的指令,為了幫助自己之後複習,順便將指令copy下來


著手解決網頁沒辦上套上Bootstrap套件的問題。

2016/1/11
在RoR社群中提問,發現嘗試過改sass的Gem檔案並沒有效果。所以決定一怒之下,改用安裝需擬機,並運行Ubuntu14.04。在Windows上開發RoR,是

Ubuntu安裝RoR筆記 => 後來是在VMware player 12上順利安裝 Ubuntu 14.04

2016/1/12
終於順利在Ubuntu上面安裝完成
Ruby 2.1.5p273
rvm 1.26.11
Rails 4.2.5
git 1.9.1

2016/1/14
順利完成教學文章的前半部分,但是現在卡在無法順利render出 js.erb 的 FOO 小視窗。
後來發現是new.js.erb前面不小心加上了一個空白鍵,所以導致無法render出new的FOO 小視窗

另外,有加上了respond_to的ㄧ小段指令。詳細可以參考以下連結的說明
http://api.rubyonrails.org/classes/ActionController/MimeResponds.html

目前檢核自己的狀態,對於rails的基本概念還需要複習的更佳純熟
像是MVC、CRUD、RESTful這些基本觀念。當然還有Ruby以及JavaScript的基本觀念需要補強。否則開發的時候,絕對會不斷碰壁。

同時告訴自己,學習要腳踏實地,練習ㄧ次開發ㄧ個小的專案或是新功能
參考博文 : 軟體開發初學者如何順利完成自己的練習專案?

附上目前自己自修的教材

Ruby教學
HTML/CSS
Rails教學
2016/1/21

前幾天都在用Codecademy的教材惡補HTML/CSS 以及 Ruby 的基礎知識,目前進度大約已經完

成一半。

閱讀後,學習 Rails 的文章,我覺得不錯


What's the best way for a beginner to start learning Ruby on Rails? (Quora 討論串)

利用Rails 101課程,複習Rails的MVC觀念、RESTful

本週目標 : 完成能夠設定每個條目的狀態(Ex. 工作中,已完成)

找到網路上有一個Rails的開發者在它的網站上分享做Todo list,裡面實做也有完成與否的欄位

網頁連結在此 :  Week 6: How To Build A Todo App With Rails 4

2016/1/29 

研究進度關係,中間撥了ㄧ些時間去搞定Lab的工作

Facebook的認證是利用OmniAuth以及dotenv這兩個gem來完成

( 
dotenv的教學文 : https://goo.gl/kzqayu )

其中OmniAuth是用來處理FB的登入驗證,dotenv則是用來管理APP創造者不同網頁應用程式的

帳號資訊,避免重要資訊外洩

可以參考下篇 Stack Overflow上的問題

Facebook的login問題 (已解決)

Rails - Omniauth-facebook App_id required error

修正 : Favebook的KEY和SECRET在等號前號都不能夠有空白鍵(space),改謝Rails 新手村的大大 Tim Wu

2016/1/30 

Ruby on Rails - Railscasts #360 Facebook Authentication

按照Railscast的教學照做,絕對會做出一身病。因為版本上的差異,所以中間常常出現ㄧ些差錯

但是不得不提,自己在打omniauth常常會把auth打成outh...

以下附上今天遇到的問題

login using omniauth-facebook “undefined method `slice' for nil:NilClass” error

Rails 4.1.5 omniauth strong parameters

註 : 以railscast的程式碼無法運行,用以下的程式碼方可運行

where(provider: auth.provider, uid: auth.uid).first_or_create do |user|

2016年1月7日 星期四

[Ruby On Rails] 如何在Heroku 上佈署應用程式

在 Heroku 上開發 步驟 



1. Introduction


申請 Heroku 免費帳號,由於目前的開發環境是Windows,所以按照 Heroku 官網上面的 Getting Started with Ruby on Heroku (Microsoft Windows) 步驟安裝必要的程式。

JDK : JDK 我是安裝 Java SE Development Kit 8u66 (SE 65的程式無法執行,不明原因)。
因為所使用的主機windiws版本是64位元,所以下載x64的JDK檔案

Windows x64186.65 MB  jdk-8u66-windows-x64.exe

JRuby : 另外,因為JRuby的安裝程式無法偵測到Java Runtime Environment(jre),所以先安裝了Java (Version 8 Update 66),安裝完成後便可以執行JRuby的安裝程序,跑出如下圖的畫面。



Bundler : 在cmd 的小黑窗裡面,直接輸入 jruby -S gem install bundler 這個指令。
如果安裝完成,會顯示如下的畫面。
(像我這種用慣windows的一般安裝介面流程的人,應該會覺得只要在command window輸入一段指令,檔案就安裝完了,實在頗為神奇)



安裝步驟的部分就不一一詳細列出。

2. Set up


安裝 Heroku 在 local的 Heroku Toolbelt for Windows


安裝了之後,它可以幫助我們連結到 git 還有 Heroku Command Line Interface (CLI)。關鍵的是toolbelt是Heroku的local command,可以在local端上面執行自己打造的應用程式(app)。

3.Prepare the app 

在cmd視窗裡面輸入以下的文字,按下滑鼠右鍵,選擇複製,並在cmd視窗裡按下滑鼠右鍵,選擇貼上,便能夠直接貼上複製的文字到cmd視窗裡面

> git clone https://github.com/heroku/jruby-getting-started.git
> cd jruby-getting-started

這時便複製了Github裡 https://github.com/heroku/jruby-getting-started.git 這項條目的檔案到終端這邊。
接著,使用"更換目錄指令(cd,change directory的縮寫)"進入jruby-getting-started這個資料夾


4.Deploy the app



接下來便要練習佈署一個應用程式到Heroku上,並準備讓Heroku接受我們的程式碼。

> heroku create
Creating polar-inlet-4930... done, stack is cedar-14
http://polar-inlet-4930.herokuapp.com/ | https://git.heroku.com/polar-inlet-4930.git
Git remote heroku added

當創了一個應用程式,我們同時也創了一個 Git remote (叫作 heroku) 聯結到自己local端的資料庫(repository)。目前,Heroku會幫我們的應用程式產生一個隨機的名字。

接著,利用push指令將程式碼進行佈署的動作。執行結果的範例如下:

> git push heroku master
Counting objects: 176, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (113/113), done.
Writing objects: 100% (176/176), 31.81 KiB | 0 bytes/s, done.
Total 176 (delta 51), reused 170 (delta 48)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.2-jruby-9.0.0.0
remote: -----> Installing JVM: openjdk1.8-latest
remote: Picked up JAVA_TOOL_OPTIONS: -Xmx768m -Djava.rmi.server.useCodebaseOnly=true
remote: -----> Installing dependencies using 1.7.12
remote:        Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Picked up JAVA_TOOL_OPTIONS: -Xmx768m -Djava.rmi.server.useCodebaseOnly=true
remote:        Fetching gem metadata from https://rubygems.org/...........
remote:        Installing json 1.8.1
...
remote:        Installing sass-rails 4.0.5
remote:        Your bundle is complete!
remote:        Gems in the groups development and test were not installed.
remote:        It was installed into ./vendor/bundle
remote:        Bundle completed (162.29s)
remote:        Cleaning up the bundler cache.
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
...
remote:        Asset precompilation completed (107.72s)
remote:        Cleaning assets
remote:        Running: rake assets:clean
remote:        Picked up JAVA_TOOL_OPTIONS: -Xmx768m -Djava.rmi.server.useCodebaseOnly=true
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:        Default types for Ruby  -> console, rake, worker
remote:
remote: -----> Compressing... done, 97.9MB
remote: -----> Launching... done, v6
remote:        https://polar-inlet-4930.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/polar-inlet-4930.git
 * [new branch]      master -> master

最後會顯示成功佈署到主程式(master)。

OK,現在應用程式已經佈署上去了,接著輸入下面的指令確保程式正確的在local運行

> heroku ps:scale web=1

最後,輸入下面的指令,或是輸入正確的網址,就能夠在瀏覽器上面執行開發者自行打造的應用程式

> heroku open

執行結果
OK,很順利的在Heroku上面佈署了一個Hello World等級的網站。

如果去Heroku自己的個人帳戶中,找一下database裡面,剛剛所創造的網頁的資料,會發現,原來真正存放的資料庫是Amazon的AWS 雲端平台上。 Heroku則是一個中介商,幫助大家能夠更快速的佈署所開發的網頁到雲端主機上。

5. View Logs

Heroku 把過去的更動紀錄等,都按照時間編排。可以使用 heroku logs --tail 指令觀看過去的任何紀錄。




/* 載入prettify的autoloader */ /* 載入JQuery */