2016年4月27日 星期三

[python] ipython notebook [NotebookApp] WARNING | Unreadable Notebook:.ipynb global name 'NBFormatError' is not defined

[python] ipython notebook  [NotebookApp] WARNING | Unreadable Notebook:.ipynb global name 'NBFormatError' is not defined

使用$  ipython notebook test.ipynb 時出現這樣的錯誤

使用
$ ipython --version
目前還在 2

ipython notebook 3 以後有個 breaking update


$ pip install ipython -U


$ ipython --version
4.0.0

這樣就可以開啟了

[python] No distributions at all found for entrypoints (from nbconvert->notebook)


No distributions at all found for entrypoints (from nbconvert->notebook)

如果在 pip install jupyter

出現一些錯誤的話,目前 notebook 版本是 4.2

如果 pip install ipython 也會出現錯誤的話


sudo pip install --upgrade setuptools pip
升級完你的 pip 與 setuptools 應該可以解決大部分的問題

IPython - Development - entrypoints error . . . .
http://python.6.x6.nabble.com/entrypoints-error-td5188980.html

2016年4月25日 星期一

The First 20 Hours 黃金20小時學習法 Josh Kaufman


從完全不會學習到初步成果到底要多久的時間投入呢?
古往今來 世界各地都在研究,如何更有效率的學習,更有效率的取得知識的方法與方針。

從 Anders Ericsson 教授提出的研究  "10,000-Hour Rule" 被 Outliers 異數 作者 Malcolm Gladwell 廣泛介紹後。
大家似乎開始有個誤解,這裡指的一萬個小時,是要成為專家,也就是透過這樣的投注,你就會變成該領域的專家。

但是,再學習各種新知,到某種程度呢?

Josh Kaufman 提出的關鍵黃金20小時,跟你講述,學習一樣新東西,只要搞要幾個步驟,就能夠在20小時得到一些成果。

1 deconstruct the skill

2 learn enough to self-correct
3 remove practice barriers
4 practice at least 20 hour

夠過四個步驟讓你快速學習

喬許的黃金20小時學習法即是以練習為核心,但要切記四大關鍵步驟,以學烏克麗麗為例,步驟會像這樣:
  一、取得不可或缺的工具:
  (一把烏克麗麗、調音器、備用琴弦、三本參考書。)
  二、決定學習成效目標:
  (10 天後在攻占世界高峰會自彈自唱「四和弦歌」。
  30天內練到可以在TED演講上表演一段。成果請參考:tedxtalks.ted.com/video/The-First-20-Hours-How-to-Learn)
  三、將這項技能拆解成幾項子技能:
  (左手按和弦、右手刷弦、熟悉旋律、記憶歌詞、自彈自唱。)
  四、20 小時的練習:
  .先從最常用的和弦及刷弦法練起
  .練到彈奏和弦和刷弦都不用看指板或琴弦(累計滿 2 小時)
  .練到不假思索就可以維持刷弦和改變和弦(累計滿 5 小時)
  .用邊彈邊哼的方式學歌,學習歌詞跟和弦變換重疊的地方
  .加進歌詞,一直到可以自彈自唱「四和弦歌」(累計滿 10 小時)
  .學習更多新歌(累計滿 20 小時)(更詳盡的學習歷程參見第八章)

  除了烏克麗麗之外,在本書中,你可以零距離看到喬許依「黃金 20 小時學習法」,在不到一年內成功學會了瑜伽、架站、圍棋、風帆衝浪、盲打。難以置信?這些好像不花個幾年難有所成的才藝,喬許真的都在 20 小時的練習後就上手。讀者可以用這個方法來學習任何感興趣的才藝,是的,任何才藝。你的願望清單布滿灰塵了嗎?趕快挖出來重新看一遍!

  ◎學習科學,「黃金 20 小時學習法」的10 大原則:
  一、選擇一項想學的技能或才藝
  二、一次只學一種
  三、決定學習成效目標
  四、將這項技能拆解成幾項子技能,從關鍵技能開始練習
  五、取得不可或缺的工具
  六、消除阻撓練習的障礙
  七、抽出專心練習的時間
  八、建立快速的回饋迴圈
  九、短時間的計時密集練習,一天最多 90 分鐘
  十、練習的重點是求多、求快
可以看一下,Josh Kaufman 在TEDx 的演講

Watch "The First 20 Hours - How to Learn Anything: Josh Kaufman at TEDxCSU" Video at TEDxTalks 20 min
http://tedxtalks.ted.com/video/The-First-20-Hours-How-to-Learn
博客來-學得快才會想學!:黃金20小時學習法
http://www.books.com.tw/products/0010617128


2016年4月12日 星期二

[machine learning]什麼是 Gradient Descent why and how

