2015年3月19日 星期四

Python note:lambda、filter、map、reduce

lambda:
匿名函數(wiki:匿名函式(英語:anonymous function)是指一類無需定義識別元(函式名)的函式或子程式,普遍存在於多種程式語言中。)
簡單來講就是將code當資料傳遞,且用完即丟
(ps: "()"代表可省略)
lambda ([函式名稱]) [傳入值] : [回傳]
example:
>>>lambda add x,y : x*y
>>>add(2,3)
5


filter:
過濾器,在眾多個元素中選出符合條件的元素
filter([條件] , [元素])
>>> filter(lambda x:x%3==1 , [1,2,3,4,5,6])
[1, 4]


map:
將運算套用在每個元素上,並傳回結果
map([運算] , [元素])
>>> map(lambda x:x*2, [0,1,2,3])
[0, 2, 4, 6]



reduce:
遍歷每個元素作運算,並傳回最終結果
reduce([運算] , [元素])
>>> reduce(lambda x,y : x*y,[1,2,3,4])
24


References:


Git新手實作教學(1)

#為什麼要叫新手呢?因為教的人是新手啊ヽ( ・∀・)ノ


Git安裝:
ubuntu直接下指令
apt-get -y install git-core git-doc git-gui gitk
其他的作業系統安裝請參考


Git設定:
輸入以下指令
git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"
上面兩個分別是設定username和email,這步驟一定要先作,要不然之後commit會出錯
設定完之後就可以開始使用了,一開始得先在你的專案下建立git的...
git init
這邊以ubuntu作業系統為例,首先在專案下建立一個README.md的檔案
vim README.md
輸入hello world後儲存離開
若不會使用vim者可以用記事本建立


Git查詢狀態:
git status
這個指令的用處是查詢目前檔案狀態,同時也會提示你下一步該怎麼做
這時候會出現以下訊息
Untracked files:
 (use "git add <file>..." to include in what will be committed)
意思是你還沒把新建的檔案加入容器中


Git添加、修改、刪除檔案:
可以使用
git add README.md
將README.md檔案加入git
這裡還有個更方便的快捷指令
git add .
意思是將所有新增或修改的檔案加入
任何的檔案經過新增或修改時,都必需要從新add
若要移除檔案也需要透過
git rm
來移除


Git提交:
當添加或修改完檔案時就可以將這次的動作提交並作紀錄
使用
git commit
會進到git內建的文字編輯器,在裡面輸入提交的訊息即可
但因為git內建的編輯器實在不怎麼好用,所以我習慣用快速指令
git commit -m ‘first commit’
這會直接提交單引號裡輸入的內容而不用透過編輯器
每一次的修改都需要經過git add和git commit來保存狀態,說實在還是有點麻煩
因此這裡有個快速指令
git commit -am 'commit text'
這相當於是使用
git add .
git commit -m ‘commit text’
兩個指令
但有個缺點就是,不適用新增的檔案
另外提交了話是要在有添增或修改或刪除時才可以提交


Git查詢commit:
指令
git log
git log HEAD^
可查看上一筆等同於以下指令
git log HEAD~1
git log HEAD~2
上面的指令可查看上上一筆,依此類推
更多git log的使用可參考

待續...

2015年3月18日 星期三

Python識別簡單的圖形驗證碼

其實以下內容主要都來自這篇 http://www.waitalone.cn/python-php-ocr.html 
但是原作者所用的開發環境是windows,身為Linux的愛好者當然要把他拿來Linux上玩玩
要使用這個套件首先需要安裝三個函式庫,分別為PIL、tesseract-ocr和pytesseract
很簡單的只要使用以下指令即可

sudo apt-get build-dep python-imaging
sudo apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev
sudo apt-get install tesseract-ocr
sudo easy_install pip
sudo pip install Pillow
sudo pip install pytesseract


安裝好後就可以開始寫code了,輸入以下

try:
    import pytesseract
    from PIL import Image
except ImportError:
    print "Error, Please install pytesseract and PIL"
    raise SystemExit
image = Image.open('captcha.png') #圖檔名稱
number = pytesseract.image_to_string(image)
print "The captcha is:%s" % number

