在 IEEE 2016 程式排行榜 裡把 arduino 算是一個語言,引起一些討論。
我個人是可以理解為什麼會列為另一種語言。
也許它被認為”足夠”降低開發門檻成功給一般人使用,而且其生態系也大到一個程度。它的前處理,著實也做了很多事,從使用者的角度,根本看不到 C/C++ 要的 ..h, .c or .cpp。在簡化的程度上,已經讓只會寫 arduino 的人,一定不會用 C/C++ 的環境寫程式。
IEEE 官網也很多人質疑,說 arduino 不過是個開發環境,應該要算在 C 上面。但是就如同 C 與 C++ 一樣會有論戰,為什麼 C 要跟 C++ 算一起?或反過來說,C 與 C++ 要算一種語言嗎?如果算一種語言,為什麼要寫 C/C++ 而不乾脆說 C? 如果算兩種語言,但是算人頭的時候又要一起算呢?
曾經在閱讀 cython 的時候,看到他們寫的 「The Cython language is a superset of the Python language that additionally supports calling C functions and declaring C types on variables and class attributes.」他們做的事情,就是讓使用者可以用一般的 python 寫程式,也可以用 cython 新增加的語法指定與 c 合作的宣告與功能。他們也是先經過自己的「前處理器」,把程式轉換過。他們自稱是 cython language。而且還是 superset 。我曾經想了很久。後來又看到 TypeScript,CoffeeScript。如果這些努力可以說是新增了一個新語言,那麼,arduino 被稱做一個語言,我是可以理解的。
我自己的臉書備份
2016年7月27日 星期三
2016年6月15日 星期三
[windows] usb碟在 windows 與 mac 之間插來插去然後就不能用了。
為了交換資料,用 mac 把一個 usb碟做成 FAT32,剛開始還正常,幾次之後發現,中文字都亂碼了。再用個幾次連容量都不對。回到 windows 看裡面有兩個分割區,比較大的那個 windows 就看不見,想用 windows 來清掉分割區又點不到那個指令,卡住了怎辦?這時候 diskpart 是救星。
有很大的資料要交換,例如影片,用網路來傳還是比較慢,家裡的 wifi 就是沒辦法每秒 25 或 50 MB 來傳。所以一個 FAT32 的 usb碟一直是我的方式。但是這次就遇到檔名亂碼的問題,隨後發生分割區看不到的問題。從 windows 這邊來看,用 mac 來割 FAT32 會弄出兩個主分割區,讓 windows 搞不懂。要救回這個 usb碟的方法,應該是用 windows 自己來切分割區了。打開磁碟管理,對著分割區按下右鍵,清除分割區的選項居然是灰色不能選,這下無解了。至少這條路不能走。難道 windows 真的無招了嗎?
還好,這問題不是只有我發生,外國人也發生,解決方法就是 diskpart.exe 這個內建程式。
我只需要做到清除分割,建立分割區還是用原來的圖形格式化工具。
步驟:
(1) 進到命令列
(2) 輸入 diskpart 之後按 <enter>
(3) 輸入 list disk,看清楚第幾個是你的 usb碟,沒看清楚會非常悲劇,一定要算對。然後用 select disk n 選到你的 usb碟,n 是列表上第幾個磁碟。選完之後,再用 detail disk 確認一下。
(4) 接下來輸入 clean 指令,清除整個分割區。
(5) 離開程式,輸入 exit。
接下來的建立分割區,就照一般的格式化做法就行了。
參考:
http://superuser.com/questions/274687/how-do-i-format-a-usb-drive-on-a-pc-that-was-formatted-on-a-mac
有很大的資料要交換,例如影片,用網路來傳還是比較慢,家裡的 wifi 就是沒辦法每秒 25 或 50 MB 來傳。所以一個 FAT32 的 usb碟一直是我的方式。但是這次就遇到檔名亂碼的問題,隨後發生分割區看不到的問題。從 windows 這邊來看,用 mac 來割 FAT32 會弄出兩個主分割區,讓 windows 搞不懂。要救回這個 usb碟的方法,應該是用 windows 自己來切分割區了。打開磁碟管理,對著分割區按下右鍵,清除分割區的選項居然是灰色不能選,這下無解了。至少這條路不能走。難道 windows 真的無招了嗎?
還好,這問題不是只有我發生,外國人也發生,解決方法就是 diskpart.exe 這個內建程式。
我只需要做到清除分割,建立分割區還是用原來的圖形格式化工具。
步驟:
(1) 進到命令列
(2) 輸入 diskpart 之後按 <enter>
(3) 輸入 list disk,看清楚第幾個是你的 usb碟,沒看清楚會非常悲劇,一定要算對。然後用 select disk n 選到你的 usb碟,n 是列表上第幾個磁碟。選完之後,再用 detail disk 確認一下。
(4) 接下來輸入 clean 指令,清除整個分割區。
(5) 離開程式,輸入 exit。
接下來的建立分割區,就照一般的格式化做法就行了。
參考:
http://superuser.com/questions/274687/how-do-i-format-a-usb-drive-on-a-pc-that-was-formatted-on-a-mac
[python] try except raise,為什麼會需要 raise ?
在 python 裡,對於有可能錯誤的地方,就是用 try 去包住它,然後針對可能的錯誤去處理它。像是:
有天某個人問我,為什麼,既然已經是抓到問題了,為什麼還要 raise,把它丟出去呢?也許有很多理由,但我有兩個簡單的理由:(1)我想直接讓程式被停掉,(2)我想讓執行我寫的程式的程式也知道有問題,讓它自己決定該怎麼辦。這在寫程式給別的程式用的時候很重要。
在 raise exception 的時候,我以前是寫成以下這樣:
這樣在文句上好像很正常,但是就會出現困擾的地方,就是 traceback 所指的 exception 行號是在 raise 的地上,而不是真正發生的地方。
try:
f = open('x','r')
except IOError:
raise
except Exception:
print 'other error'
raise
有天某個人問我,為什麼,既然已經是抓到問題了,為什麼還要 raise,把它丟出去呢?也許有很多理由,但我有兩個簡單的理由:(1)我想直接讓程式被停掉,(2)我想讓執行我寫的程式的程式也知道有問題,讓它自己決定該怎麼辦。這在寫程式給別的程式用的時候很重要。
在 raise exception 的時候,我以前是寫成以下這樣:
try:
f = open('x','r')
except Exception, ex:
print 'other error'
raise ex
這樣在文句上好像很正常,但是就會出現困擾的地方,就是 traceback 所指的 exception 行號是在 raise 的地上,而不是真正發生的地方。
後來才發現,應該直接 raise 後面不加參數,才會如下指到對的行數去。IOError Traceback (most recent call last)in () 3 except Exception, ex: 4 print 'other error' ----> 5 raise ex IOError: [Errno 2] No such file or directory: 'x'
IOError Traceback (most recent call last)in () 1 try: ----> 2 f = open('x','r') 3 except IOError: 4 raise 5 except Exception: IOError: [Errno 2] No such file or directory: 'x'
2016年4月2日 星期六
[windows] 要找個執行檔在哪裡,像 linux 的 whereis 的指令?
我不知道為何可以用 curl。用著用著就習慣了。
但是突然發現不能用 request。
想要去更新又不知道到哪兒去更新。
在 linux 有 whereis 指令,但是 windows 就是不叫 whereis。
它就要叫
where
就這樣,解決。
http://superuser.com/questions/21067/windows-equivalent-of-whereis
但是突然發現不能用 request。
想要去更新又不知道到哪兒去更新。
在 linux 有 whereis 指令,但是 windows 就是不叫 whereis。
它就要叫
where
就這樣,解決。
http://superuser.com/questions/21067/windows-equivalent-of-whereis
2016年3月16日 星期三
[windows] 殺掉佔住某個 port 的程序
今天在測試的時候,一個程式畫面死掉被關掉,但是程序(process)沒有被關掉,一直佔著。
總不能每次發生這種事的時候就重開電腦吧?
於是找了一下,有解!
救星就是 netstat。
使用以下指令:
接下來就是用 task manager,找到那個程序,殺掉它。搞定!
參考:
http://stackoverflow.com/questions/8688949/how-to-close-tcp-and-udp-ports-via-windows-command-line
總不能每次發生這種事的時候就重開電腦吧?
於是找了一下,有解!
救星就是 netstat。
使用以下指令:
netstat -a -n -o會列出所有本機正在開啟的 port,還有 PID。
接下來就是用 task manager,找到那個程序,殺掉它。搞定!
參考:
http://stackoverflow.com/questions/8688949/how-to-close-tcp-and-udp-ports-via-windows-command-line
2016年3月15日 星期二
[python] django-cms 在 pythonanywhere 的安裝
django-cms 是基於 django 的 CMS (Content Management System,內容管理系統),可以快速建立可上線的網站、部落格…等等。它也是去年(2015 年)被選為最佳 CMS 的系統。(http://www.cmscritic.com/announcing-the-2015-winner-for-best-open-source-cms/)
PythonAnyWhere 則是一個服務商,可以提供以 python 為基礎的許多 web framework,例如 django。所以,在 PythonAnyWhere 上要提供一個 Django 網站是內建功能之一。其他的像 flask 或是 bottle 等 web framework 現在也支援。一般人可以申請免費服務試用,可以有 512 MB 的硬碟空間與 100 秒 cpu 時間。如果 100 秒 cpu 時間用完,其實還是可以正常運作,只是慢一點而已,拿來試用非常剛好。
把 django-cms 與 PythonAnyWhere 結合在一起是很簡單的。PythonAnyWhere 官方似乎沒有比較正式的說明,不過在經過測試之後,在 virtualenv 的環境上來做,應該會是比較好的選擇。
第一步,建立 virtualenv 環境
source virtualenvwrapper.sh在 PythonAnyWhere 上必須使用已經提供好 環境設定,所以要使用他們提供的 virtualenvwrapper.sh 與 mkvirtualenv 進入 virtualenv 的環境中。
mkvirtualenv djangocms --python=python3
如果要在 virtualenv 裡用到 python3,所以加上 --python=python3
如果要使用官方已經裝好的 numpy, scipy 的話,要加上這個參數 --system-site-packages。
執行完之後,就會停在 virtualenv 的環境裡:
(djangocms) 12:24 ~ $
第二步,安裝 djangocms-installer
現在 django-cms 是使用 djangocms-installer 來安裝,所以要先用 pip 安裝這個。
pip install djangocms-installer第三步, 建立 djangocms 專案
這裡建議照我說的做,不然不小心會把自己的家目錄裡的東西砍光光。
首先,開一個目錄叫 project_name,然後進去。
然後使用以下指令建立專案:
(djangocms) 12:34 ~/project_name $ djangocms -p . my_demo
會開始問一些問題,基本上就一路按 enter,不然就照我的來選:
Database configuration (in URL format) [default sqlite://localhost/project.db]:
django CMS version (choices: 2.4, 3.0, 3.1, 3.2, stable, develop) [default stable]:
Django version (choices: 1.5, 1.6, 1.7, 1.8, 1.9, stable) [default stable]:
Activate Django I18N / L10N setting (choices: yes, no) [default yes]:
Install and configure reversion support (choices: yes, no) [default yes]:
Languages to enable. Option can be provided multiple times, or as a comma separated list. Only language codes supported by Django can be used here: en
Optional default time zone [default Etc/UTC]:
Activate Django timezone support (choices: yes, no) [default yes]:
Activate CMS permission management (choices: yes, no) [default yes]:
Use Twitter Bootstrap Theme (choices: yes, no) [default no]:
Use custom template set [default no]:
Load a starting page with examples after installation (english language only). Choose "no" if you use a custom template set. (choices: yes, no) [default no]: yes
然後就開始安裝到停下來。會要你輸入管理員的帳號、信箱、密碼。
第四步,建立 web app
到 web 頁籤按下建立 web app 的按鈕,選擇 manual configuration。
設定 virtualenv 路徑設定到 /home/yourusername/.virtualenvs/djangocms。
import os到 Static files 那裡設定:
import sys
# add project folder to path
path = '/home/ironman/project_name'
if path not in sys.path:
sys.path.append(path)
# Remove any references to your home folder (this can break Mezzanine)
while "." in sys.path:
sys.path.remove(".")
while "" in sys.path:
sys.path.remove("")
# specify django settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_demo.settings'
# load default django wsgi app for Django >= 1.4
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Url: /static/
Path: /home/yourusername/project_name/static
第五步,修改 db 位置設定
因為用安裝器裝的設定,有一點不一樣,所以 db 位置它指錯了。
請到 project_name/my_demo/settings.py 裡,找到這裡:
DATABASES = {
'default': {
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.sqlite3',
'HOST': 'localhost',
'NAME': 'project.db',
'PASSWORD': '',
'PORT': '',
'USER': ''
}
}
把 'NAME': 'project.db' 改成 'NAME': 'project_name/project.db'
不改會出現錯誤:no such table: cms_urlconfrevision
再按下web app 的 Reload 按鈕。
瀏覽結果,這是有選範例首頁的樣子:
這是沒選範例首頁的樣子:
接下來就是怎麼使用它的問題了。這裡有「使用者」的說明文件。http://docs.django-cms.org/en/3.2.3/user/index.html
[python] mezzanine 在 pythonanywhere 的安裝
Mezzanine 是基於 django 的 CMS (Content Management System,內容管理系統),可以快速建立可上線的網站、部落格…等等。
PythonAnyWhere 則是一個服務商,可以提供以 python 為基礎的許多 web framework,例如 django。所以,在 PythonAnyWhere 上要提供一個 Django 網站是內建功能之一。其他的像 flask 或是 bottle 等 web framework 現在也支援。一般人可以申請免費服務試用,可以有 512 MB 的硬碟空間與 100 秒 cpu 時間。如果 100 秒 cpu 時間用完,其實還是可以正常運作,只是慢一點而已,拿來試用非常剛好。
把 Mezzanie 與 PythonAnyWhere 結合在一起是很簡單的。PythonAnyWhere 官方建議在 virtualenv 的環境上來做,也給了範例如下:
第一步,建立 virtualenv 環境
如果要在 virtualenv 裡用到 python3,要使用以下的指令替代上面第二行指令
執行完之後,就會停在 virtualenv 的環境裡:
接下來就是使用 pip install mezzanine 安裝。
第三步,建立網站專案
在經過一連串下載後,就是開始第一個專案來試用一下了。開第一個專案的指令是:
首先在 settings.py 找到TIME_ZONE, 改成我們這裡的TIME_ZONE='Asia/Taipei'。
然後執行以下指令:
第四步,設定 wsgi
PythonAnyWhere 與 mezzanine 的連結是靠 wsgi,請到 web 頁籤
第五步,設定 static 檔案
在 web 頁籤,到 Static files 那裡設定:
Url: /static/
Path: /home/yourusername/project_name/static
然後執行以下指令:
現在就可以瀏覽一下剛才的成果。
接下來,使用的方法就又是另一個問題了。
PythonAnyWhere 則是一個服務商,可以提供以 python 為基礎的許多 web framework,例如 django。所以,在 PythonAnyWhere 上要提供一個 Django 網站是內建功能之一。其他的像 flask 或是 bottle 等 web framework 現在也支援。一般人可以申請免費服務試用,可以有 512 MB 的硬碟空間與 100 秒 cpu 時間。如果 100 秒 cpu 時間用完,其實還是可以正常運作,只是慢一點而已,拿來試用非常剛好。
把 Mezzanie 與 PythonAnyWhere 結合在一起是很簡單的。PythonAnyWhere 官方建議在 virtualenv 的環境上來做,也給了範例如下:
第一步,建立 virtualenv 環境
source virtualenvwrapper.sh
mkvirtualenv mezzanine
在 PythonAnyWhere 上必須使用已經提供好 環境設定,所以要使用他們提供的 virtualenvwrapper.sh 與 mkvirtualenv 進入 virtualenv 的環境中。如果要在 virtualenv 裡用到 python3,要使用以下的指令替代上面第二行指令
mkvirtualenv mezzanine --python=python3
如果要使用官方已經裝好的 numpy, scipy 的話,要加上這個參數 --system-site-packages。執行完之後,就會停在 virtualenv 的環境裡:
第二步,安裝 mezzanine(mezzanine)13:12 ~ $
接下來就是使用 pip install mezzanine 安裝。
第三步,建立網站專案
在經過一連串下載後,就是開始第一個專案來試用一下了。開第一個專案的指令是:
mezzanine-project project_name
cd project_name
接下來的動作是設定時區與建立資料庫內容。首先在 settings.py 找到TIME_ZONE, 改成我們這裡的TIME_ZONE='Asia/Taipei'。
然後執行以下指令:
會在資料庫裡建立所需要的 table。預設使用的是 sqlite3 的資料庫。眼睛利一點的會看到管理者預設帳號密碼是 admin/default。等一下要用,真的要上線一定要去改密碼。python manage.py createdb --noinput
第四步,設定 wsgi
PythonAnyWhere 與 mezzanine 的連結是靠 wsgi,請到 web 頁籤
建立一個按下建立 web app 的按鈕,選擇 manual configuration。
然後把 virtualenv 路徑設定到 /home/yourusername/.virtualenvs/mezzanine 。
找到 WSGI configuration file 所指的檔案連結按下去,改成以下這樣:
然後按下web app 的 Reload 按鈕,接下來要處理 static 檔案。import os import sys # add project folder to path path = '/home/yourusername/project_name': if path not in sys.path: sys.path.append(path) # Remove any references to your home folder (this can break Mezzanine) while "." in sys.path: sys.path.remove(".") while "" in sys.path: sys.path.remove("") # specify django settings os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings' # load default django wsgi app for Django >= 1.4 from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
第五步,設定 static 檔案
在 web 頁籤,到 Static files 那裡設定:
Url: /static/
Path: /home/yourusername/project_name/static
然後執行以下指令:
這樣會把 static 的檔案搬到對的地方去。再按下web app 的 Reload 按鈕。python manage.py collectstatic
現在就可以瀏覽一下剛才的成果。
接下來,使用的方法就又是另一個問題了。
訂閱:
文章 (Atom)



