[AWS][EC2]為Instance租用一個Elastic IP

| Comments

Instance的私人、公用DNS及私人IP都會會變動的,在你重開機之後,他就會改變,筆者上次就被這個給嚇到了想說原來的架好的網站怎麼突然上不去,而且回到aws web Console明明Instance是running,經過一連串的檢查,原來是dns跟ip都跑掉了,害我一陣慌亂~~,所以如果你是需要一個長期安定不改變的ip的話那就申請一個Elastic IP吧!(真奇怪~~IPv4不是發完了嗎?怎麼還可以這樣子的申請,所以如果不要用的話要記得取消掉喔,不然是要多收錢的喔!)

申請Elastic IP

1.在左側欄點「Elasitc IPs」

image

2.點選「Allocate New Address」

[AWS][EC2]建立實體(Launch Instance)

| Comments

image

Amazon Web Services Elastic Compute Cloud(EC2) 是IaaS因此他的彈性相當的大,升級或是添加軟體都相當的方便,並且不像一般的主機服務商那樣,以月或以年計費,如果沒有那麼大的使用量,那你的C/P值不就是降低很多,話說用多少就算多少(EC2計價方式),而EC2他是以Xen做為執行環境,我們想要幾顆CPU,多少的RAM也可以選擇你想要的OS。

申請AWS的帳號可以參考「免費玩雲端運算,Amazon Web Service 雲端運算平台攻略 【1】

今天來學習如何

建立一台Instance

[AWS][EC2]利用SSH連入實體Linux主機

| Comments

在剛剛那篇文章「[AWS][EC2]建立實體(Launch Instance)」我們利用了AWS Management Console建立了實體,很可惜Amazon 的 Console沒辦法直接連到主機(以後有可能嗎?~~看情況吧~)所以我們用SSH方式連入,請先下載以下兩個軟體:

  1. PuTTY
  2. PuTTYgen
我們從AWS Mangement Console裡看到我們剛剛建立了一個Instance了,注意到下頁面,我們可知道EC2建立Instance後給他了一個私人ip、私人dns 、公用dns,我們等等可以利用「公用DNS」來連入主機,我們剛剛連立的Instance的公用dns「ec2-175-41-204-110.ap-northeast-1.compute.amazonaws.com」所以將他記住後等等我們就會用到了!

image

[WordPress]Google Analytics分析

| Comments

通常一個專業的網站管理員,或者是專業的行銷人員,都需要一些數據來分析,過去的網站流量以及進出單一頁面或是整個網站的次數統計是一個費時又耗工的動作有了Google Analytics,好像所有的事情都變的很簡單了,利爭了javascript將資料回傳至google的server做統計,我們只要申請>登入>設定,接下來就等老闆伸手要報告的時候就可以馬上給他一份又美數據又完整的報告了!

在一般的網址,需要把下面這個的程式碼貼到每一個網頁裡就可能讓Google乖乖的做出漂亮的報告!

image

[AWS]Amazon Web Services 概論

| Comments

Amazon Web Services

什麼是雲端?在這邊就不多說了,網路上怎麼Google都可以找到很多資料,這邊要介紹的是怎麼樣才能坐享雲端的世界。雖然Amazon在上個星期發生了大斷線,不過對廣大的對新技術的好奇者來說不影響對他研究的熱忱,包括我也是~呵~~。

AWS的功能在目前來講(2011/5/25)已經有好幾項功能了,往後可能還會新增也說不定,至於新的專有名稱也很多(是要創造Amazon語言嗎?@@)

運算服務

[ASP.NET]一行程式碼建立ASP.NET資料表-Dynamic Data

| Comments

剛剛參加完Tech Day 2009回來聽到了最新的技術,不過很可惜,沒有想像多那麼多新的技術。

那麼話說回來有聽到董大偉老師有講到ASP.NET會有強大的改變,其中有一個技術就是「Dynamic Data的技術」

首先..現有Web Control有缺少了什麼?所以導致GridView、FormView、DetailsView與資料庫之間嚴重的相依性。

當資料表欄位異動時,須重新整理.aspx前端UI(每當多一個欄位就要去修改,當十個網頁有連結同一個Table就要修改十頁)過去雖然有Template機制,卻強烈的與資料庫相依。

