2015-12-28
2015-12-03
Ionic 在 android 手機無法 $http post 網址的解決方案
Android 在 4.0.0 後有新增安全性,防止 app 存取外部開發者沒有允許的網址 故若你的 app 需要連外部網址,則需要將這些網址列入白名單 white-list (Cordova Whitelist) 在 Ionic 裡作法如下 1. 先在 shell 裡安裝 plugin $ ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git 2. 在你的 Ionic 專案的 config.xml 裡加上 <allow-navigation href="*" /> "*" 代表所有網址都允許例如: <platform name="android"> ..... ..... <allow-navigation href="*" /> </platform> whitelist 設定的詳情請看 https://github.com/apache/cordova-plugin-whitelist#content-security-policy |
2015-11-18
用命令方式變更 mysql 帳號/密碼
How to use command line change your mysql account/password
有時候我們需要變更 mysql 上使用者的帳號及密碼,若你沒有操作介面的話(例如 todad 或 phpmyadim)那要怎麼變更呢?
首先請用管理者登入你的 mysql
# mysql -u 你的帳號 -p
Enter password: (請輸入密碼)
有時候我們需要變更 mysql 上使用者的帳號及密碼,若你沒有操作介面的話(例如 todad 或 phpmyadim)那要怎麼變更呢?
首先請用管理者登入你的 mysql
# mysql -u 你的帳號 -p
Enter password: (請輸入密碼)
2015-11-11
python regular expression 參數小技巧
測試小結果
1. python regular expression 的參數中 re.Locale 跟 re.Unicode 有很大的不同,unicode 會讓 英文字跟中文字視為文字: \w ; 而 locale 會讓地區字,如中文,跟英文視為不同字, 此時的 \w 只單指英文字
re.L (locale)會讓 regular 在遇到中文時才會判斷 \b(即\w\W交換邊界)
re.U (unicode)會讓 regular 在遇到空白' '時才會判斷 \b(即\w\W交換邊界), 中英字都算 \w
請看例子
>>> re.findall(r'\b\d+\.?\d*\ {0,2}[份吋寸度瓶]{1,2}\b', " 2 瓶 w", re.U)
['2 瓶']
發現了嗎?空白' ' 跟中文字被視為邊界
>>> re.findall(r'\b\d+\.?\d*\ {0,2}[份吋寸度瓶]{1,2}\b', " 2 瓶 w", re.L)
[]
發現了嗎?空白' ' 跟中文字非邊界字
>>> re.findall(r'\b\d+\.?\d*\ {0,2}[份吋寸度瓶]{1,2}\b', "2 瓶w", re.U)
[]
在unicode 時英文=中文
>>> re.findall(r'\b\d+\.?\d*\ {0,2}[份吋寸度瓶]{1,2}\b', "2 瓶w", re.L)
['2 瓶']
在locale 時英文 跟 中文 又變成不同國了
掌握這種小技巧,你就可以無往不利了
要寫出一個超強的 re 解析器也就不是什麼難事了
def get_product_regex(): regex = [] special_words = ['.*(?:多拉|哆啦)[Aa]夢', '漢堡QQ糖', "M&M's", "\d{2}姨" ] special_words = "|".join(special_words) regex += [special_words] # << 先用中文分開所有字串 >> #regex += [r'\b[a-zA-Z]{1,2}\ *號[^\w\b'] regex += [r'[\d\.]+[合][\d\.]+'] regex += [r'[\d\.]+[倍元入種切枚包組箱粒支號盒公分升斤束片張重瓦尺年份吋寸度瓶]{1,2}'] regex += [r'[LMXSlmxs]{1,2}\ *[號]{1,2}'] regex += [r'[\u4e00-\ufaff /]+'] # 數字+單位 regex += [r'\d+\.?\d*(?:[mM][lL]|[kK][gG]|[cC][mM]|[oO][zZ]|gm|g|[cC][cC]|%)'] #regex += ['[a-zA-Z\d\'\"\.\*\-&~]+'] # << 英文部分處理 >> # 數字加一個 " 或 ' 結束 (avex note: 使用 re.Local 時 ' " 無法配合\b判斷, 故要獨立) regex += [r'\d+\.?\d*[\"\'%/]'] # ex, 123 x 456 regex += [r'\d+\ *[\*xX]\ *\d+'] # 數字加一個以英文字母結束; regex += [r'\d+\.?\d+\b'] regex += [r'\d+\.?\d*[A-Za-z]\b'] regex += [r'\d+\.?\d*[A-Za-z]+'] # 英文 regex += [r'[a-zA-Z]+\.[a-zA-Z]+\b'] # regex += [r'\b[a-zA-Z,\.\~]+\b'] # regex += [r'\b[a-zA-Z]+\b'] # 大寫英文 #regex += [r'(?<=[\d\.])[A-Z]+\b|[A-Z]+\b'] # 數字 regex += [r'\d+\"?\'?'] # 英文含數字 regex += [r'[a-zA-Z\d\-\+\'\ \"\.~/]+'] s_reg = "|".join(regex) #print(s_reg) #r = re.compile(s_reg, re.IGNORECASE) r = re.compile(s_reg, re.L) return r
測試字串:
>>>s = '0.5L佳珍密封罐 000060 4DC 12V車用電風扇5" 插式sp1627df uE-35、L號 R.F 12升貝納頌100%拿鐵3合1裝2.3kg咖啡2oz(22g*10)6入' >>> r.findall(s) ['0.5L', '佳珍密封罐 ', '000060', ' ', '4DC', ' ', '12V', '車用電風扇', '5"', ' 插式', 'sp1627df uE-35', 'L號', ' ', 'R.F', ' ', '12升', '貝納頌', '100%', '拿鐵', '3合1', '裝', '2.3kg', '咖啡', '2oz', '22g', '10', '6入']看吧,這麼複雜的字串都可以幫你分類的好好的,大數據就是要從基礎建設開始
python 支援的正規表示式(regular expression) function 比較
match: 依規則搜尋單一結果,搜尋一定是從頭(^)開始比對,即使用 re.MULTILINE
search: 依規則搜尋單一結果,搜尋不需要是從頭(^)開始比對,若要限制一定從頭比對可以加入 ^,例如 "^要找的規則"
findall: 用 search 去搜尋,並且給出多個結果
finditer: 同 findall, 但回傳資料同 match 有position資料,而非 findall 的 string
2015-10-28
安裝 opencc for python
溫馨提示:本篇為 opencc 0.4.3 安裝教學,若你要安裝新版的 opencc 1.0.4 ,請到這裡
如果你只要安裝 opencc 指令工具那你只要
MAC
# brew install opencc
CENTOS
# yum install opencc
但若你 是要 opencc 給 python 執行,那你只能:
如果你只要安裝 opencc 指令工具那你只要
MAC
# brew install opencc
CENTOS
# yum install opencc
但若你 是要 opencc 給 python 執行,那你只能:
2015-10-20
如何在 rabbitmq-server 上用指令設定帳號
請依以下指令設定 帳號 成 administrator, 你可以用此帳號遠端登入 management web ui
#rabbitmqctl add_user 帳號 密碼
#rabbitmqctl set_user_tags 帳號 administrator
#rabbitmqctl set_permissions -p / 帳號 ".*" ".*" ".*"
如果你想用原來的 guest/guest 帳號遠端登入 management web ui
主要就是在 config 檔 /etc/rabbitmq/rabbitmq.config 輸入底下 loop back 設定, 然後重開 rabbitmq 即可
[{rabbit, [{loopback_users, []}]}].
2015-10-06
MySQL 5.6 varchar 超過最大長度 max-lenght/max-size 還被儲存問題
如果你發現你的 MySQL 好像容忍度大增,例如
* 明明是 unsigned int 的欄位你卻可以儲存負數(-1)
* 明明限制 varchar 長度為 10 但卻可以輸入 11 長字串儲存時自動截斷字串(auto truncate)
"123456789012345" => "1234567890" (auto truncated & saved)
這是因為
MySQL 有二個設定
* 明明是 unsigned int 的欄位你卻可以儲存負數(-1)
* 明明限制 varchar 長度為 10 但卻可以輸入 11 長字串儲存時自動截斷字串(auto truncate)
"123456789012345" => "1234567890" (auto truncated & saved)
這是因為
MySQL 有二個設定
2015-08-11
2015-07-31
使用 python + django 做一個大數據網路平台
你是不是想知道使用 python + django 做一個大數據網路平台可以做到什麼樣的程度?
我發現 這裡 比異鳥 (http://www.biyibird.info) 有個網站,它使用了 python + django + search engine + jquery
很輕鬆的從龐大數據庫內抓取必要的資料,並減少資料庫的負擔。
想寫好一篇作文最佳的捷徑就是多看些文章
想學 python 的人最好的方式就是多參考一些網站,這個網站大家可以多多瀏覽、瞭解、參考看看
2015-07-29
Using .htaccess to redirect from one domain to another
If you want to redirect your www.from.com to www.to.com
[.htaccess]
in your root directory(or sub-directory, according to ur needs), create an .htaccess file, and input content below.
[例子]
RewriteEngine On
# 從 from.com 轉到 www.to.info
RewriteCond %{HTTP_HOST} ^from\.com$ [NC]
RewriteRule ^(.*)$ http://www.to.info/$1 [L,R=301]
# 從 www.from.com 轉到 www.to.info
RewriteCond %{HTTP_HOST} ^www\.from\.com$ [NC]
RewriteRule ^(.*)$ http://www.to.info/$1 [R=301,L]
[try]
go to browser URL input http://www.from.com/account/login and then you will be redirected to http://www.to.com/account/login
URI is corrected be mapped.
[.htaccess]
in your root directory(or sub-directory, according to ur needs), create an .htaccess file, and input content below.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.from.com$ [NC]
RewriteRule ^(.*)$ http://www.to.com/$1 [R=301,L]
[例子]
RewriteEngine On
# 從 from.com 轉到 www.to.info
RewriteCond %{HTTP_HOST} ^from\.com$ [NC]
RewriteRule ^(.*)$ http://www.to.info/$1 [L,R=301]
# 從 www.from.com 轉到 www.to.info
RewriteCond %{HTTP_HOST} ^www\.from\.com$ [NC]
RewriteRule ^(.*)$ http://www.to.info/$1 [R=301,L]
[try]
go to browser URL input http://www.from.com/account/login and then you will be redirected to http://www.to.com/account/login
URI is corrected be mapped.
2015-06-17
mysql log error
如果你的 mysql log 有以下訊息
原因是你的資料庫結構是舊的,而你用的mysql卻是新的
Native table 'performance_schema'.'file_instances' has the wrong structure
Native table 'performance_schema'.'cond_instances' has the wrong structure
Native table 'performance_schema'.'rwlock_instances' has the wrong structure
Native table 'performance_schema'.'mutex_instances' has the wrong structure
...
原因是你的資料庫結構是舊的,而你用的mysql卻是新的
2015-06-05
django 樣版 列出所有 form error 的方法
django 樣版 列出所有 form error 的方法
{{form.non_field_errors}} ==> 列出 global error
{{ field.errors }} ==> 跟欄位有關的 error
方法一:
{% if form.errors %}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{{form.non_field_errors}}
{% for field in form %}
{% if field.errors %}
<li>{{ field.label }}: {{ field.errors }}</li>
{% endif %}
{% endfor %}
</div>
{% endif %}
方法二:
{% for field, errors in form.errors.items %}
{% for error in errors %}
{{error}}
{% endfor %}
{% endfor %}
註:只帶訊息不帶 <ul> <li> 方法
form.errors.backup_email.0 (加個.0 , 取 str)
{{form.non_field_errors}} ==> 列出 global error
{{ field.errors }} ==> 跟欄位有關的 error
方法一:
{% if form.errors %}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{{form.non_field_errors}}
{% for field in form %}
{% if field.errors %}
<li>{{ field.label }}: {{ field.errors }}</li>
{% endif %}
{% endfor %}
</div>
{% endif %}
方法二:
{% for field, errors in form.errors.items %}
{% for error in errors %}
{{error}}
{% endfor %}
{% endfor %}
註:只帶訊息不帶 <ul> <li> 方法
form.errors.backup_email.0 (加個.0 , 取 str)
2015-05-12
django compressor 找不到 offline manifest 問題解法
如果你用 django compressor,而且你用的是 offline compress
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
那麼你有可能會遇到以下錯誤訊息
這代表你的 compress tag 包夾的內容含有動態性的資料
因為 compressor 是用內容 hash 成 hash code 去 lookup cached javascript
所以 offline compress 的東西產生的 hash code 會跟你線上得到的 code 不一樣
例如以下這個例子,拿掉{{user.email}}即可正常
請確保你的 compress 是壓縮最內層、乾淨的「靜態」資料
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
那麼你有可能會遇到以下錯誤訊息
- You have offline compression enabled but key "70be2d0f8286eb3a32bfe94a55518c8f" is missing from offline manifest. You may need to run "python manage.py compress".
因為 compressor 是用內容 hash 成 hash code 去 lookup cached javascript
所以 offline compress 的東西產生的 hash code 會跟你線上得到的 code 不一樣
例如以下這個例子,拿掉{{user.email}}即可正常
- {% compress js %}
- ......
- formData.append('email', '{{ user.email }}');
- ......
- {% endcompress %}
2015-05-01
javascript 中文字長度判斷
因為現在網頁幾乎都是 utf8, 所以以往中文字會被判斷成2 bytes的問題現在都變成1了
例如
var s="中"
alert(s.length)
結果會顯示 1
那麼你若想要判斷 byte 的長度怎麼辦? (因為有時資料庫長度限制需求)
例如
var s="中"
alert(s.length)
結果會顯示 1
那麼你若想要判斷 byte 的長度怎麼辦? (因為有時資料庫長度限制需求)
這裡有個網路上網友提供的好方法,速度快,又不用 regular express 或 encodeURIComponent
2015-04-29
django template 樣版引擎 語法與其它工具衝突的解法
使用 {% verbatim %}
例如底下的字串 '<div><strong>{{value}}</strong> – {{year}}</div>' 中的 {{value}}, {{year}}你不想 django template解譯
你可以:
2015-04-28
MySQL 相關問題
問題:lost connection to mysql server during query
原因可能是由於與 mysql 網路連線過慢或者資料量過大需要較長的讀取/insert(if indexed) 時間
試著設定系統變數 net_read_timeout
mysql -u username -p
...
...
2015-04-24
centos 6 上的 avahi 與 nss-mdns 安裝
avahi 是 mdns 的 server, 用來廣播通知他人我的 ip (利用.local)
nss-mdns 是解析它人 .local 位址
這兩個服務通稱 zeroconfig service, 詳情點這裡
別人 ping 不到你時是 server 有問題
[Server : avahi]
to broadcat to others who I am (myname.local)
安裝:
#yum install avahi
================================================================
你 ping 不到別人時,是你有問題
[Client : nss-mdns]
to resolve others (others_name.local)
安裝:
#wget http://dl.atrpms.net/el6-x86_64/atrpms/stable/nss-mdns-0.10-2.el6.x86_64.rpm
#rpm -i nss-mdns-0.10-2.el6.x86_64.rpm
再到 /etc/nsswitch.conf, 找到 hosts: , 設成以下:
hosts: files mdns4_minimal mdns4 [NOTFOUND=return] dns
安裝完成後 ping 別人看看
[user@somewhere var]# ping foo.local
PING foo.local (192.168.1.45) 56(84) bytes of data.
64 bytes from foo.local (192.168.1.45): icmp_seq=1 ttl=64 time=0.368 ms
64 bytes from foo.local (192.168.1.45): icmp_seq=2 ttl=64 time=0.154 ms
64 bytes from foo.local (192.168.1.45): icmp_seq=3 ttl=64 time=0.154 ms
你的 avahi 每一段時間會停止? 是 firewall 問題,請看這篇
centos6 每過一段時間 avahi 就會停止的解決方法
你有沒有發現 Centos6 上的 avahi service 每過一段時間就會停止
從其它電腦無法 ping ?
原因是 iptables firewall 造成的
解決方法是:
從其它電腦無法 ping ?
原因是 iptables firewall 造成的
解決方法是:
2015-04-21
判斷 IE版本的方法
因為各版本的 IE 有各版本的問題
所以 IE 很多需要 '向下' 相容
於是 microsoft 新版的 IE 就提供以下這語法來判斷 IE 的版本又不致於影響其它人
我們都知道 <!-- 這是註解 --> 是 html 裡面的註解,基本上browser直接會忽略。
但是 IE 對以下的標籤則會去判斷它
<!--[if lt IE 9]> IE9以下的 include 底下
<script src="http://your.domain.com/js/jquery-1.11.2.min.js"></script>
<![endif]-->
<!--[if (gte IE 9) | (!IE)]><!--> 非 IE 及 IE9以上的 include 底下
<script src="http://your.domain.com/js/jquery-2.1.1.min.js"></script>
<!--<![endif]-->
所以 IE 很多需要 '向下' 相容
於是 microsoft 新版的 IE 就提供以下這語法來判斷 IE 的版本又不致於影響其它人
我們都知道 <!-- 這是註解 --> 是 html 裡面的註解,基本上browser直接會忽略。
但是 IE 對以下的標籤則會去判斷它
<!--[if lt IE 9]> IE9以下的 include 底下
<script src="http://your.domain.com/js/jquery-1.11.2.min.js"></script>
<![endif]-->
<!--[if (gte IE 9) | (!IE)]><!--> 非 IE 及 IE9以上的 include 底下
<script src="http://your.domain.com/js/jquery-2.1.1.min.js"></script>
<!--<![endif]-->
說明:
- lte : 小於或等於
- lt : 小於
- gte: 大於或等於
- gt : 大於
- ! : 不等於、例如 : [if !IE] 瀏覽器不等於IE
2015-03-10
pip install package 時若遇到 AttributeError: _DistInfoDistribution__dep_map
pip install package 時若遇到 AttributeError: _DistInfoDistribution__dep_map 時,那表示你的 pip 跟 setuptools 可能版本不合
2015-03-04
Django 多國語言相關內容
Django 系統判斷多國語言的順序為
1. URL pattern(要安裝 i18n)
2. 檢查 session 裡的 LANGUAGE_SESSION_KEY (本值為 '_language' )
3. browser 的 header 的 accept-language (firefox 裡可安裝 Quick Locale Switcher)
mac os(osx) 安裝 gettext 方法
你是不是在 MAC 上安裝 GNU gettext 後依然無法正確執行?
$ django-admin.py makemessages -l "zh_TW" -settings=urproject/settings.py
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
正常安裝方式應該是
#brew install gettext
#brew link gettext --force
#django-admin.py makemessages -l "zh_TW" -settings=biyibird/settings.py
processing locale zh_TW
訂閱:
文章 (Atom)