軟體開發(軟件開發)

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

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

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

商用軟體-客製化設計

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

IOT 物聯網-系統開發

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

雲端VPS虛擬主機租用

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

ERP軟體客製化導入

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

搜尋引擎最佳化SEO

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

服務宗旨

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

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

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

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

顯示具有 網智數位 標籤的文章。 顯示所有文章
顯示具有 網智數位 標籤的文章。 顯示所有文章

2016年7月31日 星期日

VR 虛擬實境 程式開發合作案 【軟體開發(軟件開發)】

        非常感謝 清華同方集團電腦科技大廠在評估多家軟體公司開發經驗與團隊技術下,決定委託網智數位開發團隊進行程式開發 VR虛擬實境、Android APP軟體委外開發案、Windows 桌面應用軟體、智能設備遠端控制 一系列的專案委託案。




 

       我們一直突破開發技術、累積各種產業知識,而且在窗簾、窗材、拉門、布料業的商業管理軟體投入有特別的領域知識、也在圖控軟體(圖控軟件)、機械手臂、Android APP 、iPhone APP、3D列印 開發一直突破再創新,我們也堅持相信好的軟體可以協助企業,不管在管理營運角度、商品創新、決策分析等都絕對是不可缺少的關鍵因素,如果客戶您有任何軟體開發、程式開發委外需求,請聯繫我們讓我們協助您一起討論如何開發一個好的軟體來協助您。
     
網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2016年7月20日 星期三

網咖控制程式 - 軟體開發(軟件開發)

          近來陸續在談一個合作案,需要類似的網咖系統開發經驗,剛好我團隊有這方面豐富的經驗,因此也積極爭取合作的可能性,我團隊在軟體開發上面幾乎都是量身定做,尤其在商業軟體上在各特殊產業都是量身定做,並且投入相當大的分析能力,了解企業的領域知識、產品知識、企業流程,事實上這是極度花費腦力的過程,就連最簡單的企業報價與成本計算,常常我們遇到就需要分析很多零件、採購、人力知識,而這些都不是一般套裝軟體可以克服以及考慮到的,不過我團隊的深入了解需求、討論再討論,做到客戶喜歡用的軟體….

13690575_10206378717780023_5745537522239199354_n

13718698_10206378717860025_7464869737724020489_n

13754233_10206378717820024_2884354579424784502_n

           上圖軟體部分截圖,是我團隊開發的網咖程式,我們這方面的經驗可以協助客戶,集中式管理使用者的電腦,可以用在 AR/VR、飯店式管理系統應用等產業領域,如果有這方面需求,歡迎與我們聯繫。


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

2016年6月28日 星期二

業務擴展,辦公室地址遷移

親愛的客戶,因為業績的成長,公司辦公司地址遷移可以容納團隊更多人數的座位,目前正在陸續遷移至辦公室新地址,如果客戶您來訪時,請來至新辦公地址。

新公司地址:104 台北市中山區錦州街 25 號 5 樓


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

2016年5月31日 星期二

好的管理軟體絕對可以協作企業與店家提升管理績效

        網智數位-軟體開發團隊,累積了超過10年開發中小企業的管理軟體(軟件)委外案,有超過 8 成比例都是完全從無到有,量身訂做去了解客戶的營運流程、現行文件(例如 Excel、Word、PDF)、紙上紙本,大量收集後,跟業主不斷的溝通了解,並給出適當的系統開發建議,目的就是協助客戶從繁雜的作業流程、人工作賬、紙上作業、傳真文件等,開發客戶合適的管理軟體。
image
     
       上圖就是新竹與台南某廠商客戶,因為長期以來被大量客戶的文件測試報告、檢驗報告,各種客戶所該維護的專案、委託案、以及該專案需派工的檢驗人員、檢驗統計數字、是否需要複查等各種作業模式所困擾,以往光單單人工作業、紙本查詢可能就需要花上人力成本超過5~10天,而現在經過 網智數位-軟體開發團隊,進入分析與建議並開發該作業模式的管理系統軟體(軟件),該軟體可以協助客戶,進行企業的客戶管理(CRM)、以及迅速通知那些專案目前有發生需要追蹤、系統跑出各種統計圖表、歷年的專案報告匯出和匯入,案子的各式圖片管理等,迅速達到委託我們開發軟體的客戶管理績效,所以好的軟體管理系統是可以迅速提升企業的效率與效益。