[DB]簡易抓取正規化資料庫資料

| Comments

相信對於剛接觸ASP.NET的人來說都會使用內建的控制項來抓資料~

但到了比較熟了以後當然會想說自已來寫程式來抓資料

畢竟有些網頁不大適合使用這些控制項

學會了如何自已寫程式的時候又發現當資料量大的時候

會去google找說如何正規化~

正規化後的資料怎麼抓呢

現在就來介紹一下囉!

這邊範例是使用access(沒辦法筆者窮~><)

資料庫會有兩個資料表

一、program

主要還是id要有的

二、pdate

這邊會有主要的是id跟pid

pid就是program的id

順便一提我的program放的是課程因為課程大多都是固定的

而課程會有好幾次,所以我將課程的日期放入pdate裡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<table border="2" width="750" bordercolor="#000000" align="center" cellspacing="0"  cellpadding="8">
                <tr>
   <td width="175" height="34" align="center" bordercolor="#000000" bgcolor="#FECCCB">
            <font size="2">課程名稱</font></td>
                       <td width="109" height="34" align="center" bordercolor="#000000" bgcolor="#FECCCB">
           <font size="2">時間</font></td>
                       <td bordercolor="#000000" bgcolor="#FECCCB" height="34" width="290"  align="center">
            <font size="2">課程大綱</font></td>
                       <td width="98" height="34" align="center" bordercolor="#000000" bgcolor="#FECCCB">
           <font size="2">備註</font></td>


                   </tr>
 <%
    string strDbCon = "Provider=Microsoft.jet.OLEDB.4.0;" + "Data Source="+ Server.MapPath("App_Data\\course.mdb");
            //建立資料庫連結
           OleDbConnection objCon = new OleDbConnection (strDbCon);
            objCon.Open();
            string strSQL = "SELECT * FROM program";
            OleDbCommand objCmd = new OleDbCommand(strSQL, objCon);
            OleDbDataReader objDataReader = objCmd.ExecuteReader();
           //讀取資料
           while (objDataReader.Read())
          {
               //建立正規化資料表的連結
               string strSQL2 = "SELECT * FROM pdate where pid="+objDataReader[0];
               OleDbCommand objCmd2 = new OleDbCommand(strSQL2, objCon);
               OleDbDataReader objDataReader2 = objCmd2.ExecuteReader();
               Response.Write("<tr>");
               Response.Write("<td width='175'><font size='2'>【" + objDataReader[1] + "】<br>" + objDataReader[2] + "</font></td>");
               Response.Write("<td width='109'><font size='2' face='Franklin Gothic Demi Cond'>");
               //讀取正規化資料表的資料
               while (objDataReader2.Read())
               {
                   //判斷資料是否為null
                   if (!objDataReader2.IsDBNull(2))
                  {

                       DateTime mytime1 = Convert.ToDateTime(objDataReader2[2]);
                       DateTime mytime2 = Convert.ToDateTime(objDataReader2[3]);


                   if (mytime1.ToString("dd") == mytime2.ToString("dd"))
                   {
                       Response.Write(mytime1.ToString("M/d") );
                   }
                   else
                   {

                       Response.Write(mytime1.ToString("M/dd-") + mytime2.ToString("dd") );
                   }
               }
                   if (objDataReader2.IsDBNull(4))
                   {
                       Response.Write("<br/>");
                 }
                   else
                  {
                      string memo = Convert.ToString(objDataReader2[4]);
                       Response.Write("("+memo+")<br/>");
                   }
              }

               objDataReader2.Dispose();
               objDataReader2.Close();

               Response.Write("</font></td>");
               Response.Write("<td width='290'><font size='2'>" + objDataReader[3] + "</font></td>");
               if(objDataReader.IsDBNull(10)){
                   Response.Write("<td width='98'>.</td>");
               }
               else{
                  Response.Write("<td width='98'><font size='2'>" + objDataReader[10] + "</font></td>");
               }
               Response.Write("</tr>");
              i++;
           }
           objDataReader.Dispose();
           objDataReader.Close();
           objCon.Dispose();
           objCon.Close();

%>
           </table>