星期六, 9月 22, 2012

OCPJP Class Day2


Chapter 2 Java 的類別

類別分成兩大類
  • 可執行
  • 不能執行

Notes:
  • 類別如果是公開, 那檔名就要跟類別名稱一樣
  • void 代表沒有回傳值

Lab: Hello.java

新增mod02資料夾在 SCJP\exercise 目錄內
新增Hello.java SCJP\exercise\mod02
輸入以下程式碼

//Executable Java Class
public class Hello{

public static void main(String[] args){
System.out.println("Hello world");
}
}

使用命令提示字元在該目錄
> javac Hello.java
> java Hello


Lab: 不可執行的 java 程式

// Non-executable Java Class
public class Greeting{
public void sayHello(String name){
System.out.println("Hello, "+name);
}
}

建立 Greeting.java
嘗試編譯以及執行
> javac Greeting.java
> java Greeting

Notes:
  • + 代表字串串接





Lab:

修改 Hello.java

//Executable Java Class
public class Hello{

public static void main(String[] args){
System.out.println("Hello world");
Greeting x = new Greeting(); //建構物件
x.sayHello("Max"); //使用物件
}
}

使用命令提示字元
> javac Hello.java
> java Hello

Notes:
  • 被主程式利用到的類別, 編譯的時候會順便編譯他

Notes:
  • 檔案中可以定義一到多個類別
  • 最多可以有一個public class, 且檔名必須與類別名稱相同. (如果檔案內沒有 public class 檔案名稱就沒有強制規定)
  • 編譯的時候呼叫的是檔案的名稱, 執行的時候是呼叫類別的名稱(區分大小寫)
  • 類別
    • 定義同一類型的不同物件之間共同的資料結構(屬性)[靜態]與行為邏輯(方法)[動態]
    • 好比建築物的藍圖
    • 可以
      • 屬性
      • 方法
      • 定義建構子
      • 定義巢狀類別
  • 物件(Object)
    • 將類別建立成實體就是物件
    • 物件就像依據藍圖完成的建築物
    • 同一類別所建立的各個物件
      • 各自獨立
      • 擁有各自獨立的屬性狀態值
      • 擁有來自同一類別方法中相同的行為邏輯

*Java class的語法

< > - non-terminal
[ ] - optional


*Java 類別設計示範


Lab: 繪製 UML

安裝 JUDE 程式 ( 可以繪製 UML)
http://jude.change-vision.com/jude-web/product/community.html
目前 JUDE 停止開發
有新的專案 astah

新增 Class Diagram (參考課本)
新增類別圖
  • 類別名稱 Employee
  • 屬性 ( 滑鼠右鍵Add Attribute 或是 Ctrl + F )
  • 方法 ( 滑鼠右鍵Add Operation 或是 Ctrl + M)


Lab: 使用JUDE 來進行正向工程 / 逆向工程

正向工程(Forward Engineering) – UML 轉換成程式

將剛剛繪製的類別圖轉成 java
Tool → Java → Export Java

觀察輸出的 Employee.java

逆向工程(Reverse Engineering) – 從程式轉換成UML

Tool → Java → import Java



Lab:

JUDE 不知道如何定義方法, 參考 課本補上方法

public class Employee{
public String name;
public String title;
public String department;
public int salary;
//定義方法
public String toString(){
return name + "\n" + title + "\n" + department + "\n" + salary;
}

}

新增一個 TestEmployee.java

public class TestEmployee{
public static void main(String[] args){
Employee emp1 = new Employee();
emp1.name="Max";
emp1.title="Manager";
emp1.department="IT";
emp1.salary=85000;
System.out.println(emp1);
}
}


編譯 Employee 以及 TestEmployee 並執行
> javac Employee.java
> javac TestEmployee.java
> java TestEmployee

*識別子(Identifier)的命令規則
  • 使用 unicode 開頭的文字, 或是 _ 或是 $ 兩個符號
  • 識別字不可以用數字開頭, 第二個字可以是文字, 數字, 或是 _ 或是 $ 兩個符號
  • 不可以是 java 關鍵字(目前有 50 個關鍵字)
  • 大小寫有別, 沒有長度上限