(其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢




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

2016年5月18日 星期三

機械手臂 - 軟體開發(軟件開發)

          近來公司在中南部陸續成功洽談了幾個關於 Arduino、嵌入式工業的軟體開發合作案,幾乎都是針對生產線透過 機械手臂 的運用,來協助生產線更有效率、以及以往人工的耗時的作業模式,現階段越來越多客戶、廠商透過電腦、嵌入式系統、Arduino、樹莓機開發輔助系統….而我公司團隊也有許多非常有經驗工程師、顧問協助企業完成客製需求。







      
      下面影片為我團隊的顧問,在南港展覽館的機械手臂展示影片,如果您有任何嵌入式系統、機械手臂、Arduino的合作需求、開發需求,非常歡迎與 網智數位-軟體開發團隊,進一步聯繫…




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

2016年5月9日 星期一

十條可以提升效率的jQuery程式準則

       jQuery是開源軟體,使用MIT授權條款授權。[5] jQuery的語法設計使得許多操作變得容易,如操作文件(document)、選擇文件物件模型(DOM)元素、建立動畫效果、處理事件、以及開發Ajax程式。jQuery也提供了給開發人員在其上建立外掛模組的能力。這使開發人員可以對底層互動與動畫、高階效果和高階主題化的元件進行抽象化。模組化的方式使jQuery函式庫能夠建立功能強大的動態網頁以及網路應用程式
下載
微軟諾基亞已宣布在他們的平台上繫結jQuery。[6]微軟最初在Visual Studio中整合了jQuery[7]以便在微軟自己的ASP.NET AJAX框架和ASP.NET MVC Framework中使用,而諾基亞則在他的Web執行時元件開發平台中整合了jQuery[8]MediaWiki自從1.16版本後也開始使用jQuery[9]
jQuery 1.3版以後,引入全新的層疊樣式表(CSS)選擇器引擎Sizzle。[10] 同時不再提供Packed版本,因為解壓縮的消耗的時間,遠大於所節省的下載時間,且不利於除錯,且已有Google AJAX Libraries API等公開站台提供jQuery的js的參照服務,故Packed版本原本的優點已蕩然無存。
JQuery 是繼prototype之後又一個優秀的Javascript庫,而 jQuery 它是輕量級的js庫,它兼容CSS3,還兼容各種瀏覽器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及後續版本將不再支持IE6/7 /8瀏覽器。 jQuery使用者可以更方便地進行處理HTML(標准通用標記語言下的一個應用)、events、實現動畫效果,並且方便地為網站提供AJAX交互。 jQuery還有一個比較大的優勢是,它的文檔說明很全,而且各種應用也說得很詳細,同時還有許多成熟的插件可供選擇。 jQuery能夠使用戶的html頁面保持代碼和html內容分離,也就是說,不用再在html裡面插入一堆js來調用命令了,只需要定義id即可。
以下十項jQuery範例可以有效幫助大家的Web設計項目順利實現效率提升。
(一)檢測 IE 瀏覽器(Browser)

在進行CSS設計時,IE瀏覽器對開發者及設計師而言無疑是個麻煩。儘管IE6的黑暗時代已經過去,IE瀏覽器家族的人氣亦在不斷下滑,但我們仍然有必要對其進行檢測。當然,以下片段亦可用於檢測其它瀏覽器。

640
(二)平滑滾動至頁面頂部
以下是jQuery最為常見的一種實現效果:點擊一條鏈接以平滑滾動至頁面頂部。雖然沒什麼新鮮感可言,但每位開發者幾乎都用得上。

640
(三)保持始終處於頂部
以下程式碼例子是用來允許某一元素始終處於頁面頂部。可以想的到,其非常適合處理導航功能表、工具欄或者其它重要訊息。

640-2

(四)替換 HTML Element  標籤 Tag
jQuery能夠非常輕鬆地實現html標籤替換,而這也將為我們帶來更多新的可能。
640-3


(五)檢測屏幕寬度
現在移動設備的人氣幾乎已經超過了傳統電腦設備,因此對小型屏幕的尺寸進行檢測就變得非常重要。幸運的是,我們可以利用jQuery輕鬆實現這項功能。




640-4
(六)自動修復損壞圖片
如果大家的站點非常龐大而且已經上線數年,那麼其中或多或少會出現圖片損壞的情況。這項功能可以檢測損壞圖片並根據我們的選擇加以替換。
640-5


(七)檢測複製、貼上與剪下的鍵盤操作
利用jQuery,大家可以非常輕鬆地檢測到選定元素的複製、貼上與剪下的鍵盤操作。
640-6


(八)自動為外部超鏈結增加 Target=“blank” 的屬性
在鏈接至外部站點時,大家可能希望使用target="blank"屬性以確保在新的選項卡中打開頁面。問題在於,target="blank"屬性並未經過W3C認證。 jQuery能夠幫上大忙:以下片段能夠檢測當前鏈接是否指向外部,如果是則自動為其添加target="blank"屬性。
640-7


(九)懸停時淡入/淡出
又是另一項“經典”效果,大家可以利用以下片段隨時加以運用。
640-7



(十)停用文字框/密碼輸入中的空格



無論是電子郵件、用戶名還是密碼,很多常見字段都不需要使用空格。以下代碼能夠輕鬆禁用選定輸入內容中的全部空格。
640-8

參考原文網址:http://www.catswhocode.com/blog/10-jquery-snippets-for-efficient-web-development
 


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

2016年4月14日 星期四

Android 實作教學 - 隨機驗證碼(軟體開發)

一、問題描述
熟悉web開發中高手們都知道為了防止惡意破解、惡意提交、刷票等我們在提交表單資料時,都會使用隨機驗證碼功能。在Android應用中我們同樣需要這一功能,該如何實現呢,下面我們就自定義一個隨機驗證碼View控件實現這一需求,並且具備通用性,需要的時候在界面中直接加入這個View組件即可。

下載
二、案例介紹
案例運行效果
案例所涉及組件
1、CheckView 自定義的驗證碼控件,主要重寫onDraw方法實現圖形繪製
2、Config:用於對驗證碼控件參數的配置,像畫點點數、劃線數、背景顏色的設置
3、CheckUtil:驗證碼相關工具類,實現例如隨機的點坐標、隨機線段起始和結束點坐標、驗證碼校驗等功能
4、MainActivity:測試應用
三、功能實現
1、撰寫 Config 組件
/*** 功能:用於對驗證碼控件參數的配置
* */public class Config
{ // 驗證碼更新時間 public static final int PTEDE_TIME = 1200;
  // 點數設置 public static final int POINT_NUM = 100;
  // 線段數設置 public static final int LINE_NUM = 2;
  //設置背景顏色 public static final int COLOR=Color.BLUE; //隨機數據長度 public static int TEXT_LENGTH=4;
  //設置驗證碼字體大小 public static int TEXT_SIZE=30;
  }

2、CheckUtil組件
/*** 功能:驗證碼相關工具類
* */public class CheckUtil
{ /** * 產生隨機數字 * @return
*/ public static int [] getCheckNum()
{ int [] tempCheckNum = new int[Config.TEXT_LENGTH];
   for(int i = 0; i < Config.TEXT_LENGTH; i++)
{ tempCheckNum[i] = (int) (Math.random() * 10);
   }
  return tempCheckNum; }
/**
* 隨機產生劃線的起始點坐標和結束點坐標
* @param height 傳入CheckView的高度值
* @param width 傳入CheckView的寬度值
* @return 起始點坐標和結束點坐標
*/ public static int[] getLine(int height, int width)
{ int [] tempCheckNum = {0,0,0,0};
  for(int i = 0; i < 4; i+=2)
{ tempCheckNum[i] = (int) (Math.random() * width); tempCheckNum[i + 1] = (int) (Math.random() * height); }
return tempCheckNum; }
/**
* 隨機產生點的圓心點坐標
* @param height 傳入CheckView的高度值
* @param width 傳入CheckView的寬度值
* @return
*/ public static int[] getPoint(int height, int width)
{ int [] tempCheckNum = {0,0,0,0}; tempCheckNum[0] = (int) (Math.random() * width); tempCheckNum[1] = (int) (Math.random() * height ); return tempCheckNum; }
/**
* 驗證是否正確
* @param userCheck 用戶輸入的驗證碼
* @param checkNum 驗證控件產生的隨機數
* @return
*/ public static boolean checkNum(String userCheck, int[] checkNum){ if(userCheck.length() != 4 )
{
      return false; } String checkString = "";
  for (int i = 0; i < 4; i++)
{ checkString += checkNum[i]; }
  if(userCheck.equals(checkString))
{ return true; }
  else { return false; }
}
/**
* 計算驗證碼的繪製y點位置
* @param height 傳入CheckView的高度值
* @return
*/ public static int getPositon(int height)
{ int tempPositoin = (int) (Math.random() * height);
   if(tempPositoin < 20){ tempPositoin += 20; }
  return tempPositoin; }
}

3、自定義驗證碼控件CheckView
public class CheckView extends View
{

  Context mContext;
int [] CheckNum = null;
Paint mTempPaint = new Paint();
 
// 驗證碼
public CheckView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context; mTempPaint.setAntiAlias​​(true);
mTempPaint.setTextSize(Config.TEXT_SIZE);
mTempPaint.setStrokeWidth(3);
}

public void onDraw(Canvas canvas)
{
canvas.drawColor(Config.COLOR);
final int height = getHeight();

//獲得CheckView控件的高度
final int width = getWidth();
//獲得CheckView控件的寬度
int dx = 40;
for(int i = 0; i < 4; i ++)
{
//繪製驗證控件上的文本
canvas.drawText("" + CheckNum[i], dx, CheckUtil.getPositon(height), mTempPaint);
dx += width/ 5;
}

int [] line;

for(int i = 0; i < Config.LINE_NUM; i ++)
{
//劃線
line = CheckUtil.getLine(height, width);
canvas.drawLine(line[0], line[1], line[2], line[3], mTempPaint); }
 
// 繪製小圓點 int [] point; for(int i = 0; i < Config.POINT_NUM; i ++)
{
//畫點
point=CheckUtil.getPoint(height, width);
canvas.drawCircle(point[0], point[1], 1, mTempPaint);
}
}

public void setCheckNum(int [] chenckNum)
{
//設置驗證碼
CheckNum = chenckNum;
}
public int[] getCheckNum()
{
    //獲得驗證碼
    return CheckNum;
}
public void invaliChenkNum()
{
 
invalidate(); }
}


