2014/12/27

Ubuntu Install Oracle Java via PPA

sudo add-apt-repository ppa:webup8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

You can find the latest version available from the website:
http://www.ubuntuupdates.org/ppa/webupd8_java

2014/12/24

[C++] static_cast & dynamic_cast

以往都用(int) variable來強迫轉型,新的C++裏頭似乎比較鼓勵用static_cast
dynamic_cast在物件轉型時會檢查是否由父類別轉為子類別,接著才進行轉換

Reference:
http://windsplife.blogspot.tw/2010/09/cstaticcast-dynamiccast-reinterpretcast.html

2014/12/23

Installing Virtualbox Guest Additions in Ubuntu

Take VirtualBox 4.3.20.96996 for example: 


sudo -i

cd /media/username/VBOXADDITIONS_4.3.20_96996/

./VBoxLinuxAdditions.run


p.s
Change the username to yours, and make sure of the version.

2014/12/11

[Visual C++] MySQL Port Setting

connectstr = "Network Address="+server+";"+"Port=3307;"+"Persist Security Info=no;"+"User Name="+userID+";"+"Password="+password;

2014/11/13

[C++] string大小寫轉換 (透過transform)

以前做大小寫轉換時候,會用tolower()、toupper()來做 (或者直接利用ASCII來加減)
比較麻煩的是要寫一個迴圈,一次一個字元來轉
剛剛有學弟問字串轉換的問題,順便google了一下,發現用transform只要一行就好
記得要#include <algorithm>


2014/11/02

Visual C++ 各種字串之間的轉換方法

Reference:
http://www.cnblogs.com/oomusou/archive/2008/07/24/cpp_string_net_string.html

要將C++ STL string轉成Visual C++的^String
可以透過gcnew()的參數來進行初始化

ex:

string data = "Hello World";
String ^str = gcnew String(data.c_str());

注意gcnew的參數需要是C-Style string,所以透過.c_str()做轉換

2014/10/26

[LTspice] Triangle Wave

LTspice doesn't have the  "Triangle Wave" option, so we use "PULSE" option to generate triangle wave. See the link below for more details.

Reference:
http://ltwiki.org/?title=LTspice_has_a_built_in_Triangle_Wave

Example:
Generate a triangle wave with low level 6V and high level 10V. Frequency= 1kHz


2014/10/18

[LTspice] 模擬 Operation Amplifier 元件

點選工具列上的Component按鈕


輸入需要的op amp model
這邊以LT1001為例,點選之後按OK,就能在畫面擺放所選的op amp


也能在輸入的地方打 opamp
LTspice會切到C:\Program Files (x86)\LTC\LTspiceIV\lib\sym\Opamps底下
就能看到所有的op amp model了

2014/09/06

POJ 1915 Knight Moves

Description
Background
Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him?
The Problem
Your task is to write a program to calculate the minimum number of moves needed for a knight to reach one point from another, so that you have the chance to be faster than Somurolov.
For people not familiar with chess, the possible knight moves are shown in Figure 1.

2014/09/01

用 Notepad++ 寫 C/C++

1. Plugins -> NppExec -> Follow $(CURRENT_DIRECTORY)
    (如果沒有看到NppExec,就到Plugin Manager找到它然後安裝)

2.把Compiler的位置加入系統環境變數
   如果電腦上已經有安裝其他IDE(ex: Dev C++、CodeBlocks),可以直接拿他們的Compiler來用
    以安裝Dev C++的電腦為例,在環境變數path中加入
    C:\Program Files (x86)\Dev-Cpp\MinGW32\bin

3.Plugins -> NppExec -> Execute 
   (或者直接用快捷鍵 F6)
   接著在欄位內填入
 
   你的Compiler位置  "$(FULL_CURRENT_PATH)" -o $(NAME_PART)
 
    以接續第二步驟的例子來說,就是

    C:\Program Files (x86)\Dev-Cpp\MinGW32\bin\g++.exe "$(FULL_CURRENT_PATH)" -o $(NAME_PART)

4.設定完成就可以在Notepad++裡面coding了,寫完之後存成c/cpp檔,按下F6即可編譯

5.要執行的話就在Notepad++下方console畫面輸入執行檔名,就可以看到執行結果


[自動完成]

使用其他IDE有個好用的功能,就是自動完成符號配對和提示參數名稱
在Notepad++要開啟這個功能,從 自訂 ->使用者自訂 -> 字詞自動完成功能 裡面去做設定

2014/08/26

[C++] C++ STL 產生所有排列

要產生一串資料的所有排列情形
可以直接呼叫C++ STL的next_permutation()或pre_permutation()
記得要先把資料做過排序(前者遞增排序,後者遞減排序)
(1)array

