OmniAICreator/Qiita-1.07M huggingface dataset:
【Swift】UIViewAnimationOptionsのCurveを比較

# はじめに

`animateWithDuration(_:delay:options:animations:completion:)`
を使用してアニメーションさせる際の`UIViewAnimationOptions`の設定について以下の４つの違いを視覚的に比較したかったので、シンプルなサンプルを作成しました。

- Linear
- EaseIn
- EaseOut
- EaseInOut

# サンプル

以下Githubにサンプルプロジェクトをあげています。
また、Youtubeにサンプルプロジェクトを動作させた動画をあげているので、あわせてご覧ください。

Github: https://github.com/taji-taji/SwiftSimpleAnimationSample
Youtube: https://www.youtube.com/watch?v=XoTJK8EVFv8

[![sample movie](http://img.youtube.com/vi/XoTJK8EVFv8/0.jpg)](http://www.youtube.com/watch?v=XoTJK8EVFv8)

## 動作環境

iOS: 9.2
Xcode: 7.2

# `UIViewAnimationOptions(Curve系のみ)`

`UIViewAnimationOptions` のCurve系のもののみ簡単に説明します。

##  Linear

一定速度で移動します。

## CurveEaseIn

動き始めがゆっくりになります。

## CurveEaseOut

動き終わりがゆっくりになります。

## CurveEaseInOut

ゆっくり動き始め、ゆっくり止まります。

# 最後に

アニメーションの基本的なことだと思うのですが、これまであまり触れていなかったので視覚的に比較しないとイメージがわきにくく今回のサンプルを作りました。

また、今回はシンプルなアニメーションですが、アニメーション系はもっと細かく設定できると思うので今後はその辺りも見ていきたいと思います。

# リファレンス
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/c/tdef/UIViewAnimationOptions
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/doc/uid/TP40006816-CH3-SW108
Node.js開発のためのvim設定

Linux上でNode.js開発をするために行ったvimの設定です。

# 構文チェック
##### ■ESLint
構文チェック用のモジュールです。
管理者用で実行し、グローバル領域にインストールします。

```shell-session:shell
sudo npm install -g eslint
```


# プラグイン管理
##### ■NeoBundleのインストール
NeoBundleとはVimのプラグイン管理を便利にしてくれるツールです。
以下、インストール用のコマンドです。

```shell-session:shell
mkdir -p ~/.vim/bundle
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
```

##### ■NeoBundleの基本設定
ユーザディレクトリに設定ファイルの.vimrcを作成する。

```shell-session:shell
"---------------------------
" Start Neobundle Settings.
"---------------------------
" bundleで管理するディレクトリを指定
set runtimepath+=~/.vim/bundle/neobundle.vim/
 
" Required:
call neobundle#begin(expand('~/.vim/bundle/'))
 
" neobundle自体をneobundleで管理
NeoBundleFetch 'Shougo/neobundle.vim'
 
" プラグインはここに追加"
 
call neobundle#end()
 
" Required:
filetype plugin indent on
 
" 未インストールのプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
" 毎回聞かれると邪魔な場合もあるので、この設定は任意です。
NeoBundleCheck
 
"-------------------------
" End Neobundle Settings.
"-------------------------
```
vimrcを記述することで基本的なNeoBundleの設定は終了です。


# Node.js活用vimプラグイン

##### ■vim-jsdoc
JsDoc でJSDocコメントができる。

```shell-session:shell
NeoBundleLazy 'heavenshell/vim-jsdoc' , {'autoload': {'filetypes': ['javascript']}}
```

##### ■vim-node
gfでrequire()のモジュールにジャンプ

```shell-session:shell
NeoBundle 'moll/vim-node'
```


##### ■vim-javascript
インデントとシンタックスカラー用プラグイン

```shell-session:shell
NeoBundle 'pangloss/vim-javascript'
```

##### ■autoclose
括弧を入力した際、自動的にとじ括弧を挿入してくれるプラグイン。

```shell-session:shell
NeoBundle 'Townk/vim-autoclose'
```

##### ■syntastic
シンタックスチェック用プラグイン。
この設定ではESLintでチェックさせています。

```shell-session:shell
NeoBundle 'scrooloose/syntastic'
let g:syntastic_check_on_open=0 "ファイルを開いたときはチェックしない
let g:syntastic_check_on_save=1 "保存時にはチェック
let g:syntastic_check_on_wq = 0 " wqではチェックしない
let g:syntastic_auto_loc_list=1 "エラーがあったら自動でロケーションリストを開く
let g:syntastic_loc_list_height=6 "エラー表示ウィンドウの高さ
set statusline+=%#warningmsg# "エラーメッセージの書式
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_javascript_checkers = ['eslint'] "ESLintを使う
let g:syntastic_mode_map = {
      \ 'mode': 'active',
      \ 'active_filetypes': ['javascript'],
      \ 'passive_filetypes': []
      \ }
```

##### ■quickrun
プラグインでvim上でNode.jsを実行できる

```shell-session:shell
NeoBundle 'thinca/vim-quickrun'
" 水平に分割する
let g:quickrun_config={'*': {'split': ''}}
```

実行方法：vimでプログラム編集中に

```shell-session:shell
\r
```

# まとめ
とりあえず走りだし時点でのプラグインです。
vimもまだまだ乗り換えたてのため、チートシート見ながら勉強中！
プラグインの便利さとIDEより圧倒的に軽いのでいい感じです！
Atomでのコーディングもそのうちやってみたいと思います！
[Unity]新たに生成するオブジェクトを子オブジェクトとして生成する


被弾して火を吹き上げる航空機などを表現したいときに、生成したパーティクルを生成元のオブジェクトの移動に追従させたいことがあります。
そんな時は次のように書きましょう。

```c#:sample.cs
GenParticle(){
	GameObject go = instantiate(generateTo, transform.position, transform.rotation);
	go.transform.parent = transform;
}
```

生成したGameObjectのtransform.parentを、生成元のtransformに設定しています。
なので正確には、tranformの親子関係を設定するだけです。


情報元
http://answers.unity3d.com/questions/43011/how-to-make-a-game-object-a-child-of-antohter-whil.html
角丸で枠線のボタンをハイライトで反転させる


![ButtonNormal.png](https://qiita-image-store.s3.amazonaws.com/0/2885/9dc4d492-38cd-c07b-2d79-4725e939f52f.png "ButtonNormal.png")

![ButtonHighlited.png](https://qiita-image-store.s3.amazonaws.com/0/2885/523103fd-4080-1403-6fef-c8655d926661.png "ButtonHighlited.png")


こちらで作った角丸で枠線のボタンをハイライトで反転させる
http://qiita.com/hatapu/items/99e6a8b19f890f0fec9f


```objc:BorderButton.h
@property (nonatomic) IBInspectable UIColor *normalBackgroundColor;
@property (nonatomic) IBInspectable UIColor *highlitedBackgroundColor;
```

と書くとストーリーボードに下記のような項目が追加される

![StoryboardParams.png](https://qiita-image-store.s3.amazonaws.com/0/2885/0f446273-e6f8-96a2-3a15-6513e4db390c.png "StoryboardParams.png")


ここで通常時の背景色とハイライト時の背景色を設定して、ハイライト時に呼ばれるUIButtonのメソッド`- (void)setHighlighted:(BOOL)highlighted'をオーバーロードする


```objc:BorderButton.m
- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    if (highlighted) {
        self.layer.backgroundColor = self.highlitedBackgroundColor.CGColor;
    } else {
        self.layer.backgroundColor = self.normalBackgroundColor.CGColor;
    }
        
}
```

ハイライト時の文字色はStoryboardで普通に設定できる

![StoryboardHighlitedParams.png](https://qiita-image-store.s3.amazonaws.com/0/2885/e9599d3b-93c1-fea3-44c0-bb96b3621312.png "StoryboardHighlitedParams.png")


これでタップ時に色が反転するようになる。
あるディレクトリ以下の unittest を全部実行させる

Python の unittest モジュールを用いた単体テストを複数のファイルに分けて書いていて、それらを全部実行したいとき、TestLoader.discovery() を使えばできる。

```
discover(self, start_dir, pattern='test*.py', top_level_dir=None)
```

デフォルトのパターンだと、start_dir で指定したディレクトリ以下の test で始まり .py で終わるファイルたちを見つけてくる。

次のスクリプトに引数としてディレクトリを与えると、見つけたテストを全部実行する。

```py:runner.py
#!/usr/bin/env python
import sys
from unittest import TestLoader
from unittest import TextTestRunner


def main(path):
    loader = TestLoader()
    test = loader.discover(path)
    runner = TextTestRunner()
    runner.run(test)


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('usage: %s path' % sys.argv[0])
        sys.exit(1)
    main(sys.argv[1])
```

例えば

```
% find tests -type f -name \*.py
tests/hoge/__init__.py
tests/hoge/test_hoge.py
tests/test_fuga.py
```
というディレクトリ構成だとする。`__init__.py` を配置しているのはサブディレクトリからも探してもらうため。スクリプトを実行してみると以下のようになる。

```
% ./runner.py tests
FF
======================================================================
FAIL: test_1 (hoge.test_hoge.TestHoge)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/python-study/unittest/tests/hoge/test_hoge.py", line 6, in test_1
    self.assertEqual(0, 1)
AssertionError: 0 != 1

======================================================================
FAIL: test_1 (test_fuga.TestFuga)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/python-study/unittest/tests/test_fuga.py", line 6, in test_1
    self.assertEqual(0, 1)
AssertionError: 0 != 1

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=2)
```

unittest.main に頼るなら以下のような shell script でも同じことができる。

```bash:runner.sh
#!/bin/sh
python -m unittest discover $1
```
Powershell > for文と変数のカウントアップ

```txt:動作環境
Windows 8.1 pro (64bit)
```

Powershellでfor文の書き方と変数のカウントアップの練習

参考 http://www.atmarkit.co.jp/ait/articles/0709/20/news125_3.html

```
function Test_counter()
{
    echo "test counter"
    $cnt = 1
    for($idx=0; $idx -lt 5; $idx++) {
        echo $cnt
        $cnt++;
        if ($cnt -ge 3) {
            echo "large than 3"
        }
    }
}

function main() 
{
    Test_counter
    exit
}
```

```txt:結果
test counter
1
2
larger than 3
3
larger than 3
4
larger than 3
5
larger than 3
```

$cnt++する位置はif文の後のほうにすべきだった。
複雑なPDFをテキストファイルから生成。Windows,Mac,Linuxの実行ファイルなので、どの言語でも使用可能

[pdf-by-text https://github.com/mikeshimura/pdf-by-text](https://github.com/mikeshimura/pdf-by-text)

複雑なPDFも作成可能です。　例えば下記のサンプルの様なものも出来ます。　

プログラムから、テキストファイルを作成し、子プロセスで、当プログラムを実行すれば、どの言語でも使用出来ます。  

##下記単純なレポートを作成するテキストファイルの最初の部分は下記の通りです。  
各エレメントは、タブ(\t)で、区切らなければなりません。  

```go
P	mm	A4	L
F	IPAexG		14
C1	50.00	15.00	Sales Report
F	IPAexG		12
C1	240.00	20.00	page
C1	260.00	20.00	1
C1	15.00	23.00	D No
C1	30.00	23.00	Dept
C1	60.00	23.00	Order
C1	90.00	23.00	Stock
C1	120.00	23.00	Name
CR	135.00	23.00	25.00	Unit Price
CR	160.00	23.00	20.00	Qty
CR	190.00	23.00	20.00	Amount
```

当プログラムは、[goreport https://github.com/mikeshimura/goreport](https://github.com/mikeshimura/goreport)の一部機能を実行ファイル形式にしたものです。  

単純なレポートのサンプル
![Simple1](https://bytebucket.org/mikeshimura/goreport/wiki/image/simple1.jpg "Simple1")  
[text](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/simple1.txt)
[pdf](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/simple1.pdf)  


中程度のレポートのサンプル
![Medium1](https://bytebucket.org/mikeshimura/goreport/wiki/image/medium1.jpg "Medium1")

[text](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/medium1.txt)
[pdf](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/medium1.pdf)  



複雑なレポートのサンプル
![Complex1](https://bytebucket.org/mikeshimura/goreport/wiki/image/complex1.jpg "Complex1")

[text](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/complex1.txt)
[pdf](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/complex1.pdf)  


![Complex2](https://bytebucket.org/mikeshimura/goreport/wiki/image/complex2.jpg "Complex2")

[text](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/complex2sjis.txt)
[pdf](https://bytebucket.org/mikeshimura/goreport/wiki/pdf-by-text/complex2.pdf)
Vivado > Run Synthesis終了時の最終更新ファイル

```txt:動作環境
Vivado 2015.4 on Windows 8.1 pro(64bit)
```

Run Synthesis終了時に最後に更新されるファイルのリスト。Powershellで取得した。
http://qiita.com/7of9/items/132d38ea5a4586eccf94

```
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\system_wrapper.dcp:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\system_wrapper_utilization_synth.rpt:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\system_wrapper_utilization_synth.pb:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\.Xil:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\vivado.pb:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\system_wrapper.vds:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\.vivado.end.rst:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1\runme.log:01/23/2016 09:08:55
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs\synth_1:01/23/2016 09:08:55
```

これらを使ってslackで通知させる。

system_wrapper.vdsは１つだけだ。これを使ってみたが、6回通知されたが、Run Synthesisは終わっていない。
結局、7回目の更新で終了した。

7というのが常に7ならばカウンタで処理すればいいが、7は何なのだろうか?

代わりに .vivado.end.rst がよさそう。このファイルは複数あるため、フォルダチェックが必要になる。
Powershell > 最後に更新されたファイルを探す

```txt:動作環境
Windows 8.1 pro (64bit)
```

Vivadoの処理終了通知をSlackで行うため、終了条件を探そうとしている。
Generate Block Designの終了状況はわかった。
次はRun Synthesisの終了時の状況の把握。

Powershellで更新が最後のファイルを探そうとしている。

## 指定日付以降のファイルを取得
[Windows管理者のためのPowershell](http://powershell.wiki.fc2.com/wiki/C%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%AB%E3%81%82%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E6%9C%80%E7%B5%82%E6%9B%B4%E6%96%B0%E6%97%A5%E4%BB%98%E3%81%8C2012%E5%B9%B4%E4%BB%A5%E9%99%8D%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%87%BA%E5%8A%9B)さんに書かれている以下が参考になる。

```
Get-ChildItem C:\ -Recurse | Where-Object{$_.LastWriteTime -ge "1/1/2012"} | ForEach-Object{$_.FullName + ":" + $_.LastWriteTime} > C:\FindFiles_TimeSet.log
```

実際に自分でやってみたところ、上記の日付指定は"mm/yy/yyyy"のようだとわかった。
日付は1桁の場合は0付き(01など)にする必要がありそうだ。

```
Get-ChildItem C:\ZyboDev\zybo_160112_baseDesign\ -Recurse | Where-Object{$_.LastWriteTime -ge "01/23/2016"} | ForEach-Object{$_.FullName + ":" + $_.LastWriteTime} > time.log
```

上記のように変更して実行した結果が以下。

```txt:
C:\ZyboDev\zybo_160112_baseDesign\hw\lib:01/23/2016 09:01:11
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd:01/23/2016 08:54:51
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.cache:01/23/2016 08:54:50
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.hw:01/23/2016 08:54:50
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.runs:01/23/2016 08:54:51
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.sdk:01/23/2016 08:54:50
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.sim:01/23/2016 08:54:50
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.srcs:01/23/2016 08:54:50
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.xpr:01/23/2016 09:01:05
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.cache\wt\java_command_handlers.wdf:01/23/2016 09:01:05
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.cache\wt\project.wpc:01/23/2016 08:55:15
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.cache\wt\synthesis.wdf:01/23/2016 09:01:16
C:\ZyboDev\zybo_160112_baseDesign\hw\zybo_bsd\zybo_bsd.cache\wt\webtalk_pa.xml:01/23/2016 09:01:05
...
```

最終更新ファイルを見つけるため、これを日時でソートしようとしている。

### try1 > Sort-Object追加

以下でできた (Sort-Object {$_.LastWriteTime} を追加)

```
Get-ChildItem C:\ZyboDev\zybo_160112_baseDesign\ -Recurse | Where-Object{$_.LastWriteTime -ge "01/23/2016"} | ForEach-Object{$_.FullName + ":" + $_.LastWriteTime} | Sort-Object {$_.LastWriteTime} > time.log
```

成功したと思ったら、フォルダ内だけソートになっているようだ。
複数フォルダがある時に最終更新ファイルを見つけにくい。

### try2 > Sort-Objectの位置変更

Sort-Objectの位置を変更したら、うまくいったようだ。
日付でのフィルター処理の直後に入れた。

```
Get-ChildItem C:\ZyboDev\zybo_160112_baseDesign\ -Recurse | Where-Object{$_.LastWriteTime -ge "01/23/2016"} | Sort-Object {$_.LastWriteTime} | ForEach-Object{$_.FullName + ":" + $_.LastWriteTime} > time.log
```
Pythonでスクレイピング - 投信総合検索ライブラリーから投資信託の属性情報を取得する

#この記事について
Pythonを使って、webスクレイピングで投信協会のwebサイト(投信総合検索ライブラリー)から投資信託の属性情報を取得するスクリプトです。
3年前に作成したものを、サイトデザイン変更に合わせて対応しました。

GitHubで公開してます
[sawadyrr5/ToushinReader: 日本国内の投資信託に関する情報取得スクリプト](https://github.com/sawadyrr5/ToushinReader)

2021/1/18 update
`pip install ToushinReader`でインストール可能になりました


##環境
Windows10 x64
Python 3.8.2


##利用方法

```py:example.py
# -*- coding: utf-8 -*-
from ToushinReader.core import JPFund


isin_code = "JP90C000KAH8"  # グローバルＥＳＧハイクオリティ成長株式ファンド（為替ヘッジなし）

myFund = JPFund(isin_code)
attrib = myFund.attribute
print(attrib)

```

##出力サンプル
```
{'AS_OF_DATE': '2021年01月15日', 'FUND_NAME': 'グローバルＥＳＧハイクオリティ成長株式ファンド（為替ヘッジなし）', 'FUND_NICKNAME': '未来の世界（ＥＳＧ）', 'FUND_INVESTMENT_MANAGER': 'アセットマネジメントＯｎｅ', 'BASIC_PRICE': '11,366', 'NET_ASSET_AMOUNT': '888,785百万円', 'PRODUCT_CATEGORY': '追加型/ 内外/ 株式', 'INDEX_TYPE': '該当なし', 'ESTABLISH_DATE': '2020/07/20', 'CLOSING_DATE': '2030/07/12', 'DATE_TO_CLOSING': '9年6ヶ月', 'SETTLEMENT_FREQ': '年1回', 'DATE_OF_SETTLEMENT': '07/14', 'REDEEM_FEE': '外枠なし', 'SUBSCRIBE_FEE': '3.00%以内', 'REDEMPTION_FEE': '外枠0.5％未満', 'MANAGEMENT_FEE': '1.68000%', 'MANAGEMENT_FEE_FOR_INVESTMENT_MANAGER': '1.00000%', 'MANAGEMENT_FEE_FOR_SALES': '0.65000%', 'MANAGEMENT_FEE_FOR_CUSTODY': '0.03000%', 'LINK_HISTORICAL_DATA': 'https://toushin-lib.fwg.ne.jp/FdsWeb/FDST030000/csv-file-download?isinCd=JP90C000KAH8&associFundCd=47311207', 'BASIC_PRICE_YEN_CHANGE': '-183', 'BASIC_PRICE_PCT_CHANGE': '-1.58%'}
```

##サンプル取得元

[グローバルＥＳＧハイクオリティ成長株式Ｆ（為替ヘッジなし）](https://toushin-lib.fwg.ne.jp/FdsWeb/FDST030000?isinCd=JP90C000KAH8)
MSP430 > QA > Does the pointer operation for PxOUT work correctly? > the original PxOUT register was a volatile unsigned char 'variable' | 異なるMSP430でのピン使用

[Does the pointer operation for PxOUT work correctly?](http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/306373)

### volatile

この質問に関して Jens-Michael Grossさんの回答で以下(volatile)が資料を読んでも気づかなかった点だった。

> the original PxOUT register was a volatile unsigned char 'variable'

### 異なるMSP430でのピン使用

また、異なるMSP430で同じピンの変数（か同等の機構）を使うにはどうすればいいかという質問をしている。

それに対する回答として Jens-Michael Grossさんの回答が参考になる

>Most projects use a project-specific definition header file. With project-specific defines:
`#define LEDPORT_OUT P1OUT`
The code then uses LEDPORT_OUT instead of the specific P1OUT.
This won't work for precompiled libraries, but leads to way more efficient code.
MSP430 > QA > How fast a loop can execute? > IDEでの計測 | オシロでの計測

[How fast a loop can execute?](http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/268820)

loopをどれくらい速く回せるかという質問に対して色々な回答がついている。

- Code Composer Studioでの計測
  - six clock ticks
- 同上
  - six clock counts on MSP430G2452
  - four clock counts on MSP430F5529
- オスロスコープでの計測
  - 89.5kHz on MSP430G2452
  - 76.5kHz on MSP430F5529
PostCSSについて

**PostCSSとは**
PostCSSはJavaScriptプラグインを使用して、CSSスタイルシートを変換するためのツール。例えば、変数使用、mixins, ベンダーフィックス、インラインイメージなど 使い方がある。

**利点**

- フロントエンドワークフローをスピードアップする
- CSSのクォリティーを向上する
- JavaScriptプラグインでCSSを形成する

**使い方のポイント**
Node.jsモジュールをインストールして使う。200以上のプラグインが用途によって選択できるエコシステム。
 
PostCSSは CSSfileから javascript-readable dataに変換。 JavaScriptプラグインで変換した PostCSSを実行する。

**様々なプラグイン**

1. Autoprefixer CSS online 
http://autoprefixer.github.io/


2. CSSnext
http://cssnext.io/

3. PreCSS
https://jonathantneal.github.io/precss/

4. stylelint
http://stylelint.io/

5. PostCSS Assets
https://github.com/assetsjs/postcss-assets

6. CSSNano
http://cssnano.co/


7. Font Magician
https://github.com/jonathantneal/postcss-font-magician
MSP430 > PDF > Efficient Multiplication and Division Using MSP430

```txt:動作環境
MSP430
```

[PDF > Efficient Multiplication and Division Using MSP430](http://www.ti.com/lit/an/slaa329/slaa329.pdf)

MSP430上での効率的な積算と除算。

Horner's Method という方法を使って積算と除算を行っている。
MSP430 > QA > PxOUTの振る舞い > 前の値を保持

```txt:動作確認
MSP$30
```

[Simple PxDIR behaviour question](http://www.embeddedrelated.com/showthread/msp430/38785-1.php)

この質問で興味を持ったのはPxOUTの振る舞い

> The output will be whatever the PxOUT register was previously set to.

前の値を保持しているとのこと.

このあたり注意しないと作成したソフトの動作があやしくなってしまう。
CommandLineでODBCのDSN名を作る for Windows

LinuxでTerminal生活を行っていると、
Windows上でもCommandLineで何でもできないものかと考えてしまうものです。
ODBCのDSN名をコマンド一発で作成できないかと調べてみました。

[odbcconf](https://msdn.microsoft.com/ja-jp/library/ee388579%28v=vs.85%29.aspx)というプログラムが秘かに存在するようです。

##マイナーDBの設定の引数が分からない

SQL Serverでのodbcconfの指定方法は良く見つかります。
PostgreSQLやMySQLのodbcconfの指定方法はStack Overflowあたりで転がっていますが、
マイナーDBはガン無視されてとってもかわいそうでした。
informixも例外ではなくodbcconfでの引数はマニュアル等に書かれていないようです。

##ファイルDSNから探り出す

ファイルDSNというものがあります。
ODBC データソースアドミニストレーターで作成できます。
元々はODBCの設定を持ち運ぶために存在するようです。
File DSNの中身はただのテキストです。
odbcconfはコマンドラインでDSNを設定するツールです。

File DSNの中身の変数をodbcconfで使えるのではないかと考えました。


###ファイルDSNを作成

1. ODBCデータソースアドミニストレーターを開く
 　[コントロールパネル] > [管理ツール] > [データ ソース (ODBC)]

2. ファイルDSNタブを選択


3. [追加]を押す


4. データソースの新規作成
　　INFORMIX ODBC DRIVER(x64)を選択し[次へ]

5. 参照を押して保存先を選びます。
   今回はマイドキュメントにします。
   ファイル名「ifxa.dsn」と入力して[保存]
   [次へ]
   [完了]を押す

6. IBM Informix ODBC Driver Setup画面
Connectionタブ
必要な項目を入力
Enviromentタブ
必要な項目を入力
Advancedタブ
必要な項目にチェック
Connectionタブの
[Test Connection]を押して接続できるか確認
[OK]を押す

7. Save File DSN
マイドキュメントが指定されていることを確認し、
ファイル名「ifxb.dsn」と入力して保存

###作成したファイルDSNを見てみる

ドキュメントに保存されているifxa.dsnをメモ帳で開いてみましょう。

```text:ifxa.dsn
[ODBC]
DRIVER=IBM INFORMIX ODBC DRIVER (64-bit)
UID=db_user
DDFP=1
DLOC=ja_JP.932
CLOC=ja_JP.932
PRO=onsoctcp
SERV=1526
SRVR=myserver
HOST=192.168.0.1
DATABASE=mydb
```

もう一つifxb.dsnも見てみます。

```text:ifxb.dsn
[ODBC]
DRIVER={IBM INFORMIX ODBC DRIVER (64-bit)}
UID=db_user
PWD=EP  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
DATABASE=mydb
HOST=192.168.0.1
SERVER=myserver
SERVICE=1526
PROTOCOL=onsoctcp
CLIENT_LOCALE=ja_JP.932
DB_LOCALE=ja_JP.932
DESCRIBEDECIMALFLOATPOINT=1

```

ifxa.dsnの方が文字数が少ないですが、
ifxb.dsnの方はPWD、Passwordが設定されています。
そこで、二つのいいとこ取りをして、
こんなコマンドにします。

##完成したコマンド

僕の環境で下記のコマンドが動くことを確認しました。

```text:odbcconfの命令
odbcconf /A {CONFIGDSN "IBM INFORMIX ODBC DRIVER (64-bit)” 
“DSN=informix|DRIVER=IBM INFORMIX ODBC DRIVER|UID=id|
PWD=pass|DDFP=1|DLOC=ja_JP.932|CLOC=ja_JP.932|PRO=onsoctcp
|SERV=1526|SRVR=myserver|HOST=192.168.0.1|DATABASE=mydb”}

```

マイナーDBでodbcconfのDSNに追加する方法が分からない方は一度お試しあれ。
MSP430 > QA > タイマーレジストリの設定 > "+"と"|"の違い

```txt:動作確認
MSP430
```

[TimerA on MSP430F471xx](http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/256012)

質問のタイトルと離れるが、自分がこのページで気になったのは Jens-Michael Gross さんの回答の

> And I recommend using the "|" bit operator and not the arithmetic '+' operator when joining bits or bitfields in an expression.
>
"TACLR +TACLR" gives a completely different result than "TACLR | TACLR". And you don't always know (or see at first glance) which bits are already contained in a token. (especially the WDT defines or the LPM defines are prone to cause havoc if you add something to them)

ビット演算である"|"と数値演算である"+"を区別している。

実際のパフォーマンスの違いはプロファイルを取れてないので分からないが、ビット演算では"|"としておくほうがソースリーディングの観点からは良さそう。
Custom Keyboard の高さは viewWillAppear:animated で設定する


永らく悩まされていたカスタムキーボードの高さが AutoLayout で設定できない問題がようやく解決した。

参考は下記の記事。
[iOS 8 & iOS 9 Custom Keyboard - Custom Height](http://www.yichizhang.info/2015/10/03/ios-custom-keyboard-custom-height.html)

タイトルそのままなのだけど、 ``viewDidLoad`` で ``constraint`` を設定しても何故か高さが設定できない。
``UIInputViewController`` の中の ``viewWillAppear:animated`` で ``constraint`` を追加すると設定した通りの高さになる。

ただ何故できないのかは、Appleのドキュメントには記載がなく、記事を書いた人も分からない。僕も分からない。 Apple がそうしたとしか言えない。
Node.jsからMySQL接続のメモ(とnode-mysql2)


公式のクライアントらしいnode-mysqlを使います。

> https://github.com/felixge/node-mysql

## 準備など

```bash
$ node -v
v5.5.0

$ npm init --yes
$ npm i --save mysql
```

## Selectするだけのサンプル

```app.js
'use strict';

let mysql = require('mysql');
let connection = mysql.createConnection({
  host : 'your host name',
  user : 'your user name',
  password : 'your password',
  port : 3306,
  database: 'your database name'
});

connection.connect();
connection.query('SELECT * from tabale_name LIMIT 10;', (err, rows, fields) => {
  if (err) throw err;

  console.log('The solution is: ', rows);
});

connection.end();
```

## ちなみに node-mysql2ってのがあるらしいです。

node-mysql2というnode-mysqlよりも速いやつがあるらしいです。

>fast node-mysql compatible mysql driver for node.js

https://github.com/sidorares/node-mysql2

```bash
$ npm i --save mysql2
```

読み込んでる`mysql`を`mysql2`に書き換えれば動きます。

```
var mysql      = require('mysql');
```

↓

```
var mysql      = require('mysql2');
```

基本的には使い方に互換性があるみたいですね。

###ベンチマーク

ここに計測済みデータがありました。ありがたや。

> https://gist.github.com/sidorares/ffe9ee9c423f763e3b6b

```
Summary:

node-mysql: peaks 6000 rps, first timeout errors at 110 conns, latency99 60ms at 110 conns
node-mysql2: peak 15000 rps, first timeout errors at 150 conns, latency99 30ms at 150 conn
memory: peak 46000 rps, no erros, latency99 20ms at 300 conns (7ms at 120 conn)

```

と書いてあるので

node-mysqlよりもnode-mysql2の方がrpsも多く、レイテンシも少ないっぽいですね。
MSP430 > QA > __delay_cycles() question??? > 引数を可変にする方法

```txt:動作環境
MSP430
```

[__delay_cycles() question???](http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/18638)

__delay_cycles()というintrinsicなコードについての質問で、関数の引数に変数を使いたいというのが質問者の望みだった。

それに対しての回答というのが以下のような関数を作ればいいとのこと。

```
void delay_ms(unsigned int delay)
{
    while (delay--)
    {
        __delay_cycles(PUT_CPU_CLOCK_SPEED_IN_HZ_DIVIDED_BY_1000_HERE);
    }
}
```

`PUT_CPU_CLOCK_SPEED_IN_HZ_DIVIDED_BY_1000_HERE`には実際に計算した数値を入れる。
技術英語 > So, we can’t [give an exact number] because not all of Harvard’s endowments or investments are made public.

@ LOE > October 26, 2012
http://loe.org/shows/shows.html?programID=12-P13-00043
>  So, we <font color=red>can’t give an exact number</font> because not all of Harvard’s endowments or investments are made public.

会議などで使う場合、動詞としてはgiveでもいいのだろうか? インフォーマルでないかどうか。

他の候補を考えてみた

- I can't tell an exact number
- I can't show you an exact number

[StackExchange](http://english.stackexchange.com/questions/300992/give-an-exact-number)で質問しておいた。

> "Give" is perfectly fine to use in most situations, though <font color=red>"provide"</font> may sound more professional and fit the context of the phrase better.

provideがぱっと出てこないところ、頭が固くなっている。
Swift の extension で変数を仕込もうとしたら、ObjectiveC と競合しているとエラーがでた時

##概要
>SwiftでUIViewのframe操作を楽にするextension
>http://www.muratayusuke.com/2015/03/21/swift_uiview_extension/

上記サイトを参考に、`UIView` に `center` というプロパティを仕込もうとした

```swift
extension UIView
{
    var center: CGPoint {
        get { return CGPoint(x: midX, y: midY) }
        set { self.frame = CGRect(x: newValue.x - w / 2, y: newValue.y - h / 2, width:  w, height: h) }
    }
}
```

しかしエラーがでてコンパイルできない
さてどうしよう
>Getter for 'center' with Objective-C selector 'center' conflicts with previous declaration with the same Objective-C selector


##解決策

`@nonobjc` を挿入するだけでおk

```swift
extension UIView
{
    @nonobjc
    var center: CGPoint {
        get { return CGPoint(x: midX, y: midY) }
        set { self.frame = CGRect(x: newValue.x - w / 2, y: newValue.y - h / 2, width:  w, height: h) }
    }
}
```

>参考：http://stackoverflow.com/questions/29457720/compiler-error-method-with-objective-c-selector-conflicts-with-previous-declara


##備考
`@objc` は情報でてくるけど `@nonobjc` はないっぽい気がしたので

ていうかどっちもよくわかんないよね(´･ω･\`)
`Xcode7` じゃないとダメそうなことが参考ページに書いてある（と思う）ので気をつけましょう
最小二乗法（三角行列化計算）

こんにちは。
最小二乗法は $J (\boldsymbol{x}) \triangleq \left(\boldsymbol{y} - A \boldsymbol{x} \right)^\textrm{T} \left(\boldsymbol{y} - A \boldsymbol{x} \right)$ を最小とする $\boldsymbol{x}_{\min}$ を計算します。三角行列を経るのが計算効率が良く、常道です。詳しくは下記の関係式ですが、計算を要約しますと、

1. 行列 $\tilde{A} \triangleq \begin{bmatrix} A & \boldsymbol{y} \end{bmatrix}$ （下記例では ```Ay```）を用意し、それから（正方）上三角行列 $\tilde{R} \triangleq \begin{bmatrix} R  & \tilde{\boldsymbol{y}} \\\ \boldsymbol{0}^\textrm{T} & \alpha \end{bmatrix}$  （下記例では ```Ry```）を求め、
2. これを使い、$R\,\boldsymbol{x} = \tilde{\boldsymbol{y}}$ を解いて、$\boldsymbol{x}_{\min}$ を求める。

これのPython実装例は[^1]、

```python
def lsqsolv(Ay):
    n = Ay.shape[1] - 1
    Ry = triangulateupper(Ay)
    return numpy.linalg.solve(Ry[0:n,0:n], Ry[0:n,n]) # x_min

def triangulateupper(A):
    return numpy.linalg.cholesky(numpy.dot(A.transpose(),A)).transpose()
```

[^1]: この例の三角行列化 ```triangulateupper()``` は計算効率重視の Cholesky 分解を利用していますが、多くの場合では数値安定性重視の QR 分解をお勧めます。

-------------
関係式をまとめますと（$\tilde{Q}$, $Q$ は直交行列）、

```math
\begin{align*}
J (\boldsymbol{x}) &\triangleq \left(\boldsymbol{y} - A \boldsymbol{x} \right)^\textrm{T} \left(\boldsymbol{y} - A \boldsymbol{x} \right) \\
&= \begin{bmatrix} \boldsymbol{x}\\ -1\end{bmatrix}^\textrm{T} \tilde{A}^\textrm{T} \, \tilde{A} \,\begin{bmatrix}  \boldsymbol{x}\\ -1\end{bmatrix} \\
&= \begin{bmatrix} \boldsymbol{x}\\ -1\end{bmatrix}^\textrm{T} \tilde{R}^\textrm{T} \, \tilde{R} \,\begin{bmatrix}  \boldsymbol{x}\\ -1\end{bmatrix} \\
A &= Q R \\
\tilde{A} &= \tilde{Q} \tilde{R} \\
\tilde{R}^\textrm{T} \, \tilde{R} &= \tilde{A}^\textrm{T} \tilde{A} \\
\tilde{A} &\triangleq \begin{bmatrix} A & \boldsymbol{y} \end{bmatrix} \\
\tilde{R} &\triangleq \begin{bmatrix} R  & \tilde{\boldsymbol{y}} \\ \boldsymbol{0}^\textrm{T} & \alpha \end{bmatrix} \\
\tilde{\boldsymbol{y}} &\triangleq Q^\textrm{T} \boldsymbol{y} \\
\alpha &\triangleq \left( \min_{\boldsymbol{x}} J (\boldsymbol{x}) \right)^{1/2} \\
 \\
\end{align*}
```
カードゲームを作る　その３（Git）


##この記事は
とある[カードゲーム](http://arcana.vector.co.jp)が非常に面白く、
そのゲームの見た目クローンを作ろうと一人のプログラマーが奮闘していくブログのような記事です。

その２の続き
ここでは、今まで作ったものが消えてしまわない内にソース管理をやっていきます。

登録したサイトは、[BitBucket](https://bitbucket.org)
プライベートリポジトリを一人で利用するなら無料で使えるとのことで、
今回初使用。
もう一つプライベートリポジトリが無料で使えるサービスを見つけましたが、
そちらはあまりにも安すぎて、長い間サービスを維持できるのか不安だったので、
こちらにしました。

アカウントの登録は案内の通りに進めて登録を済ませ、
リポジトリの作成を行う。

```bash:リポジトリの作成、登録
$ mkdir /path/to/your/project
$ cd /path/to/your/project
$ git init
$ git remote add origin https://MyAccount@bitbucket.org/KurokoSin/cambrianserver.git
```
```bash:初めてのファイル登録
$ echo "FirstName LastName" >> contributors.txt
$ git add contributors.txt
$ git commit -m 'Initial commit with contributors'
$ git push -u origin master
```
```bash:.gitignoreファイルの作成ソフトの追加
$ brew install gibo
```

giboについては[気付いたら.gitignoreはgiboで自動生成する時代になっていた](http://qiita.com/tmknom/items/c4bcebe17d25381fa45d)を参考にさせて頂きました。

```bash:railsプロジェクトのお引越し
$ cd /path/to/your/project 
$ cp -pR /SourceProject/ .
```
```bash:.gitignoreファイルの作成
$ gibo Ruby > .gitignore
```

```bash:bitbucket再登録
$ git add .
$ git commit -m "init"
$ git push -u origin master
```

-----
いくつか言い訳

* 不定期連載です。
* 多分途中で挫折します。
* 筆者のメモも兼ねているため過去の記事も遠慮なく随時編集いたします。
* プログラミングの開発経験はあってもゲームの開発経験はこれが初めてです。

等色々ありますが、生暖かい目で応援してくださると光栄です。
Vim to Neovim

This is curious for me, yestarday  I just wanted to do a folding a code of Angularjs
(the route list is a little long) but then... (thinking) foldmethod=manual is the best way?
it will be tedious do it in every file...mmm it doesn't save my fold...mm I need a plugin...
I found this [text](http://vim.wikia.com/wiki/Make_views_automatic). :laughing:  it is funny because it is true.

![screenshot-vim.wikia.com 2016-01-22 01-11-03.png](https://qiita-image-store.s3.amazonaws.com/0/91692/466edf10-51bd-4cdb-a0e3-97a3c06b609a.png)

and one thing lead to another I finished changing to [Neovim](https://neovim.io/),
in this post I want to mention a little details I had with this change.

First of all the configuration in neovim is *~.config/nvim/init.vim* (my [init.vim](https://github.com/roberbnd/Dotfiles/blob/master/nvim/init.vim))

## [Vim-airline](https://github.com/vim-airline/vim-airline)
I use terminal terminology.
![Screenshot from 2016-01-21 22-49-52.png](https://qiita-image-store.s3.amazonaws.com/0/91692/aaf34b26-c8f0-bb42-f96a-11fd34e6c215.png)
it can be solved by checking Settings->Behavior->set TERM to xterm-256color and restart.


## Ctrl-w h
with splits I prefer use ctrl-h and change to left position cursor, in Arch Linux still doesn't work.
This code fixes in your init.vim .

```
if has('nvim')
  nmap <BS> <C-W>h
endif
```
Details [Github](https://github.com/neovim/neovim/issues/2048).

## Python
it's necessary enable python (Arch Linux).

```
sudo pacman -S python2-pip python-pip
sudo pip2 install neovim
sudo pip install neovim
```
well I installed the two because I don't want problem with versions specially with YouCompleteMe

## Clipboard
by default doesn't work clipboard I chose xclip.

```
sudo pacman -S xclip
```
and my init.vim

```
set clipboard+=unnamedplus
```

Details :h nvim-clipboard

## [Plugins Neovim](https://github.com/neovim/neovim/wiki/Related-projects)
They took my attention
[vim-plug](https://github.com/junegunn/vim-plug) Best plugin manager. :wink:
[Neomake](https://github.com/benekastah/neomake) can be used together [Syntastic](https://github.com/scrooloose/syntastic).
~~[Deoplete](https://github.com/Shougo/deoplete.nvim) is very promising but needs to madure, now I prefer [YouCompleteMe](https://github.com/Valloric/YouCompleteMe)
anyway keep it in mind.~~
[Deoplete](https://github.com/Shougo/deoplete.nvim) now I use it

oh! other issues with YouCompleteme has 2 things.
1.-You need be sure you htave installed correctly.
`python2.7 ./install.py`

2.-now I don't remember the error but it was something with "VIM" I had installed correctly but showed a error YouCompleteMe, just add in your .zshrc `export VIM=""`


## Other things
I found in the path 
- [vimrcfu](http://vimrcfu.com/) *Gather your vimrc snippets on this site and let others learn from your fu.*
- a very good [Foldtext](http://www.gregsexton.org/2011/03/improving-the-text-displayed-in-a-fold/).
- [limelight](https://github.com/junegunn/limelight.vim) I liked, I think can be useful especially with video tutorials.
Pythonでlistをキーにしたdictを使う

Pythonでは、list型は辞書のキーにすることができません。

```py
key = [1, 2, 3]
table = {key: 1}  # エラー
```

なぜかというと、list型は状態を変えられるからです。例えば

```py
key1 = [1]
key2 = [2]
table = {key1: 1, key2: 2}
key1[0] = 2
```

とかできちゃったら困りますよね。でも配列をキーにしたい！そんなときにはtupleを使いましょう。

# ライブラリ
独自の配列を扱うライブラリとしては、numpyとsympyがあります。これらでの扱いはどうなっているでしょうか？
あるオブジェクトをキーにできるかは```__hash__```関数があるかどうかで決まっているので、見てみましょう。

```py
from sympy import Matrix, ImmutableMatrix
import numpy as np

# sympy
Matrix([1, 2]).__hash__  # None
ImmutableMatrix([1, 2]).__hash__  # not None

# numpy
a = np.array([1, 2])
a.__hash__  # None
a.flags.writeable = False
a.__hash__  # None
```

ということで、numpyでは書き込み不可にしてもダメでした。まあ、戻せちゃうので当たり前ですけど。。
（ちなみにsympyのas_immutableなどではコピーができるっぽいです。元のに変更を加えてもできたものは変わりません。）
.htaccessでメンテナンスやクローズなど時限切り替え設定

# 1. はじめに
サイトのメンテナンスやクローズをする際、どこで処理させていますか。

1. アプリケーションのコントローラーで表示の切り替えを行う場合
2. .htaccessで表示の切り替えを行う場合

上記のどちらかが多いと思います。
一括して表示を切り替えたい場合、アプリケーションより上位で切り替え処理が実現出来る方が都合が良い場合もありますよね。
つまり.htaccessで切り替えを行いましょうという話です。
且つ時限切り替えが可能です。

# 2. 前提
.htaccessを使用するので、Apacheでのみ使用可能です。
Nginxの場合などの設定方法については他の記事にゆずります。
また、AllowOverrideを有効にする必要があります。

```lang:httpd.conf
AllowOverride All
```


# 3. 設定してみる

```apache:.htaccess
ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} >201601230000
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=192.168.33.10
RewriteRule ^.*$ - [R=503,L]
</IfModule>
```

 鍵となるのは、

```
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} >201601230000
```
の部分。
この場合、2016年1月23日0時0分を超えたらmaintenance.htmlが表示されます。
メンテナンス切り替えの場合は、併せてRewriteCondで社内IPなどをアクセス許可しておきましょう。
Ubuntu で key-theme を emacs にしたときにテキストを全選択する方法

`Ctrl+a` の代わりに `Ctrl+/` でテキストを全選択できる。

- [gtk-key-theme Emacs: what keystroke is for select-all?](https://askubuntu.com/questions/294953/)
- [The "select-all" signal](https://developer.gnome.org/gtk3/3.4/GtkTextView.html#GtkTextView-select-all)

なお、 `/usr/share/themes/Emacs/gtk-2.0-key/gtkrc` に emacs theme の key bindings が定義されていて、自分用にカスタマイズして書くこともできるっぽい。

- [Linuxデスクトップでキーバインドを自由に設定する方法](http://qiita.com/syui/items/0701ef58a5c41c43786f)
ESP-WROOM-02(ESP8266)で妙なエラーにハマってしまったときの対策（初心者向け）

# はじめに
ESP8266ド初心者です。Arduinoもそんなにやってません。
配線なりプログラムなり、ESP8266をいろいろと間違えると、**シリアルモニタに文字化けメッセージを吐きつづける**ことがあります。
リセットボタンや書き込みモードなどにしても変化なく、そのまま書き込むと**しばらくフリーズしPCごとクラッシュする**というお茶目な事案が起きることがあります。そのことについては（おそらく初心者すぎるミスだからだと思いますが）ネット上にも特に対策が載っていませんでした。英語も。これに相当苦しんでココロが折れかけました。
あと単に妙なエラーが出てハマってしまった時も有効だったりしたものがあり、そういった方がもしどこかにいたらまず試してみたらよいのでは、ということで何かの助けになればと思い、大した対策でもないですがとりあえずまとめておきます。

# 対策
前置きしますが、全然テクニカルではありません。

## 書き込むPCを変えてみる
これが最も有効でした。
ぼくのPC(MacBookPro Mid2014)だと10回連続でPCごと闇（クラッシュ）へ連れてかれましたが、友人のPC(MacBookAir)だとちょっと重くなるくらいで無事に書き込めました。何だったんだ。

## USBポートを変えてみる
妙なエラーが出てるときは、右から左に差し替えるとかしてみると意外と書き込めたりします。何だったんだ。

## USBケーブルを変えてみる
USBケーブル（中国産）を友人のUSBケーブル（何かについてたやつ）に変えてみると無事に書き込めました。しかし、その後にまた文字化け連投状態になって、USBケーブル（中国産）で再チャレンジしてみると今度はうまく書き込めました。何だったんだ。

## "ツール"の設定をいろいろと変えてみる
<img width="669" alt="スクリーンショット 2016-01-23 0.35.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/37204c97-b2cf-0fc2-ab1f-6183e495a57f.png">
友人はこの「マイコンボード」の下の設定をいろいろといじっていたようなので、その通りに変えてみたら通りました。何だったんだ。

## 書き込み中にシリアルモニタを開かない
<img width="825" alt="スクリーンショット 2016-01-23 0.38.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/7442c2e2-1b6f-4f70-b6b8-afe33ae6566d.png">
**ESP8266にデータを送っている時にシリアルモニタを「開く」**と、たびたび文字化け連投の現象が起こります。怖いですね。
**書き込み前にシリアルモニタを開いて置いておくか、書き込み後（......の後に何行か改行が入ったとき）にシリアルモニタを開くか**で回避できます。

# これでESP8266はもう怖くない！
嘘です怖いです。なんだか結構気まぐれなようですね。**謎のバグもコードいじってるうちにいつの間にか通ったりすることがあります。**そういうもんなんでしょうか。

初心者の皆様にご加護があらんことを。上級者の皆様からの優しいご意見お待ちしております。
CentOSでのユーザ操作コマンド一覧


インフラを主担当としないエンジニアの中には、ユーザ操作コマンドについて詳しくないという方も多いのではないでしょうか。
「ユーザ作成完了の連絡を貰ったけど何故かログイン出来ない」などのケースで問題解決できるレベル程度のコマンドを知っておいて損はないです。
以下のコマンドだけでは不十分の場合も有ると思いますが、主に使用するコマンドを残していきます。
（タイトルのコマンド一覧というのは願望ですが随時更新していくのでツッコミやより良いコマンドなどお教えください）



# ユーザ設定の確認


## ユーザ一覧を表示
```
cat /etc/passwd
```
#### 例

```
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
･･･
emowl:x:500:501:EMOWL_ADMIN:/home/emowl:/bin/bash

ユーザー名:パスワード:ユーザID:グループID:コメント:ホームディレクトリ:ログインシェル
```
**パスワード欄のフォーマット**

1. 暗号化されたパスワード
2. 何も書かれていない場合　⇒　パスワードが設定されていない
3. 「x」の場合　⇒　シャドウパスワードを使用している

※ シャドウパスワード使用時には/etc/shadowファイル（rootのread only）に暗号化されたパスワードが書いてある


## ユーザ一覧から名前部分のみ表示
```
cat /etc/passwd|sed -e 's/:.*//g'
```

or

```
cut -d: -f1 /etc/passwd
```


## グループ一覧を表示
```
cat /etc/group
```

or

```
getent group
```


## ユーザのID・所属グループなどを確認する
```
id [ username ]
```
※ オプションのusernameを省略すると現在ログインしているユーザの情報を確認できる
#### 例
```
$ id emowl
uid=1000(emowl) gid=1000(emowl) groups=1000(emowl)
```
追記: コメントで@iwaim@githubさんに教えてもらった


## パスワードを確認
```
getent shadow [ username ]
```
※ パスワード欄が半角びっくりマーク２個含まれている場合は、アカウントがロックされている状態


## sudo権限の確認（sudoersは使用しない場合）
```
cat /etc/sudoers.d/[ username ]
```
#### 例

```
$ cat /etc/sudoers.d/emowl
emoql  ALL=(ALL) NOPASSWD:ALL
```
⇒　ユーザemowlは一切パスワードを要求されない



# ユーザ設定の変更


## ユーザの追加
```
useradd -u [userID] -g [ groupID ] [ username ]
```
`useradd`コマンドは`shadow-utils`というパッケージに入っている
`gpasswd`, `usermod`,`groupmod`, `vipw`, `vigr`などのコマンドも入っている
追記: コメントで@miyuさんに教えてもらった


## パスワードの設定・変更
```
passwd [ username  ]
```


## アカウントロックを解除する（rootのみ）
```
passwd -u [ username  ]
```


## パスワードなしに変更する（rootのみ）
```
passwd -u -f [ username  ]
```


## ユーザをロックする
```
passwd -l [ username ]
```
Debian8 で OpenVSwitch を使ってブリッジを作製する

Debian8 や Ubuntu15 で systemd が採用されてからの OpenVSwitch 設定でてこずったのでメモ。

# ユースケース

Debian8 上で KVM による VM を使うとき、その仮想ネットワークはホストのブリッジネットワークに接続します。
そのブリッジネットワークを OpenVSwitch で作成して、かつホストに IP アドレスを設定するためにブリッジに直接 IP アドレスを割り当てたいという場面のお話しとなります。

# OpenVSwitch のインストール

``` # apt-get install openvswitch-switch ```

# OpenVSwitch でのブリッジ作製

```
# ovs-vsctl add-br br0
# ovs-vscrl add-port br0 eth0
```

設定の確認

```
# ovs-vsctl show
```

# interfaces の設定

この記事のメイン、Debian8 以降での /etc/network/interfaces 設定がわからなかったのでいろいろ調べたというのが主題となります。

## ブリッジに Eth ポートを割り当てる、ポートやブリッジに IP アドレスは割り当てない場合
```
allow-ovs br0
iface br0 inet manual
  ovs_type OVSBridge
  ovs_ports eth0

allow-br0 eth0
iface eth0 inet manual
  ovs_bridge br0
  ovs_type OVSPort
```

## ブリッジに Eth ポートを割り当て、ブリッジ自体にホストのものとなる IP アドレスを設定する

```
iface br0 inet static
  address 192.168.0.10
  netmask 255.255.255.0
  gateway 192.168.0.1
  ovs_type OVSBridge
  ovs_ports eth0

allow-br0 eth0
iface eth0 inet manual
  ovs_bridge br0
  ovs_type OVSPort
```

static な IP アドレスは適当に差し替えてください。
nodejs streamAPI覚書(ES6)

nodejs v4移行のstreamの書き方の記事が少ないので覚書


## nodejs v0.x ES5時代

prototype拡張一択しかなく表記が冗長なので`through2`を使う事が多かった

```js

var Transform = require('stream').Transform;
var util = require('util')

util.inherits(NewStream, Transform);

function NewStream(options){
	Transform.call(this, options);
}

NewStream.prototype._transform = function(chunk, enc, cb){
	// hogehoge
	this.push(chunk);
	cb();	
}

var th = new NewStream(opt);

```


```js
var through = require('through2')

var th = through.obj(function transform(chunk, enc, cb){
	// hogehoge
	this.push(chunk);
	cb();	
})

```

## nodejs v4.x以降 ES6時代

Constructor APIが使えるようになったため`through2`に頼る必要がなくなった
クラス構文とちがい`_`は不要。
言うまでもないけどついアローファンクションを使って`this.push`できないやらかしがあるので注意。

```js
'use strict';
const Transform = require('stream').Transform;

let th = Transform({objectMode:true,
	transform: function(chunk, enc, cb){
		// hogehoge
		this.push(chunk)
		cb();
	}
})

```

クラス構文でかけるようにもなった。

```js
class NewStream extends Transform {
	constructor(opt){
		super(opt);
	}

	_transform(chunk, enc, cb){
		// hogehoge
		this.push(chunk)
		cb();
	}
}
```

これでstreamが捗りますね!
[Synergy]親から子Macへキーボード入力が飛ばない問題

# 参考URLというかそのまま

* [【マウスもキーボードも】Synergy【みんな共有】](http://anago.2ch.net/test/read.cgi/software/1131466455/915-922 "【マウスもキーボードも】Synergy【みんな共有】")
* [Mac上のSynergyでキーボードが使えない | sunagæ.net](http://sunagae.net/blog/archives/3043 "Mac上のSynergyでキーボードが使えない | sunagæ.net")

# Synergy Version はともに2016.01.22において最新
* Server 1.7.5
* Client 1.7.5

SynergyクライアントMac(子Mac)の設定で以下のように **Unicode Hex Input** を *追加* で設定する。

![guest_mac.png](https://qiita-image-store.s3.amazonaws.com/0/1556/38e72cef-1fe9-f427-55f8-4f3ad359bcf0.png)
underscoreコードリーディング（memoize）

underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##とは


###[underscorejs.orgのmemoize](http://underscorejs.org/#memoize)

こんな説明。
>####_.memoize(function, [hashFunction]) 
>Memoizes a given function by caching the computed result. 
>Useful for speeding up slow-running computations. 
>If passed an optional hashFunction, it will be used to compute the hash key for storing the result, based on the arguments to the original function.
>The default hashFunction just uses the first argument to the memoized function as the key.
>The cache of memoized values is available as the cache property on the returned function.

```javascript

var fibonacci = _.memoize(function(n) {
  return n < 2 ? n: fibonacci(n - 1) + fibonacci(n - 2);
});

```
------------- 
memoizeは計算した結果をキャッシュすることによって与えられた関数をメモしておきます。
実行速度の遅い関数を高速化するのに使えます。
hash keyを計算するために使用される、hashFunctionをオプションで渡すと、元の関数の引数に基づいて利用されます。
デフォルトのhashFunctionはメモ化された関数のkeyとして、最初の引数を利用します。
メモされた値のキャッシュは、返される関数のcache propertyとして利用できます。


###[underscore.memoize](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L751)
コード的にはこのあたり。

```javascript
  // Memoize an expensive function by storing its results.
  _.memoize = function(func, hasher) {
    var memoize = function(key) {
      var cache = memoize.cache;
      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
      return cache[address];
    };
    memoize.cache = {};
    return memoize;
  };
```

funcとhasherを引数にとる。
memoizeを引数keyの関数として定義する。
memoize.cacheをcacheに格納する。
addressにstringとして hasherが存在したらhasherにthisとargumentsをもとにapplyする。そうでない場合はkeyを格納する
chacheがaddressを持っていた場合、cache[address]にfunc.applyした結果を格納する。その後、cache[address]ｍを返却する。
「EI_EXPOSE_REP2」とfindbugsに怒られたら

# きっかけ

findbugsをつかっていて、[EI_EXPOSE_REP2](http://findbugs.sourceforge.net/bugDescriptions.html#EI_EXPOSE_REP2) というのが、あって気になって調べてみました。

## 詳細

> May expose internal representation by incorporating reference to mutable object

平たくいうと、内部で保持するためのデータを、外部からのmutableなものをそのまま使っているので、外から変更できてしまう、ということです。

よくある具体例は、配列やリストです。

```lang:Example1.java

public  class Example1 {

  private int[] numbers;

  public Example1(int[] numbers) {
    this.numbers = numbers;
  }

  public int[] getNumbers() {
    return this.numbers;
  } 

}

int[] numbers = {1,2,3};
Example1 ex1 = new Example(numbers);

// コンストラクタにわたしものの中身を変更
numbers[0] = 10;

ex1.getNumbers();
// => {10,2,3}
```

上記のように、privateにして内部に隠蔽したつもりなのに、もとがmutableだとこのように外から中身を変えられてしまいます。Listでも同様のことができ、#clear()をつかってしまうと外から中身を空にすることも... Java7までならDateもこれにあたります。

## 解決策

Object指向的に好ましくないということで、findbugsで警告がでてきます。回避策もでていて、

* cloneしたものをわたす 
* immutableなものにかえる

の２つです。ごもっともですねw

Javaでimmutableとなると、Guavaなどのライブラリをつかうのが手っ取り早いかと。

## 所感

コンストラクタやsetterの引数がmutableかどうかは気をつけないとですね。
こういう風に、バグの原因になりそうなものや、悪いパターンを気づきやすくなるのでfindbugsはありがたいです。経験が浅いメンバーがいるプロジェクトほど、こういったものがあるとよいのですが。

# 参考サイト

http://www.limy.org/program/java/findbug_patterns.html

http://stackoverflow.com/questions/18954873/malicious-code-vulnerability-may-expose-internal-representation-by-incorporati
Unsupported hardware family vmx-12

調べてみても、いまいち回答があまり出てこなくて、すこし調べた。

vCenter (vRealize) に持っていく時には OVF ファイルフォーマットにする。

VMWare OVF tool で変換できる。このときに hardwareVersion を指定してやれば vmx-12 と言われずにすむ。

```
$ ovftool.exe --maxVirtualHardwareVersion=10 --diskMode=thin min15.vmx min15.ovf
Opening VMX source: min15.vmx
Opening OVF target: min15.ovf
Writing OVF package: min15.ovf
Transfer Completed
Warning:
 - Line 29: The virtual hardware has been lowered from vmx-12 to vmx-10.
Completed successfully
```
Ubuntu コマンドでサスペンド&ロックする

コマンドでサスペンドやロックするには`dbus-send`コマンドを使う

#サスペンド

```shell-session
dbus-send --system --print-reply=literal --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend boolean:true 
```

#ロック

```shell-session
dbus-send --system --print-reply=literal --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.LockSession string:
```

なおサスペンドは`pm-suspend`でも可能だが、root権限が必要&復旧時にロックされない。

それにしてもこのコマンドの引数すごく冗長な気がしてならない。
メールで送るために使うffmpeg

## はじめに
本記事はメールで動画を送る時に使えるエンコードです。

## 環境
`iPhone6S + 純正カメラApp`
`ffmpeg version 2.8.2 Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)`

## 目的

アニメーション確認のためだったので
「音無し + 低解像度」でエンコードします。

## 結果
変換前: iPhone6S + 純正カメラApp で撮影した__3秒動画__が __7MB__

変換後: __400kb!__

## 手順

動画情報を確認後、Videoのみで出力します。

### 動画情報表示

```
$ ffmpeg -i source.mp4

...
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 1 kb/s (default)
...
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 14855 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 1200 tbc (default)
...
```

### エンコード
Video Streamが `#0:1` だったので `-map 0:1` を指定します。

解像度は [wiki](https://ja.wikipedia.org/wiki/%E7%94%BB%E9%9D%A2%E8%A7%A3%E5%83%8F%E5%BA%A6#/media/File:Vector_Video_Standards2.svg)より、16:9で小さいやつを選びました。

```
$ ffmpeg -i source.mp4 -map 0:1 -s 854x480 output.mp4
```
XMLの名前空間

名前空間って概念が分かりづらくて困ったが、以下のサイトの説明でちょっと理解が深まった。

XML名前空間の簡単な説明：
http://www.kanzaki.com/docs/sw/names.html


名前空間の挙動についてイメージしやすい解説：
http://liginc.co.jp/programmer/archives/5317
Github Pagesの使い方 


備忘的にまとめておく

## 基本的な使い方

`{username}.github.io`という名前でリポジトリを作れば、`master`が公開される。

アドレスは`http://{username}.github.io`

## 通常のリポジトリでもGithub Pages

`{username}.github.io`という名前に則っていない通常のブランチでも、`gh-pages`というブランチを切れば、Github Pagesが使える。

アドレスはサブディレクトリになり、例えば`hoge`というリポジトリの`gh-pages`ブランチは、`http://{username}.github.io/hoge`に公開される。

### ひとつ下のディレクトリをGithub Pagesに公開する

nodeとかのアレを使ってると、ドキュメントルートをpublicとかの特定のディレクトリにしたいってことがしばしばあったりする。

subtreeを使ってpushしてやるのが楽。

````
$ git subtree push --prefix public/ . gh-pages
$ git push origin gh-pages:gh-pages
````

## 独自ドメインの利用

CNAMEファイルを作ってから、ドメイン側にレコード設定を行う必要がある。

### CNAMEファイル

`CNAME`という名前のテキストファイルファイルをリポジトリのルートに設置する。

ファイルの内容は、blog.example.comなどドメイン名(httpとか付けない)

https://help.github.com/articles/adding-a-cname-file-to-your-repository/

CNAMEファイルの配置が終わるとSettingからドメインの設定が確認できる。

### ドメインの設定

ドメインの設定は、サブドメインを用いる場合と、ルートのドメインを用いる場合で多少やり方が変わってくる。

#### サブドメイン

CNAMEレコードでの設定を推奨

#### ルートドメイン

ルートのドメインで表示する場合、Aレコードの設定が必要。

− 192.30.252.153
- 192.30.252.154

上記IPはこちらから転用
https://help.github.com/articles/tips-for-configuring-an-a-record-with-your-dns-provider/


ドメインの設定について
https://help.github.com/articles/about-custom-domains-for-github-pages-sites/
アロー演算子

【PHP】アロー演算子 ->　と　ダブルアロー =>　（by dice）
http://911.ddtea.com/?eid=1286712

「クラス」と呼ばれる物の中から任意の要素（メンバ変数というらしい）を抜き出すためのもののようだ。よーはクラスにはいくつか要素があり、その要素にそれぞれパラメーターを持っている。

例えばクラス「AAA」には3つの下記のような要素を持っているとする

xxx=イノシシ
yyy=シカ
zzz=チョウ
AAA->xxxはイノシシとなるわけです


参考文献
PHPのソースで見慣れない記号が出てきた・アロー演算子
http://blog.s-giken.net/104.html
foreachの覚え方

#foreachは配列から要素を取り出すときに使う

```
foreach (配列変数 as キー変数 => 値変数){
  実行する処理1;
  実行する処理2;
}
```


```php
$preflist = array('Tokyo' => '東京', 'Osaka' => '大阪');

foreach ($preflist as $key => $value){
  print $key.'=>'.$value;
}
```
静的なプロパティの意味

静的（スタティック）なプロパティとは、クラスで固定的に設定されるプロパティのことで、Static設定すると、スコープ定義演算子「::」を使うことでクラスのインスタンスを作らなくてもメンバ関数をコールできるようになる。


参考文献
static キーワード
http://www.phppro.jp/phpmanual/php/language.oop5.static.html

スタティックメンバ／クラス定数
http://www.shigeweb.jp/php/project_p/?section=php5oop&page=static
クラスとかオブジェクトとかインスタンスとか

★クラスとは＝設計図
★オブジェクトとは＝設計図をもとにして作った物
★インスタンス化とは＝インスタンスを作ること（PHPのオブジェクトを作ることと同意）

要するに以下のようなことらしい。
「オブジェクト」はオブジェクトの構造を定義した「クラス」の実例（インスタンス）で、「クラス」は「オブジェクト」のいわば“雛型”です。「オブジェクト」は幾つでも生成できますが、「クラス」はひとつしかありません。
http://www.shigeweb.jp/php/project_p/?section=php5oop&page=static

参考文献
Javaの「インスタンス」と「オブジェクト」の違いと、「インスタンス化」の概念
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1048669645
xcodeでstoryboardを使わない開発


single view applicationを選択し、sotyboardを削除する。

その後、info.plistのstoryboradの欄を空白にする

```AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
	    var window: UIWindow?

	    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = ViewController()
        self.window?.makeKeyAndVisible()

        return true

    }
```
上記のように記述するとstoryboardなしで開発を始められる