読者です 読者をやめる 読者になる 読者になる

ファサード・パターン
    façade
    複数の関連する機能を、外部から隠蔽するクラス(ファサード)を作成しておくことで、内部の変更を外部に影響をさせないようにするパターン 

・Visual Studio
    ショートカット  Ctrl + - にて戻る前のカーソル位置に移動する

・C#  独自(カスタム)TraceListenerの実装方法 
    web.configにリスナー情報を追加
    ・sharedlistener-system.diagnostics
     ┗<add name=""LogListener"" type=""namespace....class名, アセンブリ情報(プロジェクトのプロパティで見つかる)""/>
     <source name=""Log"" switchValue=""All"">
        <listeners>
          <add name=""LogListener""/>
          <remove name=""Default""/>
        </listeners>
      </source> 

・独自(カスタム)TraceListenerの実装方法2 
    ・tracelistenerを継承したファイルの作成(namespace…class名と名前を一致させること)
    public class DbTraceListener : TraceListener
    {
        public override void Write(string message)
        {
        }

        public override void WriteLine(string message)
        {
        }
    }
    ⇒この中でDB接続~INSERTまで実行する 

・独自(カスタム)TraceListenerの実装方法3
    呼び出し側でTrace.WriteLineとかで呼び出せば。。。うまくいかないはず。
    LogLevel,リスナーによる出しわけ処理は自前で定義する必要あり。 

・ASP.NET MVCでログが出力されない場合に
    気にすること IISの問題の場合⇒IIS Expressをいったん終了させる
    ログのFlushの問題の場合⇒autoFlush=""false""になってないか 

・Excel Grepツール ExcelGrepがいい。
    ExcelSniperで実際に対象がないのに検索結果一覧に出ることがあった。 

・楽観排他 ユーザーが操作する情報を、同時に他のユーザが操作する可能性は少ない、との仮定に基づく排他方式。
    更新したいリソースに対してロックせず、対象リソースの照会時と変更がないことをチェックする。
    複数ユーザーが同一にデータ更新を行う際にエラーを回避するために、アプリケーションにより整合性をチェックしてユーザーに状態を促すことにする。 

・悲観的排他 ユーザーが操作している情報を、他のユーザーも操作する可能性が十分にある、との仮定に基づく排他方式。
    更新しているリソースに対するロックは、対象リソースを照会のために取得した直後から更新が終わるまで維持される。
    バッチ処理では、データ更新が多く、データ整合性に関わる部分を保証する必要があるため、この方式を採用する。 

・反省 自分の伝え方がはっきり?していなかったために、無駄な工数発生
    I/Fは利用しなくてもいい? ⇒ いいよと回答 ⇒ 呼び方も変えていいかの確認が不十分だった。
    get~()で、引数に必要な情報がない場合でもきちんと値を返す方法
    必要な引数がある場所から、今回追加されている、引数がないメソッドがあるクラスに適当な名前でメソッド追加し、
    static メンバ変数に値を持たせる
    引数がないメソッドにて、メンバ変数を取得する

・javascriptのTips 標準コマンドを使用して実行
          if ('getSelection' in window &&
              'createRange' in document &&
              'execCommand' in document &&
              'queryCommandSupported' in document &&
              document.queryCommandSupported('cut')) {
                document.execCommand('cut');
            }
            setTimeout(popup.hide(), 200);

デフォルトのキー入力イベントを排除
    e.preventDefault(); 
    ・失敗 相手にファイルを渡すときのフォルダ構造
        A
    ┗新規ファイル━ファイルA.cs
    ┃      ┗ファイルを置く場所.txt
    ┗差分ファイル━ファイルB.cs.html
           ┗このファイルは直接開いて差分を適用してください 
・HTMLで書いたのと同様に値を表示する方法 valueDataDelimiter = ""&nbsp;"";
    MvcHtmlString.Create(breadcrumb);
    ⇒IHtmlString型。
 ただし、これだと>とかが正しく出ないため、
 WebUtility.HtmlEncode()で文字列を追加しておく 

・settimeout
    メソッド終了後に呼ばれる コンテキストメニューから親画面全選択
                $(contextMenuElement.beforeElement).focus();
                setTimeout(function () {
                    document.execCommand(command);
                }, 0);
    ⇒setTimeoutは最後に呼ぶようにする 
    ・webアプリケーションが動かない
        /エラー 方法1.asp.net のサービスが動いていない可能性
     ファイル名を指定して実行「services.msc」
     ASP.NET 状態サービスを立ち上げ
     (自動開始にしておく)

    方法2.起動時のパス誤り
     プロジェクトのプロパティ

     WEBタブ 開始動作 ページを指定する
     プロジェクトのURL 

