軟體開發(軟件開發)

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

室內設計、裝潢、窗簾報價估算軟體

網智數位主要提供套裝及客製化的軟體系統解決方案,針對室內設計師、木工、裝潢業產業,量身訂做客製化的軟體,達成客製化、智慧化及網路化的商用軟體。

商用軟體-客製化設計

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

IOT 物聯網-系統開發

根據客戶實際狀況,結合雲端與載具進行客製化物聯網IOT導入與軟體開發

雲端VPS虛擬主機租用

我們的雲端VPS虛擬主機是採用雲端(虛擬化)技術所開發之全新雲端伺服器服務,可以選擇多種作業系統(Windows、Linux等),客戶可載入自訂的應用環境,執行自己所要提供的網路服務,我們的雲端服務可為您的網站提供最完美的解決方案。

ERP軟體客製化導入

ERP軟體客製化導入,室內設計、營造業、裝潢、木作工程、系統櫃工程、會計系統,全面提升公司管理營運效率。

搜尋引擎最佳化SEO

搜尋引擎最佳化(SEO)不僅能提高網站在搜尋結果的排名,更能帶來大量對我們產品或服務真正有需求的訪客。SEO 最棒的特質之一就是不像廣告一樣亂槍打鳥而導致用戶的反感,反而更能提升點閱率跟成交率喔。

服務宗旨

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

我們的成立宗旨就是要以最猛的IT技術讓這個世界更Smart,在我們貫徹我們裡想的同時,我們希望可以把我們所開發的系統帶給台灣的中小企業,除了要推薦好的東西之外,我們也希望做點改變,所以我們的第一目標就是要使用最好用的系統再加上您寶貴的創意,不僅僅可以節省你大量的荷包,還可以有一個像樣的網站。我們可以幫你做的有

企業管理
  • 策略管理
  • 目標管理
  • 行銷管理
  • 財會管理
  • ERP導入
  • 企業流程自訂
資訊管理
  • 網站架設
  • 虛擬化/雲端架設
  • 主機代管
  • 私有雲建制與導入
軟體開發
  • UML設計
  • 版本控管
  • 企業軟體開發
  • APP開發
  • 網頁設計
資訊安全
  • 網頁弱點掃描
  • 主機弱點掃描
  • 木馬檢測
  • 資安鑑識
  • 設計網路架構
  • 資安監控
行銷
  • 關鍵字SEO
  • 社群網路行銷
  • 部落格行銷
  • FaceBook 粉絲團
其他
  • 協助企業申請Google Email
好玩工具開發

講出你的創意吧!沒有甚麼是資訊辦不到的

顯示具有 程序開發 標籤的文章。 顯示所有文章
顯示具有 程序開發 標籤的文章。 顯示所有文章

2018年7月25日 星期三

Xamarin 跨平台程式開發-訊息傳遞 - 軟體開發 教學

   在 Xamarin 開發 IOS、Android、UWP APP時,常常會遇到訊息接受與訊息傳遞,那麼這邊我想簡單示範如何在 Xamarin 實作一個訂閱訊息程式開發技巧。

Android 執行結果畫面
螢幕快照 2018-07-25 下午10.27.43螢幕快照 2018-07-25 下午10.28.49螢幕快照 2018-07-25 下午10.29.10


   Xamarin 透過 MessagingCenter 這個靜態類別來支援訂閱/通知訊息,這個類別主要需要知道三個 Methods ,分別為 Subscribe<TSender, TArgs> 與 Send<TSender, TArgs>、Unsubscribe<TSender, TArgs>。
Subscribe<TSender, TArgs> 方法用來訂閱訊息,當有訊息接受到時,可以通知使用者,例如出現對話訊息、畫面顯示訊息。
Send<TSender, TArgs> 方法用來通知訊息,已告知那些訂閱訊息者。
Unsubscribe<TSender, TArgs> 原先進行訂閱訊息接受,現在進行取消訂閱,後續如果有訊息通知,都不進行接受訊息。


程式範例示範
image

public class MainPageViewModel
    {
        public ObservableCollection<string> Greetings { get; set; }


        public MainPageViewModel ()
         {
            Greetings = new ObservableCollection<string> ();


           MessagingCenter.Subscribe<MainPage> (this, "哈嘍", (sender) => {
                Greetings.Add("哈嘍");
             });


            MessagingCenter.Subscribe<MainPage, string> (this, "哈嘍", (sender, arg) => {
                Greetings.Add("哈嘍 " + arg);
            });

        }
    }

在上面程式範例 宣告 一個 MainPageViewModel Class,這個作為 ViewModel 用途,在建構式裡實作訂閱服務,這個機制可以減少程式物件耦合度。


下面這行程式碼,主要是用於實作一個名叫 “哈嘍”的訂閱服務  MessagingCenter.Subscribe<MainPage> (this, "哈嘍", (sender) => {  Greetings.Add("哈嘍"); });





在底下的主程式 MainPage ,實作訂閱通知服務,主要程式邏輯,我透過註解程式說明

public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();


            //這邊我綁定一個ViewModel
            BindingContext = new MainPageViewModel();


            //宣告一個按鈕物件,當點選按鈕時,觸發一個發送訊息
            var button1 = new Button { Text = "Say 哈嘍" };
            button1.Clicked += (sender, e) =>
            {
                MessagingCenter.Send<MainPage>(this, "哈嘍");
            };


            //宣告一個按鈕物件,當點選按鈕時,觸發一個發送訊息,並傳遞內容參數,傳遞的內容是 Allen 

            var button2 = new Button { Text = "Say Hi to Allen" };
            button2.Clicked += (sender, e) =>
            {
                MessagingCenter.Send<MainPage, string>(this, "哈嘍", "Allen");
            };


            //宣告一個按鈕物件,當點選按鈕時,觸發一個取消訂閱服務,並取消對話視窗訊息!
            var button3 = new Button { Text = "取消訂閱服務,並取消對話視窗訊息!" };
            button3.Clicked += (sender, e) =>
            {
                MessagingCenter.Unsubscribe<MainPage, string>(this, "哈嘍");
                 DisplayAlert("取消訂閱服務",
                    "This page has stopped listening, so no more alerts; however the ViewModel is still receiving messages.",
                    "OK");
             };


            //訂閱服務(背後的ViewModel還是仍然保持本身實作的訂閱服務),並出現對話視窗訊息
            MessagingCenter.Subscribe<MainPage, string>(this, "哈嘍", (sender, arg) =>
            {
                DisplayAlert("訊息已接受", "參數訊息 為 " + arg, "OK");
            });

            //綁定接受到的訂閱訊息
            var listView = new ListView();
             listView.SetBinding(ListView.ItemsSourceProperty, "Greetings");

            //放置物件內容
            Content = new StackLayout
             {
                Padding = new Thickness(0, 20, 0, 0),
                Children = { button1, button2, button3, listView }
            };
        }




在 iPhone X 執行畫面如下
螢幕快照 2018-07-25 下午10.20.29螢幕快照 2018-07-25 下午10.20.46






網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
my_qrcode_1519621481105

2017年7月8日 星期六

在.Net 透過 Parallel 類別操控多任務平行作業(一)【軟體開發、軟體設計、系統開發、客製化軟體】

   此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Parallel 類別支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。


   在並行任務與建立一個新的執行緒過程來執行一個非同步作業的操作是非常相似地,但是在這邊的並行任務卻是可以更好地發揮多個CPU處理器或者多核心處理器的強大優勢,進而充分地利用CPU的可用資源來執行非同步作業任務,更方便地是,在 .Net 並行任務的操作過程被封裝地很好,身為程式開發人員只需要調用呼叫對應的類別與相關成員方法就可以很輕鬆地建立與執行並行任務了,至於任務是在那個CPU處理器執行,操作系統的底層會自動進行調用配置。


    在這邊我使用一個 WPF 的專案範例進行講解,來說明如何利用 .Net 的 Parallel 類別執行非同步作業。


步驟一 :
在 Visual Studio 2017 建立一個 WPF 專案,
wpf



步驟二:
在 主要的 MainWindow.xaml 畫面,用xaml 語法宣告了一下界面結果


2017-07-08_17-12-48


