前言
一個多月之前已經送出了離職申請,好在上司都已經準許了,過幾天就辦理手續了,在此感謝上司的栽培與挽留,感謝各位同僚在工作中的給我的幫助,離開這個團隊确實有一些不舍,不為别的,隻因為這個團隊的氣氛特别好、同僚之間相處融洽、沒有那麼多的勾心鬥角,是以幹活兒也幹的有勁,上班的時候可以使用網絡、可以上QQ、可以上各種論壇、可以看新聞等等,我個人很喜歡這種工作方式,作為一個IT人員,如果閉門造車的話,那導緻的後果就是被淘汰;新技術的不斷出現,如果不自己多查閱資料多泡論壇來學習的話,難道每出現一個新技術都去花錢找教育訓練機構來學習嗎?正因為有這種工作環境,是以在過去一年中我學到了很多知識,有的是通過網際網路學習到的、有的是通過同僚學習到的, 不管通過什麼方式學到的,學到了就是自己的了,總有用的上的地方.
過去一年的總結
在過去一年的時間裡,跟着現在這家公司(簡稱B公司)的上司和同僚學到很多東西,我覺得在這一年中主要是從技術與溝通方面得到了提高:
1.技術方面
1.1之前一直做用戶端的開發,是以對那些腳本語言用的比較少,在這裡加深了JQuery,JS的使用。
1.2對Ajax的異步使用多了一些了解。
1.3學會了如何使用SQL監控,學會了一些優化SQL語句的方法,當然這都是在實際項目中積累的經驗,比較寶貴。
1.4學會了使用用戶端與網頁端的互相調用、嵌套來開發應用系統。
1.5了解了跨域請求的處理方法。
2.溝通方面
2.1搞IT的其實是一個服務角色,是以與使用者溝通的時候要找到自己的定位。
2.2不管使用者的要求是否合理,溝通的時候都不要充滿火藥味兒。
2.3互相尊重很重要,尊重對方也會使對方尊重自己。
為什麼離開
來到B公司之前,在一家上市集團公司(簡稱A公司)做公司内部的應用系統開發,整整服務了3年,到目前為止,離開A公司已經一年十個月了,在這期間跟之前的上司一直還是有聯系,在我進入到B公司之後,之前A公司的上司找到了我,叫我利用業餘時間幫忙開發一套應用系統,我聽了二話沒說就答應了,為什麼這麼爽快呢?有如下幾個原因:
1.當時我離開的比較匆忙,可能交接的不是那麼仔細,這一點我一直覺得過意不去。
2.在我離開A公司的前一天,也就是周四(因為上司是HK那邊的,每周四下午都會回去HK),上司去到我辦公的地方對我說:“xxx,那我走了...”,後面的我就沒聽清楚了,因為當時有點受寵若驚的感覺,他一個進階上司,完全可以不用把我這個小喽啰當回事兒的,就算是打招呼也應該是我去給他打招呼才對,這個事情讓我一直心存感激,我覺得在當時來說他很給我面子了。
3.在給我辦離職事宜上,很多細節方面上司都為我考慮到了,比如說我離開的突然,按照人事部要求的話時間達不到,提前離開的話需要扣工資,但是他給我把簽批日期提前了,雖然是一些小事情,但是讓人心裡暖暖的。
上面貌似扯了很多廢話,言歸正傳,我的原意是在我能力範圍内免費幫忙開發,因為我本身是搞這一行的,技術不是問題,就是多花點時間而已,但是項目完成之後上司還是給了我意想不到的報酬,在這裡要感謝一下他們的照顧,當然這個項目也是幾經波折才完成,畢竟我是業餘的,不在同一個地方,溝通很不友善(說實話,通過這一次我也學到了很多)。
在這期間,上司跟我談話幾次,目的是希望我能回去工作;因為之前有很多項目都是我跟進的,上司可能是考慮到我比較熟悉一點吧,我考慮了很久,最終還是答應了,是以才向B公司這邊提出離開的要求;說實話,在這之前我從沒想過我還會回去,真的沒想到,真的是世事難料...
回去之後的工作目标
1.盡量統一開發語言,之前的項目存在多種開發語言,比如VB6,C++,VFP,ASP,Delphi,C#,至今還有DOS作業系統的程式,何必呢?難道要我精通各種開發語言嗎?或者說一門開發語言找一個對應的開發者嗎?該砍的砍、該更新的更新,更新的話也包括硬體也需要适當的更新,好的應用系統必須有好的硬體支援,不然不管是誰都玩不下去。
2.後續的項目以Web結構為主,便于更新;用戶端為輔,涉及到跟硬體通信的功能采用用戶端與Web結合來完成。
3.将衆多的小程式內建到一個架構中,不要搞的那麼分散(目前存在很多的小程式、小更新檔),不要再不停的“打更新檔”。
4.搭建一個好的源代碼管理平台,不管是TFS還是SVN都可以,確定源代碼安全管理。
最近一個Web應用程式
我這個人就是這樣,看見别人好的東西就想學習過來,剛來到B公司的時候,看見公司用的很多功能都比較高大上,我的學習方法是這樣的:先了解這些高大上的功能是如何實作的,不懂就請教前輩,這裡又得感謝一下我的師傅了,感謝他不吝賜教、悉心指導;了解之後就自己建立一個項目試着搞一個Demo出來,在這個過程中遇到不懂的就再次請教别人,直到自己搞懂為止,那麼到了這個時候這東西已經“屬于”我自己的了,我已經裝進腦袋裡面去了,是以從進入B公司開始我就沒有停止過學習。不管學到什麼知識,一定要運用起來才行,隻有在實際項目中才能學到更多、才能找出自己的不足,是以下面的項目就是我剛進入B公司就開始着手開發的,借鑒了一些前輩們的東西,但不是直接COPY,隻有圖檔和CSS樣式是用的原來的,因為本人美工技術實在太差,想PS出來一個LOGO圖檔就搞了很多次,PS出來的結果連自己看着就不爽,是以就不強求了,引用了之前的一些圖檔和樣式,這裡值得說明的是:現有公司的項目和資料庫結構我們開發人員都有,這也是上司準許的,因為我們有時候會在家裡辦公,是以會将資料庫結構和程式複制在本地以便建立真實的開發環境和調試環境。
除了圖檔以外其它的我都按照我自己的設計開發的,包括資料庫設計和項目架構設計,後續我會抽時間将這個項目繼續完善,主要是針對制造行業,現在隻有幾個基礎的功能,也可以說是制造行業裡面基本上都會用到的幾個功能,比如條碼管控與列印之類的,根據實際的需求可以靈活擴充,以下是部分截圖:

