顯示具有 DotNET 標籤的文章。 顯示所有文章
顯示具有 DotNET 標籤的文章。 顯示所有文章

2012年2月13日 星期一

IIS7語言特性∼日期格式

以前在Windows2003Server + IIS6 的時代。架Server位置日期格式沒先選好
網站架下去,日期就會變成「月日年」,不整個重來不會好∼

現在在Windows2008+IIS7.5明明已經很小心了他還是把:年/月/日 搞成 日/月/年
發現現在是可以從IIS中去調整了:


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

又是一個燈下黑-ODAC x64

在Windows X64的系統上要連Oracle資料庫,最近終於有比較好的ODAC可以用了
抓了ODAC 11.2g release 4 來測試
(10版 的ODAC要裝在Win7上,就算改過intall.ini還是無法安裝,跳出安裝畫面按下一步時JRM會掛掉。
最後只能期待新版的向下相容)

裝完之後在VisualStudio裡面Using 什麼的一切正常,但一到執行階段後只要跑道執行Oracle class的地方
怎麼Run都是出現「無法載入組件」。
以往遇到這個問題都是dll版本問題,但這次都確認過了全都是X64。
最後發現「目標CPU」是設成X86了。難怪怎麼都玩不過他∼
預設不是Any CPU嗎?可惡!











--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

有點軟沒跟你講的事、取得連線字串的小修改∼

要取得連線字串,要參考System.Configuration;

至於取值的話,以前我們這樣寫低:
string connstring = ConfigurationManager.ConnectionStrings["ConnectionString1"].ToString();

Dot Net 4.0 之後要這樣:
string connstring = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年8月16日 星期二

ASP.Net ~ K2

K2 BPM~
設定關卡
對應的網頁
動作

資料交換
啟動流程的程式
執行簽核動作的程式


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年7月21日 星期四

Oracle client參考要去哪裡找



--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年7月16日 星期六

看門貓∼

自動偵測指定目錄,當偵測到新增檔案時將檔案透過網際網路傳回中心主機上。

一、偵測檔案
>
> //偵測事件(觸發動作:備份、上傳、刪除)
>             FileSystemWatcher fsw = new FileSystemWatcher(fpath);
>             fsw.IncludeSubdirectories = false;//不監控指定目錄內的子目錄
>             //fsw.Filter = "fer.txt"; //不支援使用多個篩選器,例如 "* txt|*.doc"。
>             fsw.Created += new FileSystemEventHandler(fsw_Created);
>             //fsw.Changed += new FileSystemEventHandler(fsw_Changed);
>             fsw.EnableRaisingEvents = true;
>             Console.Read();
>
> static void fsw_Created(object sender, FileSystemEventArgs e)
>         {
>             Console.WriteLine(SaveLog(string.Format("偵測到新增檔案:{0}", e.Name)));
>             DoJob();
>         }

二、FTP傳輸
> /// <summary>
>         /// FTP上傳
>         /// </summary>
>         /// <param name="fName">檔名</param>
>         /// <returns>成功/失敗</returns>
>         private static bool PutFile(string fName)
>         {
>             SaveLog(string.Format("上傳檔案:{0}", fName));
>             string ftpstr = string.Format("ftp://{0}:{1}/{2}{3}", ftp_url, ftp_port, ftp_path, fName);
>             //Create FTP request            
>             FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpstr);
>             request.Method = WebRequestMethods.Ftp.UploadFile;
>             request.Credentials = new NetworkCredential(ftp_id, ftp_pw);
>             request.UsePassive = true;
>             request.UseBinary = true;
>             request.KeepAlive = false;
>
>             //讀入檔案
>             FileStream stream = File.OpenRead(string.Format("{0}{1}", fpath, fName));
>             byte[] buffer = new byte[stream.Length];
>
>             stream.Read(buffer, 0, buffer.Length);
>             stream.Close();
>
>             //上傳
>             try
>             {
>                 Stream reqStream = request.GetRequestStream();
>                 reqStream.Write(buffer, 0, buffer.Length);
>                 reqStream.Close();
>             }
>             catch (Exception ex)
>             {
>                 string exs = string.Format("例外狀況:{0}, Ftp string:{1}", ex.ToString(), ftpstr);
>                 Console.WriteLine(exs);
>                 SaveLog(exs);
>                 SendMail(exs);
>                 return false;
>             }
>             FtpWebResponse response = (FtpWebResponse)request.GetResponse();
>             Console.WriteLine(SaveLog(string.Format("傳輸狀態:{0}", response.StatusDescription)));
>             request.Abort();
>             return true;
>         }
>