4、編寫MainActivity測試代碼
public class MainActivity extends Activity implements View.OnClickListener
{
private CheckAction mCheckView ;
private TextView mShowPassViwe;
private EditText mEditPass;
private Button mSubmit;
private Button mRef;

// 驗證碼:
private int [] checkNum =null;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
    initView(); initCheckNum();
}

public void initView()
{
mCheckView = (CheckView) findViewById(R.id.checkView);
mShowPassViwe = (TextView) findViewById(R.id.checkpass);
mEditPass = (EditText) findViewById(R.id.checkTest);
mSubmit = (Button) findViewById(R.id.submit);
mRef = (Button) findViewById(R.id.ref);
mSubmit.setOnClickListener(this);
mRef.setOnClickListener(this);
}

// 初始化驗證碼並且刷新界面
public void initCheckNum()
{
checkNum = CheckUtil.getCheckNum();
mCheckView.setCheckNum(checkNum);
mCheckView.invaliChenkNum();
}

public void onClick(View v)
{

switch (v.getId())
{
    case R.id.submit:
    String erInput = mEditPass.getText().toString();
if(CheckUtil.checkNum(userInput, checkNum))
{
setPassString("通過");
Toast.makeText(this, "通過", 1200 ).show();
}
else
{
setPassString("未通過");
Toast.makeText(this, "未通過", 1200).show();
}
break;
case R.id.ref: initCheckNum();
break;
default: break;
}

}

