end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

EVM 基礎の基礎 - PV(計画)、EV(出来高)、EV(コスト実績)

EVMのグラフを理解するだけであれば、PV(計画)、EV(出来高)、EV(コスト実績)の3個だけを理解すれば、OK.

ただし、実際のプロジェクトにおいて EVM管理を行うのであれば、 EVMグラフを作成する元となる WBSでの進捗管理や、工数管理 が必須。

ちなみに、以下の場合、「EV(出来高)は計画と比較し、遅延」更に「EV(コスト実績)は計画と比較し、超過」。

なので、

遅れを取り戻そうと、残業や休日出勤でリカバリーしようとしているが、 遅延や超過コストが、膨らんでいる最悪の状態。

と言えます。

f:id:end0tknr:20190812125027p:plain

mysqlにおける スロークエリーログ ( slow_query_log ) , 一般ログ ( general_log ) 出力設定

すっかり忘れていたので、メモ

一般ログ ( general_log )

mysqlに対する操作が全てログへ出力されます。

手順としては「show variables ~」で現在の設定内容を確認し、「set global ~」で設定するのみ

mysql> show variables like 'general%';
+------------------+----------------------------+
| Variable_name    | Value                      |
+------------------+----------------------------+
| general_log      | OFF                        |
| general_log_file | /var/mysql_data/cent76.log |
+------------------+----------------------------+

mysql> set global general_log=ON;
mysql> set global general_log_file = '/tmp/mysql-general.log';

後はファイルの内容を確認するだけ

# tail -f /tmp/mysql-general.log

スロークエリーログ ( slow_query_log )

先程の 一般ログ ( general_log )と、ほぼ同じ内容です。

mysql> show variables like 'slow%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| slow_launch_time    | 2                               |
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/mysql_data/cent76-slow.log |
+---------------------+---------------------------------+

mysql> set global slow_query_log=ON;
mysql> set global slow_query_log_file = '/tmp/mysql-slow.log';
# tail -f /tmp/mysql-slow.log

Win10環境のIISにおける 複数verのphp (php 5 , php7) の共存

php5 と php7 の install 先

と言っても、win版phpの場合、zipを解答するだけ、私の場合は以下に配備.

c:/PHP/php-5.6.9-nts-Win32-VC11-x64
c:/PHP/php-7.3.8-Win32-VC15-x64

また、download元は以下 https://windows.php.net/downloads/releases/archives/

テスト用 test.php の配備

<?php
phpinfo();
?>

よくある上記の内容にて test.php を作成し、これを以下のように配置。

c:/inetpub/wwwroot/php_test/
   test.php          ---1)
   php5/test.php     ---2)
   php5/php/test.php ---3)
   php7/test.php     ---4)

上記の2)は、php5で動作させ、それ以外はデフォルトとして、php7で動作させたい。

IISマネージャーでの設定

「ハンドラーマッピング」で以下のように設定します f:id:end0tknr:20190806075806p:plain f:id:end0tknr:20190806075809p:plain f:id:end0tknr:20190806075812p:plain f:id:end0tknr:20190806075821p:plain

で、完了

f:id:end0tknr:20190806075817p:plain

javascript製 多機能グラフライブラリ( echarts )の練習 - 3D 散布図

echarts.apache.org

先程のエントリの3次元版

f:id:end0tknr:20190708230441p:plain

↓こう書くと、↑こう表示 & いろいろ操作できます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ECharts sample</title>
  <!-- <script src="http://echarts.baidu.com/dist/echarts.min.js"></script> -->
  <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
  <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts-gl/echarts-gl.min.js"></script>
