2012年8月30日 星期四

Mac Day 4 : iphone Hello world - Xcode 4.4


iOS : Start Developing iOS Apps


1. Xcode 4.4 : Create a new Xcode project



2. New Project -> Empty Application


3. Product Name : HelloWorld
    Device : iphone
    勾選 :Use Automatic Reference Counting
                 會自動計算參考個數來決定是否回收記憶體

 
4.  專案位置,並有git的版本控管



5. 樣板程式產生了



6. 主程式 :main.m
    int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

  @autoreleasepool : 支援 Auto reference counting

int UIApplicationMain (
   int argc,
   char *argv[],
   NSString *principalClassName,
   NSString *delegateClassName
);
Parameters
argc
The count of arguments in argv; this usually is the corresponding parameter to main.
argv
A variable list of arguments; this usually is the corresponding parameter to main.
principalClassName
The name of the UIApplication class or subclass. If you specify nilUIApplication is assumed.
delegateClassName
The name of the class from which the application delegate is instantiated. If principalClassName designates a subclass of UIApplication, you may designate the subclass as the delegate; the subclass instance receives the application-delegate messages. Specify nil if you load the delegate object from your application’s main nib file.
Return Value
Even though an integer return type is specified, this function never returns. When users exits an iPhone application by pressing the Home button, the application moves to the background.
7. AppDelegate.m


(1) 點選 icon 啓動 app




(2) 按下 Home 鍵返回桌面時
applicationWillResignActive:
applicationDidEnterBackgroud:
(3) 再由桌面按 icon 返回 app
applicationWillEnterForegroud:
applicationDidBecomeActive:

在 didFinishLaunchingWithOptions 中加入

    UILabel * helloLabel = [[UILabel alloc]init];
    
    helloLabel.frame = CGRectMake(50, 50, 200, 30);

    helloLabel.text= @"Hello World";
    
    [self.window addSubview:helloLabel];


8. 執行程式


完成. 但是這並不是 Model - View - Control 架構. 明天繼續...


MAC Day 3 : iPhoto

MAC 上的 iPhoto 功能還蠻強大的,今天用到了兩個功能:

1. 相機照片輸入
    直接插入 USB 連接,自動會跳出 iPhoto 軟體來匯入照片

2. 照片 Size 縮小

    (1) 選取要縮小的檔案,接著點選  File (檔案) -> Export (輸出)



會跳出以下的畫面,接著選擇size和輸出檔案位置即可

 

2012年8月29日 星期三

MAC Day 2 : Key




啓動

開機時按下 C從可開機的 CD、DVD 或 USB 隨身碟(如 OS X 安裝媒體)啟動。
開機時按下 D啟動到 Apple Hardware Test (AHT)。
按住 Option-Command-P-R,直到再次聽到啟動聲。重置 NVRAM
開機時按下 Option啟動到 Startup Manager,從這裡,您可以選擇要啟動的 OS X 卷宗。附註:按下 N 也能顯示第一個可開機的網路卷宗。
按下退出鍵、F12,或按住滑鼠或觸控式軌跡板按鈕退出所有抽取式媒體,例如光碟。
開機時按下 N嘗試從相容的網路伺服器(NetBoot)啟動。
開機時按下 T“目標磁碟模式”啟動。
開機時按下 Shift“安全啟動”模式啟動,然後暫時停用登入項目。
開機時按下 Command-V以 Verbose 模式啟動。
開機時按下 Command-S單一使用者模式啟動。
開機時按下 Option-N使用預設的開機映像檔從 NetBoot 伺服器啟動。
開機時按下 Command-R







Command Key







  • Command-A     Edit Menu     Select All - 全選
  • Command-C     Edit Menu     Copy          拷貝
  • Command-S     File Menu     Save           儲存
  • Command-V     Edit Menu     Paste         貼上
  • Command-X     Edit Menu     Cut            剪下
  • Command-Z     Edit Menu     Undo          還原


輸入法切換 :Command + Space
全螢幕拷貝:Command + Shift + 3
選取拷貝:Command + Shift + 4





Option - Option 或 Alt 鍵圖像












Fn :

搭配方向鍵可以變成:Home, End, PageUp, PageDown


Multipad :

雙指上下移動:滾軸
三指向上移動:桌面切換




2012年8月28日 星期二

MAC Day 1: MAC Book Pro 開箱


Macbook pro 寄來了, 被裝在一個包裝良好的紙箱


拆開後是第二層的包裝


Macbook Pro 現身了, 包覆在薄膜之下

 

說明書和電源線也被包裝得很精美


 打開紙夾, 說明書在說 Hello



電源器造型也很特別,是可以拆裝的



這一代的Macbook pro,和前一代相比,真是輕薄呀



磁吸式電源,正反兩面都可插入
輕輕靠近就會吸入連接,絆到電源線時也很容易分開,
而不會有整台筆電飛出去的狀況.





安裝時有語音輔助,音效也很不錯






可以透過 wifi 來定位呢



背光鍵盤




安裝好了,進入 Mac 的世界



總結起來,這是一個令人感到很舒服愉快地體驗,
很多令人驚艷與貼心的細節設計,果然和安裝使用 Windows 有很大的區別


2012年8月5日 星期日

63. 既濟卦 (水火既濟)

九五,東鄰殺牛,不如西鄰之禴祭,實受其福。
牛,祭之盛者也
禴,祭之薄者也。


象曰:東鄰殺牛,不如西鄰之時也﹔實受其福,吉大來也。 
【注】在於合時,不在於豐也。

