OmniAICreator/Qiita-1.07M huggingface dataset:
RxTest入門

**追記** @ 11/18
[第3回RxSwift勉強会](https://connpass.com/event/41478/) でこの記事を元ネタに発表しました。
下記がその時に使ったスライドです。
https://speakerdeck.com/tasanobu/rxtestru-men



## RxTestとは
- `RxTest` は `RxSwift` 本体とは分離されたテスト用フレームワーク
- 便利なテスト用クラスが用意されている（後述）
- Cocoapodsで利用可能。
 
```
 /// Add `RxTest` to a test target
 target 'SampleTests' do
	pod 'RxSwift'
	pod 'RxTests'
end
```

## 主なクラス
`RxTest` では実時間とは異なる `仮想時間` に基づきイベントを発生させる仕組みとなっています。主に次のクラスを使用してテストを書きます。

#### TestScheduler
- 仮想時間に基づいてイベントを発生させることができるスケジューラ。
- 仮想時刻を指定して任意アクションを実行
- `TestableObservable` `TestableObserver` のファクトリメソッドを持つ

#### TestableObservable
- 仮想時間にイベントが発生するObservable

#### TestableObserver
- 受信したイベントを仮想時間とともに保持するObserver

## 利用例
上記のクラスの説明ではいまいちピンとこないと思います。
RxSwift の [mapオペレータのテスト](https://github.com/ReactiveX/RxSwift/blob/master/Tests/RxSwiftTests/Observable+StandardSequenceOperatorsTest.swift#L754-L782) を簡素化したコードを例にして説明します。

```
func testMap() {
    // 仮想時刻 0 を指定しTestSchedulerを生成
    let scheduler = TestScheduler(initialClock: 0)

    // TestableObserver<Int> を `仮想時刻` `値` を指定して生成
    let xs = scheduler.createHotObservable([
        next(150, 1),
        next(210, 0),
        next(240, 4),
        completed(300)
        ])

    // TestableObserver<Int> を生成
    let observer = scheduler.createObserver(Int.self)

    // 仮想時刻 `200` に `observer` を `xs` に subscribe させる
    scheduler.scheduleAt(200) {
        xs.map { $0 * 2 }
            .subscribe(observer)
            .addDisposableTo(disposeBag)
    }

    // schedulerを開始
    scheduler.start()


    /// TestableObserver が受信したイベントを検証
    let expectedEvents = [
        next(210, 0 * 2),
        next(240, 4 * 2),
        completed(300)
    ]
    XCTAssertEqual(observer.events, expectedEvents)


    /// TestableObservable が subscribe/unsubscribe された仮想時刻を検証
    let expectedSubscriptions = [
        Subscription(200, 300)
    ]
    XCTAssertEqual(xs.subscriptions, expectedSubscriptions)
}
```

## まとめ
RxTestの概要とテストコード例をまとめてみました。
RxSwiftのテストを書くのは面倒かと思っていましたが、RxTestを使うと意外にシンプルにかけるな〜という印象です。
CSS を使って長文最後を「･･･」で省略する方法（複数行対応）

##CSS を使って長文最後を「･･･」で省略する方法（複数行対応）

単行だと簡単にかけたり、-webkit対応だと簡単にかけたりするのだが、
色々なブラウザでの複数行だとちょっと面倒だったのでメモ。

###対応方法

htmlに長文を用意

```html
<p class="cut_txt">長文xx～xx。<p>
```
上記htmlの長文に対応するCSSを用意

```css
.cut_txt {
	position: relative;
	overflow: hidden;
    /** 行数設定 **/
	height: 3em;
	line-height: 1.5;
}
.cut_txt:before, .cut_txt:after {
	position: absolute;
    /** 塗りつぶし背景色 **/
	background: #f7f6ec;
}
.cut_txt:before {
    /** 語尾文字 **/
	content: "･･･";
	bottom: 0;
	right: 0;
}
.cut_txt:after {
	content: "";
	width: 100%;
	height: 100%;
}
```

最初に、height と line-height を指定して何行表示するかを決めます。
後は overflow: hidden; して隠します。

:before というのが「･･･」文字を表示する擬似要素です。
bottom と right を指定して強制的に右下に置きます。(absoluteで絶対位置になる)

:after 擬似要素は、「･･･」を消す用の疑似要素です。
親要素の最後から要素と同じ幅と高さを背景色で隠します。
文字列が短い場合に「･･･」を隠します。
文字列が長い場合は見えない領域を背景色で隠します。(元から隠れてますが・・・)

###サンプル
1.森のくまさん(short ver):末尾まで行かない場合。
2.森のくまさん(改行 ver):複数行で3行以上の場合。(改行有り)
3.森のくまさん(full ver):複数行で3行以上の場合。(改行無し)
![css.png](https://qiita-image-store.s3.amazonaws.com/0/15564/f8b31756-e105-c907-fb0a-412851bb3c45.png)


###欠点
・途中で改行されている場合でも「・・・」が右下に離れて存在する。
・「・・・」が絶対位置なので、文字の途中でも関係なく「・・・」になります。
PowerPoint for Mac 2016でユーザ定義の「テーマのフォント」を作る

自分用メモ

#やりたいこと
PowerPointのスライドにおける「見出しのフォント」とか「本文のフォント」の組み合わせを自分で設定する

<img width="412" alt="スクリーンショット 2016-11-14 14.58.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/146835/03b80a3b-b340-79e3-c670-03b5871ef12a.png">
(こんなのを作る。)

# やること
「テーマのフォント」の設定を書いたxmlファイルを作って所定の場所に置く。(置き場所はPowerPointのバージョンで違う。for Mac 2016であれば以下の場所。)

```
~/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Themes.localized/Theme Fonts
```

# xmlファイルの記述
サンプルは以下の通り。

```xml:Hiragino_Century.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:fontScheme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="ヒラギノ_Century">
  <a:majorFont>
    <a:latin typeface="Century"/>
    <a:ea typeface="HiraKakuPro-W3"/>
    <a:cs typeface=""/>
  </a:majorFont>
  <a:minorFont>
    <a:latin typeface="Century"/>
    <a:ea typeface="HiraKakuPro-W3"/>
    <a:cs typeface=""/>
  </a:minorFont>
</a:fontScheme>
```

**majorFont**が「見出しのフォント」、**minorFont**が「本文のフォント」。

```
typeface="(フォント名)"
```

とする。latinが英語、eaが日本語、csはその他言語用フォントの指定。
フォント名の記述は**PostScript名**という奴を書く。(あまり詳しくわからないのだが、)Macに標準で入っていたFontBookというアプリケーションで大体のフォントのPostScript名はすぐわかる。
<img width="364" alt="スクリーンショット 2016-11-14 15.22.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/146835/006be60c-2dcb-ef34-404e-3bec79180c85.png">

# 参考にさせていただいたサイト
```
http://researchmap.jp/jox7s44se-52108/
```
(参考にさせていただいたというか、このメモはほとんどこのサイトの内容を自分用に書き直しただけの内容になってしまっている…)
【SQL Server】datetime型から時間を切り捨てする（時間部分を0時にする）

SQL Server 2005のあるテーブルから、当日の0時以降に処理されたのレコードを抽出するのに、以下のSQLを作成した。

GETDATE()を用いて日付を取得した場合は以下の通り。

```sql
/* 2016-11-14 15:01:04.320 が返却される */
select GETDATE()
```

ここから"15:01:04.320"を切り捨てて、"2016-11-14 00:00:00.000"としたい。
その方法が、以下のSQLです。

```sql:時間部分を切り捨てする
/* 2016-11-14 00:00:00.000 が返却される */
select CONVERT(datetime, CONVERT(char(8), GETDATE(), 112))
```

GETDATE()で取得した値をyyyymmddのchar(8)に変換した後に、再度datetimeに変換。

これでほしい値は生成できたが、なんか気持ちわるい気もする。
Adobe XDのUserVoiceで投票しよう(11月版)

Adobe XDへのバグ報告・機能提案では、完全にオープンな環境である[UserVoice](https://adobexd.uservoice.com/)がつかわれています。

そんななかで大量に出てるなかから個人的に気になるUserVoiceをざっくりまとめ。
Photoshop PSD書き出しなどのように世にでるまでは応援したいものは毎回、現在の人気を選んで紹介しています。

* [7月のピックアップ](http://qiita.com/risay/items/a6548e07e8502e2011e1)
* [8月のピックアップ](http://qiita.com/risay/items/c003be0bf97cf6fd9ed3)
* [9月のピックアップ](http://qiita.com/risay/items/c003be0bf97cf6fd9ed3)

# 組織票したいオススメ要望
## [PSD書き出し](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/12928719-psd-export-and-multiple-formats-using-extract)
国内で受託仕事するならばまず必須要件。ただし、２０１７年に共有機能にSpecという機能が追加されてCSSの書き出しなんかには困らなくなりそうです。

## [Spec/Style Guide](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/12951915-generate-specs-measurements-style-guide-for-de)
というわけで、Specとスタイルガイド。2017年の早いうちに狭い範囲(多分プライベートベータ？)から提供開始のものはコレに近いかも？ 確定するまでvote！

## [シンボル内のオブジェクトにもプロトタイプでリンクできるようにしてほしい](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/16943800-allow-interaction-wires-links-from-objects-inside)
現在は単なるアセットパーツとしてしか使えないので是非ほしい！かなりプライオリティは高い模様。

## [スクロールした時の固定・Sticky要素](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/13031847-sticky-fixed-elements-in-scrolling-artboards-he)
絶賛開発中でそろそろ半年…

#デザインモード

* [個別にリサイズ/スケール変更できるシンボル](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/16939339-scale-resize-symbols-individually)  
Uservoice読むまでシンボルがリサイズできないことに気がついてなかったのはヒミツ。コレは早めに修正されるんじゃないかなぁ
* [グラデーションをスウォッチに登録したい](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/16384465-gradient-color-swatches)  
現在から先の話に至るまでグラデーションのライブラリ・スウォッチ登録はスクリーンショットすら見たことがなかった

# プロトタイプ

* [インタラクションリンク・ワイヤーのコピペ](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/13041930-copy-paste-should-preserve-interaction-wires-links)
* [外部URLにリンクしたい](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/12954396-link-to-external-urls)
* [プロトタイプのアイコンをアートボードで作ってドラッグ＆ドロップで設定したい](https://adobexd.uservoice.com/forums/353007-adobe-xd-feature-requests/suggestions/15693426-drag-object-artwork-from-canvas-to-set-web-sharing)  
いちいち書き出すのは面倒なので

# 欲しい機能が既存の投稿に見つからなかったら？

日本語でも大丈夫なのでどんどん気がついたことは投稿してほしい…そうですが、英語のほうが見つけられやすいとも聞くので、今話題の[Google translate](https://translate.google.com/?hl=ja)を使って書いてみてはどうでしょうか?

たとえば、自分が質問したかった前提の話を訳してもらうと

> Illustratorは自動的にSVG上のシェイプマスクより上にある同じ階層にあるオブジェクトをグループ化する。

いい感じになってました。

> Illustrator automatically groups objects in the same hierarchy above the shape mask on SVG.
Angular by TypeScript サブモジュール内でプロジェクトのsharedのimportをシンプルに記述する

# 前提
ベースはangular-cliで作成したプロジェクトで、なんとなく下記のような構成（になるよね？）。
※今回の話題に関係ないファイルは省略
ちなみにsharedはプロジェクト全体で共有して使うモジュール。

```
projectRoot
├── src
│   └── app
│       ├── moduleA
│       │     └──components
│       │        └── hoge.component.ts
│       ├── moduleB
│       └── shared
│           └── services
│                ├── moge.service.ts
│                └── index.ts (export * './moge.service.ts')
└── tsconfig.json
```

# 問題点
hoge.component.ts内でMogeServiceをimportをしようと思うと

```js:hoge.comopnent.ts
imoprt { MogeService } from '../../shared/services';
```

と書く必要がある。
moduleの外側への参照……
moduleって言ってるにくせに密結合な依存になってるようで個人的にすごい気持ち悪さがぬぐえない。


# 解決策
```tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "my-shared/*": [
        "app/shared/*"
      ]
    }
  }
}
```

これで

```js:hoge.comopnent.ts
import { MogeService } from 'my-shared/services';
```

こう書ける！
これなら（オレオレ）ライブラリな感じでimportできてすっきり。
※逆に言うとライブラリと見分けが付くような名前を付けないと紛らわしいかも

なんならホントにライブラリとして公開することになっても（ならないだろうけど）コードの変更がほぼない。


# 参考
[Module Resolution・TypeScript](https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping)
Cognos BI でレポート実行ユーザーにより表示結果を変えたい

Cognosの同じレポートで、実行するユーザーによって結果を分けたいという場合の実装例です。
今回は、同一テーブルのセットをスキーマ毎に保持していて、ユーザーにより参照先のスキーマを変更したい、という場合の実装例です。

以下、手順になります。

・同一名称のテーブルをスキーマ違いで作成します。
C:\>db2 "create table GRP1.TESTTBL (col1 char(1),col2 int)"
C:\>db2 "create table GRP2.TESTTBL (col1 char(1),col2 int)"

・それぞれ違うデータを入れます。
C:\>db2 "insert into GRP1.TESTTBL values('A',111)"
C:\>db2 "insert into GRP2.TESTTBL values('A',112)"

・Framework Managerでテーブル定義を取り込む時は、GRP1のTESTTBL表のみ取り込みます。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/52af627c-0d40-6c6f-5d29-7fc678c1df56.png)

・データソースのスキーマをブランクにして、パッケージを発行します。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/eae196e9-3e7e-30a8-e8e1-9a9b45f32467.png)

・LDAP上のcoguser1をCognosネームスペースのgroup01に所属させます。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/441f5720-951d-46c0-d04e-448a7455cf6d.png)

・LDAP上のcoguser2をCognosネームスペースのgroup02に所属させます。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/3aeb9dca-074f-3415-42a4-f6b4690cd4b9.png)

・データソースのサインオンを新規に作成します。group01所属ユーザー用のサインオンはユーザーIDをgrp1(スキーマ名)とします。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/a77452aa-0d8e-327e-20bf-ef65ca81c8fb.png)

ユーザーを選択で、group01を所属させます。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/b5ae8b04-5d43-93b1-f969-0919906bf49f.png)


・同様にgroup02所属ユーザー用のサインオンをユーザーIDをgrp2(スキーマ名)、ユーザーにgroup02を所属、で作成します。

・Report Authoringで、TESTTBLを参照するリストを作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/2f9d0b79-3daa-2e52-fba3-6b507b5507f2.png)

・coguser1でレポート実行した場合
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/bcbfa7db-8b45-50a8-e00e-34d5d69ebf99.png)

・coguser2でレポート実行した場合
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/30cb1a2e-4799-479b-dba8-978dbe0101ca.png)
OpenStructを再帰的に実行する