</head>
<body>
  
  <div id="main_graph" style="width: 100%;height:700px;"></div>
  
  <script type="text/javascript">
   var myChart = echarts.init(document.getElementById('main_graph'));

   var data_a =[[1,26,37,27,1.163,27,13, "優"],
       [2,85,62,71,1.195,60,8,      "良"],
       [3,78,38,74,1.363,37,7,      "良"],
       [4,21,21,36,0.634,40,9,      "優"],
       [5,41,42,46,0.915,81,13, "優"],
       [6,56,52,69,1.067,92,16, "良"],
       [7,64,30,28,0.924,51,2,      "良"],
       [8,55,48,74,1.236,75,26, "良"],
       [9,76,85,113,1.237,114,27,   "良"],
       [10,91,81,104,1.041,56,40,   "良"]];
   var data_b =[[1,91,45,125,0.82,34,23, "良"],
       [2,65,27,78,0.86,45,29,      "良"],
       [3,83,60,84,1.09,73,27,      "良"],
       [4,109,81,121,1.28,68,51,    "不可"],
       [5,106,77,114,1.07,55,51,    "不可"],
       [6,109,81,121,1.28,68,51,    "不可"],
       [7,106,77,114,1.07,55,51,    "不可"],
       [8,89,65,78,0.86,51,26,      "良"],
       [9,53,33,47,0.64,50,17,      "良"],
       [10,80,55,80,1.01,75,24, "良"]];
   // 上記dataの定義
   var schema =[{index: 0, name: 'date',     text: '日'},
       {index: 1, name: 'AQIindex', text: 'AQI指数'}, //空気質指数
       {index: 2, name: 'PM25',     text: 'PM2.5'},
       {index: 3, name: 'PM10',     text: 'PM10'},
       {index: 4, name: 'CO',       text: '一酸化炭素(CO)' },
       {index: 5, name: 'NO2',      text: '二酸化窒素(NO2)'},
       {index: 6, name: 'SO2',      text: '二酸化硫黄(SO2)'}];
   // data表示のstyle (ドットの影)
   var itemStyle = {
     // normal: {
     //   opacity: 0.8,    shadowBlur: 10,
     //   shadowOffsetX: 0,shadowOffsetY: 0,
     //   shadowColor: 'rgba(0, 0, 0, 0.5)'
     // }
   };

   option = {
     title: {text: 'EChartsの練習 3D版',
        link: 'http://www.google.co.jp',
        target: 'blank', // blank or self
        x:'center',
        y:'5px',
        textStyle: { color: '#fff', fontSize: 16 }},
     backgroundColor: '#404a59',
     color:  ['#dd4444', '#fec42c'], 
     legend: {  // 凡例
             data:['本州', '九州'],
             textStyle: {color: '#fff', fontSize: 16},
               orient : 'horizontal',  // horizontal or vertical
               x:'center', y:'30px', // 表示位置
               },
     toolbox: {
       iconStyle : {borderColor: '#fff' },
       feature: {dataView : {title: 'データの表示', 
                lang: ['データの表示','閉じる','更新'],
                readOnly: false},
        restore :     {title: '更新'},
        saveAsImage : {title: '画像保存'}},
       x: 300 // 表示位置
     }, 
     tooltip: {  // カーソルを重ねた際の情報
       padding: 10,
       backgroundColor: '#222',
       borderColor: '#777',
       borderWidth: 1,
       formatter: function (obj) {
         var value = obj.value;
         return '<div style="border-bottom: 1px solid rgba(255,255,255,.3);">'
         + obj.seriesName + ' ' + value[0] + '日:'+ value[7] + '</div>'
         + schema[1].text + ':' + value[1] + '<br>'
         + schema[2].text + ':' + value[2] + '<br>'; }
     },
     xAxis3D: { // 軸の目盛設定
       type : 'value', // value or category
       name: '日',
       nameGap: 16,
       nameTextStyle: {},
       max: 31,
       splitLine: { show: true },
       axisLine:  { lineStyle: {color: '#eee'}}
     },
     yAxis3D: {
       type: 'value',
       name: 'AQI指数',
       nameLocation: 'end',
       nameGap: 20,
       nameTextStyle: {},
       splitLine: {show: true},
       axisLine: { lineStyle: {color: '#eee'}},
     },
     zAxis3D: {
       type: 'value',
       name: 'PM2.5',
       nameLocation: 'end',
       nameGap: 20,
       nameTextStyle: {},
       splitLine: {show: true},
       axisLine: { lineStyle: {color: '#eee'}},
     },
     grid3D: {
       axisLine: {
         lineStyle: {
           color: '#fff'
         }
       },
       axisPointer: {
         lineStyle: {
           color: '#ffbd67'
         }
       },
       viewControl: {
         // autoRotate: true
         // projection: 'orthographic'
       }
     },
     series: [{name: '本州',
          type: 'scatter3D',
               itemStyle: itemStyle,
               data: data_a },
              {name: '九州',
               type: 'scatter3D',
               itemStyle: itemStyle,
               data: data_b } ],
     visualMap: [
       {dimension: 2,  // 表示するdataの種類
   left: 'right', top: '10%',
        min: 0,        max: 250,
        itemWidth: 30, itemHeight: 120,
        calculable: false,
   // calculable: true,
        precision: 0.1,
        text: ['PM2.5'],
        textStyle: { color: '#fff'},
        inRange: {symbolSize: [10, 70] },
        controller: {
           inRange: { color: ['#c23531']}
         }
        },
     ],
   };
   
   myChart.setOption(option);
  </script>