主要是有 提供 3 個讓使用者輸入整數值的 TextBox , 以及對應 3 個顯示執行結果的 TextBlock ,還有一個 Button (執行 Parallel 運算平行任務)的按鈕。


部分xaml 語法如下:
xaml


步驟三:
在 Button 的 Clieck 事件,進行撰寫主要的核心程式碼邏輯….
(Code)
private void OnClick(object sender, RoutedEventArgs e)
{
    int num1 = default(int);
    if (!int.TryParse(txtInput1.Text, out num1))
    {
        MessageBox.Show("輸入第一個正整數值:");
        return;
    }
    int num2 = default(int);
    if (!int.TryParse(txtInput2.Text, out num2))
    {
        MessageBox.Show("輸入第二個正整數值:");
        return;
    }
    int num3 = default(int);
    if (!int.TryParse(txtInput3.Text, out num3))
    {
        MessageBox.Show("輸入第三個正整數值:");
        return;
     }


    //宣告第一個並行作業的委派實體
    Action act1 = () =>
        {
             int sum = 0;
            for (int x = 1; x <= num1; x++)
            {
                sum += x;
            }


            //顯示執行結果
            this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run1.Text = sum.ToString()));
        };


    //宣告第二個並行作業的委派實體
    Action act2 = () =>
    {
        int sum = 0;
        for (int x = 1; x <= num2; x++)
        {
            sum += x;
        }


        //顯示執行結果
        this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run2.Text = sum.ToString()));
     };


    //宣告第三個並行作業的委派實體
    Action act3 = () =>
    {
         int sum = 0;
        for (int x = 1; x <= num3; x++)
        {
            sum += x;
        }


        //顯示執行結果
        this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run3.Text = sum.ToString()));
    };



    //使用 Parallel 類別來執行 並行任務
    Parallel.Invoke(act1, act2, act3);


}



程式碼重點講解:
1.這邊我主要用了 3 個 Action 的委派實體,分別用來進行整數的累加運算任務。
2.使用了 Dispatcher.BeginInvoke() 方法,和Windows Form 專案一樣,WPF 在平行作業模式下,也分為主UI的主執行緒,和多個任務的各別執行緒,而在任務的執行緒要改變主執行緒控管的主畫面下,必須透過 Dispatcher.BeginInvoke ,在不會發生一個 UnauthorizedAccessException 例外錯誤。
3.也是最重要的程式碼邏輯,利用 Parallel類別的 Invoke 方法呼叫,分別傳入多個委派實體,在這邊我宣告了3個 Action 委派實體,我一次傳入 Parallel.Invoke(act1,act2,act3), 這樣程式就自動進行3個平行作業任務了。





參考文章
C#多工作業與平行處理技術講解
1.透過 Thread 類別撰寫多執行緒多工作業。
2.透過 Delegate 委託支援的方法,撰寫非同步任務。
3-1.透過 Parallel 類別操控多任務平行作業(一)。
3-2. 透過 Parallel 類別操控多任務平行作業(二)。
4.使用 Task 自行控制非同步任務作業。
5.在非同步作業時,如何取消非同步任務。
6.多執行緒多任務存取相同變數,但卻各自隔離保留各自任務的值。
7.非同步存取變數的問題。
8.非同步資源鎖定解決方式。





網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年7月6日 星期四

透過 Delegate 委託支援的方法,撰寫非同步任務(軟體開發、客製化軟體、系統設計)

      此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Delegate 委託支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。

       在.Net 平台的委派類型(Delegate)自身就可以很容易地使用非同步作業,因為只要是委派(Delegate)類型都一點有 BeginInvoke 以及對應的 EndInvoke() 這 2 個非同步操作方法,所以我們就可以非常容易地透過 委派實體 直接 使用非同步任務。
      在這邊我一樣使用 Windows Form 來做示範(因為比較單純可以講解程式技巧,所以不要問我為何不用 ASP.NET MVC),整個實作範例畫面為如下圖:


繪圖



步驟1 :
在 Visual Studio 新增一個 Windows Form 專案,我們準備拖拉幾個控制箱來達成 主要結果畫面,分別有
Label 控制箱 (Text = 基數)、Button 按鈕控制箱(Text = 進行計算作業 , Name = btnDelegateInvoke)、ProgressBar控制箱(用於顯示非同步作業的進度)、TextBox 文字方塊(Name = txtResult , 用於顯示執行計算結果)。


步驟 2:
在 Button 控制箱 (name = btnDelegateInvoke)的 Click 事件,撰寫主要核心代碼:
private void btnDelegateInvoke_Click(object sender, EventArgs e)
{
    int baseNum = default(int);
    if (!int.TryParse(txtBaseNum.Text, out baseNum))
    {
        MessageBox.Show("請輸入一個正整數哦!");
        return;
    }


    txtResult.Clear();

    // 顯示進度表的狀態
    IProgress<int> progressReporter = new Progress<int>((p) =>
    {
        this.progressBar1.Value = p;
    });


    //  計算階乘的委派實體
    Func<int, BigInteger> ComputeNumValueAction = (bsNum) =>
        {
            BigInteger bi = new BigInteger(1);
            for (int i = 1; i <= bsNum; i++)
            {
                bi *= i; //相乘
                // 用於計算目前進度
                double ps = Convert.ToDouble(i) / Convert.ToDouble(bsNum) * 100d;
                progressReporter.Report(Convert.ToInt32(ps));
            }
            return bi;
        };


    // 開始呼叫使用
    btnDelegateInvoke.Enabled = false;
    ComputeNumValueAction.BeginInvoke(baseNum, new AsyncCallback(FinishedCallback), ComputeNumValueAction);


}



2017-07-06_01-01-56



程式碼邏輯講解:
1.在 Progress<T> 是實現 IProgress<T> 介面,所以這裡可以透過它支援的 Report()方法來報告目前非同步的操作進度數據,該對象在進度更新後,是允許使用者直接繼續操作主畫面的,例如拖拉。

2.Func<int,BigInteger> 委派,代表自身帶有一個 int 類型的參數,而返回的值類型為 BigInteger,這邊我特別用 BigInteger 類型,因為在計算階乘的計算結果,可能數字會非常大,會超出 long 類型的最大值。

3.在開始進行使用 委派(Delegate)支援的BeginInvoke方法時,必須再使用一個 AsyncCallback 委派,該委派主要是用於綁定一個方法,在檔非同步任務完成時,可以呼叫的回調方法,並且再回調方法中,再次調用 Delegate.EndInvoke方法來捕捉計算結果。

我們直接看 AsyncCallback 綁定的 FinishedCallback 方法。

private void FinishedCallback(IAsyncResult ar)
{
     // 取出委派變數
    Func<int, BigInteger> action = (Func<int, BigInteger>)ar.AsyncState;
    // 求得計算結果
    BigInteger res = action.EndInvoke(ar);
    this.BeginInvoke(new Action(() =>
     {
        btnDelegateInvoke.Enabled = true;
        // 顯示計算結果
        txtResult.Text = string.Format("計算結果:{0}", res);
     }));
}


ddd



上述程式碼撰寫完畢後,就可以編譯執行,在 基數欄位輸入一個正整數,就可以進行非同步的計算階乘作業。



參考文章
C#多工作業與平行處理技術講解
1.透過 Thread 類別撰寫多執行緒多工作業。
2.透過 Delegate 委託支援的方法,撰寫非同步任務。
3-1.透過 Parallel 類別操控多任務平行作業(一)。
3-2. 透過 Parallel 類別操控多任務平行作業(二)。
4.使用 Task 自行控制非同步任務作業。 
5.在非同步作業時,如何取消非同步任務。 
6.多執行緒多任務存取相同變數,但卻各自隔離保留各自任務的值。
7.非同步存取變數的問題。
8.非同步資源鎖定解決方式。






網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
     

2017年5月26日 星期五

