OmniAICreator/Qiita-1.07M huggingface dataset:
veuify + browserify

http://qiita.com/ayasuda/items/92221229e8f8c65c6f7c のページを見ながら作業して見たら、そのままでは動かなかったので色々調べて見た

# 作業手順

1. 新規ディレクトリ作成（＋git init）
2. npm init
3. npmでvueとbrwoserifyをインストールする

    ```
npm install --save vue
npm install --save-dev browserify
```

4. package.json編集

    ```js:package.json
  "browser": {
    "vue": "vue/dist/vue.common.js"
  }
```
を追加する
第1のトラップ：http://kitak.hatenablog.jp/entry/2016/12/12/140500
および https://jp.vuejs.org/v2/guide/installation.html#ランタイム-コンパイラとランタイム限定の違い

6. main.js, index.html作成

    ```js:main.js
var Vue = require('vue')
new Vue({
  el: '#app',
  data: {
    message: 'Hello,Vue.js!'
  }
})
```

    ```html:index.html
<html>
  <head>
    <title>Hello, World.</title>
  </head>
  <body>
    <div id="app">
      {{ message }}
    </div>
  </body>
  <script type="text/javascript" src="./bundle.js"></script>
</html>
```

7. ```./node_modules/.bin/browserify main.js -o bundle.js```
8. index.html確認

ここまでで「http://qiita.com/ayasuda/items/92221229e8f8c65c6f7c#browserify-を用いscript-タグを１つにする 」までに対応

gulpは特に必須ではないので無視。Babelは必要

1. Babelのインストール

    ```
npm install --save-dev babelify babel-preset-es2015 babel-plugin-transform-runtime
```
第2のトラップ：babelにbabel-plugin-transform-runtimeも必要
2. package.json編集
3. vueifyインストール
```npm install --save-dev vueify```
4. ファイル作成、components/message.vue, main2.js, index2.html作成
main2.jsは先方のmain.jsのまま。components/message.vueもそのまま。

    ```html:index2.html
<html>
  <head>
    <title>Hello, World.</title>
  </head>
  <body>
    <div id="app">
      <my-message></my-message>
    </div>
  </body>
  <script type="text/javascript" src="./bundle2.js"></script>
</html>
```
第3のトラップ：index2.htmlに bundle を読み込む行を入れておくこと。
5. vueify
```./node_modules/.bin/browserify -t vueify main2.js -o bundle2.js```
第4のトラップ：brwoserifyにオプションが必要
6. index2.html確認
gitとsshのconfigについて(備忘録)

自分のgitとsshの鍵管理や設定を書き留めておきます．参考になるかわかりませんが．．．笑

#鍵作成
他のサイトにたくさん書いてる

```
$ ssh-keygen -t rsa
```

#.ssh/configについて
sshの公開鍵と秘密鍵はそれぞれで作っています(管理しやすいかなと思いまして)．それぞれのディレクトリに公開鍵と秘密鍵が格納されている感じです．

```~/.ssh
ls -l | grep ^d
drwxr-xr-x 4 hogehoge staff  136  7  7 21:32 bitbucket
drwx------ 4 hogehoge staff  136  4 28 19:54 gitbucket
drwxr-xr-x 4 hogehoge staff  136  7  7 21:33 github
drwxr-xr-x 5 hogehoge staff  170  7  6 14:21 myserver
```

以下が~/.ssh/configの中身(一部だけ)

```~/.ssh/config
Host Myserver 
	HostName  (適当なIPアドレス or FQDN)
 	Port 22(設定したやつ)
 	IdentityFile ~/.ssh/myserver/id_rsa
	User hogehoge

Host BitBucket
	HostName bitbucket.org(絶対これ)
	IdentityFile ~/.ssh/bitbucket/id_rsa
	TCPKeepAlive yes
	IdentitiesOnly yes
	User git(任意)

Host GitHub
	HostName github.com(絶対これ)
	IdentityFile ~/.ssh/github/id_rsa
	TCPKeepAlive yes
	IdentitiesOnly yes
	User git(絶対これ)
```

GitHubのUserは必ず**git**じゃないとうまくいかなかったです．BitBucketは任意でもいけたが，GitHubと揃える形でgitにしました．

#.git/configについて
GitHubバージョン

```リポジトリ名/.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	logallrefupdates = true
	precomposeunicode = true
[remote "origin"]
	url = GitHub:(ユーザ名)/(リポジトリ名).git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
	rebase = false
```

BitBucketバージョン

```リポジトリ名/.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	logallrefupdates = true
	precomposeunicode = true
[remote "origin"]
	url = BitBucket:(ユーザ名)/(リポジトリ名).git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
	rebase = false
```

urlの部分が違うだけです．"GitHub"や"Bitbucket"は.ssh/configで設定したHostと同じものにします．ユーザ名はそれぞれのサービスのユーザ名にします．(**.ssh/configのUserではありません！**)
Prism入門(2)

かずきさんのページを参考にPrismの勉強をしたので自分用のメモ
http://blog.okazuki.jp/entry/2014/04/27/025056
環境：Visual Studio 2017 Community

##Prismのインストール
NuGetでPrism5.0.0をインストール

##ViewModelの作成
「ViewModels」フォルダを作成し、その下に「ViewModelBase」クラスを作成。
「ValidationContext」「ValidationResult」「Validator」が見つからないとエラーになるので、「System.ComponentModel.DataAnnotations」の外部参照を追加する。
エラーが解消されたことを確認し、「MainWindowViewModel」クラスを追加する。

##Viewの作成
「Views」フォルダを作成し、その下に「MainWindow.xaml」ファイルを移動する。
「名前 "Interaction" は名前空間 "http://schemas.microsoft.com/expression/2010/interactivity" に存在しません。」とコンパイルに失敗するので、NuGetで「Expression.Interaction」をインストールする。(現時点の安定バージョンは3.0.40218)

##実行
実行するとSystem.IO.IOExceptionで、mainwindow.xamlを検索できないとなるので、App.xamlのStartupUriを"Views/MainWindow.xaml"に修正する。

##メモ
ViewとViewModelのバインドは「Viewの名前+ViewModel」という命名規則で行っている。
PopupWindowActionの「CenterOverAssociatedObject」プロパティをtrueで画面中央に、「IsModal」プロパティをtrueで、モーダルにできる。
Prism入門(1)

#Prismインストール
```bat:パッケージマネージャーコンソール
PM> Install-Package Prism
```
#ViewModel

##クラスの作成
BindableBaseを継承する。

```cs:sample.cs
class CalcViewModel :BindableBase
{
}
```

##プロパティ



```csharp:sample.cs
        private string _leftValue;
        public string LeftValue
        {
            get { return _leftValue; }
            set { this.SetProperty(ref this._leftValue, value); }
        }
```

##コマンド

using Microsoft.Practices.Prism.Commands;

```csharp:sample.cs
        private ICommand calcCommand;
        public ICommand CalcCommand
        {
            get { return this.calcCommand ?? (this.calcCommand = new DelegateCommand(CalcExecute, CanCalcExecute)); }
        }

        private bool CanCalcExecute()
        {
            return true;
        }

        private void CalcExecute()
        {
            // ロジックを書く
        }
```

コマンドの実行可否が変わったことを通知するには、DelegateCommandクラスのRaiseCanExecuteChangedメソッドを呼ぶ必要がある。
Prism6だとObservesPropertyメソッドが用意されている。

```csharp
            get { return this.calcCommand ?? (this.calcCommand = new DelegateCommand(CalcExecute, CanCalcExecute)
                    .ObservesProperty(() => this.FOO)
                    .ObservesProperty(() => this.BAR)); }
```
[実践編]HoloLens上でクラウド上を使いたい

HoloLensアプリ開発に向けての記事をずっと書いていますが。久しぶりにHoloLensに直接関係する記事です。

#前提

