tag:blogger.com,1999:blog-268918902024-03-13T14:16:14.132+08:00KalaG's BLOGkala雞腿堡的部落格kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.comBlogger297125tag:blogger.com,1999:blog-26891890.post-79166725296025919802018-07-02T10:55:00.001+08:002018-07-02T12:18:07.069+08:00NAS 碟更換紀錄2017年9月為了資料儲存以及架設個人網站之故,因此選擇加入NAS一族。當時上網作了功課,比較了<b>Synology</b>,<b>Qnap</b>等廠牌。最終買了<a href="https://www.synology.com/zh-tw/products/DS216play"><b>Synology</b> 216play+,2Bay</a>的系統。搭配了兩顆紅標<a href="https://24h.pchome.com.tw/prod/DRAB46-A9007YA9G?q=/S/DRAB46"><b>WD 3TB NAS</b> 專用碟</a>,三年保固。再使用近5000小時之後,DSM系統通知第一顆硬碟出現IO錯誤(第一顆就是最外側的硬碟),過不久出現壞軌,很快也到達50的上限。趁著學期結束課程停止,拆了硬碟至光華新天地6樓,<a href="https://www.wdc.com/zh-tw/about-wd/newsroom/press-room/2014-05-07-press-release-wd-customer-service-centre.html"><b>WD</b>維修服務中心</a>,從服務人員接單開始到拿到更換的全新硬碟,全程不到3分鐘,值得推薦,過程中服務人員一直強調資料很重要,因此對於他們的產品出現問題感到歉意,總體而言這次更換影碟的服務個人非常滿意,日後應該也會持續支持<b>WD</b>的產品。<br />
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="450" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3614.6769306513684!2d121.52974251500645!3d25.04503568396719!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3442a96351b88ab5%3A0xba7028f9e2961f3a!2zMTAw5Y-w5YyX5biC5Lit5q2j5Y2A5biC5rCR5aSn6YGT5LiJ5q61OOiZnzbmqJMy5a6k!5e0!3m2!1szh-TW!2stw!4v1530499352554" style="border: 0;" width="600"></iframe><br />
<br />
硬碟更換後,進入DSM,主選單->儲存空間管理員->儲存集區->動作->修復。等候約8~10小時,即可修復完成。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg99_-OBZM2Hta6hIArZuumtHXR7SZn9ZwllCJUgWlqRaVqbGWiCzo6pm277H_HYT3kRKkK6V0Si1nKp9dBFMK71yPu2A2Xq0ncjQ8TE_g1I105-u_AVNO-WyMQyhhAhtx0u79x/s1600/2018-07-02_104646.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="764" data-original-width="1269" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg99_-OBZM2Hta6hIArZuumtHXR7SZn9ZwllCJUgWlqRaVqbGWiCzo6pm277H_HYT3kRKkK6V0Si1nKp9dBFMK71yPu2A2Xq0ncjQ8TE_g1I105-u_AVNO-WyMQyhhAhtx0u79x/s640/2018-07-02_104646.png" width="640" /></a></div>
<br />kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-53560192846491547372017-08-31T15:53:00.001+08:002017-08-31T16:05:04.134+08:00採購法第72條之圖文不符<blockquote class="tr_bq">
機關辦理驗收時應製作紀錄,由參加人員會同簽認。驗收結果與契約、圖說、貨樣規定不符者,應通知廠商限期改善、拆除、重作、退貨或換貨。
其驗收結果不符部分非屬重要,而其他部分能先行使用,並經機關檢討認為確有先行使用之必要者,得經機關首長或其授權人員核准,就其他部分
辦理驗收並支付部分價金。 </blockquote>
<blockquote class="tr_bq">
驗收結果與規定不符,而不妨礙安全及使用需求,亦無減少通常效用或契約預定效用,經機關檢討不必拆換或拆換確有困難者,得於必要時減價收
受。其在查核金額以上之採購,應先報經上級機關核准;未達查核金額之採購,應經機關首長或其授權人員核准。
驗收人對工程、財物隱蔽部分,於必要時得拆驗或化驗。</blockquote>
<div>
近來工作上讓我重新看了<b>採購法</b>關於驗收的問題,其中驗收結果非屬<b>重要</b>,究竟由誰來認定是否重要?另外不妨礙<b>安全及使用需求,</b>此<b>安全及使用需求</b>的認定標準為何?通常效用或契約預定效用,都值得細細研究。</div>
<div>
<b>通常效用</b>:所謂通常效用指物之本身依物之使用方式應具有之效用。</div>
<div>
<b>預定效用</b>:通常效用外的保證就是預定效用。</div>
<div>
所以買了一輛腳踏車,若裝上附廠的輪胎,通常效用並不因此而減損,若是附廠表現更優時,又該何解?</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvRf3Ovddoc3DqJHQ_gHivu85wfqtfWcRlvMrkVTzkNghPFEsegpN06bqiQ6wVvAMIgIYf1TZzG6epi7iS11b_dblhEeA_eA-c2cR7Ypxq18xQDKleEX1WvhRrtBVrwUl-w3mR/s1600/P_20161010_134254.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvRf3Ovddoc3DqJHQ_gHivu85wfqtfWcRlvMrkVTzkNghPFEsegpN06bqiQ6wVvAMIgIYf1TZzG6epi7iS11b_dblhEeA_eA-c2cR7Ypxq18xQDKleEX1WvhRrtBVrwUl-w3mR/s320/P_20161010_134254.jpg" width="320" /></a></div>
<div>
<br /></div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-18168593761500473182017-03-21T09:26:00.001+08:002017-08-17T11:58:45.857+08:00如何將影像檔嵌入DWG中在描圖的過程中,常常會遇到圖檔打開後,往往會遇到原先貼附的影像檔只剩下路徑的窘境,該如何避免這個問題發生,直接講影像嵌入圖檔中是一個不錯的選擇,特別是在檔案需要多人協力操作時,使法能減少作業的困擾。實際作法如下:<br />
<br />
<ol>
<li>在檔案管理員在要嵌入的圖檔上按右鍵,選擇編輯,預設將由小畫家開啟此圖檔</li>
<li>在小畫家中全選(Ctrl+A)圖檔後,點選複製</li>
<li>在AutoCAD中選擇常用工具區知最右側貼上->選擇性貼上->調色盤圖形</li>
<li>OK</li>
</ol>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-7928388227840995502016-08-22T09:22:00.001+08:002016-08-23T09:06:37.417+08:00看不懂的新聞內容<div dir="ltr">
對於多數台大生來自於都會區,台大校長楊泮池表示,不能因為有錢,就不讓人念好學校。</div>
<div dir="ltr">
所以是台大有錢,還是學生有錢,還是都會區的學生有錢,我的文學素養不太好。</div>
<div dir="ltr">
台大生雙北占半大安區居冠 <a href="http://www.chinatimes.com/newspapers/20160822000345-260114">http://www.chinatimes.com/newspapers/20160822000345-260114 </a><br />
<br />
這是記者的問題呢?還是校長的問題,還是我的問題?</div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.comtag:blogger.com,1999:blog-26891890.post-35773106461207971772016-08-20T23:14:00.005+08:002016-08-20T23:15:54.723+08:00Mac OS 安裝Python<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg80Nt3krx-xf79dQ-BwlynMLJIk6jmgTm_ekjcgvXHVmvNQCAssGnFIVB7iQrbf-MPWjBm2P1DV7um0KBuskCXcEJMsghjIHuE2JplDMsomZt6B5j7FMYtonohUNazKfUGbHKD/s1600/images.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg80Nt3krx-xf79dQ-BwlynMLJIk6jmgTm_ekjcgvXHVmvNQCAssGnFIVB7iQrbf-MPWjBm2P1DV7um0KBuskCXcEJMsghjIHuE2JplDMsomZt6B5j7FMYtonohUNazKfUGbHKD/s1600/images.png" /></a></div>
再次拾起Python的學習,這次將平台移到了Mac上,因次需要瞭解一下如何安裝,在網路上搜尋到了<a href="https://stringpiggy.hpd.io/mac-osx-python3-dual-install/">這篇文章</a>,因此照著步驟裝好了,接下來要找一個IDE for Python,看來PyCham是個不錯的選擇,因此也把它安裝起來了,接下來就要開始繼續Python學習之旅.kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.comtag:blogger.com,1999:blog-26891890.post-45159215297719970642016-03-02T12:03:00.002+08:002016-03-02T12:05:25.254+08:00兩步驟解決外接硬碟無權限開啟的問題<span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">兩步驟解決外接硬碟無權限開啟的問題</span><br />
<span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;"><br /></span>
<span style="font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px; line-height: 16px;">Step1</span></span><br />
<ol>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">資料夾上按右鍵→內容→安全性→進階→擁有者→編輯</span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">勾選下方<b>取代子容器與物件的擁有者</b></span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;"><b>將擁有者改成user帳號</b></span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">確定</span><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;"> </span></li>
</ol>
Step2<br />
<ol>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">資料夾上按右鍵→內容→安全性→進階→權限→變更權限</span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">改成"完全控制"</span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">勾選下方<b>以這個物件的繼承權限取代所有子物件的權限</b></span></li>
<li><span style="background-color: white; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; line-height: 16px;">確定</span></li>
</ol>
<br />
<div>
<span style="font-family: helvetica neue, helvetica, arial, sans-serif;"><span style="font-size: 14px; line-height: 16px;"><br /></span></span></div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-63031359345092645152016-01-22T14:01:00.000+08:002016-01-25T12:33:28.857+08:00Google Education Workshop趁著學期結束的空檔,報名參加了<b>Google education workshop</b>,吸引我的原因除了參加免費以外,能在台北101@的77樓上課,也是令人感到興奮的原因之一。<br />
<div>
<br /></div>
<div>
傳說中Google的免費零食也出現在報到場外,正巧今日出門太晚,因此就地取食吃飽上課。咖啡為自助式,旁邊有一如便利商店之冷凍冰箱,內有多種飲料可供取用。</div>
<div>
<br /></div>
<div>
課程內容當然少不了Google自家人上場介紹,之後就是Google認證的Trainer進行授課。據講師所言,全球認證的講師約一千餘位,中文講師僅十餘位。主辦單位之一的eds是來自香港的公司,來台進行推廣。之後台灣的公司接力上場介紹<b>Master pano環景大師</b>,提供室內環景拍攝服務,可將校園內及教室宿舍內的場景記錄下來,經由認證通過的廠商製作上傳至Google Maps供人查詢瀏覽。<b><a href="http://www.hkmci.com/zh-tw/">Master Concept思想科技</a></b>,提供這樣的服務,也是本次Workshop主辦單位之一。</div>
<div>
<br /></div>
<div>
過程中關於Google表單的運用有介紹三個有用的外掛,<b><a href="https://www.nearpod.com/">nearpod</a></b>,<b><a href="http://www.flubaroo.com/">flubaroo</a></b>,<b><a href="https://www.goguardian.com/">GoGuardian</a></b>。此外也介紹了虛擬實境的運用<b><a href="https://www.google.com/get/cardboard/">Google Cardboard</a></b>,會中預購享有優待,這些都是不曾瞭解的內容,也是重大收穫。</div>
<div>
<br />
附記,101大樓設有幾處電梯轉運層,本次參加先由一樓入口搭乘電梯(四部一組,31人)到達59樓,再轉乘至77樓(四部一組,15人?)。</div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-15362383561807511692015-12-15T20:03:00.001+08:002016-01-20T17:12:42.643+08:00Cultural mandate 文化使命<p dir="ltr">創1:28 神就賜福給他們、又對他們說、要生養眾多、遍滿地面、治理這地.也要管理海裏的魚、空中的鳥.和地上各樣行動的活物。</p>
<p dir="ltr">God blessed them. God said to them, "Be fruitful, multiply, fill the earth, and subdue it. Have dominion over the fish of the sea, over the birds of the sky, and over every living thing that moves on the earth."</p>
<p dir="ltr">文化使命。<br>
人不僅要保護生態環境,也有責任為眾人的共善開發自然資源。</p>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-54069465505635561972015-12-04T13:34:00.001+08:002015-12-04T13:40:37.634+08:00i-gotU Q62智慧運動手環初體驗<div>
<b>緣起:</b></div>
由於原先配戴的手錶電池壽命耗盡,且因生鏽緣故無法更換電池,索性新購一隻智慧手環,以替代原有手錶的功能。初步設定功能如下,時鐘,計步器,睡眠紀錄,來電通知等,更重要的是工作時間不可太短。過去曾使用過沒有螢幕待機可達30天的小米手環,但是沒有螢幕無法查詢時間,因此小米手還不在考慮之列。由於要可以看時間,所以螢幕變成必須品,然而螢幕的顯示方式,牽涉可提供資訊的多寡,若為多行文字,則可更多通知的可能性。此外充電時間短,待機時間長也是必要的考慮因素之一。綜合以上需求,挑選了人生第一隻的智慧手環<b>i-gotU Q-Band X Q62。</b><br />
<div>
<b><br /></b></div>
<div>
<b>硬體:</b></div>
<div>
<b>igotU Q62</b>,採用鋰電池,低功耗之<b>藍芽4.0</b>,使得待機時間長達7~10天。說明書中指出,第一次使用時必須充滿電,充電時間預估約2小時;實際測試時僅需1小時多即可充滿。</div>
<div>
<br /></div>
<div>
具128 x 32 像素之OLED螢幕,(不知是否亦具有省電功效),可顯示兩行文字可以提供更多的訊息,此外由於具有螢幕,手機不在身邊時,亦可單獨,增加了產品的可用性。</div>
<div>
<br /></div>
<div>
產品本體上配有一顆按鈕,透過長按可以切換為日常、夜間、運動、小睡模式。其中夜間及運動模式時,會自動斷線,以節約電力。該產品亦具有紫外線警示,防水達IPX7防水,滿足一般使用上的需求。</div>
<div>
<br /></div>
<div>
隨機附送黑、藍、橘三色抗敏感型TPU腕帶,可隨心情自由更換,滿足不同場合的使用。</div>
<div>
<br /></div>
<div>
<b>軟體:</b></div>
<div>
該產品搭配自家開發之App,除可進行日期與時間的提醒外,搭配手機可訂多達4組的無聲鬧鐘。關於來電提示與訊息提示,均可透過App自訂是否提示,常用的軟體如Line,Facebook,Whatapp等都有支援,使用上相當方便。亦可邀請好又加入分享每日運動成果。</div>
<div>
<br /></div>
<div>
<b>使用心得:</b></div>
<div>
以產品價格功能與品質來說,個人覺得物超所值,值得購買,目前使用中無太大問題。若有問題會再持續上網更新資料。</div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-79629909750342087932015-11-05T13:10:00.000+08:002015-12-02T12:17:22.279+08:00Raspberry 初體驗入手了<b>Raspberry pi 2</b>,由於手邊沒有<b>HDMI</b>線,因此想嘗試使用沒有螢幕、老鼠、鍵盤的安裝方式。皇天不負苦心人,上網查了一下終於搞定,寫下筆記,擔心日後忘記,主要資料來源參考<a href="https://www.youtube.com/watch?v=xarq3PI5zTw">Youtube上的教學資源</a>。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/xarq3PI5zTw/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/xarq3PI5zTw?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
影片中介紹的軟體說明入夏:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>SDFormatter,格式化SD</li>
<li>Win32DiskImager,將 img檔,拷貝至SD卡中</li>
<li>Raspbian-wheezy.img,官網的作業系統 img檔</li>
<li>Advanced IP Scanner,搜尋指定網路區段中已連線或是未連線的裝置 IP</li>
<li>Putty,遠端登入文字桌面的工具</li>
<li>VNC viewer,遠端登入圖形畫面的工具</li>
</ol>
<div>
首先準備SD卡,最好是8G以上,上網下載 <a href="https://www.sdcard.org/downloads/formatter_4/">SDFormatter</a>,將SD卡格式化,之後運用Windows檔案管理員,選擇SD卡所在位置按右鍵,再次格式化為exFAT格式,可開啟快速化功能。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgflQ3385SYvPXaku67EGm36kkJ2gBs8S1Ny6clogv-BV9BFWOUVzv9UtbfEf9vDtpiMcY9FjXhpkSStGER-9tfMEJsgfdzgfmv-FboC0p5MrI2qfwm5ywiO3FlZ8p_BshIpEtP/s1600/FireShot+Capture+1+-+SD+Card+Formatter+-+SD+Associa_+-+https___www.sdcard.org_downloads_formatter_4_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgflQ3385SYvPXaku67EGm36kkJ2gBs8S1Ny6clogv-BV9BFWOUVzv9UtbfEf9vDtpiMcY9FjXhpkSStGER-9tfMEJsgfdzgfmv-FboC0p5MrI2qfwm5ywiO3FlZ8p_BshIpEtP/s1600/FireShot+Capture+1+-+SD+Card+Formatter+-+SD+Associa_+-+https___www.sdcard.org_downloads_formatter_4_.png" /></a></div>
<div>
<br /></div>
<div>
上<a href="https://www.raspberrypi.org/downloads/raspbian/"><b>Raspberry</b>官網下載RASPBIAN WHEEZY印象檔</a>,由於需指定開機印象檔,因此無法選擇NOOBS系統。下載完成後解壓縮在SD卡中。將SD卡放入Raspberry pi 2 Micro SD卡槽中,開機。並接上網路線,同時也要將電腦接上網路線。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXHBHdGNxkF2nOR8v_j7fdilMtrXCyAkZxt78QyBkfEHijWZvUabdurwvIwTVvAYTx6X8B1W7hQBPvzLlJl2qAQ8j7Ks7vHF8EhvFEcqmF7Hg_1z42x12R9jLkzRkmYuZouvJi/s1600/FireShot+Capture+2+-+Download+Raspbian+for+Raspbe_+-+https___www.raspberrypi.org_downloads_raspbian_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXHBHdGNxkF2nOR8v_j7fdilMtrXCyAkZxt78QyBkfEHijWZvUabdurwvIwTVvAYTx6X8B1W7hQBPvzLlJl2qAQ8j7Ks7vHF8EhvFEcqmF7Hg_1z42x12R9jLkzRkmYuZouvJi/s1600/FireShot+Capture+2+-+Download+Raspbian+for+Raspbe_+-+https___www.raspberrypi.org_downloads_raspbian_.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
執行Advance IP SCAN,掃描<b>Raspberry pi 2</b>,可以找到已經開機並上網的Raspberry IP位址。再利用Putty進行登入,第一次使用使用名稱為pi,密碼為raspberry。</div>
<div class="separator" style="clear: both; text-align: left;">
登入後,可設定VNC,以後就可透過遠端登入桌面囉~~</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
參考<a href="http://www.books.com.tw/products/0010650522">柯博文書籍</a>中的建議,登入系統後必須完成一些設定如下:</div>
<div class="separator" style="clear: both; text-align: left;">
指令sudo raspi-config</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>改變鍵盤Generic 105-key(這點我沒有看到畫面,不知那兒出了問題)</li>
<li>國家及地區建議設定English(相容性較佳)</li>
<li>改變語系zh_US.UTF-8</li>
<li>改變管理者密碼(改變一下吧,不然大家都知道是預設密碼)</li>
<li>啟動照相機(我還沒購買相機模組,所以沒設定)</li>
<li>啟動超頻(作者建議可以調到最高,因為好像也不會出問題)</li>
<li>擴大SD容量</li>
<li>啟動SSH</li>
</ol>
<div>
到此初步設定已完成,接下來就是要設定,讓Raspberry可以連上網路,並透過putty進行遠端登入操作。</div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-56777293780237360352015-09-23T14:24:00.000+08:002015-09-23T14:29:25.643+08:00在 Windows 防火牆中開啟連接埠<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.teampel.com/index.php/zh-TW/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjyjoI7mXLuWN29elT6mT2vZN1sgNob9pIgdXJmeMXrdMFNIfgvjqmpMSGiyCv5k8YcHoYn8IGQt0iNnzd7SdLdcG84GMF3FPPqfgRT-HRnz6vvFwiTrBkgkrEji-7w_AAQa3y/s320/%25E6%259C%25AA%25E5%2591%25BD%25E5%2590%258D.png" width="320" /></a></div>
最近在使用<b>Teampel</b>國產的群組工作軟體,因此試著安裝免費版使用,過程中,客戶端一直無法登入,後來發現是該軟體的登入連接埠為35000,因此必須將之打開才行。參考網址如下<br />
<a href="http://windows.microsoft.com/zh-tw/windows/open-port-windows-firewall#1TC=windows-7"><b>在 Windows 防火牆中開啟連接埠</b></a><br />
<br />
Windows 防火牆<br />
控制台-->Windows 防火牆-->進階設定-->具有進階安全性的 Windows 防火牆-->輸入規則-->新增規則,依照<b>新增輸入規則</b>進行操作。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF4juldJk3juaTjn7eBKLLYP9JyB-htB_PPPJse9Y8W99J13wcUF-FsFsnv0Lrr5L_mDJWl2wyRpPB2BCVY2QYa8xD_BVHflbvN2FaxeiFOgsQTdxxVBFTXGLFqTNT78dX-BJq/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF4juldJk3juaTjn7eBKLLYP9JyB-htB_PPPJse9Y8W99J13wcUF-FsFsnv0Lrr5L_mDJWl2wyRpPB2BCVY2QYa8xD_BVHflbvN2FaxeiFOgsQTdxxVBFTXGLFqTNT78dX-BJq/s320/1.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfYjoosAOkVXxfZ9JAbnNFrdMKku0001oO4T0axitaNiwE2-fVDo0lFnxit9uXox89riF2sdjx8dsMcDZU7dXWthNL45ca7uQG04zZM-qCSaSVWcBtCmTo6t4d-usxMKDUxxw-/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfYjoosAOkVXxfZ9JAbnNFrdMKku0001oO4T0axitaNiwE2-fVDo0lFnxit9uXox89riF2sdjx8dsMcDZU7dXWthNL45ca7uQG04zZM-qCSaSVWcBtCmTo6t4d-usxMKDUxxw-/s320/2.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglQMVpXMuz6TMbyqYQ7qBn_-_KlTxd4c_DxadE-lxrGGIpsTyhNzQCv5G3vdE6Uvntqry72-MEFoCLdvPXt6xL4zHrpg75h-4en6V4rMKvgXZUAlP5j68lBKgNHjtj3JbsVrQ/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglQMVpXMuz6TMbyqYQ7qBn_-_KlTxd4c_DxadE-lxrGGIpsTyhNzQCv5G3vdE6Uvntqry72-MEFoCLdvPXt6xL4zHrpg75h-4en6V4rMKvgXZUAlP5j68lBKgNHjtj3JbsVrQ/s320/4.png" width="320" /></a></div>
<br />kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-9618432233878073342015-09-11T16:03:00.001+08:002015-09-11T16:45:56.481+08:00專利達人講座<p dir="ltr">專利在於交換,政府為提高人民生活福祉,因此給與發明人專利權之保護。</p>
<p dir="ltr">自然界已有的(元素),純粹人為的規則(桌遊),治療診斷的方法不能提出專利的申請。</p>
<p dir="ltr">發明20/3,新型10/0.5,設計12/1,保護年限/申請時間。</p>
<p dir="ltr">發明包含了無形的方法(演算法、行銷、廣告、管理、規劃),新型只限實體的物件,設計則是物品的形狀花色等視覺效果。</p>
<p dir="ltr">專利的維護費逐年增加,希望你早點放棄。</p>
<p dir="ltr">設計專利包含整體設計、部分設計、成組設計、圖像設計(圖像、圖形化使用者介面)靜態動態均可、衍生設計(一系列的設計)。</p>
<p dir="ltr">校園內容易喪失專利的情況是論文。<br>
</p>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-72102664942540422872015-05-24T22:04:00.003+08:002015-05-24T22:04:40.519+08:00Blender Bump 貼圖<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj99tTlnmXj9oa3ofPFVtpqdBTR2KbFTenTeg3YMmGe9PP6amYC-0xBewaZ8mextyE-lvJUfspRhNftPutpppKnr0BpkFsbX87dpRyj4UBEsW004BfeuPMpcafMIzpXf_G9dttw/s1600/2015-05-24_220352.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="467" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj99tTlnmXj9oa3ofPFVtpqdBTR2KbFTenTeg3YMmGe9PP6amYC-0xBewaZ8mextyE-lvJUfspRhNftPutpppKnr0BpkFsbX87dpRyj4UBEsW004BfeuPMpcafMIzpXf_G9dttw/s640/2015-05-24_220352.png" width="640" /></a></div>
<br />kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-71679613431850766022015-02-06T12:23:00.001+08:002015-02-06T13:36:37.378+08:00Windows Nginx MariaDB PHP由於之前的系統中了CTB-locker病毒,造成電腦重灌,因此所有網站也趁機升級。於是參考了<a href="http://web.dhjh.tc.edu.tw/~gzqbyr/fluxbb/forums/viewtopic.php?id=305">這篇文章</a>,再加以客製一下,由於先前製作的網站,運用了<a href="http://pear.php.net/">PEAR</a>套件,所以必須要自行在安裝一次。茲將安裝步驟及網站升級後所遭遇問題紀錄如下。<br />
<br />
第一步驟 安裝PHP<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ0EpBOb9aJYTs2y4XMspHt91OwtZLXA8w0rFrLPY_85yrZ13CThoWhM6VBmGQr5CO4vRHOUUcNCcTN4ndoey7Z7oltsuTvOpwhdJZBSYl_HI7mZx0K2zkUdAsqKwqzg1brhjG/s1600/2015-02-06_121040.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ0EpBOb9aJYTs2y4XMspHt91OwtZLXA8w0rFrLPY_85yrZ13CThoWhM6VBmGQr5CO4vRHOUUcNCcTN4ndoey7Z7oltsuTvOpwhdJZBSYl_HI7mZx0K2zkUdAsqKwqzg1brhjG/s1600/2015-02-06_121040.png" height="201" width="320" /></a>首先下載<a href="https://drive.google.com/uc?id=0B5ViqeJXmDpdOHlrVng0TU5PbWc&export=download">CRLin製作好的lite版</a>,將原有的資料夾php改名為php.old,新建資料夾php。到控制台,移除程式選項中,檢查本機安裝的版本為2012,上網下載對應的<a href="http://windows.php.net/downloads/releases/php-5.4.37-nts-Win32-VC9-x86.zip">php5.4.37版V9</a>,試用過5.6版的會造成當機,只好下載5.4.37。解壓縮放在php資料夾中。<br />
<br />
第二步驟 安裝PEAR套件<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
首先下載<a href="http://go-pear.phar/">go-pear.phar</a>放在php資料夾中,執行cmd,進入監視器模式,切換到php資料夾,執行php go.pear.phar,選擇system安裝模式,按下enter開始安裝。接下來安裝套件。安裝方式為<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRxbFRboFZJlMgjjEzgjM_Mk12oScyCdCO74Fm0hFo2gTKY3S6ThNwVVePWhMua26mMqEELj9K5Y7G7Wd6uA4yqQZ38diLtLC3et2u1EzJx_424yr9tuAujwZNyri17yNtiHN/s1600/2015-02-06_122210.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRxbFRboFZJlMgjjEzgjM_Mk12oScyCdCO74Fm0hFo2gTKY3S6ThNwVVePWhMua26mMqEELj9K5Y7G7Wd6uA4yqQZ38diLtLC3et2u1EzJx_424yr9tuAujwZNyri17yNtiHN/s1600/2015-02-06_122210.png" /></a>pear intstall 套件名稱。我用的套件有Date, Auth, Benchmark, DB, HTML/Quickform, Pager,但是HTML/Quickform已經不更新了,所以我將舊的資料夾拷貝過來,新版的是HTML/Quickform2,下載安裝過,但是仍有許多不相容的問題,只好忍痛放棄。<br />
<br />
第三步驟 使用Adminer.php 管理MariaDB<br />
<br />
基本上只要將Mysql的檔案拷貝進去MariaDB/Data的資料夾中,就可以了。<br />
<br />
目前還在單機測試中,不知道放在網路上效果如何。<br />
<br />
開始測試網站時,發現了許多問題,首先是會出現<a href="http://www.php100.com/html/program/nginx/2013/0905/5516.html">413 Request Entity Too Large</a>,這是Nginx的錯誤,主要發生在上傳文件時發生,解決方式是找到nginx.conf,找到http{}區段,<br />
client_max_body_size 2m; 這個數字記得要和php的上傳設定匹配。upload_max_filesize = 2M。<br />
此外會出現PEAR packages and PHP 5.4 strict standards,這個問題的出現是因為升級到5.4版後,關於物件的呼叫方式的改變,最快速的修正方式,就是關掉php.ini中的錯誤提醒,display_errors = off。另外<a href="http://sofree.cc/output_buffering/">Cannot modify header information</a>,要該改php.ini,output_buffering=on。最後,<a href="http://alfredwebdesign.blogspot.tw/2013/05/php-notice-undefined-index.html">PHP Notice: undefined index</a> 的錯誤,要修改php.ini,error_reporting = E_ALL & ~E_NOTICE。kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-77286565239824781162015-01-17T00:03:00.000+08:002015-01-17T00:19:26.178+08:00MongoDB 無綱要文件導向資料庫<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_PU7AeblKhDK8zNwO6BhG2lejx_7cNvPvijSc7Y5NwcXyhxKoijvvektGeTp_XFSTOeJpopdV4c1wYCAWmceogX7ACWjEcf0XKJQD4gY1G0vAHpwJSMu4wLv6MHI257JGpz3/s1600/logo-mongodb-header.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_PU7AeblKhDK8zNwO6BhG2lejx_7cNvPvijSc7Y5NwcXyhxKoijvvektGeTp_XFSTOeJpopdV4c1wYCAWmceogX7ACWjEcf0XKJQD4gY1G0vAHpwJSMu4wLv6MHI257JGpz3/s1600/logo-mongodb-header.png" height="91" width="320" /></a></div>
最近學習Python的使用,解析的對象從我關心的世界遺產資料庫著手練習,目前已將所有的遺產基本資料與報告資料都解析完畢,並寫成Json格式的檔案,因為下一步就是要將資料庫導入。在調查了幾個資料庫後,目前選擇了<b><a href="http://www.mongodb.org/">MongoDB</a></b>。<br />
<br />
MongoDB 是一個無綱要的文件導向式資料庫。簡單來說,就是不用先設計資料結構,就可以使用的資料庫。這真的是令人難以想像,在程式設計師已使用了多年的關聯式資料庫之後,出現的這個新玩意,真是顛覆了傳統。<br />
<br />
幾經上網調查,發現<b>MongoDB</b>的使用者為數不少,市面上也有書籍可以參考,因此決定採用。也發現<b>Json</b>的資料格式,就是<b>MongoDB</b>的文件格式,真是令我又驚又喜。早在多年以前就曾經接觸過這樣的資料格式,只不過當時不以為意,沒想到這種格式會在今天已<b>Big Data</b>為考量之下,漸漸成為主流。<br />
<br />
相較於關聯式資料庫,文件<b>(Document)</b>相當於資料<b>(Row)</b>,集合(<b>Collection</b>)相當於表格(<b>Table</b>),不過厲害的是,由於無綱要的設計,資料庫的擴充性非常良好,目前也不清楚會有哪些可能的限制,總之做就對了。<br />
<br />
這是我的第一個練習程式<br />
<br />
<br />
<pre class="brush: py">import json, glob, codecs
import datetime
from pymongo import MongoClient
client = MongoClient("localhost", 27017)
db = client.wh
whIDSet = open('whIDAll.txt').read().split(',')
for whID in whIDSet:
whID = str(whID).strip()
print ("\nWe now process "+whID+'.html')
with codecs.open('json/threat/threat_'+whID+'.json','r',errors='ignore',encoding='utf-8') as json_file:
json_data = json.load(json_file)
json_data["Createdate"] = str(datetime.datetime.now())
db.basicdata.update( {"whID" : whID },{"$set":json_data}, upsert= True)
#db.basicdata.insert(json_data)
print("Processing Json_data: ",whID,'thread file')
json_file.close()
</pre>
<br />
筆記心得如下:
<br />
<br />
<pre class="brush: py">import json, glob, codecs
import datetime
from pymongo import MongoClient</pre>
<pre class="brush: py"></pre>
首先載入 json, pymongo package<br />
<br />
<pre class="brush: py">client = MongoClient("localhost", 27017)
db = client.wh</pre>
<br />
建立實例client<br />
指定使用之資料庫為wh<br />
<br />
<pre class="brush: py">whIDSet = open('whIDAll.txt').read().split(',')
for whID in whIDSet:
whID = str(whID).strip()
print ("\nWe now process "+whID+'.html')
with codecs.open('json/threat/threat_'+whID+'.json','r',errors='ignore',encoding='utf-8') as json_file:</pre>
<br />
接下來依慣例開啟遺產代號檔案逐筆讀入進行處裡<br />
<br />
<pre class="brush: py">json_data = json.load(json_file)</pre>
<br />
讀入Json檔案指定給Json字典<br />
由於檔案內有拉丁語系的文字,仍然必須搭配Codecs套件進行檔案讀取,以避免錯誤發生<br />
文件的格式類似pythonk的Dict,也就是{key:value}的組合,value可以是任何型態,包含串列list,以及另外一個集合Set,真是有趣的資料結構。<br />
將資料指定給鍵值時的語法為<br />
<pre class="brush: py">json_data["Createdate"] = str(datetime.datetime.now())</pre>
<br />
將鍵值放在中括弧內,值放在等號右邊即可<br />
<pre class="brush: py">db.basicdata.update( {"whID" : whID },{"$set":json_data}, upsert= True)</pre>
<br />
將資料已新增的方式增加到原有的basicdat表格中,並使用whID作為更新的鍵值,關鍵在$sec的參數,就是要新增資料到原有的文件之中,就這樣文件就長大囉。<br />
<pre class="brush: py">#db.basicdata.insert(json_data) </pre>
<br />
若是建立一個新的文件就是使用這一行囉</div>
<div>
<br /></div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-13229433749113793012015-01-16T23:32:00.000+08:002015-01-16T23:50:22.308+08:00Python 網頁內容擷取練習<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<html><body><br />
<div class="aname"><br />
<div class="bname"><br />
<h5><br />
<a class="cname" href="https://draft.blogger.com/url_a0">aTitle</a></h5><br />
</div><br />
<div class=""><br />
<div><br />
<img src="url_a1" />img_text</div><br />
<div><br />
<strong>label_a1:</strong>text_a1</div><br />
<div><br />
<strong>label_a2:</strong>text_a2</div><br />
<div><br />
<strong>label_spe:<a href="https://draft.blogger.com/url_a2">*</a>:</strong><br />
<span class="box-span">spantext_a1</span><br />
<span class="box-span">spantext_a2</span><br />
<span class="box-span">spantext_a3</span><br />
<br />
</div><br />
</div><br />
</div><br />
<div class="aname"><br />
<div class="bname"><br />
<h5><br />
<a class="cname" href="https://draft.blogger.com/url_a0">aTitle</a></h5><br />
</div><br />
<div class=""><br />
<div><br />
<img src="url_a1" />img_text</div><br />
<div><br />
<strong>label_a1:</strong>text_b1</div><br />
<div><br />
<strong>label_a2:</strong>text_b2</div><br />
<div><br />
<strong>label_a3:</strong>text_b3</div><br />
<div><br />
<strong>label_spe:<a href="https://draft.blogger.com/url_b3">*</a>:</strong><br />
<span class="box-span">spantext_b1</span><br />
<span class="box-span">spantext_b2</span><br />
<span class="box-span">spantext_b3</span><br />
<span class="box-span">spantext_b4</span><br />
<span class="box-span">spantext_b5</span><br />
<span class="box-span">spantext_b6</span><br />
<br />
</div><br />
</div><br />
</div><br />
</body></html><br />
<div>
<br /></div>
<br />
我想要的結果是<br />
<pre>aTitle
url_a0
label_a1:
text_a1
label_a2:
text_a2
label_spe:
spantext_a1
spantext_a2
spantext_a3
aTitle
url_a0
label_a1:
text_b1
label_a2:
text_b2
label_a3:
text_b3
label_spe:
spantext_b1
spantext_b2
spantext_b3
spantext_b4
spantext_b5
spantext_b6
</pre>
<br />
百思不得其解,最後上了<a href="http://stackoverflow.com/questions/27845376/how-to-find-text-in-specific-nested-tag-wih-lxml-and-pyhthon">Stackoverflow</a>發問,高手回答如下:<br />
<pre class="brush: py">import xml.etree.cElementTree as etree # or: from lxml import etree
body = etree.parse('test.html').find('body')
for aname in body.iterfind('*[@class="aname"]'):
cname = aname.find('*[@class="bname"]//a[@class="cname"]')
print cname.text # title
print cname.get('href') # url
for div in aname.iterfind('div[@class=""]/div'):
strong = div.find('strong')
if strong is not None:
print strong.text # label
text = div[0].tail.strip() # http://stackoverflow.com/a/9674097/4323
if text:
print text
else:
for box in div.iterfind('*[@class="box-span"]'):
print box.text
print
</pre>
可惜當我將真實的網頁資料套用進來,卻發生解析錯誤,這次我才終於了解所謂的容錯能力的重要性。回過頭來,還是決定自己土法煉鋼一番,使用<b>BeautifulSoup</b>來進行解析。終於皇天不負苦心人,被我寫出來囉。雖然程式碼有點長<br />
<pre class="brush: py"># -*- coding:utf-8 -*-
from pyquery import PyQuery as pq
from langconv import *
import codecs
import time
import urllib.request
import random
import re
from bs4 import BeautifulSoup
import lxml
import json
TJson = {}
YJson = {}
YThreats = []
Report = {}
YearReport = []
Threatsets = ['Year:','Document Source:','Other Threats:','Threats:']
def make_tjson_dict(title, content):
if title not in Threatsets:
#make json file with basic data =======================
print
if title == "Year:":
print(content)
if title == "Document Source:":
YJson["DocumentSource"] = content
if title == "Other Threats:":
YJson["OtherThreats"] = content
if title == "Threats":
YThreats.append(content)
whIDSet = open('whIDAll.txt').read().split(',')
for whID in whIDSet:
print("\nWe processing "+whID+'.html', 'now')
f = codecs.open('html_threat/'+whID+'.html','r',errors='ignore',encoding='utf-8')
soup = BeautifulSoup(f.read())
for boxcontents in soup.findAll("div", attrs={'class': 'box'}):
for tt in boxcontents.findAll("div", attrs={'class' : ''}):
for lt in tt.findAll('div'):
ts = lt.get_text().strip()
if ts[0:7] != "Threats" and ts != "":
endp = ts.find(':')
if endp == -1:
##print(lt.get_text().strip()) #Country Name
make_tjson_dict(lt.get_text().strip(), "")
else:
##print(lt.get_text()[0:endp+1].strip()) #Other Threats and Document source
##print(lt.get_text()[endp+1:len(ts)].strip())
make_tjson_dict(lt.get_text()[0:endp+1].strip(), lt.get_text()[endp+1:len(ts)].strip())
if lt.get_text()[0:endp+1].strip() == "Year:":
thisYear = lt.get_text()[endp+1:len(ts)].strip()
elif ts[0:7] == "Threats":
##print("Threats:") #Threats
for th in (lt.findAll('span')):
##print(th.get_text())
make_tjson_dict('Threats',th.get_text())
#print(YThreats)
tt = YThreats
YJson["Threats"] = tt
Report[thisYear] = YJson
YJson = {}
YThreats = []
TJson["YRepo"] = Report
TJson["whID"] = whID
outputjson = codecs.open("json/threat_"+whID+".json", "w",errors="ignore",encoding='utf-8')
json.dump(TJson, outputjson, ensure_ascii=False, indent=4)
outputjson.close()
#Delete all List value
TJson = {}
Report = {}
YearReport = []
f.close()
#time.sleep(2)
print('Finish processing file: '+whID+'.html\n===============================\n')
</pre>
<br />
經過了這幾次的練習,深深發現寫程式的愛恨情仇,常常時思考的時間多於真正寫作的時間,有時候又為了解決一個不尋常的例外,必須讓程式多謝判斷的能力,因此程式就越寫越肥了~~下一個目標就是將資料導入到<b>NoSQL</b>, 目前看中的是<b>MongoDB</b>。kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-26297484809549864162014-12-30T23:11:00.001+08:002014-12-30T23:20:30.775+08:00手動安裝 BeautifulSoup 模組<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.crummy.com/software/BeautifulSoup/bs4/doc/_images/6.1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://www.crummy.com/software/BeautifulSoup/bs4/doc/_images/6.1.jpg" /></a></div>
最近為了解析網頁資料,原先使用了PyQuery套件,但是許多功能試了又試,始終沒有突破,因此想試試看別的解析套件。搜尋了網路上,可以找到比較多關於BeautifuSoup的範例程式,因此想下載來試試。<br />
<br />
正當使用easy_install.php BeautifulSoup,竟出現錯誤,換成pip install BeautifulSoup,結果也是以失敗收場。<br />
<br />
上了<a href="http://www.crummy.com/software/BeautifulSoup/">官方網站</a>看看,決定試試手動安裝。首先下載最新版的<a href="http://www.crummy.com/software/BeautifulSoup/#Download">BeautifulSoup</a>套件,解壓縮之後,輸入<br />
<br />
c:\python32\python c:\BeautifulSoup\setup.py install<br />
<br />
不用多久的時間就安裝完成了。<br />
又多學會了一招。<br />
<br />
後記<br />
原先安裝失敗的原因是沒有打上正確的版本號碼,因次找不到套件,自然就安裝失敗嚕 <br />
<br />
<blockquote class="tr_bq">
c:\Python32\Scripts>pip install beautifulsoup4<br />Downloading/unpacking beautifulsoup4<br /> Running setup.py (path:C:\Users\kk1\AppData\Local\Temp\pip_build_khweng\beauti<br />fulsoup4\setup.py) egg_info for package beautifulsoup4<br /><br />Installing collected packages: beautifulsoup4<br /> Running setup.py install for beautifulsoup4<br /> Skipping implicit fixer: buffer<br /> Skipping implicit fixer: idioms<br /> Skipping implicit fixer: set_literal<br /> Skipping implicit fixer: ws_comma<br /><br />Successfully installed beautifulsoup4<br />Cleaning up...</blockquote>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-92137264869248446002014-12-26T17:40:00.001+08:002014-12-27T01:39:26.910+08:00Python 擷取網頁資料 World Heritage<pre class="brush: python"># -*- coding:utf-8 -*-
from pyquery import PyQuery as pq
import urllib,sys,os,codecs
#q = pq(url='http://whc.unesco.org/pg.cfm?cid=31&l=en&&&&mode=table')
f = codecs.open("testListAll.html",'r',errors='ignore',encoding='utf-8')
q = pq(f.read())
qtable = q.find('table.tableaux').remove('href')
qb = pq(qtable).find('tr').next()
YearSet = set()
NameSet = set()
CountrySet = set()
TypeSet = set()
RegionSet = set()
IDSet = set()
for fyear in range(1978,2015,1):
fname = str(fyear)+"whlist.csv"
f = codecs.open(fname,"w",errors="ignore",encoding='utf-8')
f.write('Year,Name,Country,Type,Region,Property,ID\n')
print("Year :",fyear)
for i in qb:
if qb(i).find("td").eq(0).text() == str(fyear):
tYear = qb(i).find("td").eq(0).text()
tName = qb(i).find("td").eq(1).text()
tCountry = qb(i).find("td").eq(2).text()
tType = qb(i).find("td").eq(3).text()
tRegion = qb(i).find("td").eq(4).text()
tProperty = str(qb(i).find("td").eq(5).text()).split(',')[0]
tID = qb(i).find("td").eq(6).text()
#print (tYear+','+tName+','+tCountry+','+tType+','+tRegion+','+tProperty+','+tID)
#f.write(tYear+','+tName+','+tCountry+','+tType+','+tRegion+','+tProperty+','+tID+'\n')
YearSet.add(tYear)
NameSet.add(tName)
CountrySet.add(tCountry)
TypeSet.add(tType)
RegionSet.add(tRegion)
IDSet.add(tID)
f.close()
print (sorted(YearSet))
print (sorted(CountrySet))
print (sorted(TypeSet))
print (sorted(RegionSet))
print (sorted(IDSet))
print ("There are total",len(NameSet),"WH in",len(CountrySet),"Countries.")
</pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB_cJAEnmEWWO9SSu7zqI03f3F_N6ykO-rcZacYGKzTuY4k275TCGDalZ-BxcbNCDO1QouUTXTL_OLObuYZgtLyFFw72JLTjh50FrGlp58N2AE2-d_ZHR5170QnzxFZ9lYndVN/s1600/2014-12-26_180557.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB_cJAEnmEWWO9SSu7zqI03f3F_N6ykO-rcZacYGKzTuY4k275TCGDalZ-BxcbNCDO1QouUTXTL_OLObuYZgtLyFFw72JLTjh50FrGlp58N2AE2-d_ZHR5170QnzxFZ9lYndVN/s320/2014-12-26_180557.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="background-color: white; font-family: arial, verdana, sans-serif; font-size: 12px; line-height: 19.2000007629395px; text-align: left;">Screen captureed from <a href="http://whc.unesco.org/">UNESCO/WHC</a></span></div>
這又是另外一次的練習,從世界遺產網站抓取資料,並分年儲存個遺產年代、名稱、國家、類型、地區、面積、ID。也順道用了集合Set()來統計共有幾個遺產,在幾個國家之中。
結果卻與官方網站統計資料有所不合。<br />
<br />
<b>There are total 1014 WH in 162 Countries.</b>
<br />
<br />
筆記如下
首先載入必要的套件,其中最重要的就是Codecs,因為在Coding階段,為了在離線狀態也能測試程式,因次先將網頁儲存下來後,直接讀取網頁的內容進行解析,然而讀檔過程會遇到拉丁字源讀不到的問題,因此必須安裝Codecs,並使用其開啟檔案就不會出現這個Error囉,另外要加上參數errors='ignore',強制掠過錯誤。
<br />
<blockquote>
from pyquery import PyQuery as pq
import urllib,sys,os,codecs
#q = pq(url='http://whc.unesco.org/pg.cfm?cid=31&l=en&&&&mode=table')
f = codecs.open("testListAll.html",'r',errors='ignore',encoding='utf-8')
q = pq(f.read())</blockquote>
搜尋<br />
的區塊,並且將連結移除
<br />
<blockquote>
qtable = q.find('table.tableaux').remove('href')</blockquote>
將上一個區塊找到tr後,不要第一個tr的資料,將之後的區塊取出,因為第一個tr是表頭th
qb = pq(qtable).find('tr').next()
設定集合
<br />
<blockquote>
YearSet = set()
NameSet = set()
CountrySet = set()
TypeSet = set()
RegionSet = set()
IDSet = set()</blockquote>
從1978年到2015年建立迴圈,並設定每一年的遺產資料為一個檔案,檔名為年代whlist.csv,同樣要使用codecs.open開啟檔案寫入
<br />
<blockquote>
for fyear in range(1978,2015,1):
fname = str(fyear)+"whlist.csv"
f = codecs.open(fname,"w",errors="ignore",encoding='utf-8')
f.write('Year,Name,Country,Type,Region,Property,ID\n')
print("Year :",fyear)</blockquote>
在去掉表頭的資料內,依序搜尋td的資料,並取出第一個td,也就是eq(0).text()的資料,直到到第7個,其中由於第6個資料室面積,資料中具有逗號,因次以逗號打散資料,取出逗號前的第一個數字,並將之轉換為字串,以利輸出。並將所有資料加入集合當中。
<br />
<blockquote>
for i in qb:
if qb(i).find("td").eq(0).text() == str(fyear):
tYear = qb(i).find("td").eq(0).text()
tName = qb(i).find("td").eq(1).text()
tCountry = qb(i).find("td").eq(2).text()
tType = qb(i).find("td").eq(3).text()
tRegion = qb(i).find("td").eq(4).text()
tProperty = str(qb(i).find("td").eq(5).text()).split(',')[0]
tID = qb(i).find("td").eq(6).text()
#print (tYear+','+tName+','+tCountry+','+tType+','+tRegion+','+tProperty+','+tID)
#f.write(tYear+','+tName+','+tCountry+','+tType+','+tRegion+','+tProperty+','+tID+'\n')
YearSet.add(tYear)
NameSet.add(tName)
CountrySet.add(tCountry)
TypeSet.add(tType)
RegionSet.add(tRegion)
IDSet.add(tID)
f.close()</blockquote>
將集合資料排序輸出,並顯示在螢幕上。大功告成
<br />
<blockquote>
print (sorted(YearSet))
print (sorted(CountrySet))
print (sorted(TypeSet))
print (sorted(RegionSet))
print (sorted(IDSet))
print ("There are total",len(NameSet),"WH in",len(CountrySet),"Countries.")</blockquote>
未來要繼續撰寫取出單筆資料的內容,並撰寫成檔案,並將之存入資料庫中運用。
未完待續!~<br />
<table class="tableaux"></table>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-40839447798564477962014-12-19T16:55:00.000+08:002015-01-16T23:49:18.283+08:00Python 擷取網頁上圖片 v2<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" /></a></div>
<br />
<pre class="brush: python">from openpyxl import load_workbook
wb = load_workbook(filename = '1.xlsx')
wb.get_sheet_names()
ws = wb.active
for i in range(8, 10):
if str(ws.cell(row=i, column=5).value)[0:2] == '10':
fname = str(ws.cell(row=i, column=1).value)[6:8]+str(ws.cell(row=i, column=5).value)+str(ws.cell(row=i, column=6).value)
#print ( fname.replace(" ","") )
resource = urllib.request.urlopen("http://path/"+ str(ws.cell(row=i, column=5).value) +".jpg")
output = open(fname.replace(" ","") + ".jpg", "wb")
output.write(resource.read())
output.close()
print ("老大,照片都已抓好,請參考!")
</pre>
<br />
升級版,直接讀取系統產生之學生名單xls檔,唯一要做的事情就是要轉存成新版的xlsx就行<br />
<br />
這個版本是用Python 3.4完成,許多函式都是上網查詢試錯,Coding真是有趣又累人的一件事情。心得記錄如下:<br />
<br />
from openpyxl import load_workbook<br />
<br />
必須先上網安裝<a href="http://openpyxl.readthedocs.org/en/latest/">openpyxl</a>套件,此套件僅適用於新版的xlsx,舊版的不支援<br />
<br />
wb = load_workbook(filename = '1.xlsx')<br />
wb.get_sheet_names()<br />
ws = wb.active<br />
<br />
開啟檔案後,取得工作表名稱,並設定為使用中<br />
<br />
for i in range(8, 100):<br />
<br />
開啟程式迴圈,一個班最多100人,資料從第8行開始讀取<br />
<br />
if str(ws.cell(row=i, column=5).value)[0:2] == '10':<br />
<br />
比對儲存格前兩個字是否為10,是的話代表那行才是學生資料。這裡用到了ws.cell(row=i, column=5).value這個函數,可以直接取得使用中工作表單中第i列第5欄的資料,並使用str()將之轉為字串,str()[0:2],並讀取前兩個字<br />
<br />
fname = str(ws.cell(row=i, column=1).value)[6:8]+str(ws.cell(row=i, column=5).value)+str(ws.cell(row=i, column=6).value)<br />
<br />
此行將班別+學號+姓名組合而成檔案名稱,等下抓取使用<br />
<br />
resource = urllib.request.urlopen("http://path/"+ str(ws.cell(row=i, column=5).value) +".jpg")<br />
<br />
開啟檔案抓取模式,<a href="https://docs.python.org/3.4/howto/urllib2.html?highlight=urllib">urllib.request.urlopen</a>是 Python 3.4的新語法,與2.x版不同<br />
<br />
output = open(fname.replace(" ","") + ".jpg", "wb")<br />
<br />
開啟二進制寫入模式,並用fname.replace(" ","")替換檔名中全形空白,因為有學生的名字只有兩個字,系統輸出時會補上全形空白<br />
<br />
output.write(resource.read())<br />
output.close()<br />
print ("老大,照片都已抓好,請參考!")<br />
一切完成,輸出字串高興一下kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-9487860145803765072014-12-15T22:07:00.001+08:002015-01-16T23:51:08.323+08:00Python 擷取網頁上圖片 v1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5wst4YRypwvDyj-TvBfclO1P3V0oXqgXLe3RPPACQ9UJyAMaTkyYWmniGBjVn2oWdh6pPXG68qraXWZ3r4vJyBhEhzJ3W24xsPBUSlty0e9Anz_nSYBGGA77IjqfKsN_0V8fI/s1600/images.png" /></a></div>
<br />
<pre class="brush: py"># -*- coding:utf-8 -*-
import urllib,csv
f = open("namelist.csv", 'r')
for row in csv.DictReader(f):
sno = row['學號']
fname = row['檔名'].decode('utf-8',).encode('big5')
print (row['學號'] +',' + row['檔名'].encode('big5')
#resource = urllib.urlopen("http://path/"+sno+".jpg")
#output = open(fname+".jpg","wb")
#output.write(resource.read())
#output.close()
f.close()
</pre>
之前寫過一個php的擷取網頁照片的程式,不知何故不能執行,改用Python改寫,幾行就成了,有沒有那麼簡單啊~~
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-54002494817411124902014-12-14T10:56:00.001+08:002014-12-15T22:42:32.943+08:00Chromecast<div dir="ltr">
終於收到chromecast,超值好用,不囉唆。支援Android,IOS6,PC上也可以使用<a href="https://chrome.google.com/webstore/detail/videostream-for-google-ch/cnciopoikihiagdjbjpnocolokfelagl">Vediostream</a>,播放影片並投射到電視上,以後看影片就方便許多囉。</div>
<div dir="ltr">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrZwe8EA_RurpMlHJBrLb-oKzqCOhYlhU-L2LY136VYcu_D0k1rujCiJ2MNyvcNfdw2NJXSYP3zqPmYZATQ3-3xspr_EED6vb7RwRDDZJnfOqhKV_CT_hpto9dviTrgPHPxban/s1600/2014-12-15_224136.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrZwe8EA_RurpMlHJBrLb-oKzqCOhYlhU-L2LY136VYcu_D0k1rujCiJ2MNyvcNfdw2NJXSYP3zqPmYZATQ3-3xspr_EED6vb7RwRDDZJnfOqhKV_CT_hpto9dviTrgPHPxban/s1600/2014-12-15_224136.png" /></a></div>
<div dir="ltr">
<br /></div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-19081530087557625052014-12-14T01:33:00.001+08:002014-12-19T17:41:15.191+08:00幫你把筆電變成Wi-Fi分享器<div dir="ltr">
以Cmd系統管理員身分輸入</div>
<div dir="ltr">
<br /></div>
<pre>netsh wlan set hostednetwork mode=allow ssid=Wifi熱點名稱 key=密碼
netsh wlan start hostednetwork</pre>
<pre>
</pre>
<div dir="ltr">
設定區域網路共享給剛新增成功的lolx區網就可以囉</div>
<div dir="ltr">
若出現無法啟動主控台異常,必須進入裝置管理員,顯示隱藏設備打開,移除多的網卡,直到成功為止。</div>
kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-38294203592357158692014-12-12T12:39:00.003+08:002014-12-12T12:42:18.383+08:00Book about Python<b>Hear First Programming</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://akamaicovers.oreilly.com/images/9780596802387/cat.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://akamaicovers.oreilly.com/images/9780596802387/cat.gif" /></a></div>
<br />
關於<a href="http://shop.oreilly.com/product/9780596802387.do">深入淺出程式設計</a>,這本由O'REILLY出版的程式入門書,內容淺顯易懂,內容活潑,搭配許多好看的圖片,讓學習程式變得有趣,不枯燥乏味,強力推薦,昨天趁著吃飯時,一口氣讀完本書,真是過癮。<br />
<br />
本書使用Python3進行寫作,為了能使用順暢,建議搭配Python3.2版本,如此書中第七章的視窗程式應用方能順利執行。<br />
<br />
此外透過本書也學會了Package的安裝使用方式,Ez-setup.py,Setuptool,的安裝,可以使用Ease_install.exe 或是pip,新版的多以pip為主流。<br />
<br />
<br />
<br />
<br />
<br />kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-14342973768700214002014-11-20T11:23:00.001+08:002014-11-20T11:23:09.735+08:00Ricoh 1045 64x driver上網抓的驅動程式,安裝後列印ppt就當機,只好裝回windows 8系統內定的class driver,可選項少了很多。kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0tag:blogger.com,1999:blog-26891890.post-64461445433175418862014-11-19T23:20:00.002+08:002014-11-19T23:20:20.444+08:00Wnmp 的安裝注意事項<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjumY9duFyM94s_2FeZhVl4HIMQKSiJCitb4a_EAu4h_Luke6Q_2HfEnt0cB7ZfYQZvyf1aAozbijp_cdWKJsqkhqHoHoGhNmZpCCAheqh8s4J05kMCzeGQ8OhaQ52CqanwaW4m/s1600/2014-11-19_231943.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjumY9duFyM94s_2FeZhVl4HIMQKSiJCitb4a_EAu4h_Luke6Q_2HfEnt0cB7ZfYQZvyf1aAozbijp_cdWKJsqkhqHoHoGhNmZpCCAheqh8s4J05kMCzeGQ8OhaQ52CqanwaW4m/s1600/2014-11-19_231943.png" height="142" width="320" /></a><br />Wnmp 是一個基於Windows + Nginx + MariaDB + Php 的架站安裝包,安裝時,系統可能會出ˊ現遺失 msver110.dll 錯誤,這個時候只要下載 <a href="http://www.microsoft.com/zh-tw/download/details.aspx?id=30679">Microsoft Visual C++ 2012 可轉發套件</a>,要下載x86版本的才行。kalaghttp://www.blogger.com/profile/04228111112219104230noreply@blogger.com0