2014年10月4日 星期六

angular.js 範例

vi app.html
<html ng-app='myApp'>
<head>
 <title>Your Shopping Cart</title>
 <meta charset="utf-8">
</head>
<body ng-controller='CartController'>
 <h1>Your Order</h1>
 <div ng-repeat='item in items'>
  <span>{{item.title}}</span>
  <input ng-model='item.quantity'>
  <span>{{item.price | currency}}</span>
  <span>{{item.price * item.quantity | currency}}</span>
  <button ng-click="remove($index)">Remove</button>
 </div>
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
 <script>
  var app = angular.module('myApp', []);
 app.controller('CartController', ['$scope', function($scope) {
  $scope.items = [
   {title: '油漆刷子', quantity: 8, price: 3.95},
   {title: '油漆', quantity: 17, price: 12.95},
   {title: '工作服', quantity: 5, price: 6.95}
  ];
  $scope.remove = function(index) {
   $scope.items.splice(index, 1);
  } 
 }]);
 </script>
</body>
</html>

以瀏覽器直接開啟app.html的執行結果:

#

2014年9月22日 星期一

Uber 和 計程車 比較 ( Uber vs Taxi )

來源: Uber - Taipei

單就客觀數字比較 Uber 和 計程車 (小黃) 。因Uber目前服務仍以北部為主,故以台北地區計程車資進行比較。

目前Uber在服務品質和車資上有其競爭力,但就車輛數與法規面來看則是相對弱勢和具有風險。

服務類型
服務車型
基本費用(NT$)
NT$/每分鐘
NT$/每公里
備註
車資估算 (台北車站 <-> 松山車站)
行車距離 6.7km / 約11~12mins
車資 (台北<->桃園機場) 車資(台北<->新竹)
UberX
TOYOTA CAMRY
NISSAN TEANA
MERCEDES-BENZ C-CLASS
50
3
14.5
最低消費 NT$ 70
取消費用 NT$ 50
NT$178~221
NT$1,000
NT$1,500
UberBLACK
MERCEDES-BENZ S-CLASS
SIENNA 7人座 SEATS
LEXUS ES
105
5
20
最低消費 NT$ 150
取消費用 NT$ 100
NT$294~357
NT$1,700
NT$2,200
台北地區計程車
-
70
3
20
起程NT$75/前1.25km
夜間加成 NT$20/趟
日間車資 NT$210~220
夜間車資 NT$230~250
-
-

參考資料:
#

2014年9月14日 星期日

替 Blogger.com 文章加上程式碼區塊(codeblock)和執行結果區塊(shellblock)

選擇 範本>編輯HTML ,在HTML程式碼中找到CSS區塊,最後新增.post .codeblock和.shellblock的CSS程式碼如下:

<style type='text/css'>    ...

    .post .codeblock { 
       display: block; /* fixes a strange ie margin bug */
       font-family: Courier New;
       font-size: 10pt;
       overflow:auto;
       background: #f7f7f7 url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5yQoXazjZmzOBl-CuDBezK44UwWVLs8GNNigHQmyKSv8EvcXCEtSlMQAPUeXgo0wlKey6nO9VbGG4VF-b4NxEJivH5avNfjYagrnLNQcx8l4TL9AbxT6JU3PUUKBgNzbG9WHP8WMGRmcX/s1600/Code_BG.gif) left top repeat-y;
       border: 1px solid #ccc;
       padding: 10px 10px 10px 21px;
       max-height:1000px; 
       line-height: 1.2em;
    }

    .post .shellblock { 
       display: block; /* fixes a strange ie margin bug */
       font-family: Courier New; 
       font-size: 10pt;
       overflow:auto;
       color: #00ff00;
       background: #000000;
       border: 1px solid #ccc;
       padding: 10px 10px 10px 21px;
       max-height:1000px; 
       line-height: 1.2em;
    }
</style>

另外在<head>和</head>之間,加上
<script src="//google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>

記得要「儲存範本」喔!

之後在寫部落格文章時,在HTML模式底下寫
 
<pre class="codeblock prettyprint">
public class first {
    public static void main (String[] args) {
        System.out.println("Hello, my first java!");
    }
}
</pre>
就會出現下列結果囉:
public class first {
    public static void main (String[] args) {
        System.out.println("Hello, my first java!");
    }
}
如果寫成
<pre class="shellblock">
  執行結果
  ...
