2014年5月3日 星期六

Python3 連結MySQL(MariaDB, Pernona)

Version info:
Python: 3.4.0
MySQL: 5.5.37
OS: Ubuntu Linux 14.04

首先,下載並安裝Python3-mysql.connector套件。

sudo apt-get install python3-mysql.connector
範例程式:

import mysql.connector
#輸入DB的使用者名稱,使用者密碼,主機名稱與DB名稱。
cnx = mysql.connector.connect(user='user_name', password='user_password', host='localhost',database='db_name')
cursor = cnx.cursor()
#設定編碼。
cursor.execute('set names utf8')

query = "SELECT * from a_table"
cursor.execute(query)
#抓取資料。
data = cursor.fetchall()
#完成,回傳一個tuple型態的資料。
print(data)
#下面的程式片段是要讓程式回傳一個list,其中每一筆資料使用dict格式,也就是key-vaule的形式,像是:result[0]['abc']表示第一筆且column名稱為「abc」的資料。
column_name = cursor.column_names
result = list()
temp = dict()

for i in range(len(data)):
    for j in range(len(column_name)):
        temp[column_name[j]] = data[i][j]
    result.append(temp)
    temp = dict()
print(result)

#關閉與資料庫的連結
cnx.close()


2015/09/27
PyMySQL用法也跟mysql.connector一樣。
參考資料:
How to connect Python programs to MariaDB

2014年4月5日 星期六

php:isset(), null, empty(), is_null(), ===null, == null的差別

如果

$a = null;

isset($a)會傳回False

is_null($a)會傳回Ture

$a === null 會傳回True

$a == null 會傳回True

empty($a)會傳回True

----------------------------------------

$a = ture;

isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回False

empty($a)會傳回False

----------------------------------------

$a = false;


isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回True

empty($a)會傳回True

----------------------------------------

$a = 0;

isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回True

empty($a)會傳回True

----------------------------------------

$a = 1;

isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回False

empty($a)會傳回False

----------------------------------------

$a = \0;

isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回False

empty($a)會傳回False

----------------------------------------

$a 沒有被設定


isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回False

empty($a)會傳回False

----------------------------------------

$a = "";


isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回True

empty($a)會傳回True

----------------------------------------

$a = [];

isset($a)會傳回True

is_null($a)會傳回False

$a === null 會傳回False

$a == null 會傳回True

empty($a)會傳回True

----------------------------------------

圖表:













參考資料:

http://stackoverflow.com/questions/8236354/php-is-null-or-empty

Vim透過行號(line number)複製或刪除

在Normal mode下,輸入:

:23, 25 co 30

表示把23到25行之間(包括23和25行)的內容複製到第30行後,

也就是31行,

原本在31行的文字(或程式碼...)就會往後排序。

也可只輸入一個數字代表只複製一行:

:23 co 30



輸入:

:23, 25 del

表示刪除23到25行(包括23和25行)的內容,

原本在23至25行底下的內容會往上移。

Ubuntu更換開機畫面(Boot Splash Screen)

這邊只更換已經存在的開機畫面,

如果要替換自行下載的開機畫面,

可以參考:

http://askubuntu.com/questions/173329/what-alternatives-are-available-to-replace-the-purple-boot-splash-screen


step1:

開啟terminal並輸入:

sudo update-alternatives --config default.plymouth
 
step2:
 
輸入欲更換開機畫面的號碼,並按下[ENTER]
 
step3:
 
更新設定,在terminal下輸入:
 
sudo update-initramfs -u
 
 
Finished!! 下次開機時就會更換畫面了!

在Gnome 3接收藍牙傳輸的檔案

Gnome版本:3.8.4


Gnome3中要接收藍牙發送來的檔案跟我的理解不太一樣,

並不是在「設定值」> 「Bluetooth」裡面設定,

而是透過「gnome-file-share-properties」這隻程式設定的。


參考資料:http://evilshit.wordpress.com/2013/03/24/how-to-receive-files-via-bluetooth-on-gnome3/

2014年3月13日 星期四

在Linux下載Youtube影片的字幕

先至Google2SRT下載檔案,

解壓縮後用Terminal開啟資料夾,

確定系統有安裝Java後,

執行run.sh,指令如下:

source ./run.sh

或者

sh ./run.sh

上面兩個指令擇一就OK了,

執行成功會跳出操作視窗,

操作方法就不再贅述了,

可以參考下面的連結。


參考資料:http://www.techbang.com/posts/10043-how-to-download-youtube-movies-subtitles-pchome-198-drj

2014年3月9日 星期日

php顯示錯誤訊息

可以透過函式:error_reporting()和ini_set()來完成,

用法如下:

------------------------------------------------

ini_set('display_errors', '1');

error_reporting(E_ALL);

------------------------------------------------

第一行為設定php的設定檔,

把「display_errors」這個選項設定為開啟(1)。

第二行是回報錯誤訊息的種類。

其中,error_reporting()的參數「E_ALL」表示顯示所有錯誤訊息,

其他種類的錯誤訊息可以參考:

 http://www.php.net/manual/en/errorfunc.constants.php

參考資料:

ini_set():

http://www.php.net/manual/en/function.ini-set.php

error_reporing():

http://php.net/manual/en/function.error-reporting.php

2014年3月8日 星期六

Vim: 英文字母的大小寫轉換

以前轉換英文字母的大小寫都是透過人工的方式,

一不小心就會打錯字,

之後上網找方法,看到了Vim官網上的教學:

在Vim的normal mode下選取文字,並鍵入:

gu」:大寫轉成小寫,原本是小寫的維持小寫。

gU」:小寫轉成大寫,原本是大寫的維持大寫。

g~」:大寫的部份轉成小寫,小寫的部份轉成大寫。


參考資料:http://vim.wikia.com/wiki/Switching_case_of_characters

Vim: 多行插入空白

在用Vim Coding時常常會需要換行與縮排,

有時會遇到要縮排n行,

通常會透過「CTRL + v」來選取空白,

接著貼上於要縮排的區段的前面,

可是如果要縮排的對象是在每行開頭的位置,

就無法預先選取空白了。

如果遇到這樣的問題,可以不用一行一行的操作,

可以透過「CTRL + v」先選取要空白或Tab的部份,

接著鍵入「I」,

此時會跳至「CTRL + v」所選取的第一行,

輸入空白或Tab,接著隨意移動游標,

剛剛選取的每一行就會自動重複第一行的動作。


2014年2月15日 星期六

查看MySQL的狀態

只要在進入MySQL後輸入:

\s

就會顯示MySQL一些常見的訊息。

於CSS中使用外部的字型

 只要在CSS中加入:
 
@font-face {
    font-family: "NAME";
    src: url(font.otf);
}
 
其中「NMAE」是自訂的字型名稱,
font.otf」是字型檔的路徑與名稱。

2014年2月11日 星期二

啟動apache2的Rewrite module

Ubuntu 13.10預設的apache2並沒有啟動Rewrite module

只要輸入:

sudo a2enmod rewrite

就可以啟動Rewrite module。

2014年1月27日 星期一

vim 折疊(fold)功能

以前就已經知道vim有折疊文字(程式碼)功能,不過那時候覺得還不需要,

也以為還要額外裝plugin,怕會很麻煩。

但如今開始會看一些比較長的程式碼,於是決定把它加入.vimrc

只要在.vimrc裡輸入:

set foldmethod=marker

就會以「{{{」來標示折疊的起始行,以「}}}」標示折疊的結束行,

如果沒有設定這一行的話,預設是不會顯示像「{{{」和「}}}」的縮排符號的,

而且一離開vim,fold就會取消,也就是下次開啟vim時fold就會不見。


另外,如果在.vimrc加入:

set foldlevel=0

可以讓開啟檔案時,預設將所有fold關閉。



接著來看fold的操作方式:


zo:開啟fold。
zc:關閉fold。
zm:全部縮起來(將 foldlevel-1)。
zM:全部縮起來(設 foldlevel=0)。
zf:製作出起始 fold 符號。
zF:製作出起始與結尾 fold 符號。
zi:啟用/關閉fold。
zO:打開所有fold。
zC:關閉所有fold。
zx:更新fold,即除了游標所在fold不關,其他都關掉。

其中zm和zM的差別目前還搞不清楚,搞清楚之後會再補上。

php的time()、date()、strtotime()、mktime()初步認識

int time(void):

表示從Unix紀元(1970/01/01 00:00:00)開始到現在的秒數。

傳回值為:int。





string date(string $format[, int $timestamp]):

格式化本地的時間或日期。

第一個參數($format)是格式化字串,詳細請參考:

http://tw2.php.net/manual/en/function.date.php

第二個參數為時間戳($timestamp),預設是time(),可省略。

傳回值為:string。如果參數錯誤,則回傳false。





int strtotime(string $time [, int $now = time() ]):

將英文文字轉換成時間戳(timestamp)。

第一個參數是一個英文字串,php官網範例如下:

<?php
    echo strtotime("now"), "\n";
    echo strtotime("10 September 2000"), "\n";
    echo strtotime("+1 day"), "\n";
    echo strtotime("+1 week"), "\n";
    echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
    echo strtotime("next Thursday"), "\n";
    echo strtotime("last Monday"), "\n";

?>

第二個參數恕時間戳(timestamp),預設是time(),可省略。

傳回值是:int。如果參數錯誤,則回傳false(php 5.1版之前傳回 -1)。






int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ):

取得一個日期的Unix時間戳。

第一個參數:小時數。

第二個參數:分鐘數。

第三個參數:秒數。

第四個參數:月份數。

第五個參數:天數。

第六個參數:年數。

第七個參數:當值為1時,表示為夏令時間(Daylight saving time)。0則為非。

(php 5.1.0 以後的版本已取消第七個參數)

參數可以從右向左省略,或者說由後向前省略。

EX:

mktime(0, 0, 0, 2); //省略了天數和年數(還有夏令時間)。

傳回值:int。如果參數錯誤,則回傳false(php 5.1版之前傳回 -1)。

2014年1月9日 星期四

APT:upgrade與dist-upgrade的差別

在Debian或其他基於Debian的distro中(Ubuntu、Linux Mint...等),

要更新系統通常會用:

apt-get update

加上

apt-get upgrade

其中使用upgrade時,有時會發生套件(package)「未被升級」的現象,

這表示指定套件在安裝過程中,與其他套件有相依性的問題,

更具體的說,就是當安裝一個套件時,

發現需要安裝其他新的套件影響到其他套件的相依性,

該套件就不會被升級, 而保留下來。

這時可以使用:

apt-get dist-upgrade

dist-upgrade會自動幫你解決相依性問題,

也就是嘗試去安裝或移除那些新的套件或相依性受影響的套件,

所以通常會被認為是較有風險的升級。



參考資料:
http://blog.longwin.com.tw/2008/03/debian_ubuntu_apt_dist_upgrade_difference_2008/

2014年1月7日 星期二

在Debian下安裝FireFox(tar.bz2)

環境:
Debian:Jessie(testing)
Firefox:Firefox 26

安裝日期:2014年1月7日

--------------------------------------------------------------------------

Debian與Firefox因為商標(trademark)的問題

導致Debian將Firefox從套件庫中移除

而重新編譯原本的Firefox,改名為Iceweasel

詳細內容請看Wikipedia
http://en.wikipedia.org/wik/Mozilla_Corporation_software_rebranded_by_the_Debian_project

不過在使用Iceweasel時,發現Firebug竟然無法使用

於是決定下載Firefox官方提供的.tar.bz2檔來自行安裝

步驟如下:

  1. 將下載好的.tar.bz2檔案解壓縮後搬動至/opt/

    tar -xvf firefox-26.0.tar.bz2 #解壓縮

    mv firefox/ /opt/
  2. 接著解除Iceweasel的安裝

    apt-get --purge remove iceweasel #身份是root
  3. 將/opt/firefox/中的firefox建立連結至/usr/bin/

    ln -s /opt/firefox/firefox /usr/bin/firefox
  4. 接著建立Firefox的icon,並編輯內容

    touch /usr/share/applications/firefox.desktop #建立icon


    vim /usr/share/applications/firefox.desktop #編輯檔案並加入以下內容

    [Desktop Entry]
                Encoding=UTF-8
                Name=Firefox
                Comment=Browse the World Wide Web
                GenericName=Web Browser
                X-GNOME-FullName=Firefox Web Browser
                Exec=/opt/firefox/firefox %u
                Terminal=false
                X-MultipleArgs=false
                Type=Application
                Icon=
    /opt/firefox/browser/icons/mozicon128.png
                Categories=Network;WebBrowser;
                MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
                StartupWMClass=Firefox-bin
                StartupNotify=true
     

(注意:Icon=「icon圖片的位置」)

以上步驟就可以成功安裝Firefox於Debian了!!


不確定此安裝法是不是最好的(或者建議的),未來有更好的方法會再修改~


參考資料:
http://blog.chinaunix.net/uid-47131-id-3766899.html
http://www.libre-software.net/how-to-install-firefox-on-ubuntu-linux-mint