public void setPassString(String passString)
{
mShowPassViwe.setText(passString);
}

}


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

2016年4月10日 星期日

將 JSON, XML, CSV 格式文件導入 MySQL 【軟體開發】

      讓我們從外部資料(Data)導入(import)資料庫是在資料庫程式開發應用中一個很常見的場景,其實這就是在資料庫的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是說,我們將特定結構(structure)或者格式(format)的資料數據導入某個目的地(比如資料庫,在這裡我們討論與示範的資料庫類型為 MySQL )。
   640
這篇文章我們要討論的內容,是如何方​​便地將多種格式(JSON, Text, XML, CSV)的數據導入MySQL資料庫裡。
1. 將Text文件(包括CSV文​​件)導入MySQL
這裡我們的討論是基於一個假定,Text file和CSV file是有著比較規範的格式的(properly formatted),比如說每行的每個數據域(field)之間是由一個共同的分隔符(比如tab : \t)分隔的。
那麼首先,你需要根據你的資料的格式(有哪些域),來設計好資料庫的對應的表 (的Schema)。
舉個例子,要處理的Text文件或者CSV文件是以\t作為分隔符的,每行有id, name, balance這麼三個數據域,那麼首先我們需要在資料庫中新增這個表(TABLE):
CREATE TABLE sometable(id INT, name VARCHAR(255), balance DECIMAL(8,4));
在我們新增成功以後就可以導入了。操作方式很簡單:
LOAD DATA LOCAL INFILE '你的文件路徑(如~/file.csv)' INTO TABLE sometable FIELDS TERMINATED BY '\t' [ENCLOSED BY '"'(可選)] LINES TERMINATED BY '\n' (id, name , balance)
這裡要注意的是,我們需要開啟local-infile這個MySQL的配置參數,才能夠成功導入。究其原因,從MySQL的Manual中可以看到這麼一段話:
LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.
這是MySQL出於安全考慮的默認配置。因此,我們需要在配置文件my.cnf中(以Debian發行版的Linux, 如Ubuntu為例, 即是在/etc/my.cnf中),確保:
local-infile=1
抑或是在命令行啟動MySQL時加上--local-infile這一項:
mysql --local-infile -uroot -pyourpwd yourdbname
此外,我們也可以使用MySQL的一個官方導入程序 mysqlimport,這個程序本質上就是為LOAD DATA FILE提供了一個命令行的interface,很容易理解,我們這裡就不再詳述。
2. 將XML文件導入MySQL
這件事的完成方式,與我們的XML的形式有著很大的關係。
舉個例子說,當你的XML數據文件有著很非常規範的格式,比如:
<?xml version="1.0"?>
  <row>
    <field name="id">1</field>
    <field name="name">Free</field>
    <field name="balance">2333.3333</field>
   </row>
  <row>
    <field name="id">2</field>
    <field name="name">Niki</field>
    <field name="balance">1289.2333</field>
  </row>
或者
<row column1="value1" column2="value2" .../>
我們就可以很方便使用LOAD XML來導入,這裡可以參見MySQL的官方手冊--LOAD XML Syntax。
然而我們可能有另外一些需求,比如說,我們可能會想要將XML文件的域映射到不同名字的列(TABLE COLUMN)之中。這裡要注意,MySQL v5.0.7以後,MySQL的Stored Procedure中不能再運行LOAD XML INFILE 或者LOAD DATA INFILE。所以轉換的程序(procedure)的編寫方式與在此之前有所不同。這裡,我們需要使用 Load_File()和ExtractValue()這兩個函數。
以下是一個示例XML文件和程序:
文件:
<?xml version="1.0"?>
<some_list>
  <someone id="1" fname="Rob" lname="Gravelle"/>
  <someone id="2" fname="Al" lname="Bundy"/>
  <someone id="3" fname="Little" lname="Richard"/>