</pre>
結果就會變成
  執行結果
  ...
#

Java Multithread Examples

Java MultiTread 程式的基本結構:
import java.util.*;

class firstThread implements Runnable {
   private Thread t;
   private String threadName;

   firstThread( String name) {
      threadName = name;
      ...
   }

   public void run() {
      ...
   }

   public void start() {
      if (t==null) {
        t = new Thread (this, threadName);
        t.start();
      }
   }
} // end of class firstThread

public class first {

 public static void main(String []args) {
    try {
       ...
    } catch (Exception e) {
       System.out.println(e);
    }
 } // end of main

} // end of class first 
編輯 first.java 程式碼範例如下:
import java.util.*;

class firstThread implements Runnable {
   private Thread t;
   private String threadName;

   firstThread( String name) {
      threadName = name;
      System.out.println("Creating " + threadName);
   }

   public void run() {
      long start = System.currentTimeMillis();
      System.out.println("Running " + threadName);
      try {
         for (int i=0; i<=10; i++) {
            Random ran = new Random();
            int j = ran.nextInt(1000) + 1;
            Thread.sleep( j );
            System.out.println(" Thread " + threadName + " : round " + i + " sleep " + j);
         }
         long end = System.currentTimeMillis();
         long diff = end - start;
         System.out.println("Difference of " + threadName + " is : " + diff);
      } catch (Exception e) {
         System.out.println("Thread " + threadName + " : " + e);
      }
      System.out.println("Thread " + threadName + " exiting.");
   }

   public void start() {
      System.out.println("Starting " + threadName);
      if (t==null) {
         t = new Thread (this, threadName);
         t.start();
      }
   }
} // end of class firstThread

public class first {
   public static void main(String []args) {
      try {
         firstThread r1 = new firstThread("Thread-1");
         r1.start();

         firstThread r2 = new firstThread("Thread-2");
         r2.start();

         firstThread r3 = new firstThread("Thread-3");
         r3.start();
      } catch (Exception e) {
         System.out.println(e);
      }
   } // end of main
} // end of class first
編譯 first.java
$ javac first.java
執行 java first,因為 MultiThread 和 Random sleep 的影響,結果可能和下列範例有些不同。
$ java first

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Creating Thread-3
Starting Thread-3
Running Thread-2
Running Thread-3
 Thread Thread-3 : round 0 sleep 660
 Thread Thread-2 : round 0 sleep 730
 Thread Thread-1 : round 0 sleep 837
 Thread Thread-2 : round 1 sleep 213
 Thread Thread-2 : round 2 sleep 363
 Thread Thread-1 : round 1 sleep 794
 Thread Thread-3 : round 1 sleep 995
 Thread Thread-1 : round 2 sleep 112
 Thread Thread-1 : round 3 sleep 158
 Thread Thread-2 : round 3 sleep 649
 Thread Thread-3 : round 2 sleep 578
 Thread Thread-1 : round 4 sleep 427
 Thread Thread-2 : round 4 sleep 893
 Thread Thread-2 : round 5 sleep 8
 Thread Thread-3 : round 3 sleep 625
 Thread Thread-2 : round 6 sleep 159
 Thread Thread-3 : round 4 sleep 260
 Thread Thread-1 : round 5 sleep 879
 Thread Thread-2 : round 7 sleep 667
 Thread Thread-2 : round 8 sleep 58
 Thread Thread-3 : round 5 sleep 824
 Thread Thread-2 : round 9 sleep 392
 Thread Thread-2 : round 10 sleep 2
Difference of Thread-2 is : 4146
Thread Thread-2 exiting.
 Thread Thread-1 : round 6 sleep 985
 Thread Thread-3 : round 6 sleep 667
 Thread Thread-1 : round 7 sleep 839
 Thread Thread-3 : round 7 sleep 665
 Thread Thread-1 : round 8 sleep 354
 Thread Thread-1 : round 9 sleep 96
 Thread Thread-1 : round 10 sleep 171