ハッシュを渡すと構造体を返してくれる[OpenStruct](https://docs.ruby-lang.org/ja/latest/class/OpenStruct.html)が便利で使い始めたのですが、ネストしたハッシュに対して再帰的(recursive)には実行されないよう(オプションとかも無さそう)なので、[この辺](http://andreapavoni.com/blog/2013/4/create-recursive-openstruct-from-a-ruby-hash/)を参考にさせていただき「**DeepOpenStruct**」を書いてみました。

##### Code

```ruby:lib/deep_open_struct.rb
class DeepOpenStruct < OpenStruct

  def initialize(hash = nil)
    @table = {}
    @hash_table = {}

    if hash
      hash.each do |key, value|
        @table[key.to_sym] =
          if value.is_a?(Array)
            value.map { |_value| (_value.is_a?(Array) || _value.is_a?(Hash)) ? self.class.new(_value) : _value }
          elsif value.is_a?(Hash)
            self.class.new(value)
          else
            value
          end
        @hash_table[key.to_sym] = value

        new_ostruct_member(key)
      end
    end
  end

  def to_h
    @hash_table
  end

end
```

##### RSpec

```ruby:spec/libs/deep_open_struct_spec.rb
RSpec.describe DeepOpenStruct, type: :lib do

  let!(:strict) {
    DeepOpenStruct.new(
      foo: "abc",
      bar: %w(hoge, fuga, piyo),
      baz: {
        foobar: {
          hoge: :hoge,
          fuga: nil,
          piyo: [
            123,
            456,
            {
              z: {
                abc: "def",
                def: 999,
                ghi: [{ xyz: "xyz" }]
              }
            }
          ]
        }
      },
      qux: []
    )
  }

  it { expect(strict.foo).to eq "abc" }
  it { expect(strict.bar).to eq %w(hoge, fuga, piyo) }
  it { expect(strict.baz.foobar.hoge).to eq :hoge }
  it { expect(strict.baz.foobar.fuga).to be_nil }
  it { expect(strict.baz.foobar.piyo.size).to eq 3 }
  it { expect(strict.baz.foobar.piyo.first).to eq 123 }
  it { expect(strict.baz.foobar.piyo.second).to eq 456 }
  it { expect(strict.baz.foobar.piyo.third.z.abc).to eq "def" }
  it { expect(strict.baz.foobar.piyo.third.z.def).to eq 999 }
  it { expect(strict.baz.foobar.piyo.third.z.ghi.size).to eq 1 }
  it { expect(strict.baz.foobar.piyo.third.z.ghi.first.xyz).to eq "xyz" }
  it { expect(strict.qux).to eq [] }

end
```

### 補足

[recursive-open-struct](https://github.com/aetherknight/recursive-open-struct)というGemを使ったり、[JSONに変換してから渡したり](http://shepherdmaster.hateblo.jp/entry/2016/11/03/225957)と、他にもやりようはありそうです。
Grafana 4.0 (Beta) の Alerting 機能を使ってみる

# 概要
Grafana 4.0 から実装された Alerting を試してみる

現在(2016/11/11) Alerting 対応の DataSource は以下のみらしい
 - Graphite
 - Prometheus
 - InfluxDB
 - OpenTSDB

Graphite でやってみる

# 環境

- Grafana Server
 - CentOS Linux release 7.2.1511 (Core)
 - grafana-4.0.0-1478693311beta1

- DataSource
 - graphite-web-0.9.15-1
 - carbon-0.9.15-1
 - whisper-0.9.15-1
 
- Metrics Collector
 - telegraf-1.0.1

# Grafana インストール

ダウンロードは[こちら](http://grafana.org/download/4_0_0/)から

既に grafana インストール済みの環境があるので

```
# rpm -Uvh grafana-4.0.0-1478693311beta1.x86_64.rpm
```

grafana 側で以下の設定を有効化しておく（メール通知する場合は、SMTP 設定もやっとく）

[alerting]
execute_alerts = true

# 通知先設定

メニューより Alerting → notifications 選択
![02.png](https://qiita-image-store.s3.amazonaws.com/0/105824/96b2ec0d-2bd3-cc98-5217-4bc509412c67.png)

New Notification で通知設定
![03.png](https://qiita-image-store.s3.amazonaws.com/0/105824/82e99113-28aa-a110-85df-7f425c2f50e5.png)

メール通知設定
![04.png](https://qiita-image-store.s3.amazonaws.com/0/105824/c02cdf27-1014-f86e-b77a-64cd48150d2d.png)


Save して通知先設定完了

# Alerting 設定

グラフ Edit 画面に Alert Tab が追加されたので
![01.png](https://qiita-image-store.s3.amazonaws.com/0/105824/7d95671d-02da-2ddf-f0d2-316e45d4fde5.png)

Create Alert して Alert 設定
![05png.png](https://qiita-image-store.s3.amazonaws.com/0/105824/9eb7b1d9-c684-4576-8470-8b7c92769dd0.png)


閾値はグラフ横の health ボタン上下で設定できる

Notifications より先ほど作成した通知先を設定
![11.png](https://qiita-image-store.s3.amazonaws.com/0/105824/8e2b89e1-30ee-37a7-fcf7-01b0b4fd1ebd.png)



# Alert 通知

閾値を低めに設定してしばらくするとアラートメール受信した
![08.png](https://qiita-image-store.s3.amazonaws.com/0/105824/1c1279cf-6840-4fde-9a9d-16edd3da0cb9.png)


グラフ上にもアラート履歴が annotation として表示される
![09.png](https://qiita-image-store.s3.amazonaws.com/0/105824/8f259b7b-81d0-ac45-a055-ce4a8219cd6c.png)

アラート履歴
![10.png](https://qiita-image-store.s3.amazonaws.com/0/105824/81f330d8-0afe-83d2-6822-234869b88748.png)
ターミナル（bash）で私がよく使う基本コマンド ベスト15

ターミナル（bash）でよく使う基本コマンド ベスト15をまとめました。

historyから使用コマンドの件数調べました。

使用件数確認コマンド

```
$ history | awk '{print $2}' | sort | uniq -c | sort -r
```

私はよくMacでターミナルを使うのですが、下記に紹介するコマンドを使えれば大体何でもできると思います（思っています）！！

### １位 ls
フォルダの中身を確認するコマンドです。

#### 使い方
* オプション l を使うことで権限や作成日時を確認することができます。
* オプション a を使うことで.で始まる隠しファイルを確認することができます。

```
$ ls -l
-rw-r--r-- 1 user staff 10235 10 13 11:46 ls.txt
```

### 2位 cd
カレントのディレクトリを変更するコマンドです。

#### 使い方

```
# ホームへ移動
$ cd ~
```

### 3位 vi
テキストを編集するコマンドです。

#### 使い方
[vi vim を初めて使う人の為のとりあえずの手引](http://qiita.com/tailup0/items/357811d2d904d31ef319)

### ４位 open
指定ファイルをいい感じのアプリで開いてくれるコマンドです。

#### 使い方

```
# xcodeで開いてくれます。
$ ls
sampleApp.xcodeproj
$ open sampleApp.xcodeproj
```

### 5位 rm
指定ファイルを削除(remove)するコマンドです。

#### 使い方
* オプション r を使うことでフォルダごと削除することができます。

```
$ rm rm.txt
$ rm -r rm/
```

### 6位 mv
指定ファイル、ディレクトリを移動(move)・名前変更するコマンドです。

#### 使い方

```
$ mv before.txt after.txt
```

### 7位 find
ファイルを探すためのコマンドです。

#### 使い方
* オプション name を使うことで指定した名前のファイルを探すことができます。
* アスタリスクはワイルドカードになります。
* サブディレクトリ内も全て検索します。

```
$ find ~/ -name find.txt
```

### 8位 grep
指定した文字列が含まれているファイルを検索するコマンドです。

#### 使い方
* オプション r を使うことで指定したフォルダ内のファイルを検索することができます。

```
$ grep hoge grep.txt
$ grep -r hoge grep/
```

### 9位 cat
指定したファイルの中身を出力するコマンドです。

#### 使い方

```
$ cat cat.txt
cat
cat
cat
```

### 10位 cp
ファイルをコピーするコマンドです。

#### 使い方
* オプション p を使うことで権限もコピーすることができます。
* オプション r を使うことでフォルダごとコピーすることができます。

```
$ cp -p hoge.txt hoge_cp.txt
```

### 11位 which
コマンドのバスを表示します。

#### 使い方

```
$ which cat
/bin/cat
```

### 12位 mkdir
フォルダを作成する(make directory)コマンドです。

#### 使い方
* オプション p を使うことでサブディレクトリもまとめて作成することができます。

```
$ mkdir -p mkdir01/mkdir02
```

### 13位 pwd
カレントディレクトリを表示するコマンドです。

#### 使い方

```
$ pwd
/hoge/hoge
```

### 14位 unzip
zipを解凍するコマンドです。

#### 使い方

```
$ unzip hoge.zip
```

### 15位 diff
ファイルの差分を表示します。

#### 使い方

```
$ diff hoge.txt fuga.txt
27,39d17
< fuga
```

### 所感
結構無駄が多そう。。。

### 参考
[ジーライブ　ブログ](http://blog.geelive-inc.com/archives/88)
Xilinx ISE向け.gitignoreファイル

# 概要
Xilinx ISE向けのGit用.gitignoreファイル，検索しても公式のはひっかからなかった．
よそのGit HUBで使ってるファイルは見つかるものの，使ってみると，どうもいまひとつ．
Xilinx Vivado用の[サンプルファイル](http://japan.xilinx.com/support/answers/61232.html)が，XilinxのWebサイトで配布されていたので，これを元に構成．

# ISE向け.gitignoreファイル
## サンプルファイルからの変更点
サンプルファイルに対して，次のファイルを管理の対象として追加．

- *.xco
    - IPコア用ファイル
- *.xise
    - ISEプロジェクトファイル
- *.ucf
    - 制約ファイル

これらのファイルがあれば，クローンしたプロジェクトは異状無く開いてくれると思う．
Vivado用なので，ISEでは不要な記述もありそうだが，そこはあえて見なかったことにしておく．

## 作った.gitignoreファイル
```awk:.gitignore
#########
#Exclude all
#########
*
!*/
!.gitignore
###########################################################################
##	VIVADO
###########################################################################
#########
#Source files:
#########
#Do NOT ignore VHDL, Verilog, block diagrams or EDIF files.
!*.vhd
!*.v
!*.bd
!*.edif
#########
#IP files
#########
#.xci: synthesis and implemented not possible - you need to return back to the previous version to generate output products
#.xci + .dcp: implementation possible but not re-synthesis
#*.xci(www.spiritconsortium.org)
!*.xci
#*.dcp(checkpoint files)
!*.dcp
!*.vds
!*.pb
#All bd comments and layout coordinates are stored within .ui
!*.ui
!*.ooc
!*.xco
#########
#System Generator
#########
!*.mdl
!*.slx
!*.bxml
#########
#Simulation logic analyzer
#########
!*.wcfg
!*.coe
#########
#MIG
#########
!*.prj
!*.mem
#########
#Project files
#########
#XPR  +  *.XML ? XPR (Files are merged into a single XPR file for 2014.1 version)
#Do NOT ignore *.xpr files
!*.xise
!*.xpr
#Include *.xml files for 2013.4 or earlier version
!*.xml
#########
#Constraint files
#########
#Do NOT ignore *.xdc files
!*.xdc
!*.ucf
#########
#TCL - files
#########
!*.tcl
#########
#Journal - files
#########
!*.jou
#########
#Reports
#########
!*.rpt
!*.txt
!*.vdi
#########
#C-files
#########
!*.c
!*.h
!*.elf
!*.bmm
!*.xmp
```

## メモ
コード表示のフォーマットは，とりあえず，awkにした．
ncdump > 複数ファイルの処理 > ncdump [複数ファイル] はダメ / xargsもダメ > forで回す

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

WRF(Weather Research and Forecasting Model)関連。

処理結果で作成されたNetCDFファイルの情報を読むためncdumpを使おうとしていた。

```
$ ncdump -h wrfout_d01_2014-11-01_00\:00\:00 | grep Time | head -n 3
	Time = UNLIMITED ; // (49 currently)
	char Times(Time, DateStrLen) ;
	float XLAT(Time, south_north, west_east) ;
```

上記のように１つのファイルを指定する場合は問題ない。

複数ファイルにした場合、以下となった。ncdumpコマンドは複数ファイルの入力には対応していないようだ。
参考 http://stackoverflow.com/questions/37083194/for-loop-over-files-to-perform-ncdump

```
$ ncdump -h wrfout_d0*
ncdump [-c|-h] [-v ...] [[-b|-f] [c|f]] [-l len] [-n name] [-p n[,n]] [-k] [-x] [-s] [-t] [-w] file
  [-c]             Coordinate variable data and header information
  [-h]             Header information only, no data
  [-v var1[,...]]  Data for variable(s) <var1>,... only
  [-b [c|f]]       Brief annotations for C or Fortran indices in data
  [-f [c|f]]       Full annotations for C or Fortran indices in data
  [-l len]         Line length maximum in data section (default 80)
  [-n name]        Name for netCDF (default derived from file name)
  [-p n[,n]]       Display floating-point values with less precision
  [-k]             Output kind of netCDF file
  [-x]             Output XML (NcML) instead of CDL
  [-s]             Output special (virtual) attributes
  [-t]             Output time data as date-time strings
  [-w]             Without client-side caching of variables for DAP URLs
  file             Name of netCDF file
netcdf library version 4.1.1 of Jan 30 2014 05:31:22 $
```

xargsを使っても同じ。

forで回すことで見たい情報が見れるようになった。入力が面倒ではある。

```
$ for dd in $(ls wrfout_d0*);do ncdump -h $dd | grep Time | head -n 3;done
```
[Linux][Jenkins] 実行時にJenkins環境か否かを判定する

各自のローカル環境でも実行する、かつJenkins環境でも実行する共通スクリプトがある場合の判定方法
やることは単純で、Jenkins環境（Jenkins user）で必ず設定される環境変数 `JENKINS_HOME` を確認すれば良い

```bash:Jenkins環境かの判定
if [ ! -z ${JENKINS_HOME} ]; then
	# Jenkins環境時のみ実行する処理
fi
```
CakePHP3メモ

すぐ忘れてしまうものをメモっておきます。


# デバッグログ
コントローラーでdebugログを出力したい場合です。`$this->log();`を使用します。

```php:
$this->log("This is debug log", "debug");
```

ログが `app/logs/debug.log`に書き込まれます。

```bash:書き込まれたログを確認
tail -f app/logs/debug.log 

2016-11-14 03:01:17 Debug: This is debug log
```
ログが出力されました。

変数を表示する場合は、`$this->log();`に変数を渡します。

```php:
$data = ["user_id" => 10];
$this->log($data , "debug");
```

```bash:書き込まれたログを確認
tail -f app/logs/debug.log 

2016-11-14 03:01:17 Debug: Array
(
    [user_id] => 10
)
```
debug.logに変数が表示されました。
rspecでコード上の間違った記述などをチェックする

## 間違った記述に対してのチェック
### 経緯
railsでasset_syncを使って、cloudfrontなどで静的ファイルの配信をしている時に、
ローカルやステージングで、画像パスを"../about/tile.png"など相対パスで書いてしまう人がいて
リリース前の確認環境になってやっと気づいたり、気付かずにリリースして問題になることが多々あった。

### どうするか
git grepして対象の記述があれば注意するという人間ができそうなフローを、
rspecで自動化する。
参考[コードを改善する3つの方法](http://qiita.com/sinsoku/items/133c1930cd4ba23d9044)


```spec/original_spec.rb
require "rails_helper"

describe "間違ったpathの記述がない" do
  context "css編" do
    let(:target_path) {"app/assets/stylesheets"}
    it "./ ←こういうpathの記述だめだって！！もう！！" do
      pattern = "./"
      expect(git_grep_e(pattern, target_path)).to be_empty
    end

    it "image-url って記述つかってよね もう！！" do
      pattern = "background-image:url"
      expect(git_grep_e(pattern, target_path)).to be_empty
    end
  end
end
```

```spec/support/git_grep.rb
module GitGrep
  def git_grep_e(pattern, *path)
    cmd = "git grep --line-number -e '#{pattern}'"
    cmd = "#{cmd} -- #{path.join(" ")}" unless path.empty?
    `#{cmd}`.split("\n")
  end
end
```

```spec/rails_helper.rb
RSpec.configure do |config|
  # ↓追記
  config.include GitGrep
end
```

### 表示
- 該当するファイル名や行数も表示されて修正個所も分かりやすい

![image](https://qiita-image-store.s3.amazonaws.com/0/31015/119e29cb-cf7d-c1bf-bcad-f279c4bc900c.png)


### まとめ
git grepできるものなら何でもチェックできそう。
ご判定があったら、white_list的なものを定義してやればなんとかなりそう。
例ではcss周りをやっているけれど、
`rubocopなどにルールはないけど、独自のコーディング規約のチェックをしたい！`
なんて時にも使えそう。
RSpecでFactoryGirlの記述は省略するとかも。

## 参考URL
[コードを改善する3つの方法](http://qiita.com/sinsoku/items/133c1930cd4ba23d9044)
Apple Pay アプリ開発、その前に

# Apple Pay In The Real World
*[PAY Conference \#02](http://base.connpass.com/event/43547/) のための投稿です*

## 概要

- Apple Payを使った支払い機能の実例を紹介
- どんなアプリ・サイトが実現できるのか
- 開発のためのPAY.JP iOS SDKの紹介

## 世間のApple Payのイメージ

<img src="https://cloud.githubusercontent.com/assets/39830/20255147/b97e62d2-aa7d-11e6-9e60-e640c1ba41e5.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255351/3d4f81b2-aa7f-11e6-97a6-c77a8d45bbf6.png" height=300>

- SuicaやクレジットカードがiPhoneを通じて利用できる
- iPhoneのWalletシステムに登録
- 電車やコンビニ、飲食店の支払い

## アプリ開発から見たApple Pay

<img src="https://cloud.githubusercontent.com/assets/39830/20255375/725f7290-aa7f-11e6-8b98-e4a7b7e26b29.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255394/85825f40-aa7f-11e6-8d95-d2863c635385.png" height=300>

- Walletに登録されたクレジットカードで支払い
- iOSアプリ、Webサイト(Safari)の決済手段の1つ

## App Storeアプリ内課金との違い

- 対面決済の延長線上
- クレジットカードの代り
- 現実世界の商品やサービス

## Apple Payで支払いできるもの

- 現実世界の商品やサービス
- ECサイト、タクシー、チケット

## ECサイト(BASE)

<img src="https://cloud.githubusercontent.com/assets/39830/20255416/aa7d2a32-aa7f-11e6-911d-b7e1d0422217.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255417/aa7e3c88-aa7f-11e6-9356-7939761cf540.png" height=300>

## タクシー(全国タクシー、Uber)

<img src="https://cloud.githubusercontent.com/assets/39830/20255434/ceb72fce-aa7f-11e6-89bf-49ef60582886.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255435/ceb83162-aa7f-11e6-931f-101613dd46fd.png" height=300>

## チケット、デリバリー(TOHO CINEMAS、出前館)

<img src="https://cloud.githubusercontent.com/assets/39830/20255460/121d90f0-aa80-11e6-9f92-e02b0732e201.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255465/18332cc0-aa80-11e6-8013-cf133329098e.png" height=300> 

## Apple Payで支払いできないも

- デジタルコンテンツ
- ポイント、アイテム、プレミアムアカウント

## 例: モンスターストライク、少年ジャンプアプリ

<img src="https://cloud.githubusercontent.com/assets/39830/20255476/3ab1a2fe-aa80-11e6-8186-68acf29884d1.png" height=300> <img src="https://cloud.githubusercontent.com/assets/39830/20255477/3ab2d872-aa80-11e6-90d1-f509bd42519b.png" height=300>

## Apple Pay支払い導入のメリット

- アプリ内課金では取り扱えない商品の支払い
- サービスごとのユーザー登録・情報入力が不要

## PAY.JP iOS SDK

- Apple公式に認定された決済プロバイダ
    - https://developer.apple.com/apple-pay/
- iOSアプリへの組み込みのドキュメント
    - https://pay.jp/docs/apple-pay
- GitHub上でSDK、サンプルアプリを公開
    - https://github.com/payjp/payjp-ios
    - https://github.com/payjp/apple-pay-example

## まとめ

- Apple Payは「現実の」アイテムをユーザーへ販売する手段
- 電車やコンビニで利用している決済をアプリからそのまま使えるのが強み
- PAY.JPなら公開SDKですぐに開発をはじめられます

## 参考情報

- [Apple Payアプリ開発入門（1）：ついに日本対応開始！ 開発者が知っておきたいApple Pay決済アプリの仕組みとPassKitの使い方 \(1/3\) \- ＠IT](http://www.atmarkit.co.jp/ait/articles/1610/26/news018.html)
- [\[iOS 10\] アプリを Apple Pay に対応させるために必要な実装について ｜ Developers.IO](http://dev.classmethod.jp/smartphone/iphone/ios-10-applepay-for-developers-3/)
- [日本でのApple Payローンチパートナーに選ばれたminneアプリの開発秘話 - ペパボテックブログ](http://tech.pepabo.com/2016/10/28/apple-pay-in-japan/)
【php】アップした画像をとことん調べる(画像アップロードにおけるセキュリティ対策)

pngとjpegしか、アップさせないサーバ側のコードを書いてみました。

要は画像の拡張子と中身のチェック、トーコンチェック、画像を２変換して、リスクのあるコードを実行させないような処理。

Laravelを使ってるので、書き方が普通のPHPと少し違います。

```php
//Fileの中身をチェックし、画像ファイルかどうかを検証する
if(count($_FILES) != 0)
{
    $file = request()->file('files')[0];

    $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG);
    $detectedType = exif_imagetype($file);//普通のphp:exif_imagetype($_FILES['files']['tmp_name'][0]);

    $originalFileName = $file->getClientOriginalName();//普通のPHPだと：pathinfo($_FILES['files']['name'][0], PATHINFO_FILENAME);
    $extension = $file->getClientOriginalExtension();//普通のPHPだと：$array = explode('.', $_FILES['files']['name'][0]);$extension = end($array);

    if(!in_array($detectedType, $allowedTypes)) {
        header('Content-Type: application/json; charset=UTF-8');
        die(json_encode(array('message' => 'FormatErr')));
    } else {
        $regexPNG = '/png$/i';
        $regexJPG = '/jpe?g$/i';

        if((preg_match($regexPNG,$extension) && ($detectedType != 3)) || (preg_match($regexJPG,$extension) && ($detectedType != 2)))
        {
            header('Content-Type: application/json; charset=UTF-8');
            die(json_encode(array('message' => 'ExtensionErr')));
        }
        if (!preg_match('/\.(jpe?g|png)$/i', $_FILES['files']['name'][0])) {
            header('Content-Type: application/json; charset=UTF-8');
            die(json_encode(array('message' => 'ExtensionErr')));
        }

        // 画像アップロード・表示用のストレージ
        $imageFolder = ("abcde/");

        //重複しないファイル名を生成する
        $filename = $なんちゃらid . '_' . count($this->storage->files($imageFolder)) . '.' . $extension;//「storage」のはLaravelの書き方

        if (count(token_get_all($file)) >= 2)  {
            header('Content-Type: application/json; charset=UTF-8');
            die(json_encode(array('message' => 'ExtensionErr')));
        }

        //画像を二変換する 参考記事：https://blog.ohgaki.net/c_ra_a_a_ia_ca_la_lphpa_sa_fa_a_a_a_effa
        if (preg_match($regexPNG,$extension)) {

            //一回目
            $imageTmp1 = imagecreatefrompng($file);
            ob_start();
            imagejpeg($imageTmp1);
            $outputImage1 = ob_get_clean();
            imagedestroy($imageTmp1);

            //二回目
            $imageTmp2 = imagecreatefromstring($outputImage1);
            ob_start();
            imagepng($imageTmp2);
            $outputFinal = ob_get_clean();
            \Storage::put($imageFolder. $filename, $outputFinal);//Laravelの書き方

            //imagepng($imageTmp2, imageFolder. $filename, 0);//普通のPHPの書き方、直接ファイル出力したいところに置く。

            imagedestroy($imageTmp2);

        } else if (preg_match($regexJPG,$extension)) {//省略

        }

        //正常アップロード
　　　　　　　　　　　　　　　　return response()->json(array());//普通のPHP：header('Content-Type: application/json; charset=UTF-8');echo json_encode(array());
        
    }
}
```
[Xcode8.1]MPMediaPickerControllerが使えない？

Xcode8.1 Swift3環境にて。

```[SDKLibrary]  MPMediaPickerController must be presented modally```
となりiTunes画面を開いても強制的に戻されてしまう。

ログにはこのように吐かれるけど、
対処法としてはアプリの.plistに
```Privacy - Media Library Usage Description```

の追加で使えるようになる。
新しくなったPrivacy周りですね。


その他にも撮影だったり録音だったりの機能を使う場合は用途に応じて

・Camera Usage Description
・Microphone Usage Description
・Photo Library Usage Description

なども指定しましょう。
これらのKeyに対して指定したValue(文言)はアプリ内でユーザーに対して表示するものになるので、アプリの雰囲気にあった文言にしたいところですね。

詳しくはこちら
[[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです](
http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)
Strikinglyのサイトにドメインを設定する

Strikinglyで「http://yourdomain.com」というドメインでサイトを作りたいとします。

#前提
・ドメインを既に購入済み
・StrikinglyのPro版もしくはLimited版に登録済み

#設定する内容
・URL転送設定（http://yourdomain.com を http://www.yourdomain.com に転送する）
・DNSの設定(CNAMEでwww.yourdomain.comの値をdns.strikingly.comに設定する)

#流れ
※お名前.comでの例です。
※お名前.comにはstrikinglyに簡単に設定できる機能がありますが、ここでは敢えて手動でやります。

##URL転送設定
①オプション設定→URL転送設定
![スクリーンショット 2016-11-14 11.27.43.png](https://qiita-image-store.s3.amazonaws.com/0/86468/29384ed1-0fd0-c1c9-3533-c7b75a551444.png)

②設定したいドメインを選択
![スクリーンショット 2016-11-14 11.28.13.png](https://qiita-image-store.s3.amazonaws.com/0/86468/9d37d428-c03e-c246-5d0f-9489d9aa1759.png)

③転送設定をする
・転送元：http://yourdomain.com
・転送先：http://www.yourdomain.com
・転送タイプ：リダイレクト（フレーム転送では上手く行きません）
ちゃんと確認画面へ進んで変更内容を確定させるのを忘れずに

![スクリーンショット 2016-11-14 11.28.54.png](https://qiita-image-store.s3.amazonaws.com/0/86468/176b23d9-b2ed-55cb-0141-289348f00615.png)
![スクリーンショット 2016-11-14 11.30.01.png](https://qiita-image-store.s3.amazonaws.com/0/86468/680a9292-891d-62b4-b3f4-345bad1bb4c3.png)

##DNS設定
①ドメイン設定→DNS関連機能の設定→DNSレコード設定
![スクリーンショット 2016-11-14 11.30.16.png](https://qiita-image-store.s3.amazonaws.com/0/86468/c8b79ed1-9039-e1dd-6292-bc0ac2a7c262.png)

![スクリーンショット 2016-11-14 11.30.27.png](https://qiita-image-store.s3.amazonaws.com/0/86468/3585a8bb-c6a9-d334-65aa-f80370d57e3f.png)

![スクリーンショット 2016-11-14 11.31.10.png](https://qiita-image-store.s3.amazonaws.com/0/86468/3c258bab-451c-32b9-bc7c-54e967185e27.png)

②DNSを設定する
・ホスト名：www
・TYPE：CNAME
・VALUE：dns.strikingly.com
設定したらちゃんと確定させるのを忘れずに

![スクリーンショット 2016-11-14 11.33.07.png](https://qiita-image-store.s3.amazonaws.com/0/86468/740763a1-c6bd-99a7-154c-ceabe55065d9.png)

ここまでできたら、Strikingly側にドメインを設定します。
##Strikingly側の設定
設定→ドメイン
カスタムドメインの欄に、yourdomain.comを入力して「更新」ボタンをクリック
正常ならば更新ボタンの隣に「ドメインが有効です」と表示される
![スクリーンショット 2016-11-14 11.33.51.png](https://qiita-image-store.s3.amazonaws.com/0/86468/56da28a1-f074-4418-df7e-46153b054609.png)

![スクリーンショット 2016-11-14 11.34.04.png](https://qiita-image-store.s3.amazonaws.com/0/86468/7ad50fc9-32e2-aaad-9434-0438595a442b.png)
PLAYCANVASでローンチしたら、どういうファイル構成になるのか

PLAYCANVASでローンチしたら、ページのソースが見れなかったので、ごそごそ掘ってみた。

※ダウンロードできれば、こんなことしないで済むのに．．．
![image3.png](https://qiita-image-store.s3.amazonaws.com/0/130771/555fe982-5eda-c8b9-1056-344585f9fec6.png)


# ファイル階層
こんな感じの階層になっていた。

```
top
 +- playcanvas.com
     +- api/assets/files
     |   +- UserCreate.js?id=0000000
     +- editor/scene
         +- 000000
         |   +- launch
         +- css
         |   +- launch.css
         +- js
             +- realtime
             |   +- sockjs.0.3.4.min.js
             +- events.js
             +- launch.js

(no domain)
 +- (index)

code.playcanvas.com
 +- ammo.dcab07b.js
 +- playcanvas-stable.js

msg.playcanvas.com
 +- messenger.js

s3-eu-west-1.amazonaws.com
 +- static.playcanvas.com
     +- images
     |   +- icons/fa/16x16
     |   |   +- remove.png
     |   +- play_text_252_white.png
     +- platform/images
         +- loader_transparent.gef
```

## top
なお、「UserCreate.js?id=0000000」は、自分でAssetsに追加したJavaScriptで、個別のIDが振られている。
また、「editor/scene」の下の「000000」がなんだかは分からない。（ユーザIDでもプロジェクト番号でもない。ローンチごとに変わるということもない。）
その下の「launch」が、まさに表示されているメインのHTML（実際はファイルではなくサーバサイドで動的に作成されるコードと思われる）になる。
（ここにユーザIDなどの認証の情報や各JavaScriptへのリンクが含まれる）

「event.js」「launch.js」がメインの処理になると思われるが、まだ読み切れていないので、この辺りの詳細は次回以降に。

## (no domain)
(index)は、CSSっぽい内容になっている。
何ものかはよくわからない。
（ローンチ時に、最初に表示されるロゴとプログレスバーが絡んでいそう）

## code.playcanvas.com
物理エンジンである「ammo.js」と、PLAYCANVASのメイン処理（？）となるJavaScriptが含まれている。

## msg.playcanvas.com
sockjsなどを使用した通信関連の処理がMessengerという名前で設定されている。
そういえば、なんでsockjs本体は別の場所（realtime）にあるんだろう？

## s3-eu-west-1.amazonaws.com
AWS S3に画像ファイルが置かれている。
上記のファイル以外にもfavicon.pngも置かれている。

※余談だが、こういった知っている名前が出てくるとホッとする（笑）

# ファイルの分類
メインのHTMLから呼び出されるJavaScriptは、いくつかの種類に分類されている。

## engine
以下のファイルは「engine」という分類になっている。

- playcanvas-stable.js
- events.js
- messenger.js

## realtime
以下のファイルは「realtime」という分類になっている。

- sockjs.0.3.4.min.js

## main
以下のファイルは「main」という分類になっている。

- launch.js

# 今後
「event.js」「launch.js」の中をもう少し見ていこうかと思う。
また、assetsの中のファイルがどのように呼び出されるのかも確認したいと思う。
R: system関数の出力をオブジェクトに格納する

## Rを打ってるときにshellに🐸のがだるいです。 
そんなあなたにおすすめの記事です。Rのsystem関数を打って、たとえばシェルのlsの出力をRのオブジェクトへ代入するなんてことは普通にできそうなんですが、なぜかterminalのRで打つと**お漏らし**します（Rのコンソールに出力されてオブジェクトには格納されない）。

```
> data <- system("ls")　#dataオブジェクトにlsの結果をいれようとする
test.txt　#おもらし
> data #dataをたたいて中身をみる
[1] 0  

```

lsを処理するだけならlist.filesで取得しても良いのですが、Rオブジェクトに入っているファイル名を使い、そのファイルをawkでパースした結果をふたたびRに戻したりしたいわけです。ところが、上のようにsystem関数を用いてもdataオブジェクトに何も入りません。仕方が無いので、system関数のmanualをみると...  


```
Usage

system(command, intern = FALSE,
       ignore.stdout = FALSE, ignore.stderr = FALSE,
       wait = TRUE, input = NULL, show.output.on.console = TRUE,
       minimized = FALSE, invisible = TRUE)
```

**show.output.on.console**切ればいいんじゃね？と思った貴方、私と同類です。

```
> data <- system("ls",show.output.on.console=F)
 引数 'show.output.on.console', 'minimized' そして 'invisible' は Windows 専用です 
test.txt
> 
```

## このすっとこどっこいめ！！  

正解は、internでした。

```
> data <- system("ls",intern=T)
> data
[1] "test.txt"
> 
```
Makeのwildcardの出力はソートされない

Makefileの`wildcard`関数はパターンにマッチするファイル(あるいはディレクトリ)を列挙してくれます。
ファイル名をすべて書くのが面倒なときや`make`時にしか実際のファイル名がわからない時に便利です。

以下は`wildcard`関数の使用例です。.txtで終わるファイル（あるいはディレクトリ）を取得しFILESに代入しています。

```
FILES=$(wildcard *.txt)

all:
	@echo $(FILES)

```
この`wildcard`の結果はソートされていると思っていたのですが、実はそうではないことがわかりました。
例えば次のように.txtで終わるファイルがいくつかあるとします。

```
$ ls *.txt
a.txt b.txt c.txt 
```

ここで`make`を実行すると

```
$ make
c.txt a.txt b.txt
```
となりました。出力結果をソートしたいときは、以下のように`sort`関数を`wildcard`関数の結果に適用します。

```
FILES=$(sort $(wildcard *.txt))

all:
	@echo $(FILES)

```
Ubuntu Server に Samba を設定

# Ubuntu server に samba を設定

おもにココを参考
https://www.server-world.info/query?os=Ubuntu_14.04&p=samba


インストール

```
~# apt-get -y install samba
```

設定

```
~# mkdir /home/share 
~# chmod 777 /home/share 
~# vi /etc/samba/smb.conf

# 25行目：以下2行追記
unix charset = UTF-8
dos charset = CP932

# 30行目：必要があれば変更 (Windows側に合わせる)
workgroup = WORKGROUP

# 51行目：コメント解除しアクセス許可IP追記
interfaces = 127.0.0.0/8 10.0.0.0/24

# 58行目：コメント解除
bind interfaces only = yes

# 60行目：追記 (認証なし)
map to guest = Bad User

# 最終行に以下7行追記
[Share]    # テキトーに好きな名前指定
   path = /home/share       # 共有フォルダ指定
   writable = yes           # 書き込みOK
   guest ok = yes           # ゲストユーザーOK
   guest only = yes         # 全てゲストとして扱う
   create mode = 0777       # フルアクセスでファイル作成
   directory mode = 0777    # フルアクセスでフォルダ作成
   share modes = yes        # 複数人が同一ファイルに同時アクセス時に警告
```

samba 再起動

```
~# service smbd restart 
```
[Java][Spring Boot][JPA] テスト時にSQLをログ出力する ｰ NetBeansで始めるSpring Boot(8)

hibernateのログレベルを変更する設定ファイルを作成します。

```yaml:src/test/resources/application.yml
logging:
    level:
        org:
            hibernate:
                SQL: DEBUG
                type:
                    descriptor:
                        sql:
                            BasicBinder: TRACE
```

テストを実行すれば、その他のログと一緒にSQLが出力されます。

![Screenshot from 2016-11-14 11-10-12.png](https://qiita-image-store.s3.amazonaws.com/0/59475/dacf71be-4b3b-3c1f-96f0-f1f879fc3c01.png)

----

**2016/11/17追記**

設定ファイルを作成しなくても、テストクラスのアノテーションを変更するだけでいけました。


このようになっていたアノテーションを

```java:MyTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MyTest {
    // テストコード
}
```

このように`@DataJpaTest`アノテーションに変えるだけでした。

```java:MyTest.java
@RunWith(SpringRunner.class)
@DataJpaTest
public class MyTest {
    // テストコード
}
```

`@DataJpaTest`だけだと、バインディングされる値は出力されないので、それも見たいときは設定ファイルが必要です。

```yaml:src/test/resources/application.yml
logging:
    level:
        org:
            hibernate:
                type:
                    descriptor:
                        sql:
                            BasicBinder: TRACE
```




# 環境

- Spring Boot 1.4.2
- Java 8
AWS コマンドラインツールの利用

Ubuntu 14.04でAWSの
コマンドラインツールを使用する時の設定


##pythonが入ってるか確認
$ python --version
Python 2.7.6

入っていなければインストール
$ sudo apt-get install python2.7

##pipも入ってるか確認しましょう
$ pip --version
pip 8.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

pipが入っていなければインストール
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python27 get-pip.py

##pipでインストール
$ sudo pip install awscli

##インストール確認
$ aws --version
aws-cli/1.11.14 Python/2.7.6 Linux/3.13.0-95-generic botocore/1.4.71

ちゃんと入っています。

##AWSコマンドラインツールのヘルプ表示
$ aws help


参考
[Installing the AWS Command Line Interface](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)
PHPコードでキャッシュについて学んでみる


この投稿は[ブログ](http://takuseno.hatenablog.com/entry/2016/11/11/002307)からの転載になります。

### 次のコードで速いのはどちらだと思いますか？

Code A

```php
<?php
$a = [[]];
for ($i = 0; $i < 1000; ++$i) {
    for ($j = 0; $j < 1000; ++$j) {
        $a[$i][$j] = 1;
    }
}
```
Code B

```php
<?php
$a = [[]];
for ($i = 0; $i < 1000; ++$i) {
    for ($j = 0; $j < 1000; ++$j) {
        // flipped!
        $a[$j][$i] = 1;
    }
}
```
この記事を読めばなんとなくわかるようになると思います。

## はじめに
PHPや他のスクリプト系の言語はC言語と違ってメモリの管理について気にすることはほとんどないと思います。

C言語ではメモリを確保するところから解放するところまですべて面倒を見る必要がありますが新しい言語にはガベージコレクタが実装されているので確保したヒープメモリは変数への参照がなくなった時点で解放されます。

## 変数の値はどこにしまってあるのか
変数の値はどんな言語であろうとメモリに格納されます。メモリに乗り切らない場合はディスクに保存されます。メモリは複数の領域に別れており、

```
--------- 0xffffffff
 stack
---------
 heap
---------
 static
---------
 code
--------- 0x00000000
```
という感じになっています。右の16進数はメモリの場所を示すアドレスです。ここでは変数の値はあるアドレスの示す場所に格納されるということがわかれば大丈夫です。

CPUにとってボトルネックとなる処理はメモリへのアクセスとディスクへのアクセスです。メモリの読み込みと書き込み速度は近年急速に早くなったため、今メモリへのアクセスする速度を気にしている人はWeb界隈では特にいないと思います。

## キャッシュの登場
パソコンを買うとCPUのスペックのところにL1キャッシュやL2キャッシュという表記を見たことがあると思います。

実はCPUはキャッシュを持っていて、メモリの内容をキャッシュしています。これがL1キャッシュやL2キャッシュです。CPUがメモリへアクセスしようとするときに、キャッシュにすでに値があればメモリへアクセスせずキャッシュの値を利用します。これは書き込みの時でも同じです（write backなら）。

しかし、キャッシュは高速にアクセスできる代わりに非常に高価なので3MBや4MBほどしか持っていません。なのでCPUはあるルールに従ってキャッシュを更新していきます。

## キャッシュの特徴
キャッシュは次のことを想定しています。

- spatial locality
- temporal locality

まず`spatial locality`とは一度アクセスした変数が格納されているアドレスに近いアドレスにある変数にアクセスする可能性が高いということです。例えば最初に出てきたCodeAのように配列の値は連続したアドレスに保存されるため（PHPは厳密にそうかどうかは微妙）一度配列の値にアクセスするとその周辺のアドレスの値全てをキャッシュに格納します。

次に`temporal locality`とは一度アクセスしたアドレスには近いうちに再びアクセスする可能性が高いということです。コードを書くときに意識していると思いますが、一度定義した変数はその周辺で何度も使うことが多いと思います。なのでキャッシュを更新する際には最後にアクセスされたのがもっとも古いアドレスを新しくアクセスしたアドレスに置き換えます。

## 最初のコードを見てみる
まずCodeA,Bについて、自分のPC上（Macbook Pro Mid 2012, Intel Core i5, RAM 16GB）で実行した結果を示します。

```
$ php codeA.php 
0.061517953872681

$ php codeB.php 
0.12649202346802
```
なんと二倍も差が出ました！1000x1000の配列なんて普段あまりないとは思いますが、配列にアクセスする順番でこんなにも差が出るのは驚きだと思います。

では理由を考えてみましょう。

配列に一度アクセスすると`spatial locality`の考えによって、周囲のアドレスに格納されている値が決まったブロック単位でキャッシュされます。なのでCodeAでは一度配列にアクセスするとしばらくはアドレスが連続している配列の値を見に行っているのでメモリへのアクセスが少なく済んでいます。

一方、CodeBでは２次元配列を縦方向に走査しています。1000x1000の２次元配列は長さが1000000の１次元配列と見ることができます。なので毎回離れたアドレスの値にアクセスしに行ってしまっているので、キャッシュが利用されずメモリへのアクセス数が多くなってしまっています。

## まとめ
PHPの簡単なコードを通してキャッシュがパフォーマンスに与える影響が分かったと思います。普段意識しないキャッシュについて少しだけ理解を深めてもらえていれば嬉しいです。また、今回C言語ではなくPHPを選択した理由はより多くの人が簡単に読めると思ったからです。

より理解を深めたければ[パタヘネ](https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%A7%8B%E6%88%90%E3%81%A8%E8%A8%AD%E8%A8%88-%E7%AC%AC5%E7%89%88-%E4%B8%8A-%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%BBL-%E3%83%98%E3%83%8D%E3%82%B7%E3%83%BC/dp/4822298426)を読むのが一番いいと思います。
Biopyton からClustalW2を使って系統樹を作成する

Biopyton からClustalW2を使って系統樹を作成する方法について自分用にメモ．
といっても内容はほとんど[Biopython Tutorial and Cookbook](http://biopython.org/DIST/docs/tutorial/Tutorial.html)に書かれていることを日本語に訳しただけ．

# ClustalW2 をインストール
まず，ClustalW2 を[ダウンロード](http://www.clustal.org/clustal2/)する．Macの場合には.dmgをマウントして得られるbinファイルを/bin下に置く．

![スクリーンショット 2016-11-13 23.59.33.png](https://qiita-image-store.s3.amazonaws.com/0/133375/3c5e05b4-f61c-0283-08f0-5285a9b6c42e.png)

# 系統樹を作成したい株を用意する
次にClustalW2を使用する株のデータを用意する．今回は[メタリジウム](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%AA%E3%82%B8%E3%82%A6%E3%83%A0)(Metarhizium)の系統樹をRibosome biogenesis protein YTM1をもとに作成する．ファイルは[UniProt](http://www.uniprot.org/)からダウンロードした．
使用した株は次の通り．

- Metarhizium acridum (strain CQMa 102)
- Metarhizium anisopliae BRIP 53293
- Metarhizium guizhouense ARSEF 977
- Metarhizium album ARSEF 1941
- Metarhizium robertsii
- Metarhizium rileyi RCEF 4871

Basketに追加した後，FASTA形式でダウンロードする．今回はuniprot-yourlist.fastaという名前で保存した．

# BiopythonでClustalW2を実行する

用意した株のデータに対してBiopythonからClustalW2をかける．

```py
from Bio.Align.Applications import ClustalwCommandline

clustalw_cline = ClustalwCommandline("clustalw2", infile="uniprot-yourlist.fasta")
stdout, stderr = clustalw_cline()
```

するとuniprot-yourlist.alnとuniprot-yourlist.dndの2つのファイルが生成されている．そこでBiopythonのPhyloモジュールを使ってdndファイルの方を読み込み，系統樹を描く．

```py
from Bio import Phylo

tree = Phylo.read("uniprot-yourlist.dnd", "newick")
Phylo.draw(tree)
```

![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/133375/b80a2cb8-5a62-8b9a-54c2-7282e814b540.png)

draw関数の代わりにdraw_ascii関数を使うと系統樹をアスキーアートで出力してくれる．

```
  _ tr|E9E7T1|E9E7T1_METAQ
 |
 | , tr|A0A0D9P3B0|A0A0D9P3B0_METAN
 |,|
_||| tr|A0A0A1USL4|A0A0A1USL4_9HYPO
 ||
 || tr|A0A0B4H3C6|A0A0B4H3C6_9HYPO
 |
 |      ______________________________________ tr|A0A0B2X7N3|A0A0B2X7N3_9HYPO
 |_____|
       |______________ tr|A0A167BRY5|A0A167BRY5_9HYPO

Exited with code=0 in 1.1
```

# 参考文献
http://biopython.org/DIST/docs/tutorial/Tutorial.html

Peter J. A. Cock, Tiago Antao, Jeffrey T. Chang, Brad A. Chapman, Cymon J. Cox, Andrew Dalke, Iddo Friedberg, Thomas Hamelryck, Frank Kauff, Bartek Wilczynski, Michiel J. L. de Hoon: “Biopython: freely available Python tools for computational molecular biology and bioinformatics”. Bioinformatics 25 (11), 1422–1423 (2009). doi:10.1093/bioinformatics/btp163,

Eric Talevich, Brandon M. Invergo, Peter J.A. Cock, Brad A. Chapman: “Bio.Phylo: A unified toolkit for processing, analyzing and visualizing phylogenetic trees in Biopython”. BMC Bioinformatics 13: 209 (2012). doi:10.1186/1471-2105-13-209
Cognos BI をWindowsサーバーに導入した際のウィルススキャンS/W設定

Cognos BIをWindows ServerなどのWindows OS上で動作させる場合、環境に応じたVirus Scan S/Wの導入が必須になる事が多々あると思います。

Virus ScanのS/Wをただ入れるだけで、そのままでOKとしている環境は無いでしょうか。
Virus Scanの対象外にしなければいけないフォルダは、一番下のリンクにあるようにしっかりとガイドされていますので、ガイドに従って除外設定するようお願いします。

＜スキャン除外対象一覧＞
・Configuration
<c10_location>\configuration\

・Temporary files
<c10_location>\temp\

・Bin and Bin64
<c10_location>\bin and <c10_location>\bin64

・cgi-bin
<c10_location>/cgi-bin/

・Transformer Cubes
Example c:\Cubes\Current\

・Log files
<c10_location>\logs\

・Runtime-models
<c10_location> data\


【Technote:Which Cognos files need to be excluded from a virus scan?】
http://www-01.ibm.com/support/docview.wss?uid=swg21902712

Cognos Analyticsの場合のスキャン対象外設定は、以下の投稿をご参照下さい。
*Cognos Analytics をWindowsサーバーに導入した際のウィルススキャンS/W設定*
https://qiita.com/shinyama/items/f77524d1b84f3087d543
Outlook 2013 > メールリスト > メールごとに実線で分離する

```txt:動作確認
Outlook 2013 on Windows 8.1 pro
```

メールリストはデフォルトではメールごとの線はなく、これが読みにくいということを聞いた。

実線をつける方法を調べた。

- 表示タブ選択
- ビューの設定選択
- その他の設定(O)...選択
- 線とグループ名 > 線の種類 > 実線 にする
CORS紹介

#背景
* 現在のWebブラウザでは、[same-origin policy](https://www.rfc-editor.org/rfc/rfc6454.txt)(同一生成元ポリシー)が適用される

----
# CORSとは
* [Cross-Origin Resource Sharing](https://fetch.spec.whatwg.org/#http-cors-protocol)の略称
* CORSでは、データのアクセスを許可できるWebサイトに対してはOriginを越えたアクセスを可能になる

----
# HTTP requests
* Origin ヘッダーを含んでいる

### 例

```
Origin: http://localhost:9191
```


----
# HTTP responses
### 以下のヘッダーを含んでいる
* Access-Control-Allow-Origin
* Access-Control-Allow-Methods
* Access-Control-Max-Age

### 例

```
Access-Control-Allow-Origin: http://localhost:9191
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT
Access-Control-Max-Age: 1728000
```



----
# example


----
# クライアント側の対応(javascript)

```
function request(){
      $.ajax({
        type: "POST",
        url: "http://localhost:9292/index",
        dataType: 'json',
        success: function (data){
          alert("success");
        },
        error: function (data){
          alert("error");
        }
      })
    }
```


----
# サーバー側に、CORSを対応していない場合
* No 'Access-Control-Allow-Origin' header is present on the requested resourceエラーが出た
* サーバー側からレスポンスが戻ったが、ブラウザより禁止された

----
# サーバー側の対応(例：ruby)
* rackの場合は、以下のコードをconfig.ruに追加 

```
use Rack::Cors do
  allow do
    origins 'localhost:9191'
    resource '*', headers: :any, methods: [:get, :post, :options, :put]
  end
end
```
* レスポンスが２００戻った


----
# aws s3に、CORS対応
* バケットのプロパティ -> Permissions -> Edit CORS Configuration

```
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
```


----
# 参照
* [CORSまとめ \- Qiita](http://qiita.com/tomoyukilabs/items/81698edd5812ff6acb34)
* [CORS protocol](https://fetch.spec.whatwg.org/#http-cors-protocol)
* [Cross\-Origin Resource Sharing](https://www.w3.org/TR/cors/)
* [HTTP アクセス制御 \(CORS\) \- HTTP \| MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/HTTP_access_control)
WordPressで管理画面がタイムアウトされて表示できなくなるときにやったこと

## 状況
vccwで環境構築し、他のメンバーが開発中のWordPressのソースたちをgit cloneした。
WordPress本体画面は表示されるが管理画面に接続できない。タイムアウトのエラーが出ている。

```
ERR_CONNECTION_TIMED_OUT
```

本体の画面もCSSが適用されていない。パスがおかしいようだ。

Codexではよくあるエラーとされていて、以下の３点を確認するようにとしている。
> 1.プラグインが問題を引き起こしている
> 2.テーマが問題を引き起こしている
> 3.テーマのディレクトリが消えたかリネームされた

他のメンバーには起きていない現象なので、プラグインやテーマのせいではない。

VCCW環境に置いたことでディレクトリ構成が変わったことが原因と見た。

## 環境
Mac OS X
VCCW3
vagrant1.8.7

## やったこと

```
define('WP_SITEURL', 'http://vccw.dev');
```

wp-config.phpに上記コードを挿入したところリダイレクトしなくなり管理画面に接続できた。
ちなみに「wp-config.phpの上部に以下のような設定群を挿入して、本番環境とVCCW環境の切替をしやすいようにしておくと便利」なのだそうです！

参考
https://hiroki.jp/wordpress-develop-theme
https://php1st.com/826/
Outlook 2013 > 受信メールのプレビュー表示をやめる

```txt:動作環境
Outlook 2013 on Windows 8.1 pro
```

リスト表示されたメール毎に1行程度の内容が表示されるようになっている。

これを非表示にするには以下のようだ。

- 表示タブを選択
- [メッセージのプレビュー]をクリック
- [無効にする]を選択

これで件名だけの表示になる。

参考 http://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_outlook-mso_win10/outlook2016%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3/d562662f-947a-4f8a-8d37-0964b82ff5f1