OmniAICreator/Qiita-1.07M huggingface dataset:
Excel VBAでCSVファイルをUTF-8 BOMなし出力

#やりたかったこと
CSVファイルをインプットにテーブル登録しなければいけなく、面倒なのでVBAである程度自動化しました。1シート程度だったらば、毎回ファイル形式を指定して保存するのですが、4ファイルをヘッダ行など編集しながら作成するのには辟易としていました。
文字コードはSAPシステムでお決まりのUTF-8のBOMなしです。Excel2013で動かしました。
備忘録として投稿です。

#事前設定
**事前設定が必要**です。[「エクセルのマクロ（VBA）でUTF-8を書き出す方法」](http://qiita.com/takuya-andou/items/013c7b271500005cebe9#utf-8%E3%82%92%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99%E3%81%AB%E3%81%AFadodbstream%E3%82%92%E4%BD%BF%E3%81%86%E8%A8%AD%E5%AE%9A%E3%81%8C%E5%BF%85%E8%A6%81)の記事を参照ください。

#機能
##1. CSVファイル出力
Excel上のボタン押下で動かしました。親プログラムでここから子関数を呼び出します。

```vbnet:WriteCSV.bas
Sub WriteCSV()
'
' WriteCSV Macro
'

'
    Call WriteCsvFile(2, 25, "C:\TestData\Data\ZCCMI0210_FK_BP.csv")
    Call WriteCsvFile(3, 122, "C:\TestData\Data\ZCCMI0250_FK_CONT.csv")
    Call WriteCsvFile(4, 28, "C:\TestData\Data\ZCCMI0190_FK_INST.csv")
    Call WriteCsvFile(5, 24, "C:\TestData\Data\ZCCMI0200_FK_FACT.csv")
    
    MsgBox "CSV File Saved!"


End Sub

```

##2. 実際にファイル出力

```vbnet:WriteCSVFile.bas
Private Sub WriteCsvFile(wsId As Integer, endRow As Integer, csvFileName As String)

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(wsId)
    
    'Create ADODB.Stream Object
    Dim adoSt As Object
    Set adoSt = CreateObject("ADODB.Stream")
    
    Dim strLine As String
    Dim i As Long, j As Long
    
    i = 2
    
    With adoSt
        .charSet = "UTF-8"
        .LineSeparator = adLF
        .Open
    
        Do While ws.Cells(i, 1).Value <> ""
        

            strLine = """"
            For j = 1 To endRow
                
                strLine = strLine & ws.Cells(i, j).Value & ""","""
                
            Next
            
            strLine = strLine & ws.Cells(i, j).Value & """"
            
            
            .WriteText strLine, adWriteLine
            
            i = i + 1
        
        Loop
        
'      フッタ を追記
       .WriteText "8", adWriteLine
        
        
'       BOM削除
        .Position = 0
        .Type = adTypeBinary
        
        .Position = 3
        
        Dim byteData() As Byte
        byteData = .Read
        
        .Close
        
        .Open
        .Write byteData
        
        
        .SaveToFile csvFileName, adSaveCreateOverWrite
        .Close
    
    End With

End Sub

```

#感想
プロジェクトでいくつかあると便利かと思います(特に人の出入りが激しく、どんなデータを作ればどんなテストケースを充足できるか整理できていない場合)。VBAなんて今までほとんど使ったことがないので、ツッコミどころ満載のしょぼいコードです。
WolframAlphaはTeX表記で入力できるって知ってた？

ちょっとした小ネタ
[WolframAlpha](https://www.wolframalpha.com/)を使えば色々計算してくれます。
数式を入力する方法は色々あり，$\TeX$表記を使うこともできます。


$$ \int_{-\infty}^{\infty} e^{-x^2} dx $$
>\int_{-\infty}^{\infty} e^{-x^2} dx

この数式の答えを[WolframAlpha](https://www.wolframalpha.com/)使って確認したいときは，`\int_{-\infty}^{\infty} e^{-x^2} dx`って$TeX$表記で検索窓にぶち込めばいいんです。
[結果はこうなります](https://www.wolframalpha.com/input/?i=%5Cint_%7B-%5Cinfty%7D%5E%7B%5Cinfty%7D+e%5E%7B-x%5E2%7D+dx)
![wolfram1.png](https://qiita-image-store.s3.amazonaws.com/0/94457/14d94eb1-6570-61dc-681e-f0fe35ed2ba4.png)


ちなみに行列とかいくつかの数式は$\TeX$表記出来ないようです。残念。
unity5 C# otherGameObjectからGetComponentするにはFindして見つけてから.備忘録

GetComponentできるのは、ScriptがアタッチされたGameObjectからだけ。
違うGameObjectからGetComponentしたい場合は、まずはFindでその他のGameObjectを見つけてからGetComponentを行う。
Findで見つけてからでないとGetComponentできない。

unity5.3.7
bootstrap を指定の箇所だけ使いたい


http://getbootstrap.com/
を「サイト全体でなく、指定のエリアだけ使いたい！」
と思うことがよくあります。

lessphpを使って
http://leafo.net/lessphp/
`<div class="my_bootstrap"></div>` 内でだけ適用させます。

```my_bootstrap.php
<?

$base_css = 'bootstrap.css';
$dest_css = 'my_bootstrap.css';

require 'lessc.inc.php';
$less = new lessc();

$base = file_get_contents($base_css);

$out = $less->parse(".my_bootstrap {\n\n". $base . "\n\n}");

file_put_contents($dest_css, $out);
```

するとこんな感じのファイルが生成されます。

```my_bootstrap.css

.my_bootstrap html {
  font-family: sans-serif;
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
}
.my_bootstrap body {
  margin: 0;
}
.my_bootstrap article,
.my_bootstrap aside,
.my_bootstrap details,
.my_bootstrap figcaption,
.my_bootstrap figure,
.my_bootstrap footer,
.my_bootstrap header,
.my_bootstrap hgroup,
.my_bootstrap main,
.my_bootstrap menu,
.my_bootstrap nav,
.my_bootstrap section,
.my_bootstrap summary {
  display: block;
}
.my_bootstrap audio,
.my_bootstrap canvas,
.my_bootstrap progress,
.my_bootstrap video {
  display: inline-block;
  vertical-align: baseline;
}

```
JavaScriptで英数を全角/半角に変換する方法

#<i class="fa fa-cubes" style="font-size:1em;"></i> 概要
入力欄に入力された全角英数字をJavaScriptにて半角にする処理

##<i class="fa fa-file-code-o" style="font-size:1em;"></i> 英数字を半角にする場合
全角英数の文字コードから65248個前が半角英数の文字コードとなっている為、
文字コードから65248引いて変換します。

```js:英数字を半角にする場合
//10進数の場合
str.replace(/[Ａ-Ｚａ-ｚ０-９]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) - 65248);
});

//16進数の場合
str.replace(/[Ａ-Ｚａ-ｚ０-９]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
```


##<i class="fa fa-file-code-o" style="font-size:1em;"></i> 英数字を全角にする場合
全角にする場合は
文字コードから65248足して変換します。


```js:英数字を全角にする場合
//10進数の場合
str.replace(/[A-Za-z0-9]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) + 65248);
});

//16進数の場合
str.replace(/[A-Za-z0-9]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
});
```

<i class="fa fa-info-circle" aria-hidden="true"></i> 備考
英字だけ、数字だけの場合は、replace内部[A-Za-z0-9]から必要のない部分を取り除く
ファイルのコピーコマンドのバッチ

## ファイルのコピーコマンド

```cmd
copy copy元ファイル名 copy先ファイル名
```
→コピー先のパスを書かないとcurrent directoryに作られます。例：`C:\project\file.html`
ちなみにcurrent directoryの変更の仕方は`cd パス`です。

## バッチ化

テキストファイルにコマンドを記述して、
拡張子を●●.batで保存
例：`copy.bat`

## バッチ実行
コマンドプロンプト起動して
起動したいバッチ●●.batを入力
例：`C:\project\copy.bat`

おわり。
複数カラムの内容をカンマ区切りで連結、空欄は飛ばすSQL

```
SELECT CONCAT_WS(',', NULLIF(`c1`,''),NULLIF(`c2`,''),NULLIF(`c3`,''),NULLIF(`c4`,''),NULLIF(`c5`,''),NULLIF(`c6`,''))  
FROM `tb`
```

下記のような結果が出る

```
a,b,c
d,e
f,g,h,i,j
k
```

カラムにNULLを可にしていて、空欄とNULLを分けている場合はNULLIFを使わずにカラム名だけにする
Laravel5+laravel-snappyでPDF出力する際のヘッダー・フッター設定とか改ページしたい時のあれこれ

Laravel5+laravel-snappyでPDF出力機能実装した際に、少しハマったところがあったのでメモ。

導入方法はこの記事参考にさせていただきました。<br>
[Laravel5でLaravel-Snappy(wkhtmltopdf)を使用してPDF出力機能を実装してみる](http://qiita.com/qwe001/items/7eb3e338fc48325be08d)

## 環境
* PHP7.1.1
* Laravel5.3
* laravel-snappy 0.3.1

```route/web.php
Route::get('/', function() {
        $pdf = PDF::loadView('pdf', ['pages' => range(1, 3)])
            ->setPaper('A4')                                // 用紙サイズ
            ->setOption('encoding', 'utf-8')                // Encoding
            ->setOption('margin-top', 10)                   // 上マージン
            ->setOption('margin-bottom', 10)                // 下マージン
            ->setOption('margin-left', 10)                  // 左マージン
            ->setOption('margin-right', 10)                 // 右マージン
            ->setOption('orientation', 'Landscape')         // 横向き
            ->setOption('header-font-size', 16)             // ヘッダーフォントサイズ
            ->setOption('header-center', 'Header Center')   // ヘッダー中央
            ->setOption('header-left', 'Header Left')       // ヘッダー右
            ->setOption('header-right', 'Header Right')     // ヘッダー左
            ->setOption('footer-font-size', 16)             // フッターフォントサイズ
            ->setOption('footer-left', 'Footter Left')      // フッター右
            ->setOption('footer-right', 'Footter Right')    // フッター左
            ->setOption('footer-center', '[page] ページ')    // フッター中央 [page]でページ番号が自動で入ります
            ->setOption('header-font-name', 'IPAexMincho')  // ヘッダーフォント名
            ->setOption('footer-font-name', 'IPAexMincho'); // フッターフォント名

        // インラインでPDF表示
        return $pdf->inline();

        // ダウンロードする場合
        return $pdf->download('download.pdf');
});
```
ヘッダー・フッター周りはsetOptionで設定します。これがわからず、HTML側のフォントと違うフォントで出力されてしまって結構ハマった。


### Bladeファイルを作成
```resource/view/pdf.blade.php
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
    <head>
        <title>PDF出力テスト</title>
        <style>
            .page {
                page-break-after: always;
                page-break-inside: avoid;
            }
            .page:last-child{
                page-break-after: auto;
            }
        </style>
    </head>
    <body>
@foreach ($pages as $page)
        <div class="page">
            {{ $page }}ページ目
        </div>
@endforeach
    </body>
</html>
```

PDF出力でBladeテンプレート使えるのはかなり便利(小並感<br>
".page:last-child{ page-break-after: auto; }" これが無いと改ページしても、最後に余計なページができてしまう。

出力するとうまく改ページされて表示できます。
![laravel-snappy.png](https://qiita-image-store.s3.amazonaws.com/0/121487/e7cc4678-f758-05c6-ebac-67e4a63ce03e.png)
Python > 実行時引数を指定して実行する > import argparse使用

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

実装中のPython scriptで実行時引数を指定して実行したい。

参考 http://qiita.com/munkhbat1900/items/d7f9b11fb0965085964e
参考 http://qiita.com/petitviolet/items/b8ed39dd6b0a0545dd36

## v0.1 > AttributeError: 'Namespace' object has no attribute 't'

上記２つを参考に以下の実装をした。

```test_python_170323i.py
import argparse

parser = argparse.ArgumentParser(description = "do something")

parser.add_argument(
	'-t',
	'--timeIndex',
	type = int,
	help = 'time index for netCDF file',
	required = True)

cmd_args = parser.parse_args()

print(cmd_args.t)
```

```
$ python test_python_170323i.py -t 314
Traceback (most recent call last):
  File "test_python_170323i.py", line 14, in <module>
    print(cmd_args.t)
AttributeError: 'Namespace' object has no attribute 't'
```

tというattributeがないとなる。

## v0.2 > 成功

```test_python_170323i.py
import argparse

parser = argparse.ArgumentParser(description = "do something")

parser.add_argument(
	'-t',
	'--timeIndex',
	type = int,
	help = 'time index for netCDF file',
	required = True)

cmd_args = parser.parse_args()

print(cmd_args.timeIndex)
```

```txt:結果
$ python test_python_170323i.py -t 314
314
```

`--timeIndex`を指定する場合は、読出し時に`.t`でなく`.timeIndex`を使うということらしい。


https://docs.python.jp/3/library/argparse.html
あたりが関係しそう。

## v0.3 > 属性名の指定

destを指定することで属性名を指定できるようだ。

https://docs.python.jp/3/library/argparse.html
の16.4.1.2. 引数を追加する
> accumulate 属性はコマンドラインから --sum が指定された場合は

```py
import argparse

parser = argparse.ArgumentParser(description = "do something")

parser.add_argument(
	'-t',
	'--timeIndex',
	dest='time_index',
	type=int,
	help='time index for netCDF file',
	required=True)

cmd_args = parser.parse_args()

print(cmd_args.time_index)
```

### 備考

```
$ python calc_latlon_avg_std_170323.py --timeIndex -20
total: 3477.89
avg_lat: 40.480
avg_lon: 116.246
std_lat: 0.137
std_lon: 0.103
```

```
$ python calc_latlon_avg_std_170323.py --timeIndex 4
total: 3477.89
avg_lat: 40.480
avg_lon: 116.246
std_lat: 0.137
std_lon: 0.103
```

timeIndex指定時に-20を受け入れている。その値は24でラップアラウンドしていて、4を指定した場合と同じ結果になっている。
(timeIndexは実際、[0..23]が指定するようになっている)。
AWS CLIでELB配下のEC2インスタンスの一覧を取得する

###ELB名からインスタンス一覧を取得する
```
aws elb describe-instance-health --load-balancer-name={ELB_NAME} --query "InstanceStates[*].InstanceId" --output table --profile {CLI_PROFILE}
```

######実行例
```
------------------------
|DescribeInstanceHealth|
+----------------------+
|  i-00000000          |
|  i-11111111          |
|  i-22222222          |
|  i-33333333          |
|  i-44444444          |
+----------------------+
```


###インスタンスIDから接続情報を取得する
```
aws ec2 describe-instances --instance-ids {INSTANCE_ID} --query "Reservations[*].Instances[*].{PublicDnsName:PublicDnsName,PublicIpAddress:PublicIpAddress,PrivateIpAddress:PrivateIpAddress}" --output table  --profile {CLI_PROFILE}
```

######実行例
```
----------------------------------------------------------------------------------------------------
|                                         DescribeInstances                                        |
+------------------+-----------------------------------------------------------+-------------------+
| PrivateIpAddress |                       PublicDnsName                       |  PublicIpAddress  |
+------------------+-----------------------------------------------------------+-------------------+
|  172.30.xx.xxx   |  ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com  |  xx.xxx.xxx.xxx   |
+------------------+-----------------------------------------------------------+-------------------+
```

###ELB配下のEC2インスタンスの接続情報を取得する
outputをtextにしてインスタンスID一覧を取得すればそのまま--instance-idsに指定できる

```
#!/bin/bash

ELB_NAME=elb-xxx
CLI_PROFILE=cliprofile

INSTANCE_IDS=`aws elb describe-instance-health --load-balancer-name=${ELB_NAME} --query "InstanceStates[*].InstanceId" --output text --profile ${CLI_PROFILE}`
aws ec2 describe-instances --instance-ids ${INSTANCE_IDS} --query "Reservations[*].Instances[*].{PublicDnsName:PublicDnsName,PublicIpAddress:PublicIpAddress,PrivateIpAddress:PrivateIpAddress}" --output table  --profile ${CLI_PROFILE}
```

###ELB配下のEC2にsshでシェルを叩く
EC2群に一括で簡易的な処理をしたい時などに

```
#!/bin/bash

ELB_NAME=elb-xxx
CLI_PROFILE=cliprofile
SSH_KEYFILE=/home/ec2-user/.ssh/hoge.pem

INSTANCE_IDS=`aws elb describe-instance-health --load-balancer-name=${ELB_NAME} --query "InstanceStates[*].InstanceId" --output text --profile ${CLI_PROFILE}`
ENDPOINTS=`aws ec2 describe-instances --instance-ids ${INSTANCE_IDS} --query "Reservations[*].Instances[*].PublicDnsName" --output text  --profile ${CLI_PROFILE}`

for ENDPOINT in ${ENDPOINTS}
do
        ssh -i ${SSH_KEYFILE} ec2-user@${ENDPOINT} cmd
done
「Docker時代の分散RSpec環境の作り方」の補足

この記事は、大江戸Ruby会議06で発表した [Docker時代の分散RSpec環境の作り方 // Speaker Deck](https://speakerdeck.com/joker1007/dockershi-dai-falsefen-san-rspechuan-jing-falsezuo-rifang) の補足です。

何人かに質問されたことや、良いことばかりじゃなくて現状存在している課題について補足として、ここで書かせてもらいます。

まず、良く質問されたのがテストケースの分割方法です。

テストケースの分割は、現状とても雑にやってます。
まず、featureスペックのファイルだけをリストアップして適当にシャッフルして詰めます。
その後で、他のテストケースを順番に詰める、という感じです。
多少、無駄ではあるんですが、前のテスト結果のプロファイルの収集と詰めるロジックを書くのをサボっても、現状大分早くできたので、とりあえず作りを簡単にする方を優先しました。

課題の中で最も大きな問題は、ログが見辛いという点です。
ECSはログを準リアルタイムで確認するのが、かなり難しいという問題があります。
現在は、syslogログドライバーを利用してpapertrailというログ収集サービスにTLSで直接送り込んでます。
コミット毎に別の識別子を付与する様にしているので、概ね確認はできるし、エスケープシーケンスによる色分けも出来るのですが、並列で実行している結果全てが同じ識別子で出力されるので、結構見辛いです。
一応、最終的な出力で落ちたテストの情報は、CircleCI上にJUnit Formatterの結果として表示されることはされるので、最低限の出力は出る様になってますが。

一応、並列実行の一つ一つレベルで識別子を付与してログの検索結果を独立させることは可能なのですが、ECSのログドライバーのconfigを変更するには現状でtask definitionレベルで変更する必要があります。
そうするとCI実行毎に`register_task_definition`というAPIを並列数分叩く必要があり、APIリクエストのスロットルに引っかかる可能性があります。
また、ECSで使われているDockerのバージョンとECSの基本的なストレージドライバーであるdevice mapperの扱いにバグがある様で、同時にイメージDL処理が走るとストレージドライバーレベルでエラーになる可能性があり、コンテナの起動に失敗する可能性が上がる、という問題があって今はそういう形にしていません。

その他の課題としては、テストをキックした側でコマンドがキャンセルされて中断されたとしても、キャンセル命令をECS側まで届けることが難しいという点です。
これはCLIとしてwrapbox gemを実行した際にシグナルハンドルを定義して、タスクのキャンセルAPIを叩きにいく様にすれば可能だと思いますが、gemの複雑さが増すので、ここも無駄を承知で元がキャンセルされても、コンテナ時代は普通に終わるまで実行が継続される様になってます。
LESS に行番号つけて色をつけるのが便利

今更だけどTwitterで流れてきて便利すぎたのでメモ。

* 行番号オプション「-N」
* 読み込み位置をパーセント表示「-M」
* [ソースコードに色をつける](http://blog.elliptium.net/2011/11/less-homebrew)

# 結果

次の2行を追加しました。

```bash:.bash_profile
export LESS="-NMR"
export LESSOPEN='| /usr/local/bin/src-hilite-lesspipe.sh %s'
```
Linux文字列操作学習：sed

Linuxで文字列を操作しデータを整形する方法について、各手法の特性や基本的な文法などを確認する。
今回はsedについて。

#■sedについて
Stream EDitor の略であるsedは、名前の通りに入力ストリームに対しテキスト変換処理を行い結果を出力する。
Linuxコマンドとしては、文字列をパイプを用いた標準入力、あるいはファイル指定による読み込みで入力し、スクリプトにより編集した後に結果を標準出力に出力するか、読み込み元ファイルを上書きする。

```bash:ex1
$ echo 'good morning' | sed -e 's/morning/evening/g'
good evening
```

構文は後述するが、例ex1では'good morning'という文字列を入力とし、
入力テキスト中の'morning'という文字列を'evening'に置換する編集処理を行い
出力している。

#■基本的構文

```
sed [-オプション] '[アドレス]コマンド文字[コマンドパラメータ]' [入力ファイル]
```

ここで言う"アドレス"とはコマンド実行対象行のことであり、
数値による行番号の指定や正規表現によるマッチング判定での行指定などが行える。

```bash:ex2
sed -e '4s/white/black/' /var/tmp/goods.txt
```

ex2の場合
　'-e'　がオプション
　'4'　がアドレス
　's'　がコマンド文字
　'/white/black/'　がコマンドパラメータ
　'/var/tmp/goods.txt'　が入力ファイル
にあたり、
goods.txtの4行目の'white'を'black'に置換するというような処理になる。

#■代表的オプション

-e
　後ろに続く文をスクリプトとして解釈し実行する。
　これを用いることで、コマンドを複数実行することも可。

```bash:ex3
sed -e 's/a/b/' -e 's/c/d/'
```
　ex3の場合、入力に対しaをbに置換し、cをdに置換する。

-f
　後ろに続く文をスクリプトのファイル名として解釈し実行する。

-i
　入力ファイルを上書きし、スクリプト実行後の状態に更新する。

-n
　各行の自動出力を抑制し、明示的に出力したもの以外は出力されないようにする。

なお、-e,-fいずれのオプションも指定されていない場合は
最初のオプションでない引数がスクリプトとして解釈され、
残りの引数は入力ファイルとして解釈される。

#■代表的コマンド

・s コマンド
　コマンドパラメータに正規表現によるマッチ式と置換後文字列を指定することで、
　入力行の正規表現にマッチした箇所を置換後文字列に置換する。

```
s/[正規表現]/[置換後文字列]/
```

　なお、最後部に何も書かない状態では、行中で最初にマッチした箇所のみを
　置換するが、最後部にgを書くことで行中でマッチした箇所全てを置換する。

```
s/[正規表現]/[置換後文字列]/g
```

```bash:ex4
$ echo aabbcc | sed -e 's/b/d/'
aadbcc
$ echo aabbcc | sed -e 's/b/d/g'
aaddcc
```

　また、置換後文字列文中で'&'を用いることで、
　マッチした文字列を表すことができる。

```bash:ex5
$ echo パン | sed -e 's/パン/フライ&/'
フライパン
```

・dコマンド
　アドレスに指定した行を削除する。
　特定行を除いて出力する時などに使用する。

```bash:ex6
sed '7d' [入力ファイル]
```

　これだけで入力ファイルの7行目以外を出力できる。

・pコマンド
　単に指定した行を出力する。
　-nオプションと組み合わせ、特定の行のみを出力させることができる。

```bash:ex7
sed -n '3p' [入力ファイル]
```

　これでex6とは逆に、3行目のみをそのまま出力する。


今回も基礎的な内容のみまとめたが、以上。

正規表現の活用により、複雑なパターンマッチ置換処理も行えるので
文字列操作を行なう際の手法の候補として覚えておきたい。

（参考サイト）
https://hydrocul.github.io/wiki/commands/sed.html
https://linuxjm.osdn.jp/html/GNU_sed/man1/sed.1.html
Chrome環境のNode-REDでfunctionノードのカーソル位置がずれる

# 現象
Chrome環境のNode-REDで、function処理ノードのEditorのカーソルがズレまくって嫌になる。

# 原因
Chromeの固定幅フォントがOsakaになってる。

# 解決方法
Chromeのフォント設定で固定幅フォントをMonacoにする。
※ 別にMonacoでなくても良いけど、参考サイトにあったので採用しました。他に良いフォントがあったら教えてください。

# 参考
* [Chromeの等幅フォントがOsakaになってる件 - Webtech Walker](http://webtech-walker.com/archive/2011/04/29180449.html)
* [Chrome 56 でデフォルトのフォントがMS Pゴシックからメイリオに変更 – What I Know ～ワッタイナ](http://blog.oyasu.info/2017/01/27/5614/)

# 調査
以下のSlideShareでも同様の現象が報告されてた。
[PaaS ×iot! node red勉強会質問箱](https://www.slideshare.net/takehikoamano/paas-iot-node-red)
> 質問: function のエディタのカーソル位置がずれまくるんだけど仕様ですか？ →だいたいは普通な感じ。ブラウザ依存？Firefox は大丈夫、Chrome だと発生する。 カーソルを使って移動してはいけないという仕様（違う） →https://github.com/node-red/node-red/issues/718

FirefoxだとOsaka-Monoでしたが、ChromeにはOsaka-Monoがありませんでした。
エリック・エヴァンスのドメイン駆動設計 読書メモ4

[読書メモ3](http://qiita.com/kawachi/items/8da66cda3fb63c098a78) の続き。
引き続き第14章を読みました。

## 第4部 戦略的設計

システムの複雑さがました場合、全詳細を把握することなくモデルを把握するためのテクニックが必要だ。
コンテキスト、蒸留、大規模な構造をみていく。

### 第14章 モデルの整合性を維持する

異なるモデルを持つチーム間で実装を共有すると不整合が発生して死ぬ。
モデルが整合性を維持することは重要だ。しかし、巨大なシステムではひとつの整合したモデルを作ることは現実的ではない。調整で動きが取れなくなったり、一部の人にはぎこちないモデルになったりといった問題が出て来る。

代わりに、部分的に統一したモデルを作成する。
ここは統一すべきという意思決定、ここは統一しないでおいたほうが良さそうだという現状認識を共有することで、システムの全体を捉えることができる。
モデル間の境界と関係性を明らかにする必要がある。

#### 境界づけられたコンテキスト

モデルが適用できる範囲のことをコンテキストと呼ぶ。境界によって区切られるので境界づけられたコンテキスト(bounded context)と呼ばれる。
境界づけられたコンテキストの中に複数のモジュールを構成するのが一般的だ。

境界を認識することが第一歩。
モデルが違えばコンテキスト外。モデルによって駆動されているもの(例: DBスキーマ)はコンテキスト内。

コンテキスト内では1つのモデルを使う。
コンテキスト外をそれと認識せず、モデルをなんとなく共有することにはリスクがある。

モデルが混じっていることを認識する方法。

- 同じ概念が2つの別言葉で話される
- 同じ言葉が2つの別概念を表す
- コード上でインタフェースが組み合わせられない
- コードが予期していない振る舞いをする

混じっていると気づいたら対策が必要になる。

#### 継続的な統合

コンテキスト内でモデルの分裂を頻繁に統合することを継続的な統合と呼ぶ。
モデル概念と実装の両面で統合が必要だ。
モデル概念の統合はメンバ間での絶え間ないコミュニケーションにより達成する。
実装の統合はCI、自動テスト、ブランチマージまでの時間上限を決めるなどで達成する。

#### コンテキストマップ

モデルや設計は組織構成に影響を受ける。会話をする人同士はコンテキストを共有するようになる。

境界づけられたコンテキストそれぞれに名前を付け、コンテキスト間の関係と、コンテキストが持つ各モデル間の対応関係を記載したものをコンテキストマップと呼ぶ。
コンテキストマップは現状を把握するためのものであり、ありのままの状況を記載することが重要だ。
コンテキストマップには特定の文書フォーマットは無い。

モデルをまたいで対応するオブジェクト間を変換するサービスが境界に存在する。

コンテキストマップをドキュメント化する際に重要なのは次の2点。

- 境界づけられたコンテキストに名前をつけること。その名前を各チームのユビキタス言語に加える。
- 境界を全員が認識できること。任意のコード辺が属するコンテキストを認識できなければならない。
    - 命名規則などで達成する

#### 境界づけられたコンテキスト間の関係

コンテキスト間関係のうち最も一般的で重要なケースは次の通り。

- 共有カーネル
    - コンテキスト間で共有するモデルのサブセットを指定する
	- モデル及びモデルに付随するコード、DBなどは変更時にチーム間の相談を経なければならない
- 顧客/供給者の開発チーム
    - 利用が単方向であるとき
	- チーム間の政治的関係によっては動きが取りづらくなることがある。顧客側チームの代表が供給者側のプラニングに参加させることで、対話によって解決を目指すことができる。
	- 自動化された受け入れテストを共同で開発し、供給者側のCIで実行する
- 順応者
    - 自分が顧客側であり、供給者側にアクセス出来ない場合に、供給者側のモデルに隷属するパターン
- 腐敗防止層
    - 出来が良くない他コンテキストと統合したい場合、概念モデル間を変換する層を設けるパターン
	- 使えるデザインパターンとしてファサードとアダプタがある
	- 接続相手のリファクタリング、自モデルの歩み寄りにより、腐敗防止層の複雑さを低減することを検討する
- 公開ホストサービス
    - 人気のあるコンテキストを対象に、アクセスするプロトコルを公開するパターン
- 公表された言語
    - 複数コンテキストの接点で変換するときに、変換用に作り出す言語のこと
	- 関心のあるコミュニティが自由にアクセスできる状態にする（公表）

#### コンテキストマップの変更戦略

現状のコンテキストマップからはじめ、現実的な選択をすること

大きいコンテキスト、小さいコンテキストそれぞれに利点と欠点がある。バランスを取ること。

外部システムを位置づけるときは次のいずれかになる。

- 統合しない(別々の道)
- 順応者から腐敗防止層のグラデーションのどこかで統合する

設計中のシステムではコンテキスト境界の引き方に裁量が大きい。
一般的に境界づけられたコンテキスト1つに対して1チームが対応する。複数のチームが1つの境界づけられたコンテキストに取り組むのは難しい。

様々なグループが異なる言葉を使っているとき、モデルを統合するか、別モデルとして扱うかという悩みがある。そのグループの用語にどれほどの価値があるのかを問うことでヒントになることがある。

デプロイ計画は境界の引き方とコンテキスト間関係にフィードバックされるべき。

コミュニケーション意欲や能力、システム全体に対するコントロールによって、適したコンテキスト間関係は異なる。

## 感想

14章は内容が多い。4部を一回で終わらせるつもりだったが14章だけでお腹がいっぱいになってしまった。
ざっくり言えば、モデルの整合性を保つために、そのモデルが通用する境界を設定してうまくやろうという話。

コンテキスト間関連を明らかにし、関係パターンを適切に選ぶことが、整合性に寄与する。境界の引き方や、パターンの選択にはチームの構成、チーム間関係（力関係を含む）が影響を及ぼすという点は興味深い。設計や実装を中心におき、チームやその関係を適切な形に調整することを私は考えてしまうことが多い。しかし反対に組織構造が設計・実装に与える影響があるということを示唆している。境界の引き方については、むしろ既存の組織構造を反映することを勧めているように聞こえる。

端的にいえば、隣の席にいるのとオフィスの端と端にいるのとで、適切な設計が変わってくるってこと。リモートワークだったらまた変わってくるのだろう。仕事の会話を行う量がポイントなので、仲の良さ(?)なんてのも影響するかもしれない。
必ず元の場所に戻るランダムウォークのサンプル

# 概要

一定量の移動幅を持つランダムウォークをし終わったときに、必ず元の場所に戻ってくるコードのサンプルです。

# 原理

プラス方向に移動した分だけマイナス方向にも動く（どのタイミングで逆の動きをするかはランダム）ことにより、移動量の合計が0に戻る仕組みです。

# デモ

![キャプチャ画像](https://i.gyazo.com/e7e4a44b9e492b7bf011e5483d9496b2.gif)

こんな風に横移動した後に最初の位置に戻ります。

デモページ:
http://codepen.io/butchi/pen/XMqevj

# サンプルコード

シャッフルには[Fisher–Yatesアルゴリズム](http://qiita.com/komaji504/items/62a0f8ea43053e90555a)を用いましたが、
[Underscore](http://qiita.com/takeharu/items/7d4ead780710c627172e)の_.shuffleとかで代用できるので読み飛ばせばOK。

```js
const LENGTH = 25; // 25×2の50回ランダムウォークする
const MAGNITUDE = 10; // 振動ピクセル幅

// 入力した正の数を正負両方含む配列（倍のサイズ）として返す
function double(arr) {
  let ret = [];

  arr.forEach((num) => {
    ret.push(num);
    ret.push(-num);
  });

  return ret;
}

// Fisher–Yatesアルゴリズムによる配列シャッフル
function shuffle(arr) {
  let ret = [].concat(arr);

  for(let i = ret.length - 1; i > 0; i--){
    let r = Math.floor(Math.random() * (i + 1));
    let tmp = ret[i];
    ret[i] = ret[r];
    ret[r] = tmp;
  }

  return ret;
}

// ランダムウォークの対象要素
let walkerElm = document.querySelector('.walker')

// ランダムウォークを始めるボタン
let startBtn = document.querySelector('.btn-start');

startBtn.addEventListener('click', () => {
  // ランダム数値配列（mapを有効にするため一旦0で初期化）
  let deltaXArr = (new Array(LENGTH)).fill(0).map(() => {
    return Math.random() * MAGNITUDE;
  });

  let deltaXArr2 = double(deltaXArr);
  let shuffleXArr = shuffle(deltaXArr2);

  // 累積変動量
  let deltaX = 0;

  for(let i = 0; i < LENGTH * 2; i++) {
    setTimeout(() => {
      deltaX += shuffleXArr[i];
      walkerElm.style.transform = `translateX(${deltaX}px)`;
    }, i * 50);
  }
});
```

今回は簡単のため横軸のみ移動にしましたが、
X軸とY軸だったり絶対値(abs)と偏角(arg)の2つの配列で処理すれば平面上のランダムウォークも実装できます。
EC2 Systems Manager(SSM)でAMIMOTOのNginx / PHP / Perconaバージョンを確認する


State Managerから「AWS-GatherSoftwareInventory」というドキュメントを関連付けすることで、インスタンス内の「applications」「awsComponents」「customInventory」「networkConfig」「windowsUpdates」をSSMエージェントが定期的に収集してくれる。

これをAWS-CLIやSDKから引っ張ってくるようにすれば、管理しているインスタンスの情報をssh接続せずに確認できるようになる。
## 今回の対象
例によって[AMIMOTO AMI(HVM)](https://aws.amazon.com/marketplace/pp/B00LWHVJH8)です。

## AWS-CLIでNginxのバージョンを調べる

```bash
$ aws ssm list-inventory-entries \
--instance-id YOUR_INSTANCE_ID \
--type-name "AWS:Application" \
--filters Key=Name,Values=nginx,Type=BeginWith
{
  "InstanceId": "i-XXXXXXXXXXXXXX",
  "TypeName": "AWS:Application",
  "Entries": [
    {
      "Publisher": "nginx inc. via OpsRock LLC",
      "Name": "nginx",
      "URL": "http://nginx.org/",
      "Version": "1.11.10",
      "ApplicationType": "System Environment/Daemons",
      "InstalledTime": "2017-03-22T00:20:56Z",
      "Architecture": "x86_64"
    }
  ],
  "SchemaVersion": "1.0",
  "CaptureTime": "2017-03-23T08:30:55Z"
}
```

`--filters`を付けないとインスタンス内にあるアプリの情報全部出してくるので見るのが大変です。
クエリは`Key=Name,Values=アプリ名,Type=BeginWith`にしておくと前方一致で検索してくれるので、`php-CCC`みたいなものも取得できます。

## AWS-CLI + jqでPHPのバージョンを見る
jqと組み合わせるといい感じに情報が取りやすいです。

```bash
$ aws ssm list-inventory-entries \
--instance-id YOUR_INSTANCE_ID \
--type-name "AWS:Application" \
--filters Key=Name,Values=php,Type=BeginWith | jq ".Entries[] | .Name,.Version"
"php"
"7.0.17"
"php-cli"
"7.0.17"
"php-common"
"7.0.17"
"php-devel"
"7.0.17"
"php-fpm"
"7.0.17"
"php-gd"
"7.0.17"
"php-json"
"7.0.17"
"php-mbstring"
"7.0.17"
"php-mcrypt"
"7.0.17"
"php-mysqlnd"
"7.0.17"
"php-opcache"
"7.0.17"
"php-pdo"
"7.0.17"
"php-pear"
"1.10.3"
"php-pecl-memcache"
"3.0.9"
"php-pecl-zip"
"1.13.5"
"php-process"
"7.0.17"
"php-xml"
"7.0.17"
```

## AWS-CLIでNginx / Percona / PHPのバージョンを一気に調べる
`--filters`のValuesはカンマ区切りで複数指定できます。
なので調べたいものをまとめて指定してやれば網羅も簡単です。

```bash
$ aws ssm list-inventory-entries \
--instance-id YOUR_INSTANCE_ID \
--type-name "AWS:Application" \
--filters Key=Name,Values=php,nginx,percona,Type=BeginWith | jq ".Entries[] | .Name,.Version"
"nginx"
"1.11.10"
"Percona-Server-client-56"
"5.6.35"
"Percona-Server-server-56"
"5.6.35"
"Percona-Server-shared-56"
"5.6.35"
"php"
"7.0.17"
"php-cli"
"7.0.17"
"php-common"
"7.0.17"
"php-devel"
"7.0.17"
"php-fpm"
"7.0.17"
"php-gd"
"7.0.17"
"php-json"
"7.0.17"
"php-mbstring"
"7.0.17"
"php-mcrypt"
"7.0.17"
"php-mysqlnd"
"7.0.17"
"php-opcache"
"7.0.17"
"php-pdo"
"7.0.17"
"php-pear"
"1.10.3"
"php-pecl-memcache"
"3.0.9"
"php-pecl-zip"
"1.13.5"
"php-process"
"7.0.17"
"php-xml"
"7.0.17"
```
Python > list > 二重listを一重listに変換する

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

関連: [Python > tuple > 二重tupleを一重tupleに変換する](http://qiita.com/7of9/items/e81987c634aabec24d5c)

- 方法1: 内包表記
- 方法2: itertools使用

参考: http://stackoverflow.com/questions/2961983/convert-multi-dimensional-list-to-a-1d-list-in-python
参考: http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python

```test_python_170323e.py
import itertools

alist = [[3, 1, 4], [1, 5, 9], [2, 6, 5]]
print(alist)

# 1 
res = [ flatten for inner in alist for flatten in inner ]
print(res)

# 2
res = itertools.chain(*alist)
res = list(res)
print(res)

```

```txt:結果
$ python test_python_170323e.py 
[[3, 1, 4], [1, 5, 9], [2, 6, 5]]
[3, 1, 4, 1, 5, 9, 2, 6, 5]
[3, 1, 4, 1, 5, 9, 2, 6, 5]
```

個人的にはitertoolsの方が可読性が高いと現在(2017/03/23)は思っている。
Amazon Lightsail で LAMP Stack を使う（MySQL接続）

Amazon Lightsail で作成されるLAMP StackでMySQLにコンソールあるいはSQLクライアントから接続する方法を整理しました。

# コンソールから接続

下記説明はLightsailのコンソールでの操作の手順となっていますが、ターミナルクライアントからの手順も同じです。

## Lightsailのコンソールを起動

Lightsailから対象のサーバを選択し、画面中央部にある「Connect using SSH」ボタンをクリックしてください。

![console_open.png](https://qiita-image-store.s3.amazonaws.com/0/62038/a2fc3e98-15b0-475b-e18b-27e4dd7f7884.png)

コンソールウィンドウが立ち上がります。

![console.png](https://qiita-image-store.s3.amazonaws.com/0/62038/b9471f8b-f56a-d674-88a9-c9184a59cb9b.png)

## データベースのパスワードを確認

コンソールで以下のコマンドを実行してください。
```bash
cat bitnami_application_password
```
コンソール上にランダムな英数字の文字列のパスワードが表示されます。

## MySQLに接続

コンソールで以下のコマンドを実行してください。
```bash
mysql -u root -p
```
パスワードの入力を求められますので、先ほど確認したパスワードを入力してください。

## データベース一覧を確認

MySQLに繋いだらデータベースの一欄を確認しましょう。

```bash
show databases;
```
![mysql_databases.png](https://qiita-image-store.s3.amazonaws.com/0/62038/1784a532-6489-e9be-b087-17d6113e80b4.png)

初期状態では以下のデータベースが存在していることが分かります。
* infomation_schema
* mysql
* performance_schema
* test

# SQLクライアントから接続

LAMP StackのMySQLの初期設定では、localhostからの接続しか許可していません。

そのため、SQLクライアントから直接サーバのIP、ユーザ、パスワードを指定して接続しても繋がりません。

SSHトンネルを使用した接続を行う必要があります。

## MySQL Workbenchの起動

MySQL Workbenchを起動し、データベース接続の追加を怒ってください。

*※今回は、MySQL Workbenchでの手順としますが、他のSQLクライアントでもSSHトンネルでの接続で同じ手順で実施出来ると思います。*

## 接続設定

* Connection Name：任意の名前
* Connection Method：「Standard TCP/IP over SSH」
* SSH Hostname：パブリックIP:ポート番号「22」
* SSH Username：「bitnami」
* SSH Key File：サーバ作成時に指定した認証キー
* MySQL Hostname：「localhost」(127.0.0.1でもOK)
* MySQL Server Port：「3306」
* Username：「root」
* Password：先ほど取得したパスワード

![mysql_workbench.png](https://qiita-image-store.s3.amazonaws.com/0/62038/bde9eb0e-c63a-dc57-25e7-37cec0576c9b.png)

「Test Connection」を実施し、接続可能なことを確認し「OK」をクリックしてください。

# まとめ

以上で接続方法の説明を終わります。

**パスワードの確認方法**と、
SQLクライアントからの接続時には**SSHトンネルを使用する**というところがポイントとなります。
EclipseでPyDevを使ってて"Python not configured."と出た時の対処法

# 事の始まり
gitからプロジェクトをクローンしていざeclipseでpydev使って開発しようとしたところ、以下の画像のようなエラーメッセージが表示されました。

<div align="center"><img width="331" alt="スクリーンショット 2017-03-23 16.59.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/150494/076122e3-9061-6b3c-f6b4-39422e8d13ea.png"></div>

# "Python not configured."

直訳：Python、設定されてない

pythonのInterpreterのことか？前にも設定したけど、プロジェクトごとに定義する必要あったんだっけ・・？

（参考：[Python+Eclipse+機械学習 〜環境構築〜【Mac】](http://shinochin.hatenablog.com/entry/2016/11/18/190717)）

結論から言うと必要ありました。

# 対処法

1. 該当するプロジェクトで右クリック
2. 「プロパティ」を選択
3. 「PyDev - Interpreter/Grammar」を選択
4. 「リストされていないインタープリターを構成するにはここをクリックしてください。」をクリック
5. Python Interpreterを適当に追加して適用
6. 文法バージョンとインタープリターを適当に設定して適用
7. Eclipseを再起動

（参考：[Eclipse: “Python not configured”](http://stackoverflow.com/questions/10669846/eclipse-python-not-configured)）

終わりです。
お疲れ様でした~！
GCPのIAM権限ページ

いつもわからなくなるのでQiitaに書いておく。

# Cloud IAM

GCPのアクセス権限を管理するもの

# 権限一覧
情報が新鮮なので英語版推奨
https://cloud.google.com/iam/docs/understanding-roles

表示言語はページの一番下で切り替えられる。
Chart.jsで帯グラフ(100%積み上げ棒グラフ)を描画する

JavaScriptのグラフ描画ライブラリである[Chart.js](http://www.chartjs.org/)(v2.5.0)では、帯グラフ(100%積み上げ棒グラフ)を描画することはできません。純粋な積み上げ棒グラフはオプションで指定できますが、比率をグラフ化したかったのです。
幸いなことにChart.jsは簡単にpluginが書けるので、作ってみました。以下のようになります。

![image](https://qiita-image-store.s3.amazonaws.com/0/25588/b9268967-e451-5d32-8a18-fbef045ddcaa.png)

# セットアップ

[ここ](https://github.com/y-takey/chartjs-plugin-stacked100)に書いているので、最初にプラグインをChart.jsに登録してください。


# 使い方

chart optionsに `{ stacked: '100%' }` を渡すだけです。

```javascript
new Chart(document.getElementById('stage'), {
  type: 'horizontalBar',
  data: {
    labels: ["Foo", "Bar"],
    datasets: [
      { label: "bad",    data: [5, 25],  backgroundColor: "rgba(244, 143, 177, 0.6)" },
      { label: "better", data: [15, 10], backgroundColor: "rgba(255, 235, 59, 0.6)" },
      { label: "good",   data: [10, 8],  backgroundColor: "rgba(100, 181, 246, 0.6)" }
    ]
  },
  options: { stacked: "100%" }
});
```

# 注意点など

* パーセンテージは小数2位を四捨五入して小数1位までとしています。そのため、全て足しても100%にならないことがあります。ただしｘ軸はmax100としているので、そのへんは大丈夫です。（多少はみ出るかもですが、誤差レベルかなと）
* 以下のオプションはプラグイン内で上書きしています。
  * options.scales.xAxes[].stacked, options.scales.yAxes[].stacked
  * options.scales.xAxes[].ticks.min, options.scales.xAxes[].ticks.max
  * options.tooltips.callbacks.label
* ツールチップにはパーセンテージとカッコ内に元の数値を表示しています。
Python > tuple > 二重tupleを一重tupleに変換する

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

- 方法1: listで二重のforで処理
  + 参考 http://qiita.com/kiriko_ksk/items/1911ac73ed869eb12d9e
- 方法2: 一重のforでtupleを連結

code

```test_python_170323d.py
atuple = ((3, 1, 4), (1, 5, 9), (2, 6, 5))
print(atuple)

# 1 
res = [ flatten for inner in atuple for flatten in inner ]
res = tuple(res)
print(res)

# 2
res = ()
for rows in atuple:
	res = res + rows

print(res)
```

```txt:結果
$ python test_python_170323d.py 
((3, 1, 4), (1, 5, 9), (2, 6, 5))
(3, 1, 4, 1, 5, 9, 2, 6, 5)
(3, 1, 4, 1, 5, 9, 2, 6, 5)
```

方法1はコードを読んでからの理解時間(Readable codeでのTime-till-understanding)が長い。

当面、方法2の実装を使いそう。
WordPress編集画面の投稿記事一覧の文字を表示しないようにする方法

WordPress 4.7.3を利用しているのですが、
編集画面の投稿記事一覧に赤字で表示されている「なし」という文字(※添付画像の赤枠線部分を参照)を
表示されないように設定したいのですが、どのようにすればよいのか分からず困っています。

可能性としては何かのプラグインが影響しているような気もするのですが、
知識不足のためプラグインを停止することによる影響範囲が予想出来ず、検証できていません。

また、「スタイルシートで表示されないようにする」といった対症療法的な対策ではなく、
根本的に設定で表示されないようにする方法を教えていただきたいです。

何卒、よろしくお願い致します。

![capture.jpg](https://qiita-image-store.s3.amazonaws.com/0/171816/975bb7d3-5e1f-6fab-ec3a-7469b7267d7c.jpeg)
GitHub にて任意の Organizations の Repository(Private 含む) の List を得る方法

## まず Personal access token を用意する

https://github.com/settings/tokens

から、Generate New Token で。 Scope は repo をフルチェック。

## curl で List を得る

```
curl -u :TOKEN "https://api.github.com/orgs/ORGNAME/repos?page=1&per_page=100" | jq '.[].html_url'
```
Node.jsでDiscordのメッセージ読み上げさせる

モジュールのdiscord.jsとchild_processのインストールが必要
# ソース
```js
const Discord = require('discord.js'),
      bot     = new Discord.Client(),
      token   = 'トークン',
      proc    = require('child_process'),
      dir     = "D:/Yuta/Desktop/BouyomiChan";// 棒読みちゃんのパス

bot.on('ready', () => {
  console.log('I am ready!');
});

bot.on('message', message => {
    proc.exec(dir+"/RemoteTalk/RemoteTalk.exe /Talk "+message.content)
});

bot.login(token);
```
ターミナルで簡単な作業をやってみる

```
この記事ではMac OSX(10.1２.６)をつかっています。
Finderバージョン10.12.5
ターミナルバージョン2.7.3 (388.1.1)

ターミナルを使うのがこわい！という人向けの記事です。実際に手を動かしながら試せるように書いてみました。
```
この記事でターミナルからやってみること
**Macでデスクトップにあるsampleというディレクトリ内に新規でprojectという名前のディレクトリを作って、sample.txtというテキストファイルを作成する**


## ディレクトリの移動

![0212.gif](https://qiita-image-store.s3.amazonaws.com/0/95896/6ad82531-0e9c-f21a-ecf4-b0a675fd3218.gif)

言うまでもないかもしれませんが、Finderからの操作だと目的の場所に移動して、右クリックから新規フォルダをつくったり、ショートカットで(cmd+shift+N)で新規フォルダを作ったりすると思います。

ではターミナルだとどうでしょう
Macの画面右上の虫眼鏡 > Spotlight 検索で"ターミナル"で検索してターミナルを起動してみましょう。
よく黒い画面と言われますが、デフォルトだと白だと思います。
![0212_5.gif](https://qiita-image-store.s3.amazonaws.com/0/95896/d2a9e520-d15e-5084-bbe8-1caf96d73c5d.gif)


last loginやら何やら文字がならんでて最後に\$が表示されていると思います
ターミナルではこの\$に続けて命令を入力することで操作ができます。(ですので以下のサンプルの先頭の$は入力する必要がありません)

## 移動したり確認したり

移動にはcd(change directory)という命令をつかいます。
スペースをひとつとって移動先を指定します。今いる場所より一階層上なら

```
$ cd ../
```
一階層上って、いまどこにいるの？というときはpwd(print working directory)

```
$ pwd
```
こんな感じの結果がかえってくると思います。

```lang:結果
/Users/あなたのユーザ名
```

また現在のディレクトリの構成ファイルを確認したい時。ファインダーだと同じ階層にある別のファイルやディレクトリは一目瞭然ですね。例として私のデスクトップに散らかってたディレクトリの中身(下図)をちょっと見てみましょう。
![0212_2.gif](https://qiita-image-store.s3.amazonaws.com/0/95896/28a413d9-c3f1-5e31-4c77-739d46ca35a3.gif)


コマンドラインの操作だとファイル名だけがリスト形式で表示されます。
リストアップするための命令はls(list)です。

```
$ ls
```
![0212_3.gif](https://qiita-image-store.s3.amazonaws.com/0/95896/c6265374-7030-b4d4-be51-7899da5a1776.gif)
見え方は違いますがちゃんと同じ結果になっていますね。
(Finderには.DS_Storeが出ていますが便宜上ここでは無視)

## 新規作成してみる
ディレクトリを新規に作りたい時の命令はmkdir(make directory)です。
ターミナルの画面からだと、今どこにいるかわからないかもしれません。そんな時はpwdからのcdです。

**ここでcdの便利な使い方を紹介します**
cd まで打って、下図のように目的のフォルダをドラックアンドドロップするといちいちパスを入力しなくても目的のディレクトリへ移動できます。
![0212_4.gif](https://qiita-image-store.s3.amazonaws.com/0/95896/c2f2b95c-e201-099e-a608-d8aa9207430d.gif)

移動したらprojectというディレクトリを作ってみましょう。

```
$ mkdir project
```
ターミナルとファインダーの画面を並べておくとディレクトリが作られるのが見えてわかりやすいです。

projectディレクトリを作ったら移動します。cdコマンドで移動です。

```
$ cd project
```

それではファイルを作成します。作りたいのはsample.txtというファイルでしたね。

```
$ touch smple.txt
```

ファイルが作られたら完了です。

## 補足

本文では最低限のコマンドだけを紹介しましたが他にも便利なコマンドの使い方があるので、いくつか付け足しさせてもらいます。

**内容も記述して新規作成**
こんな風にすると内容を入力してファイルを新規作成することも出来ます

```
$ echo "hello world" > sample.txt
```

**ディレクトリは階層付きでもつくれます。**
複数同時に作ることも可能なのでその場合はスペースで区切って指定します。
以下の例はcommonディレクトリの中にjsとcssディレクトリを作成します。

```
$ mkdir -p project/common/js project/common/css
```
**コピー**
ディレクトリをコピー

```
$ cp -r コピー元ディレクトリ　コピー先/ディレクトリ名
```

ディレクトリをコピー(ditto)
※Macの場合のみdittoコマンドが用意されています。

```
$ ditto コピー元ディレクトリ　コピー先/ディレクトリ名
```

**Finderで開く**
ターミナルからFinderで表示することも出来ます。

```
& open .
```

ここで紹介したレベルだとFinderでやったほうが効率的！と思うかもしれませんが、ターミナルの操作に抵抗がある人向けに使い始めるきっかけになればと思います。
AndroidのSSL通信をCharlesで確認する方法

#はじめに

[Charles](https://www.charlesproxy.com/)というアプリケーションで、通信のリクエストやレスポンスを確認することができるが、SSLの通信は暗号化されており少し設定をしないとのぞくことができない。その方法を紹介する。なお、このアプリケーションは無料でも使用可能だが、無料版は一度の起動に制限時間がありそれをすぎると自動で閉じてしまうなど制限がある。

# 設定

### Mac（Charles）

まずは `Proxy > Proxy Settings` でHTTPのポートを`8888`となっていることを確認する。この番号は後にAndroidの方で使用する。

次に `Proxy > SSL Proxying Settings` でキャプチャしたいドメインを指定する。`e.g.: *.sample.com`

最後に `Help > Local IP Address`で自分のIPを確認する。この番号も後にAndroidの方で使用する。


### Android
ここからAndroidの設定だが、まずはAndroidのChromeブラウザで、http://charlesproxy.com/getssl へアクセスして証明書をダウンロード、インストールする。しかし新しいバージョンのAndroidではインストールが失敗する場合がある。その場合は下記で対処する。

MacのCharlesのメニューの`Help > SSL Proxying > Save Charles Root Certificate`
から証明書ファイルをダウンロードしファイルの拡張子を`.pem`から`.cer`変更、GoogleDriveなどのクラウドを使ってそこからAndroidへダウンロードを行う（方法はなんでも可）。Androidのダウンロードフォルダから証明書ファイル開くと、証明書をインストールするダイアログが表示される。ダイアログで証明書の名前を入力し、PINもしくはパターンを入力しインストールを完了させる。

最後に、AndroidのWifiへの設定を行う。Androidの`設定アプリ> Wi-Fi`でSSID一覧を開き、使用したいSSDを長押し、`Modify network` を選択。Advanced Optionを開き下記のように設定する。

|パラメータ|値|
|---|---|
|Proxy|Manual|
|Proxy hostname|上記で確認したLoacal IP|
|Proxy Port|上記で確認したPort|
|Bypass proxy for|空欄でOK|
|IP settings|DHCP|

ここまでの設定を行えば、Charlesを起動し、Androidのデバック実行することで、希望するSSL通信をキャプチャすることができるはずだ。

#参考サイト

https://community.tealiumiq.com/t5/Tealium-for-Android/Setting-up-Charles-to-Proxy-your-Android-Device/ta-p/5121
SublimeTextの検索・置換フォームで日本語入力してEnterを押すと消える問題

# keybinds

```js:keybinds

// Find panel key bindings
// { "keys": ["enter"], "command": "find_next", "context":
//  [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
// },

// Replace panel key bindings
// { "keys": ["enter"], "command": "find_next", "context":
//  [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
// },


// Incremental find panel key bindings
// { "keys": ["enter"], "command": "hide_panel", "context":
//  [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
// },

```



# 出典
http://memo.sanographix.net/post/101061111635
UnityでのOnApplicationFocus, OnApplicationPause, OnApplicationQuit関数における各端末(iOS/Android)動作まとめ


Unityで作ったアプリケーションを閉じたり開いたりするときに表題のイベントが走るのですが、忘れやすいのでメモします。

# 環境

* Unity: 5.5.1f1
* Android: 5.0.2
* iOS: 10.2.1

# コード

適当なMonoBehaviourを継承したクラスに以下のコードを足して実際に実機で動かして試してみます。

```csharp
private void OnApplicationFocus( bool hasFocus )
{
    Debug.Log("OnApplicationFocus:" + hasFocus);
}

private void OnApplicationPause( bool pauseStatus )
{
    Debug.Log("OnApplicationPause:" + pauseStatus);
}

private void OnApplicationQuit() {
    Debug.Log("OnApplicationQuit");
}
```

# Androidの場合

## アプリを開始したとき

```
OnApplicationPause:False
OnApplicationFocus:True
```

## アプリ起動時にBack Button, Home Button, Overview Buttonを押したとき

以下のボタンが押されたときにそれぞれどのようなログを出すのか調べてみます。
今回はBackButtonが押されたときは、Application.Quit()でアプリを終了するようにしています。

<img width="733" alt="Android_menu_botton_-_Google_Search.png" src="https://qiita-image-store.s3.amazonaws.com/0/30079/57736514-a2e1-bf28-e97b-decffb3304b6.png">

```
# Back Buttonを押した場合
OnApplicationFocus:False
OnApplicationQuit

# Home Buttonを押した場合
OnApplicationPause:True
OnApplicationFocus:False

# Overview Buttonを押したとき
OnApplicationPause:True
OnApplicationFocus:False
```

## スクリーンロック時

```
# ロックしたとき
OnApplicationPause:True

# 開いたとき
OnApplicationPause:False
```

## Notificationのメニューを出したとき

```
OnApplicationFocus:False
```

# iOSの場合

## アプリを開始したとき

```
OnApplicationFocus:True
```

## アプリ使用時にPOWERボタンを押したとき

```
# 押したとき
OnApplicationFocus:False
OnApplicationPause:True

# ホームボタンで起動し直したとき
OnApplicationFocus:True
OnApplicationPause:False
```

## アプリ使用時にホームボタンを押したときやホームボタンをダブルクリックしたとき

```
# 押したとき
OnApplicationFocus:False
OnApplicationPause:True

# ホーム画面などでアプリを選択し直したとき
OnApplicationFocus:True
OnApplicationPause:False
```
Swift 3でオブジェクトの配列の中にプロパティが同一なオブジェクトがすでに存在するか調べる

# やりたいこと

* あるクラスのオブジェクトの配列を作りたい。
* そのなかで、クラスの `id` が同じオブジェクトはその配列に2つ以上存在しないことを保証したい。

# 実装

* Equatableプロトコルを実装しました。
* `static func ==(lhs: Hoge, rhs: Hoge) -> Bool` 関数を実装して、何によって同じであるとするのかを決めてあげます。
* できたら、 `contains()` を使って判定できます。

```swift:Playground.playground
class Hoge {
	let id: Int
	init(_ id: Int) { self.id = id }
}

extension Hoge: Equatable {
	static func ==(lhs: Hoge, rhs: Hoge) -> Bool {
		return lhs.id == rhs.id
	}
}

Hoge(0) == Hoge(0) // => true
Hoge(1) == Hoge(0) // => false

let array = [Hoge(0), Hoge(1), Hoge(2)]

array.contains(Hoge(0)) // => true
```

# 参考

* Swift 3: How to write Equatable func
    * http://stackoverflow.com/questions/38243567/swift-3-how-to-write-equatable-func
* How to check if an element is in an array
    * http://stackoverflow.com/questions/24102024/how-to-check-if-an-element-is-in-an-array
PHP で二次元配列を特定の値でソートする


たまに自分で使うのでコピペ用。

## sample
たとえば以下のような配列があるとする。

```
$array = array(
    array(
        'id'       => 1,
        'name'     => '名前です',
        'birthday' => '1999-07-31',
        'sort'     => 20,
    ),
    array(
        'id'       => 13,
        'name'     => '名前だろ',
        'birthday' => '1984-11-26',
        'sort'     => 10,
    ),

    array(
        'id'       => 21,
        'name'     => '名前じゃん',
        'birthday' => '1985-01-23',
        'sort'     => 1,
    ),
);
```
この配列を sort 順に並べ替えたいという、 DB からデータを取ってきた後に良くある問題(この程度の場合は SQL の段階で order by すればいいけど)。

## 実装
配列を独自の仕様で並べ替えをしたい場合は `usort` を使うというのは常識。
`usort` に与える関数を以下のようなクロージャを用意することで、使い回しが効くようになる。

```
// 数値ソート用の関数
$numeric_sort = function( $field ) {
    // クロージャにする
    return function( $a, $b ) use ( $field ) {
        // 実際の比較部分
        if ( $a[$field] == $b[$field] ) {
            return 0;
        }
        return $a[$field] < $b[$field] ? -1 : 1;
    };
};

// ソート
usort( $array, $numeric_sort( 'sort' ) );
```

## 文字列問題
しかし上記は数値しか考慮してない、 PHP.net あたりに載っている `usort` の教科書的サンプル風。
実際は名前順とかも発生するので以下のようにする必要がある。

```
// 文字列辞書順ソート
$alpha_sort = function( $field ) {
    // クロージャにする
    return function( $a, $b ) use ( $field ) {
        return strcmp( $a[$field], $b[$field] );
    };
};

// ソート
usort( $array, $alpha_sort( 'name' ) );
```

数値の場合も(特定のケースを除いて)こちらで十分機能する。
※ 16進数や `null`, `false` なんかも比較できてしまうので、そういう値が混在することがあらかじめわかっている時は使えない。

## 比較対象欠損対策
なお、場合によっては配列内に指定のキーが存在しない場合もあるので、その場合の対策が必要になる。

```
// 空対策した文字列辞書順ソート
$sorter = function( $field ) {
    // クロージャにする
    return function( $a, $b ) use ( $field ) {
        if ( empty( $a[$field] ) && empty( $b[$field] ) ) {
            // どっちもない -> 等しいとみなす
            return 0;
        } elseif ( empty( $a[$field] ) ) {
            // 先に投入された方がない -> 後の値が大きいとみなす
            return -1;
        } elseif ( empty( $b[$field] ) ) {
            // 後に投入された方がない -> 先の値が大きいとみなす
            return 1;
        }
        return strcmp( $a[$field], $b[$field] );
    };
};

// ソート
usort( $array, $sorter( 'name' ) );
```

## 一言
宇宙船演算子使いたい。
kintoneプラグイン『機能拡張スタンダード All-In』を使ってユーザー選択、複数選択などの選択数を制御する

[『機能拡張スタンダード All-In』](https://spica.tokyo/bluelaunch)を使用します。
このプラグインは選択数の制御の他に、[条件書式](http://qiita.com/spica/items/24027003e9dfb9363819)、ルックアップ時のフィールド編集許可などを始めとする様々な[フィールド設定編集](http://qiita.com/spica/items/73107bda2cff4a94cf41)や、自動計算などの機能もありますがここでは<strong>ユーザー選択など複数項目の選択数を制御する使い方</strong>に絞って説明していきます。

#kintoneアプリでプラグインの利用を開始する
まず歯車アイコンからkintoneシステム管理画面にアクセスしプラグインをインストールします。
次にプラグインを利用するアプリ設定画面の「プラグイン」からプラグインの追加を選択。
インストール済みのプラグインが表示されるので、チェックボックスにチェックして「追加」。
利用を開始したプラグインが表示されるので、歯車アイコンからプラグインの設定画面にアクセスします。
『機能拡張スタンダード All-In』の設定画面はこのようになっています。
![ss_plugin_config4.png](https://qiita-image-store.s3.amazonaws.com/0/67365/b4d95705-cce2-c1ba-e73e-44bab94c68b9.png)
※複数選択フィールドの制御対象となるフィールドが全て列挙されます。

説明のためのサンプルとして、
・<strong>チェック</strong>（チェックボックスフィールド）
・<strong>マルチ選択</strong>（複数選択フィールド）
・<strong>人物</strong>（ユーザー選択フィールド）
・<strong>組織</strong>（組織選択フィールド）
・<strong>グループ</strong>（グループ選択フィールド）
を配置したアプリを使用しています。
配置されている5種類のフィールドが制御対象にできるフィールド種別の全てです。

#基本的な使い方

1. 選択数を制御したいフィールドの下限数の指定
2. 選択数を制御したいフィールドの上限数の指定
3. 制御方法の指定

という工程で作成します。

##設定例A. 人物の選択数を <strong>1件</strong> に限定する
![ss_plugin_config4_1.png](https://qiita-image-store.s3.amazonaws.com/0/67365/d2de643f-d249-1ae5-9980-c2bbe3d26545.png)
1以上1以下となるよう入力します。
制御方法として今回は「自動削除」を選択しました。

実際の動作確認です。
![ss_plugin_config4_2.png](https://qiita-image-store.s3.amazonaws.com/0/67365/94874a35-ae0a-5ef4-8fd6-4540438d69aa.png)

ユーザー選択で、2人以上を選択して決定すると……
![ss_plugin_config4_3.png](https://qiita-image-store.s3.amazonaws.com/0/67365/3b2480eb-3fa7-2b64-7091-ed3f8d09e0ca.png)
自動的に1人になります。
古い選択項目から削除されます。

##設定例B. チェックボックスの選択数を <strong>3以下</strong> にする
![ss_plugin_config4_4.png](https://qiita-image-store.s3.amazonaws.com/0/67365/767d54f4-c19c-7818-e12f-c50052592953.png)
3以下となるよう入力します。下限を指定しない場合は空欄のままにします。
制御方法として今回は「エラー表示」を選択しました。

実際の動作確認です。
![ss_plugin_config4_5.png](https://qiita-image-store.s3.amazonaws.com/0/67365/9c652305-cc8f-d9b5-c619-4cc653dd34ce.png)
チェックボックスを4件以上選択するとエラーが表示されるようになります。
エラーが表示されている状態ではレコードを保存することはできません。

---
このプラグインの選択数制御についての説明は以上です。
Python > 3.14_1592_6535_8972 > PEP515 (Python v3.6以降可能な書き方)

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

Python 3.6以降で可能になった書き方。

```py
pi = 3.14_1592_6535
print(pi)
```

https://www.python.org/dev/peps/pep-0515/

このあたりは、[Fortran77では("_")の代わりに(" ")では可能でFortran90はダメ](http://qiita.com/7of9/items/37217f32425594f0e89d#comment-6de849fdc853ec345169)や、[Javaだと可能](http://qiita.com/7of9/items/37217f32425594f0e89d#comment-4b4cd11ac99eaafd7169)という情報のやり取りはしたことがあります。

Pythonでも使えるようになっていたのですね。

有効桁数の長い数字を間違いなく扱いたい時などには有効だと思います。
[iOS]　アプリを環境毎（開発・ステージング・本番）にインストールしておきたい

iOSアプリを開発していると、一つのアプリを環境毎にインストールしておきたい場合がありました。

最初の対応方法としては、環境毎に以下キャプチャの赤枠の設定を**いちいち**変更してインストールしていました。

<img width="491" alt="スクリーンショット 2017-03-21 18.24.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/7291e320-4609-2007-a909-2207002f7023.png">

しかしこれだと、

* ビルドする度に環境に合わせて設定を変更するのでとっても面倒
* 頻繁に手動で変更していると設定を間違えるリスクがある

があってストレスが溜まり、精神衛生上、良くありませんでした。
私は基本的に保守的な人間（エンジニアとしては推奨されません）なので、一度、方法を確立するとあまり変えたりしないのですが、これはさすがに変えないとやってられねぇと。

そこで調べた結果、半自動で環境に合わせてビルドする方法がありました。
そこで今回は自分もやった方法をここに残そうと思います。

* 各環境（開発、ステージング、本番）を設定しよう
    1. 開発と本番はdebugとReleaseがあるので、とりあえずステージングのを作ります
    1. プロジェクトファイル > PROJECT > ConfigurationsにあるプラスボタンからDebugの複製を作成
    <img width="693" alt="スクリーンショット 2017-03-23 13.18.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/8167619c-a4b1-6a37-e2d0-c302149c8621.png">
    2. 複製したら、名前を　わかりやすいのに変更する（自分の場合は、Stagingとした）

　

* スキーマを環境毎に用意しよう
    1. 開発と本番はあるので、とりあえずステージングのを作ります
    1. スキーマ（図の左上赤枠）部分から「New scheme...」から作成
    2. 「Debug executable」はデバック実行するかどうか
    <img width="974" alt="スクリーンショット 2017-03-23 13.18.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/6cffbaaa-bab4-a90e-e4ed-7ef241d2c745.png">

　

* アプリ表示名とバンドルIDを環境毎に変わるように独自設定を定義しよう
    1. サンプルではアプリ表示名とバンドルIDは以下のようにします。
        * 開発： Dev各環境 / com.labo.eachEnvironment.dev
        * ステージング：　Stg各環境 / com.labo.eachEnvironment.stg
        * 本番：　各環境 / com.labo.eachEnvironment
    2. プロジェクトファイル > TARGET > Build Settingsにあるプラスボタンから「Add User-Defined Setting」を選択する
    3. そして以下の図の赤枠部分を定義する（名前は任意）

    <img width="755" alt="スクリーンショット 2017-03-23 15.07.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/4391b6de-0cca-7817-9333-132a3aa7d03f.png">

　

* 定義した値を設定しよう
    1. アプリ名表示は、「Bundle display name」
        * `${DISPLAY_NAME_PREFIX}各環境`
    2. Bundle Identifierは、「Bundle identifier」
        * `$(PRODUCT_BUNDLE_IDENTIFIER)${BUNDLE_IDENTIFIER_SUFFIX}`

    <img width="927" alt="スクリーンショット 2017-03-23 15.14.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/c080bebe-1ca7-cafb-af9e-911433712d5b.png">


 
以上、こうすることで以下のように環境毎にアプリを共存させることができます。

<img width="414" alt="IMG_0156.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/26173/97f70f03-6ae1-5e58-daec-f5d09807c345.png">
イベントビューアーの警告、エラー解決メモ

Qiitaはメモる所らしいのでこちらに表記させて頂きます。

```
 DNS ドメイン 'ForestDnsZones.hogehoge.local.' に関連付けられた、1 つ以上の DNS レコードの動的な登録または 削除に失敗しました。これらのレコードは、他のコンピューターがこのサーバーを ドメイン コントローラー (指定されたドメインが Active Directory ドメインである場合) または LDAP サーバー (指定されたドメインがアプリケーション パーティションである 場合) として検出するために使用されます。  

考えられるエラーの原因は次のとおりです:  
- このコンピューターのネットワーク接続の TCP/IP プロパティに、優先 DNS サーバーおよび代替 DNS サーバーの間違った IP アドレスが含まれています 
- 指定された優先 DNS サーバーおよび代替 DNS サーバーが実行されていません 
- 登録するレコードの DNS サーバー プライマリが実行されていません 
- 優先 DNS サーバーまたは代替 DNS サーバーが間違ったルート ヒントで構成されています 
- 登録に失敗した DNS レコードに対して権限のある子ゾーンへの間違った委任が、親 DNS ゾーンに含まれています  

ユーザー操作  
上記の考えられる構成の間違いを修正してから、ドメイン コントローラーのコマンド  プロンプトで 'nltest.exe /dsregdns' を実行するか、またはドメイン コントローラーで  Net Logon サービスを再開して、DNS レコードの登録または削除を開始してください。
```

```
 DNS ドメイン 'ForestDnsZones.hogehoge.local.' に関連付けられた、1 つ以上の DNS レコードの動的な登録または 削除に失敗しました。これらのレコードは、他のコンピューターがこのサーバーを ドメイン コントローラー (指定されたドメインが Active Directory ドメインである場合) または LDAP サーバー (指定されたドメインがアプリケーション パーティションである 場合) として検出するために使用されます。  

考えられるエラーの原因は次のとおりです:  
- このコンピューターのネットワーク接続の TCP/IP プロパティに、優先 DNS サーバーおよび代替 DNS サーバーの間違った IP アドレスが含まれています 
- 指定された優先 DNS サーバーおよび代替 DNS サーバーが実行されていません 
- 登録するレコードの DNS サーバー プライマリが実行されていません 
- 優先 DNS サーバーまたは代替 DNS サーバーが間違ったルート ヒントで構成されています 
- 登録に失敗した DNS レコードに対して権限のある子ゾーンへの間違った委任が、親 DNS ゾーンに含まれています  

ユーザー操作  
上記の考えられる構成の間違いを修正してから、ドメイン コントローラーのコマンド  プロンプトで 'nltest.exe /dsregdns' を実行するか、またはドメイン コントローラーで  Net Logon サービスを再開して、DNS レコードの登録または削除を開始してください。
```