除了陣列可以這樣列出排列組合之外,vector container也可以
(2)vector

2014/07/29

[ACM] Q490 Rotating Sentences

輸出的地方看起來是正確了,不過Online Judge給Wrong Answer 不知道是不是因為沒有對輸入資料合法性作確認的緣故,待修正。

[ACM] Q10409 Die Game

交換兩個面後,利用骰子對面點數和為7的特性,求出剩餘兩個面的值。

2014/07/28

[ACM] Q458 The Decoder

相當輕鬆的一題,看出ASCII的差值就可以了

[ACM] Q10041 Vito's Family

[ACM] Q1225 Digit Count

Note: 如果輸出有多出或漏掉題目要求的空格、斷行,Online Judge會給presentation error

Online Judge

詳細介紹參考
http://www.csie.ntnu.edu.tw/~u91029/oj.html

「 Association for Computing Machinery (ACM) 」是一個致力於電腦科學教育的協會,出版大量的專業期刊文獻,舉辦重大的計算機科學會議,在資訊界舉足輕重、名聞遐邇。

ACM 每年度都會舉辦一次「 The ACM-ICPC International Collegiate Programming Contest (ACM-ICPC) 」,是一個給全世界大專院校學生參加的演算法程式設計比賽,比賽目的在於考驗選手臨場的演算法設計能力、程式編寫能力。 ACM 首先在世界各地舉辦初賽,再從各個賽區選拔出表現優秀的隊伍,角逐世界總決賽。

ACM-ICPC 帶動了演算法程式設計的風氣。世界上許多大專院校的資訊系所,仿照 ACM-ICPC 的比賽模式,紛紛自行開發出即時線上比賽系統,能夠自動批改、評分、計時、統計。學生不必齊聚一堂,藉由網際網路,就可以相互切磋程式設計技巧。比賽結束之後,便將比賽題目編列題庫,開放線上批改程式的功能,供學生賽後練習檢討。這套系統大家普遍稱呼為「 Online Judge System 」、「 Online Judge 」。

最古老、也是最有知名度的 Online Judge ,是由西班牙知名的瓦雅多利大學「 Universidad de Valladolid (UVa) 」開發的「 UVa Online Judge 」。 UVa Online Judge 是台灣人最熟悉的一個 Online Judge :資訊相關科系的學生,常利用它來磨鍊程式設計技巧;教師將它當作課程教材使用;有許多個人網站從事題目翻譯,提供測試資料集等等。

UVa Online Judge 亦和 ACM 合作,成為 ACM 推廣的一個 Online Judge ,藉此向大眾提倡程式設計。因此, UVa Online Judge 除了收集自行舉辦的比賽的題目,也嘗試收錄世界各地重大程式設計比賽的題目,以臻豐富完整。

有趣的是,歷年來大家口耳相傳、以訛傳訛,便將 UVa Online Judge 誤植為 ACM 了,把 UVa Online Judge 的題庫稱作「 ACM 題目」,利用 UVa Online Judge 訓練程式設計技巧時稱作「寫 ACM 」,約定俗成。

從事這項活動,不僅可以學習演算法、熟悉程式設計、鍛鍊智力,還可以培養自主學習與獨立解題的能力──此即程式設計師的核心價值。因此近年來演算法程式設計開始獲得大家重視,產業界紛紛舉行演算法競賽,大專院校也紛紛開設相關課程,大家也開始將這項活動稱呼為「 Competitive Programming 」。

                                                                                                                            --節錄自 演算法筆記

[ACM] Q573 The Snail

2014/06/29

[ACM] Q263 Number Chains

發現用atoi()轉換的話, "00135"可以正確轉為135
這樣就可省去自己判斷產生出來最小值的位數問題
另外在C中可用atoi()、atol()將字串(char [])轉為整數
要將整數轉回字串的話,可以用sprintf(string, "%d", int);
P.S 有個itoa()是Windows底下的整數轉字串函數,要跨平台的話必須用sprintf()
itoa()
sprintf()

2014/06/07

用 Eclipse 寫 C/C++

要在Eclipse的環境底下寫C/C++,需要安裝CDT(Eclipse的C/C++ plugin)以及C/C++ compiler

1.下載 MinGW 並且把它裝起來,完成之後打開MinGW Installer勾選Basic Setup裡面的項目安裝

2.把C:\MinGW\bin加到環境變數path的最前面
   如何加入Windows環境變數

3.打開Eclipse,在Help -> Install New Software,找到Work with欄項填入對應所使用Eclipse版本的p2 software repository 把所有出現的項目打勾之後同意安裝

