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

當你的 server 有需要換 pem key 的時候要怎麼做呢?

有時候我們會需要換掉 server 上的 pem key, 

當你的 server 有需要換 pem key 的時候要怎麼做呢?



用命令方式變更 mysql 帳號/密碼

How to use command line change your mysql account/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 執行,那你只能:

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, []}]}].
開啟 web 管理介面的指令 rabbitmq-plugins enable rabbitmq_management

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 有二個設定

2015-08-11

「可疑 IP 列表」
 可疑 IP 有可能是電腦被綁架,大多非主動攻擊者,但都有攻擊現象,故建議短期內還是加入 「IP 阻攔列表裡」


192.187.110.98
182.118.53.125
218.246.34.99
185.78.112.26
104.236.212.155
137.226.113.7




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

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 有以下訊息
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)

2015-05-12

django compressor 找不到 offline manifest 問題解法

如果你用 django compressor,而且你用的是 offline compress
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
那麼你有可能會遇到以下錯誤訊息

  1. You have offline compression enabled but key "70be2d0f8286eb3a32bfe94a55518c8f" is missing from offline manifest. You may need to run "python manage.py compress".
這代表你的 compress tag 包夾的內容含有動態性的資料
因為 compressor 是用內容 hash 成 hash code 去 lookup cached javascript
所以 offline compress 的東西產生的 hash code 會跟你線上得到的 code 不一樣
例如以下這個例子,拿掉{{user.email}}即可正常
  1. {% compress js %}
  2. ......
  3. formData.append('email', '{{ user.email }}');
  4. ......
  5. {% endcompress %}
請確保你的 compress 是壓縮最內層、乾淨的「靜態」資料

2015-05-01

javascript 中文字長度判斷

因為現在網頁幾乎都是 utf8, 所以以往中文字會被判斷成2 bytes的問題現在都變成1了
例如
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 造成的
解決方法是:

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]-->      


說明:
  1. lte  : 小於或等於
  2. lt     : 小於
  3. gte: 大於或等於
  4. gt   : 大於
  5. !      : 不等於、例如 : [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