Difference of Thread-1 is : 5666
Thread Thread-1 exiting.
 Thread Thread-3 : round 8 sleep 559
 Thread Thread-3 : round 9 sleep 61
 Thread Thread-3 : round 10 sleep 201
Difference of Thread-3 is : 6108
Thread Thread-3 exiting.

2014年9月7日 星期日

亂,也要找對方法 - bash shell 隨機亂數產生方法

# random.sh
#!/bin/bash

# 想要產生 1..500之間的亂數
n=500
echo $n

# 執行隨機亂數 500 x 100 = 50000 回合
for ((i=1; i<=50000; i++))
do
  # 顯示是第幾回合
  echo $i

  # 方法1
  RANDOM=`date +%s`
  echo $(( RANDOM % n + 1 )) >> 1.list

  # 方法2
  RANDOM=$$
  echo $(( RANDOM % n + 1 )) >> 2.list

  # 方法3
  # 目前相對好的bash隨機亂數方法, 隨機結果相對比較平衡
  echo $(( $(od -An -N3 -i /dev/random) % n + 1)) >> 3.list


done

----------
以R來檢驗亂數產生結果

方法1產生結果:

> d1<-read.table('1.list', header = F)
> d1=as.martix(d1)
> summary(d1)
       V1       
 Min.   :  1.0  
 1st Qu.:136.0  
 Median :256.0  
 Mean   :234.9  
 3rd Qu.:316.0  
 Max.   :500.0

> hist(d1)














方法2產生結果:

> summary(d2)
       V1       
 Min.   :  0.0  
 1st Qu.:263.0  
 Median :263.0  
 Mean   :258.7  
 3rd Qu.:321.0  
 Max.   :472.0 

> hist(d2)
















> summary(d3)
       V1     
 Min.   :  0  
 1st Qu.:125  
 Median :250  
 Mean   :250  
 3rd Qu.:375  
 Max.   :500


> hist(d3)
















ps. 其實上述範例產生出來的亂數範圍有點小錯 XD

2014年8月14日 星期四

ubuntu 上安裝 Elasticsearch Cluster

1. 參考 Installing ElasticSearch on Ubuntu 14.04 ,分別在欲加入 Elasticsearch Cluster 的每部機器上完成安裝

### Install  Oracle Java (改安裝 Oracle Java)
cd /tmp
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
 
### Download and Install ElasticSearch ver 1.3.2
### Check http://www.elasticsearch.org/download/ for latest version of ElasticSearch and replace wget link below
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.deb
sudo dpkg -i elasticsearch-1.3.2.deb
 
### Install the Java Service Wrapper for ElasticSearch
curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
sudo mkdir /usr/local/share/elasticsearch
sudo mkdir /usr/local/share/elasticsearch/bin
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/
rm -Rf *servicewrapper*
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install
sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch
### Start ElasticSearch
sudo service elasticsearch start
 
### Make sure service is running
curl http://localhost:9200
 
### Should return something like this:
#{
# "status" : 200,
# "name" : "Storm",
# "version" : {
# "number" : "1.3.1",
# "build_hash" : "2de6dc5268c32fb49b205233c138d93aaf772015",
# "build_timestamp" : "2014-07-28T14:45:15Z",
# "build_snapshot" : false,
# "lucene_version" : "4.9"
# },
# "tagline" : "You Know, for Search"
#}

2. 分別修改每部機器上 /etc/elasticsearch/elasticsearch.yml 設定

cluster.name: elasticsearch
node.name: "elastic_your_nodename"

3. 重新啟動 elasticsearch

sudo service elasticsearch restart

4. 測試 Elasticsearch Cluster 是否有多個 node 出現?本例為2個nodes 

curl -XGET http://elastic_your_nodename:9200/_cluster/health?pretty

{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 5,
  "active_shards" : 10,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
}
#

2014年8月13日 星期三

Mac OS X Client 以 ssh 自動登入 ubuntu server


1. 於Mac OS X開啟終端機"terminal" 程式

$ ssh-keygen -t rsa (接著連續按下幾次Enter)
$ cat ~/.ssh/id_rsa.pub | ssh yourname@ubuntu.server "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


2. 於Mac OS X開啟終端機"terminal" 程式

$ ssh yourname@ubuntu.server  (應該已能自動登入,免輸入ssh密碼囉)


#