C#多工作業與平行處理技術講解

    在現行 CPU 都是多核心的、甚至多顆 CPU 硬體條件下,在我們開發軟體撰寫程式時,就可以好好利用多工作業、平行處理、非同步模型了,所以這次我想好好介紹一下,如何在 .Net C# 平台環境下,撰寫多執行緒平行作業與非同步 程式撰寫技巧與概念。




   
     以往軟體操作使用者,在執行比較耗時的作業時,例如需要大量運算、影像處理等,系統主要使用畫面很容易出現"卡主"、"頓頓"、"當機的感覺",這個很容易造成使用者的抱怨,認為應用程式已經當機,甚至沒有耐心地到【工作管理員】來強制將應用程式關閉,但事實上這會導致造成兩個影響層面,一是,原本應用程式要執行的功能操作,沒有徹底執行完成;二是,如果應用程式一旦被強制關閉時,有可能造成資料的遺失,例如在執行會計系統轉帳功能時,如果只轉部分資料成功、或者盤點作業更新大量庫存成本與數量時,被強制關閉,這時候的資料有可能造成遺失(當然我在開發時這類型,我會用交易處理(Transaction)進行Commit與Rollback,這是另外議題,有機會再來談),所以如果我們可以在需要執行耗時的作業時,就必須考慮使用非同步作業(多工作業、平行處理)技術來撰寫程式,當將比較耗時的作業任務放到另外一個執行緒(Thread),這樣在執行複雜耗時作業時,不會影響到主要的使用者界面(因為使用者界面是另外一個獨立的執行緒),所以使用者可以繼續點選界面、用滑鼠拖移視窗表單都可以,這樣就不會出現卡卡的、要當機的假象。

    原理解釋,當一個使用者執行一個執行檔程式(.exe)時,程序指令就會自動加載到記憶體中去執行,這個就是所謂的應用程式的實例(Instance),而在操作系統中被稱為"Process 行程(大陸用語為 進程 )",Process 與 Process 互相獨立隔離,A Process 不會影響到 B Process 的執行,而每個 Process 又可以包含多個 Thread(執行緒,大陸用語為 線程)。一個 Process 都至少包含一個 Thread (執行緒/線程),主要的 Thread 我們又稱為 Main Thread (主執行緒),當主執行緒被結束終止時,Process(行程/進程)也會跟隨之被關閉,整個應用程式就會被關閉結束。


    經過我上面的解釋,希望讀者可以比較清楚 非同步作業(多工、平行處理)的好處,但是說實在我專案經歷也不淺,跟不同程式開發人員合作也非常頻繁,真正可以把多工平行處理寫得好的真的也算少數,因為本身控制非同步的邏輯思考以及資源鎖定釋放就必須深入的進行了解各種程式技術,不過身為 .Net 開發陣營的我,已經覺得非常幸福,因為 .Net 框架已經把非同步、多工作業封裝成相關類別,程式開發人員不必花太多時間去管理執行緒的底層模型,我們只有好好地學會如何使用這些類別,就可以把多執行緒多工作業寫得很好。


那麼,我想分幾篇文章來講解如何使用 .Net C# 支援的撰寫技巧來介紹,非同步作業的實作方式



以上我會另外花時間各自寫文章來敘述與實作......





網智數位-軟體開發(軟件開發) 
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna 
黃先生 Allen



    
這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote

2017年5月22日 星期一

文具行業-ERP管理軟體導入(軟體開發、軟件開發、客製化軟體)

    感謝位於越南台商-台灣豐禾文具製品有限公司,選擇委託網智數位-軟體開發團隊,量身客製化開發軟體,該客戶是在越南已經有多年的耕耘,在文具加工與製程有非常好的品質與競爭力,但因為在針對下游客戶的訂單處理、報價評估、成本分析、都是人工Excel計算,以及庫存都是手寫記錄,因此與我們聯繫溝通想導入一個好的管理軟體。





    而因為在成本的零件、材料的多樣性變化,在一般的套裝軟體的BOM表無法真的滿足,報價選擇零件的成本、利潤估算,因此必須針對該客戶的具體物料變化、用量、損耗進行客製化公式設計、軟體開發,來加速公司的報價利潤控管與查詢統計,以及後續的採購流程、庫存管理,所以評估多家軟體公司後,正式選擇網智數位,進行輔導與軟體開發。


網智數位-在企業的客制化軟體開發,有相當豐富的經驗,也在企業的流程知識、資料流、系統整合,ERP、MRP、CRM、庫存管理管理軟體導入都有產業經驗,目前已經橫跨地板業、窗簾業、成衣業、工業馬達、化妝品業、玩具貿易業、物流業…








網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen


2017年5月14日 星期日

勒索軟體大規模攻擊微軟的Windows系統

在5月13日的可靠消息,根據各大國內外媒體報導,大規模的勒索軟體攻擊已破壞英格蘭醫院的運作,也感染全球數十個國家的電腦。

wKiom1kWr9zChehWAABHDOkvIiA50.jpeg-wh_651x-s_2026428311_thumb[8]

而微軟今天表示,它的工程師已針對該攻擊加強了檢測和保護。
 
微軟發言人在聲明中稱,“今天,我們的工程師已針對名為Ransom:Win32.WannaCrypt的新惡意軟件加強了檢測和保護。”它說,公司正與客戶合作提供額外的幫助。
 
勒索軟件是一種能夠持續阻止計算機正常運作的軟件,除非受害者交出勒索贖金。新的WanaCrypt0r 2.0勒索軟件尤其致命,因為它利用了竊取自美國國家安全局(NSA)的黑客工具。
3月,微軟成功補上了讓該名為EternalBlue的NSA工具能夠運作的安全漏洞。
 
今天,針對WanaCrypt0r勒索軟件,Windows更新了兩款安全工具——Windows Defender antivirus和Windows Security Essentials。
卡巴斯基實驗室今天發現,全球74個國家共計發生數万起WanaCryt0r攻擊。該攻擊導致英國的醫院系統拒絕病患看病,西班牙電信公司出現大面積的停工,俄羅斯內務部有1000台計算機被感染。
 
該勒索軟件所使用的EternalBlue工具是一個名為ShadowBrokers的組織所流出的NSA黑客工具,該組織自夏季以來一直在放出這種工具。 EternalBlue於4月放出,就在微軟剛剛填補了安全漏洞之後。
 
ShadowBrokers一開始曾嘗試拍賣那些工具,隨意流出了至今仍很危險的工具來證明自己擁有其所聲稱的工具。由於不滿報價和其它的貨幣化機制,該組織於1月打消了拍賣計劃。
4月,ShadowBrokers放出一攬子新的工具,稱該舉是為了抗議美國總統特朗普做出中立派決策而非極右翼決策。
 
專家們認為,及時更新電腦軟件系統對於避免遭受黑客和惡意軟件的攻擊至關重要


目前具體做法與媒體報導,可以參考以下介紹
XP也有救!WannaCry 2.0勒索軟體肆虐,微軟破例再釋Windows XP修補
WannaCry 2.0勒索蠕蟲狠襲全球,上百個國家受駭,台灣也是重災區
勒索病毒爆發 安全專家預警周一上班要小心
中職/系統當機頭一回 尚不確定為勒索病毒
病毒軟體勒索恩主公醫院 病患個資無虞



網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年3月29日 星期三

徴 .Net 程式設計師數名(軟體開發、客製化軟體、軟體設計)

     因業務的增量,網智數位目前有多個自身產品在研發、也有大型銀行專案在進行,尋求數名資深的系統分析師(尤其對行業ERP 或 銀行資產管理、處分資產財務等經驗)、程式設計師。

images

1.鄙公司陸續手上有多個進行中的專案,需要找可長期合作的提案人,執行程式設計的設計與開發。
 
2.包含各種領域產業的公司,有製造業、電信業、半導體業,主要開發管理系統,財會系統,或是各項作業流程系統等。
 
3.提案人需有各領域作業的知識,有相關產業經驗佳,才能開發出符合產業需求的系統
 
4.開發工具不拘,以.NET C#為佳,資料庫包括MS-SQL,MY-SL,Oracle等皆可,部分系統可能需要建置類似ERP的規模

5.因案件很多,各案件規格需要與發案方討論,並個別報價
 
6.需有獨立完成一個 WEB(ASP.NET MVC)或 Windows Desktop APP(Windows Form or WPF) 專案經驗過。


PS.如果你是厲害的SOHO族想要長期配合專案,我們也非常歡迎,目前今年快速發展,在商業軟體與工業應用軟體,在空調大廠、機電大廠、馬達承軸器、土地銀行 等產業目前領導廠商都是我們的客戶哦,因為客戶的信賴,給我們團隊不斷的前進...


