2009年12月29日 星期二

Teamview 簡便的遠端桌面軟體

一個簡單易用的遠端桌面軟體,
不需註冊也不需要知道對方IP位址,可突破防火牆封鎖
就可遠端連線控制對方電腦或讓對方遠端控制自己電腦
也可作兩台電腦間的檔案傳輸

參考文章(下載):Teamviewer 免安裝中文版
##ShowAll##

2009年12月22日 星期二

JAVA筆記-覆寫equals()與hashCode()

之前寫Collection,看到這兩個方法,就很想使用
但要用的近乎人意,卻要很費一番功夫

沒有被覆寫的equals是比較兩物件的參考位置,物件不同則傳回false
若要比對兩物件屬性內容值,則要自己覆寫
並且也一併覆寫hashCode,不同物件會有不同hash code
若兩物件equals()相等,hashCode()也必須相等,否則可能會有錯誤問題
尤其是Hash-Based Collection會用到

/* equals()覆寫例子 */

public boolean equals(Object obj) {

  //若同一物件則true
  if (this == obj) return true;

  //getClass()會可用來判斷物件是否屬於同一類別
  if(obj != null && getClass() == obj.getClass()){
    if(obj instanceof Ball) {
      Ball ball = (Ball)obj;
      //比對屬性內容值
      if (tradeMark.equals(ball.tradeMark) &&
          kind.equals(ball.kind) &&
          color.equals(ball.color)) {
        return true;
      }
    }
  }
  return false;
}


覆寫hashCode()不容易,
使用jakarta所提供的HashCodeBuilder類別,
下載commons-lang-2.1.jar,
看到這裡,懶惰的我,也想放棄了,
真的要用到再說吧!

/* hashCode()覆寫例子 */

import org.apache.commons.lang.builder.HashCodeBuilder;//加入外掛

public int hashCode() {
  return new HashCodeBuilder(17, 37). //應放入兩個質數
    append(tradeMark). //利用append()加入參與的物件變數
    append(kind).
    append(color).
    toHashCode(); //最後取得hash code數值
}

JAVA筆記-initializer實做區塊

{...}單獨放在class內是用來初始實做區塊
分為兩種instance initialize、static initialize

在instance initialize區塊,
編譯器會將其內部的程式碼複製到每個建構子中,
若原initialize區塊和instance initialize區塊中有定義相同的變數
則會以initialize的定義為主,
而該變數不會被instance initialize的定義覆蓋

至於static initialize則不會被複製到建構子中,會用來初始化靜態變數,
static initialize不能存取一般的instance物件變數,
但instance initialize是可存取static和non-static的成員變數

public class InitializerSample {
  String id;
  int birthday;
  String name;
  static int money;

  InitializerSample() {}
  InitializerSample(int kind) {}

  //instance initialize
  {
    id = "A123456789";
    birthday = 20050101;
    name = "pcschool";
  }

  //static initialize
  static {
    money = 10000;
  }
}

JAVA筆記-多個繼承時,使用型別轉換要注意

進行物件型別轉換時,多個繼承容易撰寫錯誤,
未避免執行風險,加上instanceof判斷式

class Animal extends Organism{...}
class Mammalian extends Animal{...}
Animal animal = null;
if(new Mammalian() instanceof Animal){
  animal = (Animal)new Mammalian();
}
##ShowAll##

2009年12月19日 星期六

JAVA筆記-靜態內部類別的存取權限

一般類別+內部類別+static的存取關係真是複雜
難怪當初看JAVA我會不由自主的想先跳過
沒事不要寫這麼複雜關係的程式碼,
如果要用到一本書要放在旁邊就是了

靜態外部類別的內部類別同樣是被放在Global記憶體區塊,
所以內部類別不管有沒有宣告static,都可互相看見而存取
(其實一般使用靜態類別時,本身內部就沒有設定static,
成員變數本來就互相看見,多設定一道static,
它還是放在Global記憶體內,當然還是會可以看見)

靜態類別本身是沒有this指標,也不需要new建立實體
但靜態內部類別的non-static成員會有this指標指向自己,
(這一段話我感到有點含糊,靜態內部類別裡的non-static成員為什麼會有this指標?)
所以靜態內部類別可以同時定義static和non-static成員,
因此,也可用new來建立靜態內部類別的實體

class MyOuter {
  private int x = 7;
  static private int sx = 9;

  static class MyStatic {
    private int x = 77;
    static private int sx = 99;
    public void fooA() { // non-static member
      System.out.println("static inner class A.");
      System.out.println(sx); //
      System.out.println(MyOuter.sx); //
      System.out.println(x); //
      System.out.println(this.x); //
      //static inner class中沒有MyOuter的this指標
      //System.out.println(MyOuter.this.x);
    }

    public static void fooB() { // static member
      System.out.println("static inner class B.");
      System.out.println(sx);
      System.out.println(MyOuter.sx);
    }
  }
}

public class StaticInnerClass {
  public static void main(String[] args) {
    //MyOuter.MyStatic.fooB();
    MyOuter.MyStatic s = new MyOuter.MyStatic();
    s.fooA();
    s.fooB();
  }

執行結果:
99
9
77
77

99
9

JAVA筆記-用匿名內部類別來實作介面

內部類別沒有實際練習過,雖然看懂了用法,
但還是感到含糊,不知道要在怎樣的情況下運用
適合用在程式只會用到一次就不需再使用類別的情況
##ReadMore##
interface Pet {
  void skill();
  void move();
}
public class AnonymousClass {
  public static void main(String[] args) {
    Pet p = new Pet()
    {
      public void skill(){
        System.out.println("我會握手 !");
      }
      public void move(){
        System.out.println("我會跑步 !");
      };
    };
    p.skill();
    p.move();
  }
}

2009年12月11日 星期五

JAVA筆記-import static

只是讓程式少打幾個字,方便程式設計師撰寫程式更清楚明瞭
使用import static的最後指向必須是靜態成員
##ReadMore##
import
import java.lang.System;

out.println("hallo");

import static
import static java.lang.System.out;

out.println("hallo");

JAVA筆記-列舉當一般類別,可用抽象方法和實做

列舉用抽象方法,需自行透過覆寫來實作
public enum Operator {
  //------> 利用匿名類別來實做operate(int x) <------   //加入()的撰寫   PLUSONE(){ int operate(int x){ return x;} },   //可省略()的撰寫   ABS{ public int operate(int x){return x;} };   //抽象方法   abstract int operate(int x); }

列舉可實做介面,但未開放使用繼承
public enum Orderenum implements OrderInterface{}
##ShowAll##

JAVA筆記-列舉當一般類別,可加入方法和屬性

列舉也是類別,當作外部類別時可加入屬性和方法,
但列舉的值必須先宣告,且列舉設定完內容要加分號
且編譯器不會自動加上static final修飾字
##ReadMore##
public enum OrderEnum {
  STOCKNO(2330),
  STOCKPRICE(45.5),
  STOCKQTY(10), //有參數,由OrderEnum(double d)建構子實作
  IDENTIFY(); //無參數,由OrderEnum()建構子實作

