Monday, August 21, 2017

HP 印表機和標楷體

使用者回報,為什麼 HP M501dn 列印標楷體竟然會異常,畫面如下,>.<

HP 印表機和標楷體-標楷體

解決方法有兩種
  1. 更新印表機韌體,請參考:HP LaserJet Pro 400 M401 韌體更新
  2. 修改印表機喜好設定
TrueType 字型:用裝置字型替換改為下載成軟體字型

HP 印表機和標楷體-印表機設定1

以點陣的方式列印 True Type 字型:停用改為啟用

HP 印表機和標楷體-印表機設定2

Thursday, August 17, 2017

[X.Form] MVVM 簡易練習

根據這教學 Xamrin Forms with Visual Studio Part 13 的練習,內容為使用者在 Entry 內輸入資料後,點選 Buuton 來顯示輸入資料,重點在於
  • INotifyPropertyChanged
public interface INotifyPropertyChanged
{
    event PropertyChangedEventHandler PropertyChanged;
}
  • ICommand
public interface ICommand
{
    void Execute(object arg);
    bool CanExecute(object arg)
    event EventHandler CanExecuteChanged; 
} 
Model
namespace MVVMPractice
{
    public class XF4_CommandModel
    {
        public string DemoData { get; set; }
    }
}
ViewModel
// ICommand Interface 在該 namespace
using System.Windows.Input;
// Command 在該 namepspace
using Xamarin.Forms;
// INotifyPropertyChanged 在該 namespace
using System.ComponentModel;

namespace MVVMPractice
{
    public class XF4_CommandViewModel : INotifyPropertyChanged
    {
        private XF4_CommandModel _model = new XF4_CommandModel();

        public string DemoData
        {
            get { return _model.DemoData; }
            set { _model.DemoData = value; }
        }

        public string _result;
        public string Result
        {
            get { return _result; }
            set
            {
                _result = value;
                // 要有 OnPropertyChanged lblResult 才會顯示資料喔
                OnPropertyChanged(nameof(Result));
            }
        }

        public ICommand CmdSave
        {
            get
            {
                return new Command(() =>
                {
                    Result = $"使用者輸入資料為:{_model.DemoData}";
                });
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string PropertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
        }
    }
}
Xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MVVMPractice"
             x:Class="MVVMPractice.XF4_Command">
    <ContentPage.Content>
        <StackLayout VerticalOptions="Center">
            <!--Entry.Mode 預設就是為 TwoWay-->
            <Entry Placeholder="請輸入資料" Text="{Binding DemoData}"/>
            <Button Command="{Binding CmdSave}" Text="顯示輸入資料"/>
            <Label x:Name="lblResult" Text="{Binding Result}" FontSize="Large"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>
執行結果

[X.Form] MVVM 簡易練習

Wednesday, August 16, 2017

[VSTS] 衝突解決

看該影片時 Git Fundamentals 發現介紹解決合併這部分有收穫,紀錄衝突解決的內容

該範例在專案中建立 class1.Add() 方法,並在 VS 和 VSTS 內進行修改,讓兩者發生衝突

在 VSTS 上把 int 宣告,改為 var 後進行 commit

[VSTS] 衝突解決-2


[VSTS] 衝突解決-3

Tuesday, August 15, 2017

[SQL] 複合索引效能

接獲同事訊問,為什麼這段 TSQL 短短的,竟然要跑到 8 秒以上,>.<
SELECT
    A.mtcode ,
    ISNULL(k.mtcode, '') AS checked
FROM 
    (
        SELECT
            M.MTCODE ,
            ISNULL(Q.TOTALQTY, 0) AS NOWQTY
        FROM MTDATA AS M
            JOIN VWSTOCKQTY AS Q ON M.MTCODE = Q.MTCODE
            JOIN VWMTMAGDEP AS P ON M.MTCODE = P.MTCODE
        WHERE M.DELMARK = ''
            AND P.WK_ID = 'D101'
            AND Q.TOTALQTY > 0
    ) AS A
    LEFT JOIN mtqtycheck AS k ON A.mtcode = k.mtcode AND k.year = '106' AND k.checked = 1
查看執行計畫和 Logical Read 發現,MtMagDep Table 的資料輸出爆量了

[SQL] 複合索引效能-1

確認 MtMagdep Table 上的 Index,發現 PK 是複合欄位,且竟然設反了,應該是物料 + 組別,設成組別 + 物料,修正順序後,再執行語法確認,結案

[SQL] 複合索引效能-2

附上該 MtMagdep Logical Read 和語法執行時間資訊

修正前修正後
時間8,237ms140ms
Logical Read217,824456

Monday, August 14, 2017

[VSTS] push 現有 repo

看該影片時 Git Fundamentals 發現把現有 repo push 到 GitHub 或 VSTS 上還蠻陌生的,筆記一下

在 VSTS 上建立新的 repo,會提供參考語法,方便把現有 repo push 上來,習慣開 repo 時都會一併建立 readme 和 gitignore,似乎都只 focus 在最下面建立 readme 和 gitignore,自動忽略上面的參考語法,Orz

[VSTS] push 現有 repo-2

建立一個有版控的 console 專案,並利用 git remote 語法建立 remote,再利用 git push 把 repo push 到 VSTS

[VSTS] push 現有 repo-3

在 VSTS 上就可以看見

[VSTS] push 現有 repo-4