</some_list>
程序:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `import_some_xml`(path varchar(255), node varchar(255))
BEGIN
    declare xml_content text;
    declare v_row_index int unsigned default 0;
    declare v_row_count int unsigned;
    declare v_xpath_row varchar(255);
 
    set xml_content = load_file(path);
 
    -- calculate the number of ro​​w elements.
    set v_row_count = extractValue(xml_content, concat('count(', node, ')'));
    
    -- loop through all the row elements
    while v_row_index < v_row_count do
        set v_row_index = v_row_index + 1;
        set v_xpath_row = concat(node​​, '[', v_row_index, ']/@*');
        insert into applicants values​​ (
            extractValue(xml_content, concat(v_xpath_row, '[1]')),
            extractValue(xml_content, concat(v_xpath_row, '[2]')),
            extractValue(xml_content, concat(v_xpath_row, '[3]'))
        );
    end while;
END
在MySQL中,使用它進行導入:
call import_some_xml('你的XML文件路徑', '/some_list/someone');
程序相當的直白,只要了解一下MySQL的腳本編寫即可。
這裡提一下DELIMITER $$。我們知道MySQL的命令分隔符默認為分號,然而腳本中很顯然是有分號的,但是我們並不希望立即執行,所以我們需要臨時更改分隔符。
3. 將JSON文件導入MySQL
如何將JSON文件導入MySQL中,是一個很有趣的話題。 JSON是一種現在相當常用的文件結構,所以掌握它的導入具有比較廣泛的意義。
很多時候,我們處理的JSON數據是以如下形式出現的:
{"name":"Julia","gender":"female"}
{"name":"Alice","gender":"female"}
{"name":"Bob","gender":"male"}
{"name":"Julian","gender":"male"}
而並不是規整的[{},{},{},{}](一些NoSQL數據庫的Export)。
這樣的形勢對於載入有一個好處:因為每一行是一個JSON Object,所以我們便可以按行處理此文件,而不需要因為JSON的嚴格結構將整個文件(比如一個許多G的.json文件)全部載入。
方式一 使用common-schema
common-schema是一個應用很廣泛的MySQL的框架,它有著很豐富的功能和詳細的文檔。我們可以使用它的JSON解析的功能。 (它還具有JSON轉換成XML等等方便的功能)
具體說來,將common-schema導入之後,使用它的extract_json_value函數即可。源碼中:
create function extract_json_value(
    json_text text charset utf8,
    xpath text charset utf8
) returns text charset utf8
該函數接受兩個參數,一個是json_text,表示json文件的內容,另一個是xpath,表示數據的結構(這裡可以類比XML文件的處理)。很多讀者應該知道,XPath是用來對XML中的元素進行定位的,這裡也可以作一樣的理解。
以本段開始的幾行JSON為例,這裡common-schema的使用如下例:
select common_schema.extract_json_value(f.event_data,'/name') as name, common_schema.extract_json_value(f.event_data,'/gender') as gender, sum(f.event_count) as event_count from json_event_fact f group by name, gender;
關於event_data,我們需要先理解LOAD DATA INFILE是一個event,不同的event type對應不同的event data。這部分知識可以參看Event Data for Specific Event Types
如果感興趣,可以參看其源碼。參看一個受到廣泛使用的項目的源碼,對於自身成長是很有益的。
當然了,我們也可以像之前處理XML文件導入一樣,自己編寫程序。這里便不再給出實例程序,有興趣的讀者可以自行編寫或者跟筆者交流。
方式二 使用mysqljsonimport
這是Anders Karlsson的一個完成度很高的作品。這一份程序由C寫成。它依賴於一個JSON Parser,Jansson。他們都有著比較好的維護和文檔,所以使用上體驗很好。
mysqljsonimport的下載在SourceForge上。具體使用參照其文檔即可。
為了方便不熟悉源碼安裝的朋友,筆者在這裡提一下安裝流程和注意事項。
安裝命令順序如下:
$ wget http://sourceforge.net/projects/mysqljson/files/myjsonimport_1.6/mysqljsonimport-1.6.tar.gz
$ tar xvfz mysqljsonimport-1.6.tar.gz
$ cd mysqljsonimport-1.6
$ ./configure –-with-mysql=/xxx/mysql
$ make
$ make check
$ sudo make install
--with-mysql這一步不是必要的,只要你安裝的mysql的路徑是系統的默認路徑。很關鍵的,而且很容易被不熟悉的朋友忽略的是,這一個C程序要成功編譯和運行,是需要MySQL的C API的,所以需要安裝的依賴,除了jansson,還有libmysqlclient-dev。
jansson的安裝就是簡單的源碼安裝,libmysqlclient-dev則可以使用包管理工具(比如ubuntu中使用apt-get即可;編譯和安裝前,建議先sudo apt-get update以避免不必要的麻煩)。
導入命令:
$ ./mysqljsonimport –-database test –-table tablename jsonfilename
還有一個parser,作者是Kazuho,感興趣的讀者可以參看一下,他的相關博文是mysql_json - a MySQL UDF for parsing JSON ,github項目是mysql_json。
4. 使用MySQL workbench
Workbench這個工具對於許多不熟悉SQL語言或者命令行的朋友還是很方便和友好的。利用它,可以方便地導入和導出CSV和JSON文件。
具體操作圖例參見MySQL官方手冊即可:Table Data Export and Import Wizard,這裡不再贅述。