  private OrderEnum() { //列舉建構子一定是private
    System.out.println("A");
  }

  OrderEnum(double d) { //列舉建構子會編譯成private
    System.out.println("B");
  }

  public int id; //屬性

  public boolean submit(){ //方法
    return true;
  }
}

JAVA筆記-enum列舉,switch應用

//會自動轉成Week.Monday.ordinal(),用int比對,數值由0遞升
switch(Week.Monday){
  case Monday:
    System.out.println(Week.Monday);
    break;
}
##ShowAll##

JAVA筆記-enum列舉,宣告與輸出

宣告範例:
public enum Week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}

編譯器會將列舉自動加上public、static、final的修飾,
即不被繼承、定義後資料無法更改

輸出值範例:
//輸出單一字串
System.out.print(Week.Sunday);

//輸出列舉內全部字串
Week[] week = Week.values(); //將列舉轉成陣列使用
for(int i=0; i<week.length; i++) //取得列舉長度
  System.out.print(week[i] + ", ");


覆寫toString(),因值而異的類實作
enum Grade {
  A{public String toString(){return "a"}}, B, C, D
}
System.out.print(Week.A); //結果輸出的是a

JAVA筆記-介面與抽象類別的差異

介面與抽象類別內的皆可宣告抽象方法,
且不可直接建立實體,必須由其他類別來實作出來,
所以也容易混淆

目的上 =>
interface是制定訊息接收者的規格,模擬類別的多重繼承
abstract class則是制定部分物件的規格,並且制定訊息接收者的規格,為多型作準備。

使用上 =>
interface用來被實作,abstract class則是用來被繼承

概念上 =>
abstract class:
可以想像手機物件基本上該有哪些功能,然後將那些功能名稱定義好,
一定也有一些功能是所有手機都一樣的!也可以先都寫好。     
定義好之後,開發手機軟體的廠商就可以依據這些已定義好的method來撰寫
interface:
顧名思義就是不同系統、或是不同世界的中介橋樑,   
只注重介面格式,而不理會實作內容。   
如:人跟電腦的溝通介面是什麼?螢幕、鍵盤、滑鼠等...     
人跟手機的溝通介面是什麼?螢幕、鍵盤等...   
所以一個物件可以有很多個介面,像手機的鍵盤面板,   
今天高興換紅色,明天工作開心換藍色,
因為介面是一樣的,所以可以隨便更換面板。

差異上 =>
1.
interface的方法全都是抽象方法
abstract則有一般方法和抽象方法
抽象方法指的是沒有「實作」出來的方法
2.
interface與abstract類別都不能直接用來建立物件實體,
必須由一個標準類別來繼承它,實作其抽象方法,
然後再以此建立物件實體。
3.
interface可多重繼承interface
abstract只能單一繼承
3.
interface沒有建構子
abstract有建構子
4.
interface沒有內建的super與this變數
abstract有內建的super與this變數
5.
interface的成員變數全都是static final型式
abstract類別的成員變數比照一般類別
6.
interface內的方法只可封裝public、default
abstract內的方法只可封裝public、default、protected
7.
需要使用迂迴的方式去找出實體類別間的對應關係,
所以與抽象類別的速度相比之下較為緩慢

介面與類別一起使用的參考想法 =>
先為了某些機制建立一個介面,然後再設計一個抽象類別實作這個介面

JAVA筆記-abstract class抽象類別,由子類別實作

宣告型式:
[存取修飾元] abstract class 類別名稱 [implements ...] [extends ...]

抽象類別由子類別用extends來實作,不可用new建立實體
抽象類別內的方法可以使用一般方法和抽象方法,
而抽象方法要加abstract,
並且不可用private,因為子類別無法實作沒有道理

abstract class Car {
  public void power(){}
  abstract void move();
}
public class Tank extends Car{
  public void move(){
    Syatem.out.println("Track");
  }
}

2009年12月9日 星期三

JAVA筆記-final的意義

1. final+屬性 => 一經定義後,就不可再變更值(即常數)
2. final+方法 => 不可再被覆寫
3. final+類別 => 不可再被繼承

JAVA筆記-interface介面,解決多重繼承問題

為一種標準、規範,只是做規格、功用的定義宣告
由於extends不能單一繼承一般類別,為了達到多重繼承的目的,
在介面類別中可以多重繼承介面類別,來模擬一般類別的多重繼承
多重繼承寫法:extends 介面類別1, 介面類別2 ,介面類別3 ...
必須全部都是介面類別
介面宣告寫法:[存取權限] interface 介面名稱 [extends ...]

使用介面的類別用implements來實作,不可用new建立實體
且全部方法都會編譯成抽象方法
實作介面寫法:[存取權限] class 類別名稱 implements [extends ...]


public interface Pet {
  String attr = "cute"; //必須給予初值
  void skill(); //不能實作函式
  void move(); //不能實作函式
}

javac會自動編譯成下方程式碼
public interface Pet {
  public static final String attr = "cute";
  public abstract void skill();
  public abstract void move();
}

所以存取權限必須只能用default和public,否則會錯誤


下方程式碼寫了一個Dog來實做Pet
public class Dog implements Pet{
  public void skill(){
    System.out.println("玩球");
  }
  public void move(){
    System.out.println("跑跑跳跳");
  }
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.skill();
    dog.move();
  }
}

JAVA筆記-instanceof多型使用方法

用不同型別的宣告,建立繼承物件的實體,
使用的是實做物件的函式與屬性
##ReadMore##
/******************
Animal: move()
Bird: move()
Cat: move()、skill()
Tiger: skill()
Bird、Cat繼承Animal
Tiger繼承Cat
*******************/

class Animal {
  public void move() {
    System.out.println("移動...");
  }
}
class Cat extends Animal {
  public void move() {
    System.out.println("跑跑跳跳...");
  }
  public void skill() {
    System.out.println("洗澡...");
  }
}
class Bird extends Animal {
  public void move() {
    System.out.println("蹦蹦飛飛...");
  }
}
class Tiger extends Cat {
  public void skill() {
    System.out.println("守獵...");
  }
}

public class Zoo {
  public static void main(String[] args) {

    //ex1
    Tiger a = new Tiger();
    t.skill; //呼叫Tiger的method
    t.move; //呼叫Tiger的method

    //ex2
    Cat c = new Tiger();
    c.skill; //呼叫Tiger的method
    c.move; //呼叫Tiger的method

    //ex3
    Animal a = new Tiger();
    a.move; //呼叫Tiger的method
    a.skill; //編譯錯誤
    //Animal型別沒有skill(),無法使用Tiger的函式

    /*********************
    //ex4
    Animal a = new Tiger();
    ((Tiger)a).skill; //呼叫Tiger的method
    ((Brid)a).move; //編譯正確
    //但是Tiger並不是繼承Brid,執行時會錯誤
    //必須加上條件式if(a instanceof Brid),傳回false則代表不可轉型
    //instanceof是用來判斷某個類別是否實作了某個介面
    *********************/
  }
}
  

