2016年6月30日 星期四

[HTML 5] 如何在網頁中顯示 PDF 型式的檔案?

最近開發專案的過程中,需要將 PDF 型式的檔案顯示於網頁之中。經過一連串的搜尋,發現一個相當簡單的解決方法:利用 Embeddable Google Document Viewer

在要顯示 PDF 型式檔案的 HTML 頁面加入這麼一段程式碼

<iframe src="http://docs.google.com/gview?url=http://YOUR REFERENCE SITE/YOUR PDF FILE NAME.pdf&embedded=true" style="width:100%; height:100%" frameborder="0"></iframe>

Done and it's easy :D

2016年5月30日 星期一

[Facebook, HTML5] 分享至 FB 功能設定

原以為開發分享至 FB 會是相當繁瑣的一件事情,經過 google,沒想到竟是如此簡單!

STEP 1 設定分享內容文字

利用 The Open Graph protocol 設定分享的資訊。

<head>
    <!-- 分享至 FB 的標題 -->
    <metadata property="og:title" content="YOUR_TITLE" />
    <!-- 分享至 FB 的內容敘述 -->
    <metadata property="og:description" content="YOUR_DESCRIPTION" />
    <!-- 分享至 FB 的內容連結 -->
    <metadata property="og:url" content="YOUR_URL" />
    <!-- 分享至 FB 的圖片 -->
    <metadata property="og:image" content="YOUR_IMAGE_URL" />
    <metadata property="og:type" conetnet="website" />
</head>


STEP 2 加入分享至 FB 的連結

<a href="javascript: void(window.open('http://www.facebook.com/share.php?u='.concat(encodeURIComponent('YOUR_URL'))''))">分享至 FB</a>

設定完成,接著就分享內容至 FB 吧!XD

2016年5月26日 星期四

[Django, MySQL] MySQL 中文亂碼問題

為了廣大華人市場,製作中文網站勢在必行!不過卻經常遇到 MySQL 儲存中文資料遇到亂碼的問題,經過一番研究,在此紀錄完整的解決方案。

MySQL 遇到中文亂碼最主要的原因是 CHARACTER SET 不支援中文顯示!

解決這個問題的最佳方案為

設定 CHARACTER SET 為 UTF8,因為 UTF8 支援所有字符!

首先進到 MySQL,查看默認的編碼格式

mysql > show variables like "%char%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

我們可以發現,character_set_database 與 character_set_server 皆為 latin1 編碼。

透過下面指令,修改這兩個的預設編碼

mysql > set character_set_database = "utf8";
mysql > set character_set_server = "utf8";

修改後再次檢查編碼

mysql > show variables like "%char%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

全數編碼皆改為 UTF8。

到這裡如果已解決中文亂碼的問題,恭喜你!只不過,筆者如果重啟 Apache,會發現character_set_server 預設的編碼又變成 latin1。這時候只好從根本下手,修改 my.cnf 內的設定。

$ sudo vi /etc/mysql/my.cnf

1. 在 [client] 段落裡加入:

default-character-set=utf8

2. 在 [mysqld] 段落裡加入:

character-set-server=utf8
init-connect="SET NAMES utf8"
collation-server=utf8_unicode_ci

3. 在 [mysql] 段落裡加入:

default-character-set=utf8

存檔後重啟 MySQL: $ sudo service mysql restart

這樣就從根本解決 MySQL 中文顯示亂碼的問題囉~




當然,在建立 database 的時候別忘了將編碼設定為 UTF8 唷!XD

mysql > create database YOUR_DB default character set utf8;

2016年4月17日 星期日

[Django] 利用 Gmail 發送 email

由於專案上的功能,必須透過 Django 發送 email 給予前端使用者。不打算自行架設郵件伺服器的前提下,利用 Gmail 進行發送成為解決方案的首選!以下將介紹如何利用 Django + Gmail 發送郵件:

首先,對 Django settings 加入以下設定:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'YOUR GMAIL ACCOUNT'
EMAIL_HOST_PASSWORD = 'YOUR GMAIL PASSWORD'
EMAIL_USE_TLS = 'True'
EMAIL_POST = '587'


接著,就可以透過以下兩種不同程式寫法進行郵件的發送。

方法一:透過 send_mail() 發送

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)


方法二:透過 EmailMessage 類別發送

from django.core.mail import EmailMessage