什麼是 Gradient Descent why and how

Gradient Descent
Gradient descent is an optimization algorithm used to find the local minimum of a function


這網頁裡有個使用二次方程式,精闢的使用程式與圖片來解釋  Gradient Descent 。
如何得在局部的最小值。

Paranormal Distributions
http://tillbergmann.com/blog/articles/python-gradient-descent.html



2016年4月8日 星期五

[raspberry pi][linux] 防止 ssh 暴力登入 fail2ban


因為 raspberry  pi 的 ssh port 開在預設的 22 port ,要連出的地方又有防水牆只能從 22 port 到 ssh

所以安裝了 fail2ban ,當重試多次錯誤就ban掉該ip

sudo apt-get install fail2ban


fail2ban - ban hosts that cause multiple authentication errors

關於 ssh ban的設定如下

$ vim /etc/fail2ban/jail.conf

#
# in /etc/fail2ban/jail.local.
#
# Optionally you may override any other parameter (e.g. banaction,
# action, port, logpath, etc) in that section within jail.local

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6


2016年3月26日 星期六

下一步 該往何去處 人生飄飄何所似



細草微風岸,危檣獨夜舟。星垂平野闊,月湧大江流。
名豈文章著?官應老病休。飄飄何所似?天地一沙鷗。

——杜甫.〈旅夜書懷〉


記 有感而發

這個號角吹響了 似乎更快的推著我往前進了。

幾年之後,又是要我還會在乎這時候的恥辱嗎?

或許是個加快腳步的節奏了。




2016年3月22日 星期二

七年了 記當年的你


今天的Google相簿的回顧,是北大的三角地,已經七年了。
這天是社團展覽的活動,看到了許多跟服飾文化協會的合照,還有到處尋訪的照片。

已經七年了,
最近得知你已經換了幾家公司,照片看來真的是春風得意。

已經七年了,
我回想的是當年的豪情壯志,而今,回顧自己,我內心深深覺得,是不是跟當年豪語有所差距。

事態上,心態上,自己都被這個環境逐漸磨平,磨著,磨著都好像看不見當時候意氣風發的自己。

我記得,我曾經告訴過你,我會繼續往大規模高效能運算前進,後來,順著我找到小時候的夢想,跟著想一窺搜尋引擎,資料處理的奧祕去了,剛好也趕上了一波時代的熱潮。

幾年過去,在變與不變得道路上,或許,都錯過了某些機會。

我想,回首當年,我最不想忘記的,就是那時候跟你的豪語與自己了。




2016年3月21日 星期一

[python][flask][jinja2] flask TemplateAssertionError: block '' defined twice 解決方法

[python][flask][jinja2] flask TemplateAssertionError: block '' defined twice 解決方法


在 使用 flask 的 template  Jinja2 中 如果出現了

 TemplateAssertionError: block 'title' defined twice

表示重複定義了 block title

    <title>{% block title %}{% endblock %} </title>
    <meta property="og:site_name" content="{% block title %}{% endblock %}  " />

但是如果想要在 template 中使用多次 一樣的區塊名稱呢?

可以使用 self 來調用


    <title>{% block title %}{% endblock %} </title>
    <meta property="og:site_name" content="{{ self.title() }} " />


python - Multiple blocks of same name in Jinja2 - Stack Overflow
http://stackoverflow.com/questions/1242239/multiple-blocks-of-same-name-in-jinja2

2016年3月20日 星期日

[python] regex find all ip and replace ip address 取代所有 ip address


[python] regex find all ip and replace ip address  取代所有 ip address 

regex
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

\1 是 match group 本身

如果只想找出 valid IP 可以使用下面這個正則表示式
On only valid IP's:
re.sub('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)','CENSORED_IP',data)

def replace_all_ip(html):
if html:
html = re.sub('([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})',r'<a href="https://myhome/\1">\1</a>',html)
'''
p = re.compile('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
iters = p.finditer(html)
for m in iters:
   #print m.group(),m.start(),m.end(),m.span()
   ip = m.group()
   ip_blok = '<a href="%s%s">%s</a>' % (site,ip,ip)
   html = html[:m.start()]+ip_blok+html[m.end():]
'''
return html


How to search for IPs in Files using Python? - Stack Overflow
http://stackoverflow.com/questions/11289901/how-to-search-for-ips-in-files-using-python

2016年3月18日 星期五

[linux][raspberry pi] 使用 Deluge 遠端下載 BT / raspberry pi 下載動物機

[linux][raspberry pi] 使用 Deluge 遠端下載 BT  / raspberry pi 下載動物機

安裝 deluged

$ sudo apt-get install deluged deluge-console deluge-web

裝好以後啟動 deluged

$ deluged

如果需要使用 web ui  使用 deluge-web 開啟 預設 port 8112