JAVA筆記-extends繼承關係下的建構子

class Father {
  Father(){System.out.println("A")};
}

class Son extends Father{
  Son(){
    //super();//自動加入在建構子第一行,而執行super建構子
    System.out.println("B")};
}

public class Example{
  public static void main(String[] args){
    Son son = new Son();
  }
}

##ReadMore##
結果輸出:
A
B

PS:若super類別的建構子有需要參數,則必須自行輸入,否則可能錯誤
       在static中,沒有this和super的參照,所以不能用這兩個相關指令

Adobe Flash Player 看線上影片必備安裝

上網必備,作業系統沒有內建Adobe Flash Player就直接安裝吧!

參考文章(下載):Adobe Flash Player 離線安裝版(內建 IE、Firefox 版及移除工具)

Http File Server(HFS) HTTP的檔案伺服器

類似FTP Server,但這套軟體傳輸速度比較不穩定
基本上FTP Server上該有的功能幾乎都具備
好處是可以直接用IE呈現,架站非常簡單,也不需額外使用客戶端軟體
臨時傳檔給朋友最方便,那還需要FTP嗎?

最好使用2.2以上英文版本,網頁上會有folder archive的字串
可讓使用者直接在網頁上打包下載整個資料夾
而且更重要的是還可編輯HTML網頁,這軟體真大心的

參考文章(下載):HFS 檔案伺服器

2009年11月13日 星期五

JAVA筆記-vararg變長參數,利用省略號傳多個參數

利用省略號...傳多個參數,也是把參數自動轉成陣列
public int calc(int...c){
  int sum = 0;
  for(int i:c)
    sum+=i;
  return sum ;
}

/*使用時可傳多個參數*/
int a = new calc(1,2);
int b = new calc(1,2,3,4);
int c = new calc(a,b);
##ShowAll##

JAVA筆記-關於static成員

static只能用在類別裡,
不能使用在方法之內,
方法內也不能再定義方法

類別內,static不可呼叫non-static,只可呼叫static,
non-static則都可,
因static不需要被建立就可執行,
亦即static成員中根本沒有隱含的this參考指標指向物件,
但non-static卻未被建立,必須先new出來才可用
public class Test {
  void a() {
    b(); //正確
    d(); //正確
  }
  void b() {}
  static void c() {
    b(); //錯誤,不可直接呼叫b()
    d(); //正確,可直接呼叫d()
  }
  static void d(){
    new Test().b(); //正確,可直接呼叫b()
  }
}

JAVA筆記-Object類別提供的方法

##ShowAll##任何物件包含自定義物件,都繼承Object類別
Object提供的方法:
clone()
equals()
finalize()
hashCode()
notify()
notifyAll()
toString()
wait()

JAVA筆記-物件導向的兩個精神與三個特徵

##ShowAll##

精神
1.抽象化(Abstraction)
2.繼承(Inheritance)

特徵
1.繼承(Inheritance)
2.封裝(Encapsulation)
3.多型(Polymorphism)

2009年10月5日 星期一

JAVA筆記-取得陣列個數

int[] i = new int [10];
int len = i.length; //len=10

JAVA筆記-建立多維陣列

##ShowAll##
int m[][] = new int [2][3]; //生成多維陣列

int m[][] = new int[][3]; //不合法
int m[][] = new int[2][]; //合法,生成動態陣列
m[0]= new int[3];
m[1]= new int[5];

/* 若要變動陣列大小,需重新new物件 */

JAVA筆記-宣告類別、屬性、方法的權限

##ShowAll##
修飾元用來宣告類別、屬性、方法的權限

private => 同一class才可存取
dafault => 同一package的class才可存取
protected => 同一package的class才可存取,
                   不同package要有繼承關係才可存取
public => 皆可存取

類別只能使用public和default,若是內部類別則皆可使用

2009年9月30日 星期三

JAVA筆記-jar包裹classes

包裹classes全部目錄到sample.jar
命令=> jar -cvf sample.jar


關於META-INF目錄和MANIFEST.MF文件另外做學習

JAVA筆記-classpath路徑

-sourcepath 用來設定.java檔的位置
-classpath或-cp 用來指向副檔名為.jar、.zip、.class的位置

不同的classpath以;符號來分隔(linux下,用:符號)
ex: -classpath classpath1;classpath2;classpath3

若C:\prg\SCJP\classes\com\pet\water下有Fish.class
Fish.class的套件設定是package com.pet.water

絕對路徑,在C:\目錄下
C:\>java C:\prg\SCJP\classes com.pet.water.Fish

相對路徑,C:\prog\SCJP目錄下
C:\prg\SCJP>java -cp .\classes com.pet.water.Fish

不用設定-cp,C:\prg\SCJP\classes目錄下
C:\prg\SCJP\classes>java com.pet.water.Fish

JAVA筆記-package和import

file1
package water;

public class Fish
{
  public static name = "Jerry" ;
}

##ReadMore##
file2
/* file2.java不在同一個package,程式碼的調用方法 */
public class PetScore
{
  public static void main(String[] args)
  {
    String Name = water.Fish.name ;
  }
}

file3
/* 調用import,類似C語言的include */
import water.*;

public class PetScore
{
  public static void main(String[] args)
  {
    String Name = Fish.name ;
  }
}

2009年9月28日 星期一

C/C++筆記-#運算子

//參數化巨集,#運算子可將引數變為字串
#define STR(data) #data
STR(hello)

C/C++筆記->>右移運算子

無號數,直接補0,
有號數時,正號補0,負號補1

C/C++筆記-用位元運算判斷奇偶數

if((value & 1) == 0)
  cout << "偶數" ;

C/C++筆記-設定、測試、清除的位元運算

const int BIT = 0x01;
char flags = 0; //初始狀態位元

/* 設定一個位元 */
flag |= BIT; //flags變成BIT狀態

/* 測試位元 */
if(flags & BIT != 0)
  cout << "BIT flag is set" ; else   cout << "No BIT detected" ; /* 清除位元 */ //清除位元是指flags與BIT有相同位元的地方,都必須清為0 flag = flag & ~BIT;
##ShowAll##

2009年9月25日 星期五

JAVA筆記-for-each多維陣列輸出

##ShowAll##
String[][] exams = {{"SCJP","SCWCD","SCMAD"},{"MCSD","MCAD","MCDBA"}};
for(String[] ex : exams)
{
  for(String e : ex)
  {
    System.out.print(e + ", ");
  }
}

JAVA筆記-label函式標籤

##ShowAll##
//有點像goto,但此方法似乎不會破壞程式結構
OuterLoop:
for( ; ; )
{
  InnerLoop:
  for( ; ; )
  {
    continue OuterLoop; //跳到OuterLoop標籤的函式
    break OuterLoop; //跳出OuterLoop標籤的函式
  }
}

JAVA筆記-final關鍵字使用

用final修飾過的類別(class)不能被繼承
函式(method)不能被重載,在C++加上const的函式意指回傳值不能被改變
變數不能被更改,意指常數,等於一般C++的const變數
在JAVA內,通常定義常數方法是static final PI = 3.1412;