*java 關鍵字

  • true, false, null 不是關鍵字
  • transient, volatile, strictfp, native 不會考

*識別子的命名慣例 (Naming Convention)

  • 套件(Package): 以小寫英文命名, 習慣以公司名稱反過來取
  • 類別(Class), 介面(Interface), 和列舉型別(enum): 應為名詞或是名詞片語
  • 方法(Method): 開頭應用動詞
  • 區域變數: 應該簡短有意義.
  • 成員變數: 第一個字母應該小寫, 也可以混合使用, 限制底線 _ 的使用
  • 常數: 建議全部大寫, 以底線斷詞.


*Chapter 3 java的變數與型別

*成員變數(Member Variable)
  • 宣告在類別中(但不是在方法或建構子)的變數就稱為成員變數


public class Scoping{
public static int a; //類別變數(class variable) 會自動初始化(自動歸零)
public int b; //成員變數(Member variable) 或是 實體變數(Instance variable) 會自動初始化
public final int MYCONST=100; //常數 不會自動初始化

public void oops(int c, int d){
int e;
if( c > 10){
int f;
System.out.println( );
}
System.out.println( );
}
}
Notes:
  • 以上 c, d, e, f 都是區域變數 (因為在方法裡面), c d 會由呼叫者傳入初值, e, f 為方法本體內所宣告的區域變數, 不會自動初始化. 所以 e, f 在使用前必須先行初始化(要指派值, 不然會發生 NullPoint exception).
  • 大括號會限制變數的有效範圍
  • java 的變數可以先宣告後給值, 建議一行宣告一個變數.

*java的基本資料型別(Primitive Type)

基本型別
(Primitive Type)
邏輯
boolean

Boolean b = true;
文字
char
16 bits
char c = 'A'; 'a' '\n' '\ucafe' '\ubabe'
整數
byte
8 bits
byte b = 5;
short
16 bits
short s = 15;
int
32 bits
int i =25;
long
64 bits
long x = 35L;
浮點
float
32 bits
float f = 543.21F;
double
64 bits
double d = 123.45;
參考型別
(Reference Type)
Greeting g = new Greeting();
Employee e = new Employee();
Customer c = new Customer();

Notes:
  • Java boolean不可以將 0 false, 1true, 一定要給 true 或是 false.
  • 文字有三種表示法
    • 可以直接輸入
    • 跳脫字元
    • 16進位碼
  • 使用long的時候會在後面加上大寫或是小寫的L
  • int 是預設的整數型別
  • overload 相同的方法名稱, 可以接受不同的型別(參數).
  • double 是預設的實數型別
  • Java 碰到 float 要特別小心. 一定要在數字的右方加上大寫的F. (有可能喪失數值的精確度, 沒有加上F 預設浮點的大小會給 64 bits, 但是前面宣告 float 就會被截斷,放到 32 bits )
  • 只要是類別就是參考型別
  • Java 只是廢除指標運算. 不是廢除指標.

OJPJP Class Day 1


上課後面會使用 Netbeans 開發

物件導向主要學習
  • 封裝 Encapsulation
  • 繼承 Inheritance
  • 多型 Polymorphism

物件導向比較貼近思維邏輯

Java 的起源
自己找了一下 wiki

Java Technology:
  • Programming Language
  • Develop Environment
  • Execution Environment
  • Deployment Environment
    • Java 常見的打包格式
      • .jar (Java Archive) – Application, Library, EJB, JDBC, Dirver ….
      • .war (Web Archive) – JSP, Servlet, HTML, JPG, PNG, Java Script …
      • .rar (Resource Archive) – JCA(JavaEE Connector Architecture)
      • .ear (Enterprise Archive) – Full-size JavaEE Application
      • 上述四個檔案都是 pkzip 格式
.java (Source code 原始碼) --- javac --> .class (Bytecode 位元碼) --> JRE


Lab: 安裝 JDK

安裝 Notepad ++
安裝 JDK 7