</body>
</html>

javascript製 多機能グラフライブラリ( echarts )の練習 - 散布図

https://echarts.apache.org/en/index.html

f:id:end0tknr:20190708141007p:plain

↓こう書くと、↑こう表示 & いろいろ操作できます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ECharts sample</title>
  <script src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
  <script src="http://echarts.baidu.com/gallery/vendors/echarts-gl/echarts-gl.min.js"></script>
</head>
<body>
  
  <div id="main_graph" style="width: 100%;height:700px;"></div>
  
  <script type="text/javascript">
   var myChart = echarts.init(document.getElementById('main_graph'));

   var dataBJ = [ // 北海道用data
     [1,55,9,56,0.46,18,6,  "良"],
     [2,25,11,21,0.65,34,9, "優"],
     [3,56,7,63,0.3,14,5,   "良"],
     [4,33,7,29,0.33,16,6,  "優"],
     [5,42,24,44,0.76,40,16,    "優"],
     [6,82,58,90,1.77,68,33,    "良"],
     [7,74,49,77,1.46,48,27,    "良"],
     [8,78,55,80,1.29,59,29,    "良"],
     [9,267,216,280,4.8,108,64, "不可"],
     [10,185,127,216,2.52,61,27,"可"],
   ];
   var dataGZ = [ // 本州用data
     [1,26,37,27,1.163,27,13,   "優"],
     [2,85,62,71,1.195,60,8,    "良"],
     [3,78,38,74,1.363,37,7,    "良"],
     [4,21,21,36,0.634,40,9,    "優"],
     [5,41,42,46,0.915,81,13,   "優"],
     [6,56,52,69,1.067,92,16,   "良"],
     [7,64,30,28,0.924,51,2,    "良"],
     [8,55,48,74,1.236,75,26,   "良"],
     [9,76,85,113,1.237,114,27, "良"],
     [10,91,81,104,1.041,56,40, "良"],
   ];
   var dataSH = [ // 九州用data
     [1,91,45,125,0.82,34,23,   "良"],
     [2,65,27,78,0.86,45,29,    "良"],
     [3,83,60,84,1.09,73,27,    "良"],
     [4,109,81,121,1.28,68,51,  "不可"],
     [5,106,77,114,1.07,55,51,  "不可"],
     [6,109,81,121,1.28,68,51,  "不可"],
     [7,106,77,114,1.07,55,51,  "不可"],
     [8,89,65,78,0.86,51,26,    "良"],
     [9,53,33,47,0.64,50,17,    "良"],
     [10,80,55,80,1.01,75,24,   "良"],
   ];
   // 上記dataのcolumn定義
   var schema = [
     {index: 0, name: 'date',     text: '日'},
     {index: 1, name: 'AQIindex', text: 'AQI指数'}, //空気質指数
     {index: 2, name: 'PM25',     text: 'PM2.5'},
     {index: 3, name: 'PM10',     text: 'PM10'},
     {index: 4, name: 'CO',       text: '一酸化炭素(CO)' },
     {index: 5, name: 'NO2',      text: '二酸化窒素(NO2)'},
     {index: 6, name: 'SO2',      text: '二酸化硫黄(SO2)'}
   ];
   // data表示のstyle (ドットの影)
   var itemStyle = {
     // normal: {
     //   opacity: 0.8,    shadowBlur: 10,
     //   shadowOffsetX: 0,shadowOffsetY: 0,
     //   shadowColor: 'rgba(0, 0, 0, 0.5)'
     // }
   };
   
   option = {
     title: {
       text: 'EChartsの練習',
       link: 'http://www.google.co.jp',
       target: 'blank', // blank or self
       x:'center',
       y:'5px',
       textStyle: { color: '#fff', fontSize: 16 }
     },
     backgroundColor: '#404a59',
     // data表示の色 (今回、3種の為、3色)     
     color:  ['#dd4444', '#fec42c', '#80F1BE'], 
     legend: {data: ['北海道', '本州', '九州'], // 凡例
         y: '25px',
//       y: 'top',
              textStyle: { color: '#fff', fontSize: 16 }},
     grid: { // graph本体のpadding ?
        // x: '10%', x2: 150, y: '18%', y2: '10%'
       },
     tooltip: {
       padding: 10,
       backgroundColor: '#222',
       borderColor: '#777',
       borderWidth: 1,
       formatter: function (obj) {
         var value = obj.value;
         return '<div style="border-bottom: 1px solid rgba(255,255,255,.3);">'
         + obj.seriesName + ' ' + value[0] + '日:'+ value[7] + '</div>'
         + schema[1].text + ':' + value[1] + '<br>'
         + schema[2].text + ':' + value[2] + '<br>'
         + schema[3].text + ':' + value[3] + '<br>'
         + schema[4].text + ':' + value[4] + '<br>'
         + schema[5].text + ':' + value[5] + '<br>'
         + schema[6].text + ':' + value[6].toLocaleString() + '<br>'; }
     },
     xAxis: {
       type: 'value', // = value or category
       name: '日',
       nameLocation: 'middle',
       nameGap: 16,
       nameTextStyle: {},
       max: 31,
       splitLine: { show: true },
       axisLine:  { lineStyle: {color: '#eee'}}
     },
     yAxis: {
       type: 'value',
       name: 'AQI指数',
       nameLocation: 'middle',
       nameGap: 20,
       nameTextStyle: {},
       splitLine: {show: true},
       axisLine: { lineStyle: {color: '#eee'}},
     },
     visualMap: [
       {dimension: 2,                   //表示dataのcolumn no
   left: 'right', top: '10%',
        min: 0,        max: 250,        //表示dataの値の範囲
        itemWidth: 30, itemHeight: 120, //ゲージのサイズ 
        calculable: false,
   // calculable: true,
        precision: 0.1,
        text: ['PM2.5'],
        textStyle: { color: '#fff'},
        inRange: {symbolSize: [10, 70] },
        controller: {
           inRange: { color: ['#c23531']}
         }
        },
     ],
    series: [{name: '北海道',
              type: 'scatter',
              itemStyle: itemStyle,
              data: dataBJ },
             {name: '本州',
              type: 'scatter',
              itemStyle: itemStyle,
              data: dataSH },
             {name: '九州',
              type: 'scatter',
              itemStyle: itemStyle,
              data: dataGZ } ],
     toolbox: {
       iconStyle : {borderColor: '#fff' },
       // mouse over (hover)時の色指定方法不明
       feature : {
         dataView : {title: 'データの表示', 
            lang: ['データの表示','閉じる','更新'],
            readOnly: false},
         restore :     {title: '更新'},
         saveAsImage : {title: '画像保存'}
       },
       x : 'right'  // 表示位置
     },
   };
   if (option && typeof option === "object") {
     myChart.setOption(option, true);
   }
  </script>