三、Email發送
>
> /// <summary>
>         /// 發送通知
>         /// </summary>
>         /// <param name="users">收件人</param>
>         /// <param name="exmsg">例外訊息</param>
>         /// <returns></returns>
>         private static bool SendMail(string _body)
>         {
>             SmtpClient MySmtp = new SmtpClient(ssmtp, ssmtp_port);
>             MailMessage Mms = new MailMessage();
>             //MySmtp.Credentials = new NetworkCredential(mail_id, mail_pw);
>             //MySmtp.EnableSsl = true;
>
>             Mms.From = new MailAddress(mail_src);
>             foreach (string _ms in mail_rec.Split(','))
>             {
>                 if (!string.IsNullOrEmpty(_ms)) Mms.To.Add(_ms);
>             }
>             Mms.Subject = mail_sub;
>             Mms.Body = _body;
>
>             try
>             {
>                 MySmtp.Send(Mms);
>                 Console.WriteLine(SaveLog(string.Format("派送訊息通知:{0}", Mms.To.ToString())));
>             }
>             catch (Exception ex)
>             {
>                 Console.WriteLine(SaveLog(string.Format("SMTP發生例外狀況:{0}", ex.ToString())));
>                 return false;
>             }
>             return true;
>         }

四、引用
> using System.IO;
> using System.Net;
> using System.Net.Mail;
> using System.Net.NetworkInformation;


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年3月18日 星期五

Jquery跟Silverlight打架!

最近工作上處理的系統中又有 silverlight又有 jQuery
結果兩個相處上有點小摩擦~銀光跟Jquery的遮罩互不相讓!
基本上調整 z-index沒有效果
後來找到一個解決方案~在嵌入SL的Object中加入兩個參數就完工!
<param name="background" value="Transparent" />    
                                <param name="windowless" value="true" />

高興了還沒三秒鐘!卻換 Drag and drop 的功能不能用了!昏 ...
Silverlight主要負責處理拖曳上傳。

後來發現最有影響的是<param name="windowless" value="true" />這一行
所以乾脆把它作成<Literal>控制項,由程式去控制他的true or false!
void SetWindowless(bool iswlmode)
    {
        StringBuilder sb = new StringBuilder();
        string wlmode = (iswlmode) ? "true" : "false";
        sb.AppendFormat("<param name=\"windowless\" value=\"{0}\" />",wlmode);
        Lit_windowless.Text = sb.ToString();
    }
--
<object data="data:application/x-silverlight-2," height="99%" type="application/x-silverlight-2"
                                width="350px" style="z-index:99999;">
                                <param name="source" value="/Service/xxx.xap" />
                                <param name="onError" value="onSilverlightError" />
                                <param name="minRuntimeVersion" value="4.0.50826.0" />
                                <%--<param name="background" value="Transparent" />    
                                <param name="windowless" value="true" />   --%>
                                <asp:Literal ID="Lit_windowless" runat="server" />               
                                <param name="autoUpgrade" value="true" />
                                <a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50826.0" style="text-decoration: none">
                                    <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"
                                        style="border-style: none" />
                                </a>
                            </object>
利用完了再一腳踢開 ccc

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年3月11日 星期五

VS應用程式伺服器∼自訂Port號備忘

VS應用程式伺服器∼自訂Port號備忘

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年3月1日 星期二

動態載入User control

做一個按鈕來動態載入User control,按一次增加一個
必須在Postback後保留。在網路上找到章老師的文章參考後,利用Viewstate來解決
取出動態載入的uc 取其值進行運算儲存。

引用
<%@ Reference Control="~/UserControl/EFlow/EFlowConditional.ascx" %>

加減按鈕
        <asp:ImageButton ID="YTImgBut_cdtl_add" runat="server" ToolTip="增加條件式" ImageUrl="~/images/icon/list-add.png"
            OnClick="YTImgBut_cdtl_add_Click" />&nbsp;
        <asp:ImageButton ID="ImgBut_cdtl_Remove" runat="server" ImageUrl="~/images/icon/trash.gif"
            OnClick="ImgBut_cdtl_Remove_Click" />
容器
<asp:PlaceHolder ID="PlaceHolder_cdtl1" runat="server"></asp:PlaceHolder>