設定 JAVA_HOME PATH 變數
安裝 Netbeans



星期四, 9月 20, 2012

openSUSE 12.2 正式版 安裝小記

這次使用 openSUSE 12.2 正式版  64 位元版本

Google Chrome

  • http://www.google.com/chrome
 Pidgin
  • # zypper install pidgin
  • 使用 zypper 指令來安裝


Freemind



Mplayer

因為台灣的 mirror 站台有時候連線還是不太穩定
這次只有加入 Packman 的套件庫

內容如下

#!/bin/bash
echo "Print the rep  in use"
zypper  lr -u

#Define openSUSE Version
VERSION=`cat /etc/SuSE-release | grep VERSION | cut -d ' ' -f 3`
echo "This openSUSE version is $VERSION"


echo "Add Taiwan's rep "

## for Packman Rep
zypper  ar -f http://ftp.nchc.org.tw/Linux/Packman/suse/$VERSION/ NCHC-Packman
#zypper ar -f http://ftp.twaren.net/Linux/Packman/suse/$VERSION/ twaren_packman
zypper  mr  -p  98  NCHC-Packman


加完 Packman 的套件庫之後
就使用 zypper 指令安裝 Mplayer 以及 smplayer 套件
#zypper   install  -y  -l   MPlayer   smplayer   smplayer-lang

並將 .rmvb 以及 .mp4 預設播放器設定為  smplayer


Skype:


上一個版本是 2.2.0.35 目前為止的版本是 4.0.0.8, 使用終端機指令下載
#wget  -O  skype-`date +%F`.rpm   http://www.skype.com/go/getskype-linux-beta-suse

下載的 rpm 會被命名為 skype-日期.rpm

因為目前 rpm base 的OS, skype 只有提供 32 bits 的套件
所以要先預先安裝一些套件

參考 http://en.opensuse.org/SDB:Skype 但是還是有些遺漏, 例如要裝 libXss1-32bit  套件

#zypper   install   libpulse0-32bit

#zypper   install   xorg-x11-libXv-32bit   libqt4-32bit   libqt4-x11-32bit   libpng12-0-32bit

#zypper  install libXss1-32bit

安裝 skype 套件

#rpm  -ivh  skype-*.rpm


Dropbox

  • http://software.opensuse.org/search
  • 使用 GNOME:Apps 的套件庫安裝 dropbox 以及 nautilus-dropbox 兩個套件
  • 安裝完之後在終端機下 dropbox  start  -i  來安裝

VMware:


一樣要下載 kernel-desktop-devel 還有必須要有 gcc 套件

但是要編譯的時候就發生問題
找了一下google 上面的資料
發現這個
http://communities.vmware.com/message/2096041


# cd   /usr/lib/vmware/modules;

下載 patch
# wget   http://pavlinux.ru/vmware/8.0.4/source.tar.lzma;

比對一下 md5 吧
# md5sum   source.tar.lzma;
e37e41a818a47ec868bdb493197aaf63   source.tar.lzma

解開 source.tar.lzma
# tar -xf source.tar.lzma

安裝 VMware Module
# vmware-modconfig --console --install-all


這樣就沒問題了

在即時通訊軟體上
目前開始回來使用 Empathy,
原因是
1. 因為目前可以不儲存密碼在應用程式裏面 (之前版本必須要儲存密碼)
2. 他的群組可以啟動多個即時通訊帳號, 而又可以按照字母排列群組(這個 pidgin就有狀況)


Enjoy it ~~




星期二, 8月 21, 2012

openSUSE 12.2 RC2 安裝小記

openSUSE 12.2 RC2 安裝小記

這次使用 openSUSE 12.2 RC2  64 位元版本

Google Chrome

  • http://www.google.com/chrome


Dropbox

  • http://software.opensuse.org/search
  • 使用 home:opensuse_zh 的套件庫安裝 dropbox 以及 nautilus-dropbox 兩個套件
  • 安裝完之後在終端機下 dropbox  start  -i  來安裝

輸入法的部份因為目前預設是 gcin 所以也不用更動

Pidgin

  • # zypper install pidgin
  • 使用 zypper 指令來安裝