網智數位科技公司在IT領域已有10年多經驗,在團隊合作下陸續完成許許多多的軟體開發承包、網路架設委外案、系統維護案,也正式跟大型軟體公司、玩具製造業、飾品製造業、知名衛浴公司、窗簾材料業、空調冷氣設備大廠、貿易公司、前進國際、大型上市成衣製造業、連鎖動物醫院、網拍零售業等正式長期合作,開發一系列的不同產業的進銷存系統、圖控軟體、監控軟體、紅外線檢測趨勢圖像報告、獎金計算系統、物流配送、客戶關係(CRM)管理系統、請假出缺勤管理系統、企業資源管理(ERP)系統、電子商務(EC)等,接下來我們將更積極努力的完成客戶的要求與完善的服務,希望如果您有軟體委外、客製,IT建置的需求、網路行銷等,我們將有一套完整的服務模式。


網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年3月13日 星期一

感謝鈺鋒集團委託我們開發-維修知識管理系統(軟體開發、軟件開發、客製化軟體)

      在多次討論需求會議中,鈺鋒集團梁總經理評估我們的專業能力與需求分析經驗,委託網智數位協助幫集團所有子公司開發一系列的維修知識管理系統,該集團成立20幾年,鈺鋒集團為提供各類優質泵浦及技術服務的泵浦代理商,為化工行業Goulds Pump,醫藥行業Viking Pump(Gear Pump)、Pulsafeeder Pump,廢水處理行業Flygt Pump,礦業IMO Warren Pump等行業,依選型、使用、維護、保養等各方面提供最佳的建議和服務。

mgcKAC_component

      鈺鋒集團,因為擁有眾多的客戶群,在各種維修設備上面,必須依靠大量的資深師傅經驗、而這樣在經驗的傳承以及知識的傳遞過程,都無法有效的複製經驗,這樣集團在擴廠中遇到人才不容易養成,而且因為客戶的產品維修複雜性、在資料的尋找、文件的歸納都是透過大量的人力,而在報價、成本計算、合約文件管理都是透過大量的紙上文件、Word、PDF、Excel文件來管理,但在管理效益上往往無法在歷史資料比較、歷史資料查詢、價格計算、文案合約管理,因此評估多家軟體公司後,委託我們網智數位進行從無到有開發公司的維修、知識管理系統。




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年3月12日 星期日

網智數位與群環科技正式合作成為 微軟 Azure 雲端解決方案經銷商

        今年網智數位與群環科技正式簽約合作,網智數位也將正式成為雲端平台 Azure 經銷商與解決方案提供者,未來網智數位的客戶,可以透過我們採取微軟的雲端平台,而我們將可以提供良好的技術服務、更好的軟體開發品質,讓軟體使用更加便利性、跨越裝置、區域性地限制性。




下載




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

跨平台解決方案優缺點細說(軟體開發、軟件開發、客製化軟體)

       在現在智慧型裝置、平板裝置大量普偏化,從企業到個人甚至在企業內部團隊開發者的支持與合作之  下不斷推出大量新型移動應用。面對如此龐大的應用生態圈,認真規劃並調整戰略性技術決策無疑有助於確保應用的成功發布並獲得良好的市場反響。而在實際構建相關平台之前用戶界面(簡稱UI)、用戶體驗(簡稱UX)以及必要功能自然是首先需要明確的要素。而後,則應考慮如何採取適當舉措以推動開發流程。 

      
IC764638

       事實上,單純是原生抑或跨平台這一決策已經能夠帶來諸多後續影響。應用開發所選擇的首要平台及編程語言在產品對用戶的直觀性以及受眾類型方面發揮著巨大作用。例如,您的應用是否只能在Android或者iOS中的一類設備上使用?原生抑或跨平台這一決策最終取決於您的實際業務目標,且其各自都有著自己的優勢與缺點。

原生應用
原生應用採用面向特定平台的編程語言構建。在Android方面,其為Java; 在Windows上則為C#、VB .NET或者C/C++; iOS平台則為Objective-C或Swift。這些應用需要從零開始進行構建,且僅能夠在指定平台上運行。


優勢
用戶界面 (UI) – 應用的外觀以及整體使用方式能夠決定其最終成功與否。由於原生應用能夠與其創建平台無縫對接,因此用戶能夠使用其更為熟悉的界面。這有助於帶來更為積極的用戶體驗,並鼓勵用戶長期使用。
性能(UX) – 原生應用開發中往往涉及大量媒體(例如圖像、視頻或動畫)資源,因此需要進行大量交互與數據處理操作。在這方面,原生應用表現更好,因為其原生代碼能夠直接調用操作系統的獨特硬件與軟件功能,且幾乎不存在任何滯後現象。另外,使用本機代碼開發複雜應用能夠最大程度降低應用卡頓或者崩潰風險。
更佳排位–原生應用通常在用戶中口碑更佳,且能夠在應用商店中得到大力推薦。另外,原生應用也能夠憑藉著出色的性能與用戶友好型界面得到受眾的高度認同。
平台集成–原生應用往往能夠在指定平台上順暢運行,這意味著其功能可以根據用戶偏好進行自定義,並讓用戶擁有將其作為自身移動設備之上固有組成部分的感覺。


缺點
耗時– 面向多種平台開發原生應用往往更為耗時,因為同樣的代碼無法直接運行在其它平台之上,這意味著開發者需要耗費額外時間進行代碼轉換甚至重寫。
對開發技能要求更高–欲面向多種平台開發原生應用,企業需要擁有更多技能水平更高的開發者。取決於您所選定的平台類型,跨平台原生應用開發至少需要兩名開發者——其一負責進行Android版本開發,其二負責iOS版本開發。
高成本 – 開發者數量的增加意味著開發成本也將快速提升。再加上更為漫長的項目開發流程,企業可能需要將整體預算翻倍甚至再次翻倍。


跨平台
跨平台應用所使用的代碼可根據具體操作系統進行定制,而後再行發布。這種多合一式解決方案能夠讓單一應用運行在多種平台之上,因此受到廣大關注時間與成本的企業與開發者的熱烈歡迎。


優勢
節約時間–與原生應用不同,跨平台應用開發可採用單一代碼庫面向多種系統平台,從而幫助企業節約由代碼重寫及平台定制所帶來的時間消耗。
成本低廉–企業能夠有效削減開發項目的人員數量與成本水平。這種“一次編寫,隨處運行”的代碼能夠顯著提升開發效率並加快部署速度。
利潤最大化–除了節約成本外,跨平台應用還能夠同時在多種平台及用戶市場上取得影響力,最終實現利潤最大化。
螝於啟動及更新–企業可以首先啟動應用,並隨後根據需要面向多套平台同步推出更新。

缺點
性能延遲 - 跨平台應用往往無法像原生應用那樣與運行平台無縫對接。因此,此類應用通常會因代碼不能同設備硬件或軟件功能順暢協作而引發卡頓或者延遲。
以特性換通用 – 由於共享同一套代碼庫,因此跨平台應用無法完美與當前平台相集成,這意味著用戶往往不能充分利用平台內的某些功能,例如預設手勢、攝像頭甚至麥克風。

PhoneGap
PhoneGap,亦被稱為Apache Cordova,是一款高人氣開源平台,可用於創建跨平台/混合應用。其採用JS、HTML 5以及CSS 3編程語言。

優勢
編程語言熟知度高 – 由於PhoneGap採用JS、HTML 5與CSS 3等高人氣語言,因此開發者能夠輕鬆上手並開始使用。這不僅能夠減少相關培訓需求,同時也使得企業能夠更快向市場推出應用開發成果。
易在應用商店中被發現 – PhoneGap應用的安裝方式與原生應用類似,因此能夠在應用商店中獲得理想的曝光度。
插件架構– PhoneGap採用一套靈活的插件架構,能夠以模塊化方式擴展原生設備API。
無許可成本– PhoneGap是一套開源項目且可免費使用,因此企業無需承擔任何許可成本。
提供大量庫–開發者能夠輕鬆訪問並尋求各類資源庫的幫助,從而增強自有應用功能。