新增時ViewState遞增
protected void YTImgBut_cdtl_add_Click(object sender, EventArgs e)
        {
            ViewState["DesignerMode"] = "Add";
            if (ViewState["cdtlID"] == null) ViewState["cdtlID"] = 1;
            else ViewState.Add("cdtlID", Convert.ToInt32(ViewState["cdtlID"]) + 1);
            SetUserControl(ViewState["cdtlID"].ToString());
        }

poskback回來後要如數加回
 if (IsPostBack)
            {
                SetUserControl();
                int ci = 0;
                if (int.TryParse(ViewState["cdtlID"].ToString(), out ci))
                {
                    for (int i = 1; i <= ci; i++)
                    {
                        SetUserControl(i.ToString());
                    }
                }
            }
            else
            {
                ViewState["DesignerMode"] = "Init";
                ViewState["cdtlID"] = 0;
                SetUserControl();

                for (int i = 1; i <= _SelectCount - 1; i++)
                {
                    ViewState["DesignerMode"] = "Add";
                    ViewState.Add("cdtlID", Convert.ToInt32(ViewState["cdtlID"]) + 1);
                    SetUserControl(i.ToString());
                }
            }

動態取值
 if (int.TryParse(ViewState["cdtlID"].ToString(), out ci))
            {
                for (int i = 0; i <= ci; i++)
                {
                    string controlid = string.Format("yt_eflw_ctdl_{0}", i.ToString());
                    UserControl_EFlow_EFlowConditional cdtl;
                    if (i == 0) cdtl = (UserControl_EFlow_EFlowConditional)PlaceHolder_cdtl0.FindControl(controlid);
                    else cdtl = (UserControl_EFlow_EFlowConditional)PlaceHolder_cdtl1.FindControl(controlid);
                    string n = cdtl.ConditionalName;
                    int sch = cdtl.ConditionalSch;
                    string fd = cdtl.ConditionalField;
                    string lg = cdtl.ConditionalLogi;
                    string v = cdtl.ConditionalValue;
                    string flid = cdtl.FlowID;
                    bool en = cdtl.IsEnable;
                    if (SaveConfig(_FormID, n, sch, fd, lg, v, flid, en)) i_ok++;
                    i_all++;
                }
p.s.注意to me (textbox)不要用到yt版!!
--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2011年1月29日 星期六

[Silverlight] Drag to here !!

總算也把這個東西做出來了,多虧Silverlight4.0 的拖曳功能,以及Code pj 上老外朋友提供的範例
說起來之前一直看不起Silverlight,因為MS的Selas整天只會說清明上河圖
SL 4.0出來感覺滿有劃世代的感覺呢 !

2010年6月15日 星期二

Crystal report 工具列圖示不見了

Crystal report 的工具列圖示不見第一個想到的一定是檢查 crystalreportviewsXX 這個資料夾在不在網頁根目錄下!
但這次我是從XI R2 升到 SP4而已,資料夾它也自動幫我更名了,但開啟網頁就是找不到!

後來查了一下網頁原始檔才發現~Toolbar的圖片參考位置還有一個地方:
果然老外才是王道!

How to Fix crystal report viewer missing toolbar icons (CRXI-R2)

1) Locate images folder of crystal report viewer toolbar in web server (in development PC, it』s C:\Program Files\Business Objects\Common\3.5\crystalreportviewers115)
2) Create C:\inetpub\wwwroot\aspnet_client\ System_Web\2_0_50727 folder if it does not exist
3) Copy crystalreportviewers115 folder includes sub-folders and files to the folder created in step 2), verify crystalreportviewers115 has enough rights for SYSTEM and ASP.NET account to read and execute
4) In IIS, right click the previously defined web site name, create a virtual directory called aspnet_client and map its physical directory to C:\inetpub\wwwroot\aspnet_client.
The newly created virtual directory should be at the same level as the bin directory.

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月11日 星期四

ASP.Net匯出PDF~Bt iTextSharp

