2018年11月27日 星期二

Python 3.6與3.7的c_wchar_p無法接受空字元的處理辦法

最近工作上又遇到需要新的小工具的狀況
所以開始把原本的python win32的程式改一改
只是看著使用的python版本是3.5.3
想說3.7.1都出來了,不然更新一下最新版好了
.......
沒錯,狀況就這樣發生了
在傳遞filter_string給OPENFILENAME的Structure時
跳出了ValueError: embedded null character

上網開始資料後,很快地就發現是python已知的Issue
Issue32745:ctypes string pointer fields should accept embedded null characters
當下看到,第一時間就覺得自己無法處理
只好再換回3.5.3版運作
直到上網討論後,有網友給了新方向
再試!.....唉~~又失敗
再看看線上手冊的ctypes說明
        !
好像有招了
簡單地說,就是利用create_unicode_buffer建立字元陣列
再轉換類型為c_wchar_p就可解決
不過還是有些小細節要處理

詳細說明如下

2018年11月20日 星期二

超級機器人大戰T~記念一下魔法騎士雷亞斯的加入~

好一陣子沒有玩「超級機器人大戰」這遊戲了
老實說近幾年來,這個招牌實在不太吸引人
即便今年的新作超級機器人大戰X導入了魔神英雄傳這作品
總覺得還是吸引不了我
或許是魔神英雄傳少了2代關係之類的吧

不過今年這次發表的新作
可就不同了
因為有魔法騎士雷亞斯參戰啦!!!
夢幻參戰作品啊
而且這次有登陸Nintendo Switch平台
可以帶著玩又可以看大螢幕的機戰
有點想買了

可是之前那片機戰OG2nd一直還沒破耶
真的有時間玩嘛 QQ

2018年11月9日 星期五

神ノ牙-JINGA~牙狼系列最新章

牙狼系列是一部十分異色的特攝英雄作品系列
第一部的牙狼-GARO是有著...
不少露點演出的深夜節目
配合上還沒變身前素身扎實的武打
與變身後華麗的黃金鎧甲
可說是非常成功的企畫

因為上述特色
我很喜歡牙狼-GARO這部特攝作品
也買了DVD全集的上半部
只是不知為何,有點後繼無力地沒有買齊
也懶得再去補完它
從一部分至今,這期間牙狼作品一路出了很多外傳與新系列
不過從MAKAISENKI後的作品,就沒有引起我的興趣了[註1]

直到最近在Youtube上
看到神ノ牙-JINGA的預告片
疑?這不是演假面騎士DECADE的井上正大嗎?
怎麼跑來這邊演主角啦
然後一看之下
非常對胃的,這個設定、劇情與演技
只能追啦
(以下劇透到第三集)

2018年8月27日 星期一

RG第五彈 可能性之獸 RX-0 Unicorn Gundam

獨角獸鋼彈出自機動戰士鋼彈UC(Unicorn,獨角獸)
原本是小說,後來推出OVA,觀看手段有限
拜巴哈姆特動畫瘋的關係,終於有看過這部作品的動畫版
只能說動畫版不合胃口,後面真的很飛躍,還有看到了傳說中的天舞寶輪
不過這隻獨角獸鋼彈的設計是真的蠻有趣的
可以有偽裝的型態還有鋼彈的型態
加上RG記念性的第25號,配上Gunpla Evolution Project的口號
還是讓我買下了這隻可能性之獸,RX-0 Unicorn Gundam

2018年8月11日 星期六

Labo套件第三彈來啦!

雖然還期待著Labo的第三彈情報
但沒想到這麼快就來到了
先來看一下這段影片吧
Drive Kit,真是個有夢想的東西啊
小時候常想著要上天下海,無所不能
這實在是那時夢想的具現化作品
海陸空都有的各式交通工具
真是太棒了
更詳細的介紹在這個影片

只是真想要買呢.......
想起家裡那堆被老婆嫌棄,無法好好收納的Labo 1 套件
還是得先解決收納問題,避免被當成垃圾處理
之後再實際購入吧

2018年6月2日 星期六

Nintendo Labo-開啟Joycon近乎無限的可能

一開始是想等台灣版啦
但是在4/25實際發售後,遲遲等不到台灣有正式代理的消息
在看著影片好幾次還是覺得很好玩的狀況下
最終還是直接找日本亞瑪遜訂貨

開箱玩過搖控車、釣魚與機車這三項後
簡單心得是:這應該不算是個Video Game
要說是親子同樂益智開發應用大集合還比較像
或說是個大家都買得起的Joycon應用展示開發包
展現了Joycon近乎無限的可能
讓人不得不佩服任天堂的巧思創意與開發這台Switch所投注的心力
以自己會寫寫簡單的程式來說
這應該夠我玩很久(不過Joycon似乎要買得夠多 XD)


2018年5月23日 星期三

利用網頁控制樹莓派(Raspberry Pi)運作