禴,音「月」,禴祭:最簡單而符合時節的祭祀。
孔穎達:「禴,殷春祭之名也。四時之祭最薄者也。」
干寶曰:「文王從儉以恤民,四時之祭,皆以禴禮。」
朱熹:「故卜祭者有其孚誠,則雖薄物,亦可以祭矣。」



Java 亂數

import java.lang.Math;

Math.random():
  Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.

整數 X ~ Y 之間的亂數

(int)(Math.random()*(Y-X+1))+X

2012年8月4日 星期六

HashTable


1. 宣告


import java.util.Hashtable;


Hashtable ht = new Hashtable();

2. 使用


.    ht.put(key1, value1);
     value2 = ht.get(key2)


3. 注意 : Key 的 class 要定義 equals 和 hashcode

public boolean equals(Object that);
public int hashCode();

4. HashTable 實現

    不同於傳統 碰撞時跑第二次 hash function 找空位, 改用 link 直接串起來. 



5. Java Program (without expending hash table )

package neo.ds;

import java.io.*;

public class MyHashTable {

private MyEntryList[] table;
private float loadFactor;
private int threshold;
 
public MyHashTable(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
                                         initialCapacity);
if (loadFactor <= 0 || Float.isNaN(loadFactor))
             throw new IllegalArgumentException("Illegal Load: "+loadFactor);
    
    if (initialCapacity==0)
         initialCapacity = 1;
    
    this.loadFactor = loadFactor;
    table = new MyEntryList[initialCapacity];
    threshold = (int)(initialCapacity * loadFactor);
    }
    
public MyHashTable(int initialCapacity) {
          this(initialCapacity, 0.75f);
}
public MyHashTable() {
         this(9973, 0.75f);
}
 
public synchronized V get(K key) {
 MyEntryList tab[] = table;
 int hash = key.hashCode();
 int index = (hash & 0x7FFFFFFF) % tab.length;
 
//  System.out.println("get(): key="+key+", hash="+hash+", index="+index);
 MyEntryList elist = tab[index];
 if (elist==null) return null;
 MyEntry e = elist.getEntryHead();
//  System.out.println("e="+e);
 while ( e != null) {
//  System.out.println("e.key="+e.key);
 if (e.key.equals(key)) return e.value;
 e = elist.getNextEntry();
 }
 
 return null;
}

 public synchronized void put(K key, V value) {
 int count;
 // Make sure the value is not null
 if (value == null) {
    throw new NullPointerException();
 }
 // Makes sure the key is not already in the hashtable.
 MyEntryList tab[] = table;
 int hash = key.hashCode();
 int index = (hash & 0x7FFFFFFF) % tab.length;
//  System.out.println("put(): key="+key+", hash="+hash+", index="+index);
 
 MyEntryList elist = tab[index];
 if (elist == null) {
 elist = new MyEntryList();
 tab[index] = elist;
 }
 
 elist.addEntry(new MyEntry(key, value));
// count 
 
// rehash
}  

/*
public static void main(String[] args){

        System.out.println("Test MyHashTable");
        
        MyHashTable ht = new MyHashTable();
        
        ht.put("Thousand", new Integer(1000));
        ht.put("Hundred", new Integer(100));
        ht.put("Ten", new Integer(10));
        
        Integer a = ht.get("Thousand");
        System.out.println("a="+a);

    }
*/
}

邏輯思維

蘇格拉底:

有天, 蘇格拉底的學生和他請教, 如何挑選伴侶.

蘇格拉底沒有回答, 帶他們走到麥田埂, 告訴他們只能往前走, 僅有一次機會摘支最大的麥穗.

第一個弟子沒走幾步, 看見一支麥穗, 立刻摘下來,
但繼續前進時, 發現前面有許多更大更漂亮的. 只能遺憾地走完.

第二個弟子眼見如此, 看到不錯的, 也覺得後面可能更好, 到了終點仍兩手空空.

第三個弟子吸取教訓, 當走到三分之一時, 分出大中小三類,
走到三分之二時, 驗證之前的判斷, 等最後三分之一時, 遇到大類的麥穗, 就毫不猶豫的摘選下來.  雖說,這不一定是最大的那一支,但他滿意地走完了全程。

===
歸納 - 分析演譯 - 執行
"挑到不好的, 也不要難過, 可以成為哲學家"... :)

===

問題 / 解決問題 : So What / Why So

結論: 「該怎麼做才能解決問題?」
方法:「要達到的話,有哪些方法可行?」
根據:「有什麼根據,證明這些方法真的有效?」

不要把假設和結論混為一談.

===

資料收集 -
MECE : Mutually Exclusive, Collectively Exhaustive
- 分門別類


* 定義問題
 尋找切入點的最佳方式,
    分析「問題」和「目的」,希望透過資料來解決哪些問題、得到什麼結論
* 大分類中再細分
* 確認有無遺漏

2012年8月2日 星期四

java swing hello world



1. Source Code

import javax.swing.*;

public class HelloWorldSwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame("HelloWorldSwing");
        String msg = "Java Swing: Hello World.";
        final JLabel label = new JLabel(msg);
        frame.getContentPane().add(label);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

2.     Constructor : JFrame(String title)

        JFrame frame = new JFrame("HelloWorldSwing");



Java Programming - Hello world

1. Eclipse
    http://www.eclipse.org/downloads/

2. Create first project - HelloWorld







熱門文章