email = EmailMessage('Hello', 'Body goes here.', 'from@example', ['to@example.com', 'to2@example.com'], ['bcc@example.com'])

email.send()


就是這麼簡單即可透過 Django 發送 email 惹!

2016年3月31日 星期四

[Python] datetime.time 物件進行時間相加的問題筆記

最近在開發 Python 的時候,遇上一件相當惱人的事情,那就是‧‧‧

該如何對 datetime.time 物件進行時間相加的動作?


曾經嘗試過:

>>> datetime.time(1, 2, 3) + 1
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'.

>>> datetime.time(1, 2, 3) + datetime.timedelta(0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

>>> datetime.time(1, 2, 3) + datetime.time(0, 0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'

正當困惑之時,經由谷歌大神指點,發現可以這麼做‧‧‧

1. 先把 datetime.time 轉為 datetime.datetime

>>> import datetime
>>> dt = datetime.datetime.combine(datetime.date.today(), datetime.time(1, 2, 3))

2. 再運用 datetime.timedelta 進行時間相加

>>> dt += datetime.timedelta(0, 1)

3. 最後,取得 datetime 物件中 time 的部分,即為所求。

>>> print dt.time()
01:02:04

2016年3月23日 星期三

[Python] os.path.join(path, *paths) 的問題筆記

今天在撰寫 Python os.path.join(path, *paths) 時遇到一個奇怪的問題:

不管如何 JOIN,所顯示的結果永遠是後面的路徑!


讓我們用下列程式碼做說明:

>>> import os
>>> a = 'path/to/a'
>>> b = '/path/to/b'
>>> print os.path.join(a, b)
/path/to/b


經過一段時間的實驗與偵錯,發現問題出在於 b = '/path/to/b'

原來,os.path.join(a, b) 的 b 不可接受 '/path/to/b' 的這種形式!

以下為實驗結果:

(1) 成功
>>> import os
>>> a = '/path/to/a'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
/path/to/a/path/to/b


(2) 成功
>>> import os
>>> a = 'path/to/a/'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
path/to/a/path/to/b


(3) 成功
>>> import os
>>> a = 'path/to/a'
>>> b = 'path/to/b/'
>>> os.path.join(a, b)
path/to/a/path/to/b/

2016年2月22日 星期一

[Mac, OS X 10.11, Django] 在 OS X 10.11 上安裝 Django 1.8 (How to install Django 1.8 on the OS X 10.11)

  先前曾經介紹如何在 Server 端安裝 Django。不過,身為一位行動開發者,並非永遠身處在擁有網路的環境裡。因此,在 Client 端準備開發環境,並進行不同解決方案的實驗是相當重要的一環。

  筆者所使用的電腦為 Macbook Pro,因此今天要向大家介紹如何在 Mac 上安裝 Django

STEP 1
  Django 是 Python 的 web framework 之一。因此在安裝 Django 之前,必須先安裝 Python。只不過在 OS X 10.11 已內建 Python 2.7,所以我們不需要進行任何的下載與安裝。

STEP 2
  由於在開發的過程中,可能需要安裝許多的套件。也經常發生套件版本更動後,造成原先可運作的內容出現錯誤。因此,在 Client 端我們將安裝虛擬環境 (virtualenv) 來避免類似問題以及協助進行不同解決方案的實驗。
  虛擬環境 (Virtualenv) 是創造虛擬 Python 環境的工具。它可以幫你做到:
1. 在沒有權限的情況在安裝新套件
2. 不同專案可以使用不同版本的相同套件
3. 套件版本升級時不會影響其他專案

  安裝的方式相當簡單:$ easy_install virtualenv

STEP 3
  在安裝完 virtualenv 後,我們將建立並啟動虛擬環境。

建立虛擬環境:
$ virtualenv 【指定虛擬環境的名稱】

啟動虛擬環境:
$ cd 【指定虛擬環境的名稱】
$ source bin/activate

若啟動成功,將看到 (【指定虛擬環境的名稱】) ... $

補充:若要關閉虛擬環境,則需鍵入 $ deactivate

STEP 4
  在啟動完虛擬環境後,我們將在此環境運用 pip 安裝 Django。
 (【指定虛擬環境的名稱】) ... $ pip install Django = 1.8.X (LTS 版本)

如此一來,將完成 Django 的安裝,並可在不同的虛擬環境中進行不同的實驗。