基本上這樣就完成Eclipse的C/C++設定
開一個新的C/C++Project來測試是否能正確運作
在project選擇compiler的地方,記得要選所安裝的MinGW GCC
程式碼完成要run之前,必須先build,可以使用快捷鍵ctrl + b

詳細的圖文設定可以參考:
使用 Eclipse 開發 C 及 C++ ( CDT + MinGW )

p.s MinGW安裝過程畫面可能跟上面網站不一樣


Eclipse + CDT提供另外一個C/C++ IDE的選擇
不過就硬體需求和效能上來講 Code Block 會比較好,而且compiler可以調整的選項也比較多


2014/05/02

[轉]系統時間定義從1970年原因

最初計算機操作系統是32 位,而時間也是用 32 位表示。

System.out.println(Integer.MAX_VALUE);
2147483647



Integer在 JAVA 內用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的總秒數是 31536000,

2147483647/31536000 = 68.1

也就是說32 位能表示的最長時間是 68 年,而實際上到 2038年 01 月 19 日 03 時 14 分 07
秒,便會到達最大時間,過了這個時間點,所 有 32 位操作系統時間便會變 為
10000000 00000000 00000000 00000000

也就是1901年 12月 13 日 20時 45 分 52 秒,這樣便會出現時間回歸的現象,很多軟體便會運 行異常了。

到這裡,我想問題的答案已經出來了:

因為用32 位來表示時間的最大間隔是 68 年,而最早出現的 UNIX 操作系統考慮到計算
機產生的年代和應用的時限綜合取了 1970 年 1 月 1 日作為 UNIX TIME 的紀元時間 ( 開始
時間 ) ,而 java 自然也遵循了這一約束。

至於時間回歸的現象相信隨著64 為操作系統 的產生逐漸得到解決,因為用 64 位操作
系統可以表示到 292,277,026,596年 12月 4 日 15時 30 分 08 秒,相信我們的 N 代子孫,哪
怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以後了。

最後一個問題:上面System.out.println(new Date(0)),列印出來的時間是8點而非0點,
原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我的電腦時區
設置為東8區,故列印的結果是8點。

節錄自:
http://www.010cnc.net/subject/about/java%E7%82%BA%E5%95%A5%E8%A8%88%E7%AE%97%E6%99%82%E9%96%93%E5%BE%9E1970%E5%B9%B41%E6%9C%881%E6%97%A5%E9%96%8B%E5%A7%8B.html

2014/04/08

Graphics.h In Code::Blocks

1. Download the pack: Graphics
2. Extract Graphics.rar and
    Copy the file "graphics.h" to "C:\Program Files (x86)\CodeBlocks\MinGW\include"
    Copy the file "libbgi.a" to "C:\Program Files (x86)\CodeBlocks\MinGW\lib"

3. In CodeBlocks, Choose "Settings" -> "Compiler"
   Then, in the  tag "Linker settings", choose "Add" and add "C:\Program Files (x86)\CodeBlocks\MinGW\lib\libbgi.a"
 
    Next, add "-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32" to Other linker options at right.

4. Create a  C++ project, and use the code below to test if it works.

4/17 update
Show chinese character in console
Settings -> Compiler -> Other options
Add -fexec-charset=BIG-5 

2014/03/01

重新配對Logitech無線滑鼠

【問題】

將無線滑鼠與另一個無線鍵盤接收器配對之後,變成無法跟原本滑鼠的接收器配對,利用Logitech Unifying軟體想重新配對,但是軟體顯示沒有插入可用Unifying接收器,所以另尋配對的方式並記錄下來。

【解法】

1.先用Unifying將滑鼠與鍵盤接收器取消連結(因為一個裝置只能連結一個接收器)

2.插入滑鼠所附的接收器(鍵盤接收器先拔掉避免干擾),並下載Logitech Setpoint安裝
    http://www.logitech.com/zh-tw/support/3131

3.執行 C:\Program Files\Logitech\SetPointP\ConnectUtility 就能重新將滑鼠與原來的接收器重新配對


參考羅技官網:
http://www.logitech.com/zh-tw/support/5484?section=downloads&softwareid=4338&osid=1

2014/02/26

Enable Numpad in PuTTY

Change settings -> Terminal -> Features -> Disable application keypad mode

see the picture below:


2014/02/16

[C]方向鍵輸入判斷

#include <stdio.h>
#include <conio.h>

int main()
{
    char ch1, ch2;
    while(ch1 = getch())
    {
        if(ch1 == -32)
{
            ch2 = getch();
         
            if(ch2 == 72)
                printf("up key press\n");
            if(ch2 == 75)
                printf("left key press\n");
            if(ch2 == 77)
                printf("right key press\n");
            if(ch2 == 80)
                printf("down key press\n");
    }
    }
    return 0;
}