・asp.net mvcIPv4アドレスを取得する方法                 string ipa = """";
                    System.Net.IPHostEntry iphEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
                foreach (var ipAddr in iphEntry.AddressList)
                {
                    if (ipAddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        ipa = ipAddr.ToString();
                        break;
                    }
                } 

・SQL SQLインジェクション対策
    ⇒パラメータクエリ化。しないと任意の箇所でコメントアウト化できてしまう。
    http://npnl.hatenablog.jp/entry/20080412/1207965105

    DbParameter
    DbCommand

・ホスト名とは http://localhost:50563/
    最初のスラッシュまで。 

・  excel 図 圧縮 
    excelで画像のファイルサイズ圧縮が可能

・設計書の書き方 参照するファイル名の指定は「」をつける
    ・設定ファイル
     各設定値の意味、書き換え可能かについて記載

    ・階層で設計書を記載

・C# 改行
    Environment.NewLineだと、環境によって\r\n,\nを切り替えてくれる 

・順番 保証 リスト List<KeyPairValue<string, string>> 
    ⇒順番が保証されたDictionaryとして使用
    List<KeyPairValue<string, string>> 

・  PDF MIME/TYPE
    ロードバランサー
    エイリアス = 仮想ディレクトリ(IISFTPのときにやったやつ) =  

・色のグラデーション 取得
    パワーポイントに画像を貼り付け、図ー塗りつぶしースポイトで色を取得可能 

・リリース資料作成 変更したリソースファイルが全て列挙されているか⇒Winmerge
    変更したリソースファイルが全て列挙されているか⇒Winmerge
    変更したファイルが妥当な区分に記載されているか⇒目視 

・SQL 削除フラグがあるテーブル
    取得時。。。削除フラグがたっていないもの、という条件が必要
    挿入、更新時。。。フラグをどちらにするか判断する必要有。 

・JavaScript
    別画面表示時に考慮すること ・複数画面から同じヘルプ画面を呼ばれることはあるのか

・複数画面から呼ばれたときに画面ごとに別画面を出すのか
 ⇒別画面にしたくないときは、画面の名前を一意の名前にする

・別画面がPDF等のドキュメントの場合、ファイルはどこに置かれる想定か
 ドメインが違う場合、IISの仮想ディレクトリ等で対処する必要がある

・ドキュメントの場合、ファイルがなかった場合の対処
    ・一画面につき何枚まで画面を出すか 

・JavaScript 別画面表示時の実装1             
        var winWidth = 1252;
            var winHeight = 950;

            var winScrX = window.screenX + 20;
            var winScrY = window.screenY + 20;

            // ウィンドウオプションの設定
            // アドレスバー:非表示、ツールバー:非表示、メニューバー:非表示、ステータスバー:表示
            // スクロールバー:表示可能、リサイズ:変更可能
            var winFeatures = ""location=0, toolbar=0, menubar=0, status=1, scrollbars=1, resizable=1"" +
                              "", width="" + winWidth +
                              "", height="" + winHeight +
                              "", top="" + winScrX +
                              "", left="" + winScrY; 

・JavaScript 別画面表示時の実装2
        if (appPath === ""/"") {

                //値が「/」の場合、その値を削除する。
                appPath = appPath.substr(0)
            }

            // 別ウィンドウを開く
            var helpWindow = window.open(window.location.origin + appPath + ""/Content/blank.html?helpUrl="" + helpUrl, formId, winFeatures); 
・JavaScript    別画面表示時の実装3
    blank.html

フォーカス処理は遷移先の画面で実行しないと連打したときにうまく動かなくなる <html>
    <head>
        <title></title>
        <script>
            function changeHelp()
            {
                focus();
                location.href = location.search.split(""="")[1];
            }
        </script>
    </head>
    <body onload=""changeHelp()"">
    </body>
    </html> 

・ドキュメント作成 ドキュメント作成後、各項目に対してテスト項目を作成し、
    ドキュメント作成後、各項目に対してテスト項目を作成し、
    結果が正しいことを担保する。 

・addEventListenerとonの違い
    jqueryのonの違い イベントを追加登録(重複登録不可)するのがaddEventListener
    イベントを上書き登録するのがon
    イベントを追加登録(重複登録可能)がjqueryのon 

・jqueryのoffの注意点
    jqueryで登録したイベントに対する全てのイベントを削除してしまう

・モーダル
    モードレス クローズされるまでプログラム本体の操作が不可
    クローズされなくてもプログラム本体の操作が可能

    ちなみにダイアログは本体の処理を待つのみの為、
    モーダルダイアログ、モードレスダイアログがありえる

・コンテキストメニュー 連想配列
     actions: {
            ""cut"": {
                name: ""切り取り(T)"",
                keyCode: 84
            },
       },

        selectedElement: """", 

・即時実行したい処理を記載する
    (function () {
                $(document).on('blur', ""#test"", function () {
                alert(""!"" + document.getElementById(""test"").selectionStart);
            });
        }());

・cshtmlで画面ごとにjavascriptを任意で追記する方法 
    _Layout.cshtml
    @if (IsSectionDefined(""scripts""))
    {
        @RenderSection(""scripts"", required: false);
    }

    各cshtml
    @section scripts{
        <script src=""~/Scripts/test.js""></script>
    }

・      var groupDatas = from masterData in listData.DisplayRows()
                         group masterData by new
                     {
                         masterData.ID,
                         masterData.NM
                     } into masterDataGroup
                     select new
                     {
                         Id = masterDataGroup.Key.ID,
                         Name = masterDataGroup.Key.NM
                     };
・次案件で考慮する内容 セッション管理   
     セッション設計  
    クッキー設計  

    ルーティング   
    PRGパターン   
    多重クリック(2度押し防止)   
    CSS設計   
    キャメル、パスカル   
    Excel テーブル用マクロ   
    帳票ー署名   
     PDF  
     Excel  
     XML  
    マルチスレッド   
    Ajax-JSON

    ・  SVN   Redmine 連携 
        コミットコメント定義  
   
    仮想セッション   
     モーダル  
     モーダレス 親画面、子が面 
   
・jquery ui 擬似モーダル   
・window.openで何とかする   
⇒showmodalは非推奨の為禁止   
 javascript openwindow modalとかで検索  
  引数でオブジェクトで渡す 
   
 CSSを使った擬似モーダルダイアログ   
・  単体テストJunit   
    ログーlog4j   
ライブラリーLombok   
チェックーfindbugscheckstyle   
便利サイト   
 http://qiita.com/disc99/items/727b51dbe737602a5c91"

struts.devMode
開発モード(デバックモード)とは
『主に開発者向けの機能で、デバック情報(開発時のエラーなどの詳細情報)を表示させたり、
開発効率を上げるツールがあったりと開発時に大変役に立つモード。障害の切り分けや原因の特定もしやすい。
また、多くの情報が出るためシステム的にはそれなりに負荷がかかる。』


設定ファイル関係
http://mat5ukawa.hateblo.jp/entry/2016/04/10/125813


Struts2で例外を捕捉する
http://techmedia-think.hatenablog.com/entry/20080531/1212200933


struts2 login interceptor


http://www.journaldev.com/2210/struts-2-interceptor-example

f:id:oguri0220:20161004035447p:plain

sampleプロジェクト


・web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="struts_blank" version="2.4">
  <display-name>Struts Blank Convention</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>



・libの中身(\struts-2.5.2\lib)
aopalliance-1.0.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
commons-lang3-3.4.jar
commons-logging-1.1.3.jar
freemarker-2.3.23.jar
javassist-3.20.0-GA.jar
log4j-api-2.5.jar
ognl-3.1.10.jar
spring-aop-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
struts2-config-browser-plugin-2.5.2.jar
struts2-convention-plugin-2.5.2.jar
struts2-core-2.5.2.jar


・hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title><s:text name="hello.message"/></title>
</head>

