2014年9月21日 星期日

管住自己嘴的21戒!

網路上看到的,自我反省

1、戒多言:說話不要太多,言多必失。
2、戒輕言:不要輕率地講話,輕言的人會召來責怪和羞辱。
3、戒狂言:不要不知輕重,胡侃亂說。胡侃亂說,往往後悔。
4、戒雜言:說話不可雜亂無章。雜亂無章,就會言不及義,傷害自己的美德。
5、戒戲言:不要不顧分寸地開玩笑,否則會引起沖突,招來禍害。
6、戒直言:不要不顧後果地直言不諱,否則也會引起麻煩。
7、戒盡言:說話要含蓄,不要不留有余地。
8、戒漏言:不要泄露機密。事以密成,語以漏敗。
9、戒惡言:不說無禮中傷的話,不要惡語傷人。(刀瘡易沒,惡語難消.)
10、戒巧言:不要花言巧語。花言巧語的人,必然虛偽。
11、戒矜言:不要驕傲自滿,自以為是。自矜自誇,是涵養不夠的表現。
12、戒讒言:不要背後說別人的壞話。背後說人壞話,會弄得天下都不太平。
13、戒訐言:不要攻人短處,揭人瘡疤。揭人瘡疤的人,招人痛恨,害人害己。

14、戒輕諾之言:不要輕易向人許願。輕易許願,會喪失信用。
15、戒強聒之言:不要嘮嘮刀刀,別人不願聽也說個不停,使人厭煩。
16、戒譏評之言:不要說譏諷別人的話。喜歡譏諷議論別人的人,對自己的要求往往馬虎。
17、戒出位之言:不要說不符合自己身份、地位的話。
18、戒狎下之言:不要對下屬講過份親密的話,以免下屬迎合妳而落入圈套。
19、戒諂諛之言:不要說吹捧奉承別人的話。吹捧奉承別人,是人品卑微的表現。
20、戒卑屈之言:不要低三下四,說奴言婢膝的話,因為德厚者無卑詞。
21、戒取怨之言:不要說招人怨恨的話,播下使人怨恨的種子。

2014年9月9日 星期二

商用書信 (請知悉, 信件附上 ...)

Kindly be advised that ... 請知悉
  Kindly be advised that ...


Enclosed herewith
1. Please find two samples enclosed herewith.
寄上样品两种,请查收.
   
2. Enclosed herewith is a twenty - fen stamp.
随函附上20分邮票一张.
   
3. A list of the names of the contributors is enclosed herewith.
随信附上捐款人的名单.

4. Enclosed with please find something about

Attachd herewith --

So, please find herewith attached the relevant inspection booking form for your kindly confirmation

2014年8月16日 星期六

2 Cache Pattenrs

Cache Pattern

  a. Load All Data in Cache ( In order to save the over amount access for DB)
  b. Load Data On Demand in Cache ( In order to save the over amount access for DB)
 
Key

  Target Cache
  Source DB Record
 