若有顯示出名稱了話就代表成功辨識
於是就開始各種實驗了,試了以下圖片
print: The captcha is:231074
print: The captcha is:6K4L2
print: The captcha is:WMBHP
print: The captcha is:qub JD
print: The captcha is:
實驗結果:
看來成效不彰啊......( = A = |||
不過可以知道的是他支援可辨識的圖檔有.jpg .gif .png......其他還沒測試
那麼下次見吧 (´・ω・)

2015年3月12日 星期四

Eclipse Tomcat無法啟用解決辦法

最近在寫JSP的時候又遇到的一個問題
就是Tomcat無法開啟,他報錯的原因是因為8080 port被佔用了
可是明明昨天還好好的啊!
後來想到原來是早上在上課時老師要我們安裝其他協定
結果就把我的8080 port給占走了
後來把該協定停止運行後Tomcat還是開不起來
於是去查了之後發現可以用Docker模擬Tomcat環境解決問題
但是我現在急著就要測試我的專案啊!!!
於是就把課堂上安裝的協定移除(反正之後裝回來就好,而且又沒用到)
但Tomcat還是報同樣的錯誤,於是又開始爬文
最後找到了一個方法,照以下步驟

1. 關掉eclipse
2. 把Tomcat目錄底下的conf資料夾的內容全部複製到workspace/Servers/Tomcat v8.0 Server at localhost-config
3. 打開eclipse重新整理Servers資料夾
4. 開始Tomcat
5. 解決

這些步驟就是將Servers重新配置的方法
心得:看來要好好學習Docker了 (´・ω・)

Reference:
http://lucasterdev.altervista.org/wordpress/2012/05/12/could-not-load-the-tomcat-server-configuration-at-serverstomcat-v7-0-server-at-localhost-config-the-configuration-may-be-corrupt-or-incomplet/

2015年3月5日 星期四

Ubuntu下解決Google Chrome無法輸入中文

話說前幾天重灌Ubuntu的時候,安裝Chrome時
安裝完後發現我的Chrome竟然無法輸入中文!!!
但是在其他地方卻是可以使用中文的,因此確定是Chrome的問題後
重裝幾次、重開機幾次還是無法得到解決
後來爬文後發現是我的Chrome安裝錯誤
因為我的Chrome是32位元,但我電腦是64位元
因此把原先的Chrome移除後
在Terminal輸入以下代碼即可移除
sudo apt-get remove google-chrome-stable
接著重新安裝64位元問題得到解決

2015年2月24日 星期二

用Python爬的第一個網頁

利用Python爬最基本的網頁其實只用兩個步驟
  • 取得網頁內容
  • 解析他

而且從頭到尾只需要用到兩個類庫
(連結為API)

http://www.taiwanlottery.com.tw/news/DrawNumber.aspx 該網頁為例
其實就是取得樂透彩中獎號碼


其實整個實作的概念很簡單也基本,首先觀察一下案例網站的原始碼,找到我們要取出的內容,而我們要取出的內容就是那些樂透彩名稱、期號、中獎號碼,稍微觀察一下你會發現這些我們需要的內容都被<li>這個標籤給包圍,那麼現在我們要做的就是取得這標籤裡的內容物


開始來寫Code了


首先匯入urllib2,SGMLParser這兩個類庫
import urllib2
from sgmllib import SGMLParser


建立一個類來繼承SGMLParser
class Lottery(SGMLParser):
def __init__(self):
SGMLParser.__init__(self)
self.is_li = ""
self.name = []
def start_li(self, attrs):
self.is_li = 1
def end_li(self):
self.is_li = ""
def handle_data(self, text):
if self.is_li == 1:
self.name.append(text)

你會發現裡面的start_li、end_li、is_li的”li“就是我們要取得的標籤,也可以依照案例的不同而修改成其他的標籤,像是start_td、start_div等等
而name就是標籤裡的內容了


接著就是開始實作了,以下代碼為獲取整個網站內容
content = urllib2.urlopen('http://www.taiwanlottery.com.tw/news/DrawNumber.aspx').read()


開始解析內容
lottery = Lottery()
liottery.feed(content)
for i in liottery.name:
   i = i.replace(" ","")
   if '\n' not in i:
       print i


第一次執行會比較慢,只要沒馬上出現錯誤的結果都是好的
最終印出的結果如下

104
2
24
日獎號一覽表


大樂透


期別
104000021




本期中獎號碼
依大小順序排列:
28
39
41
46
48
09
39
28
03
48
41
49樂合彩


期別
104000021


本期中獎號碼
依大小順序排列:
28
39
41
46
48
39
28
03
48
41
4星彩


期別
104000047


本期中獎號碼
6
2
7
3星彩


期別
104000047


本期中獎號碼
2
3


今彩539


期別
104000047


本期中獎號碼
依大小順序排列:
12
14
23
27


14
23
12
11
39樂合彩


期別
104000047


本期中獎號碼
依大小順序排列:
12
14
23
27
14
23
12
11

References:
[Python] 超級基本的網頁抓取
http://rightthewaygeek.blogspot.tw/2013/09/python.html
Python写爬虫——抓取网页并解析HTML
http://www.lovelucy.info/python-crawl-pages.html



2015年2月23日 星期一

Ubuntu建造JSP開發環境



JSP的開發環境需要有以下三項


  • JDK
  • Eclipse JEE
  • Tomcat



Step1
安裝JDK

Step2
下載Eclipse JEE
下載完後解壓縮到你想放置的地方

Step3
下載Tomcat
選版本>Download>Core>tar.gz
解壓縮並將其放在你想放的目錄下

Step4
Eclipse設定Server環境
開啟Eclipse
Windows>Preference>Server>Runtime Environments
(因為先前已經設定好所以裡面才會有東西)
Screenshot from 2015-02-23 20:05:57.png

Step5
Add>選擇Tomcat版本>Next>設定Name>設定Tomcat路徑>設定JRE>Finish
Screenshot from 2015-02-23 20:28:16.png
Screenshot from 2015-02-23 20:30:24.png

Step6
建立JSP專案
File>New>Dynamic Web Project>Next>設定ProjectName>Finish
Screenshot from 2015-02-23 20:41:51.png

在你的專案裡找到WebContent資料夾,右鍵>New>JSP File>Finish
Screenshot from 2015-02-23 20:46:01.png

Step7
測試專案
選擇專案右鍵>Run As>Run on Server>finish
Screenshot from 2015-02-23 20:52:16.png
若出現網頁就代表成功了,如果出現的網頁顯示404也沒關係,因為你根本還沒寫內容上去

接著,好好享受JSP的開發吧!