Mplayer

因為台灣的 mirror 站台有時候連線還是不太穩定
這次只有加入 Packman 的套件庫

內容如下

#!/bin/bash
echo "Print the rep  in use"
zypper  lr -u

#Define openSUSE Version
VERSION=`cat /etc/SuSE-release | grep VERSION | cut -d ' ' -f 3`
echo "This openSUSE version is $VERSION"


echo "Add Taiwan's rep "

## for Packman Rep
zypper  ar -f http://ftp.nchc.org.tw/Linux/Packman/suse/$VERSION/ NCHC-Packman
#zypper ar -f http://ftp.twaren.net/Linux/Packman/suse/$VERSION/ twaren_packman
zypper  mr  -p  98  NCHC-Packman


加完 Packman 的套件庫之後
就使用 zypper 指令安裝 Mplayer 以及 smplayer 套件
#zypper   install  -y  -l   MPlayer   smplayer   smplayer-lang

並將 .rmvb 以及 .mp4 預設播放器設定為  smplayer


Skype:


上一個版本是 2.2.0.35 目前為止的版本是 4.0.0.8, 使用終端機指令下載
#wget  -O  skype-`date +%F`.rpm   http://www.skype.com/go/getskype-linux-beta-suse

下載的 rpm 會被命名為 skype-日期.rpm

因為目前 rpm base 的OS, skype 只有提供 32 bits 的套件
所以要先預先安裝一些套件

參考 http://en.opensuse.org/SDB:Skype 但是還是有些遺漏, 例如要裝 libXss1-32bit  套件

#zypper   install   libpulse0-32bit

#zypper   install   xorg-x11-libXv-32bit   libqt4-32bit   libqt4-x11-32bit   libpng12-0-32bit

#zypper  install libXss1-32bit

安裝 skype 套件

#rpm  -ivh  skype-*.rpm


VMware:


一樣要下載 kernel-desktop-devel 還有必須要有 gcc 套件
但是要編譯的時候就發生問題
找了一下google 上面的資料
發現這個
http://communities.vmware.com/message/2096041



# cd   /usr/lib/vmware/modules;

下載 patch
# wget   http://pavlinux.ru/vmware/8.0.4/source.tar.lzma;

比對一下 md5 吧
# md5sum   source.tar.lzma;
e37e41a818a47ec868bdb493197aaf63   source.tar.lzma

解開 source.tar.lzma
# tar -xf source.tar.lzma

安裝 VMware Module
# vmware-modconfig --console --install-all


這樣就沒問題了



enjoy it ~~

星期二, 6月 12, 2012

感謝來參加GNOME.Asia 2012 的所有人


感謝來參加GNOME.Asia 的所有人
GNOME Video 催生中, 來看些照片先睹為快.



























星期五, 6月 01, 2012

GNOME.ASIA 2012 Pre-event Training

GNOME.ASIA 2012 Pre-event Training



Experience GNOME design first-hand in this introductory half-day workshop led by key members of the GNOME design team. Workshop participants will be given tuition on design practice and tools, as well as a beginner's guide to contributing to design in open community projects.
Date: June 8, 2012, 2-5pm (Fri)
Venue: LT1 , 4/F Academic 1, City University of Hong Kong, Tat Chee Avenue, Kowloon Tong, Hong Kong.
GNOME.Asia 2012 Website: http://2012.gnome.asia/

Our Speaker:
Allan Day
https://live.gnome.org/AllanDay

William Jon McCann
http://blogs.gnome.org/mccann/

Jakub Steiner
http://jimmac.musichall.cz/log/



這次我們很榮幸請到 William Jon McCann, Jakub Steiner 與 Allan Day 來舉辦 workshop
針對初次接觸 open community project 領域的使用者/設計者, 引導如何投入相關設計流程以及使用的工具.

Workshop 主講
Allan Day
https://live.gnome.org/AllanDay
William Jon McCann
http://blogs.gnome.org/mccann/
Jakub Steiner
http://jimmac.musichall.cz/log/

活動網址