<body>
    <h2><s:property value="message"/></h2>

</body>
</html>


・struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

  <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
  <constant name="struts.devMode" value="false"/>

</struts>


・Index.java
package local.sample.actions;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

@Results({
        @Result(name = Action.SUCCESS, location = "${redirectName}", type = "redirectAction")
})
public class Index extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    private String redirectName;

    public String execute() {
        redirectName = "hello";
        return Action.SUCCESS;
    }

    public String getRedirectName() {
        return redirectName;
    }

}


・HelloAction.java
package local.sample.actions;

import com.opensymphony.xwork2.ActionSupport;

/**
 * <code>Set welcome message.</code>
 */
public class HelloAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static int count = 0;
    public String execute() throws Exception {
        setMessage(String.valueOf(count++));
        return SUCCESS;
    }

    /**
     * Provide default valuie for Message property.
     */
    public static final String MESSAGE = "hello.message";

    /**
     * Field for Message property.
     */
    private String message;

    /**
     * Return Message property.
     *
     * @return Message property
     */
    public String getMessage() {
        return message;
    }

    /**
     * Set Message property.
     *
     * @param message Text to display on HelloWorld page.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}
http://localhost:8080/sample/config-browser/showConfig.action

http://www.cyokodog.net/blog/first-struts2/


・セットアップ関係
http://qiita.com/alpha_pz/items/bd1fc9575a920f1560c8
    旧時代の名残り

    Struts2は標準でテンプレートエンジンであるFreeMarkerを使って、HTML4時代のUI+JavaScriptの生成やタグの生成をします。
    ただしこの自動生成するタグ、今となっては余計なお世話状態であり、HTMLのタグについては標準のHTMLだけを出して欲しいことが多々あります。
    今回はそれをさせない方法です。
    プロパティファイルに次の宣言をするだけ

    struts.propertiesファイルに、以下の1行を記載します。
    struts.properties
    struts.ui.theme=simple
・起動時エラー関係
http://qiita.com/alpha_pz/items/e273faff1cc8b4a1dc7f
    Struts2.5←2.3.xの移行について

http://stackoverflow.com/questions/28167771/java-lang-classnotfoundexception-org-apache-struts2-dispatcher-ng-filter-struts

    if you are using struts2 version 2.5 you need to change from org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter to org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter


http://oshiete.goo.ne.jp/qa/7873045.html
    ◆フィルタを変更します。
    サンプルにある org.apache.struts2.dispatcher.FilterDispatcherは現在、非推奨です。
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterをお使いください。

    ◆Actionクラス
    @Results、@Resultアノテーションは、Struts2.1よりConventionプラグインへ移行しましたので、インポートするパッケージが異なります。

    import org.apache.struts2.convention.annotation.Result;
    import org.apache.struts2.convention.annotation.Results;

    ◇Result指定
    @Resultで指定する属性も変更になりました。

    @Result(name = "hello1", location = "index.jsp")

    このように、locationを使います。
    また、type属性も、クラス名.classではなくなり、文字列(エイリアス)で指定します。

    @Result(name = "hello2", location = "jump.jsp", type = "redirect"),
    @Result(name = "recipe", location = "jump!recipe", type = "redirectAction"),




http://aoking.hatenablog.jp/entry/20121031/1351641785
    くらすぷらっとふぉーむ





・struts 2.3
http://d.hatena.ne.jp/shishido-felica/20140529/1401330413
import org.apache.struts2.config.Result;
がないってエラーが出る。

解決方法
struts2-codebehind-plugin-2.3.16.3.jar
を追加。


・struts 2.5
http://qiita.com/alpha_pz/items/4a97df916102dad2e2bc
@Namespace("/sample")
@ParentPackage("struts-default")
@Results({
    @Result(name = ActionSupport.SUCCESS, location = "index.jsp" , type="dispatcher"),
})
@ExceptionMappings({
    @ExceptionMapping(exception="java.lang.Exception" , result="exception")
})
public class SampleAction extends ActionSupport {
    @Action("display")
    public String sample() throws Exception {
        return SUCCESS;
    }
}

Java
    JSP化
    画面の項目の配置が期待通りにならない時
        画面の一部レイアウトがずれている場合の対処法
        例)ボタン
        モックと開発中画面をIEの開発者ツールで確認し、
        該当部分を右クリック⇒HTML要素として編集
        で該当部分をそれぞれ見比べて確認

    Eclipse  使い方
        ショートカットキー
            縦コピー(矩形選択)
                SHIFT+ALT+A

            一杯表示しすぎて隠れているソースコードを表示
                CTRL+E
                または、CTRL+SHIFT+E

            ファイル検索
                CTRL+H

            型名検索
                CTRL+SHIFT+R

            ブレークポイント設定
                CTRL+SHIFT+B

            ブックマークを設定するショートカットキーがない場合
            ⇒行番号のあたりで右クリック⇒ブックマークの追加(切り替え)


            インデント整形(HTML,JSPに使うと全角スペースが消えてしまうため、使用する前に要確認)
                CTRL+SHIFT+F
                ⇒CTRL+ALT+↓でタグの範囲を指定してレイアウトを調整する方がたぶん間違いない

            選択した単語をファイル内で検索
                単語を選択した状態でCtrl+K

        Eclipse 事前設定
            ウィンドゥ⇒設定⇒色とフォント⇒テキストフォント
            メイリオ 10以上

        Eclipse Winmergeは相性が悪いから使わない方がいいい

        Eclipse ビルド時のエラー確認
            ウィンドウ⇒ビューの表示⇒その他⇒問題

        Eclipse 起動時にワークスペースをクリーン(起動時の引数追加)
            "C:\eclipse\eclipse.exe -clean.cmd"

        リソ-スを開く(Ctrl+SHIFT+R)でclassファイルが表示されないようにする
            リソースを開くで開いた画面の右上の▼をクリック、派生リソースのチェックOFF

        jquery注意点
            idにぴりおどやコロン(:)を用いる時は、バックスラッシュ(\\)でエスケープする必要あり

        JSP コントロールの制御
            jsp上は、hidden="true"などと値を直接格納せず、
            hidden="${hogehogeForm.hiddenFlg == 'true'}"のように、Beanから取得した値で判断させる

    コンソールログを確認する方法
        IEで開き、開発者ツールのコンソールで確認
        Eclipseのコンソールには出ないので注意

    CSS設計
        term-area-padding
        ⇒やめたい、意味がない
         これをすると文字を赤くするにもクラスが必要
        このテーブルの設定、みたいな名前にする
        パーセント指定、px指定はすべて排除(emとか使う)

    Javascript ボタンクリックでボタンの色を変更1
        hoge = function() {
            var cnt = 0;
            $(':checked').each(function() {
                if($(this).val() === hogeConst.YES) {
                    cnt += 1;
                }
            });
            return cnt;
        };

        fuga = fuction(e) {
            if(hoge() > 0) {
                $('btn-submit').removeClass('disabled');
            } else {
                $('btn-submit').addClass('disabled');
            }
        };

        $(document).ready(function() {
            // DOM読み込み後処理
            JQuery("input:checkbox").click(fuga);
        });

    Java ==とequals()
        equals()を使用する事
        == は参照が一致していれば、Trueになってしまう


    DOM読み込み後に処理したい場合
        $(document).ready(function() {
        });

    HTML CSS JAVASCRIPT
    モックJSPで画面サイズが違う場合の観点
        ・form内部の値を開発者ツールでコピーしてみて一緒になる⇒自分のコードに問題あり
        ・フッターの二重定義
        ・formのcssClass指定
        ・css不足
        ・javascript不足

    DAOとEntityの違い
        データベースに、アクセスするのがDAO
        データベースにある、例えば「生徒」テーブルの一行がエンティティ。
        エンティティは、インスタンスがされた「実体」のことを指しています。

        名前、学年、性別というカラムがある生徒テーブル一行がエンティティ
        その一行を取り出したり、カラムを設定したりいろいろデータをごにょごにょするのがDAO

    HTML JAVA JSP実装注意点
        基本キャメルケース?
        
        nameとFormクラスの変数名が一致していないと
        ボタン押下時に値が取れないらしい

        ボタン名を一意の名前にする
        ⇒ボタン毎に内部で動作が指定される可能性がある為

    反省点
        2016/4/28
        事前調査不足の為、手戻り発生_カスタムタグ挿入
            事前調査方法:既存のID、nameの付け方の方法を全検索⇒パターンから命名規約を確定
            ⇒キャメルケース化、パスカルかを事前に聞くべきだった。
            事前に自分たちで決められないことがないか確認

    Java カスタムタグ 一つだけ改行をさせる方法
        <c:set var"newLine" value="${newLine}</br>"/>
        上記のようにしないとbrタグが二つ生成されてしまう

    勉強の為に残しておきたいSVNのコミットを保存しておくこと
        プロジェクトを選択し、チーム⇒ヒストリーから、修正前後の番号を選択して
        エクスポートすればいい?
        ⇒毎日やっておかないとブランチを捨てられて見れなくなる。バッチ化?
        svn
        http://d.hatena.ne.jp/replication/20111125/1322147980
        vss
        http://aoki1210.hatenablog.jp/entry/20080304/p1

    全体
        ミスを少なくする方法
            修正前の既存のソース、データは消さない。
            消すのはコミット直前。

        全ての作業にエビデンスを
            エクセルで、どのバージョンのソース、資料で何を検索した結果、
            何を修正することになったか、
            そして修正したことのエビデンスを付ける。

            2016/6/7
            製造もれ
                正)アコーディオンはダイアログオープン時に初期化するが、
                一部のその他入力などのデフォルトで値が入ってくるものは初めからオープン状態にする

                漏れた原因:作業一つ一つに対するエビデンスを作らなかった。


        マトリクス(各状態におけるボタン制御等)についての具体的な実装方法
            ⇒ボタン単位で処理を実装する
            例)Aボタンー条件A、条件Bの場合活性。。。。
            その際、すべての条件を記載数必要があるか確認する
            例)Bボタンが活性になるにはAボタンが完了していてB処理が終わっていない場合

        html,javascriptの基本
            htmlは基本ダブルコーテーション
            javascript,jqueryは基本シングルコーテーション

    JavaScript $target.data(セレクタ)の意味
        カスタムデータ属性の要素を取得する。
        例)$target.data('btn-collapse')
        ⇒HTML上でdata-btn-collapse="aaaBtn"と指定されている場合、「aaaBtn」を取得
        ⇒data-btn-collapseを設定している要素を順次取得し、aaaBtn要素内に何か変更を加えたい場合に使用

    Jquery 改行コード 置換
        .replace(/\n/g, '')
        /\n/..改行コードの場合(?)は\で始めないと文字列として判断されてしまう模様
        /g...モード修飾子。該当するすべてを置換するためにこれを使う模様

    ダイアログからのValidate処理法
        1.親画面の編集ボタン押下
        2.ダイアログ呼び出し(jsが呼び出し処理中に、押下されたボタンについてるカスタムデータ属性を保持)
        3.ダイアログからsubmit(自分自身を呼ぶ)("/validate.do")
        4.Controllerへ。@RequestMapping(value = "/validate.do", method = RequestMethod.POST)
        5.2で割り当てた値を取り出して親画面に反映??????

    Excel、VBAの基本
        メソッド定義
            Sub aaa()
            end sub

        関数定義
            Function aaa as String
                aaa = "aaa"
            end function

        変数定義
            var aaa as String
        
        関数を使用
            Worksheetfuncion.count(A1:A5)

        注意点
            if elseif ... else ... endif
            ⇒Thenのタイミングで開業してあげないとエラーになって動かない

            定義又はプロパティが定義されていません
                ⇒必要な奴を削除しちゃった?

        シート内ハイパーリンク
            =YPERLINK("#Sheet1!A1", "aa")

        画像ごと行を削除できるようにする方法
            http://blog.livedoor.jp/qoozy/archives/52568172.html

        吹き出しのみ削除
            http://www4.synapse.ne.jp/yone/excel2010/excel2010_zu_obje_del.html

    bean作成時の注意点
        画面で更新するものだけをBeanとして定義する
        ⇒何が更新されるべきものなのか、事前に明確にすべき

        では、ボタンの活性非活性、チェック状態制御等はSettingFormとしてModelAttributeするbeanとは分割

    スクリプトレット
        <%= %>

    JSP上で部分的にセッション条件を変えたい OR 条件を変えるのが面倒な処理を一発で変える方法
        正にしたい場合は後ろに || true
        負にしたい場合は後ろに && false
        <c:if test="${hogehoge == fugafuga || true}">

    製造時に漏れがないように実装する方法
        ソースファイル内に設計書の内容をすべてコピーしてから実装
        ⇒余計なウィンドウ遷移をなくす

    Excel テキストボックスの取り消し線を追加する
        ホームーフォントの拡張ボタン押下

    JSP BeanとJSPマッピング
        一つずつ値のセット処理を入れないと、
        値が入っているかどうかわからない
        (メンバ名が一致しているものを自動的にコピーする方法だとわからない。エラーが出てても気づかない)
        ⇒BeanUtil.copyPropertiesを使うべきか問題。

    改善点
        作業手順
            ・ヒアリングした内容をまとめる(まとめる中で気になったことは先に聞く)。作業の全量を把握する
                ABCがあるときに、Aはパターン1で出来るけど、Bはパターン2でしかできない、という場合が
                ないかどうかの把握

            例)メソッド化で渡す引数について、
                disabledの場合はidを設定すればid名の文字列私でも可能(オブジェクト参照でも可能)
                hiddenの場合はidを指定していない「tr」タグなどがたくさんある為、オブジェクト参照でしかできない
                ⇒disabledの場合もhiddenの場合もオブジェクト参照でないとできない

    javascriptで定数定義して呼び出す方法
        http://d.hatena.ne.jp/MoonMtLab/20130831/1377919614

    javascript 基底部分 各ソースで共通して即時関数を使用することにより、イベントの追加、基底部分の処理の呼び出しが可能。
        var hoge = {
            app : {},
            dialog : {}
        }
        (function(hoge, $) {
            'use strict';
            var hogeApp = hoge.app;

            hogeApp.hogehogee = function() { 
                return hogeApp;
            }

            /**
             * HTML(DOM)読み込み後の処理
             */
            $(document).ready(function() {
                /**
                 * イベントハンドラ
                 */
                $('.hoge').on('click', hogehogee);
            });
            
        }(hoge, jQuery));

    java開発時に考慮
        LomBok(ロンボック)
        ⇒getter,setter,tostringなどの冗長コードの排除

    JSP
        ボタンのサイズとテキストサイズがあっていない場合にボタンのどこを押してもクリックイベントが
        出るようにする方法
            ボタンタグを囲うdivにクリックイベントを付与
            (または、jsハンドリング用のクラスをdivに設定する)

        JSTLで出力する場合:modelattributeから定義
            <form:form modelAttribute="hogehogeForm" action="${postAction}" method="post">
            <c:out value="${hogehogeFOrm.fugafugaForm.name}"/>

            htmlのname属性:modelattributeを省略して定義
            <form:hidden path="fugafugaForm.name"/>

    JAVA
        クラス一覧をjavadocからCSVに標準出力
            事前準備
                環境変数javaのbinまでのパスを追加する
                例)C:\Program Files\Java\jdk~\bin
            
            bat
                cd C:\workspace\testDocLet\bin
                javadoc -docletpath classes -doclet test.testDocLet -sourcepath 抽出したいプロジェクトパス -subpackages 抽出したいパッケージ

            java
                public final class testDocLet {
                    public static boolean start(RootDoc rootDoc) {
                        File file = new File("作成したいファイルのパス");
                        try {
                            PrintWriter out = new PrintWriter(file);
                            try {
                                writeTo(out, rootDoc);
                                if(out.checkError()) {
                                    return false;
                                }
                            } finally {
                                out.close();
                            }
                        } catch (IOException ex) {
                            throw new RuntimeException(ex);
                        }
                        return true;
                    }

                    public static LanguageVersion languageVersion() {
                        return LanguageVersion.JAVA_1_5;
                    }

                    private static void writeTo(PrintWriter out, RootDoc rootDoc) {
                        // header
                        String[] headers = new String[]{"tekitou"});
                        out.printin(headers);

                        for(ClassDoc classDoc : rootDoc.classes()) {
                            if(classDoc.name().endsWith("Form")) {
                                for(FieldDoc fieldDoc : classDoc.fields(false)) {
                                    String[] d = new String[headers.length];
                                    Arrays.fill(d, "");
                                    int i = -1;

                                    d[++i] = classDoc.name();
                                    d[++i] = fieldDoc.name();

                                }
                                out.printin(join(d));
                            }
                        }
                    }

                    private static <T> String join(T[] d ) {
                        if(d.length == 0)  {
                            return "";
                        }
                        StringBuilder s = new StringBuilder(String.valueOf(d[0]));
                        for(it i = 1; i < d.length; i++) {
                            d.append(",").append(a[i]);
                        }
                        return d.toString();
                    }
                }

            ???
                BeanPropertyRowMapper

            勉強になりそうなサイト
                コンピュータクワガタ
                気になるjava

            コーティング規約 JAVA
                JAVA
                    保管アクション checkStyle javaコンパイラ設定 firebugs の設定を規約とする
                JAVADOC
                    保管アクション checkstyleの設定を規約とする
                命名規約
                    クラス:各単語の先頭を大文字(Pascal形式)とする
                    メソッド:各単語の先頭を小文字(Camel形式)とする

                命名規約で記載する点:
                    レイヤーなど、種類、接頭語、識別子、接尾語、例
                    Model、テーブル作成時(マスタ系)、M、任意の名詞(※1)、-、Mdata
                    ※テーブル名(M_DATA)の場合
            
            コーディング規約 JSP
                コメントは<%-- --%>を使用する
                ⇒<!-- -->だとブラウザ上でソース表示時にコメントが表示されてしまう

    
                宣言・スクリプトレット<%= %>によるJavaプログラムの記述は極力避け(定数はOK)、JSTLを利用数

                暗黙オブジェクトは極力利用しない
                    ⇒request, response, pageContext, session, application, config, page, exception
                    × <%= session.getAttribute("information") %>
                    〇 ${information}
                JSPファイルの先頭はコンテンツのタイプと文字コードを定義する
                    ⇒<%@ page language="java" contentType="text/html; charset=Windows-31J"%>

                共通するJSPファイルの読み込みは<jsp:include>を利用する
                    ⇒<jsp:forward>だと呼び出し後に呼び出し側のページの実行が終了する為


                定数は独自定義せずJava側で定義したものをJSPで利用する
                    <%-- JSPファイルの上部に宣言 --%>
                    <%@ page import="~.Constants"%>
                    <%-- 定数を利用する --%>
                    <c:set var="hoge" value="<%=Constants.HOGE_HOGE%>"/>
                    <c:if test="${fuga != hoge}">

                <fmt:formatNumber>の丸めモードは近似値である為、利用時には注意
                    ⇒あらかじめControllerクラスなどで四捨五入などの丸め処理を行ったものを渡すようにする
                    <fmt:formatNumber pattern="#,##0" value="${suuchi}"/>
                
                HTMLタグを利用せず、Springタグを利用する
                    http://kuwalab.hatenablog.jp/entry/20130118/p1
                    +form:hidden

            できるようになる
                スケルトン作成
                モック作成
                ⇒画面をみてHTMLを作るトレーニング?

            作業の効率化
                修正前の値で判定してるところを探す。判定は
                合致している場合(A == B)と合致していない場合があるので、探す時は
                「= 」で探す

            JavaScript基礎
                ・等しい(===)ー同じ型に変換せず比較
                ・ひとしくない(!==) 同じ型に変換せず比較しようとして等しくないか判定

            html
                ・先頭
                    <!DOCTYPE html>
                    <html lang="ja"?
                    <head>
                    <meta charset="utf-8">
                    <meta http-equiv="X-UA-Compatible" content="IE=edge">
                    <meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no">
                    <meta name="format-detection" content="telephone=no">
                ・最後
                    JS読み込み(パフォーマンス考慮の為)

            POST⇒REDIRECT⇒GET
            PRGパターンの実装方法
                <c:url value="/パス" var="postAction" />
                <form:form modelAttribute="hogeForm" action="${postAction}" method="post">
                </form:form>

            コンテキストルート
                WEBアプリケーションの最上位のパス

            改善点
                作業確認漏れ
                    不具合内容、修正内容をあらかじめリーダーに連携せずにコミット
                    ⇒あとでリーダーに指摘され修正

            作業
                何かをまとめてくれと言われたときの自分の対応方法
                    例)未実装箇所一覧
                        No,画面一覧,未実装箇所一覧
                        ⇒1セル1画面で、足りなくなったら別シートへ
                        デメリット:足りなくなったらいちいち別シートを観なければならない
                        タスクの割り振り入力欄が入れられない
                    メリット:自分の入力が楽

                期待値:
                    No,カテゴリ[View,Controller,Service],画面,修正内容
                    ⇒1セル1修正内容
                    デメリット:自分の入力が面倒
                    メリット:そんままみんなに展開できる

            