2009年9月24日 星期四

C/C++筆記-函式預設參數

void draw(const int width, const int height, double scale=1.0);
...
//---> 以下兩呼叫函式是相等的
draw(3, 5, 1.0); //採用尺度比例
draw(3, 5,); //採用預設比例
##ShowAll##

DVDFab HD Decrypter 解除DVD防拷

解除DVD防拷,使用AnyDVD使用要錢的,
免費的有DVD43,但是好像只有英文版
一般使用免費軟體,從防拷到燒錄大概的步驟是
DVD43(或AnyDVD)解除防拷+DVDShrink轉檔(或切割)+Imburn燒錄
若使用DVDFab Platinum它全包了,但是這款要錢
包含解除防拷+DVD9轉DVD5(或切割)+DVD燒錄
而DVDFab Decrypter是DVDFab Platinum的精簡版,
在解除防拷功能方面是不用錢的,方便好用
其中內含的試用功能,可將DVD備份轉擋到許多指定的可攜式裝置
整個流程相當複雜,我覺得非必要不要嘗試,很累人的,
但學會之後,卻又是一大驚喜 DVDFab HD Decrypter
(註:DVD9轉DVD5(或切割),
這一步驟是因為原裝一片DVD容量是一般空白DVD容量的兩倍,
所以必須透過破壞壓縮轉檔或者切割成兩片)

使用DVDFab破解DVD防拷教學 =>
DVDFab HD Decrypter 破解、備份有防拷保護的DVD影片光碟?

參考文章(下載):DVDFab HD Decrypter 免安裝中文版

以前大學時為了幫朋友燒錄完整的正版DVD影音, 弄的我嘔心瀝血,
而且我那時甚至連DVD有防拷都不了解, 我研究了很多相關影音軟體,
熬夜兩個晚上, 燒了好幾片光碟,才好不容易弄出來,
因為那個時候, DVD相關的軟體其實並不多,一堆備份軟體,
但光備份沒用,必須還要解除防拷 ,
想要燒錄完整正版DVD影音是很困難的,防拷、轉檔、切割、播放、、、
我的電腦配備也不是很強,每一步驟的執行都很花時間,
時間又非常趕燒出來後,不管NeroShow或PowerDVD,
都出現一些不同的播放錯誤這都是因為防拷解除不完全,
可是那時我不知道究竟原因是什麼,
後來終於在找到AnyDVD後,終於燒成功了,
AnyDVD+Nero+PowerDVD,完整備份,可在DVD播放器上觀看
吃力不討好的工作,沒錢又被唸動作太慢,超失落的

2009年9月23日 星期三

C/C++筆記-懸盪參考

// Dangling Renferences 懸盪參考
const int& min(const int& i1, const int& i2)
{
  if(i1 < i2)
    return (i1);
  return (i2);
}
int main()
{
  const int& = min(1+2, 3+4); //傳回位址,所以取址
  return 0;
}
/* 傳回的min(1+2, 3+4)是暫存的參考指標,
函式執行完後會被刪除,然而&i仍指向這個參考指標 */
##ShowAll##

C/C++筆記-const參數與函式

//i1、i2在函式中是const變數,不能改變值
const int& min(const int& i1, const int& i2)
{
  if(i1 < i2)
    return (i1);
  return (i2);
}
int main()
{
  min(1+2, 3+4);
  return 0;
}
/*
 * const的函式意義是指,若函式是傳回參考指標變數,
 * 則該變數傳回後不能直接變更回傳值
 * min(1+2,3+4)=0;由於是const函式,傳回值不能作改變
 */
##ShowAll##

C/C++筆記-將變數傳遞進參考指標函式

//好處是傳一般變數即可
void inc_counter(int& counter)
{
  ++counter;
}
int main()
{
  int a_count = 0;
  inc_counter(a_count);
  std::cout << a_count << '\n' ; //傳回值+1   return 0; } /* 這種作法似乎不能用在C語言 */
##ShowAll##

2009年9月22日 星期二

C/C++筆記-namespace格式化變數名稱

/* 避免命名變數名稱冗長,如core_ui_games_back_ */
//---> ex1:
namespace std
{
  istream cin;
  ostream cout;
  ostream cerr;
}
std::cout << "namespace" ; //使用方法,std::cout /* 加上using namespace std;程式碼後,可直接使用cout */ //---> ex2:
namespace display
{
  int width;
  int height;
  bool visible;
};
using display::width; //使用using
width=10; //之後要就可直接使用width
/* 但應避免使用using,以免有重複名稱 */
##ShowAll##

2009年9月21日 星期一

C/C++筆記-用static_cast轉換字元變整數

//將char型態輸出為整數
signed char = 37;
cout << static_cast(ch);

C/C++筆記-長整數宣告

long int var = 1234L; //加一個L

C/C++筆記-用static_cast轉換C,C++字串

//C++字串轉C字串
char c_stype[100];
string a_string("something");
strcpy(c_style,a_string.c_str());

//C字串轉C++字串
a_string = c_style;
a_string = static_cast(c_style); //使用static_cast

/* C字串稍快一點,但使用strcpy和strcat有超過字串範圍的風險 */
##ShowAll##

C/C++筆記-strcpy和strcat超出字串範圍的風險

strcpy和strcat使用時會有超出字串範圍的風險
解法1:可用assert函式來避免

解法2:strncpy(name,"Oualline",sizeof(name)-1);
           最後一個會自動補'\0'

解法2:strncat(name,"Oualline",sizeof(name)-strlen(name)-1);
           若空間已滿,則'\0'就不會自動加入,需自行填入,
           多寫一行程式碼 name[sizeof(name)-1]='\0';
           加上此行程式碼若未超出空間會多一個'\0',但不影響

2009年9月19日 星期六

C/C++筆記-cstring使用C式字串函式

#include <cstring>
//之後可使用strcpy,strcat,strlen,strcmp...

C/C++語言筆記-系統變數命名

以底線開頭的多為系統變數名稱

C/C++筆記-取得陣列個數

/* 用除法的方式 */
int number = sizeof(array)/sizeof(array[0]);

C/C++筆記-assert防止陣列索引溢出

/* 叫用#include <assert.h> 來檢查有無超過範圍 */
int primes[] = {2,3,5,7,11,13,17};
int index = 10;
assert(index < (sizeof(primes)/sizeof(primes[0]))); assert(index >= 0);
std::cout << primes[index] ; /* 用起來其實很累人,但一些大型source code,會看到在用 */
##ShowAll##

C/C++筆記-設定變數初值

int counter(0); //傳統方式int counter = 0

C/C++筆記-寬字元、寬字串使用

/* 使用L自首來指定寬字元 */
wchar_t wide = L'Ω'; //寬字元使用
wstring hello = L"こんにちは";//寬字串使用

C/C++筆記-at安全取得字串字元

/* 安全取得字串第一個字元(避免字串未定義) */
first_ch = name.at(0); //亦同first_ch = name[0];

C/C++筆記-substr取得部份字串

// 取得字串索引位址第5個字元開始,長度為八個字元
sub_string = main_string.substr(5,8);

C/C++筆記-螢幕輸出特殊字元

\b     游標後退一個位元
\f      換頁
\n     換行
\r      游標到目前的行開頭
\t      到下一個定位點
\'       輸出'
\"      輸出"
\\      輸出\
\nnn  輸出八進位ASCII字元
\xNN  輸出十六進位ASCII字元

C/C++筆記-length取得字串長度

length = full_name.length();

2009年9月17日 星期四

PDF-XChange Viewer PDF快速啟動閱讀

除了Adobe Reader之外,許多人會用免費軟體Foxit Reader來看PDF,
Foxit Reader支援中文沒那麼強,而且沒有分頁瀏覽
PDF-XChange Viewer PDF功能很強大,但我用不到那麼多,
速度快有分頁功能,中文支援強,這很好用

參考文章(下載):PDF-XChange Viewer 免安裝中文版 ##ShowAll##

C/C++筆記-逗號運算子

/* ,運算子是敘述結合,同等於{} */
if (total < 0) {
  std::cout << "You owe nothing\n" ;
  total = 0 ;
}
// 上面敘述同等於
if (total < 0)
  std::cout << "You owe nothing\n", total = 0;

/* 常用在for迴圈內 */
for(two=0,three=0; two<10; two+=2,three+=3)
  std::cout << two+three ;
##ShowAll##

StickyPad 備忘桌面貼 (支援鬧鐘)

以前都用記事本備忘,
還是用個好看絢麗的桌面貼
快速鍵:視窗鍵+N

參考文章(下載):StickyPad 漂亮、好用的備忘錄桌面貼

2010/03 note
Windows 7有內建便條籤,就不需要了

2010/12 note
其他相似軟體Stickieshott notesSticker

C/C++筆記-memset動態配置記憶體

memset是在標準程式庫中,用組合語言撰寫
執行速度會較快且簡易,但只用在部分情況
memset是少見的記憶體配置方法

//calloc配置記憶體方法
foo_var = (struct foo*)calloc(3, sizeof(foo));

//等同於下列,此程式碼將結構內容清除為0
memset(foo_var, '\0', sizeof(foo)*3);
##ShowAll##

Universal Extractor 解壓縮exe安裝檔

可解壓縮一般壓縮檔外,它還可解壓縮軟體安裝檔.exe、.msi、.cab等
這個好,這樣就可直接獲取檔案內部圖片、影片等檔案了

參考文章(下載):Universal Extractor 中文版

2009年9月12日 星期六

C/C++筆記-main的命令列引數

//main的引數是指外部傳給main函數的引數
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  printf("argc = %d\n",argc); //argc會傳回引數的個數
  for(int i=0;i<argc;i++)
    printf("%s\n",argv[i]); //*argv[]儲存成字元陣列
  system("pause");
}