描述:
條碼規則就是用來控制條碼的格式,對于現在的工廠來說,條碼化管控是最常見的,那麼不同的産品有不同的條碼格式要求,每一個客戶也都有自己的特殊要求,是以這個條碼規則也是非常重要的,在這之前我的做法如下:
在資料庫中根據目前年月日+流水号來自動生成,這樣本來也能解決問題,但是如果需要擴充的時候就歇菜了,隻要客戶要求條碼格式稍微改變一下格式,那麼我們需要改變的東西是相當的多,甚至可能是以帶來很多嚴重的問題,因為格式已經固定不能靈活變更,是以幾乎沒有擴充的可能性。
鑒于此,現在的做法如下:
定義一個條碼規則,包含條碼的計算進制、需要屏蔽的字母或字元、條碼字首、條碼字尾、條碼總長度、流水号長度等等參數,在生成條碼的時候選擇此規則即可,如果有新的格式要求,那隻需要針對新的格式要求新增一個條碼規則即可,對原有的資料結構完全沒有影響,靈活多變、擴充容易!
描述:
生成條碼屬于一個比較關鍵的功能,有時候資料量可能比較大,例如某一個工單的數量是20000,那也就是說使用者生成條碼的時候一次性就要在資料庫産生20000筆記錄,根據我個人的經驗來說,這種事物不能直接交由使用者來操作,防止資料庫被拖死;我的做法是不管使用者送出多少數量,在伺服器中将使用者送出的請求儲存起來,伺服器定時去處理這些請求,每次按照時間排序處理最先送出的一筆請求,如果使用者的請求中出現不合法的資料,則伺服器直接将該請求駁回并通知到使用者,反之則完成相關的操作,這樣一來可以避免使用者直接操作大量的資料而導緻系統變得緩慢或者資料庫出現死鎖之類的問題。
工藝路線方面這裡值得說一下,采用了gooflow設計,當然gooflow隻有UI部分,背景都是另外設計的。
支援多節點工藝路線,這裡需要設定條件,例如:目前我們前面有兩條路,路線A通向北京,路線B通向上海,我們現在站在路口選擇具體走哪一條路?這個時候就需要條件了,我們現在的目的是去北京看故宮,那很顯然已經比對到了條件,說明我們應該走路線A;系統會根據具體的情況來尋找應該走哪一條線,這個邏輯比較複雜。
描述:
動态報表,可以根據不同的條件動态生成控件,實作查詢功能,這樣可以省掉很多的報表,簡單的查詢功能用這個足以。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
namespace MES
{
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
public WebBrowser Browser { get { return this.webBrowser1; } }
private void FrmMain_Load(object sender, EventArgs e)
{
string ConfigPath = Application.StartupPath + "\\config.ini";
if (!System.IO.File.Exists(ConfigPath))
{
MessageBox.Show("缺少配置檔案,系統無法啟動,請聯系管理者!", "溫馨提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
Application.Exit();
GC.Collect();
return;
}
MES.Common.Global.ApiUrl = MES.Common.IniHelper.GetConfigValue("ApiUrl");
MES.Common.Global.serverPath = MES.Common.IniHelper.GetConfigValue("ServerPath");
webBrowser1.ObjectForScripting = this;
webBrowser1.Navigate(MES.Common.Global.serverPath);
}
public void Print_ZPL(string Content)
{
System.Drawing.Printing.PrintDocument p = new System.Drawing.Printing.PrintDocument();
string DefaultPrint = p.PrinterSettings.DefaultPageSettings.PrinterSettings.PrinterName;
MES.Common.PrintHelper.PrintLabel(DefaultPrint, Content);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.ScriptErrorsSuppressed = true; //禁用腳本調試,屏蔽腳本錯誤提示框
}
/// <summary>
/// 擷取稱重機的重量
/// </summary>
/// <param name="Com">通信COM口</param>
/// <param name="CheckCount">循環次數</param>
/// <returns></returns>
public string GetWeigh(string Com,int CheckCount)
{
return MES.Common.WeighHelper.GetWeighData(Com, CheckCount);
}
/// <summary>
/// 擷取本地計算機上面的COM清單
/// </summary>
/// <returns></returns>
public string GetComList()
{
string str = "";
List<string> list= MES.Common.WeighHelper.GetComList();
for (int i = 0; i < list.Count; i++)
{
str += list[i].ToString() + ",";
}
return str;
}
}
}
至于如何回調用戶端的函數,可以參考這篇文章:了解JavaScript回調函數
如果您覺得文章還過得去,請幫忙頂一下,您的支援是我進步的動力,謝謝!!
作者:Allen Chen無影
出處:http://www.cnblogs.com/allen0118/
郵箱:[email protected] 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.