</body>
</html>

Synology NAS と quickconnect.to

自宅用NASの導入検討メモ。

これまでポータブルHDDでデータをバックアップしていましたが、 Synology NAS & quickconnect.to は、インターネットからの接続を含めた使い方も簡単でお手軽みたい。

www.synology.com

quickconnect.to

お名前.com による「Whois情報公開代行サービス」

DNSをお名前.com、SSL証明書GMO Global Sign で登録していますが、 SSL証明書の更新時における「メール認証」に手間取った為、メモ。

https://www.onamae.com/service/d-regist/option.html

通常、DNSを登録する場合、氏名、メールアドレス、 住所等がwhoisサービスで公開されますが、 お名前.comの「Whois情報公開代行サービス」を利用すると、 氏名、メールアドレス等の個人情報を、お名前.comのもので置き換えられ、 個人情報を隠すことができます。

更に「Whois情報公開代行サービス(メール転送付き)」のサービスでは、 お名前.com 宛のメールが、登録者のメールに転送される為、 SSL証明書の更新時における「メール認証」にも対応できるというもの

ms project 2016で、タスクのリンク設定(先行->後続)を行うと、後続タスクの開始日が自動で前倒し

「先行タスク完了日 - 後続タスク開始日」に余裕(リードタイム?)があるタスクに対し、 ms project 2016あたりから、後続タスクの開始日が自動で前倒しされる。