總結
本文介紹了將不同格式(JSON, Text, XML, CSV)的文件導入MySQL數據庫的一些詳細手段,並進行了一些分析,目的在於幫助讀者掃除一些導入的障礙,理清一些概念。之所以沒有討論導出,是因為導出是一個MySQL到外的操作,是以MySQL本身為轉移的,只要參考MySQL本身的機理即可。
真正對於大量數據的導入導出,需要思考的問題會很多(比如說在導入時,如何考慮Sharding),這需要另開一篇討論了。

來源:goo.gl/ttDJkh



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

2016年3月28日 星期一

新技術、新科技、ERP的重要性將是更重要

        我們現在會不斷的定期常聽到關於最新的技術方面,尤其到現在幾乎都在談雲端計算,公司在實施 IT 功能部署時,可以不需購買硬體設備、只需要使用雲端系統,儘管我們面臨著很多的喧嘩與騷動,大多數 IT 企業仍然將他們大多數的時間和金錢花費在更現實的應用開發上,ERP系統就是最大的開發成果之一。雲端技術的支持者特別提出了一個看似更加令人信服的理由,那就是大型的系統,就像ERP正在面臨著滅亡,正在被雲應用程序所替代,因為雲應用程序可以快速部署和集成。當你發現他需要昂貴的升級和持續性的維護時,你可能會想,ERP在這一點上是否仍然重要。





        思考為何要導入ERP的“關鍵因素”
在考慮任何重大的IT投資時,關鍵的因素就是要非常明白它可以解決哪些企業與業務流程問題,對於ERP來說,“為什麼”,通常歸結為幾個關鍵領域的組合:處理日益複雜的企業流程,對於集中和整合企業資料,進而幫助制定決策,從“燃燒”的平台過渡,緩和順從性或法律方面的問題。 ERP實施中最合法的“原因”應該是整合資料,以便更好的製定決策。而其他的擔憂是合法性問題,在雲計算和商品應用的時代,集中的,一體化的基本業務應用是一個關鍵項目,它可以使ERP保持相關性和高價值。

規模的問題
部分ERP問題的答案是貴公司的規模和復雜性。幾十年來的主要ERP使用者都一直在推動著中型和小型業務市場的發展,按照市場的規模對他們的主流包裝按比例縮小版本。而像微軟這樣的公司在這個空間內已經很好的完成,更大和更複雜的系統(我正在審視的是SAP和Oracle)一直不太成功。
記得曾經有一個相當明顯的“臨界點”,其中一家公司的規模和復雜性推動其進入到SAP或Oracle的懷抱,這一條線已模糊不清,因為中間層的應用者都提高了他們的能力,像Salesforce這樣的雲服務提供商都已經合法進入到曾經是內部軟體的專屬領域。假設,ERP的關鍵資產是一個綜合性的平台,它提高您的決策,如果您的公司在沒有ERP的情況下,有正確的數據來支持其決策的進程,那麼我們就沒有必要投入巨大的投資,除非其他的辦法都已經用盡。

進行大檢查
雖然新安裝的一個主要的ERP系統的原因已經減少,但是這一點上,建議CIO們放棄現有的ERP安裝是一種目光短淺的行為。在許多的ERP部署中,初始部署工作的困難是,在進行部署時,已經付出了巨大的代價,因此我們不能為了取得一點點的提高而在很大程度上忽略了ERP。在進行初始部署時,只要我們執行了“大檢查”,就應該採用ERP,放棄ERP是一種完全錯誤的做法,因為額外的改進提高相比而言是非常廉價的。努力優化和普遍有效的ERP安裝可能會收穫未使用的數據,並能支持更有效的決策和分析。如果我必須確定的話,我猜大多數企業使用的ERP的功能少於30%,基本上是把大部分的投資都擱置不用了。

是什麼徹底變了嗎?
記得從ERP的鼎盛時期以來,在技術方面都有很多重大變化,這些變化影響到了決策的製定決策過程,決定是否要安裝一個新的ERP,或進行主要增強,比如添加一個新的核心模塊。儘管人們進行了​​大肆的炒作,我們可以相信考慮放棄現有的ERP,並建議尋找那些可以用最少的投資來提高報告,分析和資料採集的領域,這是不成熟的觀點。畢竟,ERP的集成應用程序和資料的核心承諾仍然是一項雲計算解決方案的資產,一些新興技術還不能複制。


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


2016年3月11日 星期五

印刷行業、飾品業 軟體解決方案

          昨天有個客戶聯繫我,該客戶是個傳統的印刷業,因為在製程上面以及原物料、人力管控一直處於混亂,也用過其他知名的ERP、套裝管理軟體系統,但始終無法很好適用該公司的內部作業流程,因此聯繫我,想深入了解合作的可能性。
SNAGHTML954cd62
           我才思考過,我們曾經開發一個印刷、飾品業的ERP系統,因此特別約了時間 Demo 以前的解決方案,但我相信該行業一定很多要客製化,這也是 網智數位-軟體開發 團隊的優勢,可以從無到有,從各部門分析作業流程跟客製化軟體。
          好的軟體,不論是管理上、成本管控上、人力資源上,我相信一定都是長期的投資,


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