Part.1
首先當然是將iTextSharp載回來加入參考,然後引用:
<%@ Import Namespace=" iTextSharp.text" %>
<%@ Import Namespace=" iTextSharp.text.pdf" %>
<%@ Import Namespace="iTextSharp.text.html.simpleparser" %>
程式:
//--輸出PDF
Response.ContentType = "application/pdf";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("content-disposition", "attachment;filename=CusInvNo.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
System.IO.StringWriter stringWrite = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

GridView1.DataBind();
StringReader reader = new StringReader(stringWrite.ToString());
Document doc = new Document(PageSize.A4);
PdfWriter.GetInstance(doc, Response.OutputStream);

/*若要將檔案放在Server上
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(HttpContext.Current.Server.MapPath("TEST.pdf"), FileMode.Create));
*/

//0.處理中文~設定中文字型
string fontPath = Environment.GetFolderPath(Environment.SpecialFolder.System) +@"\..\Fonts\kaiu.ttf";
BaseFont BaseF = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font fontCh = new Font(BaseF, 12);

doc.Open();
//1.將GridView轉為PdfPTable
PdfPTable ptb = new PdfPTable(GridView1.Columns.Count);

//表格標題
for (int h = 0; h < GridView1.Columns.Count; h++)
{
ptb.AddCell(new Phrase(GridView1.HeaderRow.Cells[h].Text, fontCh));
}
ptb.HeaderRows = 1;
//表格內文
for (int i = 0; i < GridView1.Rows.Count; i++)
{
for (int j = 0; j < GridView1.Columns.Count; j++)
{
ptb.AddCell(new Phrase(GridView1.Rows[i].Cells[j].Text, fontCh));
}
}
//2.輸出
doc.Add(ptb);
doc.Close();
後來中文問題~將GridView轉成PDFPTable來解決。

2010年3月10日 星期三

ASP.Net錯誤訊息導頁

Web開發的系統導入後,有時候還是有可能被「厲害的User」弄出錯誤訊息!
以ASP.Net而言就是經典的黃底紅字啦!所以這時候最好做一下錯誤訊息導頁。

一、Web.config設定:

在Web.config的<system.web>中加入
<customErrors defaultRedirect="GenericErrorPage.aspx" mode="On" />

二、攔截網頁設定:
GenericErrorPage.aspx 裡面我是用DBMail來做通知工具,頁面如下:

<%@ Page Language="C#" %>

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
if (Server.GetLastError() != null)
{
//使用asp.net 傳送MAIL
//MailMessage mm = new MailMessage("admin@asp.net","signally@yutian.com.tw","DCM網站錯誤訊息",Server.GetLastError().GetBaseException().Message);

string s = "",ShowMsg="",mm;
mm = (Server.GetLastError().GetBaseException().Message).Trim().Replace("'", "#");

//將錯誤清除
Server.ClearError();

//傳送紀錄錯誤的訊息給管理員。
try
{
//針對已經的錯誤(如:Send Mail)做處理
//SmtpClient sc = new SmtpClient("localhost");
//sc.Send(mm);

//改用DB mail
if (File.Exists(Server.MapPath("~/IsRD")))
{
Response.Write(mm);
}
else
{
ShowMsg = "系統忙碌中、或程式暫時無法執行,已通知系統管理員處理,請稍後再試。";
s = "Exec ZSendErrMsg @tp = 1,@em= '',@mm = '" + mm + "'";
Class1.ExecSQL(s);
Response.Write(ShowMsg);
//Server.Transfer("~/ErrorPage.aspx");
}
}
catch (Exception ex)
{
Response.Write(ex.Message );
}

}
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>伺服器忙碌</title>
</head>
<body>
</body>
</html>
三、利用在跟目錄下放一個叫"IsRD的檔案"來區別是否要攔截訊息∼

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月26日 星期五

C#還是比較好用∼補零原來很簡單!

XXX.ToString("00")
XXX如果是月份函數:則原本1,2,3 ... 12
會變成:01,02,03 ... 12

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月2日 星期二

關於C#讀取CSV檔以及顯示中文亂碼

1.關於C#讀取CSV檔

2.以及顯示中文亂碼∼
using (StreamReader sr = new StreamReader(ytcsv))
變:using (StreamReader sr = new StreamReader(ytcsv,System.Text.Encoding.Default))

string[,] aryResult;
                using (StreamReader sr = new StreamReader(ytcsv,System.Text.Encoding.Default))
                {
                    //讀取文字檔
                    string txt = sr.ReadToEnd().Trim();
                    string[] aryStr = txt.Split('\n');//有幾"列"
                    int hight = aryStr.Length;
                    int width = aryStr[0].Split(',').Length;//有幾"行"
                    aryResult = new string[hight, width];//確定後宣告陣列大小
                    //帶值進去
                    for (int h = 0; h < hight; h++)
                    {
                        string[] arySplit = aryStr[h].Split(',');
                        for (int w = 0; w < width; w++)
                        {
                            aryResult[h, w] = arySplit[w];
                            this.Text = "H:" + hight + "-W:" + width;
                        }
                    }
                }

                //印出結果
                for (int h = 0; h <= aryResult.GetUpperBound(0); h++)
                {
                    for (int w = 0; w <= aryResult.GetUpperBound(1); w++)
                    {
                        //Console.WriteLine("ary[{0},{1}]='{2}'", h, w, aryResult[h, w]);
                    }
                    //列印開始!
                    /*
                    ※96 DPI 時, 1 Inch = 96 Pixels , 1 CM = 1/2.54 Inch = 96/2.54 Pixels = 37.7953 Pixels
                     Sol.1:動態產生控制項,整體一起列印。
                     Sol.2:使用迴圈連續列印。
                     */
                    lbl_cus.Text = aryResult[h, 0];
                    lbl_item.Text = aryResult[h, 1];
                    lbl_content.Text = aryResult[h, 2];
                    lbl_date.Text = aryResult[h, 3];
                    //Print
                }
 

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年1月22日 星期五

[JScript]關於window.showModalDialog中再呼叫window.showModalDialog

有時候window.showModalDialog中再呼叫window.showModalDialog會出現不知名JScript錯誤
只是不支援此方法!
只要將阻擋「快顯」那邊取消即可。

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

[ASP.Net]在控制項中直接加JavaScript,以及抓其他控制項的值

在控制項中直接加JavaScript,以及抓其他控制項的值
<asp:Button ID="Button1" runat="server" Font-Size="Medium"
        OnClientClick="
        var dy = document.form1.DDL_Year.options[document.form1.DDL_Year.selectedIndex].value;
        var dm = document.form1.DDL_Mon.options[document.form1.DDL_Mon.selectedIndex].value;
        return  window.confirm('確定要儲存'+dy+'年'+dm+'月的資料嗎?');"
                onclick="Button1_Click" Text="存檔" />

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

[ASP.Net]將Table資料分別寫入Excel中不同工作表(Sheet)中

將Table資料分別寫入Excel中不同工作表(Sheet)中
      
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = Class1.ConnStr;
        conn.Open();
        SqlCommand CMD = new SqlCommand(SqlString, conn);
        ExcelUtil eu = new ExcelUtil("MIS", "GS-ZYI");
        try
        {
            SqlDataReader dr = CMD.ExecuteReader();
           
            while (dr.Read())
            {
                string CID = dr.GetValue(0).ToString();
                string Alias = dr.GetValue(1).ToString();
                SqlCommand QryString = new SqlCommand();
                QryString.CommandText = "Exec ZRealSalesTotal3 @CID = '" + CID + "', @dY='" + dy + "', @dM = '" + dm + "'";
//-[1]-查找資料並放入DataSet
                DataSet ResultSet = RunQuery(QryString);
//-[2]-動態產生DataGrid
                DataGrid DG = new DataGrid();
                DG.ID = CID.ToString();
                this.Controls.Add(DG);
                DG.DataSource = ResultSet;
                DG.AutoGenerateColumns = false;
                BoundColumn c07 = new BoundColumn();
                BoundColumn c08 = new BoundColumn();
                BoundColumn c09 = new BoundColumn();
                BoundColumn c10 = new BoundColumn();
                //BoundColumn c11 = new BoundColumn();
                c07.HeaderText = "規格//項目";c07.DataField = ResultSet.Tables[0].Columns[7].ColumnName;
                c08.HeaderText = "進貨"; c08.DataField = ResultSet.Tables[0].Columns[8].ColumnName;
                c09.HeaderText = "實販"; c09.DataField = ResultSet.Tables[0].Columns[9].ColumnName;
                c10.HeaderText = "庫存"; c10.DataField = ResultSet.Tables[0].Columns[10].ColumnName;
                //c11.HeaderText = "前庫"; c11.DataField = ResultSet.Tables[0].Columns[11].ColumnName;
                DG.Columns.Add(c07);
                DG.Columns.Add(c08);
                DG.Columns.Add(c09);
                DG.Columns.Add(c10);
                //DG.Columns.Add(c11);
                DG.DataBind();
//[-3]-將DataGrid放入各Sheet中
                eu.AddGrid(DG, Alias);
            }
            dr.Close();
        }
        catch (Exception e2)
        {
            //
        }
        conn.Close();
//-[4]-輸出Excel檔       
        eu.Export(this, "GY"+xlsName);
    }
--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2009年8月23日 星期日

兩個禮拜搞出一套系統∼

真是亂來∼八月又要搬家∼又要去跟客戶對談∼

沒有SA、直接Codeing、還得去裝機、作系統整合、製作操作手冊∼囧rz

拖到了20天搞出下面這東西: