今天收到微軟的TechNet Flash的電子報,看了一下內容,突然發現到一個標題吸引住了我的眼睛.


"不正確的實體記憶體量,有超過4GB的實體記憶體案裝Windows Vista Service Pack 1 或Windows Server 2008 架構電腦以Microsoft系統資訊(Msinfo32.exe)工具報告"


修正問題Msinfo32.exe工具在其中不正確計算在Windows Server 2008 - 架構實體記憶體或Windows Vista basedcomputer,當電腦有安裝的實體記憶體超過4G.


 


這兩段話有點難懂,因為是機器翻的,重點就是Vista SP1與Win Server 2008在使用Msinfo32.exe的工具報告時,記憶體的顯示不正確,例如實體記憶體有8G,在Msinfo32.exe內,會顯示少於4G,這是因為Msinfo32.exe本身在計算時,用了不正確的資料型別,現在有HotFix可以更正這個問題了.


原文 : 不正確的實體記憶體量, 有超過 4 GB 的實體記憶體安裝 Windows Vista Service Pack 1 或 Windows Server 2008 - 架構電腦以 Microsoft 系統資訊 (Msinfo 32. exe) 工具報告

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  其實工作已經悶了好長一段時間了,因為重覆性的Coding及分析,或許是變熟練了,感覺動作愈來愈機械化,雖然公司也推改革一陣子了,但至今感覺公司還在摸索中,所以才會有第一次跟我提需求,提到為什麼要做這個程式的目的,而第二次再討論時,整個的目的都變了,使用者也仍在不清楚自己要什麼的階段,加上部份同仁提出的錯誤見解,不瞭解整個的Know-How,所以大家對系統的信心大降.


 


  感覺自己在公司的學習成長變慢許多,似乎少了那麼點新鮮感及冒險感,所以就沒了那個成就感,而GPS定位的想法也是因為在這個情況下,為了挑戰自己所找出來的課題,這個課題結束後,不知道公司是否會有新的挑戰出現,好讓我從成就感得取快樂,不然就只好再找新的課題來考自己.


 


  朋友說,我這就是工作倦怠,大多的建議都是換個工作看看,其實我自己也沒有方向,打從入社會開始,做過線上作業員,產品開發部工程師,開發部/製造部/採購/業務都做過了,管理職也做過經理,現在則做了3年了程式設計師,接下來不知道要挑戰什麼~

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  之前有寫了一篇"讓人知道你在那"的文章,希望能自己寫程式去運用GPS的定位功能,而這篇文章將會帶到兩個部份,第一個部份是PDA回傳資料時所用的Web Service,另一個就是PDA的GPS訊號抓取與轉換,而這部份並不是採用PAPAGO或其它的SDK,全部是採自己Coding的做法,在寫這個過程中,其實有點頭大,因為Coding的電腦是在室內,所以PDA是無法抓到GPS的訊號,所以只好從戶外拉了一條好長的GPS延長線到電腦邊,最後從抓到的經緯度丟到google map上去顯示,定出來的位置還算準確,確實定位出目前我的所在位置,另一個常在一般的衛星導航系統看到的情況,就是有時會亂跳,因為車子不可能在可行駛的道路以外,所以當經緯度偏離航道時,就會開始"亂跳",想辦法跳回最近的航道,這有好有壞,有時GPS是對的,位置真的不在道路上,但導航系統一直挑附近的道路跳,可是有時GPS訊號差,經緯度的誤差很大,明明在這條巷子,結果地圖顯示在另一條巷子裡,而導航程式本來就是用來帶領駕駛人行駛方向的,所以"車子"當然要在道路上.


 


  廢話了一堆,接下來就開始進入這次的主題,首先,為了儲存PDA所回傳的資料,所以在DataBase開了一個Table來儲存,資料結構大至上如下 :


資料庫 : GPSDB


TableName : GPSTrace


Columns :


UID (int,非null) 識別自動加1


Latitude (nvarchar(10),非null) 預設值 25.048346


Longitude(nvarchar(10),非null) 預設值 121.516396


UpdTime (DateTime,非null) 預設值 getdate()


資料結構大致如上,另外安全性的帳號問題,就各位依自己的喜好去設,配合GPS及下篇MAP展示做修改即可.


 


  此次的DEMO方向是PDA會回來Update資料,並不會做Insert的動作,所以只會儲存最新的所在位置,而第一次DB並沒有資料,所以Update一定會出錯,由於資料操作並非此次重點,因此先手動輸入兩筆資料進去.


SampleData


Web Service的部份也很簡單,只是很單純的Update的動作. 所以以下的Code只是為了達到Update的DEMO目地,其它安全性,例如Connection string不應直接寫在這裡面,這部份就依個人環境需求去改,如果再帶下去,文章會又臭又長,如果有需要,再額外開篇來討論.


[WebMethod]
public int UpdTrace(int UID,string Lat,string Long)
{
    string strconn = "Data Source=localhost;Initial Catalog=GPSDB;User Id=GPSUser;Password=gpsuser;"; //ID及PWD隨個人設定.
    SqlConnection conn = new SqlConnection(strconn);
    string strcmd = "update gpdtrace set Lat=@Lat,Long=@Long,UpdTime=getdate() where UID=@UID";
    SqlCommand cmd = new SqlCommand(strcmd, conn);
    cmd.Parameters.AddWithValue("@Lat", Lat);
    cmd.Parameters.AddWithValue("@Long", Long);
    cmd.Parameters.AddWithValue("@UID", UID);
    try
    {
        conn.Open();
        return cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }
}

 





 


PDA DB及Web Service好了,接下來要帶的就是PDA的GPS程式寫法(前面帶很快,因為我比較有興趣的是GPS的抓法^^),先大致看一下PDA的UI設計. 最上方的GPS Port是供使用者選擇GPS所使用的Port,因為每台Smart Device的GPS Port不見得相同,其它就都是唯讀的資訊,而資訊來源就是衛星訊號,從UI上看到的資訊只是衛星訊號的一部份,而衛星的訊號也只是抓其中的一種GPGGA出來用,其它還有GPGSV,GPGSA等等可以運用,衛星的訊號請參考GPS - NMEA sentence Information所提供的資料,在此就不再累述這些訊號一次.


 


 


 


 


 


 


 


 


 


而這次所運用的GPGGA訊號,基本上會抓到這類字串$GPGGA,095031.254,2501.9891,N,12133.8101,E,1,07,7.0,123.9,M,15.0,M,0.0,0000*74


每個逗號隔開視為一個欄位,而每個欄位值所代表的意義如下清單
























































Name



Example Data



Description


Sentence Identifier $GPGGA Global Positioning System Fix Data
UTC Time 095031.254 09:50:31
Latitude 2501.9891,N 北緯
Longitude 12133.8101,E 東經

Fix Quality:
- 0 = Invalid
- 1 = GPS fix
- 2 = DGPS fix


1 Data is from a GPS fix
Number of Satellites 07 7 Satellites are in view
Horizontal Dilution of Precision (HDOP) 7.0 Relative accuracy of horizontal position
Altitude 123.9,M 123.9 meters above mean sea level
Height of geoid above WGS84 ellipsoid 15.0,M 15.0,M
Time since last DGPS update 0.0 因為採GPS修正,不是DGPS,所以沒有資料
DGPS reference station id 0000  
Checksum *74 Used by program to check for transmission errors

 


瞭解了從衛星收到這字串的意義後,接下來就是怎麼去轉換經緯度的部份了,經度跟緯度的轉換方式都一樣,所以就拿其中一個來說明.


1. 2501.9891 /100 = 25.019891


2. 把小數點後的值從0.019891直接轉為19891


3. 再取小數點部份的值(19891/ 60)*10000=3315166


4. 由於第二步移了一個0,所以3315166轉小數時,要加一個0進去,所以=0.03315166


5. 所以緯度= 25+0.03315166=25.03315166


同樣的方式,算出經度=121.5635


*註此定出來的點是台北101


 


說完了GPS字串及轉換的方式,接下來就是Coding的部份.


1. 在下拉的ComboBox,供使用者選擇GPS Port的部份,先加入四個Port進去


this.cmbPort.Items.Add("COM1");
this.cmbPort.Items.Add("COM2");
this.cmbPort.Items.Add("COM3");
this.cmbPort.Items.Add("COM4");


 


2.加入一個Timer,Interval=1000


 


3.加入一個Serial Port


 


4. 在[開始]的Button加入一個click event. 如此,將GPS的Port打開,藉由Timer的Tick事件來更新資料


        private void btnStart_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = cmbPort.SelectedItem.ToString();//依下拉選擇的com port設定Serial Port
            try
            {
                serialPort1.Open(); //開啟serial port
                txtPortStatus.Text = "";
            }
            catch (Exception ex)
            {
                txtData.Text = ex.Message;
            }
 
            if (serialPort1.IsOpen)//以下為依port的開關狀態來決定UI的動作
            {
                txtPortStatus.Text = "開啟";
                txtQuality.Text = "無";
                txtSTQty.Text = "0";
                txtSeaLevel.Text = "0";
                cmbPort.Enabled = false;
                btnStart.Enabled = false;
                btnStop.Enabled = true;
                timer1.Enabled = true;
            }
            else
            {
                timer1.Enabled = false;
                txtPortStatus.Text = "關閉";
                txtQuality.Text = "無";
                txtSTQty.Text = "0";
                txtSeaLevel.Text = "0";
                cmbPort.Enabled = true;
                btnStart.Enabled = true;
                btnStop.Enabled = false;
            }
        }

 







5. 在[結束]的Button加入一個click event. 如此,將GPS的Port關閉


        private void btnStop_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Close();//關閉serial port
                txtPortStatus.Text = "";
            }
            catch (Exception ex)
            {
                txtPortStatus.Text = ex.Message;
            }
 
            if (serialPort1.IsOpen)//以下為依port的開關狀態來決定UI的動作
            {
                txtPortStatus.Text = "開啟";
                txtQuality.Text = "無";
                txtSTQty.Text = "0";
                txtSeaLevel.Text = "0";
                cmbPort.Enabled = false;
                btnStart.Enabled = false;
                btnStop.Enabled = true;
                timer1.Enabled = true;
            }
            else
            {
                timer1.Enabled = false;
                txtPortStatus.Text = "關閉";
                txtQuality.Text = "無";
                txtSTQty.Text = "0";
                txtSeaLevel.Text = "0";
                cmbPort.Enabled = true;
                btnStart.Enabled = true;
                btnStop.Enabled = false;
                btn_upload.Enabled = false;
            }
        }
 

 