Solution

  a.
 
  // POCO
  public class TRecord
  {
     field definition { get; set;}
  }
  public class CacheAllMgr
  {
     private static Dictionay<TKey, TRecord> _cacheRecord = new Dictionay<TKey, TRecord>();
     private CacheAllMgr();  // Singleton
     publc Dictionay<TKey, TRecord> GetAll()
     {
        if (_cacheRecord.Count == 0)
        {
           using (var context = new EF())
           {
          for(var item in context.DB)
          {
              _cacheRecord.Add(TKey, new TRecord { ... });
          }
           }
        }
        return _cacheRecord;
     }    
  }
 
  b.
  public class CacheOnDemandMgr
  {
      private static Dictionay<TKey, TRecord> _cacheRecord = new Dictionay<TKey, TRecord>();
      public TRecord FindRecordByKey(T key)
      {
         TRecord result = null
         if (_cacheRecord.Keys.Contains(key)
         {
           return _cacheRecord[key];
         }
         else
         {
           using (var context = new EF())
           {
               var records = context.DB.Where(it=>it.key == key);
               if (records.Count() > 0)
               {
                 _cacheRecord.Add(key, new TRecord { field1 = records[0].field1 ... }); // load data from db into cache
                 result = _cacheRecord[key];
               }
           }
         }
         return result;
      }    
  }
 
 

2014年8月4日 星期一

VS 2012 advance short cut keys

Mark comments or uncomment your code
Ctrl+E, Ctrl+C (Comment)
or
Ctrl+K C

Ctrl+E, Ctrl+U (UnComment)
or
Ctrl+K U

可以按一下 [編輯]/[IntelliSense]/[參數資訊],輸入 CTRL+SHIFT+空格鍵,或按一下編輯器工具列上的 [參數資訊] 按鈕,手動叫用參數資訊。

可以按一下 [編輯/IntelliSense/快速資訊],輸入或按 CTRL+I 手動叫用快速諮詢 [快速諮詢] 按鈕在編輯器工具列。

可以按一下 [編輯]/[IntelliSense]/[自動完成文字],輸入 CTRL+空格鍵,或按一下編輯器工具列上的 [自動完成文字] 按鈕,叫用 [自動完成文字]。

Debug and step over
F10
Debug and go to cursor
Ctrl + F10
Debug and step trace
F11
Debug and exit current loop
Shift + F11


http://www.veodin.com/keyrocket/visual-studio-2012-shortcuts/

2014年7月28日 星期一

在 Log4Net 增加 Guid 欄位的紀錄

Log4Net 是一套專業的 Logger, 之前比較常處理的是記錄一般資料型態的紀錄,如 String, Datetime等資料。這篇將針對如何處理 Guid (在 SQL Server 為 uniqueidentifier 的資料型態)來做討論.

開發環境 VS 2012, Log4Net 透過 Nuget 安裝的 2.0.3 版本, 資料庫是 SQL Server 2008 R2

在 Web.Confg 中 ADoNetAppender 的設定, 其中 ORG_ID 在 DB 中是 uniqueidentifier

 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <connectionString value="data source=localhost;initial catalog=LOCAL_DB;integrated security=false;persist security info=True;User ID=user;Password=password"/>
      <commandText value="INSERT INTO SYS_EVENT_LOG ([DATE],[THREAD],[LEVEL],[LOGGER], [LINE], [MESSAGE],[EXCEPTION], [USER_NAME], [CREATE_USER], [IP], [MACHINE_NAME], [ACCESS_MODE], [ORG_ID]) VALUES (@log_date, @thread, @log_level, @logger, @line, @message, @exception, @user_name, @create_user, @ip, @machine_name, @access_mode, @org)"/>
      <bufferSize value="1"/>
      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@line"/>
        <dbType value="String"/>
        <size value="10"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%line"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@user_name"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{user_name}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@create_user"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{create_user}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@ip"/>
        <dbType value="String"/>
        <size value="30"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{ip}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@machine_name"/>
        <dbType value="String"/>
        <size value="100"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{machine_name}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@access_mode"/>
        <dbType value="String"/>
        <size value="1"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{access_mode}"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@org" />
        <dbType value="Guid" />
        <layout type="log4net.Layout.RawPropertyLayout">
          <conversionPattern value="%property{org}" />
          <key value="org" />
        </layout>
      </parameter>
    </appender>
  </log4net>



在 C# 
            User.BU = Guid.NewID(); // get a new GUID

            log4net.GlobalContext.Properties["ip"] = user.LoginIP;
            log4net.GlobalContext.Properties["machine_name"] = user.LoginIP;
            log4net.GlobalContext.Properties["access_mode"] = "W";
            log4net.GlobalContext.Properties["create_user"] = user.UserAccount;
            log4net.GlobalContext.Properties["user_name"] = user.UserName;

            log4net.GlobalContext.Properties["org"] = user.BU;           

2014年7月19日 星期六

靈光一現

(right) off the top of one's head

Fig. without giving it too much thought or without precise knowledge. Mary: How much do you think this car would be worth on a trade? Fred: Well, right off the top of my head, I'd say about a thousand. Tom: What time does the morning train come in? Bill: Off the top of my head, I don't know.
See also: head, top

美國隊長2的一句對話
It's a great idea off the top of my head

2014年4月27日 星期日

差不多完成了

1) It's pretty much it.
2) That's about it.
3) That's pretty much it.

It's more or less complete
that's essentially all
That's exactly what it is