$ deluge-web

預設密碼是 deluge


deluge-console 則是使用 console 畫面觀看目前設定的情況


由於 Raspberry Pi 使用的環境是在內網,只有轉出 ssh port

使用 ssh 去做 port forward 到本機的 8112 port

ssh -L 8112:localhost:8112 pi@pi


Deluge: Web UI 1.3.10
http://localhost:8112/





2016年3月14日 星期一

[python] python 的 @classmethod @staticmethod 是什麼



python 的 @staticmethod 與 @classmethod 一直都是一個容易令人混淆的觀念。


舉個例子來說
  
#coding=python
class A(object):
    def foo(self,x):
        print 'this %s %s ' % (self,x)
    @classmethod
    def class_foo(cls,x)
        print 'this class_foo  %s %s ' % (cls,x)
    @staticmethod
    def static_foo(x):
        print 'this static_foo  %s %s ' % (x)



a=A()

a.foo(1) <---- v
a.class_foo(1) <---- v  自動帶入 a 當做 cls (self)

這個地方無法使用 A.foo(1)  會發生 TypeError

A.class_foo(1) 也可以呼叫

--------

而 staticmethod
不管使用
a.static_foo(1)
A.static_foo(1)

都是一樣的


装饰器@staticmethod和@classmethod有什么区别? | Stackoverflow about Python
Python 中的 classmethod 和 staticmethod 有什么具体用途? - Python - 知乎
https://www.zhihu.com/question/20021164

2016年3月12日 星期六

令人懷念的舊金山之旅



舊金山之旅
已經是一年前了

最近Facebook 一直跳出的提示,另外懷念這一場追尋夢想與探索之旅。

Pier 39





2016年3月11日 星期五

[linux][raspberry pi] cowsay install login prompt

如果想要在 login 時跳出一些有趣的 prompt

pi@raspberrypi[~]{15:38}(1)
$
 __________________________________
/ Someone is speaking well of you. \
|                                  |
\ How unusual!                     /
 ----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||



可以使用 fortune - print a random, hopefully interesting, adage 與
cowsay/cowthink - configurable speaking/thinking cow (and a bit more) 混搭

安裝

sudo apt-get install cowsay -y
sudo apt-get install  fortune -y

在 vim ~/.bashrc  最後面加上

fortune | cowsay

每次登入時,就會跳出一些有趣的提示了。


[mac] git commit --amend error: There was a problem with the editor 'vi'. Please supply the message using either -m or -F option.


mac 的 git 發生下面的情況

$ git commit --amend
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

解決方式

$ git config --global core.editor /usr/bin/vim

原因

Vim 在遇到 Exx Error 時返回 Non-Zero code 是為了兼容 Posix,不過這種情況應該只會出現在使用 Ex Mode 時,Normal/Insert Mode 是不會這樣的。

ref
Verdana Experiments » 修正 Vim(Mac) 有时无法正确提交 Git Commit Message 的问题
http://www.phpvim.net/app/vim/fix-issue-there-was-a-problem-with-editor-vim.html

2016年3月10日 星期四

[python] gspread.exceptions.SpreadSheetNotFound 解決方案

gspread 是 Google Spreadsheets Python API

burnash/gspread: Google Spreadsheets Python API
https://github.com/burnash/gspread

提供了一些 feature 來操作 google spreedsheets

Manage your spreadsheets with gspread in Python.
Features:
  • Open a spreadsheet by its title or url.
  • Extract range, entire row or column values.
  • Independent of Google Data Python client library.
  • Python 3 support.
如果再操作時發生
exceptions.SpreadSheetNotFound
的問題
往往可能是漏了一步,這個步驟在使用 google 的 service 很常遇到。

  1. Go to Google Sheets and share your spreadsheet with an email you have in yourjson_key['client_email']. Otherwise you’ll get a SpreadsheetNotFound exception when trying to open it.
也就是說 要把你在的 spreadsheet share 給 OAuth Credentials 內的那個 email 。
這樣你才能用 OAuth Credentials 來操作這個 spreadsheet 
ref
Using OAuth2 for Authorization — gspread 0.3.0 documentation

[python] ImportError: cannot import name SignedJwtAssertionCredentials 解決方法

如果使用 gdata-python-client 在執行範例檔發現

from oauth2client.client import SignedJwtAssertionCredentials

出現這樣的錯誤

ImportError: cannot import name SignedJwtAssertionCredentials


解決的方式
可以試著安裝oauth2client 1.5.2 的版本

pip install oauth2client==1.5.2


[raspberry pi] cron (CRON) info (No MTA installed, discarding output) 解決方法

raspberry pi 的 cron 執行 log 是放在  /var/log/syslog,可以在這裡查看。