2015年12月25日 星期五

[ ERP/MRP 系統 ] - 專案導入深入剖析

       資訊化/e化數位管理的重要性在當今科技興邦時代,對企業經營管理來說有著舉足輕重的作用。根據以往經驗,企業對資訊化管理ERP管理軟件的選擇產品品牌與軟體開發商以及顧問實施在不同的企業領域間都有著不同的特點,然而有些企業能夠有效地很好的實施運作ERP來管理企業提升企業經營效益,而有些企業卻無法運作起來,甚至企業管理效益呈現減分效果,讓我從根本上分析與說明,我們可以非常清楚地看到以下幾個方面來看台灣中小型企業如何成功導入ERP管理軟體、以及量身訂做的系統軟體。





 
       首先從實施ERP專案項目的公司自身特點來剖析。業界流傳很廣的一句話是“三分技能,七分管理,十二分數據”,假如公司輸入體系的是廢物,輸出的也必定是廢物。由此可見,基礎資料數據對ERP體系的重要性。數據如人體的血液,是體系運轉的支撐和條件,根底數據則是體系訊息的根本源頭,由此構築一致的訊息同享管道。但是,根底數據處理是導入實施過程中條理最多、工作量最大、耗時最長、涉及面最廣、最容易犯錯的地方。能夠說,形成專案項目的延期,體係不能順暢切換,或體系用不起來,多半是由於基礎數據源頭不精確、或者不完整。
 
        第二,公司ERP專案項目負責人的知識水平和管理水平層次不齊,流動性過大。 ERP專案總負責人通常由公司“一把手”或主管公司資訊化的高階主管(如總經理、副總、協理等級)或廠長、副廠長來負責擔任,這也是保證ERP導入實施成功的關鍵成功因素,可是假如該負責人僅僅曉得公司需要資訊化而不明白如何有效資訊化,從各種管道都能夠曉得ERP體系卻不曉得如何通過ERP體系在本公司實施,就會使公司在資訊花的導入過程上犯頭痛醫頭,腳痛醫腳的假象,使之擬定的資訊化推行方針與方案沒有連續性,更不會立足本公司的環境做出體系科學的IT實施計劃和實施方法。並且一旦ERP專案項目負責人離任或退休,取而代之的是一個對資訊化持對立觀點的領導者,這樣一來,ERP專案項目就會流失,即便項目現已正常運轉,也會由於某種原因而停止運作。
 
       第三,公司ERP專案項目技術維護人員的流失,我們眾所周知,技術維護人員的流失在導入實施ERP的公司中已是普遍存在的現象,也是許多公司最為煩惱也百般無奈的工作,因而,一個公司導入實施ERP管理系統後,假如不能夠及時提高ERP管理體系技術維護人員的待遇或對他們進行必要的關心,這些人員就會流失到軟體廠商或IT顧問管理公司中去,而一套正運轉良好的ERP管理軟體(軟件)系統,能夠由於公司ERP技術維護人員的流失而宣告失敗。因而,防止ERP管理過程與運作發生錯亂及技術維護人才的流失,才是真正公司必須要面臨的新課題和重要使命,所以不止導入軟體(軟件),人力發展與提升、留才激勵都是系統成功與失敗的關鍵因子。



(其他參考文章)MPS主生產計畫專文介紹(一)MRPⅡ/ERP 能力需求計畫原理庫存管理-概念與釐清庫存管理探討-VMI真正的庫存量形成探討庫存管理的中樞控管法則(上)庫存管理的中樞控管法則(下)庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)BOM表管理與設定﹣輔料是否需輸入BOM何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】ERP 產品成本管理與計算庫存量正確性衡量法則粗能力需求計畫(RCCP) - 專文介紹如何利用軟體來協助企業銷售統計和分析開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)ERP 各種計劃階段的差異ERP 系統的淺談與優勢[ ERP/MRP 系統 ] - 專案導入深入剖析




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

【Excel - 樞紐分析】二維轉一維技巧

        當我們在做資料分析時,我相信最多人常用的還是…Excel ,今天我想花一點時間寫篇教學文件,介紹如何透過 Excel 的樞紐分析表和樞紐分析圖精靈來將二維的分析表轉換成一維的資料…. 
        在這邊我是根據Excel 2013版本為例,首先我們必須先把樞紐分析表和樞紐分析圖精靈 工具圖示新增到工具列區,首先我們先到 Excel –> 檔案 

圖-1
image
滑鼠點選【選項】 
圖-2
image
點選Excel選項 –> 自訂功能區,在【由此選擇命令】下列選項,選擇為【不在功能區的命令】 
圖-3
image
在【不在功能區的命令】的所有功能選項,尋找【樞紐分析表和樞紐分析圖精靈】選項,然後在右邊的【自訂功能區】下列選項展開【資料】選項,如上圖…

接著點選下面的【新增群組】,並更名為 【樞紐分析表與圖精靈】,如下圖 
圖-4
image

再將 圖-3 步驟,所選取的【樞紐分析表和樞紐分析圖精靈】選項,加入(新增)到【樞紐分析表與圖精靈】選項,如下圖 