缺點
性能 – PhoneGap應用的性能表現常常受到批評。一旦應用架構中存在大量圖形或者復雜元素,則可能導致應用無響應甚至崩潰。
插件 – 在多數情況下,開發者必須使用特定插件以避免對其原生指定屬性產生干擾。 PhoneGap擁有一套靈活的插件友好型架構,開發者能夠根據需要選擇必要插件或者自行開發插件。然而,如果開發者無法找到適用的插件或者無法輕鬆編寫自有插件,則開發過程將遭遇嚴重延後。
缺少說明文檔– PhoneGap的用戶指南含糊不清且與用戶界面有關的指導性文件缺少部分關鍵性信息。另外,其中尚不提供可用於強化跨平台應用開發的最佳實踐信息。
內存丟失 - 由於PhoneGap缺少緩存/內存管理功能,因此經常出現內存丟失問題。


Titanium
Appcelerator Titanium是一套可用於開發桌面、原生移動以及跨平台應用的開源開發平台。目前市面上已經有超過3萬5千款利用JS、HTML 5、jQuery以及CSS 3等語言在Titanium中開發完成。


優勢
編程語言熟知度高 – Titanium採用JS、HTML 5與CSS 3等高人氣語言,因此開發者能夠輕鬆上手並開始使用。
可訪問各先進功能 – Titanium擁有獨立的API以訪問設備上的各項功能,包括攝像頭、麥克風、觸控屏幕以及GPS。這意味著用戶能夠將Titanium應用作為其設備中的固有組成部分並獲得良好的使用體驗。
即時反饋 – Titanium能夠縮短應用開發時間,允許開發者以更少代碼進行應用構建。這意味著開發者能夠快速構建應用原型設計,並根據即時反饋評估用戶與UI間的交互方式與效果。
龐大的技術社區 – Titanium/Appcelerator社區擁有超過20萬名開發者,並開放對其Open Mobile Marketplace的訪問。開發者能夠在這裡購買、出售及共享各類模塊、模板、設計元素以及面向Web服務的擴展。


缺點
複雜性更高– 應用複雜性的提升亦會引發成本增長。開發者在遭遇大量崩潰及bug等問題時往往需要投入更多時間與精力加以調試,這在無形中拉高了代碼組織與多平台支持維護的成本。
靈活性有限 – 儘管Titanium的API對代碼行數要求更低,因此能夠幫助開發者節約時間,但這種限制亦會導致應用複雜性上升的問題。另外,其還有可能引發應用中的延遲及其它持續性問題。
功能不穩定 – Appcelerator提供StoreKit模塊,旨在實現指向蘋果App Store的應用內購機制。然而這一功能非常不穩定,且有時無法正常起效。該模塊的部分功能極大影響了Titanium的免費增值定價策略。事實上,這款免費下載的軟件運行狀態極差,且根本無法實現有效的內購效果。而這種不穩定性甚至導致部分用戶徹底放棄相關應用。
工具包故障 – 可能很多開發者都有同感,即自從Titanium Studio(一套基於Eclipse的IDE)出現後,Titanium的學習成本開始大幅增加。 Titanium Studio存在諸多問題,最嚴重的就是會在構建過程中忽略部分變更。這迫使開發者必須在每次更改後進行項目清理,或者使用新項目進行完全重新啟動。


Xamarin
自2011年發布以來,這款知名框架就被廣泛應用於跨平台應用開發。通過API,Xamarin應用能夠以原生方式同iOS、Android以及Windows等設備上的攝像頭、GPS等功能進行通信。

優勢
一套代碼玩轉全部平台 – Xamarin採用C#與.NET框架相結合的方式,確保應用能夠在多平台上正常運行。這意味著開發者能夠復用大部分源代碼以加快開發流程。 Xamarin還能夠與Visual Studio及Xamarin IDE協作,開發者無需在不同開發環境間往來切換。
模擬原生 – 由Xamarin開發而成的跨平台應用在理論上可以被劃歸原生應用,因為其性能指標高度類似於針對單一平台的原生應用。另外,Xamarin應用亦可在應用商店中享受到原生應用的待遇。
原生UX – Xamarin允許用戶面向各平台定制其UI。通過使用Xamarin.Forms工具,開發者能夠構建跨平台應用並為其配備有針對性的UI組件。為了實現更理想的性能表現,開發者還可以使用Xamarin.iOS或Xamarin.Android工具開發具備原生使用體驗的高速、可靠跨平台應用。
功能 – 利用Xamarin,所有硬件兼容性問題都將不復存在。 Xamarin允許開發者訪問多種平台指定型API,並能夠接入原生庫以無縫實現多設備平台跨越,且舉帶來任何功能或者性能問題。
無需昂貴的許可成本 – 在微軟於2016年年中收購Xamarin之前,Xamarin的許可費用高達每開發者、每平台1000美元。這意味極小的開發者團隊即會給企業帶來高昂的許可成本。然而自收購之後,微軟開始免費將Xamarin提供給Visual Studio用戶,且目前亦在將其打造為真正的開源平台。

缺點
社區規模較小 – Xamarin在過去幾年中的發展速度比較穩​​定,且大多數追隨者來自微軟。由於社區規模較小,因此尋找有經驗的Xamarin開發者可能並不輕鬆。
需要更為廣泛的技能儲備 – Xamarin廣泛使用.NET開源資源及其它開源技術,因此希望使用Xamarin的朋友需要熟練掌握.NET,同時具備JS或者Objective-C等其它特定平台的專業知識。
應用體積 – Xamarin需要大量操作性軟件以實現.NET框架與平台特定操作系統間的代碼與引用鏈接,這意味著其應用的體積相對更大。

原文标题:Native vs Cross-Platform App Development: Pros and Cons of PhoneGap, Titanium, and Xamarin
原文作者:Prem Khatri、51CTO

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年2月9日 星期四

進銷存-進口買賣業解決方案 (軟體開發、客製化軟體、程式開發、程式設計)

      去年被一家經營國際貿易美妝護膚用品的客戶委託開發符合該客戶營運流程與產品特性的進銷存管理系統委託案,該客戶事實上很久以前就找過網智數位進行量身定做的軟體開發要求,但因為當時我們與一家國外知名玩具的代工廠合作一系列的工廠自動化、MRP/ERP軟體開發案,因為時程問題覺得無法在時間點協助客戶完成軟體客製化需求,所以遲遲沒有承接,而經過1~2年該客戶還是找上我們,因為這期間客戶找了好多家市面上的套裝進銷存軟體、庫存管理軟體,但就是都無法滿足客戶在處理進出口成本計算、庫存銷量的分析角度來輔助跟國外進口物品的參考統計數字,所以又再次與我們細談,覺得我們量身定做可以滿足客戶的需求,合作案就正式開始了…



進貨單-部分功能畫面
image

進貨多筆新增-便利操作

image

週期性庫存銷售量分析
image



    今天,我帶工程師正式將開發完畢的軟體上線,到客戶端進行教育訓練,看到一個好的軟體可以真的讓客戶滿足、協助客戶的管理、分析、流程整合, 也可以進行各種成本、不同角度的成本查看、不同週期的銷售量分析、業務負責區域業績查看,這也是軟體所帶來的一種無形的價值,我與客戶也深信我們的用心開發,未來客戶的軟體需求只會不斷的加強、藉由軟體的管理輔助,客戶提高管理績效、我們也有軟體開發的成就感,這就是打造雙贏的合作案。


    網智數位-軟體開發團隊成員幾乎以前都是在知名軟體公司、上市公司服務超過10年以上的經驗,在商用軟體、工業軟體、系統整合都有非常好的經驗,也是知名航空公司的教育訓練委託合作案、電腦大廠清華同方的軟體開發解決方案合作廠商等等。








網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年1月7日 星期六

VR/AR 軟體開發 ,CES國際展覽

      今天下午客戶傳訊息給我,告知我們參與開發的 VR/AR 虛擬實境管理軟體,在國際的 CES(全球最大科技展消費性電子展(CES)) 進行展覽,事實上看到這段國際展覽影片還滿開心,公司團隊開發的產品能夠幫助客戶在CES展覽有幫助,也是一點點的小成就感,希望網智數位-開發團隊,在各開發領域能夠繼續一直不斷向前、研發能力也能夠繼續突破,用資訊技術幫客戶達到各種企業競爭力、整合能力。

article-586f03d485601


  下列的 VR / AR 互動控制,就是我司團隊參與軟體開發
https://www.youtube.com/watch?v=PWiRs86DuKk






網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870 

公司電話:02-5599-1310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen


2017年1月3日 星期二

軟體公司與網路(互聯網)公司之差異性(軟體開發、客製化軟體、程式設計)

    在現行許多軟體公司與網路(互聯網)公司在客戶面、獲利來源、以及市場區隔性、差異性,讓很多人有點分不清楚,這兩者在本質上是有一定的落差,不論是商業模式、獲利來源、團隊人才取捨,而 Allen 我自2003年進入.NET程式平台開發領域(早起是開發 LAMP,Linux + Apache + MySQL +PHP),這快15年的.Net技術迭代更新,我能跟隨學習的就盡力,當然也犧牲了生活品質質量,我期間經歷過專業的管理軟體公司、網路公司,也有國內上市企業服務、傳統產業擔任資訊部經理,深感其中的差異,撰寫文件分析兩者的聯繫和區別,供其他疑惑者的朋友可以進行思考我的論點(當然不一定是對)。






IT 技術的選擇差異性
(一)管理軟體公司著重於業務實現、產業領域知識的導入、企業流程的整合,網路公司著重於高並發、高可用、使用者體驗、操作介面友善性等;在企業管理軟體的使用者一般是企業或各工廠各部門行政人員,一個大公司也不過10~300個使用者同時上線,所以相對一定是對與企業的業務流程的實現與整合相對要求高,這樣才可以節省人力、降低人事成本,而不是增加成本,當然有的管理軟體提供了大量的簽核審批的機制、功能,每走一個流程,每確認一個步驟(下訂單,發貨,產生發票,請收款)都要審核,我個人認為這樣的管理軟體是增加使用者的成本,進而降低效率,我們把企業、工廠當成一個合作的整體存在,業務部負責下訂單,生產部負責在規定的時間完成訂單生產,採購負責及時的購買所需要的生產物料,這是一個密不可分的整體化運作,任何一個環節卡住會造成訊息溝通的不流暢,更甚至會導致生產停滯、呆料,我在多年以前,我們在網上註冊一個帳號,輸入帳號、密碼等,提交時提示電子郵件必須輸入,這時我們輸入的密碼也會被清空,對於非常重視使用者經驗的網路公司,勢必一定會考慮到這種案例,系統需要幫忙我們記住之前輸入的密碼,這時只需要輸入電子郵件即可再次發送。
(二)單純的軟體開發公司用的技術相對來說一般是比較老的,穩定的,成熟的技術。比如.WCF、Windows Forms、WPF、Web Forms、ASP.MVC,而網路公司走向一般會追求新的技術,比如Spark、Redis、Micro Servie(所謂的微服務)、Hadoop、Node.js 等。單純軟體公司會使用 SQL Server Analysis Services作為 OLAP 的分析工具,而新的網路公司可能會採用 Spark + Hadoop 等大數據技術來達成實作的可能性,如果工程師在喜歡搞技術創新的管理軟體公司上班,常常會活的比較痛苦。如Linq to SQL出了沒多久,Entity Framework出現,Silverlight,WPF後來也是逐漸從公眾視野中消失。 ASP.NET MVC的出現,大批Web Forms程序員找工作變難了。現在ASP.NET Core 的又出現,不曉得會不會導致ASP.NET MVC 程式設計師的資訊焦慮症候群。
(三)管理軟體公司的技術升級常常來自於內部本身的程式開發人員,而網路公司的技術變更多的來源於客戶、業務需求。正所謂成也蕭何,敗也蕭何;但處於軟體行業頂端的軟體公司創造技術解決問題,提供開發工具維持企業利潤,中小公司則應用技術解決業務問題。軟件業相當頻繁的技術更新,造成了大批老技術程序開發人員失業,從而進一步增加了軟件公司的生存成本,例如現在市場上幾乎找不到或是很少能找到VB6 或 Cobol 程式設計師,還有一些我們沒有聽說過的技術(他們的確存在於現實的公司中、例如 cobol,今年我們就有要評估一個大型系統是 cobol要轉變為.Net平台的評估案),VB6 開發人員要嗎失業,要嗎轉型,那麼軟體公司呢,大量的用Delphi開發人員的,非常優秀的VB6 開發還是需要人員維護,軟體公司面臨兩個選擇:要嗎用新技術重寫,要嗎養幾個老開發人員一直做維護。軟體公司的老闆都是人精,不可能將公司的未來受一兩個程序開發人員控制,所以就用前一種方案,用新技術改寫,這樣的目的主要是好招人,老程式員離職了再招新開發人員,努力將公司的命運控制在自己手中。以前我們公司的C/S(Windows Forms、WPF)程式開發人員常常會擔憂以後找不到工作,當時身為他們的直接主管,常常需要體會他們的這種壓力。技術上要將一些通用的重要的技術方案交給他們做,讓他們建立信心,同時也給他們安排一些熱門技術的培訓課程,作為管理人員,也需要對他們的未來負責,對他們的績效給予一定的相對優質的評定。網路公司的IT技術變更,比如大數據的需求,數據的來源形式和格式多種多樣,原有數據挖掘方案解決不了,迫切需要做技術變更以適應這種變化。於是就有對Hadoop,Spark這種大數據技術的需求,更厲害的網路公司甚至於重建一套大數據平台,以保證一直處於行業領先地位。

團隊組織文化的差異性
(一)軟體公司適合純技術人員生存,網路公司則相對重運維+技術。比如上一節我提到的緩存技術,網路公司將此發揚光大,提供一整套的分散式解決方案(Redis,MongoDB)。程式開發人員不僅僅要會調用API,還需要Deploy部署服務器,理解它們的內部運作機制原理,而在軟體公司,為了增加產品的高可用性,我們提供集群,鏡像,資料庫複寫,資料庫記錄檔(日誌)等技術,我們可以保證系統 7*24 不間斷運作。而網路公司對此要求更高,他們還要求高並發。我們知道資料存在硬碟上,讀取資料或保存資料是一個很合理的操作,管理軟體增刪查詢修改都是這樣模式,但網路公司對此還不滿意,因為多人並發的存在,資料必須要保存在記憶體中才能滿足快速的高並發地需求,當然還有高可擴展性,為了升級管理軟體,我們停止伺服器程式,或者直接重新啟動下機器是很常見的操作,但網路公司對此零容忍,他們要求更新系統時,不能停止服務,或是非常短暫(秒級)的停止服務。後者要求系統可以做到熱插撥,這跟USB接口做到熱插撥並成為業界標準是同一個趨勢,我們知道Oracle升級補丁包時,可以不用停止資料引擎服務,這個特性對網路公司非常重要(SQL Server用鏡像技術也可以達到此目的)。總體來說,管理軟體公司只需要把技術做好,而互聯網公司要求在技術之外,還需要了解運維層面的知識。
( 二)單純的軟體公司的同事頭腦相對固定(當然也聰明,能從事軟體業,相對一定是邏輯思維能力一定不錯),網路公司則靈活一些,它們存在的理由是創新。管理軟體作為一種管理思想的軟體整合實現,應該是一種管理模式,方法和思路與流程的固化,不允許或是少量允許變化。試想一下,規定的流程不跑,數據沒經過運算,自然沒有想要的結果。舉例說明,大部分的ERP軟件約定的流程,客戶下訂單,物控部跑MRP計劃,產生物料採購需求和半成品的加工需求,最後成品完成入庫,向客戶發貨,財務結算等。這是製造業ERP的基本流程,不過貿易公司的ERP則可以不這樣跑,可以直接向供應商下訂單,然後發貨到客戶,自己甚至都不用租賃倉庫,直接提供供應商到用戶的端到端(直運業務)業務模式。這些思路決定了管理軟件不需要創新,按照約定俗成的或是上司規定的流程完成即可。常此在這樣的思路下工作,人會失去創新血液。管理軟件的員工常常會被產品設計人員的思路導向,創新會自食惡果。而網路公司則相對充滿著創新的動力。
(三) 在管理軟體公司是人才培養的搖籃,通常軟體公司規模也偏小,但確實是產生高級工程師的地方。網路公司因為業務變更頻繁,技術更新迭代快,不適合純技術人員生存,常常是技術人員走管理,轉業務銷售的地方,在軟體公司有明確的人才培養方案,一個資深開發人員帶幾個年輕程式設計師,像老母雞帶小雞一樣,一步步教導這個怎麼實現,那個如何設計會更有效率一些,直到新人變老手,初級程序員變中級工程師。比如我們在管理軟體公司學到的,借助於緩存可以提高效率,改善性能,用反射技術可以做成插件式系統,用動態語言可以把系統做成可擴展的,這些技術隨著程序員年歲的增長,慢慢學會並靈活應用。網路公司因為技術變更快,Web 2.0、雲計算、物聯網、車輛網,大數據,技術更新非常頻繁,只有達到壟斷級別的公司才可以生存。我們都是凡人,能進入各個領域的壟斷級別的公司都非常不容易,即使進入,項目迭代周期短,KPI壓力大。 (我這裡說的適合於中小公司,大公司不適合於此小節描述。)

銷售模式與市場競爭差異性
(一)單純軟體公司的人員相對比較起來缺少銷售觀念,而網路公司員工更多的會關注到到商機,常常會考慮把技術轉化為價值,而管理軟體公司的員工則比較缺乏市場的積極性、參與了解動能不足,他們可能還在研究新版本的開發工具有哪些產品特性,期待以拖放的方式就能設計出工作流的軟體廠商,所以如果能把幾年工作的成果抽象提煉出來,形成一些公共的開發類庫,方便以後的開發,這是一個小小的進步。進一步的,能把管理軟體中相同的操作界面和模式總結出來,做出一些相對通用的界面和控制箱,比如資料的輸入Entry,資料的查詢Query,資料的清單 List,設計報表Report,資料查找Lookup,自定義查詢Query等,初步形成一個開發框架。再進一步,我們用自己提煉的開發框架,用自己參與和理解的技術理念,做出一套產品,這也算是一個小小的進步。技術進步的每一個階段都可以為你的職業發展帶來無窮的好處。熟練的程序員再也不擔心找工作沒人要。成為一個領域的資深開發人員,可以為自己贏取技術主管或經理的職位。做出一個領域或行業的產品,如果在合適的時機碰上會做市場的銷售人員,創業也是非常有可能的,記得一句話,夢想是要有的,萬一實現了呢?
(二) 網路公司相對容易產出新概念,新名詞以吸引大眾眼球,以此創造概念經濟,而單純軟體公司相對比較墨守成規,比如我在2006年所經歷的Web 2.0,那時滿大街的都是這種宣傳材料,沒過多久這種概念就過時了。正如現在鼓勵創業氛圍,雲計算服務,物聯網、車聯網、智慧家庭以及大數據等等,相信不久也會從我們的公眾視野中消失,當然也可能產生非常大的市場規模,但我相信市場一定會大洗牌,取而代之的是大批的網路公司、物聯網消失不見,而管理軟體公司則很少會這樣,MRP,ERP還是上世紀90年代的概念,現在仍然適合於企業管理軟體的設計思路。儘管ERP之後還有產生ERP II概念,不過也不怎麼流行。管理軟體公司相對務實,能把物料需求計劃(MRP)跑流暢,基本上公司的資訊系統化水平就上了一個大台階,也不會再去追求管理創新。金融也是一個不適合創新的領域,記得 一個經濟學家說過,我們應該將所有的經濟學家從社會上去除,因為金融改革就是擾亂社會秩序。國際金融炒家索羅斯的至理名言也曾表述,我們就是為了創造一種假象,然後在人們認識到真相前提前退出遊戲。

     在這幾天連假看到網路詢問未來趨勢、以及思考許多資深從業人員後,隨意整理撰寫的文章,希望新的2017年有嶄新的開始,軟體業、網路業、IT技術 我依然熱愛,一生與它為伍。



網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870 

公司電話:02-55991310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen


2016年12月27日 星期二

地板/磁磚 管理軟體導入 (程式開發、軟體開發、程式設計)

      這個月在多次跟經營30幾年的地板多家連鎖店老闆進行實際現場討論,因為該客戶在經營公司的作業流程與管理目前效率人工過於頻繁,所以找上我們網智數位軟體開發團隊進行改善建議,而 Allen 我發覺事實上一家公司如果老闆認真投入公司的人事、庫存、財務、業務績效、產品品質管理面向時,公司發展到一定程度一定會想透過一個好的資訊系統、管理軟體來進行協助公司的作業標準化,當然在多次討論客戶的企業經營管理思維過程中,我學到產業的知識、客戶的經營理念、面對客戶的產品介紹、面對客戶的敬業態度,都是我無形中累積的知識。

images


      該客戶因為擁有特殊的人事管理思維、銷售管理制度,只是都是人工計算、Excel作業,市面上根本也沒有任何一套套裝軟體可以符合客戶的需求,因為客戶的銷售獎金算法、產品估價方式、人事管理制度面,都是具有該地板產業獨特的競爭優勢,所以客戶評估我們擁有多年在不同產業領域上可以完全從無到有客製化的軟體開發能力,確定正式委託我們進行軟體開發案。 
      而因為該軟體開發案,我評估跟以往我在協助導入其他廠商時給予輔導的方式不同,該客戶具有特殊的Domain Know-how,所以我特別另行保密管理軟體使用權,來保障該客戶多年的管理制度,也作為雙方合作信任的基礎,這樣客戶可以安心的享有自己特殊的營運管理方式,完全透過軟體來建立標準流程,就是老闆在外面也可以透過資訊系統,馬上知道公司所有業績表、財務成本、庫存管控,又不用擔心自行創立的業績績效算法、組織擴展方式被其他競爭對手學習。

好的管理軟體,可以協助企業進行【數字管理】- 績效管理,任何歷史資料都可以分析協助作決策。


網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2016年11月11日 星期五

繪圖程式-折線圖、區域圖 實作一(軟體設計、軟體開發、程式開發)

        這半年來一直不斷被客戶要求開發相關繪圖功能的程式,礙於現在很多程式開發人員,已經越來越多人只會資料庫的CRUD,對於繪圖程式撰寫掌握度不是很好,甚至基本觀念也沒有,所以大多數程式開發人員都是去找相關的Chart套件,也很少有人示範在 Windows 10 APP 如何開發相關繪圖程式功能(很抱歉目前Windows 10 似乎沒有提供相關繪圖控制箱可以直接使用,所以要真的自己寫繪圖功能),所以我這篇就來教導如何在 Windows Universal APP 開發一個 折線圖功能,折線圖在軟體應用上面常用於股票分析、統計分析、銷售分析、趨勢走向等圖表展現。

(折線圖)
r-data-exploration-and-visualization-line-plot-1


(區域圖)
886d1a27-3744-417b-a3e5-e9b9878e5760



折線圖原理其實就是在一個二維的空間(平面)中,利用多個 【X,Y】坐標點透過直線連結起來,所形成的趨勢圖形,通常 X 軸代表一個某種類別例如月份、年份、型別等,而Y軸代表某類別的實際值,例如業績、銷售量、收入、人數等。在折線圖中,X軸都呈現等量(距)的增加。
現在我們知道了簡單的折線圖原理後,在Windows 10 (UWP)平台開發上,是必須使用 Polyline 繪圖技術來進行開發,可以在界面直接選告 XAML 語法,例如底下Code:

<Polyline Stroke=“Blue” StrokThickness="3”Points=”5,10 20,30 25,40 100,120”/>

其中最重要的來自于 Points 屬性 ,5,10 =》代表一個點 [5,10] =>X=5,Y=10
但通常在開發繪圖功能時,都是動態繪圖產生,所以在這邊我也示範如何完全在背後使用程式開發一個折線圖功能,我在界面上我簡單的設計2個按鈕,分別作為繪製 折線圖跟區域圖,前端界面如下

image


//XAML Code
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="Auto"/>

        </Grid.RowDefinitions>
        <StackPanel  Grid.Row="0" Orientation="Horizontal">
            <Button Content="折線圖繪製" Click="DrawChart_1" Margin="12" Background="AliceBlue"></Button>
            <Button Content="區域圖繪製" Click="DrawChart_2" Margin="12" Background="Wheat"></Button>
        </StackPanel>
        <Grid x:Name="gdChartCanvas" Grid.Row="1" Height="auto" HorizontalAlignment="Center" VerticalAlignment="Center">

        </Grid>