這算是很多人應用過的項目了
最近重碰Python也想到之前看過用Python的RPI.GPIO用網頁控制
就順便試著實作看看了

其實也很簡單,先把Python程式寫出來,程式碼如下:
#!/usr/bin/python3
"""上面這行不是單純註解,是讓CGI執行用的,不能忘了加"""
import sys
import cgi
import time
form = cgi.FieldStorage()

print("Content-type: text/html\n\n")
print("Hi, Python.
")
print("\n")
print(form["weblink"].value)

就把用chmod把python程式改成可執行
然後丟到CGI相關資料夾,通常是cgi-bin底下
接著就開瀏覽器去執行
結束!很簡單
所以這篇的重點不是說這個 XD

當完成上面的範例後,接著遇到的就是
如果要長時間的執行,那就必須要等待CGI程式跑完,不能關網頁
→那麼想辦法讓程式可以背景執行
→已經執行期間,給不了參數
→讓程式可以讀到網頁給的參數,甚至進行交握
→可以進行交握,可是正在運算時還是無法接受新的命令
→想辦法進行多執行緒化,讓程式可以平行作業
看來都可以解決,問題是…
怎麼做?

2018年5月19日 星期六

使用Python的urllib進行網頁資料的讀取

近來工作終於稍有喘息的空間
再來碰一下python吧,這次要學的,是網頁資料處理的urllib這個函式庫
也就是撰寫所謂的網路爬蟲程式

寫網路爬蟲程式會用到的模組是urllib模組其中的request
最簡單的使用法如下,以中央氣象局的網頁為例
import urllib.request as req
#以網址取得內容
response = req.urlopen("https://www.cwb.gov.tw/")
#顯示出抓取下來的內容
print(response.read())
然後就會看到中央氣象局的網頁原始碼(HTML)顯示在畫面上
這樣就成功了
接下來就是把讀下來的資料拿去HTMLParser分析然後抓出想要的資料了

可是不是每一個網頁都這麼好處理
有不少是希望你用瀏覽器去看,而不是單純抓資料下來
這時就會拒絕存取,顯示urllib.error.HTTPError: HTTP Error 403: Forbidden
該怎麼辦呢?這時候就需要加入Header資料去騙一下告訴伺服器
其實我是瀏覽器啦 XD

作法有兩種,一種直接在request的部分填入所需要的header資訊
import urllib.request as req
#以目標網址建立需求
header_request = req.Request("https://www.cwb.gov.tw/")
#需求加入開頭資訊,資訊名稱是User-Agent,內容是瀏覽器Chrome版本資訊
header_request.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36")
#用建立好的需求取得網址內容
response = req.urlopen(header_request)
#顯示抓取的內容
print(response.read())

另一種是建立handler與opener後,再開網頁
import urllib.request as req
#建立基本的Handler
handler = req.BaseHandler()
#以基本的Handler建立opener
opener = req.build_opener(handler)
#在opener裡面加入Header的資訊
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36')]
#安裝opener到request裡
req.install_opener(opener)
#開啟目標網址
response = req.urlopen(url)
#顯示抓取的內容
print(response.read())

這樣看來,似乎第2個寫法比較麻煩多了
不過如果程式上需要以同一個header多抓幾個網址的話
那麼第2個寫法就顯得比較簡單,不用每一個網址都要再建一個帶有Header的Request
另外第2個寫法也可以解決需要帳號密碼的網頁
不過要加個密碼管理器
寫法如下:
import urllib.request as req
#建立基本的PasswordManager
pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
#加入網址、使用者帳號與密碼
pwdmgr.add_password(None,url ,user ,password)
#使用PasswordManager建立Handler
handler = req.HTTPBasicAuthHandler(pwdmgr)
#以下照舊,用Handler建opener
opener = req.build_opener(handler)
#在opener裡面加入Header的資訊
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36')]
#安裝opener到request裡
req.install_opener(opener)
#開啟目標網址
response = req.urlopen(url)
#顯示抓取的內容
print(response.read())

基礎大概就這些了,剩下的都是變化形了
就我目前的使用來說,夠用了

2018年1月19日 星期五

第4代Toyota Prius試駕心得


本來打定主意,去年要找個一天來試試這傳說中的省油神車
不過去年實在太忙了,一拖就是一年
終於在最近預約試乘到了
因為之前已經有開過Corolla油電的關係
沒太多驚奇的部分
但還是有幾個令人印象深刻的點


2018年1月18日 星期四

Nintendo Labo

昨天任天堂推出更有創意的Switch玩法
Nintendo Labo

看著這個影片所呈現的創意
即使第一時間就有非常多的疑慮在腦海裡轉
像是紙板不夠耐用,可能只有玩一下下就退燒等等
仍無法去否定,這看起來很好玩
尤是是第一張圖片那個機器人,看了就...喔喔喔,超有趣的,好想玩
4月20日才發售,讓我再累積一些銀彈吧