6. 在[回報]的Button加入一個click event. 如此回報目前所在位置


        private void btn_upload_Click(object sender, EventArgs e)
        {
            GPSWS.Service1 ws = new GPS.GPSWS.Service1(); //將之前做好的WS加入參考使用
            ws.Url="http://localhost/gpsws/service1.asmx";//設定Web Service的位址
            try
            {
                ws.UpdTrace(1, txtLatitude.Text, txtLongitude.Text);//上傳至資料庫
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 


 





7. 在Timer的Tick事件加入判斷從Serial port的GPS訊息,並呈現於UI上


        private void timer1_Tick(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                string GPSData = serialPort1.ReadExisting(); //將serialPort所取得的資料存到字串內
                txtData.Text = GPSData;//就是顯示在UI下方的那個大TextBox
                string[] gpsArr = GPSData.Split('$');//依$拆成多個字串陣列
                for (int i = 0; i < gpsArr.Length; i++)
                {
                    string strTemp = gpsArr[i];
                    string[] lineArr = strTemp.Split(',');
                    if (lineArr[0] == "GPGGA")//因為我們只用到GPGGA的訊息,所以其它的訊息不用
                    {
                        try
                        {
                            //Latitude 緯度
                            Double dLat = Convert.ToDouble(lineArr[2]);
                            dLat = dLat / 100;
                            string[] lat = dLat.ToString().Split('.');
                            string la =(((Convert.ToDouble(lat[1]) / 60)*10000)).ToString("#");
                            for (int a = 0; a < lat[1].Length; a++)
                            {
                                if (lat[1].Substring(a, 1) == "0")
                                {
                                    la = "0" + la;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            Latitude = lat[0].ToString() + "." + la.Substring(0,6);
 
                            //Longitude 經度
                            Double dLon = Convert.ToDouble(lineArr[4]);
                            dLon = dLon / 100;
                            string[] lon = dLon.ToString().Split('.');
                            string lo = (((Convert.ToDouble(lon[1]) / 60)*10000)).ToString("#");
                            for (int b = 0; b < lon[1].Length; b++)
                            {
                                if (lon[1].Substring(b, 1) == "0")
                                {
                                    lo = "0" + lo;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            Longitude = lon[0].ToString() + "." + lo.Substring(0,6);
 
                            //Display
                            txtLatitude.Text = Latitude;
                            txtLongitude.Text = Longitude;
                            txtSTQty.Text = lineArr[7]; //衛星數
                            txtSeaLevel.Text = lineArr[9];//海平面高度
                            switch (lineArr[6])//訊號品質
                            {
                                case "0":
                                    txtQuality.Text = "品質太差";
                                    break;
                                case "1":
                                    txtQuality.Text = "GPS fix(SPS)";
                                    break;
                                case "2":
                                    txtQuality.Text = "DGPS fix";
                                    break;
                                case "3":
                                    txtQuality.Text = "PPS fix";
                                    break;
                                case "4":
                                    txtQuality.Text = "即時性動態測量";
                                    break;
                                case "5":
                                    txtQuality.Text = "Float RTK";
                                    break;
                                case "6":
                                    txtQuality.Text = "Estimated";
                                    break;
                                case "7":
                                    txtQuality.Text = "手動輸入模式";
                                    break;
                                case "8":
                                    txtQuality.Text = "Simulation mode";
                                    break;
                                default:
                                    txtQuality.Text = "無";
                                    break;
                            }
                            btn_upload.Enabled = true;
                        }
                        catch
                        {
                            txtLatitude.Text = "GPS 訊號不足";
                            txtLongitude.Text = "GPS 訊號不足";
                            txtQuality.Text = "無";
                            txtSTQty.Text = "0";
                            txtSeaLevel.Text = "0";
                            btn_upload.Enabled = false;
                        }
                    }
                }
            }
            else
            {
                txtLatitude.Text = "COM Port 已關閉";
                txtLongitude.Text = "COM Port 已關閉";
                txtQuality.Text = "無";
                txtSTQty.Text = "0";
                txtSeaLevel.Text = "0";
                btn_upload.Enabled = false;
            }
        }

 





 


  以上的Code就完成了GPS的訊號抓取,轉換,呈現與回報資料庫的動作了,當然,一定可以寫的更好,做更多的運用,使用更多來自衛星的訊息,而這些只是用來實作出用VS2005 C#來達成這個想法,所以看起來較簡略,其它就依各自的需求與想法去延伸.當初花了一點時間在找經緯度轉換的公式,而這也是這整個的關鍵所在,所以這一整個程式碼部份,光看GPS訊號相關,其實就從Serial Port抓訊息,轉換與呈現,原本以為很複雜,結果還好,很簡單,下篇文章就是如何運用google API來呈現所回傳的所在位置.


 


參考資料 :


GPS - NMEA sentence Information


NMEA Data


 


原始碼 :


PDA : GPS.zip


Web Service : GPSWS.zip

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  最近腦海中一直有個構想,從物流車到四川地震,兩碼子不同的事,但卻有個相同的東西,就是讓人知道你在那,先從四川地震來說起,這次部份獲救的人是透過GPS來掌握所在位置,才能順利獲救,試想,如果有一個SOS回報網站,將你目前的經緯度傳回SOS救援中心,他們即能從地圖上定位出來,並前往救援,這個並不是一個新的概念,目前中興保全的MiniBond即有此服務,但局限在使用他們即有的設備,如果能用即有的手機(當然要先含GPS的功能),透過SMS或GPRS\3G..等發送資訊回公司,相信接受度會更高,畢竟沒人喜歡身上又多背了一根狗骨頭. 而物流車為什麼也需要讓人掌握目前位置所在? 答案也很簡單,即時的掌握車輛所在,如果有客戶需要去收貨,臨時就可以調動附近的車輛去收,也不用一台一台的去確認那一台離最近.


 


  其實這種東西已經應用在很多地方了,像汽車防盜,當車子被盜時,會啟動回報系統,告知目前車輛所在,或是部份計程車行也採用,好在電話叫車時調度車輛,但這些目前都局限在"專用設備",無法用有GPS功能的PDA或手機來回報所在,所以在這個構想下,腦海中大概有個藍圖,所在位置的地圖呈現可用google map來做,所以沒有圖資及一堆的MAP相關資料及程式碼要去處理,加上一個儲存回報位置圖的資料庫,一台有GPS又可上網的裝置,只要抓到經緯度回報到Server去處理即可,所以簡單的分三個部份去處理.


 


1. PDA透過GPS抓取經緯度,回報所在位置.


 


2. Web Service接收PDA所回傳的資料並儲存.


 


3. Web呈現,抓取資料庫內的經緯度,將它用地圖呈現所在.


 


  這樣畫分下來就很簡單了,可以分動作去完成這個構想,這篇只是一個構想的開始,後續文章會再透過程式範例及相關說明的方式道出怎麼去完成它.


 


待續..

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  長久以來,一直被抱怨我所負責的ERP系統慢,為了改善這個問題,做了不少的分析及改善,雖然從改善數據上來看,整體有10%左右的改善,最高峰值有50%的改善,但使用者依然反應慢,感覺不到有改善,直到某一天幫使用者調整他的電腦才發現真正的效能問題.


 


  從使用者的工作列上看到幾個已開啟的作業,就幾個EXCEL,IE,MSN,ERP,Outlook這幾個,沒什麼特別的,但不管我做什麼,速度都很慢,索性打開工作管理員來看(光開工作管理員也等了10多秒),才發現到使用者的RAM只有256MB>,<".....而目前只剩7MB可以用,雖然裝的是windows 2000,但這也太少了吧,所以就請網管人員將使用者腳下另一台不用的電腦的RAM拔過去另一台用,至少有512MB可以用,這樣也會順了一點,使用者用了突然發現一切都變快了,沒原來那麼糟.後續跟網管私底下確認才發現,公司有近95%的電腦只有256MB,聽到差點昏倒,而且下一句是,我們也知道這是個很大的效能瓶頸,但你也知道,換這要不少錢,還要看老闆要不要.


 


  原來,我的ERP慢的黑鍋背這麼久,就算不開ERP,系統也是慢啊,使用者因為常時間在操作ERP,所以直覺的反應是ERP慢,如果使用者將查詢結果帶回,也是會用到記憶體,如果記憶體不足,只好放到page files去,效能更是慢到不行,所以使用者也一直向上反應ERP慢,而最不該的就是有人明明知道有這問題,不告知真像就算了,還把效能差的問題順勢推往ERP,在眾USER的排山倒海的反應及某些技術人員順水推舟的情況下,終於導致今日大家對我們課的不信任,很無言,我們都知道關鍵問題所在,但我們不去面對及處理,老打邊章,問題永遠還是在.


 


現在只差走路沒被吐口水,但已有人使白眼相對......一心的付出卻只剩心酸......

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  電腦發生問題時,其實大部份在事件檢視器內都有記錄在,有些問題的理清,時間點也很重要,所以在事件檢視器內就可以看到問題發生的時間及簡述,但它的描敍有時很簡略,或是知道問題了,但要怎麼解決,就不知怎麼著手,所以這時就只好去"Google"一下了,但除了Google之外,還有兩個網站也是我常在處理問題時,也會去參考一下的,一個是微軟所提供的.


 


  理論上,微軟所提供的應該會比較完整,但可能我每次發生的問題都是"特例",所以在微軟的事件和錯誤訊息中心找到的機率不高,不過找到的答案會較完整.所以另一個網站EventID.Net就比較容易找到了,只要輸入Event ID及Source,就可以進行搜尋. 不過找到的資料很多,可能還要依實際情況去找可能的回答.


 


  所以當系統出問題時,除了用搜尋引擎去找外,也是可以參考一下這兩個網站的說明. 另一個其它參考資訊有HTTP及FTP的訊息碼意義.


微軟 : 事件和錯誤訊息中心


EventID : EventID.Net


其它參考資訊 : IIS 狀態碼 (HTTP 及FTP)

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  日前說的那個"簡單加欄位"的需求,終於在上週五開完會後夭折了,因為提需求的人僅能算是Power User,還不到SA的程度,所以在系統的瞭解度上有限,無法提出如何運用現有的系統,以最快,成本最低,品質又好的方案來達成使用者的需求,其錯誤的見解與認知,當然也誤導了使用者當初原本的需求.所以當初一接到這份SA文件時,心中就有底了.


 


  會議中,其實不免讓人有點失望,大家一直繞在這份錯誤的SA資料,而乎略使用者為什麼要這東西的由來,當我們討論起我們依這份SA所提出的分析報告時,又開始打邊炮,會前不做功課是常態,會中還在狀況外是失態,而真正的使用者聽到要10個月開發,其它什麼都不想聽,直接放棄,在一旁用NB打起自己的資料,而老大則提出過去他在另一間大公司是怎麼做的,Oracle多好等,也提出聯強都可以,PCHOME也可以...等話,這樣的評估分析會加速他想換掉公司ERP系統的念頭(這時眼光看向我,似乎暗示我的飯碗不保,其實我是不擔心,如果你對目前公司的系統及架構清楚的話,這話我就瞭解要打包了,可惜你不清楚,除非你想拿公司的股價來冒險,如果清楚,你也不會說出這樣的話......).


 


  其實當下很想回老大,這些話語對團隊或公司,一點幫助也沒有,我們應該要著手想的是,有什麼樣的方案可以幫助到使用者,大家花時間來開會,不是為了聽這些話,而且聽完除了打擊士氣,其它一點幫助也沒有,直接把使用者亮在一邊,以不專業的內容來對大家說教,或許老大忘了過去在那間國際的大公司是怎麼做的,也可能忘了十多年前是怎麼做SD及SA,而之前教大家的PMP,也太久沒用而忘了,但應該不至於變為跟一般使用者差不多. 有這樣豐富的經驗,應該更瞭解到怎麼Team work.不過這樣也好,讓我自己也反省一下,我是否也有出現這樣的情況.


 


*最近看的豐田學,應該也讓公司的Leader們看一下才對~ 不過應該也是看個開言就出來發表高論吧~

jeffyeh 發表在 痞客邦 留言(0) 人氣()

記得VS2005還在手指上遊走沒多久,VS2008已經又出現了,基於好奇想一窺究竟的心理,跟公司申請安裝VS2008的開發工具,也很順利的申請成功,但這時主管問了一句 : 你要安裝那一個版本?


這時我的大腦"噹"了一聲,對哦,記得它有分很多版本,於是上網查了一下有那些版本及差異,沒想到要命哦,超多版本的.....


VS2008的所有版本如下 :



  1. Visual Web Developer 2008 Express Edition
  2. Visual Basic 2008 Express Edition
  3. Visual C# 2008 Express Edition
  4. Visual C++ 2008 Express Edition
  5. Visual Studio 2008 Standard Edition
  6. Visual Studio 2008 Professional Edition
  7. Visual Studio Team System 2008 Architecture Edition
  8. Visual Studio Team System 2008 Database Edition
  9. Visual Studio Team System 2008 Development Edition
  10. Visual Studio Team System 2008 Test Edition
  11. Visual Studio Team System 2008 Team Suite

 


版本果然要命的多,而各版間的差異也不少,這邊就不列出來了,請參考微軟的網站吧.


參考網站 : Visual Studio 2008 Product Comparison Guide


 


#2008/06/04 安裝小記


  終於拿到VS 2008 Pro的版本了,為了避免弄亂現有開發環境,想說開個VM來裝看看好了,安裝了XP Pro及SP3,再裝了VS2008 PRO,除了C++沒裝,其它都裝了,MSDN也全部安裝,結果VM當切的虛擬硬碟太小,10G竟然不夠用,才裝完OS及VS2008,只剩1百多MB可以用.....


看樣子要切個20G才夠玩~汗~~

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  最近接到一個需求,主要是公司為了因應新的公司營運規劃,系統必需要配合新的計算方式做調整,為了配合公司,我們當然全力配合開發,只不過這次所提出來的需求可真的是比美系統重寫的程度,只不過高官們無法相信,不過加個欄位,改一點商業流程就好.


 


  這個需求主要是將訂單主檔的庫別欄位移至訂單副檔去,而且原本的一張訂單只能選單一庫別變為可依每項商品去選擇不同的庫別,這樣的需求對原本的設計模式變更算很大,尤其是ERP系統又與多個系統接軌,必需保證每項系統還能順利溝通,也務求減少其它系統修改的可能性及難度,而另一個需求是多張訂單滙整到一張發票開立,原本的方式也是一對一的關係,現在要改為多對一,這下好了,資料結構似乎不能不動,而這一動將會影響到ERP系統外的所有系統,而本身ERP來說,修改的幅度與範圍將不亞於重寫,欄位的定義修改,整個流程幾乎要全部檢查,所有的判斷與驗證的程式也要,如果又異動到其它資料結構,這將會沒完沒了的結果.


 


  有時的需求,在Table上新增欄位應用或調整非重要欄位的定義,確時是可以輕易的達成,但動到核心Table及重要欄位,就不再是那麼簡單了,希望老大們能瞭解,雖然老大有過去前公司的豐富經驗,很有Sense,但這異動的簡單與否要在瞭解系統後再說,並不是我們在推拖,希望把一個小任務拉長開發期,只是這次真的動到重要的核心了.


 


  號稱有Sense的同仁,不要說我們程式沒寫好,怎麼可以程式碼寫死,不會寫靈活一點,加個欄位而已不是嗎. 透過這段話就可以知道你沒有Sense,雖然之前有工作經驗,也可確認你並不瞭解之前工作中的Know how,這只能為你感到可惜,即然現在你有機會再接觸到我們公司的Know how,那就請你先瞭解一下,再來決定要不要說這句話. 別用過去的經驗來說沒建設性的話,對團隊與專案沒半點幫助.

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  忙碌了一整年,終於可以出國放輕鬆一下了,這次出國算是有點小幸運,原本計畫是要去吳哥窟的,但因為工作上的時間無法配合出團,所以沒去,後來那邊有颱風,現在是一遍亂,而計畫中也有到大陸的九寨溝玩,可是因為我之前常年在大陸工作,想去其它國家看看,所以也沒去,沒想到發生了8級世紀大地震. 最後很剛好的,工作能配合出團時間,就跑到泰國去玩囉.


 


  因為是下午1點半的飛機,到泰國的時間也差不多要吃晚餐了,然而在飯店的門口竟然發現到有一頭大象咧,一時興起就馬上跑過去跟大象拍了一張照片,這麼近看大象,還真是壯觀.



看看大象的腳印,還真是大啊.



吃完飯後,就準備去看表演囉,在看表演前發現到靚女,二話不說,跑過去合拍了一張.



耶~有人在彈琴咧,借一把來玩玩吧,只不過我的黃金右手似乎只會抓滑鼠跟打鍵盤. 彈琴還真的不會.



玩了一下午,晚上跑去飯店附近的7-11買了一碗泰國的泡麵來吃,果然,還是台灣的好吃.



水上市場算是一個很特別的體驗,坐船逛街,看這一船的人,買東西殺價可用心的咧,就算語言不通,用計算機也是可以殺價的啦.



  隔天一早就跑到PATAYA去玩,拖曳傘/香蕉船是一定要玩的啦,看到漂亮的沙灘,躺下來享受難得的日光浴,平時IT人都是在辦公室裡,要晒到太陽還真不容易,只是沒想到,我又被兩個妹妹用沙子給埋起來了,推沙是OK啦,不過也推好看一點,怎麼弄個大小奶了.....



在逛shopping Mall時,看到熟悉的麥當勞叔叔,耶~~~它是合掌的咧,果然是入境隨俗啊,你也來個三碗豬腳啊.



  這天在旋轉餐廳吃飯,而這個餐廳有個特色,當然不是它會旋轉(都叫旋轉餐廳了,旋轉是正常的),在屋頂上有幾條線連到地面上去,這可不是固定什麼大樓的,而是刺激的高空自由滑降,可怕的咧,樓高170M,大約56樓左右的高度,不過這有三個玩法,一是簡單級的,坐著像摩天輪的車箱下去,可以坐6個吧,二是普通級的,有個兩人的籠子,但必需用站的,無法用坐的,再來就是有難度的,上面只有一根桿子可以抓,坐上去時,雙腳發麻.



  我覺得最可怕的時候是在那排隊等上去,坐在牆邊時,手心直冒汗,一直在想我的安全索有沒有綁好,下來後就還好了,所以放心的放雙手滑下來.



下來後,非常後悔剛剛放雙手,在未端會有減速的地方,突然間....啊~~~~~夾到了啦~~~



不管蛋蛋痛不痛,還是挑戰成功的啦,照片上又有一個人滑下來了~



之後去騎ATV及大象,看到一隻猴子掛在那玩,就突然想到剛剛玩的高空滑降,猴兄,果然還是你滑的好啊.



  玩了一上午,晚上去看人妖秀,有些人妖還真的是漂亮的沒話說,看表弟把手放到她的胸上,可是臉紅到不行的咧,不過這天最幸運的也是他,小表弟似乎很得那群"妹妹"的緣,一直被拉出去,玩接龍跳舞時,可是車頭燈從頭抓到尾的咧,單身真好~~



中場休息時間我們跑去找獵物拍照,妹妹也可是很勇敢的把手放上去,只是沒想到臉會這麼紅.



老婆也不干人後的,也跑去拍了一張,注意看,手伸進去囉,哦~~~~



正在想說,我可能沒得玩,老婆突然說 : 去,快點去跟她拍~


 


真是感動咧,沒想到我也可以拍,我都還沒準備好,她一時把我的手拉到那邊去,把臉貼過來,我還真是嚇一跳,拿相機的可是我老婆咧.....



  全場跑了一圈,找到一個真的很漂亮的,馬上跑過去找她拍了一張,看我笑的燦爛的,我的右手還被她拉進去,不過心裡想著今晚不知道會不會被老婆K.....



隔天去玉彿室,這建築看起來真的很怪,上半部是泰式風格,下半部卻是歐式的,而這也是重建過後的,之前的建築風格是全泰式的,從解說員口中聽到一個有趣的故事,當初在建這個建築時,也有不少人反對,怎麼拆掉傳統的泰式建築,建了一個歐式的,結果泰國的五世皇很聰明的在建築頂上採用泰式風格,並告知人民,泰國還是凌駕於歐洲之上!


 


不過去的時間不是很好,因為五世皇的姐姐剛過世,不能進去參觀.



看到這個建築物了嗎? 裡面可是有舍利子的哦~~



 


  泰國的六天五夜,真的玩的很開心,很多的趣事都還在腦海裡,很多的年平第一次體驗,無法一一寫出來,不過出來走走充充電是好的,在公司沒有機會用到的英文,在這旅程中倒是用了不少,下次再用到英文,可能是下次出國的時候了,而這次團中有6位年紀上了60左右了吧,有些活動無法參加,只能在一邊看,後來在飛機上看到了一部電影"一路玩到掛",說真的,感觸很深,念完書,服完兵役後是最自由的,有充份的自我主導權,而當有了家庭與小孩後,不再能想去那就去那,開始要照顧小孩長大,供他吃用,漸漸的忘却自己原本想要去完成的心願,當小孩長大可以獨立後,發現自己已經一把年紀了,健康也可能在這段時間打壞了,無法再像年輕時那樣的跑跳,也無法再去繼續完成先前未完成的心願.收假回公司後,同事的第一句就是"出國!過太爽!",或許吧,我們享受快樂與生活的想法不同,充份的休息後,繼續為下次旅程努力工作去.

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  PCI MZK-W04N 也使用一段時間了,使用上是還OK,至少家人開P2P在用,我還不至於連網頁都開不起來,QoS的功能也是當初選擇它的原因,而韌體的更新卻是我最嘔的地方,原廠出廠的版本是1.04,後來就更新到1.06,到這版本都還正常,但再往上升級時,就出問題了,更到1.08時,QoS的設定頁面就顯示異常,原本可以下拉的選項都不見了,無法新增或修改QoS的設定,想說是不是我沒更新好,再重更一次也還是一樣,所以只好退回到1.06版使用,但在2008/4/14又出了1.09版,想說是否修正了1.08的QoS問題,所以就更新到1.09,結果很不幸的,QoS還是有一樣的問題,當下就寫信給PCI的客服反應這個問題,也確認這是個Bug,等到至今仍未有新的版本出現,在Router新產品推出的速度變快,汱舊換新的速度愈來愈快,不知道它會不會還沒出新版就走入倉庫.


 



 


  另一台PCI的NAS 01G也是我買到的另一台籤王,NAS開機後就沒要它做什麼動作,時間一久,竟然會反應變慢,似乎很令人不解它到底在忙些什麼? 硬碟也沒在閃啊,內建的P2P功能也沒開,怎麼會這樣? 只好用IT人員遇到這種問題的一千零一招:重開機!


 


  重開後,設定值全部不見了,現在是怎麼樣,全部回到預設值,只好一個一個的再重設回來,再重開機確認,還好,設定值還在,就把它給關機了.次日因為要存取裡面的檔案,所以將它開機,結果.....你老師卡好......又回到預設值了.


 


  因此,這台NAS就不再做網路硬碟使用,NAS不做網路硬碟那還能做什麼?那更新韌體有用嗎? 3.00試了,沒效,3.33沒效又好笑,為什麼會好笑咧? 原本的問題沒解決就很慘了,加了DLNA及iTunes的服務讓它更忙了,它掛的速度變快了,所以又退回到舊版的韌體,因為它用久會變慢,重開會回預設值的問題,現在已經把它關起來不用了,改買一台萬元內的精簡PC來做NAS,雖然比較大台及耗電,但功能/效能及穩定性都比它好多了,NAS如果在效能及穩定性都不好的話,那它怎麼勝任它的任務,不是光省電就好,不能運作的系統,那用的電也是浪費,所以換個角度看,並不省電,所以這台小NAS真的只能算是玩具.


jeffyeh 發表在 痞客邦 留言(0) 人氣()

  最近親友在問說,要怎麼去下載線上影音分享網站的影片,只看而不下載的我,當下無法立即回答,所以就去搜尋了一番,是找到很多下載的軟體,不過有個下載方式比較有意思的,就是不用下載安裝軟體,就可以直接下載了,這個方法很簡單.


 


首先,在Youtube找一個自己想要下載的影片 :


1


 


  接下來,在網址的地方做點小更改,把原本的http://www.youtube.com/watch?v=erDZAQuE51A在youtube的前面加一個link,所以就會變為http://www.linkyoutube.com/watch?v=erDZAQuE51A


2


就可以直接點Download .flv File下載回來看了.


 


  但在試的過程中發現到,好像只有美國的影片可以直接這樣做,台灣的影片就沒辨法這樣網址加LINK就可以下載了,不過,還是可以下載,在Home的那個頁面選擇要下載的影音分享平台.


3


 


接下來輸入Youtube的影片網址到URL去. 並按Download.


4


 


就可以下載囉~


5 


 


  記得前不久在CodeProject也有看到有位仁兄用C#寫了一個下載的軟體,還不錯玩,功能算是很完整,還有SourceCode,有興趣的人,可以參考看看~


CodeProject 參考網站 : MyDownload

jeffyeh 發表在 痞客邦 留言(0) 人氣()



老婆~


 


妳的生日又要到了~


 


雖然平時的我很摳門,很少帶妳逛街買衣服,也很少帶妳去吃好吃的~


 


但去年送妳的生日禮物是日本旅遊~


 


我們一起去了黑部立山看雪牆玩雪~


 


而且這也是你生平第一次玩雪~


 


而今年妳的生日,則是送妳泰國旅遊~


 


這次旅途,你也將會玩到生平的第一次水上活動,還有騎ATV,大象..等.


 


因為我賺的不多,所以只好平時省吃檢用,才有辦法給妳這份生日禮物~


 


而這也是要彼此的配合,才做的到的~


 


所以在這特別的日子裡,祝妳生日快樂~


 


 


幕後OS :


 


今年妳送我Wii的遊戲當生日禮物我是很開心啦,而且還是第一神拳遊戲的說~


 


但我們一直無法一起玩~


 


因為妳只是用A4印了幾張第一神拳的遊戲特寫給我~


 


我只能看著這幾張紙,在腦海中想像著怎麼玩它~


 


但是,老婆~~


 


我不知道第一關是什麼,我想像不出來~因為簡介上沒寫~


 


但我會去找攻略本,我一定會破關的~


 


耶.....少了主機....沒有主機要怎麼玩.....


我珍貴的生日禮物就是這些....


jeffyeh 發表在 痞客邦 留言(0) 人氣()

  日前因為遺失了憑證,所以上網重新申請,由於申請重新下載必需電話與客服核對資料後,才可以下載,但很不巧,我的電腦下載了很多次,老是失敗,所以每次重新下載都要打電話過去,我也看了網站上的說明,依說明設定了安全性,還是下載不了,最後忍不住了,就問客服,你們的下載憑證建議系統環境為何,我怎麼老是下載不下來,而且我已依你們網站上的說明去設定了,還是不行,等了一會,客服沒說什麼,我就主動的告知,我的是XP HE SP2,IE7,所有的安全性更新全更了,客服聽到這後,請改用IE6下載憑證看看,聽到這,我心涼了一半,我要移除IE7! IE7這東西很難移的乾淨,而且安全性更新全上了,不是那麼好移,沒弄好,系統可能不穩,此時客服人員就說,可以找另一台電腦來試試啊,我心又OOXX了一次,沒錯,我是還有另一台電腦,不過也是IE7. 看樣子,我不用IE6試看看,客服似乎也無法給我第二個答案,只好到公司試試,因為剛好有一台是Win2000的系統,IE7上不去,所以只能用IE6.


 


  隔日到公司後,下載前確認一下所有的設定已跟網站上的安全設定一致了,就開始下載,結果也很順利的拿到憑證,這結論似乎告訴了我,這個網站是否有做了什麼樣的動作被IE7檔下來或不相容的地方,由於下載憑證時,它會Create一個目錄來存放檔案,回家看了一下當初下載失敗的電腦,目錄都有產生啊,就是沒檔案,因為每次重新下載憑證都要打電話核對資料,所以沒辦法去試出為什麼IE7不能下載,但能確定的是明年憑證到期,屆時我又要去找一台IE6來下載了. (下載失敗的話,網頁是會丟出訊息,但那訊息是他們才知道的訊息代號,根本無法從訊息中得知問題點,而且是一失敗就鎖,沒得重試,必需再打電話給客服,核對好資料後,才會再解鎖後重新下載)


 


雖然IE7的問題無法找到答案,但網站上的下載教學,其實也有點讓人無言,見下圖:


image


二進位和指令碼行為 : 啟用


下載未簽署的ActiveX控制項 : 啟用


下載簽名的ActiveX控制項 : 啟用


封鎖快顯 : 關閉


 


  開啟這些,在它個的網站遊走,可能還很安全,但如果依這設定到其它網站去,自然就成為一個腳開開,歡迎進來的漏洞,而有多少使用者有這種Sense,因為這個安全性的關係,下載完憑證後,要記得再把這些設定值改回來,我相信大多數的使用者都是下載回來就好了,剛剛那些異動就不管它,而且網站教學也沒說什麼,只說要打開才能下載,為了方便下次使用,就不去改回那些設定了.


 


  這個問題好像不是只有我遇到,最近在拜讀黑暗執行緒的文章,剛好也看到一篇與我遇到的問題一樣的,參考:讓我們再創台灣的資安奇蹟。啊~~~ 福氣啦!! . (這也是促始我寫出這篇不愉快的回憶的原因),雖然後續新出來的作業系統或IE的安全性都提升了,但有些網站如果要能順利執行,又要使用者再把某些安全性功能關閉才能使用,例如Hinet的WebMail也要開啟"允許程式碼片段"image,安全性自然也就打了折扣. 只能說,你真的要用那個服務,你也只能照實去設,不然你就不要用~(或許下次要來試試FireFox,我可不想又要再打電話給客服,請他們幫我解鎖....)


 


Developer多加加油吧,盡量少請使用者降低系統的安全性,來配合你的程式運作~

jeffyeh 發表在 痞客邦 留言(0) 人氣()

啊~痛~~~什麼東西刺到我的腳了~~


 


老婆聽到我這麼一叫,果然很關心我,要我先坐下,把腳抬起來給他看~


 


可能刺真的很小,找了老半天都看不到.


 


於是老婆就用手指壓的方式,看我會不會痛,就可以知道是那了.


 


壓啊壓的~~


 


痛~~~~~果然找到了~


 


正在等老婆把它拔出來時~


 


突然~~老婆說了一句~~


 


我看不到它....


 


剛剛不小心把整根壓進去了.......

jeffyeh 發表在 痞客邦 留言(0) 人氣()