Microsoft Azure上のデータをホロレンズで拾う
別記事([UnityでWWWを使って画像・テキスト・動画ファイルを読み込む](http://qiita.com/gshirato/items/8fb10f768d0ba2c2e365))内でEditor上で行っていたことをHoloLens上でも行いたい。

##Version

- Unity: 5.6.1f1 Personal
- HoloLens:
 - Version:Windows Holographic OS:10.0.14393.1358

#Problématique
- HoloLens上でWWWクラスを使えない。(定番の実機では動かない)
- UnityWebRequestとやらで試すがエラー吐。

`Cannot resolve destination host`(写真のエラーと異なります。後述。)
![20170707_051437_HoloLens.jpeg](https://qiita-image-store.s3.amazonaws.com/0/186209/398a7491-e3a7-a459-4325-3e6140ab455d.jpeg)

#灯台もと暗し
PlayerSetting -> Publishing Settings -> `InternetClient `もしくは`InternetClientServer`にチェック。

それぞれの役割を明確にわかっていないため念のため両方にチェックしましたが、現在までのところはどちらか一つで十分な模様。

InternetClientについての詳細は[Capability (Windows Dev Center)](https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/appxmanifestschema/element-capability)

なお`privateNetworkClientServer`だけをチェックすると上の画像のエラー`Cannot connect to destination host`が表示されます。

#結果
~~すばらしい~~
結果、WWWクラスは正常に使え、UnityWebRequestにお世話になるのはまた先の話になりそう。

#HoloLensアプリ開発記事一覧
[こちら](http://qiita.com/gshirato/items/6c026f2c67dc332f829b)から
localstackのS3にgolangからファイルをアップロードしてみる


AWSのサービスをdocker上でなんとなく動かすという、[localstack/localstack](https://github.com/localstack/localstack)。S3にファイルアップロードの際に、設定が少し必要でした。

```go
	s := session.Must(session.NewSession(&aws.Config{
		Credentials:      credentials.NewStaticCredentials("foo", "var", ""),
		S3ForcePathStyle: aws.Bool(true),     // ここ
		Region:           aws.String(endpoints.UsWest2RegionID),
		Endpoint:         aws.String("http://localhost:4572"), // ここ
	}))
```

いかにdocker上で動くものをアップしています。

https://github.com/ushios/go-localstack-sample/blob/master/s3.go
python のデフォルト引数の罠

# 要約
- デフォルト引数は関数定義時に一度だけ評価される
- 同じインスタンスが使われてしまうため注意が必要


# 罠
デフォルト引数に参照系の値を渡すのには罠があるという話です。

```py3
def hoge(lst=[]):
    lst.append('hoge')
    print(lst)

hoge()
hoge()
```

lst はデフォルトで空配列なので、 `['hoge']` が2回表示されると思いますよね。

```py3:実行結果
['hoge']
['hoge', 'hoge']
```
二度目は hoge が２つきます。

# 理由
先程のコードを少し変えてこうしてみます。

```py3
def called():
    print('called!')
    return []

def hoge(lst=called()):
    lst.append('hoge')
    print(lst)

hoge()
hoge()
```

結果はこうなります。

```py3:実行結果
called!
['hoge']
['hoge', 'hoge']
```
ちなみに hoge() しなくても called は表示されます。

つまり、デフォルト引数の値は関数定義時に一度だけ呼ばれ生成され、関数呼出し時には既に生成された値を使いまわしているようです。

上のように、「`[]` をデフォルト引数に与えており、引数指定をしなかったすべての関数呼び出しでリストのインスタンスが共有されてしまう」というパターンはよくありそうな気がします。

常識だったらすみません。
学生必見！チーム開発する前にやるべき！コーディング規約！

こんにちは。新卒1年目のuekiです。
今回は学生時代にチーム開発を始める前にやっておけば良かったなと感じた、
**コーディング規約**について弊社の規約を一部紹介します。
学生の皆さんには是非一度目を通していただき、チーム開発する前に再度見直してもらえたらと思います。

# コーディング規約とは
プログラムの書き方を統一するためのルールです。

# コーディング規約を作る目的、メリット・デメリット
これらのサイトに書いてます。

[コーディング規約](http://www.geocities.jp/bleis_tift/cpp/codingrule.html)
[ベストなコーディング規約の作り方](http://qiita.com/tadnakam/items/5d1280559eb75b29847c)

以下引用です。

>ソースコードに統一性が出て可読性が高まる。
>バグの発生源となりやすいコーディングを防止することで保守性が高まる。

# コーディング規約例
ここで弊社のコーディング規約を一部紹介します。
これらがベストな規約とは限らないので、自分たちのチームに合うよう調整してみてください。

## スペースの開け方、改行
```
if ($a == 1) {
} elseif ($b == 1) {
}
// 括弧の前後にスペース、比較演算子の前後にもスペース、ifと開始中括弧は同一行で。

for ($i　= 1; $i < 9; ++$i) {
}
// for文の場合は、セミコロンの後に空白
// $i++より++$iの方が処理スピードが速い

function hoge($val)
{
  $val *= $val;

  return $val;
}
// returnの前には改行をいれる
```

## 一行の文字数が長くなりすぎる場合は適宜折り返しましょう(目安120文字くらい)
```
× $voiceQuery = TUserEnqueteResultsTable::getInstance()->createQuery('tuer')->where('tuer.decided_cooperation_id = ?', $coopId)->andWhere('tuer.show_type = ?', 1)->andWhere('tuer.show_site_code = ?', 'hikkoshizamurai')->orderBy('tuer.release_date DESC, tuer.show_dateDESC')->limit(1);


○ $voiceQuery = TUserEnqueteResultsTable::getInstance()
                ->createQuery('tuer')
                ->where('tuer.decided_cooperation_id = ?', $coopId)
                ->andWhere('tuer.show_type = ?', 1)
                ->andWhere('tuer.show_site_code = ?', 'hikkoshizamurai')
                ->orderBy('tuer.release_date DESC, tuer.show_dateDESC')
                ->limit(1);
```

## インデントはスペース2つとする
```
// ○ スペース2つ
function hoge($val)
{
  $val = $val * 2;

  return $val;
}

// × スペース4つ (自分たちのチームに合った方を選択してください。
function hoge($val)
{
    $val = $val * 2;

    return $val;
}

```

## 変数名は最初小文字で、接続する単語の先頭は大文字(キャメルケース)
```
$variableName
```

## 定数名は全て大文字で、接続する単語の先頭に_(アンダーバー)を付ける
```
CONSTANT_NAME
```

## 中カッコなしのifやforは使わない(処理追加時のカッコ足し忘れ防止)
```
× if ($a == "abc") $b = 0;

○ if ($a == "abc") { $b = 0; }

○
if ($a == "abc") {
  $b = 0;  
}
```

# 最後に
各プログラミング言語やフレームワークのドキュメントにコーディング規約が載っていたりするので、参考にしてみてください。

## PHP
[Basic Coding Standard](http://www.php-fig.org/psr/psr-1/)
[Coding Style Guide](http://www.php-fig.org/psr/psr-2/)
[Symfony](https://code.google.com/archive/p/symfony-doc-ja/wikis/CodingStandards.wiki)

## Ruby
[Ruby](https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)
[Rails](https://github.com/satour/rails-style-guide/blob/master/README-jaJA.md)
spring-testのトランザクション下にSpring Batchのテストメソッドを入れる

spring-testでトランザクションを扱う場合は基本的にテストメソッド後にロールバックされる。ただし、Spring Batchを使うテストメソッドの場合には実行時エラーになる。この原因は後で少し触れるが、Spring Batchの外側で開始したトランザクションを内部で使う場合、Spring Batchの知らないところでコミットやロールバックをされるとバッチの状態管理がおかしくなる可能性があるから、のだと思われる。

とはいえ、このSpring Batchの挙動はspring-testで動かす場合には邪魔になる。これを手っ取り早く解消するには以下のようにする。

```java
MapJobRepositoryFactoryBean b = new MapJobRepositoryFactoryBean();
b.setValidateTransactionState(false);
```

setValidateTransactionStateにfalseを設定することで上述のトランザクション存在チェックが行われなくなる。なお、同メソッドのjavadocには以下の記述がある。

```java
	 * Flag to determine whether to check for an existing transaction when a
	 * JobExecution is created. Defaults to true because it is usually a
	 * mistake, and leads to problems with restartability and also to deadlocks
	 * in multi-threaded steps.
```

Spring Batch外側のトランザクションを使うのは基本的には間違いで、restartabilityに支障が出る可能性があり、また、マルチスレッドstepでデッドロックの可能性も生じる。とある。ユニットテストの場合にはあんまし問題にはならない、とは思う。

それはそれとして、DBUnitとかDbSetupで毎回クリアしちゃっても良いかな、とも思う。速度的にはもちろん不利なのだが。
UIViewの任意の角を丸くする

UIViewの４つの角のうち、１つだけ丸めたいことってありませんか？
私はあります。
そんなときは以下のようにUIViewを拡張しましょう。

```
extension UIView {
    func round(corners: UIRectCorner = [], cornerRadii: CGSize = CGSize(width: 3.0, height: 3.0)) {
        let maskPath = UIBezierPath(
            roundedRect: bounds,
            byRoundingCorners: corners,
            cornerRadii: cornerRadii
        )
        let maskLayer = CAShapeLayer()
        maskLayer.frame = bounds
        maskLayer.path = maskPath.cgPath
        layer.mask = maskLayer
    }
}
```

例えば、左上を丸めたい場合はこのように使用します。

```
topLeftRoundedView.round(corners: [.topLeft], cornerRadii: CGSize(width: 4, height: 4))
```

地味に便利です。
AWS 特定操作可能なIAMユーザのポリシー定義

AWSでIAMユーザを作成後、特定操作のみさせたいといった権限要件がよくあります。
例えば、
・EC2インスタンス画面のみ表示可能であること。
・特定EC2インスタンスのみ”開始”・”停止”・”再起動”操作が可能であること。
・RDSインスタンス画面のみ表示可能であること。
・特定RDSインスタンスのみ”開始”・”停止”・”再起動”操作が可能であること。
※2017年6月からRDSも開始、停止が可能になったそうです。
http://dev.classmethod.jp/cloud/aws/start-stop-db-instance-for-rds/

実現方法として、インラインポリシー設定で次のコードを記述します。
※すでにIAMユーザは作成されているとする
[参考：Amazon RDS でアイデンティティベースのポリシー (IAM ポリシー) を使用する](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.AccessControl.IdentityBased.html)

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid":"AllowDisplayInstancesList",
            "Effect": "Allow"
            "Action": [
                "rds:DescribeDBInstances",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": [
                "*"
            ],
        },
        {
            "Sid":"Allow test EC2 InstancesStartAndSotp",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/project": "test"
                }
            },
            "Resource": [
                "*"
            ]
        },
        {
            "Sid":"AllowMySqlInstancesStartAndSotp",
            "Effect": "Allow",
            "Action": [
                "rds:StartDBInstance",
                "rds:StopDBInstance",
                "rds:RebootDBInstance"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine":"mysql",
                    "rds:DatabaseClass":"db.t2.micro"
                }
            },
            "Resource": [
                "*"
            ]
        }
    ]
}
```
インスタンスの表示と制御（開始、停止）は別々のActionで記載する必要があります。
かつActionがDescribe*の場合、Conditionが効かないので要注意。

RDSはつい最近開始、停止を制御できたので、
Policy Generatorでポリシーを作成する際に、「アクセス許可の編集」ページで、
アクションの選択に、StartDBInstance、StopDBInstanceがなく、直接編集で入力しかないです。

サマリ表示のところも注意マークがついています。
![iampolicy1.jpg](https://qiita-image-store.s3.amazonaws.com/0/191079/e85a62a2-480a-8e68-4e0a-81cf45df95e5.jpeg)
展開しますと
![iampolicy2.jpg](https://qiita-image-store.s3.amazonaws.com/0/191079/7c0b04de-138a-bcac-3b65-c89267b62569.jpeg)
chrome extensionでワンクリックでおしゃれな音楽が流れるボタンを作りました

こんにちは、エイチーム引越し侍の中川です。
chromeのextensionでおしゃれな音楽がワンクリックで流れるボタンを作成しました。

# chrome extensionを作るのは簡単！
[chrome extension 開発]
・・・とかでググると関連記事がたくさん出てきます。
html,js,cssできる人ならほんとに、数分でできます。


# 制作物
ワンクリックでおしゃれな音楽が流れだすボタンを作りました。

## おしゃれな音楽の手配
おしゃれといったら、ボサノバでしょう。知らんけど。
というわけでyoutubeで「ボサノバ」と検索して出てきた動画のURLをコピー。
https://youtu.be/3MKPVEO0MvQ

## manifest.json

```json
{
    "manifest_version": 2,
    "name": "bosa-player",
    "description": "ワンクリックでおしゃれなボサノバが流れます",
    "version": "0.1",

    "browser_action": {
        "default_icon": "icon.png",
        "default_title": "bosa-player",
        "default_popup": "popup.html"
    },
	"background": {
    "scripts": [
      "jquery.js",
   ]
   }
}
```
あ、jquery入れてるけど結局使わなかった。jsでなんか書きたいときは、
上記scriptsの中に書けば実行されます。
iconは取り急ぎ、Youtubeのアイコンぽいものをマウスで書きました(笑)
これ→![icon.png](https://qiita-image-store.s3.amazonaws.com/0/101405/15fc9914-3d60-c297-a487-f8f52ae3ae58.png)


# ボタンを押したときに開くhtml
```html
<!DOCTYPE html>
<html lang="ja">
<head>

<meta charset="utf-8">

</head>
<body style='width:100px;'>
  <iframe id="ytplayer" type="text/html" width="100" height="80"
  src="http://www.youtube.com/embed/3MKPVEO0MvQ?autoplay=1&origin=http://example.com"
  frameborder="0"/>
  
  https://www.youtube.com/watch?v=3MKPVEO0MvQ
  
    https://youtu.be/3MKPVEO0MvQ
</body>
</html>
```
manifestで定義したpopup.htmlという名前で保存します。
youtubeをiframeで再生します。
公式に説明があります。
https://developers.google.com/youtube/player_parameters?hl=ja
autoplay=1にして、押したら再生されるようにしましょう
サイズは小さめがおしゃれかなと思って100 x 80 としました

# 検証
chrome://extensions/
にアクセスして、いざ登録！！
思惑どおり、ボタンを押したらボサノバが流れ始めました！

![text3009 - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/101405/1ac3037f-5790-9f74-c4c3-2fc2d848021b.png)

あとはランダム再生にするなり、お気に入りのリストを流すなり、
いい感じにカスタマイズできればと思います。
AmazonLinuxにyarnをインストールする

## 環境

インストール直後のAmazonLinuxを想定しています。

```bash
$ cat /etc/system-release
Amazon Linux AMI release 2017.03
```

## インストール

レポジトリを取得する必要があるのでwgetをインストール

```bash
$ yum -y install wget
```

yumのyarnレポジトリ追加

```bash
$ wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
```

rpmのnodeのレポジトリ追加

```bash
$ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
```

インストール

```bash
$ yum install yarn
```

## 確認

```bash
$ yarn --version
0.27.5
```
Plesk12.0 で複数バージョンの PHP を共存させる

#概要
PHP の任意のバージョンを同一サーバ上に Yum でインストールし、Plesk にてウェブサイトごとに任意のバージョンを選択する。
#インストール
##作業環境
CentOS 6.2
Plesk 12.0

Plesk の稼働しているサーバに SSH で接続し作業を行います。

##Remi リポジトリのインストールと有効化
```bash
yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install yum-utils
yum-config-manager --enable remi
```

##PHP のインストール
```bash
for v in 54 55 ; do yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd} ; done
for v in 54 55 ; do yum -y install php$v-php-pecl-{apc,memcached} ; done
```
PHP 5.4 と PHP 5.5 をまとめてインストールします。

##PHP を Plesk に登録する
```bash
/usr/local/psa/bin/php_handler --add -displayname 5.4 -path /usr/bin/php54-cgi -phpini /opt/remi/php54/root/etc/php.ini -type fastcgi -id php54-custom
/usr/local/psa/bin/php_handler --add -displayname 5.5 -path /usr/bin/php55-cgi -phpini /opt/remi/php55/root/etc/php.ini -type fastcgi -id php55-custom
```
「Plesk 12.0 管理者ガイド」を参考に Plesk に PHP ハンドラを登録する。

**-displayname** Plesk UI で表示される PHP バージョン名です
**-path** PHP CGI バイナリファイルの格納場所です
```# which php54-cgi
/usr/bin/php54-cgi```
**-phpini** php.ini ファイルの場所です
```# php54 --ini | grep Loaded
Loaded Configuration File: /opt/remi/php54/root/etc/php.ini```
**-type** fastcgi / cgi このバージョンに関連付けられている PHP ハンドラのタイプ
**-id** この PHP バージョンを調整または削除する場合の参照用の識別子（オプション）

#Plesk の設定
Plesk にログインし「ウェブサイトとドメイン -> ホスティング設定」の PHP バージョンで追加したバージョンが選択できるようになります。

#参考リンク
[Yum で複数バージョンの PHP を共存させる](http://qiita.com/bezeklik/items/860ba080bf4c664cd8e9)
[Plesk 12.0 管理者ガイド -複数の PHP バージョン-](http://download1.parallels.com/Plesk/PP12/12.0/Doc/ja-JP/online/plesk-administrator-guide/index.htm?fileName=70742.htm)
Emacsのキーバインドを自分流に変更しようとしたら少しだけハマった話。

# 要約
Emacsのキーバインドを、次のように変更したらすごい便利になったよ！

- C-z    : ウィンドウ切り替え(other-window)
- C-c c  : コンパイル(compile)
- C-c x  : quickrunでスクリプト実行(quickrun)
- M-RET  : helm-mini

# 環境

- Emacs 24.5.1
- helmとquickrun.elはインストール済みという前提

# やったこと
.emacsとか.emacs.d/init.elとかに次を追記してEmacsを再起動。

```:.emacs
;;;;;;;;;;;;;;;;;;;;;;;; key-bind settings ;;;;;;;;;;;;;;;;;
;; Execute script
(define-key global-map (kbd "C-c x") 'quickrun)

;; Compile
(define-key global-map (kbd "C-c c") 'compile)

;; move window by C-z
(define-key global-map (kbd "C-z") 'other-window)

;; assign helm-mini to C-c h
(define-key global-map (kbd "M-RET") 'helm-mini)

```

ちなみにキーバインドの設定弄った場合、設定ファイルのバッファを再読み込みするだけじゃ上手く行かないこともあるので、筆者は大人しく再起動してます。

# え、それのどこにハマる要素あんの？
実は最初、helm-miniをCtrl-m（デフォルトでは改行）に割り当てようとしたのだが、それをやると何故かEnterでhelm-miniが開くように(´・ω・｀)

色々ググった結果、以下の記事
http://qiita.com/blue0513/items/c49b17790367790fdd7c
にて
>Keys to Avoidの文字．
>(中略)
>>【Ctrl+m】 or Enter ↵ (These are tied together.)

>な，なんだってーーーー！！！

という記述を見つけ、「な、なんだってー！！！」と叫んだわけです。
要するに、<b>Ctrl+mとEnterは完全に連動してしまっているので、片方を変えたら必ずもう片方も影響受けちゃう</b>よ、と。

どうやら、ターミナルではCtrl+mは改行なので（知らなかったorz）、Emacsでもそれに合わせてこういう設定になってるらしいです。

# まとめ
Ctrl+mは使わないからって無闇にコマンド割り当てると困ったことになるよ！
気をつけよう！

# 参考記事
http://qiita.com/blue0513/items/c49b17790367790fdd7c
ubuntu16.04にNAOqi2.5用C++SDKを入れた話

久しぶりに環境を整えたのでちょっと書いてみました。
今回はホストPCにWindows 10 Professional, VirutualBox上のゲストOSはunbuntu 16.04 64bitを使用。
なんでubuntuかというと、後でROSとか使いたいので。:-)
最初に書いておきますと想定読者として、
・SDK installation guide程度の英語のtech documentを読み下せる人、もしくは機械翻訳見ながら試せる人。
・Linuxのコマンド叩ける人。
ちょっとハードル高めですが備忘録程度に書いておきます。
解説必要であればコメントいただければ追記します。

#0 Virtual Boxの準備
以下URLからVirtual Boxをダウンロード。
5.0でhyper-Vとの競合があるみたいですがバージョンは5.1、ホストOSはWindows10 Proを使用。（他の開発環境でhyper-V必要なのでしょうがない）
ダウンロードURL: https://www.virtualbox.org/

#1 ubuntu16.04 isoイメージのダウンロード
最近ではインストーラも日本語対応してるので、本家のisoイメージを使用。
GUIがあるのでubuntu Desktop 16.04LTSをダウンロード。
ちなみにLTSはLong Term Supportの略で、サポート期間が長いので一度環境設定してほったらかしててもちょっと安心。
ダウンロードURL: https://www.ubuntu.com/download/desktop

#2 CrossToolChainとC++SDKのダウンロード
以下URLの"Other SDK and utilities - C++ - 2.5.5(Latest) - Linux"より"Cross Toolchain Linux 64"と"C++ SDK 2.5.5 Linux 64"をダウンロード。
ダウンロードURL： https://developer.softbankrobotics.com/jp-ja/downloads/pepper

#3 Virtualboxへubuntu16.04のインストール
注意点として仮想ドライブの領域は多めに取っておいた方が良いです。
自分はとりあえず20GBにしておきました。
ここで容量を10GB以下とかにすると、インストール後に変なエラーが出てきて空き容量足りなくなったりして再インストールする羽目になったりするので注意。

#4 インストール後の設定
インストール再起動がかかるので、作成したアカウントでログイン。
画面サイズとかお好きなように設定してください。
とりあえず自分がしたのは、
・Amazonのランチャー解除（笑）
・xtermのランチャー登録
・xtermのフォントを設定(CTRL+右クリックでVT-FontsメニューからHugeを選択)

#5 C++SDKのインストール
基本以下のURLのC++ SDK Install Guideに従い進めていきます。
http://doc.aldebaran.com/2-5/dev/cpp/install_guide.html

手順的には
gccのインストール（確認）
cmakeインストール
pythonのインストール（確認）
qibuildインストール
configuration
initialization
Installing and configuring NAOqiSDK
的な流れで。
qibuildのインストール時にpipが必要ですが、
$ sudo apt install python-pip
でpipのインストールもしました。それ以外は書いてある通り。

#6 ビルドの確認
最後にちゃんとビルドできるか確認。
以下のURLの手順でビルド環境を生成し、my_first_exsampleを実行して、コンソール上に"Hello, World"とでればOK。
http://doc.aldebaran.com/2-5/dev/cpp/helloworld_auto.html#cpp-helloworld-auto

#7 最後に
今回NAOqi2.5向けにpython, Java, C++ SDK周りがアップデートされているので、気になる人は試してみてください。
HTTPリクエストヘッダをレスポンスのbodyに埋めて返すだけの簡易モックサーバ

nginxのproxy_passの稼働確認でHTTPリクエストヘッダをレスポンスに埋めて返すだけのちょっとしたモックサーバが欲しくなりました。

簡易HTTPサーバといえば、ただの静的なファイル配信だけならpythonのワンライナーで十分なんだけど、

```bash
$ sudo python -m SimpleHTTPServer 80
```

今回はちょっとHTTPリクエストヘッダをレスポンスのbodyに埋めて返したかったので、簡単なpythonスクリプトを書いてみた。
ちなみになんでpythonなのかというと、多くのLinuxディストリビューションにデフォルトで入ってて標準ライブラリだけで追加の依存モジュールなしでできるという理由からpythonで実装してます。ちなみにpythonは2.7系です。

```bash
$ python --version
Python 2.7.12
```

こんなかんじのスクリプトを `mock_server.py` という名前で作る。

```mock_server.py
#!/usr/bin/env python

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class RequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.wfile.write('%s %s %s\n' % (self.command, self.path, self.request_version))
        self.wfile.write(self.headers)
        self.finish()
        self.connection.close()

port = 80
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
```

80番ポートをリッスンする都合でsudo経由で実行する。

```bash
$ sudo python mock_server.py
```

curlしてみる。

```bash
$ curl -H "Host: hoge.example.com" -H "X-MOCK-PROXY-PASS: hoge.example.com" http://127.0.0.1/hoge
GET /hoge HTTP/1.1
Host: hoge.example.com
User-Agent: curl/7.47.1
Accept: */*
X-MOCK-PROXY-PASS: hoge.example.com
```

これでテストしたいnginxを間に挟んで、curl => nginx => mockサーバみたいな構成にすれば、期待したHTTPヘッダが渡ってきてるか見れるし、適当なヘッダをデバッグ用に埋めたりしたらどのlocationでproxy_passされてるかとか簡単にテストできそうな気がする。
TeamViewer越しにUnityに接続した時にUnityエディタが正しく表示されない

## 起きたこと
低スペックMacから
ハイスペックPC上でUnityを動かせたら幸せなのではと思ったが、

TeamViewerを用いてWindows 10のPCに外部からMacで接続した時、
Unityのエディタ、およびランチャーが真っ白く表示され操作できない。

## 原因
PCに外部ディスプレイが1つも繋がってなかったから。
（PCから離れる時に、画面だけ黒くする方法がわからず、HDMIケーブルを抜いていた。）

Unity側で何かディスプレイ判定後にView生成をしてるのかな。

## 解決
PCにディスプレイを接続した状態で、TeamViewer接続する。
基本ディスプレイは繋ぎっぱなしにしておく。
Cognosレポート実行時間をあと1秒短縮するIISのチューニング

##概要
Cognosレポート実行時間を短縮するための方法は色々とありますが、今回はIIS(Internet Information Service)のチューニングの話です。

IT業界では、1秒を馬鹿にする者は、1秒に泣くと言う格言があります。(※すいません、勝手に作りました)
超レスポンスタイムの要件が厳しい実際のプロジェクトで、散々頑張って実行時間4秒までチューニングできたレポートが、このチューニングのおかげで、さらに1秒短縮できて、実行時間3秒となり、SLAを満たせたという経験もあります。

##内容
IISチューニングのポイントは以下の4点です。

**①コンテンツ圧縮**
とても大事なチューニングポイントです。
IISのCognosの仮想フォルダから、「圧縮」機能で設定できます。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/c345714b-ba97-fbfa-a3d5-9a152fbd0e02.png)

レポート内にHTMLアイテムを配置し、大量のJavaScriptを埋め込んでいる環境で、この圧縮の設定によりレスポンスが改善した事があります。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f954a34a-f177-af6e-9bf6-fedfee790464.png)

**②ISAPIの使用**
Cognosを導入すると、デフォルトでゲートウェイにcognos.cgiが使用されますが、cognosisapi.dllに変更するとパフォーマンス上有利です。

ISAPIへの変更手順は、こちらをご参照下さい。
**Cognos Business Intelligence 10.2.1 インストール手順書**
http://qiita.com/shinyama/items/5a4c1c6e795b256209b2

**③コンテンツ期限の設定**
IISのCognosの仮想フォルダから、「HTTP応答ヘッダー」機能で設定できます。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/1eac6254-5ba6-010e-99c1-ef00c60c203a.png)

期限切れのWebコンテンツをチェックし、期間を指定すると、コンテンツがキャッシュされ、2回目以降再利用されるようになります。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/84f579bf-f358-0749-2f9a-90d2299dd808.png)

**④コネクションタイムアウト**
「Default Web Site」から「制限...」を選択し、接続のタイムアウトを設定できます。
メモリー消費の調整ができます。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/680b8774-bfa0-68b8-57da-834362b8fe0f.png)

##参考情報
チューニングだけじゃなく、IISでCognosをセットアップする場合の構成手順など、色々な情報が載っている、とても良い資料です。
IISでCognosを構成する際は、是非ご一読下さい。
**Configure Microsoft Internet Information Services 7.x for IBM Cognos 10**
https://www.ibm.com/developerworks/data/library/cognos/infrastructure/web_servers/page599.html
名前やメールアドレスを一時的に指定して git commit する方法

```bash
git -c user.name='foobar' -c user.email='foobar@example.com' commit -m '...'
```

* 普段は自動デプロイされるだけのサーバー上でちょろっと修正したいときに便利
* `git commit -c ...` ではなく `git -c ... commit` である点に注意
* 参考: https://stackoverflow.com/questions/22058041/commit-without-setting-user-email-and-user-name
GAE/Goでanacondaを利用した認証

GAE/Goにてanacondaを利用した際にトークンの取得でハマったのでその際のメモ

___

### 使用ライブラリの導入

```
go get "github.com/ChimeraCoder/anaconda"
go get "github.com/garyburd/go-oauth/oauth"
go get "google.golang.org/appengine"
```

importとかはみんな勝手にやってもらってるよね？

___
### 呼び出し元ハンドラ設定

ルーティングやTwitterの設定などは割愛
`consumerKey`,`consumerSecret`は適時自身のものと読み替えてください。

GAEではそのままのhttp clientでは怒られるので
`http.DefaultClient.Transport = &urlfetch.Transport{Context: ctx}`の記述が必要っぽい

```
var credential *oauth.Credentials

func GetRequestTokenHandler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	http.DefaultClient.Transport = &urlfetch.Transport{Context: ctx}

	anaconda.SetConsumerKey("consumerKey")
	anaconda.SetConsumerSecret("consumerSecret")

	url, tmpCred, err := anaconda.AuthorizationURL("GetAccessTokenHandlerが呼ばれるURL")
	if err != nil {
		return
	}
	credential = tmpCred
	http.Redirect(w, r, url, http.StatusFound)
}
```

___

### コールバック先のハンドラ
こちらも`http.DefaultClient.Transport = &urlfetch.Transport{Context: ctx}`を記述を忘れずに

```
func GetAccessTokenHandler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	http.DefaultClient.Transport = &urlfetch.Transport{Context: ctx}

	c, _, err := anaconda.GetCredentials(credential, r.URL.Query().Get("oauth_verifier"))
	if err != nil {
		return
	}
	api := anaconda.NewTwitterApi(c.Token, c.Secret)
	// TEST POST
	api.PostTweet("test tweet", nil)
}

```
Raspberry PiとArduinoと光センサで部屋の照度をツイートしてみた

部屋の明るさををArduinoと光センサを用いて取得し，Raspberry Piから取得した情報をツイートするシステムの作成方法を説明します．

コードはGitHubに掲載しました．
[https://github.com/Choke222/Arduino_RaspberrPi](https://github.com/Choke222/Arduino_RaspberrPi)

# 必要なもの

- Raspberry Pi
- Arduino
- CdS素子
- 抵抗(10kΩ)
- Twitterアカウント

# 準備

- Twitterアプリケーションの作成

Rasberry PiとTwitterを連携するためには，Twitterアプリケーションを作成する必要があります．
具体的には以下の4つの情報を取得します．

1. Consumer key
2. Consumer secret
3. Access token
4. Access token secret

[参考サイト：Twitterアプリケーションの作成（Consumer key、Consumer secret、Access token、Access token secretの確認方法）](http://website-planner.com/twitter%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90%EF%BC%88consumer-key%E3%80%81consumer-secret%E3%80%81access-token%E3%80%81access-token-secret/)

- Raspberry Piのpythonにパッケージをインストール

```
sudo apt-get update
sudo apt-get install python-setuptools
sudo easy_install pip #pipコマンドのインストール
sudo pip install twython #twythonをpipコマンドでインストール
```

- 回路作成

CdS素子と10kΩ抵抗を用いて作成します．
[参考サイト：照度センサー回路](https://fabkura.gitbooks.io/arduino-docs/content/chapter9.html)

# Arduino側
- CdS素子により取得した照度をシリアルモニタに出力します．

```arudino_cds.ino
int pin = 0; //センサーのピン番号
int get_a0 = 0; //センサーデータ取得
int flag = 0;
int s=0;
void setup(){
  Serial.begin(9600);

}

void loop()
{

  get_a0 = analogRead(pin); // 照度センサーからデータを取得
  s = 0;
  Serial.println(s); // シリアルモニタに出力
  if ( get_a0 <= 200 ) {
    if(flag == 0){
      s = 1000;//OFF!
      Serial.println(s); // シリアルモニタに出力
    }
    flag=1;
  } else if ( get_a0 > 200 ) {
    if(flag == 1){
      s = 2000;//ON
      Serial.println(s); // シリアルモニタに出力
    }
    flag=0;
  }
  delay(200);
}
```

# Raspberry Pi側

- 各種インポート

```tweet_cds.py
import serial
import time
import os
from twython import Twython
```

- Twitter APIの設定

```tweet_cds.py
#print('twitterの認証情報を入力')
CONSUMER_KEY = 'xxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxx'
ACCESS_KEY = 'xxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxx'
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
```

- Arduinoとシリアル通信する際の設定

```tweet_cds.py
#print('シリアル通信開始')
ser = serial.Serial('/dev/ttyACM0', 9600)
```

- Arduinoから照度データを取得しツイート

```tweet_cds.py
while 1:
	data = ser.readline()#Arduinoからデータの読み込み

	data2 = int(data)#int型に変換
	print('部屋の照明監視中' + time.ctime() + ',' + '照明状況' + ',' + str(data))
	#取得した照度情報をツイート
	if data2 == 2000:
		print('電気がついたよ！')
		api.update_status(status= time.ctime()+'おはよう！')
		time.sleep(1)
	elif data2 == 1000:
		print('電気が消えたよ！')
		api.update_status(status= time.ctime()+'おやすみなさい')
		time.sleep(1)
```

参考まで
VMware ESXi 6.0 vmnic設定確認コマンド

#ethtool vmnic0
[root@localhost:~] ethtool vmnic0
Settings for vmnic0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x004100ff (4260095)
        Link detected: yes


[root@localhost:~] esxcli network nic list
Name    PCI Device    Driver  Admin Status  Link Status  Speed  Duplex  MAC Address         MTU  Description
------  ------------  ------  ------------  -----------  -----  ------  -----------------  ----  -------------------------------------------------------------
vmnic0  0000:02:00.0  tg3     Up            Up            1000  Full    5c:b9:01:3b:97:38  1500  Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet
vmnic1  0000:02:00.1  tg3     Up            Up            1000  Full    5c:b9:01:3b:97:39  9000  Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet
vmnic2  0000:03:00.0  bnx2x   Up            Up            1000  Full    58:20:b1:ea:47:a0  9000  Broadcom Corporation QLogic 57810 10 Gigabit Ethernet Adapter
vmnic3  0000:03:00.1  bnx2x   Up            Up            1000  Full    58:20:b1:ea:47:a4  1500  Broadcom Corporation QLogic 57810 10 Gigabit Ethernet Adapter
ウイルスソフト確認

#既存のサーバに何のウイルスソフトが入っていたか確認するためのコマンド

1,ps -ef
2,ls /opt
3,rpm -qa

ググってフリーのウイルスソフトを確認する。
例：clamavの場合
grep -R -e 'clamav'
[root@localhost ~]# grep -R -e 'clamav'
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:clamav 0.2.2,0.3.0,0.3.1,0.3.2,0.4.0,0.4.1 45cda3e4539af899661fecedc88026b0
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:clamav-client 1.0.0,2.0.1,3.0.0 bb2387c777cf0b21e63a51e270f63a99
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:littleneck_clamav 0.0.1,0.0.2 aeeebdea067a861603063f37f72b18d4
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:ripta-clamav 0.2.2.1 6b1b07a4ef2060eec6d9238a010881e1
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:warp-clamav 0.3.1 113c7a406ca8f76b2a4de5840ae9a4be
.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/versions:clamav-client 3.1.0 db66188d2dd3bf0cc5794257659bd660
Error:Error converting bytecode to dex: Cause: java.lang.RuntimeException: Exception parsing classes

# はじめに
謎のエラー

```err:
Error:Error converting bytecode to dex: 
Cause: java.lang.RuntimeException: Exception parsing classes
```

Android Studio でパッケージ構成を大幅に変えたときに出ました．

# 解決策

[Build]→[Clean Project]
そして[Run]

実行できました．
kaggle タイタニック を日本語でわかりやすく。

# 今回は kaggle のタイタニックコンペを日本語説明でしてみました。

kaggle の kernel に投稿しましたのでよければぜひみてみてください。

[こちらをクリックするとkaggleに飛びます。](https://www.kaggle.com/kojitakahashi6/titanic-koji)

ちなみに結果は、0.7894で6990人中2297位でした。

なお筆者自体も経験が浅いので、修正すべきところ等々フィードバックいただけると幸いです。

よろしくお願いいたします。
[android] Android Studioでアプリの画面を録画するスクリーンレコーダーの使い方

# ○アプリの画面を録画する
1.Android Studio上部メニューのView→Android Monitorを開く
<img width="350" alt="スクリーンショット 2017-07-07 17.42.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/50917/c68ff6ef-972a-5a9f-3d5d-f0d134a97ac1.png">

2.下部にあるAndroid Monitorタブの左端の▶︎（スクリーンレコードボタン）を押す
<img width="673" alt="スクリーンショット 2017-07-07 17.46.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/50917/be9aa9d3-d4b4-777e-4a96-148d00ed3b03.png">

3.Rateと解像度を設定してStart Recording


<参考資料>
Android公式
アプリのデバッグ
https://developer.android.com/studio/debug/index.html?hl=ja
vimで各行末のスペースを消して改行をなくす

sublimeに踏査されているマルチカーソルで出来る技をvimでもできないかと探していたらアクシデントで見つけたコマンド笑

![vimmer8.gif](https://qiita-image-store.s3.amazonaws.com/0/87666/b17c45fa-d3a0-ba4e-1eab-3d69ec07312b.gif)



例えばこんな感じのブロックがあったとします。

```hoge.py
lst = [
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehoge
]
```

これを以下のようにしたいとき、

```hoge.py
lst = [
hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehoge
]

```

`ctr+V + ctr+g + ctr+jJ`でなります。

実際には[vimで複数選択を可能にするプラグイン](http://qiita.com/kmt/items/c978a4bf5cbb020dca1d)でもできそうです。
Unity 5.6.1f1 Sprite2D Animationでドハマリの巻

#はじめに
先日、行われた Japan XR Hackathon 2017 に参加しました。

今回はそんな、ハッカソンのことでは無く技術的にハマったのでログとして記します。
スプライトアニメの方法について、今々の方法がなかなかドキュメントなどの記載を見つけるのが大変で、ググルと正規サイトは古く無限ループに陥ってしまってしまいました。

**Unity 5.6.1f1, 5.6.2f1 にて検証** 

#前提
個人的な思い込みが理由なのかも知れませんが、Unityは３Dプロジェクトと２Dプロジェクトが作成できるので、スプライトアニメの2Dは３Dプロジェクトで作成したら出来無いと思い込んでいました。

#解決方法
[Youtube](https://www.youtube.com/) がこれ系の解決には有用であるという知見があるので、自分の欲しい情報に関連する単語を集合和積で絞られやいように順に入力し、欲しい結果を得ました。

###Youtubeで動画検索
[Unity 5 2d Animation Tutorial - Part1](https://youtu.be/VAyWk0eIqRc)と言う動画を見つけた背景はもうすでに私の短期記憶には残っておりませんが、動画名からすると"unity5.6.2f1" "2d" "animation" "sprite"などのキーワードで検索したような気がしています。

###Unity用2Dアニメーションスプライトの作成
上記、Youtubeのコメント欄、[リンク](http://www.gameart2d.com/cat-and-dog-free-sprites.html)のページのFree Downloadでカワイイ猫ちゃんと犬のスプライトアニメ用の素材を手にいれる。
![スクリーンショット 2017-07-06 12.05.54.png](https://qiita-image-store.s3.amazonaws.com/0/25895/78c46aca-8d30-8d11-9cf3-93a636be67a7.png)

###ドラッグアンドドロップで仮にAssets/spritesなどのProjectビューへ配置する
![スクリーンショット 2017-07-06 17.45.01.png](https://qiita-image-store.s3.amazonaws.com/0/25895/bcc17043-444f-6795-6911-3265f1129512.png)

###スプライトアニメーションを設定する画像ファイルを選択しTexture TypeをSprite(2D and UI)の画像設定にする
![スクリーンショット 2017-07-06 14.04.48.png](https://qiita-image-store.s3.amazonaws.com/0/25895/6bc34dc2-a2a3-16a9-0c9d-d69093f57bc1.png)

###Sprite(2D and UI)の画像設定からもう一度、Sprite ModeをPolygonの画像設定しApplyボタンを押す
![スクリーンショット 2017-07-06 14.10.55.png](https://qiita-image-store.s3.amazonaws.com/0/25895/9c532406-dde8-fcbc-7e63-36b0af18e2ca.png)

###選択されている画像をそのまま、Sceneビューへ配置するとスプライトアニメーションを生成される
![スクリーンショット 2017-07-06 14.12.59.png](https://qiita-image-store.s3.amazonaws.com/0/25895/d65a7ef0-c9c1-4789-4ccb-c1e2d4d7e5ee.png)

###名前を設定しSaveボタンでアニメーションコントローラーとアニメーションクリップが生成される
![スクリーンショット 2017-07-06 14.21.58.png](https://qiita-image-store.s3.amazonaws.com/0/25895/f676eb15-22c1-cfbb-c749-fdb608997951.png)

###わたしはこのようなディレクトリ構成にした
![スクリーンショット 2017-07-06 14.45.52.png](https://qiita-image-store.s3.amazonaws.com/0/25895/84a464b9-947c-4936-f437-cc0baaaf9de9.png)

#問題解決後は余裕モーション
タップし続けるとアニメーション速度を早くし、タップを解除するともとのスピードにもどし、トコトコトコしてみました。

RelaxControl.cs

```lang:C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RelaxControl : MonoBehaviour {

	public Animator animator;

	// Use this for initialization
	void Start () {
		animator = GetComponent<Animator> ();
	}
	
	// Update is called once per frame
	void Update () {
		//タップしたら無くなったら
		if (Input.GetMouseButtonUp (0)) {
			animator.speed = 1;
		}
		//タップの間中
		else if (Input.GetMouseButton (0)) {
			animator.speed = 60;
		}
	}
}
```

今回、作成したプレファブへアタッチする
![スクリーンショット 2017-07-06 18.45.12.png](https://qiita-image-store.s3.amazonaws.com/0/25895/72474bb1-b1fb-87e4-53d3-26396429826f.png)

[確認用動画 Sample Movie](https://youtu.be/YkG2Yh9_0aA)
動画のルートモーションのアニメーションスピードは、0.1にしてあります。
ServiceNow Jakartaアップデートトピックス - 埋め込みヘルプとガイドを自作できるようになった -

ServiceNowのバージョン「Jakarta」での変更点。
[まとめはこちら](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# 埋め込みヘルプとガイドを自作できるようになった
**埋め込みヘルプ**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/20cd4047-3ff5-d6f5-852a-647417178f2c.png)

**ガイド**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/61e953d0-08e5-63d8-69a4-c190834ab343.png)

## ページ遷移

### 埋め込みヘルプ
アプリケーションナビゲータより
**埋め込みヘルプ -> ヘルプコンテンツ**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/92e39c5c-7d58-4413-b9be-24ee2627c584.png)

#### <font color="red">ヘルプコンテンツが表示されない場合</font>

<details><summary>★[バグ情報]ヘルプコンテンツが表示されない人向け手順</summary>システム管理者でもヘルプコンテンツが表示されない場合がある。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/59869c80-5f59-1022-eb9b-28718c47f91a.png)
原因はACLの設定でread権限が外されているため。
　
**対応手順**
アプリケーションナビゲータより、**システム定義 -> テーブル**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/944aa1e2-9aa0-57b0-df26-ee408df8c4e6.png)
　
**sys_embedded_help_content**をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/319943f3-5e6e-2606-f1d3-409edfcacef4.png)
　
関連リスト「**アクセス制御**」から「**sys_embedded_help_content.\***」をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/0cc48b5e-47b9-42c2-faed-7dd643782791.png)
　
管理者優先のチェックが外れているはずなので、チェックを入れ「**更新**」する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/4a0f5430-5613-5286-0a1c-72adfa59296c.png)
　
更新後表示されていることが確認できる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/a240cd51-ac92-c4a4-6c19-c4080e0e82cd.png)
</details>

### ガイド
アプリケーションナビゲータより
**埋め込みヘルプ -> ガイド付きツアーデザイナー -> ガイド付きツアー**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/26e6e546-7822-a18b-542b-7f4de75b22e0.png)

埋め込みヘルプとガイドの作り方は別記事にまとめます。

# 関連記事
> - [ServiceNow Jakartaアップデートトピックスまとめ](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# 参考サイト
> ServiceNow Product Documentation - Jakarta release notes -
https://docs.servicenow.com/bundle/jakarta-release-notes/page/release-notes/jakarta-release-notes.html

> ServiceNow Community - [Jacarta] How to create a custom embedded help in Developer Instance? -
https://community.servicenow.com/thread/271491
お手軽簡単PHPでバッチ用フレームワークを作ってみた

# はじめに

- PHP開発をする際には、フレームワークにはTaskクラス系の名前で備わっていますが、バッチだけ必要としている場合、あまりフレームワークの恩恵を受けないなぁと感じていたので、実際に簡易フレームワークを作ってみました。 
- フレームワークといっても基本構成と起動プログラムだけです。
- 実はお手軽簡単シリーズの総集編みたい雰囲気にはなってます。

# ディレクトリ構成

```
{プロジェクト名}
 └ src - リポジトリ管理のしやすさのため、一階層増やしてます。
   ├ configure
   │ ├ app
   │ │ ├ config - 設定ファイルを格納します。
   │ │ ├ class - 各種クラス群を格納します。
   │ │ │ ├ controller
   │ │ │ └ ...
   │ │ └ task - 各バッチクラスを格納します。
   │ ├ bin
   │ │ └ {プロジェクト名}.php - バッチの起動プログラムです。
   │ ├ lib - ライブラリ群を格納します。
   │ │ ├ util
   │ │ └ ...
   │ ├ tests - PHPUnitなどのテストフレームワークを格納します。
   │ └ vendor - Composerからインストールしたライブラリ群を格納します。
   └ docroot - ドキュメントルートです。
     ├ image
     └ ...
```

# 実行イメージ

オプションや引数与えて各バッチを実行するみたいな

```zsh
php {プロジェクト名}.php SampleTask.php sample --env=prod
```

# バッチ起動プログラム

```php:{プロジェクト名}.php
<?php
/**
 * タスクを起動します
 */

error_reporting(-1);
ini_set('display_errors', true);
ini_set('memory_limit', '512M');
  
// タイムゾーンの設定
date_default_timezone_set('Asia/Tokyo');
  
// ルートディレクトリ
define('ROOT_DIR', __DIR__);

// Composerのライブラリをオートロードします。
require_once ROOT_DIR . '/vendor/autoload.php';

// http://qiita.com/neriai/items/ba6e3126c33132907080
require_once ROOT_DIR . '/libs/AutoLoader.php';
  
$autoLoader = (new AutoLoader())->register();
  
// 設定ファイルのロード
// http://qiita.com/neriai/items/1614e3c41def7bfa72cf
HogeLib\Config::setConfigDirectory(ROOT_DIR . '/config');
  
if (!isset($argv[1])) {
    echo '必要なパラメータが不足しています';
    exit(1);
}
  
$arguments = array();
$options = array();
  
// 必須パラメータとオプションパラメータを振り分ける
foreach ($argv as $key => $value) {
    if ($key > 1 && isset($value)) {
        if (preg_match('/^--[a-zA-Z0-9]+=[a-zA-Z0-9]+$/', $value)) {
            $params = explode('=', $value);
            $name = str_replace('--', '', $params[0]);
            $options[$name] = $params[1];
        } else {
            $arguments[] = $value;
        }
    }
}
  
// 指定されたタスククラスを実行
$namespace = 'Hoge\\Task\\' . $argv[1];
$class = new $namespace();
$class->execute($arguments, $options);
```


# 全ページリンク
- [お手軽簡単PHPでクラスオートローダを作ってみた](http://qiita.com/neriai/items/ba6e3126c33132907080)
- [お手軽簡単PHPで設定ファイルローダを作ってみた](http://qiita.com/neriai/items/1614e3c41def7bfa72cf)
- [お手軽簡単PHPでロガーを作ってみた](http://qiita.com/neriai/items/24a63bd66fd3563cacf7)
- [お手軽簡単PHPでバッチ用フレームワークを作ってみた](http://qiita.com/neriai/items/3fdc070f3b429e792a23)
SQL トランザクション memo

##正確なデータ操作を脅かすもの

1.予期しない処理中断
2.同時操作

###トランザクション

SQL文送信の際、複数のSQL文を1つのかたまりとして送信するように指示することができる。
このひとかたまりをトランザクションと呼ぶ。

DBMSはトランザクションを次のように扱う
A.トランザクションの途中で、処理が中断されないようにする。
B.トランザクションの途中に、他の人の処理が割り込めないようにする。


####A.トランザクションの途中で、処理が中断されないようにする。
ではトランザクションの中にある複数のSQL文について、必ず

「すべて実行が完了」
「1つも実行されない」

のどちらかの状態になるように制御する。
このようにDBMSによって複数のSQL文が1まとまりのものとして扱われる性質のことを
トランザクションの原子性という。

トランザクションの指示

・BEGIN
開始の指示。この指示以降を1つのトランザクションとする。

・COMMIT
終了の指示。この指示までを1つのトランザクションとし、変更を確定とする。

・ROLLBACK
終了の指示。この指示までを1つのトランザクションとし、変更を取り消しする。

####自動コミットモードの解除

MySQL
``` SET AUTOCOMMIT=0 ```

###B.トランザクションの途中に、他の人の処理が割り込めないようにする。
DBMSはトランザクションを実行する際、他のトランザクションから影響を受けないように分離して実行する。
つまり同時進行してもあたかも単独で実行しているのと同じ結果になるように制御する。

DBMSに対して複数の利用者が同時に処理を要求することで発生する副作用

+ ダーティーリード
+ 反復不能読み取り
+ ファントムリード

これら懸念されている副作用はトランザクションによって解決できる。
なぜなら、DBMSは分離性を維持するためにB.の制御を行っているからである。

DBMSはこの仕組みを使うためにロックという機能を使用する。
【Facebook】Graph API アップグレードのお知らせ（2017年7月10日まで）

**「2017年7月10日で Graph API v2.3 の期限が切れるので、v2.4 以降にアップグレードしてください」**という旨のメールが 6月13日頃に Facebookページ管理人宛に届いています。
 
- v2.4 も 2017年10月7日で使用期限が切れるため、最新の **v2.9** に書き換えることを推奨されています。
- Facebookページの場合は、「APIアップグレードツール」で確認できます。（https://developers.facebook.com/tools/api_versioning/）

　
「Facebookページ」以外にも、通常のサイトに設置している「いいねボタン」、「PagePlugin（元LikeBox）」などでも使用している API のため、多くのページで使われている可能性があります。
念のためバージョンをご確認ください。

（使用期限を過ぎてしまうと動作の保証ができなくなります。いつ対応されなくなるかどうか分かりませんので、ご注意ください！）
（今までのカンジからすると、期限切れ後すぐに使えなくなることはあまりありませんでしたが、今回もそうとは限らないので心配w）
Visual Studio 2017 > フォントがぼんやり > フォント倍率を100%にしてみる

```txt:動作環境
Windows 8.1 Pro (64bit)
Microsoft Visual Studio 2017 Community
```

Visual Studioのエディタ内のフォントだけがぼんやりしている気がした。
IDEの他のウィンドウのフォントはそれほど違和感を感じない。

VMWare上で動かしているので、VMWareのビデオドライバの問題かと思ったが、そうではなかった。

以下を見つけた。
https://stackoverflow.com/questions/34764369/how-to-fix-blurry-font-in-visual-studio-2015

フォントの倍率が98%になっており、100%にすると確かに「ぼんやり」しなくなった。
インフラエンジニアに Git を1時間で伝える勉強会資料

## はじめに
*愚者は経験に学び、賢者は歴史に学ぶ
～オットー・フォン・ビスマルク～*

----

## なりたち
Git は Linus が Linux のソース管理するために作った

- 無料
- 速い
- 分散できる

みんな大好き Linux と同じなりたちなので、仲良くなれますね！

----
## おしながき
- フローを理解する
- コミットする
- データ構造から理解する
- 複数人で使う
- ~~ブランチ~~

----

## フローを理解する
[郵便局メソッド](http://qiita.com/yunico-jp/items/87bdd13971e82833f6bb#%E3%81%9D%E3%81%AE%EF%BC%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%A6%E8%80%83%E3%81%88%E3%81%A6%E3%81%BF%E3%82%8B) を参照

### おさえておきたい
フローの雰囲気

----

## コミットする1

ローカル作成するパターン
以下、`git status` で随時確認しながら進めましょう

```
git init
touch readme.md
git add *
git commit -m "first commit"
git log
echo "##hello" >> readme.md
git commit -a -m "modify readme.md"
git log

git remote add origin REMOTE_REPOSITORY_URL
git remote -v
git push origin master
```
----

## コミットする2

GitLab や GitHub からクローンするパターン

```
git clone REMOTE_REPOSITORY_URL
git remote -v
echo "add line" >> readme.md
git add *
git commit -m "create readme"
git log
echo "description" >> readme.md
git diff
git commit -a -m "add description"
git log
git push origin master
```
----

## ここまでのデモ
### おさえておきたい
- status
- log
- clone
- add
- commit
- push

----

## データ構造から理解する
[Git をボトムアップから理解する](http://keijinsonyaban.blogspot.jp/2011/05/git.html) の2章を読む
(branch, tag, master, HEAD はスルー)

おさえておきたい

- リポジトリ
- インデックス
- ワーキングツリー
- コミット

ここ大事なので、わからないところは遠慮なく質問してください！

----

## 複数人で使う

```
git clone REMOTE_TEAM_REPOSITORY_URL

(ブラウザで `readme.md` を直接編集)

echo "description2" >> readme.md
git add readme.md
git commit -m "add description2"
git push origin master   ここで失敗します

git pull origin master
vi readme.md   適当に編集
git add readme.md
git commit -m "merge HASH"
```
----

## ここまでのデモ
### おさえておきたい
- pull
- 衝突

----

## ブランチ・タグ
再び [Git をボトムアップから理解する](http://keijinsonyaban.blogspot.jp/2011/05/git.html) の2章を読む
(branch, tag, master)

```
git branch
git branch test
git branch
git checkout test
git branch

vi readme.md
git add readme.md
git commit -m "test commit"
git checkout test
cat readme.md
```

----

## 以上

----
七夕なのでbotに願いごとしてみた

去年は[シェルスクリプトで願いごとした](http://qiita.com/tamanugi/items/b4a23d6f9102a29fcad2)ので
今年はbotで願いごとしてみた

```js:bot.js
if (!process.env.token) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}

var Botkit = require('botkit');
let fs = require('fs')

var controller = Botkit.slackbot({
    debug: false
});

var bot = controller.spawn({
    token: process.env.token
}).startRTM();


controller.hears(['短冊 (.*)'],['direct_message', 'direct_mention', 'mention'], function(bot, message) {

    let tanzaku = "┏┷┓";

    for(let s of message.match[1].split('')){
      tanzaku += `\n┃${s}┃`
    }
    tanzaku += "\n┗━┛"

    bot.reply(message, '```\n' + tanzaku + '\n```')

});
```

<img width="719" alt="スクリーンショット 2017-07-07 17.05.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/55219/97869936-a4cc-4887-e48c-f5c040c93fa1.png">


コードは[github](https://github.com/tamanugi/tanzaku_bot)にもあげています