##ReadMore##
範例:
輸入命令:print_file -v -l 40
命令引數會放在argv[0]、argv[1]、argv[2]、argv[3]
argc為4
argv[1]可拆成argv[1][0]='-'和argv[1][1]='v'

PS:
引數中有數字,可利用atoi將字串轉為整數
atoi(&argv[1][2]);

C/C++筆記-union聯合,使用同一塊記憶體

union成員是共用一個記憶體空間,只能設定一個成員

union value {
  long int i_value;
  float f_value;
}data;

main() {
  data.f_value = 5.0;
  data.i_value = 3; //data.f_value內容被刪除
  data.f_value = 5.5; //data.i_value內容被刪除
}
##ShowAll##

C/C++筆記-用巨集方式,不限型態變數值交換程式碼

#define SWAP(x,y,t) (t=x, x=y, y=t)

C/C++筆記-代表null的字元

char name[6];
name[0] = 'J';
name[1] = 'a';
name[2] = '\0';
name[3] = 'e';
name[4] = 's';
name[5] = 'm';
printf("%s",name);

畫面只會輸出Ja,讀到'\0'會認定字串已結束
##ShowAll##

C/C++筆記-stdin、stdout、stderr串流

stdin 標準輸入串流
stdout 標準輸出串流
stderr 輸出串流且系統會留下紀錄檔

C/C++筆記-用scanf,陣列不須加&運算子

用scanf,陣列不須加&運算子

C/C++筆記-getchar()、putchar()輸出入字元

//輸入一個字元,會傳回該字元的ASCII值,若發生錯誤會回傳EOF
int getchar(void)
//若輸出成功,會傳回該字元的ASCII值,若發生錯誤會回傳EOF
int putchar(int ch)

C/C++筆記-字串輸入

鍵盤輸入字串常用gets(str)
因為scanf("%s",str)當遇到空格或換行字元便會結束

C/C++筆記-從s1字串中找到s2字串

char *strstr(const char *s1, const char *s2);

C/C++筆記-strrev將字串倒置

strrev(s1); //將s1字串倒置

C/C++筆記-strcpy複製字串

//連同'\0',from字串複製到to字串
strcpy(char *to, const char *from)
strncpy(char *to, const char *from, size_t len)

C/C++筆記-strlen取得字串長度

size_t strlen(const char *str)

C/C++筆記-strcat連結字串

//str1之後接str2
strcat(char *str1, const char *str2)
strncat(char *str1, const char *str2, size_t len)

C/C++筆記-strcmp比較字串

strcmp(const char *str1, const char *str2)
strncmp(const char *str1, const char *str2, size_t len)

/* 相等傳回0,小於傳回負數,大於傳回正數 */

C/C++筆記-strchr尋找字元

strchr(const char *str, int ch)
strrchr(const char *str, int ch)

C/C++筆記-前置處理器#define

//取消先前#define定義
#undef

#if
#else
#endif

//如果已被定義
#ifdef
#endif

//如果未被定義,則去定義
#ifndef
  #define
#endif

//顯示程式名稱與行數等錯誤訊息
#if
#error "wrong"
#endif
##ShowAll##

C/C++筆記-檔案內字串搜尋程式碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define fn "textfile.txt"

int search(FILE*,char *);
int main(void)
{
  int last=0;
  char buf[80];
  FILE *fp;
  fp = fopen(fn,"r+");
  scanf("%s",buf); //輸入要找的字串
  while(1)
  {
    int line = search(fp,buf);
    if(line)
      printf("%s found in line %d.\n",buf,line+last);
    else
      break;
    last += line; //更新目前計算的行數
  }
  fclose(fp);
  system("pause");
  return 0;
}

int search(FILE *fp,char *s)
{
  int i,j=0;
  char buf[80];
  for(i=1 ; fgets(buf,80,fp) != NULL ; i++)
    if(strstr(buf,s) != NULL) //從buf字串中找s字串
      return i;
  return 0;
}
##ShowAll##

C/C++筆記-fseek()、ftell()、rewind()變更串流內的位置函數

/*
會從指定的origin位置移動offset個位元組
origin定義:
  SEEK_SET,串流開始位置
  SEEK_CUR,串流目前位置
  SEEK_END,串流結束位置
若更改成功則傳回0值
*/
int fseek(FILE *fp, long offset, int origin);

/* 回傳串流目前位置,發生錯誤傳回-1 */
long ftell(FILE *stream);

/* 將串流的目前位置設為該串流的開頭 */
void rewind(FILE *stream);
##ShowAll##

C/C++筆記-fread()、fwrite()輸出入二進制串流

//數值不必轉為字元形式,效率較優勢
fread(void *buffer, size_t size, size_t num, FILE *fp);
/*
代表讀取num個大小為size的位元組,
之後存入buffer陣列(任意型態),
最後回傳成功讀取的資料數,
檢查回傳值是否等於num值則成功
*/

int n=999;
FILE *fp;
//開啟為二進位檔
if((fp = fopen("binfile","wb")) == NULL) exit(1);
//寫入一個整數999到檔案
if(fwrite(&n, sizeof(int), 1, fp) != 1) exit(1);
fclose(fp);
##ShowAll##

C/C++筆記-fprintf()、fscanf()輸出入串流

//與printf()、scanf()函數功能相同
fprintf(FILE *fp, char *control string, arguments...);
fscanf()(FILE *fp, char *control string, arguments...);

C/C++筆記-fgets()、fputs()輸出入字串

char buf[80];
FILE *fp;
if((fp = fopen("textfile","r")) == NULL) exit(1);
while((ch = fgets(buf,80,fp)) != NULL) //一次讀取一行,一行不超過80個字元
  fput(buf,stddout); //將字串輸出到螢幕
fclose(fp);
##ShowAll##

C/C++筆記-fgetc將輸入的字元轉整數

char ch;
int num;
num = fgetc(ch) - '0' ;

2009年9月11日 星期五

C/C++筆記-fgetc()、fputc()輸出入字元

FILE *fp;
if((fp = fopen("textfile","r")) == NULL) exit(1);
while((ch = fgetc(fp)) != EOF) //將字元一個個讀入
  fput(ch,stddout); //將字元一個個輸出到螢幕
fclose(fp);
##ShowAll##

C/C++筆記-指標多重間接參照

/*
 * 指標本身也是有記憶體位址,
 * 所以宣告一個指向指標形態變數的指標是合法的
 */
int **pp,*p,x=5;
pp = &p;
p = &x;
**pp = 10; //最後x值是10
##ShowAll##

C/C++筆記-顯示檔案內容並計算字數程式碼

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int i;
  File *fp;
  char f[10],buf[80]; //檔名不超過10個字母,一行不超過80字元
  scanf(%s,f);
  if((fp = fopen(f,"r")) == NULL) exit(1);
  while(fgets(buf,80,fp)) != NULL)
    fputs(buf,stdout); //將檔案一行行輸出
  printf("\n");
  rewind(fp); //將串流fp指回檔案開頭
  for(i=0;;i++)
    if(fscanf(fp,"%s",buf) == EOF)
      break;
  fclose(fp);
  system("pause");
  return 0;
}
##ShowAll##

C/C++筆記-指標意義、指標運算、陣列指標

//&運算子的意義為:取得變數的記憶體位址
//*運算子的意義為:取得變數的記憶體值

int *ptr,a;
ptr = &a;
ptr++; //將指標ptr指向變數a的後4個bytes
ptr = ptr - 20; //將指標ptr指向變數a的後20*4個bytes

int *ptr,a[10];
ptr = a+5;
printf(%d %d,*a,*ptr) //會印出陣列a[0]的數值和a[5]的數值
##ShowAll##

C/C++筆記-typedef用法

typedef int width;
相似#define width int
但typedef可定義更複雜的物件
##ReadMore##
//使用在陣列上
typedef int group[10];
group totals;
for(i=0; i<10; ++i)   totals[i] = 0;

使用範例:
//typedef 舊型態名稱 新型態名稱
typedef unsigned int pint;
pint a; //a的型態等同於unsigned int

typedef struct snake {
  int head;
  int tail;
  int body;
}SNAKE;
SNAKE sn1; //等同於struct snake宣告

C/C++筆記-realloc重新配置記憶體空間

int *p;
p = (int *)malloc(sizeof(int) * 5);
p = (int *)realloc(p, sizeof(int) * 10); //將記憶體空間變大

C/C++筆記-malloc動態配置記憶體

/* 配置一個int大小的記憶體空間 */
int *p;
p = (int *)malloc(sizeof(int));

/* 配置一個struct大小的記憶體空間 */
struct ex{
  int a;
  char[2];
};
struct ex *p;
p = (struct ex *)malloc(sizeof(struct ex));
free(p); //釋放記憶體
##ShowAll##

C/C++筆記-fopen()、fclose()開關檔

//開檔
FILE *fp;
if((fp = fopen("file","r")) == NULL)
{
  printf("file open error!\n");
}

//關檔
fclose(fp);

/*---開檔模式---*/
//[讀、寫、附加]
//"r", "w", "a"

//[讀、寫、附加,二進位模式]
//"rb", "wb", "ab"

//[不存在回傳NULL、存在刪除原檔、不存在建立新檔,皆可讀可寫]
//"r+", "w+", "a+"

//[不存在回傳NULL、存在刪除原檔、不存在建立新檔,皆可讀可寫,二進位模式]
//"rb+", "wb+", "ab+"
##ShowAll##

2009年9月10日 星期四

Google閱讀器 RSS訂閱文章

之前是用GreatNews軟體來訂閱Blog文章,
但後來發現不夠方便,只能在單一主機上使用,
常常要往來不同電腦,還是要用Google的雲端技術比較好
而且除了最新文章之外,還可以撈到之前的所有舊文章,
這一點就比其他RSS訂閱軟體還要好了

連結網址:Google閱讀器
參考文章:如何用Google Reader訂閱部落格RSS?

Lingoes靈格斯 免費翻譯軟體

大陸製的,很賊地同時集合其他軟體的翻譯辭典
除了內建幾個翻譯辭典外,
還有非常大量的外掛補充包,什麼都有,
Google翻譯、Yahoo翻譯、譯點通翻譯、、、
也因此確實比Dr.Eye好用了

辭典補充包:詞典庫
參考文章(下載):靈格斯翻譯家 Lingoes Translator 免安裝中文版
##ShowAll##

2009年9月4日 星期五

VirtualBox 免費虛擬作業系統

比VMware幾百MB相比,這小巧的太多了,而且免費
介面簡潔,功能齊備,簡單易操作,從此不用VMware了
一些常用附加功能簡易說明:
  1. 虛擬LINUX,放大縮小調整螢幕 =>
    安裝VirtualBox客戶端軟體即完成
  2. 虛擬LINUX,與實體OS共享資料夾=>
    root身份下輸入mount -t vboxsf sourcefolder targetfolder
  3. 虛擬WINDOWS,用VirtualBox共享資料夾
    我的電腦 > 右鍵 > 連接網路磁碟機 > 瀏覽 > 點選共享的資料夾

參考文章(下載):VirtualBox 中文版

簡易教學:
VirtualBox v3.0.4 虛擬電腦,練重灌、測軟體、玩病毒,不怕搞壞電腦!
詳細教學:
VirtualBox2.1 使用心得(2.2另外附註說明)
其他教學:虛擬LINUX下,放大縮小調整螢幕
                 虛擬LINUX下,與實體OS共享資料夾
                 (註:共享資料夾,不能與掛載文件夾的名稱相同)

piaip AppLocale (Microsoft AppLocale修改版本) 解決軟體亂碼

使用簡體軟體會有亂碼,可用Microsoft AppLocale來解決
而piaip AppLocale修改了一些Microsoft AppLocale的亂碼問題

參考文章(下載):pAppLocale

2009年9月1日 星期二

MagV 免費線上看雜誌

還以為是大陸網站,想不到是繁體中文的,資料蠻豐富的

連結網址:MagV
參考文章:
MagV免費網路看雜誌

2009年8月22日 星期六

用IE快速登入FTP

網址列輸入 => ftp://[帳號]:[密碼]@[FTP位址]
EX.
帳號:acc
密碼:pass
FTP:127.0.0.1
=> ftp://acc:pass@127.0.0.1/
##ShowAll##

2009年8月15日 星期六

在Blogger上,使用彩色漸層標籤雲

標籤雲的文章很多,想要用得越漂亮,步驟越複雜
我用了一個簡單不華麗的標籤雲
網路上教學文章一堆,但是教學文章是要寫給不會用的人看的,
莫名其妙少了一個步驟,或一堆寫得不清不楚的,寫來幹麻啊!
下面是我參考的一篇寫得夠清楚正確的

參考文章:三步驟把blogger的標籤,改造成標籤雲(Tag Cloud)
補充:
在參考文章中的步驟3,"找到這一列程式碼 (注意, 後面是 /> 結束哦!)"
如果沒有在樣板程式碼中看到"/>",
必須先儲存,再將"展開小裝置範本"的打勾先取消
備註節錄一段程式碼,是用在我Blogger中所做的變數設定
var maxFontSize = 20; //最大字型
var maxColor = [255,64,64]; //漸層起始顏色
var minFontSize = 10; //最小字型
var minColor = [255,127,0]; //漸層結束顏色
var lcShowCount = true; //顯示文章篇數

樹狀分類產生器

Blogger只有提供標籤,功能上稍顯不足
我的Blogger的Categories,即是用此方法

連結網站:樹狀分類產生器
參考文章:網站、部落格「樹狀分類產生器」

C/C++筆記-calloc動態配置記憶體

與malloc功能相似,但會初始化為0,常用來配置陣列

/* 配置10 * int 大小的記憶體空間 */
int *p;
p = (int *)calloc(10, sizeof(int)); //需傳兩個參數

##ShowAll##

C/C++筆記-變數儲存類別

變數儲存類別
1.extern
extern int a;
// 代表變數a是另一個檔案所宣告的變數

2.register
register int i;
// 變數i存取會較快

3.static
static int x=0;
// 在不同區域重複命名,都是共用同一個變數x

4.const
const x=1;
// 常數x值無法變更

##ShowAll##

C/C++筆記-函數的指標

函數也在記憶體中,所以指標也可以指向函數

int add(int,int);
int add(int,int);
int main(void)
{
  int ans, (*p)(int x, int y); //宣告函數指標p
  p = add; //將p指向函數add
  ans = (*p)(3,4) //間接呼叫add函數
  printf("%d",ans);
}

void add(int x,int y)
{
  returb x+y;
}
##ShowAll##

C/C++筆記-檔案複製程式碼

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  char ch;
  char src[] = "file1.txt";
  char dst[] = "file2.txt";
  File *from,*to;
  if((from = fopen(src,"rb")) == NULL) exit(1);
  if((to = fopen(dst,"wb")) == NULL) exit(1);
  while(fread(&ch,sizeof(ch),1,from) != 0)
    fwrite(&ch,sizeof(ch),1,to);
  fclose(from);
  fclose(to);
  system("pause");
  return 0;
}
##ShowAll##

C/C++筆記-struct結構用法

struct animal { //結構名稱可省略,但就不能再建此結構
  char name[10];
  int sex;
}dog; //變數名稱可省略,之後再另行建立

宣告 => struct animal cat,pig[5];
指標宣告 => struct animal *kitty=cat;

C++予許省略struct保留字

C/C++筆記-結構傳遞與回傳結構

int cmp(struct animal s1, struct animal s2)
{
  return s1.sex == s2.sex;
}

struct animal getinfo(void)
{
  struct anumal temp;
  gets(temp.name);
  scanf("%d",&temp.sex);
  return temp;
}
##ShowAll##

C/C++筆記-將指標傳遞進函式

void func(int*,int);

int main(void)
{
  int x=0,*p;
  p = &x;
  func(p,3); //Call-by-Reference
  printf("x = %d",x);
}

void func(int *p,int y)
{
  *p = y;
}
##ShowAll##

C/C++言筆記-將陣列傳遞進函式

void func(int a[])
{
  int temp = a[1];
}

int main(void)
{
  int a[2]={3,6};
  func(a);
}
/*
 * 若是多維陣列,第一個陣列要給予數字才能索引
 * int a[10][10]; 合法
 * int a[10][]; 合法
 * int a[][]; 不合法
 */
##ShowAll##

C/C++筆記-#include函式庫

#include <filename> //標準函式庫
#include "filename" //自己撰寫的

2009年8月14日 星期五

ZuneDesktop和Royale,兩款佈景主題

兩套很好看的佈景主題,一黑一藍
黑色的跟Vista的差不多
藍色的佈景主題比較好看

參考文章(下載):微軟提供的 ZuneDesktop 佈景主題(典雅黑)

ClearType Tuner 讓螢幕字體更好看

使螢幕字體更清晰好看
Vista以上作業系統的就不需要了

參考文章(下載):ClearType Tuner 讓LCD字體更好看!

2010/07 note
Windows 7有內建此軟體並預設好了
##ShowAll##

2009年8月10日 星期一

講義王 豐富的職場、行銷、管理投影片網站

有很多職場、行銷、管理的投影片,
當然,網站內豐富的資料不只這些,
但實在太多了,有點不知從何看起,
想看都看不完

連結網址:講義王

sugoideas.com 台灣偶像劇、綜藝節目,高速下載觀看

從2001年開始,琳瑯滿目的台灣偶像劇和綜藝節目,
檔案齊全,下載高速,畫質清晰,
應該是給海外留學生方便用的

連結網址:偶像劇 綜藝節目

無名挖挖挖 搜尋朋友的無名

玩了一下,很強!
無名一點隱私都沒有

連結網址:無名挖挖挖
參考文章:
找朋友、找正妹必備工具 - 無名挖挖挖 + 搜尋技巧大公開

miroKo BT代抓,下載秒殺

miroKo是個非常快速下載的BT代抓免費空間,號稱秒殺BT
操作有點複雜,不易上手
空間只有5GB,一次只能抓一個BT檔,而且無法勾選要下載的檔案
但如果檔案是比較熱門的,往往都已經抓好了,就不用再抓了
直接就可下載,下載速度每秒可達3~4M
網路上想抓的熱門檔案,幾乎都已抓好
不必再去慢慢等BT軟體載好

下載頁面:miroKo
參考文章:
miroko-免費5GB網路硬碟BT代抓
2010/07 note
從今日開始,全面收費,沒有免費可用了 = =

新酷音輸入法 非常準確的自動選字

只會新注音的我,用過自然輸入法和雅虎輸入法
新酷音輸入法,選字選的更準確
幾乎不用再讓我選字了

參考文章(下載):新酷音輸入法

note 2011/08
若安裝64bit系統,一定要另外再安裝修正檔
參考文章 => 解決新酷音於 Windows 7 64位元的 IE 無法輸入的問題
##ShowAll##

GreatNews RSS訂閱文章軟體

簡單好用的RSS訂閱軟體

參考文章(下載):GreatNews 1.0.0.386 免安裝中文版

2010/07 note
Google的閱讀器更好用
##ShowAll##

FileZilla FTP上傳下載

可連上FTP伺服器上傳下載,
小巧簡易的免安裝綠色版,且支援unicode
預設顯示編碼為unicode,若想改為BIG5編碼的方法:
Filezilla在站台管理員的字碼集選擇「使用自訂碼集」,手動輸入BIG5

參考文章(下載):FileZilla Portable
##ShowAll##

TheWorld 世界之窗IE核心瀏覽器

note 2011/08
由於該軟體被360收購,更新很慢
官網遲遲不修復,軟體也持續有BUG,
不建議再去使用,如要使用,建議版本用3.3.0.8

網頁瀏覽器就用這套吧!
這是我用過最快速好用的瀏覽器了
目前最新3.x.x.x版本,仍不斷再更新
強大好用的功能直接就內嵌在瀏覽器裡,不用再另外找外掛
速度絕對快,功能又強大,而且又是免安裝的綠色軟體
另一大優點是採多程序頁面管理,所以幾乎沒有網頁假死問題
另外還有網路書籤的功能
雖然一開始的設定很繁瑣,但設定好後就很好用了
缺點是目前外掛尚未提供讓人開發,所以特定外掛不多

maxthon傲遊瀏覽器,內核也是IE
而且外掛還不錯,擋廣告的能力強
但最大缺點是是單程序管理,會有網頁假死問題,
在各各方面也都不如世界之窗
火狐的缺點蠻明顯的,有些網頁只有用IE才能開啟
雖然有大量的外掛好用,但裝太多外掛,開啟速度就被拖得很慢
IE的缺點就不用說了,什麼都不好用

參考文章(下載):世界之窗瀏覽器免安裝中文版

YouTube Downloader HD 簡便下載YouTube影片

網路上雖然很多方法,
但因為我時常要下載,
用這個軟體比較方便又免安裝,

官方下載:YouTube Downloader HD
參考文章:YouTube Downloader HD 下載YouTube高畫質影片


2010/03 note
用過幾種下載youtube影片的方法,就算是HQ畫質,載下來後影片還是很模糊
後來用JDownloader,它可以載到近似於Youtube網站上的畫質

Everything 極速搜尋電腦內檔案

XP內建的搜尋慢的跟烏龜一樣
Everything可瞬間就搜尋到要找到的檔案,而且免安裝

參考文章(下載):Everything 免安裝中文版

2009年8月9日 星期日

讓XP時鐘顯示今天星期幾

我覺得這樣做很好,馬上知道今天星期幾

參考文章:讓 XP 桌面右下角的時鐘顯示今天星期幾

icolorFolder 好看的彩色漸層資料夾

蠻喜歡的,粉色系漸層資料夾,還可以當作資料分類

參考文章(下載):iColorFolder 中文版

免軟體,快速擷取視窗桌面

若要擷取整個螢幕畫面,直接點選鍵盤上[PrtScr]鍵
若只要擷取視窗畫面則按[Alt]+[PrtScr]
之後再到小畫家按"貼上"即可

2010/07 note
Windows 7,有內建簡便的螢幕剪取工具
##ShowAll##

如何關閉無用的開機啟動程序

簡單關閉無用的開機啟動程序
「執行」命令輸入msconfig,再點選「啟動」標籤
將不想要開機啟動的程式取消勾選

XP桌布自動更換

微軟出的一套非常簡單的桌布自動更換軟體
安裝好後在桌面按滑鼠左鍵,點"內容"即可找到

參考文章(下載):桌布自動換

在文章中顯示程式碼,加上顏色和框架

比較常見的有兩種方法,為了搞這個,花了點時間
原先是用SyntaxHighlighter的外掛來顯示程式碼,
因為他的樣式比較好看,
但在Blogger使用,會遇到一些奇怪的問題,
我一直弄不出來,不想再debug了,就用另一個方法了
不過要顯示程式碼仍然是相當繁雜的工作

(一)加上框架
步驟一
先在Blogger中找到版面配置->修改html
在html樣板程式碼內搜尋到/* Variable definitions這一行
將下方的程式碼貼在/* Variable definitions上方
CODE { display: block; /* fixes a strange ie margin bug */ font-family: Courier New; font-size: 8pt; overflow:auto; background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y; border: 1px solid #ccc; padding: 10px 10px 10px 21px; max-height:200px; line-height: 1.2em; }

步驟二

在文章中將程式碼置於<code class="ref">程式碼</code>區塊中即可


參考文章:
[筆記]在文章裡顯示優質的程式碼區


(二)加上顏色
前面步驟已將框架完成了,若想將程式碼加上顏色,可接著繼續做下列方法
步驟一
在html樣板程式碼內搜尋到;<head;>這一行
將下方的程式碼貼在
;</head;>上方

<link href='http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css' rel='stylesheet' type='text/css'/><script src='http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js' type='text/javascript'/> 
步驟二
繼續搜尋 <body>,將其直接改成<body onload='prettyPrint()'>
步驟三
在文章中將程式碼置於<code class="prettyprint">程式碼</code>區塊中即可

參考文章:
在 Blogger 中使用 google-code-prettify 顯示程式碼


(三)備註
在撰寫持程式碼時,會有一些特殊符號,需改寫成html能夠接受的代碼
"&"寫成"&amp;"
"<"寫成"&lt;"
">"寫成"&gt;"
" "寫成"&nbsp;"


(四)完成範例
將上述兩個方法合併即可讓程式碼有框架和顏色地顯示,
在文章中將程式碼置於<code class="prettyprint">程式碼</code>區塊中即可
#include <stdio.h>
void main()
{
  int a=10, b=20;
  printf("%d",a+b);
}


2010/08 note
另一個搭配Windows Live Writer來撰寫程式碼的方法,在文章中漂亮地張貼程式碼

2009年8月7日 星期五

C/C++筆記-enum列舉

//預設起始值從0開始,也可指定值
enum people {female,male=2} mary;

mary = female;
if(mary == male)
  printf("mary is a woman");
##ShowAll##