Mar 10 15:51:01 raspberrypi CRON[1670]: (pi) CMD (/usr/bin/python /home/pi/cron/cron_forip.py > /home/pi/cron/cron_forip.log)
Mar 10 15:51:02 raspberrypi CRON[1663]: (CRON) info (No MTA installed, discarding output)


如果發現有 (CRON) info (No MTA installed, discarding output)
表示 raspberry pi  上並沒有安裝 MTA (sendmail ,postfix ...etc) ,當然,你可能不會想要在 Raspberry pi 上面安裝。

crontab -l

# m h  dom mon dow   command
0 * * * * /usr/bin/python /home/pi/cron/cron_forip.py > /home/pi/cron/cron_forip.log 2>&1

可以改採在 command 加上 2>&1 把 error log導出 讓 cron 不會寄信通知。

ps
當然也可以在 crontable 加上 MAILTO="" 

[raspberry pi] cron is not working / crontable 無法執行



如果使用 cron 執行 python script 但是發現無法順利運作
預設的 cron PATH 是  PATH=/usr/bin:/bin
可以在要執行的 shell 加上 PATH=/usr/bin:/bin:/sbin 或是在 cron file的最前端加上

有個範例

# m h  dom mon dow   command
0 * * * * /usr/bin/python /home/pi/cron/cron_forip.py > /home/pi/cron/cron_forip.log 2>&1

呼叫一個python 檔 ,但是裡面有 ifconfig

pi@raspberrypi:~ $ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
pi@raspberrypi:~ $ which ifconfig
/sbin/ifconfig

ifconfig 是放在 /sbin 下的 所以最好在 script內填上 full path  "/sbin/ifconfig" 來使用



console - Python problem executing popen in cron - Stack Overflow
http://stackoverflow.com/questions/1602830/python-problem-executing-popen-in-cron

2016年3月8日 星期二

mozart effect 莫札特效應 的曲子 K448 第二部分 Mozart - Sonata for Two Pianos in D major, K448


大家常聽到可以增加反應能力跟智力的莫札特效應。
其實原始的論文裡面,提到的是  Mozart - Sonata for Two Pianos in D major, K448 而且只有第二部分 才有增加反應與智力的效果。主要是因為他的頻率與風格 ,而 Yanni 的剛好與K448 的風格類似。每隔20~30 秒就有一個重複的旋律。


「莫札特效應」(Mozart Effect)一詞,最早來自1993年10月14日一期的美國《自然》(Nature)雜誌。該期雜誌刊登加州大學爾灣分校(University of California at Irvine)研究團隊Francis Raucher、Gordon L. Shaw、以及Katherine Ky(皆為博士)共同具名、標題為「音樂與空間專題表現」(Music and spatial task performance)的一頁專文,主要論點為,根據彼等的實驗結果,在考前聽幾分鐘莫札特D大調鋼琴奏鳴曲K448 ( Sonata for Two Pianos in D Major K448) 的大學生,在空間關係方面的考試上,表現比考前聽其他音樂家的音樂、或是沒有聽音樂的學生還要好。不過這個效應只是暫時性的,大約只能持續10至15分鐘。



莫札特K448實驗 聽音樂變聰明!│郝廣才在中視 20151118 - YouTube
https://www.youtube.com/watch?v=pFFIhb83Nx0
莫札特效應與雅尼的音樂  鄒元孝
http://www.ex-gio.org/index.php/best-article/179-best0025
Mozart - Sonata for Two Pianos in D major, K448 (2nd movement) - YouTube
https://www.youtube.com/watch?v=oMfvVDRfkv0

How Mozart K448 can increase your IQ – Listen & Try | Smart-Kit Puzzles and Games
http://www.smart-kit.com/s245/how-the-amazing-mozart-k448-can-increase-your-iq-listen-now/
Acroyali/Standing In Motion - Yanni (piano cover) - YouTube
https://www.youtube.com/watch?v=uPxO1Jz1yTA

2016年3月7日 星期一

[raspberry pi ] Raspberry Pi 3 使用 NOOBS 安裝 Raspbian




Raspberry Pi NOOBS Setup
  • 先準備好你的SD卡,使用 SD Formatter 4.0    格式化你的SD卡
  • 下載 NOOBS 檔案,解壓縮後,開啟資料夾把檔案都複製進 SD卡
    Raspberry Pi Downloads - Software for the Raspberry Pi https://www.raspberrypi.org/downloads/
  • 安裝好 Raspberry Pi 3  的周邊 ( HDMI接螢幕 鍵盤 滑鼠 電源 ) 把Micro SD卡插入
  • 電源插上就會開機了
  • 選擇 Raspbian 安裝 ,安裝完會跳OK 即安裝好,大概十五到二十分鐘左右。