・新規サービス作成手順
    ソリューションフォルダ「Servers」を右クリックし、「追加」⇒「新しいプロジェクト」を選択する
    
    「Vusual C#」カテゴリの「Windows」の配下にある「Windows サービス」を選び、名前を指定してOKを押下

    プロジェクトのプロパティを開き、「アプリケーション」の「対象のフレームワーク」を「.NET Framework 4」
    に変更する

    最初にService1.csが作成されるので、デザイナで何もないところをクリックし、
    プロパティウィンドウから「インストーラの追加」を選ぶ

    生成されたProjectInstaller.csの"serviceProcessInstaller1"と"serviceInstaller1"から
    数字の"1"を消して"serviceProcessInstaller"と"serviceInstaller"に名前を変える

    serviceInstallerのプロパティに以下の文字列を指定する
        DisplayName:サービス一覧画面に表示する名前
        Description:サービス一覧画面に表示する説明。
        ServiceName:サービスの識別名。プロジェクト名を指定する
        StartType:インストール直後のスタートアップの種類
        Accout:サービスの実行アカウントの種類を選択する

    サービス登録(batで以下を実行)
        C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil C:\Service.exe
        pause

・バイナリ実装
    16進数変換
        Convert.ToByte(Convert.ToString(filever, 16), 16)

    BCD変換
        int i,j;
        string s = "1001000043004865617020616E6420737461636BA5";
        len = s.Length / 2;
        byte[] num16 = new byte[len];

        j = 0;
        for ( i = 0; i < len; i++ )
        {
          num16[i] = Convert.ToByte(s.Substring(j, 2), 16);
          j += 2;
        }

    バイナリ書き込み
        using(MemoryStream st = new MemoryStream())
        using(BinaryWriter bw = new BinaryWriter(st))
        {
        }

        using(FileStream fs = new FileStream(filePath, FileMode.Append))
        {
            st.CopyTo(fs);
        }

    Datatable
        文字列の重複削除
            dataTable.AsEnumerable().Select(row =>
            row.Field<string>("MOJIRETSU")).Distinct().Count();

        日付の重複削除
            dataTable.AsEnumerable().Select(row =>
            row.Field<DateTime>("HIZUKE").Date).Distinct().Count();

        日付の抽出
            dataTable.Select("HIZUKE >= #" + DateTime.Parse("2015/08/15" + "# AND HIZUKE < #" +
            "2015/08/15" + "#").Count()

    親子関係の考え方
        A(A.1(A.1.1),A.2(A.2.2)....)
        第二階層(A.1、A.2...)の数=Aの件数

    更新日付が最新のものを複数テーブルの更新日付から取得
    Oracle
        SELECT
            UPD_DATE
        FROM
        (
            SELECT
                UPD_DATE
            FROM
            (
                SELECT
                    MSMR.UPD_DATE
                FROM
                    TABLEA MSMR
                WHERE
                    MSMR.UPD_DATE = (SELECT MAX(UPD_DATE) FROM TABLEA)
                UNION ALL
                SELECT
                    MSMN.UPD_DATE
                FROM
                    TABLEB MSMN
                WHERE
                    MSMN.UPD_DATE = (SELECT MAX(UPD_DATE) FROM TABLEB)
            ) A
            ORDER BY UPD_DATE DESC
        )
        WHERE
            ROWNUM = 1;

    降順データ取得
    Oracle
        SELECT
            T.COLUMN1, T.COLUMN2
        FROM
        (
            SELECT
                TABLE1.COLUMN1, TABLE1.COLUMN2
            FROM
                TABLE1
            ORDER BY
                TABLE1.COLUMN2 DESC
        ) T
        WHERE
            ROWNUM <= 2;

    SQL SERVER
        カーソル
            一時テーブルに入れたデータを順次取得して、
            テーブルからのデータの取得処理に使う
        1.一時テーブル定義
        2.一時テーブルに条件を格納(INSERT)
        3.一時テーブルにカーソルセット
        4.一時テーブルから順次取得した値(条件)で、テーブルからデータを取得

        /* カーソル宣言 */
        Declare dataCursor Cursor For
        Select
            dataType
        From #dataView

        Open dataCursor

        Fetch Next From dataCursor
        Into @dataType

        While @@FETCH_STATUS = 0
        Begin
            Fetch Next From dataCursor
            Into @dataType
        End

・Excelで、アプリケーションを作成する際の注意点
    Excelを常時起動させたりすると、
    他のエクセルをOpen⇒Closeした際に同じインスタンスの他BookのExcelが
    全て閉じられてしまい、予期せぬ状態になりかねない
    ⇒お客さんに別プロセスで起動させる
        スタートメニュー⇒「プログラムとファイルの検索」の窓に、「regdit」と入力

        「HKEY_CLASSES_ROOT」⇒Excel.Sheet.12⇒Shellの上で右クリックして、
        「新規」にカーソルを乗せ、「キー」をクリック

        「別窓で開く」など、任意の名前を付ける

        「別窓で開く」を右クリックして、同じく「新規」にカーソルを乗せ「キー」をクリックする
        (ここでは必ず名前をcommandと入力する事)

        commandを選択した状態で、右側にある「既定」をダブルクリックする

        "EXEのフルパス" /x "%1" と入力する
        
        https://quartet-communications.com/info/topics/21941

・定期払い戻しの考え方
    定期払い戻し額=0
    SF残額 >= 手数料(手数料なしON)
    ※定期払い戻し能力なし、
     SFのみで払い戻した方が払戻額が大きい場合

    定期払い戻し額 = 0
    SF残額 >= 手数料
    ※定期払い戻し能力なし、
     SFのみで払い戻した方が払戻額が大きい場合

    定期払い戻し額 = 0
    SF残額 < 手数料
    ※定期払い戻し能力なし、
     SFのみで払い戻した方が払戻額が大きい場合

    定期払い戻し額 > 0
    定期払い戻し額+SF残額 <= 手数料
    ※SFのみで払い戻した方が払戻額が大きい場合

    定期払い戻し額 > 0
    定期払い戻し額+SF残額 > 手数料
    定期払い戻し額 <= 手数料
    ※SFのみで払い戻した方が払戻額が大きくなりうる場合

    定期払い戻し額 > 0
    定期払い戻し額+SF残額 > 手数料
    定期払い戻し額 > 手数料
    ※定期払い戻し含む払い戻しの方が大きくなる場合

・Visual Studioで使用しているtrnames.oraの場所
    sqlplus @?
    と実行して出てくるパスを指定

・テーブル作成 Oracle
    表領域(USER01)をファイル名「USER01.dbf」、100MBのサイズで作成する
    CREATE TABLESPACE IBKIC_DTI
        DATAFILE 'C:\IBKIC_DTI.dbf' SIZE 100M
        SEGMENT SPACE MANAGEMENT AUTO

・DB接続時に必要 Oracle
    <add key="DBConnectionTimeout" value="10" />
    <add key="DBCommandTimeout" value="10" />
    ⇒リトライ処理も

・交通系用語
    飛びつき
        定期外から定期区間内へ
    乗り越し
        定期内から定期外へ
    飛びつき乗り越し
        定期外⇒定期内⇒定期外

    電子スターフ
        車内のディスプレイ

・再現確認反省
    再現確認方法見直し
        まずは手順通りに再現確認
        そうでなければ、どのような条件なら再現するか無理やりDEBUGオードで場所を変えてもいいので再現確認する

    ※仮に修正済みで再現しない場合でも、
     再現しうる条件を順番に提起し、
     最終的にAがBに変更になったため、再現はできない旨報告する

・GYAOとABEMAの違い
    GYAO:CMなし、コンテンツ見放題
    ABEMA:CM、プレミアム(過去視聴分)

・気づかなかった
    integer⇒long

    なるべく現地の環境に合わせて試験をする
    ⇒タスクスケジューラで起動される、等

    数値のカンマ区切り

    左寄せ、中央寄せ、右寄せ

    帳票の確認方法
    ⇒何が出るのか正しくて何が出ないのが正しいのかを確認する
     画面と帳票の比較
     帳票同士の比較

・一部文字列抽出
    =MID(D1,LEN("hogehoge")

・キャッシュクリア SQLSERVER
    DBCC DROPCLEANBUFERS
    DBCC FREEPROCCASHE

・気づかなかった
    期限切れログデータ削除
    非同期
    列挙型の値変更
    タイムアウト
    リトライ
    DB,WEBAPIからデータ取得時 outofmemory
    非同期の必要性 還元データ
    テスト 罫線の確認
    テスト 日付確認 今日以外にしてもちゃんと今日以外の日付が出るか
    テスト 計算式
    テスト ~しながら...を変えたときに正しく変わること
    計登板後_系統番号が違う場合、系統名称のみ違う場合
    カレンダー画面と計上日を変更して作成ボタンを押下した場合の挙動
    ⇒背景色が白なので、予約可能として処理されてしまう
    カレンダーは常時最新でない為、取得しに行ってエラーだった場合に
    どうするか⇒一件でもエラーならエラーとするか、Oracleでtnsnames.ora
    で接続できない
    ⇒datasource内を直接指定
    帳票:出すものがないなら0件エラーを出す
    スクリプトをお客さんに出す時に注意
        Use [テーブル名]
        go
        を必ず入れる

・C# Tips
    DBからのデータ読み出し高速化
    AsNoTracking()
    IEnumerable<IEnumerable<Town>> towns = dbContext.Towns.AsNoTracking().OrderBy(t => t.TownID).Batch(200000);

    ストアド作成時の注意事項
        結合したデータがNULLだった場合に、何を出すか確かめておく
        ⇒数値の場合はゼロ
        ⇒文字列の場合は~コード等
         例)路線名がNULLなら路線番号

・数値変換
    16進数を10進数に変換
        0x15
        1*16+5
        ⇒10進数 21

    10進数を16進数に変換
        21*16=1...5
        ⇒16深栖 15

    BCD
        0x15
        ⇒10進数 15

・Winmergeで抜け漏れが発生しないようにする
    フォント:HGゴシックM
    差異色:青

・IDENTITY属性を指定している場合のINSERT
    // IDENTITY属性を指定している列名保持用
    string indexColumnName = "";
    MetadataProperty storeGeneratedPatternProperty = null;
    foreach(var item in entry.EntitySet.ElementType.Members)
    {
        storeGeneratedPatternProperty = item.MetadataProperties.Where(f =>
        f.Name.Contains("StoreGeneratedPattern")).FirstOfDefault();
        if(storeGeneratedPatternProperty != null &&
        Convert.ToString(storeGeneratedPatternProperty.Value) == "Identity")
        {
            indexColumnName = item.Name;
            // IDENITY属性を指定された列に値を格納しても正常に動作するようにSQL文を変更
            sql = string.Format("SET IDENTITY_INSERT {0} ON ", tableName) + sql;
            break;
        }
    }

・実行するメソッドXMLで管理する
    <?xml version="1.0" encoding="utf-8"?>
    <TaskPool>
        <TaskSet TaskSeID="0001" TaskSetName="処理開始" UseFormIDs="Form1"
        StartTaskItemID="0001" CommonTask="false" ReportTaskNumber="1" NameSpace="Task"
        CardType="" PatternNames="">
            <OperationJudgePool>
                <OperationJudge MethodID="JudgeMethod1" ErrorMessage="Err_0001"
                SuggestionMessage="Sug_0001" MethodComment="判定" />
            </OperationJudgePool>
            <TaskCheckPool>
                <TaskCheck MethodID="CheckMethod1" MethodArg="" MethodComment="エラーリカバリ" />
            </TaskCheckPool>
            <TaskItem TaskItemID="0001" TaskItemName="読み込み開始" UseFormID="Form1">
                <Preload>
                    <Action MethodID="Method1" MethodArg="0001" MehodComment="メソッド(0001)" />
                </Preload>
                <Loaded />
                <StatusUpdate />
                <DecideMethod />
                <Buton1Pushed>
                    <Action MethodID="Transfer" MethodArg="0007" MethodComment="処理終了" />
                </Buton1Pushed>
                <Button2Pushed />
                <Leaved />
            </TaskItem>
            <TaskItem TaskItemID="0007" TaskItemName="処理終了" UseFormID="Form2">
                <Preload>
                    <Action MethodID="Method2" MethodArg="" MehodComment="機能終了" />
                </Preload>
                <Loaded>
                    <Action MethodID="Method3" MethodArg="Form1" MehodComment="前画面終了" />
                <Loaded />
                <StatusUpdate />
                <DecideMethod />
                <Buton1Pushed />
                <Button2Pushed />
                <Leaved />
            </TaskItem>
        </TaskSet>
    </TaskPool>

・Task管理用XML
    埋め込まれたリソースに設定し、
    名前空間を省略せずに記載するとXMLを取得できる

・DBのログを削除する方法
    データベース⇒タスク⇒圧縮⇒ファイル
    ファイルの種類:ログ
    未使用領域を解放する

・Visual Studioのビルドイベント
    既にコピー先に存在する場合は失敗するので注意。 /yで上書き確認しないようにしておく必要がある
    copy "$(ProjectDir)log.config" "$(OutDir)log.config" /y

・変換処理
 16進数文字列からbyte配列を生成
    if(string.IsNullOrEmpty(str))
    {
        return null;
    }
    int len = str.Length / 2;
    byte[] bytes = new byte[len];

    for(int i = 0, j = 0; j < len; i++, j += 2)
    {
        bytes[i] = Convert.ToByte(str.Substring(j, 2), 16);
    }
    return (byte[]).bytes.Clone();

・変換処理
 byte配列から16進数文字列を生成
    if(null == bytes)
    {
        return string.Empty;
    }
    StringBuilder sb = new StringBuilder(bytes.Length * 2);
    foreach(byte b in bytes)
    {
        sb.Append(string.Format("{0:X2}", Convert.ToInt32(b));
    }
    return sb.ToString();

・Entity Framework
 ストアドプロシージャの戻り値を型で取得する方法
    edmxのデータベース更新でストアドを取得した後、
    モデルブラウザー~、store-ストアドプロシージャ―関数インポート
    列情報の取得+複合型の作成

・C# ストアド ジェネリックス
    objectParameter[] para;
    ObjectResult<T> result = this.m_objectContext.ExecuteFunction<T>(ストアド名, para);

・list.sortの書き方
    result.Sort((x, y) => x.USAGE_DATE.CompareTo(y.USAGE_DATETIME));

・現在格納されているデ―タのINSERT文生成方法
    データベースを右クリックし、メニューから[タスク]⇒[スクリプトの生成(E)。。。]
    データベース全体または特定テーブルのいずれかを選択して次へ
    詳細選択をクリックして、スクリプトを作成するデータの種類を[データのみ]に変更する
    確認画面で次へを押すと出力開始

・Excelのキャプチャ(ヘッダ、フッタあり)
    PDFで保存⇒Snipping ToolExcel 保存時 通貨 カッコ つけさせない
    ExBook.SaveAs(i_saveFileName, Local:true);

・Excel 勤務時間を三等分したい場合
    シリアル値を分単位に直す
    分単位にした値/3を再びシリアル値に戻す
    ※
    ・シリアル値を分単位にする方法⇒シリアル値*(24 * 60)
    ・分単位をシリアル値に戻す⇒シリアル値/(24*60)
    ・分単位にした値を/3の値を求める⇒QUOTIENT(4G8*24*60, 3)
    ・割り切れる値かどうか判定する方法⇒/3した結果が1かどうかで判定
     ⇒ROUND(MOD($G8*24*60, 3), 0)

・sqlserverストアド インデックスを張る方法
    ・実行して結果まで出るクエリ部を全選択
    ・ツールバーの推定実行プランの表示を選択
    ・GUI画面の中で、「不足しているインデックス」を右クリック、詳細を表示する
    ・インデックスのコマンドが取得できるので実行する