圖-5
image

最後執行【確定】按鈕,就可以看到在【資料】區域有出現【樞紐分析表和樞紐分析圖精靈】圖示 
圖-6
image
經過上述步驟1~6,我們把Excel隱藏的樞紐精靈顯示出來了,再來完成我們的任務,二維轉一維資料….
在這邊我用一個客戶從2011年到2015年的全國主要經銷商的營業額為為案例 
圖-7
image
有了二維表格後,我們開始進行轉成一維資料表格….
執行【樞紐分析表和樞紐分析圖精靈】圖示 
圖-8
image

圖-9
image

圖-10
image
選取 Excel 表格範圍 A1:F8

圖-11
image

圖-12
image


圖-13
image


圖-14,精靈完成結果
image


最後一個步驟哦,也是最神奇的事情,就是我們滑鼠點選 G12 儲存格,Excel 就會自動幫我們轉成原始一維資料表格
image


我們在分別將【列】、【爛】、【值】更名為【縣市】、【年度】、【營業額】
image
經過這樣神奇的樞紐分析圖表精靈,就完成我們的二維轉成一維資料表格式..


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

2015年12月4日 星期五

圖控軟體﹣監控系統軟體開發


圖控軟體﹣監控系統軟體開發

         今年,網智數位軟體研發中心跟台灣綠能產業的先行者同時也是儲冰系統、冰球式儲冰(ice ball thermal storage)設備、潔淨室相關設備的大廠 奇立事業股份有限公司,正式合作開發一系列的圖控軟體、監控系統軟體專案,團隊將投入多年的軟體開發經驗以及硬體設備整合,也特別感謝客戶給我們機會讓我們投入專業知識。

            





2014年3月15日 星期六

[資訊安全]如何避免或破解Netcut網路剪刀手(ARP Spoofing)造成的斷線情形


要破解使用Netcut造成的斷線問題,必須先了解Netcut的運作原理。由於Netcut使用的是ARP spoofing封包造成目標主機ARP table記錄錯誤來達成斷線目的,因此必須先由ARP協議開始說明。
在乙太網路上僅僅知道某台主機的IP address,並不能立即將封包傳送過去,必須先查明該主機的實體位址(Physical address / MAC address)才能真正發送出去,而ARP協議的功用就是在於將IP address轉換成實體位址。

網路上每一台主機都有一個ARP table,此table中記錄了最近一段時間裡其它IP address及其MAC address的對應關係。如果本機想跟某一台主機通信,則會先在ARP table中查尋對應目的主機IP address的MAC address,如果該對應記錄存在,則直接將目的主機的MAC address填入Data Link層的封包表頭中,然後將封包發送出去;如果該對應記錄不存在,則會向本網段廣播一個ARP請求封包,當目的主機聽見該請求封包後,會將本身的 MAC address填入封包並用廣播方式回送出去,本機收到此回應封包後,就會將相關訊息記錄在ARP table中,然後將目的主機的MAC address填入Data Link層的封包表頭裡。

由於ARP請求封包發送端只管接收回應訊息,卻無法分辨訊息的真偽,因此第三方主機只要建構一個ARP spoofing封包,就可以造成請求端的ARP table資訊錯誤。由於MAC address不正確,所以封包就再也無法傳送到目的主機上,這就是Netcut造成連線中斷的原因。

舉例來說,裝有Netcut的A主機向受害B主機發送假的ARP訊息,使得B主機上ARP table中對應到閘道器IP address的MAC address,更新成錯誤的MAC address。由於B主機上網必須透過閘道器傳送,閘道器的MAC address資訊錯誤,當然會造成B主機的封包再也無法傳送到閘道器上,原本建立好的連線也會因為timeout而導致斷線的情形發生。

知道Netcut的運作原理了,可是要怎樣才能預防或解決被Netcut斷線的問題呢?其實只要下達一個小小的指令就可以對Netcut完全免疫了~~方法很簡單,由於Netcut的工作原理是透過假造ARP封包,造成你主機上的ARP table記錄到錯誤的閘道器MAC address,藉此讓你的主機跟目地主機間的往來封包發生中斷,所以你只要將正確的對應位址設定成static記錄就可以避免狀況發生。

設定指令如下:
arp -s 閘道器IP address 閘道器MAC address

舉例來說,假設閘道器的IP address是192.168.88.254,打開命令提示字元,執行ping 192.168.88.254,只要ping得通就可以得到正確的閘道器MAC address。這時執行 arp -a 就可以查出192.168.88.254的對應MAC address(就是Physical Address)。例如192.168.88.254的MAC address是00-90-cc-4f-db-18,那麼只要執行 arp -s 192.168.88.254 00-90-cc-4f-db-18 就搞定了。

假如你的主機已經被斷線,這時該怎麼辦呢?很簡單,你只要借用同網段的其他主機查詢閘道器的MAC address,然後用上述方法將正確的對應資訊加入到你的主機上就行了。

注意:如果主機的閘道器IP address改變,MAC address通常也會跟著變動,這時只要下達 arp -d 就可以將原先設定的ARP table對應資訊清除掉。


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