http://registrano.com/events/gnomeasiatraining/

超期待的說

星期三, 4月 18, 2012

20120411 國際志工培訓 -- 真理大學



這次有機會受 真理大學 紀宗衡 老師邀請回到自己的母校 -- 真理大學
針對國際志工分享 Clonezilla 與 Portableapps 感覺相當開心
尤其是想到自己有機會於七月到蒙古分享自由軟體更是雀躍不已.

此次的培訓是針對國家高速網路中心的 Clonezilla Live 再生龍 ( http://clonezilla.nchc.org.tw ) 以及 Windows 上面的可攜式軟體, 進行介紹與實作.


主要的進行方式除了介紹軟體以及提供實作之外,還讓同學自行依照自己的想法, 組織相關軟體, 並介紹他們的組合.
同學對 VLC ( for Streaming and Online Edit )以及 網路相關套件 產生很濃厚的興趣

此次也很感謝 GNOME and openSUSE 贊助的光碟
也介紹了 GNOME 以及 GNOME Outreach Program for Women ( http://live.gnome.org/GnomeWomen/OutreachProgram2012 ) 以及 Google Summer of Code ( http://code.google.com/soc/ )
希望他們有機會多參與這樣的活動 ^^

同學 GNOME 3 Live DVD with openSUSE 合照


也辛苦了我們的攝影師 ^^( The girl with black coat)



謝謝真理大學 ^^




星期四, 4月 12, 2012

20120407 Ezgo 10 開發者聚會 in Mozilla Taiwan

Ezgo 10 開發者聚會 in Mozilla Taiwan

官網
http://ezgo.westart.tw/

Ezgo 介紹 ( 引用自官網 http://ezgo.westart.tw/about.php)


ezgo的設計理念聚焦在視窗環境下的自由軟體應用,相信不管是哪一套Linux,都會有X Window視窗作業環境,而現在比較常見的桌面環境GNOME和KDE等也都是以X Window為基礎所建構而成的,然而不管是GNOME、KDE或其它桌面環境,相信一般的使用習慣,一定還是以系統下的應用軟體為主,在微軟 Windows下,您會透過「開始功能表」的選單按鈕來啟動應用軟體,而在Linux下也有類似「開始功能表」的選單按鈕,它的名稱叫作「應用程式」,您 可以透過「應用程式」選單按鈕,開始體驗自由軟體中豐富多元的應用軟體,而ezgo就是著眼於「應用程式」選單的整理,包含在軟體名稱的前面加上分類標籤或註解!!

ezgo並不是在創造一個新的Linux,而是一個將多元的自由軟體單純化的自由軟體應用推廣光碟,因為Linux已經夠多了,不需要再多一套ezgo Linux來湊熱鬧,我們只希望可以因為ezgo而讓大家更輕鬆的體驗自由軟體,享用全世界的智慧結晶。


這次的聚會有幸於 Mozilla Taiwan 舉行
首先要感謝 柏強 Bob

(圖片說明: Bob 正在指示洗手間的方向)


聚會的開始按例由 Eric 開場, 並感謝Mozilla Taiwan 的支持於大家的參與.




Bob 也介紹了 摩茲人 https://mozillians.org 以及 BrowserID 的概念給大家.



另外也分享了 P2PU  http://p2pu.org/en/ 的經驗, 來給 Ezgo 社群一些學習的想法. ^_^

這個是 Ezgo 10 開發者的第一次聚會
首要之務就是把進度 check list



也針對桌面 Block 進行討論



這次比較有趣的是其實對我來說, 這個是桌面設計的差異 ( GNOME / KDE ), 所以針對桌面顯示的部份, 大家 "熱烈" 討論很久, 也笑場不斷. 最後的結論是以 資料夾檢視 的方式來顯示桌面. (KDE 使用者一定會說, 這不是 plasma ... XD)


總而言之, 藉由這次的聚會也讓我多了解一些 KDE 的設計理念與作法
感謝 蘇仕文 與小緯

一些聚會的照片放在這邊
也謝謝 Ezgo 軍師團的伙伴









~enjoy it