どうやら、ms projectのオプションで、 「リンクの編集時に手動でスケジュールされたタスクを更新する」の チェックを外すと、解消?されるみたい。

f:id:end0tknr:20190630131230p:plain

↑これらが、↓こうなってしまうので...

f:id:end0tknr:20190630131239p:plain

ms projectのオプションで、以下の設定を変更

f:id:end0tknr:20190630131227p:plain

ms projectにおける タスク <-> マイルストーン の設定変更

以下、忘れるのでメモ

  • STEP1 : 「ガントチャート」ビューで、タスクの右クリックメニューから「情報」を選択。
  • STEP2 : その後、表示される「タスク情報」ダイアログの「詳細」タブにおいて
  • STEP3 : 「マイルストーンに設定する」をチェック

f:id:end0tknr:20190630124928p:plain

f:id:end0tknr:20190630124931p:plain

nginx + supervisord + starlet for perl で 504 Gateway Time-out エラー

starletに「--timeout=1800」を登録するだけでは不十分らしく、 nginx.confに「~_timeout」を追加することで解消

# cat /etc/supervisord.d/splats-starlet.ini
   
[program:splats-starlet]
directory=/home/end0tknr/dev/Splats/script
command=/usr/local/bin/start_server --port=5000 --interval=10 \
        -- /usr/local/bin/plackup -E production --no-default-middleware \
    -s Starlet --max-workers=25 --timeout=1800 --keepalive-timeout=0 \
    --max-reqs-per-child=700 --min-reqs-per-child=1000 \
    /home/end0tknr/dev/Splats/script/splats-server
numprocs=1
autostart=true
autorestart=true
user=shiftkoutei
redirect_stderr=true
stdout_logfile=/home/end0tknr/logs/starlet_error_log
# cat /etc/nginx/nginx.conf

http {
    keepalive_timeout  600;

    proxy_connect_timeout 1800;
    proxy_read_timeout    1800;
    proxy_send_timeout    1800;
      :

数学記号と、それに対応するLaTeX記法

Σ の \sum や、∫の \int は、しばしば使用しますが、 Π の \prod は、よく忘れるので、メモ。

※ それ以外の記号は、LaTeX記法でなく、そのまま文字として記載することが多いので、無視。

※ ∫ のLaTeXは表示が美しくないが、そのうち調べるかも...

記号 意味 LaTex
Π 総乗(1~n項の全ての積) { \Large { \prod_{i=0}^n x_i }}
Σ 総和(1~n項の全ての和) { \Large { \sum_{i=0}^n x_i  }}
積分 { \Large { \int_{a}^{b} f(x) dx }}
:= 定義する
故に
なぜなら
属する
真部分集合
比例

その他参考

https://physnotes.jp/math/math-symbol/

RACI (レイシー)チャート - 実行責任者(Responsible), 説明責任者(Accountable), 協議先(Consulted), 報告先(Informed)

PMBOK, ITIL 等で紹介されていましたが、忘れているので、メモ。

「R」を開発責任者、「A」をユーザ折衝責任者(営業責任者)と考えると、 分かりやすいのかも知れません。

- 項目 内容
R 実行責任者 (Responsible) タスクを実行することに責任を持つ
A 説明責任者 (Accountable) 顧客等に対し、タスクの進捗や結果等を説明することに責任
C 協議先 (Consulted) タスク実行を支援するアドバイスなどを行う
I 報告先 (Informed) タスクの進捗や状況(結果)の最新情報を受け取る

re:「責任」には三つの意味がある - 遂行責任 Responsibility , 面目責任 Accountability , 賠償責任 Liability :他者にかけた迷惑を金銭等で償うこと

↓なるほど、分かりやすい

  • 遂行責任 Responsibility :仕事を最後までやり遂げる(労力と苦痛を引き受ける)こと
  • 面目責任 Accountability :問題の原因を作ったことを認め、立場・面目の低下を甘受すること
  • 賠償責任 Liability :他者にかけた迷惑を金銭等で償うこと

「責任」には三つの意味がある | マネジメントのテクノロジーを考える