OmniAICreator/Qiita-1.07M huggingface dataset:
Go言語に1日で入門したときの頭の使い方の話

Diverse Advent Calendar の9日目です。

普段 [gitlab](https://about.gitlab.com/) を使っていて不便なことがあったので解決するために golang を1日で勉強した話です。
他にも新しい言語を覚えよう、というときに応用が効きそうなので、まとめてみることにしました。


# 覚えたいこと

* golang の基本文法
* とりあえず cli ツールを作りたかったので、最低限
    * 外部パッケージの使い方は知っておきたい
    * goroutine とかは無しで

# スペック

人間の。

* 使える言語（とそのエコシステムを知っている言語）
    * Java, Kotlin (Maven (Gradleで使ったことがあるだけ))
    * JavaScript (npm)
    * Ruby (gem)
    * Python (pip)
    * C
    * とか
* ポインタは C で散々やったのでわかってる（つもり）


# できごと

弊社ではプロダクトのコードを管理するのに gitlab を使っていて、コードレビューも行っています。
動作確認などで手元に checkout してくる必要がありますが、 Merge Request (github で言うところの Pull Request) のページから対象ブランチ名をコピーしてくるのが面倒くさい…

そこで社内 Slack で聞いてみました。

「 `git lab request` とかでプロジェクトのマージリクエストの一覧出せたりしないんですかねぇ」
「アドベントカレンダーのネタになるね！」
「APIあるで」
「はやいものがちだ」
(ﾌｧｯ)

言語は指定されませんでしたが、オフィスを見渡しても使っている OS がみんなバラバラ（Mac, Linux, Windows）。
どうせ作るならなるべく多くの人に使ってもらいたいので、ほとんど触ったことがなかった golang で作ってみることにしました。
クロスコンパイルが簡単らしいという話は聞いていたので。


# この機能は他の言語のアレ

"in other words" と言い換えていくパターンです。
そういう風にして覚えました。
引き出しの多さは、新しい知識の吸収を楽にしてくれるらしいので。

"golang は better C" という話は聞いていたので、とりあえず C 言語の親戚だと思って書き始めました。

注目したのは以下の箇所です。


| golang では | あれだよ、あれ |
|:--------|:----------- |
| ポインタ | Cと同様 |
| メモリ解放 | GCがある。Java や LL と同様に気にしなくて良い |
| テータ型 | C と同様のプリミティブ値、構造体、配列 ＋ マップ、スライス |
| 戻り値が複数 | Python でタプルとして値返すのと一緒。<br /> `_` で値を捨てられるのは Haskell っぽい | 
| アクセス修飾子 | Java っぽいアクセスコントロール。<br />修飾子はないが、<br />lowerCamelCase で private、<br /> UpperCamelCase で public |
| クラス | ない。特定の構造体が使える関数は定義できる。<br />JS の prototype に多少似ている |
| スライス | 扱い方は Python のスライスと似た感じ<br />C の配列（配列型変数）に近いが多少違うらしい |
| 変数宣言 | `:=` で Kotlin っぽく型推論してくれる。<br/> 型の指定も Kotlin とかっぽく後置 |
| 外部パッケージの利用 | npm (install -g) や gem らしく `go get (パッケージID)` でインストールしておけば、 `import` で使える |


# 「この問題、○研ゼミで見たやつだ！」と思ったら違ったところ

他の言語と同じように考えて使っていたらそうではなかった、という部分もありました。
頭のなかにある既存のモデルと異なるので、言い換えが効きません。

こういうところが、新しい言語を覚える上で「詰まるところ」なのでしょうか。
今回はひたすら Google 先生に質問しまくって理解しましたが、良い乗り越え方があれば知りたいところです。


## 未使用変数や未使用 import 宣言があるとコンパイルが通らない

他の言語だと問題なく通るので、最初はびっくりしました。
びっくりしたくらい。


## go run main.go とすると別ファイルに書いた変数や関数を参照できない

```
go run *.go
```
としないと動かないそうです。
（後から考えてみれば、リンクするオブジェクトファイルの中から関数などを探すわけですから当たり前っちゃ、当たり前ですね…）

そもそも import 文に使用するファイル名とか書かなくても良いのか？　と思っていたら、どうやら golang では同じパッケージに含まれるものは特別に宣言がなくても使えるらしい。

だからと言って、以下のように `main()` だけ含まれるソースを `go run` の引数に指定しても動かないようです。
LL を走らせるのと同じ感覚でいたので、これがどうして動かないのかわからず、しばらく困っていました。
勝手に他のソースコードを見に行ったりはしてくれないようです。


## go get = npm (, gem, maven) ではなかった

`go get` すると、依存関係を解決しながらライブラリやアプリケーションを GOPATH に突っ込んでくれるので、 npm や Maven と同じ感覚で使えるだろうと思っていたら、多少違いました。

GOPATH 内ではローカルパッケージが使用できないらしく、不用意にディレクトリを掘れません。

だから github に上がっている golang リポジトリは、リポジトリルートに go ファイルがずらっとなんでいるのかな、とも思いました。
上手い解決方法があったら教えて下さい。

<hr>

そうしてできたものがこちらです。
コンソールから gitlab の様子を見られるので、わざわざブラウザを見なくて良くなります。

[git-lab - yet another git-lab command](https://github.com/kikuchy/git-lab)

こんな風にして一日で新しい言語覚えてみた、という話でした。

「こういう考え方で勉強したほうが捗るよ！」
「自分はこうやって勉強してるよ！」

などありましたら、教えていただけると幸いです。
UIButtonのスタイルの変更方法まとめ


swiftでUIButtonの見た目を変更するのってCSSで変更するのと比べてすごい面倒ですよね。
今人的には全部覚える必要は無いと思いますが、必要に応じて使って貰えたらと思います。

![スクリーンショット 2015-12-09 18.57.22.png](https://qiita-image-store.s3.amazonaws.com/0/88163/36b3e0ba-15fc-550d-dc4f-030fcb1aac81.png "スクリーンショット 2015-12-09 18.57.22.png")
![スクリーンショット 2015-12-09 18.56.08.png](https://qiita-image-store.s3.amazonaws.com/0/88163/59ab8f14-e7f2-13f9-aa58-fb10f24341a7.png "スクリーンショット 2015-12-09 18.56.08.png")


##スタイルの変更方法

###ボタンに表示される文字
	button.setTitle("UIButton", forState: .Normal)

###文字色 color
	button.setTitleColor(UIColor.whiteColor(), forState: .Normal)

###タップした状態のテキスト
	button.setTitle("押されたよ", forState: .Highlighted)

###タップした後の文字色
	button.setTitleColor(UIColor.redColor(), forState: .Highlighted)

###ボタンのサイズ width height
	button.frame = CGRectMake(0, 0, 300, 50)

###タグ番号
	button.tag = 1

###配置場所
	button.layer.position = CGPoint(x: self.view.frame.width/2, y:100)

###背景色 background-color
	button.backgroundColor = UIColor(red:59/255,green:89/255,blue:152/255,alpha:0.7)


###角の丸み　border-radius
	button.layer.cornerRadius = 10

###ボーダー幅 border
	button.layer.borderWidth = 1

###ボーダーの色 border-color
	button.layer.borderColor = UIColor(red:1.0,green:1.0,blue:1.0,alpha:0.3).CGColor

###ボタンをタップした時に実行するメソッドを指定
	button.addTarget(self, action: "tapped:", forControlEvents:.TouchUpInside)
	
　	
	
	
		let button = UIButton()
        //ボタンのテキスト
        button.setTitle("UIButton", forState: .Normal)
        
        //テキストの色 color
        button.setTitleColor(UIColor.whiteColor(), forState: .Normal)
        
        //タップした状態のテキスト
        button.setTitle("押されたよ", forState: .Highlighted)
        
        //タップした後の文字色
        button.setTitleColor(UIColor.redColor(), forState: .Highlighted)
        
        //ボタンのサイズ width height
        button.frame = CGRectMake(0, 0, 300, 50)
        
        //タグ番号
        button.tag = 1
        
        //配置場所
        button.layer.position = CGPoint(x: self.view.frame.width/2, y:100)
        
        //背景色 background-color
        button.backgroundColor = UIColor(red:59/255,green:89/255,blue:152/255,alpha:0.7)

        
        //角の丸み　border-radius
        button.layer.cornerRadius = 10
        
        //ボーダー幅 border
        button.layer.borderWidth = 1
        
        //ボーダーの色 border-color
        button.layer.borderColor = UIColor(red:1.0,green:1.0,blue:1.0,alpha:0.3).CGColor
        
        //ボタンをタップした時に実行するメソッドを指定
        button.addTarget(self, action: "tapped:", forControlEvents:.TouchUpInside)
        
        //viewにボタンを追加する
        self.view.addSubview(button)


##見本
今回はswiftファイルでUIButtonをインスタンス化して使用しましたが、storyboardからボタンを生成してスタイル変更することもできます。
![スクリーンショット 2015-12-09 18.57.22.png](https://qiita-image-store.s3.amazonaws.com/0/88163/77d9b5e6-c49d-caf1-fd4b-111dc8752dd1.png "スクリーンショット 2015-12-09 18.57.22.png")
![スクリーンショット 2015-12-09 18.56.08.png](https://qiita-image-store.s3.amazonaws.com/0/88163/97d0bc01-759e-b14a-f6f4-d36206929376.png "スクリーンショット 2015-12-09 18.56.08.png")
Xcode6.4スプラッシュ画面が表示されなくてエラーになった時の対処法


突然スプラッシュ画面が表示されなくなり適当にいじっていると
```
2015-12-09 17:53:43.148 Project[20494:105173] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <~/Library/Developer/CoreSimulator/Devices/A36C536F-F52D-422F-9D0D-0295DEBBFEAB/data/Containers/Bundle/Application/4ADB8D26-69BF-4BCE-98C1-999BAC4FCD39/Project.app> (loaded)' with name '''
```

このようなエラーが・・・

`Target>BuildPhases>Copy Bundle Resources`
に、`LaunchScreen.xib`が抜けているので追加します。

リンク切れで赤くなっても大丈夫でした。

その後
`Target>General>Main Interface`
の選択肢に`LaunchScreen`があるので設定する。

以上で終了です。
元はというと突然スプラッシュ画面が表示されなくなってしまったのが原因なのでそれで困っている人もこちら確認してみると良いかもしれません。
CS-Cart: 独自のフィルタを実装する(かきかけ)

ショップフロントの商品一覧のサイドバーに出るスペックなどで絞込できる機能として「フィルター」というものがCS-Cartにはある。

フィルタに使えるフィールドは、「追加情報」や「価格」などだが、フィールドをPHPフックで追加することができるようだ。

```php:fn.catalog.php
    /**
     * Changes product filter fields data
     *
     * @param array $filters Product filter fields
     */
    fn_set_hook('get_product_filter_fields', $filters);
```

試す機会があったら、追記する。
MacOSX10.11 ElCapitanにMySQLを導入してみた


##なんで導入？
Webアプリケーションを勉強していて、データベースも基本的な知識はしっかり身につけておきたいと思ったので。
データベースはAccessのアプリ開発、C#でADO.netの小規模アプリを開発した程度の偏った知識もち。


##環境
環境:MacOSX 10.11 ElCapitan

##参考にさせて頂いたもの
[DBOnline](http://www.dbonline.jp/)

##インストール
HomeBrewでインストールするので、最初にHomeBrewをアップデート＆アップグレードを行います。

```
$brew update
$brew upgrade
```

アップデートが終ったらインストールします。

```
$brew install mysql
```

2015/12/8時点ではバージョン5.7.9でした。

##MySQLの概要
MySQLのデータベース階層構造は3階層になっています。
Database(instance) - Schema - Table

ANSIの標準SQLでは4階層モデルが標準ですが、MySQLはデータベース層とスキーマ層が統合がされているため、３階層となります。


##実際に使ってみる

ルートでログイン

```
$mysql -u root
```

いつもルートでログインするのは危険なのでユーザーアカウントを作ります。
まずは現在のユーザーを確認。

```
mysql > select User,Host from mysql.user;
```

実行結果は以下のようになります。
![スクリーンショット 2015-12-09 10.06.14.png](https://qiita-image-store.s3.amazonaws.com/0/58546/7a4e392d-9762-3ca4-7e0a-4c0de441bb69.png "スクリーンショット 2015-12-09 10.06.14.png")

mysql.sys とrootの２ユーザーがあることがわかります。

ユーザーを追加します。
今回はユーザー名：Foo パスワード:barで設定してみました。

```
mysql> create user 'Foo'@'localhost' identified by 'bar';
```

![スクリーンショット 2015-12-09 10.05.09.png](https://qiita-image-store.s3.amazonaws.com/0/58546/fd7a1b09-3e3c-e7a0-8d0d-d5327d8069db.png "スクリーンショット 2015-12-09 10.05.09.png")

一回ログアウトして作成したユーザーでログインします。

```sql
mysql> quit;
```

```bash
$mysql -u Foo -p
```

パスワードを入力し、成功すればログインできます。

実際にテーブルを作るため、まずはトップ階層になるデータベースを作成します。


データベースの追加

```sql
mysql> create database foo;
```


作成したデータベース"foo"を使用します。

```sql
mysql> use foo;
```

これでfooデータベースを使っている状態になります。


barテーブルの追加
ID,Elemの２つのカラムをもつテーブルにします。
IDを主キーに設定します。

```sql
mysql> create table bar(
	-> ID MEDIUMINT NOT NULL AUTO_INCREMENT,
	-> Elem CHAR(20) NOT NULL,
	-> PRIMARY KEY (ID)
	-> );
```

作成したテーブルを確認します。
確認方法はいくつかありますが、今回はOracle互換コマンドのdescを使います。

```sql
mysql> desc bar;
```
![スクリーンショット 2015-12-09 18.10.19.png](https://qiita-image-store.s3.amazonaws.com/0/58546/6b9be90d-354e-1711-9599-4b5ac471ee06.png "スクリーンショット 2015-12-09 18.10.19.png")


##あとがき

久しぶりにSQL文を書きましたが、数年使わないとすぐ忘れちゃいますね。
今回のデータベースの勉強し直しで以下の本を読みましたが非常にわかりやすかったので紹介します。
Kindle版なら1000円ちょっと、でこのボリュームはお買い得かな！
このおうちで学べるシリーズは初めて読みましたが、他にも読んでみたいと思いました。
![9k=.jpg](https://qiita-image-store.s3.amazonaws.com/0/58546/c53f0d5f-5040-032b-45e1-e574399234d1.jpeg "9k=.jpg")
[おうちで学べるデータベースのきほん](http://www.amazon.co.jp/dp/479813516X)
環境ごとに投入する初期データを変える

## やりたいこと

初期データを `db/seeds.rb` に書いているが、`Rails.env`に応じて投入するデータを変えたい。


## やったこと

1. `db/seeds/development.rb` のような `db/seeds`ディレクトリを作成してその中に`環境名.rb`のファイルを生成する

2. `db/seeds.rb` に下記の内容を入れる

```db/seeds.rb

load(Rails.root.join('db', 'seeds', "#{Rails.env.downcase}.rb"))

```

これで、 `rake db:seed RAILS_ENV=development`で `db/seeds/development.rb`に記載している初期データが入るようになります。

## 参考

[Ruby On Rails: way to create different seeds file for environments - Stack Overflow](http://stackoverflow.com/questions/16808471/ruby-on-rails-way-to-create-different-seeds-file-for-environments)
Redmine 3.2.0 新機能のご紹介(4)

#Redmine 3.2.0 新機能のご紹介(4)
 

##16. カスタムフィールドの書式に「キー・バリュー リスト」が追加 (#21060) 
Custom field format with possible values stored as records

「管理」->「カスタムフィールド」->「チケット」->「新しいカスタムフィールドを作成」で、「書式」に「キー・バリュー リスト」形式が追加されました。
<img width="1280" alt="3.2.14-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/9fca7155-7a78-9cda-7df2-870cc7c82d17.png">
 
##17. ホームでの「最近のプロジェクト」を削除 (#21148) 
Remove "Latest Projects" from Home page

以前のバージョンでは「ホーム」に「最近のプロジェクト」欄がありましたが、3.2.0バージョンでは削除されました。
<img width="1280" alt="3.2.15-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/36ad3da1-3453-5128-6626-02979a767362.png">

##18. 概要でのチケットトラッキングが表として表示 (#20413、#20413) 
Use a table instead of an unordered list in "Issue tracking" box
Change Japanese translation for "view"
	
概要でのチケットトラッキングの表示方法が以前のバージョンのリスト表示から3.2.0バージョンでは表形式で表示されるようになりました。
また、「見る」から「表示」に表記が変更されました。
<img width="1280" alt="3.2.16-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/bcc74830-a7a7-600f-b121-a95c496a5b5f.png">
 
##19. 用語の変更(#20496、#20413) 
Change Japanese translation for "time tracking"
Change Japanese translation for "view"
	
19.1.「設定」の「作業分類」タブの表現が「時間トラッキング」から「時間管理」に変更されました。
<img width="1280" alt="3.2.17-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/a21f8d90-846c-3567-a118-5858e8b99b27.png">

19.2.「管理」->「カスタムフィールド」->「チケット」->「新しいカスタムフィールドを作成」->「書式」で以前のバージョンは「リストから選択」から3.2.0バージョンでは「リスト」に変更されました。
<img width="1280" alt="3.2.18-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/39eca448-39a3-99b5-dba6-a43b0a233b53.png">
 
##20. 概要でのチケットトラッキングとメンバーの位置を修正(#21159) 
Hide empty <ul> on project overview
	
「概要」の「チケットトラッキング」と「メンバー」の位置が以前のバージョンで一致していませんでしたが、3.2.0バージョンでは一致するようになりました。
<img width="1280" alt="3.2.19-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/ca51638e-058b-3405-8dd4-f2c7d4933345.png">
	

##[関連リンク] 出典・参考情報
本資料は、[Ankosoft社](http://www.ankosoft.co.jp/)の資料を元に作成しました。
出典URL：http://www.ankosoft.co.jp/redmine3-2-0-4/
PDF資料は[こちらから](http://www.ankosoft.co.jp/wp-content/uploads/2015/09/Redmine_3.2.0.pdf)
iOS6　SafariでHistory BackするとPOSTがGETになる

**iOS6のSafariでHistory BackするとPOSTがGETになる**

---
■備忘録のためメモしておきます

・検証端末
iOS6.0（iPhone4）
iOS6.1.3（iPhone3GS））

・対象外の挙動確認
Chromeシミュレータ
iOS8.2（iPhone6Plus）

- iOS6の挙動（不具合）

「Javascriptのhistory.back」やブラウザ左下の矢印での「戻る」の際に、
前の画面への遷移が「POST」であった場合でも、「GET」に書換えて遷移する物である。（302の時の挙動に近い）

```lang-＜ここに言語を入力＞
       Post          Post
画面A    →    画面B    →    画面C


```
上記遷移の場合に、「画面C」から「画面B」に遷移しようとする際に、

iOS6 だと、GETで「画面B」に移動しようとする。（端末にCacheして無い場合。）
そうすると、「画面B」の遷移に必要なBodyが欠落し、今回の場合はエラー遷移となる。
SwiftでgzipするにはAWSGZIPが便利（AWS SDKを使っている場合限定）

## TL;DR

* AWS SDKに含まれる以下のメソッドが便利
    * `NSData#awsgzip_gzippedDataWithCompressionLevel(level: Float)`
    * `NSData#awsgzip_gzippedData()`
    * `NSData#awsgzip_gunzippedData`

## 目的

`NSData`オブジェクトをgzip形式で圧縮/展開したい。

## 調査

「Swift gzip」などで検索すると、いくつかライブラリが見つかりますが、テストコードがなかったり、メンテナンスされていなかったりで微妙。

## 解決

そんな時、別の用途で使っているAWS SDKに[AWSGZIP.m](https://github.com/aws/aws-sdk-ios/blob/master/AWSCore/GZIP/AWSGZIP.m)というファイルが含まれているのを偶然発見。
問題なく圧縮/展開できました。AWS SDKに含まれるくらいなので、信頼性もある程度あると思われる。
もちろん、これらを使えるのはAWS SDKを使っている場合限定ですが。

`AWSGZIP.m`ファイル内のコメントによると、オリジナルは[nicklockwood/GZIP](https://github.com/nicklockwood/GZIP)とのこと。もちろんこちらでもOK。
Redmine 3.2.0 新機能のご紹介(3)

#Redmine 3.2.0 新機能のご紹介(3)
 

##11. モバイル端末での表示最適化 (#19097) 
Responsive layout for mobile devices

幅の狭いモバイル端末からの表示時にも、最適化された画面を表示するようになりました。また、画面の右上でスマートな形式のメニューを表示します。
<img width="684" alt="3.2.10-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/9814c214-39b1-b1be-7c46-a85639e66937.png">

##12. コメント文字数を1024文字まで引き上げ(#19885、#19886) 
Raise time entries comments limit to 1024
Raise wiki edits comments limit to 1024

コメント数の文字制限が1024文字に引き上げられました。
 
##13.「セッション有効期間」の「有効期間の最大値」の値追加(#20933) 
Options for shorter session maximum lifetime

「管理」->「設定」->「認証」で、「セッション有効期間」の「有効期間の最大値」の値に、「４時間、「８時間」、「１２時間」が追加されました。
<img width="1280" alt="3.2.11-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/c8cdbe12-0790-da03-2387-779dbf2bc723.png">

##14.カテゴリ名の文字数が30文字から60文字に引き上げ(#20991) 
Raise maximum length of category name to 60

カテゴリ名の文字列は、以前のバージョンでは最大30文字まででしたが、3.2.0バージョンから60文字に変更されました。
それに伴いテキストボックスの幅も広げられました。
<img width="1280" alt="3.2.12-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/b33b78be-4dcd-54bb-85b6-a964101776e9.png">
 
##15.ユーザー登録時、「メールアドレスを隠す」がデフォルトで設定 (#21042) 
Check "Hide my email address" by default for new users

以前のバージョンでは、「新しいユーザー登録」時、「メールアドレスを隠す」がデフォルトでオフでしたが、3.2.0バージョンではオンになります。
<img width="1280" alt="3.2.13-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/a404061b-b95f-7973-642c-9f6536ae368f.png">

##[関連リンク]出典・参考情報
本資料は、[Ankosoft社](http://www.ankosoft.co.jp/)の資料を元に作成しました。
出典URL：http://www.ankosoft.co.jp/redmine3-2-0-3/
PDF資料は[こちらから](http://www.ankosoft.co.jp/wp-content/uploads/2015/09/Redmine_3.2.0.pdf)
Redmine 3.2.0 新機能のご紹介(2)

#Redmine 3.2.0 新機能のご紹介(2)
 

##6. Wikiページに「キャンセル」が追加(#4285)
Add cancel button during edition of the wiki

Wikiページに「キャンセル」が追加されました。
<img width="1280" alt="3.2.5-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/5b07a5d2-527f-50d9-2be8-7bf85ea0cf48.png">


##7. 「新しいチケット」のステータスをワークフローから指定 (#5816)
New issue initial status should be settable in workflow

ワークフローの「現在のステータス」に「新しいチケット」が追加されました。これにより、「新しいチケット」が発行された際のステータスをワークフローで指定することが可能になりました。
<img width="1280" alt="3.2.6-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/84d06f93-5c68-0a98-3dfd-c7c2b50aab2b.png">

 
##8. 添付ファイル機能の強化 (#10672、#20008)
Extend Filesize in the attachments table for files with size > 2147483647 bytes
Files upload Restriction by files extensions

「管理」->「設定」で、以前のバージョンでは「全般」タブに「添付ファイルサイズの上限」項目だけがありましたが、3.2.0バージョンからは「ファイル」タブが追加され、機能が強化されました。
添付ファイルサイズの上限が2147483647 bytesまで引き上げられた。
添付ファイルとして許可する拡張子、禁止する拡張子を指定できるようになりました。
<img width="1280" alt="3.2.7-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/800895e9-3a53-1ef8-0f16-1704a7a0638e.png">


##9. 履歴で添付ファイルのサムネイル表示機能(#13429)
Include attachment thumbnails in issue history

チケットの履歴の項目で添付ファイルのサムネイルを表示できるようになりました。
<img width="1280" alt="3.2.8-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/f494906f-e056-52a3-8099-7394ae8ca98d.png">

サムネイルを表示させるためには、「管理」->「設定」->「表示」で「添付ファイルのサムネイル画像を表示」にチェックをいれます。
<img width="456" alt="3.2.8-2-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/b1f5c852-342a-bc59-77ad-2c288e53035d.png">
 
##10. 「ブロック先」、「ブロック元」項目の条件が強化 (#16621、#21176)
Ability to filter issues blocked by any/no open issues
Japanese translation change (Blocks / Blocked by)

フィルターのブロック先・ブロック元の条件に、「未完了のチケット」、「なし または完了したチケット」が追加されました。
また、「ブロックしている」が「ブロック先」に、「ブロックされている」が「ブロック元」に文言が変更されました。
<img width="1280" alt="3.2.9-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/928e367c-e335-80d9-f2b8-c1647cf13beb.png">

##[関連リンク]出典・参考情報
本資料は、[Ankosoft社](http://www.ankosoft.co.jp/)の資料を元に作成しました。
出典URL：http://www.ankosoft.co.jp/redmine3-2-0-2/
PDF資料は[こちらから](http://www.ankosoft.co.jp/wp-content/uploads/2015/09/Redmine_3.2.0.pdf)
jsDoc3 3.4.0からの変更点

#jsDoc3とは

Node.js，Mozilla Rhinoで動作するjavascriptソースのドキュメント生成ツールです．
基本的な使い方は[こちらの記事](http://qiita.com/opengl-8080/items/a36679f7926f4cac0a81)で詳しく説明されています。

jsDoc3を使ってみようとしたのですがちょっと詰まりました。
リリースノート読んだらちゃんと書いてありました。反省。というお話です。

## リファレンス
[jsdoc3/jsdoc(公式)](https://github.com/jsdoc3/jsdoc)
[@use JSDoc](http://usejsdoc.org/index.html)
[JsDoc3-manual-jp](https://sites.google.com/site/jsdoc3manualjp/home)

# 3.4.0リリースノート
## https://github.com/jsdoc3/jsdoc/releases/tag/3.4.0

>This version of JSDoc works with Node.js 4.0 and later, and it fully supports ECMAScript 2015 (ES6) and JSX code. Mozilla Rhino is no longer supported.

## ①　Mozilla Rhinoのサポート終了
- java入ってるし、使ってみるかー!⇒動かない…jsdocコマンドで実行できない…
- ＿人人人人人人人人人人人人人人人人人人人人人人＿
＞　**Mozilla Rhino is no longer supported.**　＜
￣^Y^Y^YY^Y^Y^Y^YY^Y^Y^Y^YY^Y^Y^Y^Y^Y^Y^Y￣

- と、いうわけで3.4.0からはRhinoからは実行できません。Rhino派の人は～3.3.0を使いましょう。

## ②　ECMAScript 2015 (ES6)とJSXに対応
- とりあえず3.3.0を使っていざドキュメンテーションしようとしたらエラーになりました。
- そうです、ES6の構文を使っていたのです><　(class,const…etc)
- **ES6対応は3.4.0からでした！！**

# おわり
## Node.jsとその他のドキュメンテーションツール
- これからはNode.jsがないと厳しい世の中なのでしょうか。
- Node.jsをインストールしたら、[ESDOC](https://esdoc.org/)や[YUIDOC](http://yui.github.io/yuidoc/)も試してみたいです。
Redmine 3.2.0 新機能のご紹介(1)

#Redmine 3.2.0 新機能のご紹介(1)
 

##概要
 

Redmineの公式ホームページである「http://www.redmine.org/ 」の「ロードマップ」でRedmineの各バージョン別の機能を調べることができます。

2015年12月6日にリリースされた「Redmine3.2.0」バージョンでは全部で85種の変更がありました。

本書では代表的な20項目に対して説明いたします。

 <「Redmine 3.2.0」バージョンの新機能一覧画面>
![3.2.1.png](https://qiita-image-store.s3.amazonaws.com/0/94912/a344e903-3e86-808d-ffba-75be6c540863.png)

 
変更された項目の内訳は下記の表の通りです。
![3.2.2.png](https://qiita-image-store.s3.amazonaws.com/0/94912/f5796cd2-f2fe-5296-070f-1fe6b8ff885b.png)

 
機能別の変更された項目の内訳は下記の表の通りです。
![3.2.3.png](https://qiita-image-store.s3.amazonaws.com/0/94912/72337e4e-021c-863a-6ee8-ef28f8cbf21c.png)


##1. CSVファイルからのチケットインポート機能(#950)
Import Issues from delimited/CSV file

以前のバージョン※１にはなかった、「CSVファイルからのチケットインポート機能」が3.2.0バージョンに追加されました。「チケット」、「ガントチャート」、「カレンダー」タブのサイドバーに「インポート」という項目が追加され、CSVファイルからのチケットインポートが可能になります。

※１：本書で使用する「以前のバージョン」は「Redmine 3.1.2.stable」バージョンを意味します。

<3.2.0バージョン画面>
![3.2.4.png](https://qiita-image-store.s3.amazonaws.com/0/94912/2191f6a2-42ee-0b46-6fc0-6d51c8c026b6.png)

1.1.「インポート」をクリックします。
1.2.「参照」をクリックしてインポートするCSVファイルを選択し、「次」をクリックします。
![3.2.5.png](https://qiita-image-store.s3.amazonaws.com/0/94912/333dac2e-7877-9a09-285a-c454ef2e20bf.png)

1.3.「オプション」項目で必要な項目を設定し、「次」をクリックします。
![3.2.6.png](https://qiita-image-store.s3.amazonaws.com/0/94912/49357bf9-23b5-3457-3a39-3b545766fd37.png)

1.4.「フィールドの対応関係」項目でインポートするフィールドの関連付けをします。
![3.2.7.png](https://qiita-image-store.s3.amazonaws.com/0/94912/f4af33af-81a8-3cb9-3f4b-63328b3fb878.png)

1.5.インポートが完了すると下図のような画面が表示されます。
![3.2.8.png](https://qiita-image-store.s3.amazonaws.com/0/94912/d0349d80-54e1-7ece-6b24-ef5c56e2d8cd.png)

##2. フィルターに「説明」項目が追加(#1159)
Allow issue description to be searchable as a filter

以前のバージョンでは、「説明」項目をフィルター条件に入れることができませんでしたが、3.2.0バージョンから可能になりました。
<img width="1280" alt="3.2.1-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/5d0a6619-4acb-ff44-abef-a8ab7b3cff64.png">


##3. 「予定工数」、「作業時間」の合計時間を「チケット」ページで表示(#1561)
Totals for estimated/spent time and numeric custom fields on the issue list

以前のバージョンになかった「チケット」ページで、「予定工数」、「作業時間」の合計時間を表示する機能が追加されました。
「チケット」ページのオプションをクリックし、合計項目で「予定工数」、「作業時間」にチェックを入れて、「適用」をクリックすると、「チケット」ページに「予定工数」、「作業時間」の合計数が表示されます。
<img width="1280" alt="3.2.2-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/ef07dc60-d81c-cd0d-9903-f9a0158bfedc.png">


##4. ガントチャートで日付表示が追加(#3034)
Add day numbers to gantt

以前のバージョンではガントチャートで週数の表示しかされませんでしたが、3.2.0バージョンから、日付の表示が追加されました。
<img width="1280" alt="3.2.3-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/e91b9acd-9cc8-c6b5-1121-643e219180a3.png">


##5. ユーザーページで関連のあるチケット、活動を表示(#3398)
Link to assigned issues on user profiles

ユーザーページで「担当しているチケット数」、「報告したチケット数」が表示されるようになりました。
<img width="1280" alt="3.2.4-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/94912/f819a1a2-30f0-07b2-c242-1982c742729c.png">


##[関連リンク]出典・参考情報
本資料は、[Ankosoft社](http://www.ankosoft.co.jp/)の資料を元に作成しました。
出典URL：http://www.ankosoft.co.jp/redmine3-2-0-1/
PDF資料は[こちらから](http://www.ankosoft.co.jp/wp-content/uploads/2015/09/Redmine_3.2.0.pdf)
rake pry console

Rake task で pry を立ち上げる

```rb
task :console do
  require 'pry'
  require 'my_gem'
  ARGV.clear
  Pry.start
end
```

via [7 Lines Every Gem's Rakefile Should Have - Ernie Miller](https://ernie.io/2014/02/05/7-lines-every-gems-rakefile-should-have/#comment-1231925777)
CloudAtCostのDebian-7.1をDebian8.2に更新

* CloudAtCostのdebian7.1で実施

## sources.list

* [Kernel version 4.1 and 4.2 upgrade/compile guide](http://www.linuxquestions.org/questions/debian-26/kernel-version-4-1-and-4-2-upgrade-compile-guide-4175552272/)

```bash:/etc/apt/sources.list
deb http://http.debian.net/debian jessie main
#deb-src http://http.debian.net/debian jessie main

deb http://http.debian.net/debian jessie-updates main
#deb-src http://http.debian.net/debian jessie-updates main

deb http://security.debian.org/ jessie/updates main
#deb-src http://security.debian.org/ jessie/updates main

deb http://http.debian.net/debian jessie-backports main contrib non-free
```

## apt-get update

```bash:
apt-get update
```

> W: There is no public key available for the following key IDs:
> 7638D0442B90D010
>  NO_PUBKEY CBF8D6FD518E17E1
>  NO_PUBKEY 9D6D8F6BC857C906

```bash:鍵の取得
for i in 7638D0442B90D010 CBF8D6FD518E17E1 9D6D8F6BC857C906
do
  gpg --keyserver pgpkeys.mit.edu --recv-key $i
  gpg -a --export $i | apt-key add -
done
```

## apt-get dist-upgrade

```bash:
apt-get update
```

```bash:長いのでscreen準備
apt-get install -y screen
reboot
```

```bash:userパスワードの設定
passwd user
```

```bash:
screen -R
apt-get dist-upgrade
```

* サービスの自動再起動はNOにして続行。1時間かかった。

# kernel 4.2に更新

```bash:
apt-get install -y \
  linux-image-4.2.0-0.bpo.1-amd64 linux-headers-4.2.0-0.bpo.1-amd64
```

```bash:
apt-get autoremove
```

# docker-engine用

```bash:/etc/apt/sources.list
deb https://apt.dockerproject.org/repo debian-jessie main
```

```bash:gpg鍵
for i in F76221572C52609D
do
  gpg --keyserver pgpkeys.mit.edu --recv-key $i
  gpg -a --export $i | apt-key add -
done
```

```bash:
apt-get update
apt-get install -y docker-engine
```
[shadowセット]Material designっぽい奥行き間演出用

自分メモ用
A～Eまでだんだんと手前に浮いてくるイメージ
hover時などtransitionと合わせてふんわり浮いてくる効果アクセント時に

[![memo.png](https://qiita-image-store.s3.amazonaws.com/0/62365/4ac1fa58-4d8f-e44d-a62d-2d3c8bed1dff.png)](http://codepen.io/kabosu-s/pen/BjoQVQ)


#css
	.shadowA {
	-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
	-moz-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
	box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
	}

	.shadowB {
	-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
	-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
	box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
	}

	.shadowC {
	-webkit-box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
	-moz-box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
	box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
	}

	.shadowD {
	-webkit-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
	-moz-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
	box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
	}

	.shadowE {
	-webkit-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
	-moz-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
	box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
	}
TensorFlowをscikit-learnライクに使えるskflow

Pythonで機械学習を行う際によく使われるscikit-learnから、最近話題のTensorFlowを呼び出して使えてしまうという、目がくらむようなライブラリが登場しました。しかもgoogle謹製。それがskflowです。

[TF Learn](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/learn/python/learn)
※0.8.0から、TensorFlow本体に組み込まれました

scikit-learnには今までニューラルネットワーク系の実装がなかったのですが、これによりニューラルネットワークはもとより、ディープラーニングまで扱えるようになります。
また、TensorFlow側にとってもscikit-learn側に豊富にあるデータの前処理の機能([Preprocessingなど](http://scikit-learn.org/stable/modules/preprocessing.html))と連携できるのは大きなメリットです。

そういう意味では、この二つをつなぐskflowの登場により機械学習処理の構築は非常にやりやすくなると思います。


## インストール

TensorFlowの0.8.0からskflowは本体に取り込まれたため、個別のインストールは不要になりました。オプションとして、`scikit-learn`、`numpy`、`pandas`をインストールすると便利ですがなくても使えます。


## 使い方

GitHubからの引用になりますが、線形分類機は以下のようにかけます。

```
from tensorflow.contrib import skflow
from sklearn import datasets, metrics

iris = datasets.load_iris()
classifier = skflow.TensorFlowLinearClassifier(n_classes=3)
classifier.fit(iris.data, iris.target)
score = metrics.accuracy_score(iris.target, classifier.predict(iris.data))
print("Accuracy: %f" % score)
```

`skflow.TensorFlowLinearClassifier`がTensorFlow側とのIFになっています。この後は、`fit`などscikit-learnではおなじみのAPIで処理を進めていくことができます。


ニューラルネットワークについては、以下のようになります。`TensorFlowDNNClassifier`を利用し、隠れ層が10-20-10のニューラルネットワークを構築しています。

```
from tensorflow.contrib import skflow
from sklearn import datasets, metrics

iris = datasets.load_iris()
classifier = skflow.TensorFlowDNNClassifier(hidden_units=[10, 20, 10], n_classes=3)
classifier.fit(iris.data, iris.target)
score = metrics.accuracy_score(iris.target, classifier.predict(iris.data))
print("Accuracy: %f" % score)
```

より詳細にモデルを構築したい場合は、以下のように行います。[`skflow.ops`](https://github.com/google/skflow/tree/master/skflow/ops)で直接構築していく感じです。

```
from tensorflow.contrib import skflow
from sklearn import datasets, metrics

iris = datasets.load_iris()

def my_model(X, y):
    """This is DNN with 10, 20, 10 hidden layers, and dropout of 0.5 probability."""
    layers = skflow.ops.dnn(X, [10, 20, 10], dropout=0.5)
    return skflow.models.logistic_regression(layers, y)

classifier = skflow.TensorFlowEstimator(model_fn=my_model, n_classes=3)
classifier.fit(iris.data, iris.target)
score = metrics.accuracy_score(iris.target, classifier.predict(iris.data))
print("Accuracy: %f" % score)
```

簡単な紹介となりましたが、逆に紹介することがあまりないくらいシンプルです。
TensorFlowに興味はあるけどまた新しい書き方覚えるのはちょっとな・・・という方は、ぜひ見ていただければと思います。
画像を圧縮したいとき、オンラインから実行できるツール

#はじめに
Qiitaに投稿するのは初めての@NEPPIEです。

HTMLフロントエンドエンジニアとして、某デザイン会社でコーディングを生業としています。
まだまだひよっこのところもありますが、よろしくお願い致します。

Qiitaには業務で分からないことがあったときにお世話になってます。
で、アドベントカレンダーに登録したのですが、投稿予約日を忘れてしまいました^^;。
「1分で実現できる」というネーミングが気になって登録したので、簡単に画像を圧縮できるツールを紹介したいと思います。

#画像を圧縮したい
画像サイズが大きいので圧縮したいというケースは多いと思います。
通常ならPhotoshopなどを使うと細かい設定も出来ますが、起動させるのに時間がかかったり、画像を縮めるだけのために立ち上げるのもどうかなというのもあるかもしれません。

それでも今まではPhotoshopを使ってたのですが、最近になって、便利ツールを見つけました。

##おススメの圧縮ツール
[TinyPNG](https://tinypng.com/)
![tinypng_jpg_support_01.png](https://qiita-image-store.s3.amazonaws.com/0/82037/da4d54b3-0cef-62a5-3622-a6cd14c69250.png)

圧縮したい画像をドラッグすると、自動的に圧縮してくれるという優れもの。
時間も1分かからないのがありがたいです。

どれくらい圧縮されたかがひと目で分かるし、サイズ制限はあるけど複数まとめてもOK。
最近はJPGファイルも対応できるようになったのがありがたいです。

今は仕事でTinyPNGを使っていることが多いけど、実はブログもやってます。ブログには画像は不可欠なのですが、アップロードしようとすると画像ファイルが大きいのが悩みでした。

でも、これを書いている間に調べてみたら、WordPressプラグインもあるということを知りました！

[画像圧縮サービス「TinyPNG」がWordPressプラグインで利用できるように！設定方法をご紹介](http://love-guava.com/tinypng-wordpress-plugin/)

詳細はこちらに任せるとして、これを書いたら実装してみようと思います。
で、久しぶりにブログも更新しようかな、なんて思ってます。

#マイブログ
（最近更新が途絶えてますが…。今月は頑張ります）
[Party?Party!@neppie.com](http://www.neppie.com/blog/)
「Nox App Player」 - コマンドプロンプト

「Nox App Player」は、モバイルゲームやアプリをPCで楽しめる新しいAndroidエミュレータです。

今回はコマンドプロンプトについて紹介します。

今サポートしているコマンドプロンプトは下記を御覧ください。

Nox.exe

-clone:<nox_id> 指定のエミュレータを起動

-apk:<local_apk_path> [-activity:<package_name/launchable_activity_name> -param:<start_params>]
APKファイルをインストール＆起動、特定のactivityを起動

-package:<package_name> パッケジの名前より特定のアプリを起動

-title:<player_name> エミュレータの名前の変更

-lang:[zh-Hans|en|ko|jp] エミュレータの言語の設定

-locale:<locale> 地域設定

-screen:[vertical|horizontal] 画面設定（横画面＆縦画面）

-resolution:<resolution> 解像度設定

-dpi:<dpi> DPI設定

-performance:[low|middle|high] 機能設定

-cpu:<cpu_number> CPU設定

-memory:<memory_in_mb> メモリ設定

-root:[true|false] Root状態の確認

-virtualKey:[true|false] 仮想キー表示の設定

-quit エミュレータを終了


1.

1.1 エミュレータ名前の設定
-title:<player_name>
例: Nox.exe "-title:Nox App Player"

1.2 Androidシステムの言語と地域設定。

a) 言語設定 サポートしている言語は： zh-Hans: 中国語, en: 英語, ko:韓国語, jp:日本語
-lang:[zh-Hans|en|ko|jp]

b) 地域設定
-locale:<locale>
例: Nox.exe -lang:en -locale:sg

1.3 画面、解像度、dpiの設定。

a) 横画面の設定： horizontal: 横画面(タブレット版)，vertical: 縦画面(モバイル版)。
エミュレータは画面の解像度により、適切なサイズ、解像度及びdpiを選択。
-screen:[horizontalvertical]
例: Nox.exe -screen:vertical

b) 解像度設定，”x”が必要。
-resolution:<resolution>
例: Nox.exe -resolution:1440x900

c) dpi設定
-dpi:<dpi>
例: Nox.exe -resolution:1440x900 -dpi:270

1.4 エミュレータの機能設定。

a) 機能設定は: low:低い, middle:中, high:高い
-performance:[low|middle|high]
例: Nox.exe -performance:high

b) cpu定義、メモリ設定。cpuとメモリは同時に設定しないと無効。
VTが未オープンの状態では唯一つのCPU、最大2048メモリです。
-cpu:<cpu_number> -memory:<memory_in_mb>
例: Nox.exe -cpu:1 -memory:1024

1.5 root状態の確認、true: オン　false: オフ
-root:[true|false]
例: Nox.exe -root:false

1.6 仮想キー設定，右側仮想キー、下側仮想キー。true: 表示，false: 表示しない
-virtualKey:[true|false]
例: Nox.exe -virtualKey:true

2. App起動とインストール

2.1. ダウンロードしたapkをインストール。
-apk:<local_apk_path> [-activity:<package_name/launchable_activity_name> -param:<start_params>]

例:
Nox.exe "-apk:C:\Users\xxxxx\Desktop\tmp\apk\jeten.apk"
Nox.exe "-apk:C:\Users\xxxxxxx\Desktop\tmp\apk\test.apk" "-activity:com.bignox.app.test/com.bignox.app.test.AnotherActivity" "-param:-e param_name1 param_value_1 -e param_name_2 param_value_2"

2.2. appネームによりインストール。packageがインストール済の状態で，直接appを起動。
-package:<package_name>
例: Nox.exe -package:com.bignox.app.test

3.

3.1 エミュレータを終了
-quit
例: Nox.exe -quit

4. マルチウィンドウ設定
-clone:<nox_id> 特定のエミュレータを起動。
エミュレータのidはNox_x。（例Nox_0, Nox_1 ... Nox_32 ... ）。

例:
Nox.exe -clone:Nox_1 　　　　エミュレータNox_1を起動
Nox.exe -clone:Nox_2 -resolution:1440x900 -dpi:270 -performance:high -root:false 設定＆エミュレータNox_2を起動
Nox.exe -clone:Nox_2 -quit 　エミュレータNox_2を終了
Nox.exe -clone:Nox_3 "-apk:C:\Users\xxxxx\Desktop\tmp\apk\jeten.apk" エミュレータNox_3でapkをインストール
鏡の作り方 / 特定のアクタを鏡面のみに表示 / 爆発物のヒット判定

#はじめに

[Unreal Engine 4 (UE4) Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ue4) 9日目の記事です。

前日の記事は｢[ドット絵をマテリアルで煮込む](http://toorsoo.hatenablog.com/entry/2015/12/08/UE4_%E3%83%89%E3%83%83%E3%83%88%E7%B5%B5%E3%82%92%E3%83%9E%E3%83%86%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%A7%E7%85%AE%E8%BE%BC%E3%82%80)｣という@tea_basiraさんの2D表現についての記事でした。
ゲームの方、よく目にしていたのですが改めて見るとメッチャ綺麗･･･と思いながら記事を最後まで見ると

>明日は@malonyさんで「ぷちコンに出した作品で使った手法とおまけ内容の二つ」です。
反射ぷちコンでの手法…とても気になります！

ハードルが上げられてて私の心の中のマロニー(?)まで煮込まれそう(焦り)
![pic04.jpg](https://qiita-image-store.s3.amazonaws.com/0/101342/5a7bc272-ea50-0926-1312-cd3bc618efe2.jpeg)
(奇遇ながら[鍋を煮る](https://boilthepot.wordpress.com/)という個人ブログも書いてます)

***

本題に入りまして、ヒストリアさん主催の[第4回ぷちコン](http://historia.co.jp/ue4petitcon04)にて出展しました[Mirror's Eye](https://www.youtube.com/watch?v=nxOO11a3kCA)([2016年1月末までDL可](http://data.femiluna.net/index.php/s/4Pk8N7xMgZ2JRv1))
で使用した、以下の事について。

* ①鏡面の作り方
* ②特定のアクタを鏡面のみに表示
* ③爆発物のヒット判定(おまけ)
* ~~④別に作っているエスカレーターアセットについて(おまけ)~~おまけにするつもりでしたが今度別記事にて･･･

#鏡面の作り方
ゲームのコンセプトが｢見えない敵を鏡で見て倒す｣の為、まず最初に鏡を作る必要がありました。
UE4での鏡についての記事は色々ありますが、当時は[こちらのチュートリアル(YouTube)](https://www.youtube.com/watch?v=Ux9VFZL_DcM)を参考に鏡を作りました。

この動画ではトリガーボックス内にプレイヤーがいる場合にカメラの位置と方向に応じて反射面を描画しています。
上記の処理のない簡単な鏡面(のようなもの)は以下の手順で作成できます。

- A.描画ターゲット(TextureRanderTarget2D)を作成
    1. (TexutureRenderTarget2DのSizeX/Yを大きくすることで解像度向上ただしパフォーマンス低下)
- B.描画ターゲットをテクスチャとするマテリアルを作成
    1. 新規にマテリアル作成
    2. マテリアルのBPへA.の描画ターゲットをD&D
    3. TextureSampleの一番上のノードとエミッシブカラーを接続
    4. 鏡写しになるように左右反転(TextureCoordinate>UTilling=-1)
- C.鏡のアクタを作成
    1. アクタを作成
    2. メッシュの鏡とする面にB.のマテリアルを適用
    3. 鏡面の法線方向を向くSceneCapture2Dコンポーネントを追加
    4. TextureTargetにA.の描画ターゲットを設定

![3.png](https://qiita-image-store.s3.amazonaws.com/0/101342/5dbb84d6-29f1-8268-33fd-06b9fdd43442.png)



この方法で作った場合アクタをコピーしてもSceneCapture等は共有なので複数設置する場合
アクタのEventBeginPlayから毎回マテリアルなどを作成する必要があります(チュートリアル参照)。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/101342/0dafbe0e-0654-b39f-2199-0e32b01af732.png)
(チュートリアルの様に作らないとカメラが動いた時に反射に違和感があります、そもそも厳密には反射じゃないけど･･･)

#特定のアクタを鏡面のみに表示
鏡が出来たので今度はプレイヤーのカメラから敵を非表示に。
SceneCaptureにはHide (Actor) Componentという特定のアクタを非表示にする機能がありますが、Cameraにはありません･･･
ではSceneCaptureでキャプチャしたスクリーンをHUDに表示すれば･･･と思い実践してみるも画質を上げると重くなる･･･
最終的に、レベル内の**全ての敵アクタのオーナーをプレイヤー**にし、敵のメッシュの**OwnerNoSee**をオンにする事で出来ました。
Cameraにもアクタ非表示機能が欲しい所･･･もしかしてあるけど気付いてないだけ･･･？
![2.png](https://qiita-image-store.s3.amazonaws.com/0/101342/8b247f5f-1494-2322-1c98-effe130178b7.png)
(画面左側の敵がOwnerNoSeeオン、右がオフ)

#爆発物のヒット判定
ゲーム中に手榴弾を使って敵を倒すシーンがあるのですが、単純に爆発範囲の大きさのSphereコリジョンに
オーバーラップするかどうかで判定すると壁越しに敵を倒せてしまうので、
1. 敵がSphereにオーバーラップするかチェック
2. 手榴弾の座標→敵の座標でLineTraceを行う
3. 敵にHitすればダメージを与える処理を行う
という形でとりあえず壁越しヒットは無くなります。ただし座標次第では、ほぼ当たっているように見えてもヒットしなかったり
複数の敵がいる場合手前に位置する敵でLineTraceが妨害されたりと改良の余地アリ･･･
![4.png](https://qiita-image-store.s3.amazonaws.com/0/101342/0e2de519-4e9f-b37b-21ac-4044031db917.png)
(見辛くてごめんなさい)

#おわりに
あまり技術的な内容でなくほぼ対処法ばかりとなりましたが以上です。
書いてある内容で、こうすると良いというアドバイス等ありましたら是非コメント頂けると非常にありがたいです！
自動生成されたファイルを、所定のユーザで編集、削除したいとき

ログファイルとか、自動生成されたものを削除、編集したりしたいときの設定変更

# 自動生成されるファイルは、所有者が実行者になる

定時バックアップ処理など、マシン側が自動的にやってくれる処理で生成されたファイル（ディレクトリ）の場合、所有者が実行したプログラム自身になってたりする。

## 今回のケースでは

wordpressの所有者がapacheになっている状態で、backwpupで生成したwordpressのバックアップファイルの所有者とグループが、apache:apache になっていて、FTPクライアントからダウンロードができても削除ができなかった。

## ファイルを編集、削除するための方法は２通りある

1. ファイルのオーナー、グループを変更する（こちらのほうがよさそう）
2. ファイルのパーミッションを変更する

前者は権限は変わらないが、ファイルの所有者を変えることによって操作できるユーザを変更する。
後者はファイル所有者が変わらないが、操作権限が変わるので異なるユーザでも変更作業などが可能になる。

・・・という違い。実施したいことの主旨と、影響を考えると前者のほうが良くなる。（後者の場合、意図せぬユーザからの操作も受け付ける危険がある）

## 前提条件

対象ファイルは以下の条件を満たす
- 命令実施ディレクトリから見て、backupwpディリレクトリのなかにある
- ファイル名が　back で始まり、拡張子がtar.gz である

なお、ファイルを操作させたいユーザ名は ftpuser である。

## 対象のファイルだけオーナー、グループを変更してみる

従ってこんなコマンドを実施する。（chownの仕様上、スーパーユーザでないと実施不可能）
`# find ./backwpwp/ -name back*tar.gz | xargs chown ftpuser:ftpuser`

## 対象のファイルだけパーミッションを変更してみる
`# find ./backwpwp/ -name back*tar.gz | xargs chmod 666`

## 動作原理
パイプの前の部分は共通
`# find ./backwpwp/ -name back*tar.gz`
これ、コマンド実施した階層にあるbackupwp ディレクトリのなかにあるbackではじまりtar.gzで終わるもの（ファイル）の一覧を出しなさい。という意味

パイプより後ろのところだけ異なる

### （パイプの前ででてきた）　ファイルの所有者、グループを変更しなさい
`xargs chown ftpuser:ftpuser`

### （パイプの前ででてきた）　ファイルの操作権限を変更しなさい
`xargs chimod 666`

#どうしてこんなことする必要が出た
wordpressのプラグインで自動生成されたが、現時点で不要になったファイルがあったため。

## WordPressのバックアップ、デプロイの試験をしていたんだけど・・・

Backupwpを使った定期バックアップ処理をしているところで、
duplicatorを使って、デプロイ用ファイルを実施しようとしたところ
Large Filesで警告が出た。（１ファイルで3MB以上だと危険らしい）



## 原因は自動生成されたバックアップファイルだった

何が原因なのかな、とおもったら、uploadフォルダに入っている
（初期設定の、直接関係ないバックアップファイルをuploadフォルダにはきだす状態のまま使っていることが問題だけど）
c++ builder > TeeChart > 対数スケール > LeftAxis->Increment は 0にしないとだめ

```txt:動作確認
C++ Builder XE4
```

左軸を対数スケールにする時、LeftAxis->Incrementは0をセットしないと間隔表記がおかしくなってしまうようだ。

```
	formPtr->Chart_short->LeftAxis->Logarithmic = true;
	formPtr->Chart_short->LeftAxis->SetMinMax(0.00001, 1.0);
	formPtr->Chart_short->LeftAxis->Increment = 0;
	formPtr->Chart_short->LeftAxis->MinorTickCount = 8;
```

参考
http://www.teechart.net/support/viewtopic.php?f=4&t=11822

> The real cause of the problem is not having this property set:
>
Points1.Chart.Axes.Bottom.Increment = 0
Points1.Chart.Axes.Left.Increment = 0
Points1.Chart.Axes.Right.Increment = 0
Points1.Chart.Axes.Top.Increment = 0
>
lilo
UXに関するメモ

いろいろつらつらと英語の記事を読んでいて、Webとゲーム業界で「UX」という用語に関する理解や使い方が異なることがわかりました。

UI/UXという使われ方をしていたらWebの使われ方に近いです。
導線作りや「見やすい画面」というニュアンスで使われています。
こちらはビジュアルデザインよりの考え方です。

一方でゲームのUXはユーザーに何かさせる、またはその前後で何かを与えたり失わせる恐怖を与えたりすることで、ユーザーに次の動作を起こさせようとすることを指します。
つまり製作者側が意図する「ユーザーにさせたいこと」へと誘導し、深い沼へと引きずり込むためのユーザーの行動です。
完全にチーフゲームデザイナー職の職掌、マインドデザインよりの考え方です。

カイジの地下編で班長がカイジにビールと焼き鳥を与えた行為に近いんじゃないでしょうか。

どちらかに優劣をつけるつもりは私はありません。


端的な事実として、私はゲームより、心理学より、ユーザーの欲求や感情をコントロールするほうのUXが得意です。
逆にビジュアルデザインUX/UIデザインは苦手です。

「ゲームより、マインドデザインより」のUXデザインは、無課金ユーザーを廃課金ユーザーに、ライトユーザーをヘビーユーザーに、新規客を常連客に仕立て上げるプロダクトの設計に役に立ちます。
そのため、私はWeb業界でも特に有料会員枠で稼ぐ方向性ならたとえWebであっても「ゲームより、マインドデザインより」のUXからのアプローチも学習する価値があるのではないかと考える次第です。
Net::SSHでログを出力する

## 背景

RubyでSSH接続を扱うにはnet-sshというgemが利用されることが多い。
通常SSHをコンソールから行う時には `-v` オプションをつければ詳細な情報を確認することができるが、このgemでSSH接続をするときにも同様にSSHのログを確認する方法が存在する。

## 環境

- ruby 2.2.0
- net-ssh 3.0.1

## 方法

以下のように、`start`メソッドに`logger`オプションでLoggerオブジェクトを渡す。
また、`verbose`オプションに `:debug`, `:info`, `:warn`, `:error`, `:fatal` というシンボルを渡すことができる。

```rb:ssh_with_log.rb
require 'net/ssh'
require 'logger'

logger = Logger.new(STDOUT)

Net::SSH.start("localhost", ENV['USER'], logger: logger, verbose: :info) do |ssh|
  ssh.exec!("pwd")
end
```

出力例は以下のとおり

```
I, [2015-12-09T16:47:41.412958 #2196]  INFO -- net.ssh.transport.server_version[3fc95d8c8a28]: negotiating protocol version
I, [2015-12-09T16:47:41.431518 #2196]  INFO -- net.ssh.transport.algorithms[3fc95d8bd010]: got KEXINIT from server
I, [2015-12-09T16:47:41.432300 #2196]  INFO -- net.ssh.transport.algorithms[3fc95d8bd010]: sending KEXINIT
I, [2015-12-09T16:47:41.432485 #2196]  INFO -- net.ssh.transport.algorithms[3fc95d8bd010]: negotiating algorithms
I, [2015-12-09T16:47:41.475982 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: global request received: hostkeys-00@openssh.com false
I, [2015-12-09T16:47:41.476155 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_open_confirmation: 0 0 0 32768
I, [2015-12-09T16:47:41.476315 #2196]  INFO -- net.ssh.connection.channel[3fc95e0598b4]: sending channel request "env"
I, [2015-12-09T16:47:41.476555 #2196]  INFO -- net.ssh.connection.channel[3fc95e0598b4]: sending channel request "env"
I, [2015-12-09T16:47:41.476661 #2196]  INFO -- net.ssh.connection.channel[3fc95e0598b4]: sending channel request "env"
I, [2015-12-09T16:47:41.476780 #2196]  INFO -- net.ssh.connection.channel[3fc95e0598b4]: sending channel request "exec"
I, [2015-12-09T16:47:41.477764 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_window_adjust: 0 +2097152
I, [2015-12-09T16:47:41.477858 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_success: 0
I, [2015-12-09T16:47:41.483285 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_data: 0 14b
I, [2015-12-09T16:47:41.483428 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_eof: 0
I, [2015-12-09T16:47:41.483564 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_request: 0 exit-status false
I, [2015-12-09T16:47:41.483677 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: channel_close: 0
I, [2015-12-09T16:47:41.483840 #2196]  INFO -- net.ssh.connection.session[3fc95e059b84]: closing remaining channels (0 open)
```

## 参考情報

- https://net-ssh.github.io/ssh/v2/api/classes/Net/SSH.html
最速Rubyインストール using rbenv on Ubuntu Desktop

よくわからないけど、とりあえず最短でRubyをインストールして使いたい人へ。せめて複数バージョンのRubyを切り替えられるように設定します。

```bash
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source .bashrc
type rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev # install necessary packages
rbenv install -l # lists available ruby versions 
rbenv install 2.2.3
```

ある程度慣れ親しんでいる人は、以下を参考にするのが間違いないです。

- [rbenv/rbenv](https://github.com/rbenv/rbenv)
- [rbenv/ruby-build](https://github.com/rbenv/ruby-build)

※ ちなみに、CentOS系の場合は `.bashrc`を`.bash_profile`に置き換えればOK
C++builder::TStringGridのフォントを簡単に変更する。

C++BuilderのFireMonkeyでTStringGridのフォントを手っ取り早く変更。

````cpp:test.cpp
//サイズ変更
StringGrid1->TextSettings->Font->Size = 50;
StringGrid1->StyledSettings =
	StringGrid1->StyledSettings >> TStyledSetting::Size;

````

ついでに他の変更とかのメモ

````
StringGrid1->Columns[0]->Width = 200;
StringGrid1->Columns[0]->Header = L"TimeStamp";
````
マルチ解像度対応 dimens.xmlの格納場所

[「マルチ解像度対応 Drawableリソースの設置場所」](http://qiita.com/a_nishimura/items/80e230f4a4f5ddb13d0b)でも記載していますが、対応端末によって値を自動的に読み込んでくれる機能がAndroidにあります。
過去の情報ですが、古いプロジェクトによく見かけるので、何か役に立つかもと考え投稿します。

今回はdimens.xmlの格納場所です。
※随時、更新予定

こちらが参考になりました（ほぼコピーです）
http://d.hatena.ne.jp/kimukou_26/20121103/1351904136


#対応端末別 格納場所
| dimens.xml格納位置 | 端末種別                                      |
|--------------------|----------------------------------------------
| values             | 普通の端末                                    |
| values-large       | GALAXY Note                                   |
| values-xlarge      | Xoom                                          |
| values-sw360dp     | GalaxyS3,Galaxy Nexus,Arrows Z                |
| values-sw600dp     | Nexus7                                        |
| values-sw720dp     | Nexus10、多分Just端末とかもそう(Android4系の) |


※図１
![res_map.png](https://qiita-image-store.s3.amazonaws.com/0/86347/643c6cb4-6c71-44c5-9745-d973289be42c.png)

※図２
![res_dimens.png](https://qiita-image-store.s3.amazonaws.com/0/86347/eed1256a-6a79-99b8-d920-9b3c9cd5d3c7.png)
Go開発向けVim設定

自分用覚え書き程度ですが。

## プラグインを入れる
使うのはvim-goとtagbarの2つ。
vim-goはgoのための色々な機能を提供してくれているので、これだけでもいいんだけどタグ表示もしたいのでtagbarも入れる。

* [fatih/vim-go](https://github.com/fatih/vim-go)
* [majutsushi/tagbar](https://github.com/majutsushi/tagbar)

これはおなじみのNeobundleのお世話になって

```
NeoBundle 'majutsushi/tagbar.git'
NeoBundle 'fatih/vim-go.git'
```

## vim-goの設定
vim-goをインストールしたら

```
:GoInstallBinaries
```
としてあげると諸々入る。
個人的によく使うのは

* :GoRun
* :GoBuild
* :GoImport
* :GoImplements
* :GoDoc
* :GoTest

あたり。:GoFmtは保存するときに自動的に実行されるからあんまり気にしない。
よくつかうのはキーマップに割り当ててあげる。

```
autocmd FileType go nmap <Space>gr <Plug>(go-run)
autocmd FileType go nmap <Space>gb <Plug>(go-build)
autocmd FileType go nmap <Space>gt <Plug>(go-test)
autocmd FileType go nmap <Space>gc <Plug>(go-coverage)
autocmd FileType go nmap <Space>gd <Plug>(go-doc)
autocmd FileType go nmap <Space>gi <Plug>(go-import)
autocmd FileType go nmap <Space>gm <Plug>(go-implements)
```

あとはハイライトの設定で

```
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_functions = 1
let g:go_highlight_build_constraints = 1
```

## タブ設定
goはハードタブを使うのがマナーらしいので

```
autocmd FileType go setlocal noexpandtab
autocmd FileType go setlocal tabstop=4
autocmd FileType go setlocal shiftwidth=4
```

## Tagbarの設定
tagbarはtagの一覧を表示してくれるプラグイン。
vim-goがtagbarサポートも持っているので、特に固有設定しなくてよかったはず。

```
let g:tagbar_left = 0
let g:tagbar_autofocus = 1
```
としておくと、Tagbarを開くときに一覧が画面右側に表示されて、自動的にフォーカスがそちらに移るようになる。
タグ一覧が折りたたまれているときはoで開閉できる。
tagbarの表示/非表示切り替えは

```
:TagbarToggle
```
で出来るのでキーマップを割り当てておくのがいいかと。
【Android・Java】地図 ２点間距離を測定する方法

地図上の２点間で距離を測定する方法があります。
Androidアプリを作成している際、距離を測定する方法が２つあったので忘れないうちに投稿します。

#Location.distanceBetweenメソッドを使用する方法
AndroidにはLocationクラスがデフォルトでインポートされています。
このLocationクラスにある#distanceBetweenメソッドで２点間距離を測定できます。

###実装方法
```java:LocationToolSample
public class LocationToolSample extends Activity {
    double latitude1 = [拠点１の緯度]
    double longitude1 = [拠点１の経度]
    double latitude2 = [拠点２の緯度]
    double longitude2 = [拠点２の経度]

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        float[] distance =
            getDistance(latitude1, longitude1, latitude2, longitude2);

        distance[0] = [２点間の距離]
        distance[1] = [始点から見た方位角]
        distance[2] = [終点から見た方位角]
    }

    /*
     * 2点間の距離（メートル）、方位角（始点、終点）を取得
     * ※配列で返す[距離、始点から見た方位角、終点から見た方位角]
     */
    public float[] getDistance(double x, double y, double x2, double y2) {
        // 結果を格納するための配列を生成
        float[] results = new float[3];

        // 距離計算
        Location.distanceBetween(x, y, x2, y2, results);

        return results;
    }
}
```
getDistanceの返り値で[距離]、[始点から見た方位角]、[終点から見た方位角]が取得できます。<br/>
#距離測の計算方法を使用する方法
distanceBetweenと同じく、２点間の緯度経度を使用した方法ですが、距離を測る演算を行う方法です。
###実装方法
```java:LocationToolSample
public class LocationToolSample extends Activity {

    double latitude1 = [拠点１の緯度]
    double longitude1 = [拠点１の経度]
    double latitude2 = [拠点２の緯度]
    double longitude2 = [拠点２の経度]

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        double distance =
            getDistance(latitude1, longitude1, latitude2, longitude2, "K");

        distance = [２点間の距離]
        
    }

    /*
     * 2点間の距離を取得
     * 第五引数に設定するキー（unit）で単位別で取得できる
     */
    private double getDistance(double lat1, double lon1, double lat2, double lon2, char unit) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) +  Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        double miles = dist * 60 * 1.1515;
        switch (unit) {
            case 'K': // キロメートル
                return (miles * 1.609344);
            case 'N': // ノット
                return (miles * 0.8684);
            case 'M': // マイル
            default:
                return miles;
        }
    }

    private double rad2deg(double radian) {
        return radian * (180f / Math.PI);
    }

    public double deg2rad(double degrees) {
        return degrees * (Math.PI / 180f);
    }
}
```
>
[#参考にしたサイト](http://perota.sakura.ne.jp/blog/android%E3%81%A7%E3%82%82%E7%B7%AF%E5%BA%A6%E7%B5%8C%E5%BA%A6%E3%81%A72%E7%82%B9%E9%96%93%E3%81%AE%E8%B7%9D%E9%9B%A2%E3%82%92%E5%8F%96%E5%BE%97/)

#まとめ
２つの方法がありますが、アプリによりどちらが使いやすいか検討してください。
“Fatal error: Class ‘DOMDocument’ not found”

概要
---
apacheで動いているWEBサーバーの保守契約終了のため新サーバーへ移行中
折角だからnginxにしてみたところ、動作しないコンテンツが出てきたので
調査したところ、あるPHPファイル内でXMLを読み取り処理する関数があり
このメッセージが出ていた。

表面的なメッセージは500 Internal Server Errorが表示されていたので
Chromeのデベロッパーツールで詳しく確認した。

原因
---
php-xmlのインストール忘れ

対応
---
CentOS6にremi リポジトリを追加してphp-5.6をインストールしているので
`yum install --enablerepo=remi php-xml`
でインストールする。

自分の環境ではなぜかBaseリポジトリが参照されてしまうので
一旦リポジトリ参照をクリアした後、remiを見るように
`yum install --disablerepo=* --enablerepo=remi-php56 install php-xml`
でインストールした。
vmware > ホストとゲスト間のコピーができない > vmxファイルの書き直し > isolation.tools.copy.disable = "FALSE"などをファイルの最終行に持っていく

```txt:動作確認
VMware Workstation 11.0.0 build-2305329
```

## 症状

http://qiita.com/7of9/items/114d27254098f297a58a
でも書いた症状の「ホストとゲスト間のコピーができない」が再発した。

気づいた症状として

- ホストからゲストへのコピーは可能
- ゲストからホストへのコピーは不可能 (ゲストの枠を出ることができない)


## 対応

vmware toolsを入れなおしてもダメだった。

なんとはなしに、.vmxファイルの以下の行をファイルの最後尾に持っていくと直った。

```xxx.vmx
...
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
```

vmwareの設定が変わって、.vmxの中での上記の行の位置が相対的に上になった時にコピーができないようになっている感じがする。

下の方の処理で上記の設定が無効にされてしまっている感じ。

<hr>

## 再現と対応 (2015/12/28)

上記の現象が再現した。

再現前にしたこと

- シリアルポートの追加

シリアルポートを追加したことにより、.vmxファイル内のisolation.XXXの行が相対的に上になり、失敗するようになった。

上記と同じように対応して、問題が解決することを確認した。

## 再現 (2016/02/04)

再現した。そして、上記の2行を最後に持ってきたら症状はなくなった。

再現した時の状況と修正後のvmxファイルは以下。

```txt:コピーできない
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
usb:0.present = "TRUE"
usb:0.deviceType = "hid"
usb:0.port = "0"
usb:0.parent = "-1"
```

```txt:コピーできる
usb:0.present = "TRUE"
usb:0.deviceType = "hid"
usb:0.port = "0"
usb:0.parent = "-1"
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
```

## メモ (2017/05/16)

USBメモリの抜き差しにより.vmxファイルの最後尾が書き換えられるようだ。
USBメモリを抜き差しするVMイメージを限定することで、問題の局所化はできそうだが、根本解決ではない。