</Grid>



在後端的程式碼,分別設計了 GetAllPoints()方法、與對應的 DrawChart_1 、DrawChart_2 事件方法

       /// <summary>
       /// 取得所有折線圖、區域圖的 Y值清單
       /// </summary>
       /// <param name="yValues">Y值清單</param>
       /// <param name="perWidth">X等距寬度</param>
       /// <param name="yStartValue">Y起始值</param>
       /// <returns></returns>
       private PointCollection GetAllPoints(List<double> yValues, double perWidth, double yStartValue)
       {
           PointCollection points = new PointCollection();
           double x = 0;

           foreach (double yVal in yValues)
           {
               double y;

               //判斷 Y 值是否小於 Y坐標起始值,因為畫布是從 100 開始
               if (yVal < yStartValue)
               {
                   y = 100;
               }
               else
               {
                   //可以套用自己的公式來設定Y值
                   //y = Math.Floor((500 - (yVal * 200) / 300));
                   y = yVal;
               }

               Point point = new Point(x, y);
               points.Add(point);
               x += perWidth;
           }

           return points;
       }


      /// <summary>
      /// 繪製折線圖
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void DrawChart_1(object sender, RoutedEventArgs e)
      {
          //清除畫布
          this.gdChartCanvas.Children.Clear();

          //Y值清單
          List<double> datas = new List<double> { 185, 130, 230, 140, 200, 60, 170, 150, 190, 150, 110, 220, 130, 190, 150 };

          //取得套用公式的Y轉變值
          PointCollection pointCollection = GetAllPoints(datas, 45, 100);

          Polyline polyline = new Polyline { Points = pointCollection, Stroke = new SolidColorBrush(Colors.Red) };
          this.gdChartCanvas.Children.Add(polyline);
      }




上述程式撰寫完畢後,就可以直接點選【折線圖繪製】按鈕,畫面馬上呈現折線圖,如下執行結果

image
image







網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen






2016年11月6日 星期日

Windows 10 UWP 存取 JSON 格式 - 程式實作講解(軟體開發、客製化軟體、程式設計、程式開發)

      在我們開發各種專案時,一定多少都會需要存取各種跨平台傳輸的資料,目前最普遍的傳輸格式為 XML 與 JSON , 而今天我想要深入講解在 Windows 10 Universal APP (UWP)平台下,如何讀取跟儲存 JSON 格式資料。

      images


    JSON 的全名為 Java Script Object Notation , 它是一種輕量級的資料傳輸交換格式語言,特點是容易閱讀、依字串為基礎,格式都是經過壓縮地所以在網路傳輸過程,佔用的頻寬極小,因此被廣泛地應用在跨平台、跨程式語言。
JSON 的格式在宣告一個類別/物件,是用 大括號 { };宣告一個陣列使用 中括號 [ ] ;而在大括號裡面,是使用 名稱 :值 ,下圖是官方的範例圖解釋
1356331778-696014507


例如 我在此 有個 員工類別 ,分別屬性有員工編號、姓名、職位、學歷,則對應的 JSON 格式為 
(JSON Code)
var empJsonObj = { “員工編號”:“emp001”, “姓名”: “台灣李奧納多,”“職位”: “技術總監”,"年齡”:33 } ;

接下來,就是要開始講解如何在 Windows 10 Universal APP (UWP)平台,存取 JSON 格式的支援與程式開發技巧。
在 Windows 10 UWP 平台,主要有 2 種技巧來存取 JSON 格式,第一種是使用 DataContractJsonSerializer (MSDN 介紹),透過 DataContractJsonSerializer 來對 JSON 數據進行序列化與反系列化動作 ;而第二種是使用 JsonObject 類別來自行定義 JSON 物件。這兩種方式我都會在這篇完整介紹。


1.透過 DataContractJsonSerializer 對 JSON 資料進行序列化與反序列化
      使用 DataContractJsonSerializer 類別來對 JSON 數據進行序列化與反序列化,這是最簡單的方式,所謂序列化過程就是把 實體類別物件 轉成 JSON 格式化的字串,反之 反序列化 過程,就是把 JSON 物件字串({ 名稱:值,名稱1:值1….}) 轉換成對應的 .NET 類別。

下圖,是實際程式範例
image


image



2.透過使用 JsonObject 類別來自行定義 JSON 物件
這個就讓我直接用實際程式碼來講解….
首先我先新增2個類別 ,分別為 員工類別 (Employee)和研發群組類別(RDGroup),在此我假設一個員工可以同時歸屬多於于一個研發群組以上。

底下為 員工類別程式碼:

   /// <summary>
   /// 員工類別
   /// </summary>
   public class Employee
   {
       private const string idKey = "id";
       private const string nameKey = "name";
       private const string rdKey = "rd";
       private const string ageKey = "age";
       private const string enableKey = "enable";

       public Employee()
       {
           Id = "";
           Name = "";
           RDGroups = new ObservableCollection<RDGroup>();
       }

       public Employee(string jsonString) : this()
       {
           JsonObject jsonObject = JsonObject.Parse(jsonString);
           Id = jsonObject.GetNamedString(idKey, "");
           Name = jsonObject.GetNamedString(nameKey, "");
           Age = jsonObject.GetNamedNumber(ageKey, 0);
           Enable = jsonObject.GetNamedBoolean(enableKey, false);

           foreach (IJsonValue jsonValue in jsonObject.GetNamedArray(rdKey, new JsonArray()))
           {
               if (jsonValue.ValueType == JsonValueType.Object)
               {
                   RDGroups.Add(new RDGroup(jsonValue.GetObject()));
               }
           }
       }
       public string Stringify()
       {
           JsonArray jsonArray = new JsonArray();
           foreach (RDGroup group in RDGroups)
           {
               jsonArray.Add(group.ToJsonObject());
           }

           JsonObject jsonObject = new JsonObject();
           jsonObject[idKey] = JsonValue.CreateStringValue(Id);
           jsonObject[nameKey] = JsonValue.CreateStringValue(Name);
           jsonObject[rdKey] = jsonArray;
           jsonObject[ageKey] = JsonValue.CreateNumberValue(Age);
           jsonObject[enableKey] = JsonValue.CreateBooleanValue(Enable);

           return jsonObject.Stringify();
       }

       public string Id { get; set; }
       public string Name { get; set; }
       public ObservableCollection<RDGroup> RDGroups { get; set; }
       public double Age { get; set; }
       public bool Enable { get; set; }

   }

底下為 研發群組類別(RDGroup)程式碼:

  /// <summary>
  /// 研發群組 類別,一個員工可以歸屬多個研發群組
  /// </summary>
  public class RDGroup
  {
      private const string idKey = "id";
      private const string rdKey = "rd";
      private const string nameKey = "name";

      public RDGroup()
      {
          Id = "";
          Name = "";
      }

      public RDGroup(JsonObject jsonObject)
      {
          JsonObject schoolObject = jsonObject.GetNamedObject(rdKey, null);
          if (schoolObject != null)
          {
              Id = schoolObject.GetNamedString(idKey, "");
              Name = schoolObject.GetNamedString(nameKey, "");
          }
      }

      public JsonObject ToJsonObject()
      {
          JsonObject schoolObject = new JsonObject();
          schoolObject.SetNamedValue(idKey, JsonValue.CreateStringValue(Id));
          schoolObject.SetNamedValue(nameKey, JsonValue.CreateStringValue(Name));

          JsonObject jsonObject = new JsonObject();
          jsonObject.SetNamedValue(rdKey, schoolObject);
          return jsonObject;
      }

      public string Id { get; set; }
      public string Name { get; set; }
  }



再來我設計一個前端UI界面,作為讀取與寫入 JSON 的案例實作

前端界面
image



在執行存檔時,我們將新增一個 Employee 類別,並透過 JsonObject 轉成(序列化)為 JSON 字串,儲存在設定檔。
image

而在【讀取資料】時,是透過 JsonObject 進行反序列化,將 Json String 轉回成 .Net 的 Employee 類別(Class)
image



程式執行結果畫面
存檔
image


讀取資料
image






網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen