code-prettify

2015年9月26日 星期六

Arch 安裝 PostgreSQL

第一步先安裝 PostgreSQL
sudo pacman -S postgresql

然後登入 postgres 帳號
sudo -i -u postgres

接著進行資料庫初始化
initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'

如果發生錯誤,表示目前的 locale 不是 en_US.UTF-8
initdb: invalid locale name "en_US.UTF-8"

初始化資料庫後就可以啟動 PostgreSQL
sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service

建立使用者
createuser --interactive

接著用剛剛建立的使用者帳號建立資料庫
createdb myDatabaseName

使用 psql 進入資料庫
psql -d myDatabaseName

允許遠端連線
修改 /var/lib/postgres/data/postgresql.conf 的內容
listen_addresses = '*'

接著在 /var/lib/postgres/data/pg_hba.conf 將原本的 IPv4設定為
host   all   all   my_remote_client_ip_address/32   md5

設定完之後,重新啟動 PostgreSQL
sudo systemctl restart postgresql



資料來源:
Archlinux Wiki - PostgreSQL
https://wiki.archlinux.org/index.php/PostgreSQL

2015年9月24日 星期四

Qt 如何從檔案讀取 UTF-8 的中文

首先開啟檔案,
然後使用 QTextStream,
記得使用 setCodec 設定編碼。

程式範例:
QFile file("utf8");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;

QTextStream in(&file);
in.setCodec("UTF-8");
while (!in.atEnd()) {
QString line = in.readLine();
QTextStream qtout(stdout);
qtout << line << "\n";
}

資料來源:
http://stackoverflow.com/questions/5630114/how-to-read-utf-8-text-from-file-using-qt

2015年9月23日 星期三

Qt - 使用 qrand() 產生亂數 rand

Qt - 使用 qrand() 產生亂數 rand

max 最大值
min 最小值

qrand() % ((max + 1) - min) + min;

產生出來的亂數包含 max 及 min 兩者。

如果連續執行多次程式,會發現每次產生的亂數都是一樣的,
因為電腦產生的亂數,其實是偽亂數,所以想要讓每次的亂數不同,
還需要執行 qsrand 來設定亂數種子。

備註:使用 QTime::currentTime().msec() 現在時間當作種子來設定
備註:使用 QElapsedTimer 取得小於 ms 的時間刻度

資料來源:
Qt Documentation - <QtGlobal> - Global Qt Declarations
http://doc.qt.io/qt-5/qtglobal.html#qrand

How to generate random number between two numbers? Qt
http://qt-project.org/forums/viewthread/24262

Use of qsrand, random method that is not random
http://stackoverflow.com/questions/2767383/use-of-qsrand-random-method-that-is-not-random

Qt: Fast way to measure time?
http://stackoverflow.com/questions/244646/qt-fast-way-to-measure-time

Qt - 建立一個 Console 應用程式

想要用 Qt 建立一個 Console 應用程式,
只要像下列的範例就可以建立。

#include <QtCore/QCoreApplication>
#include "Foo/Foo.h"

int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);

Foo foo;

return app.exec();
}

資料來源:
How do I create a simple Qt console application in C++?
http://stackoverflow.com/questions/4180394/how-do-i-create-a-simple-qt-console-application-in-c

2015年9月21日 星期一

Arch Linux 安裝 ssh server

使用 Linux 常常會用到的功能 ssh

首先安裝 ssh server
pacman -S openssh

接著啟動服務
systemctl start sshd.service

可以設定開機自動啟動服務
systemctl enable sshd.service

如果是在 VM 底下操作的話,記得設定 port forwarding


2015年9月20日 星期日

SQL 在 Unicode 欄位設定 Unicode 文字

在 Unicode 欄位設定 Unicode 文字
必需滿足兩個條件

一、該 sql 檔案編碼為 UTF-8
這是常被忽略的一點,曾經因為檔案編碼為 Big5 而花費幾個小時找問題,
使用 SSMS 前,預設存檔編碼為 Big5,記得自行轉檔。

二、該文字前加上 N 前置詞
一個字串如果沒有加上前置詞,該字串會被當作非 Unicode 解讀,
造成存在 Unicode 欄位時變成亂碼

範例:

UPDATE GameServer.dbo.Game SET Name = N'可愛巧虎島'



資料來源:
在 SQL Server 中處理 Unicode 字串常數時,必需為所有的 Unicode 字串加上前置詞 N
https://support.microsoft.com/zh-tw/kb/239530