OmniAICreator/Qiita-1.07M huggingface dataset:
10分で始めるReact.js(v.0.14.7)

これを見れば10分でReact.jsを体感できます。
なので導入するの大変そう、、時間ないしなぁ、、、と思っている方でもとりあえずどんなものか触ってみるだけならすぐにできるので是非お試しください。

# 0.React.jsとは
* React.jsはUIを構築するためのライブラリです。
* フレームワークでなくあくまでUIを構築するだけのライブラリで、MVCでいうところのVのみの機能を提供します。

# 1.react.jsを入手する
* react.jsはこちらから本家サイトから入手できます
    * [React Downloads](https://facebook.github.io/react/downloads.html)

# 2.コードを書く
```html
<html>
<script src="https://fb.me/react-0.14.7.js"></script>
<script src="https://fb.me/react-dom-0.14.7.js"></script>
<script src="http://fb.me/JSXTransformer-0.13.3.js"></script>

<div id="module"></div><!-- ←ここに埋め込まれる -->

<script type="text/jsx">
var Editor = React.createClass({
    getInitialState: function() {
        return {value: 'Type someThing here!'};
    },
    handleChange: function() {
        this.setState({value: this.refs.textarea.value});
    },
    render: function() {
        return (
            <div className="Editor">
            <h3>Input</h3>
            <textarea
            onChange={this.handleChange}
            ref="textarea"
            defaultValue={this.state.value} />
            <h3>Output</h3>
            <div
            className="content"
            dangerouslySetInnerHTML={{__html: this.state.value}}
            />
            </div>
    );
        }
});

// 0.1.13ではReact.renderだったが0.1.14からReactDOM.renderに変更になった
ReactDOM.render(<Editor />, document.getElementById('module'));
</script>
</html>
```
* とりあえずこちらをコピペしてもらえれば動くと思います。
* react.jsはfacebookさんのサイトにあるやつを参照しちゃいます。

# 3.ブラウザで確認
![react_sample.gif](https://qiita-image-store.s3.amazonaws.com/0/110485/0bd9465e-e6bc-0687-f793-8bea7a6f621f.gif)


# 4.以上です
* こんな感じで簡単に使えます。
* サンプルのように動的に値を変えるようなUIに便利です。

# その他
* もっと深くやりたい場合はリファレンスを見つつ色々調べてみるのがよいかと思います。
    * [Reactの日本語リファレンス](http://js.studio-kingdom.com/react)
* jsっぽく書いてあるやつはjsxと言われるfacebook独自の言語です。
* 上記ではreact.jsの他にJSXTransformerも読み込んでおり、リアルタイムにjsxをjsに変換して実行しています。
* 実際のサービスで使う場合にはパフォーマンスが悪いので一度jsx→jsにコンパイルしてから読み込むのよさそうです。
    * [react.jsのjsxファイルをjsに変換してみる](http://m-shige1979.hatenablog.com/entry/2015/12/24/080000)
* 基本的にはjsと同じ感覚で書けますがhtmlの部分で多少特殊な書き方な場合もあるのでそうゆうときはjsxコンバーターを使うとよいです。
    * [HTML to JSX Compiler](https://facebook.github.io/react/html-jsx.html)

# 参考
* [出来る限り短く説明するReact.js入門](http://qiita.com/rgbkids/items/8ec309d1bf5e203d2b19)
Elixir/Phoenix用のパッケージをローカルで開発/改修する場合はdepsで"path:"指定をすると便利です

例えばPhoenixのプロジェクトから使用することが前提のパッケージを開発/改修する場合、そのパッケージは専用のgithubリポジトリで管理することになると思います。

ここで、パッケージのアプリケーション名が"hoge"、githubリポジトリ名が"my/hoge"だとします。

開発中は当然Phoenixのプロジェクトからそのアプリケーションを参照して動作を確認しつつ作業を進めたいでしょうから、depsには下記のように書くことになると思います。

```ex
defp deps do
  [{:phoenix, "~> 1.1.4"},
  〜省略〜
  {:hoge, github: "my/hoge"},
  〜省略〜
end
```

しかし、depsの参照先がgithubのリポジトリになっていると、動作確認を行うためには、hogeに加えた変更を反映するために、毎回githubにpush -> `deps.unlock` -> `deps.get`という作業を繰り返さなければなりません。これは非常に面倒です。

こういったケースに対応するために、depsにはローカルディレクトリのパスを指定することが可能な`path`オプションが用意されています。

```ex
defp deps do
  [{:phoenix, "~> 1.1.4"},
  〜省略
  {:hoge, path: "/path/to/hoge"},
  〜省略〜
end
```

上記の`/path/to/hoge`に、githubの`my/hoge`リポジトリをpullしてそちらで改修を行えば、hogeをいちいちgithubにプッシュすることなく変更の確認が可能です。(Phoenixを再起動すれば、変更を検知して自動的にコンパイルを行ってくれます)
embulk-encoder-encrypted_zip: 出力ファイルを暗号化ZipにするEncoder Plugin


はじめに
===========

[Embulk](http://www.embulk.org/docs/) は「データ→変換→データ」なバッチ処理を簡単に実現するbulk data loaderです。

出力ファイルを暗号化Zipしたかったのですが、それらしい方法・Pluginが見つからなかったので作りました（再発明してたらやだなぁ・・・）。

Version
--------

* Embulk: 0.7.4, 0.8.6

で動作確認しています。

Code
-------

https://github.com/mokemokechicken/embulk-encoder-encrypted_zip

使い方
============

install
-----------

```
embulk gem install embulk-encoder-encrypted_zip
```

設定例
--------

encoder plugin なので、 `out` の配下に設定を書きます。

```yaml:config.yml
out:
  encoders:
    - type: encrypted_zip
      filename: 'result.%03d.%03d.csv'
      password: 'mypassword'
  type: file
  path_prefix: ./path/to/output/data
  file_ext: zip
  formatter:
    type: csv
```

* filename: Zipの書庫内のファイル名のパターンです。
* password: Zipの暗号化に使うパスワードです。


`config.yml` は `config.yml.liquid` とすると、環境変数などを埋め込めるのでその辺の組み合わせで使うと便利です。

参考) http://www.embulk.org/docs/built-in.html#using-variables

さいごに
=======

EmbulkのPluginは本当に簡単に作れるので凄いなぁ。
タイ文字は同じ形でも違う文字だと認識される

タイの文字は「子音→母音→声調記号」の順番で打っても「子音→声調記号→母音」の順番で打っても同じ文字が表示されます。でも内部的には違う文字になってるようです。

```.rb
"สั่" == "สั่" #=> true
"สั่" == "ส่ั" #=> false
```

…タイの文字処理関係ってどうしてるんだろう？
標準化するライブラリとかあるのかな。
R 複数列の型変換をまとめて行う方法

#複数列の型変換をまとめて行う方法
lapplyは、与えた複数の列に対してある関数をまとめて実行する関数です。

##1つの変数の型をfactorに変換する場合

```R:convert.R
df$var_1<-as.factor(df$var_1)
```


##複数列の変数の型をまとめてfactorに変換する場合
 以下は、データフレーム全てを対象とする場合です

```R:convert2.R
n<-ncol(df)
ix<-1:n
df.2<-lapply(df[ix],as.factor)
#確認
str(df.2)
```
JenkinsのDoxygen PluginによるDoxygenのパスはファイルの指定でいい

ちまたではシェルで行う方法ばかりで少し困った。

[Doxygen Plugin - Jenkins - Jenkins Wiki]
をインストールしたら、

 Jenkinsの管理 → システム設定
からOSにインストールしたDoxygenを参照できるようにするのだが、実行ファイルを指定すると警告が出る。


![doxygen.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/07ba2fec-0f11-2f30-3c45-1bc169d9855d.jpeg)

しかし、入力欄右側の![jojogole.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/a44b82d8-cee3-7c83-256e-02d0ed16cf6f.jpeg)を押せば説明が表示され、ディレクトリではなくファイルを入力することが正しいとわかる。

![doxygen_help.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/bfb3d050-52bb-17a9-4ac5-7b9c6ce07fd7.jpeg)

あとはプロジェクトのビルドでDoxyfileを指定しドキュメントを生成し、
ビルド後処理でもDoxyfileを指定すれば、Jenkinsからドキュメントを参照できるリンクが生まれる。

![doxygen_build.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/e54c481f-e9b7-8186-54af-664e8babc74c.jpeg)

![doxygen_link.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/79194676-0d8f-cebe-9d75-1ab1204fc5c7.jpeg)



[Doxygen Plugin - Jenkins - Jenkins Wiki]:https://wiki.jenkins-ci.org/display/JENKINS/Doxygen+Plugin
ORA-12547のエラーの対処方法

#ORA-12547のエラー
## RedHut 6.6 上に構築したOraclに接続した時に下記のようなエラーが発生した

```
ORA-12547 TNS:接続を失いました。
```

## 対処方法
ORACLE_HOME配下の特定のファイルのパーミッションが変更されていると、上記のようなエラーが出て切るみたいです。
この場合は、下記のようなコマンドを実行することで、解消されます。

```
# chmod 6751 /$ORACLE_HOME/bin/oracle
```
jqueryを使用してのカナ、かな欄の自動入力

#jqueryを使用してのカナ、かな欄の自動入力
氏名などの入力欄で「かな」欄がある場合に、漢字の方を入力するだけで「かな」欄も自動入力できるようにしたい。

##jquery.autoKana.jsのインストール
jqueryが使用できるプラグインで、使用方法も大変簡単なので導入してみる。
https://github.com/harisenbon/autokana
からダウンロードできます。
ダウンロードした「jquery.autoKana.js」を任意の場所に置きます。
ここでは「/public/js/common/jquery.autoKana.js」に設置したと仮定します。

肝は
`$.fn.autoKana('入力元', '自動入力先', {katakana : false});`
第三引数のkatakanaはデフォルトfalseです。false=ひらがなで true=カタカナで自動入力してくれます。

##使用方法
htmlに下記のように記載していきます。

```lang:hoge.html
<head>
　：
　：
<script type="text/javascript" src="/public/js/common/jquery.autoKana.js"></script>
　：
　：
　：
<script type="text/javascript">
<!--
jQuery(function($){
    $.fn.autoKana('#name', '#nameKana', {katakana : false});
});
-->
</script>
</head>
<body>
　：
　：
<form>
<label for="name">氏名</label>
<input type="text" id="name">
<label for="nameKana">氏名かな</label>
<input type="text" id="nameKana">
</form>
　：
　：
　
```

##問題点
下記のように色々ありますが、これらは仕方ないと思います。
１、全角カナ、半角カナ、ローマ字、コピペ、オートコンプリートの入力には非対応
２、氏名欄で漢字にした後に文字を削除した場合、かな欄への削除反映ができない。
ただし、全て削除した場合はかな欄も削除されます。漢字にする前の削除は反映されます。
３、氏名欄で入力した後にフォーカスを山|本にもっていって山山本とした場合、カナ欄は「やまやまもと」にならず「やまもとやま」となります。

以上
【concrete5】『さくらのレンタルサーバ』で、www付きのドメイン名でのみアクセス出来るようにする

さくらのレンタルサーバで独自ドメインを設定した際、標準では
http://tagworks.jp/
http://www.tagworks.jp/
上記どちらのURLでもアクセス可能です。

wwwなしのURLで統一したい時はコントロールパネルから設定が出来るのですが、www付きURLで統一したい場合は、下記にある通りmod_rewriteの設定が必要になります。

『wwwというホスト名の有無を統一する(上級者向け)』
https://help.sakura.ad.jp/app/answers/detail/a_id/2332/~/www%E3%81%A8%E3%81%84%E3%81%86%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%81%AE%E6%9C%89%E7%84%A1%E3%82%92%E7%B5%B1%E4%B8%80%E3%81%99%E3%82%8B(%E4%B8%8A%E7%B4%9A%E8%80%85%E5%90%91%E3%81%91)

ただ、concrete5でプリティーURLを設定した場合もmod_rewriteが設定されますので、『URLをwww付きで統一』かつ
『concrete5のプリティURL設定』という設定が両立可能か検証してみました。

```lang:.htaccess
        # -- concrete5 urls start --
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(tagworks\.jp)$ [NC]
RewriteRule (.*) http://www.tagworks.jp%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
        # -- concrete5 urls end --
```

Gist:
https://gist.github.com/kanetei/9fc7316259b9707afa0a


上記設定で、

- http://tagworks.jp/ にアクセス → OK
- http://tagworks.jp/test にアクセス → OK

と、問題なさそうなので、どちらの設定も両立出来ているようです。
（mod_rewriteの設定に明るくないので、これで本当に問題ないか自信がないですが……）
railsアプリとslackの連携&通知をする

railsで作ったブログやSNSで投稿があった時にslackに通知をする

自分のブログです。
<a href="http://chmod.tech/?p=611" target="_blank">railsアプリとslackの連携</a>

## 実装方法
slack-apiというgemを使う

## Gemfile
gem 'slack-api'を追加してbundle install

<h2>アクセストークンの取得</h2>
<a href="https://api.slack.com/web" target="_blank">https://api.slack.com/web</a>
下のボタンから生成する。

## 設定ファイル
```rb:config/initializers/slack_api.rb
require "slack"

Slack.configure do |config|
  config.token = "取得したトークン"
end
```
を新規作成
## 使い方
```rb
Slack.chat_postMessage(text: '新規投稿があります', username: '名前', channel: "#チャンネル名")
```
でチャンネルにusernameで指定したユーザー名で投稿される。

## 通知させる
ブログに新規投稿があったときに通知をさせる。
articles_controllerのcreateメソッドのsaveしたところに追加した。

```rb:articles_controller.rb
def create
    @article = Article.new(article_params)

    respond_to do |format|
      if @article.save
        format.html { redirect_to @article, notice: '作成しました' }
        format.json { render :show, status: :created, location: @article }
        Slack.chat_postMessage(text: '新しい投稿があるよ！『'+ @article.title + '』', username: 'blogbot', channel: "#blogs")
      else
        format.html { render :new }
        format.json { render json: @article.errors, status: :unprocessable_entity }
      end
    end
  end
```

<h2>参考サイト</h2>
<a href="http://chmod.tech/?p=611" target="_blank">railsアプリとslackの連携</a>
<a href="http://qiita.com/shizuma/items/19879ec0b5cc11ce1f79" target="_blank">Rails slack連携をしてみた</a>
react-fullstack を調べてみた

WEBフロントの開発環境を色々改めておりまして、今気になっているwebpack-dev-serverでHMRできるやつをyeomanで探してみました。現在generatorsの上位にある [koistya](https://github.com/koistya)氏の react-fullstack ([react-starter-kit](https://github.com/kriasoft/react-starter-kit)) が素敵だったので、気になったところだけピックアップして調べてみました。

# HMR (Hot Module Replacement) について
webpackにバンドルされているlivereloadみたいなやつです。
ファイルを編集するとブラウザに変更がリアルタイムで反映されるのはlivereloadと同じなんだけど、これはリロードさえせずに変更が反映され、まさに__ポルターガイスト現象。__
https://webpack.github.io/docs/hot-module-replacement.html

HMRだけのboilerplateは結構ある様ですね。いずれも開発時はwebpack-dev-serverか、独自にexpressを立ち上げるものが多いです。（webpack-dev-serverも内部はexpressらしい）

# CSS Modules(CSS in JS) について
以下の記事にwebpackのcss-loaderが実現する、cssグローバル汚染終焉が書かれております。
https://medium.com/seek-ui-engineering/the-end-of-global-css-90d2a4a06284#.u8gb3nobc

すごく良いんだけど、:local(.foo) っていうのがなんか回りくどい感じがしていたところ、react-fullstackに使われている isomorphic-style-loader でその回りくどさを払拭していた。react-fullstackと同じ作者。
https://github.com/kriasoft/isomorphic-style-loader

```ContactPage.js
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import s from './ContactPage.scss';
...
render() {
    return (
      <div className={s.root}>
        <div className={s.container}>
          <h1>{title}</h1>
          <p>...</p>
        </div>
      </div>
    );
  }
...
export default withStyles(ContactPage, s);
```

```ContactPage.scss
.root {
}
.container {
  margin: 0 auto;
  padding: 0 0 40px;
  max-width: $max-content-width;
}
```

```
<div class="ContactPage_root_c4z" data-reactid=".1c4vwf3rqww.1">
  <div class="ContactPage_container_2pQ" data-reactid=".1c4vwf3rqww.1.0">
    <h1 data-reactid=".1c4vwf3rqww.1.0.0">Contact Us</h1>
    <p data-reactid=".1c4vwf3rqww.1.0.1">...</p>
  </div>
</div>
```
scssのセレクタはすごくシンプルなのに、これでスタイルがあたるので驚き。吐き出されるセレクタ名書式はcss-loaderと同様、webpack.configのパラメータで設定できる。HMRとisomorphic-style-loaderどちらも開発中はexpressサーバで行うので任意のバックエンドを利用する場合は以下の記事を参照されると良いかと。

[webpackのHot Module ReplacementでWebフロントエンドを爆速開発](http://qiita.com/sergeant-wizard/items/60b557fc1c763f0a1531)
Processing開発環境設定メモ

GenerativeDesign日本語版出版記念でp5を再開してみる。個人用メモなので詳細割愛/後でわかったことを追加していく予定。

# atomをエディタとする開発環境構築
本家エディタはやっぱり使いづらいので別のエディタを使う。atomがいろいろと環境整っているのでatomを採用。

## CommandLineツールをインストール
Processing本体インストール後、`ツール`から`"processing-java"をインストール`を選択してCommandLineツールをインストール。

## atomのProcessing packageをインストール

packageを検索して`Processing`をインストールする。
https://atom.io/packages/processing

`ctrl + alt + b`でビルド可能。
`ctrl + alt + c`でビルドウィンドウを閉じる。

### ビルド時にエラーが出る場合
`Failed to spawn command processing-java. Make sure processing-java is installed and on your PATH`というエラーが表示される場合、実行パスがおかしい可能性があるので設定を追加する。
Atom→Open Your Init Scripでinit.coffeeを開き

```
process.env.PATH = ["/usr/local/bin", process.env.PATH].join(":")
```

を追加する。

### ログの出力など。
エラーやログはatomのウィンドウ下部に表示される。

### その他package
数はあまりないので手当たり次第入れておいて良いと思う。

ハイライト
https://atom.io/packages/processing-language

auto complete
https://atom.io/packages/processing-autocomplete

linter
https://atom.io/packages/linter-processing
SuperCSVで、和名ヘッダーのCSVからBeanをとりこむ

[Super CSVでBeanのリストを和名ヘッダーをつけてCSV出力](http://qiita.com/n_slender/items/e853f15045e3cc51792b) を以前書いて、入力のときに同じことができないかをやってみました。

結論としてはできます！ これで落ち着いてCSV生活がおくれるというものです。

# 補足

2020年6月時点ですが、supercsvは新しいメンテナーを探している状況です。
最初に作った人が、時間もとれなくなり、モチベーションも下がったとのことです。
詳細は[こちら](https://github.com/super-csv/super-csv/issues/47)。

このissueをみるに、立候補している人が最近出たようですが、どうなるか微妙です。
Javaのライフサイクルも変わったので、これから新しいプロジェクトに使うには躊躇うところです。
（結構使い勝手がよく、日本ではマッチするケースが多い気がするだけに、悩みどころです）


代替のライブラリとしては、[univocity_parsers](https://www.univocity.com/pages/univocity_parsers_tutorial) を見つけました。
サンプルコードもたくさん提供されています。

## 参考リンク


https://qiita.com/ksby/items/f5b2f0f04e2ba590d270



# 前提

Beanは次のようなものとします。getter,setterは省略しています。
読み取りの場合、setterは必須です。

```
 class User {
           /**
            * ユーザID
            */   
           private String id;
   
           /**
            * ユーザ名
            */ 
           private String name;

           /**
            * 削除フラグ
            */
           private boolean deleted;

           /* 中略 */ 
        }
```

また、和名からカラム名へ変換するメソッドを事前に用意します。

```
// サンプルなので、guavaつかってそれっぽいのを作成
// 実際には設定ファイルなどから生成をするのを想定
Map<String,String> converter = ImmutableMap.Builder()
                               .put("ユーザID", "id")
                               .put("ユーザ名", "name")
                               .put("削除フラグ", "deleted")
                               .build();

public String[] toPropertyHeader(String[] header, Map<String,String> converter) {
   /* converterをつかって、和名をカラム名に変化したarrayを生成 */
}

```

## サンプルコード

次のようなCSVをとりこむとします。

```user.csv
ユーザID,ユーザ名,削除フラグ
001,ユーザその１,false
002,ユーザ２,true
```

```
   File file = new File("user.csv");
   try(ICsvBeanReader beanReader = new CsvMapReader(new FileReader(file), CsvPreference.EXCEL_PREFERENCE)) {
            String[] header = beanReader .getHeader(true); // CSVの和名ヘッダーを取得          
            String[] propertyHeader = toPropertyHeader(header, converter); //和名ヘッダーをカラム名ヘッダーに変換

            User user;
            while((user= beanReader .read(User.class, propertyHeader)) != null) {
                Logger.info("user {}", user);
            }
        } catch (Exception e) {
            Logger.error("reading is failed.", e);
        }


```

ポイントなのは、getHeaderで取得したのを変換するところです。
readerは、ヘッダー内のカラムの順番で値を持っているので、実際に渡されたヘッダー内の順番を保持する必要があります。こうした場合、ヘッダーの中の順番をかえても、結果的には名前でマッピングされているので、正しくとりこめます。

# まとめ

Beanでやりました、Mapでもどうようのことができます。[公式サイト](http://super-csv.github.io/super-csv/examples_reading.html)をよく読んでみたら、

> This relies on the fact that the column names in the header of the CSV file

> 
```
customerNo,firstName,lastName,birthDate,mailingAddress,married,numberOfKids,favouriteQuote,email,loyaltyPoints
```
match up exactly with the bean's field names, and the bean has the appropriate setters defined for each field.

>If your header doesn't match (or there is no header), then you can simply define your own name mapping array.

とあるので、もとのヘッダーがカラム名になってなかったら、自分で用意できるよということですね。もっとはやく気がつけば...
Step Count for Groovy

takezoeさんのツールを使う。
https://github.com/takezoe/stepcounter

# 問題点
配布しているjarはGroovy非対応版

# 大雑把な手順
* 自分でビルドする
* 使う

# 必要なツール
maven
java (maven入っていればjavaも入っているはずですが念の為。。)

# ソース取得
* https://github.com/takezoe/stepcounter/archive/master.zip
(GitHubからzipダウンロード)
* 解凍する

# ビルド
```shell-session
cd stepcounter-master/core/stepcounter
mvn install -DskipTests=true
```

## ビルド成果物
target/stepcounter-3.0.4-SNAPSHOT-jar-with-dependencies.jar
これを適当なディレクトリにコピペする。

```shell-session
cp target/stepcounter-3.0.4-SNAPSHOT-jar-with-dependencies.jar ~/
```

# カウントする
```shell-session
java -cp ~/stepcounter-3.0.4-SNAPSHOT-jar-with-dependencies.jar jp.sf.amateras.stepcounter.Main src/main/groovy/
```
caseに書いたオブジェクトをwhenで使う


Rubyのcase式で「caseに書いたオブジェクトをwhenに使いまわせないのかなー」と思ってたのだけど、調べたらlambda使えばいいことがわかった。もっと早く気づきたかった

書き方は以下の通り

```ruby
case "foo"
when -> (str) { str.include? "f" }
  # 何か処理
end
```

caseでそれなりにメソッドチェーンしてwhenでも同じことして、とかやってる場合には使い回せるのは恩恵ありそう。
もっとテクニカルにやるならcurry化する方法もあるみたいだけど、そこまでやると読める人が少なくなるので趣味の領域っぽい
開発の進め方きめごと

チームで開発するので従ってもらう。
おかしいとおもったことやわかんないことはなんか書くなり聞くなりしてくだしあ

[PHP7 + Laravel で Restful API を爆速開発する](http://qiita.com/mayutan/items/2583f2880007bb76a520)
[PHP7 + Laravel で Restful API を爆速開発する 2](http://qiita.com/mayutan/items/45ba74e32736cc84ec63)
[PHP7 + Laravel で Restful API を爆速開発する 3](http://qiita.com/mayutan/items/7e202ece60f856a88ef7)
c++ builder / fileIO > TFile::Copy() > 259ファイル 11.903秒 > プログレスバーが必要

```txt:動作確認
C++ Builder XE4
Windows 7 pro 32bit (HDD)
```

`TFile::Copy()`を使ってファイルをコピーしたときの時間。
環境によって変化するので、だいたいの時間としてのメモ。

- 総ファイル数: 259ファイル
- 総容量: 88MB
- 時間: 11.9秒

だいたいこの12倍の処理を実装しようとしているので、プログレスバーの表示などは検討しないといけない。

.cppと.hだけで実装してきたが、UIが入るとなると.dfmが関わってくる。
ロジックだけの実装として、コピーファイルのTStringList[]を返すだけにして、返ったリストをプログレスバーとともに処理する、という仕組みにしておくと、ロジックとUIが分離できて使いまわししやすそう。
PHP7 + Laravel で Restful API を爆速開発する 3

今日はコントローラーの実装。
boards テーブルから全てのデータを返すAPIであって欲しい。

```
php artisan make:model Board
```

しかし、これで作成すると app/ 以下にモデルがずらーっと出来てしまう。ララベルの思想がまだいまいち分からないが、個人的に整理整頓してくなるので

```
php artisan make:model Models/Board
```

として、Models ディレクトリ以下にファイルが作成されるようにする。

```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Models\Board as Board;

class BoardController extends Controller
{
    function index() {
        $boards = Board::all();
        return response()->json($boards);
    }
}

```

実装したら

```
 ./vendor/bin/phpunit
```

でテストを実行する。

![スクリーンショット 2016-03-04 15.25.22.png](https://qiita-image-store.s3.amazonaws.com/0/6496/aedd0fa4-7757-e889-f5a9-09434dc3f709.png)

この用に、期待する結果から実装を決めていく。

(余談

Laravel には便利なコマンドラインツールが沢山くっついてて、tinker もかなり便利。これでためしてモデル実行しながらやるとスムーズ

```
php artisan tinker
>>> App\Models\Board::all();
=> Illuminate\Database\Eloquent\Collection {#645
     all: [
       App\Models\Board {#646
....
```
UITableViewCellとUICollectionViewCellのセル内のビューをセル領域外に表示する方法

普通のviewは`layer.masksToBounds`はデフォルトfalseだが、cellはデフォルトtrue。
falseにする。

```swift:collectionView.swift
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  let cell = collectionView.dequeueReusableCellWithReuseIdentifier("default", forIndexPath: indexPath) as! EmojiCategoryCollectionViewCell
  cell.layer.masksToBounds = false
  return cell
}
```
NSProgressIndicatorの使い方(Swift)


### 設定
```
progressBar.minValue = 0 //最小値の設定
progressBar.maxValue = 1 //最大値の設定
progressBar.doubleValue = 0.5 //現在の数値を設定
```

値が変わらない時は`performSelectorInBackground`で実行すると上手く動く。

```
//この関数で操作
func progress(value:Double){
	let num = NSNumber(double: value)
   	performSelectorInBackground("setProgress:", withObject: num)
}

//上の関数の中身
func setProgress(value:NSNumber){
	progressBar.doubleValue = value.doubleValue
}
```

## 色を変えてみる
UIKitのような`tintColor`のようなプロパティのでInterface Builderでエフェクト？をかける。
1. ProgressBarを選択
2. View Effects Inspector を選択
3. Content FilterにHue Ajustを追加
4. Angleを変えて好きな色が出るまで頑張る

ちゃんとした設定方法がよく分からないのでご存知のかた、教えて下さい。

![Screen Shot 2016-03-04 at 15.09.22.png](https://qiita-image-store.s3.amazonaws.com/0/68925/b6f1a656-8ec2-3e0c-e51d-90ed3f6daca2.png "Screen Shot 2016-03-04 at 15.09.22.png")
ブラウザ上でInstagram風の写真加工ができて、CSSが生成できるサイトをつくってみた。

# `filter` と `mix-blend-mode`
CSS3で実装された`filter`と`mix-blend-mode`を使用することでCSSのみで画像を編集できるようになりました。
というわけでinstagramみたいな画像編集をCSSだけでやってみました。

このゴールデンゲートブリッジを
![golden_gate_bridge_before.png](https://qiita-image-store.s3.amazonaws.com/0/63056/edbdf89f-f019-e231-343e-c44f3e36faf6.png)

こんな画像に
![golden_gate_bridge_after.png](https://qiita-image-store.s3.amazonaws.com/0/63056/7c386429-7932-991d-93f2-86ff1d68a7b2.png)

ロンドンの景色を
![london_tower_before.png](https://qiita-image-store.s3.amazonaws.com/0/63056/25265a1b-2f42-ea3c-229b-b1cdae1b9be1.png)
こんな画像に
![london_tower_after.png](https://qiita-image-store.s3.amazonaws.com/0/63056/80005777-03bc-850c-12b7-56677653eace.png)

これらはCSSのみで編集しています。

# CSS filter Generator
これは使える！ということで、Instagram風の写真加工ができるサイトをつくりました。
[http://www.sottar.net/filter-generator/](http://www.sottar.net/filter-generator/)

### 機能
- instagram風のfilterはプリセットで用意
- 細かい値の設定も可能
- CSSのコードが取得できる
- ローカルの画像アップロードできる
- ベンダープレフィックスにも対応
- 変更前と後を比べながら編集できる


まだまだ作成途中なので、こんな機能が欲しい！とか、ここが使いにくい！とかがあれば教えていただけると嬉しいです！

よかったら使ってみてください
[http://www.sottar.net/filter-generator/](http://www.sottar.net/filter-generator/)
iOS実機のSQLite DBの中身を確認する方法

# iOS実機のSQLite DBの中身を確認する方法

よく忘れるので忘備録的なメモです。

↓手順

1. XCodeのメニューからWindow→Deviceを起動
2. DEVICESから対象の端末を選択
3. Installed Appsから対象のアプリを選択しDownload Containerをクリック
![スクリーンショット 2016-03-04 15.02.23.png](https://qiita-image-store.s3.amazonaws.com/0/86259/63923d77-4ca4-a870-2dc1-a86163ab3f4d.png)
4. xcappdataというファイルがDLできるので右クリック→パッケージの内容を表示
![スクリーンショット 2016-03-04 15.10.50.png](https://qiita-image-store.s3.amazonaws.com/0/86259/13e8da3e-45a0-baa1-dffe-6cfcd7b58828.png)
5. AppData/Document/ 下にDBファイルがあります

あとはSqlitebrowserなどで開きます。
PHP7 + Laravel で Restful API を爆速開発する 2

# テストの書き方

 - テストファーストにこだわらなくても良い
 - けど新しいプロジェクトならテストファーストでもいい
 - とくにAPIの開発にはテスト書いたほうが楽


掲示板を見る機能

 - get でデータを取得する
 - データは json で返って来て欲しい。

```php:IndexTest.php
<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class IndexTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testGet()
    {
        $response = $this->call('GET', '/');
        $this->assertEquals(['title' => 'test', 'body' => 'hello'], $response->getContent());
    }
}

```

と、書いて実行。

![スクリーンショット 2016-02-19 16.50.58.png](https://qiita-image-store.s3.amazonaws.com/0/6496/0535e910-68a3-1b50-1a5f-b0a01b3a6b57.png)

当然のエラー。なぜなら何も実装してないから。そこで、このテストが通るように実装する。まずはコントローラーと呼ばれる部分に GET method を実装する。
Laravel ではルーティングは app/Http/routes.php に定義するらしい。

```php:routes.php
Route::get('/', 'BoardController@index');
```

routing に関して、[resource](https://laravel.com/docs/5.1/controllers#restful-resource-controllers) という一気に実装する関数があるようだ。特にアクションとメソッドのひも付けはドキュメントを参考にすること。ちなみに自分はどうしてもなじめないので一つずつ実装する。

そして対応するコントローラーを[ここを参考](https://laravel.com/docs/5.1/controllers#restful-resource-controllers)に作成する。

```
php artisan make:controller BoardController
```

app/Http/Controllers 以下に作成されたコントローラーに処理を実装していく。

```php:BoardController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class BoardController extends Controller
{
    function index() {
    }
}

```

ここで対象のテーブルを作る。

```
php artisan make:migration create_boards_table
```

database/migrations/ 以下に新しく 20016_hogehoge.php みたいなファイルができているはず。この中にスキーマを定義する。細かいことは[ここ](https://laravel.com/docs/5.1/migrations)を参照。

定義したら

```
php artisan migrate
composer dump-autoload
```

すること。とくに autoload に登録しないとクラスノットとか言われてストレスマッハになるので注意。

ついでにデータも作っておく database/seeds 以下に作るがこれだけ生成コマンドがないので DatabaseSeeder.php をコピペして適当に作る。Model を読むのを忘れないように。

```php
<?php

use Illuminate\Database\Seeder;
use App\Models\Board;

class BoardTableSeeder extends Seeder
{

    public function run()
    {
        DB::table('boards')->truncate();

        DB::table('boards')->insert([
            [
            'title' => 'test',
            'body'       => 'hello',
            'created_at' => '2001-11-30 00:00:00',
            'updated_at' => '2001-11-30 00:00:00',
            ],
            ]);
    }
}
```

さらに DatabaseSeeder.php に一行追加する。

```php
$this->call(BoardTableSeeder::class);
```

ここまでの準備で、テーブル作成からデータ投入までがコマンドでいつでもできるようになる。他のメンバーのことを考えてかならずこの手順を踏むこと。

で、実行。

```
composer dump-autoload
php artisan migrate:refresh --seed

```

次からは実際にコントローラーを実装する。
PHP7 + Laravel で Restful API を爆速開発する

# 政治的理由により、PHP7 を使うことになった。Laravel で開発することにした。

 - PHP7 と Laravel はすでにインストールされていることが前提。(なぜなら以前暇な時に適当に遊んで入れていたから。わかんない奴は[ここ](http://readouble.com/laravel/4/2/0/ja/quick.html)見る)
 - Laravel を使うということより、テストをきちんと書いて開発することが目的

```
laravel new board
```

とかすると新しいプロジェクトが作成できる。

```
php artisan serve
```

とすると PHP のサーバーが立ち上がる。時代が変わったことを痛感する。その状態で http://localhost:8000 にブラウザにアクセスすると、Laravel のかっこいいページが表示される。

<img width="200" alt="スクリーンショット 2016-02-18 20.24.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/6496/1666ee37-ad82-26f2-787e-9d8b56356bb1.png">

これで準備は整ったので、テストを書きながら開発していきたい。

## まず、ケースを想定する。

- 掲示板に必要な機能
   - 掲示板を見る
   - コメントを書く

以上から、まずは board というプロジェクトには get と post の機能が必要なことがわかる。

## そもそも Laravel のテストツールってなんなの？

[ここ](https://laravel.com/docs/5.0/testing) をみるとどうやら phpunit らしい。( vendor/ 以下をのぞいたら phpspec もあったので使えるのかもしれん)

board/tests 以下に ExampleTest.php というファイルがあるので、これをコピーして適当な名前にしてやる。で、とりあえず実行してみよう。

```
./vendor/bin/phpunit
```

結果は？

```
Fatal error: Cannot declare class ExampleTest, because the name is already in use in /Users/mayutan/workspace/board/tests/IndexTest.php on line 19
```

エラー。ではテストを直してみる。

```php:IndexText.php

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class IndexTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $this->visit('/')
             ->see('Laravel 5');
    }
}

```

7 行目のクラス名を IndexTest にしてやる。

![スクリーンショット 2016-02-18 20.56.27.png](https://qiita-image-store.s3.amazonaws.com/0/6496/cd24f215-cc61-e140-ce4c-8257e125e24e.png)

こんな感じでテストを追加していきながら開発していく。
まだSQL(SQLite)直書きで消耗してるの？


はじめに謝っておきます。タイトルに悪意はありません。ごめんなさい。
私自身SQLiteを直にいじる機会が多いですし・・・。SQL直に叩くの結構好きです。

今回は貴重なCoreData本が出たのでご紹介。
CoreDataは歴史が長いわりには専門に扱った書籍は思いの外少なく、日本語で書かれている書籍は数冊程度だと思います。  
そんなCoreData書籍冬の時代の中で、ほんの少しだけなのですが査読のお手伝いをさせていただいた、『Swift+Core DataによるiOSアプリプログラミング』という日本ではおそらく初めての、`Swiftを使ってCoreDataを解説` する書籍が、2016年02月27日に出版されました。
[Swift+Core DataによるiOSアプリプログラミング](http://www.amazon.co.jp/gp/product/4839954887/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4839954887&linkCode=as2&tag=banwankonet-22)(AA)
発売された書籍を早速読んでみたので紹介します。

# でもCoreDataって使う意味あるの？
永続的なデータを管理する場合、NSUserDefaultでいいっていう場合もあるでしょうが、まずDBを使いますよね？
DBを扱う場合、たいていは次の3つから選ぶかと思います。

* SQLiteをそのままいじる (FMDB含む)
* Realm
* CoreData

SQLiteをそのままという人はSQLをそのまま扱うので、SQLが好きな人。SQL構文を使わずデータをオブジェクトで扱いたい人は、Realm、CoreDataといったところでしょう。
最近ではRealmの勢いがすごく、CoreDataからRealmに変えたというデベロッパーの声も聞きます。
ではCoreDataはもう不要なのかというとそうではなく、むしろAppleが用意しているフレームワークだからこそのメリットもあります。
これからアプリを作成する上でDB操作をどのフレームワークを使うかで悩んだ際には、本書を読んでCoreDataの特性を理解した上で改めて考えるとよいでしょう。
私の印象ですが、CoreDataは複雑で取っつきにくい感じを持っていたのですが、それについては著者である西方さんも否定していないようで、本文中にこのように書かれています。

>「確かに複雑で扱いにくい点があることは否定できませんが、それでも、Core Dataを使うことで開発効率は格段に向上します。」
P.004 (1-2 Core Data の魅力)

具体例としてあげられている項目としては以下のものが書かれています。

* UI の更新と連動したオブジェクトの管理
* 変更の管理
* 検証とエラーハンドリング
* モデルエディタの使用
* パフォーマンスへの配慮
* 並列処理

読み進めていくと、他にもCoreDataでなければ難しいであろう点についてわかってきます。

# コードはすべてSwift

文中のコードは書籍タイトルのように、Swiftで書かれているのが1つ特徴としてあげられます。
Objective-Cの書籍はありますが、Swiftで書きたい場合に脳内で変換する必要があります。Swiftから入った開発者はObjective-Cのコードを見た時点で本を閉じてしまうかもしれませんが、Swiftで説明されている本書であれば安心です。
発売されたばかりということもあり、コードもそのまま使えるので便利です。

# iCloud共有

11章まではCoreDataの説明や、踏み込んだ効率化、応用などになっていて、ここまで読むと一通りCoreDataを使えるようになるのですが、12章ではさらにCoreDataでの強みであるiCloudの共有について1章使っています。
iCloudは常につながっているわけでもないですし、アカウントが変わってしまう場合もあります。さらにデータの衝突する可能性もあったりと、面倒ですが処理しなければならない（考慮しなければならない）事項がありますが、基本的にこれらをどのように処理をすればよいのか書かれているのはもちろんですが、

> 重複データ数が多くなることが予想されたり、バックグラウンドでの処理が望ましいケースなどでは、フェッチ時にバッチサイズ(fetchBatchSize)を設定して、バッチサイズごとにコンテキストを保存するなどの工夫が必要です。
P.384 (12-3 アカウントとデータの管理)

このようにヒントも書かれていて、CoreDataの強みをすぐに生かすことができると感じました。

# まとめ

CoreDataを使わず、SQLiteやORMを使っている人や、CoreDataを知らない人、自分のようにCoreDataに挫折（？）した人は、まず読んでみることをおすすめします。
意外とあっさりと”ああこうやればいいのか”という気づきがあると思います。
DBを扱うアプリを作成するのであれば、CoreDataを知る上でまさに買いであるといえるでしょう。

[Swift+Core DataによるiOSアプリプログラミング](http://www.amazon.co.jp/gp/product/4839954887/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4839954887&linkCode=as2&tag=banwankonet-22)(AA)

Swiftについては「Swift 2 標準ガイドブック」をどうぞ（宣伝）
* [Amazon (Kindle)](http://www.amazon.co.jp/gp/product/B016ZCZN1C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B016ZCZN1C&linkCode=as2&tag=banwankonet-22)
* [マイナビブックス (PDF)](https://book.mynavi.jp/ec/products/detail/id=44247)
* [達人出版会 (PDF)](http://tatsu-zine.com/books/swift2-hyojyun-guide)
Stethoをrelease時に使用しないようにする方法

注意
---
執筆時の最新バージョンは1.3.1です。

Stetho
---
[Stetho](http://facebook.github.io/stetho/)はFacebook製のデバッグ用ライブラリ。
使ってみるとかなり便利なのだが、[Leakcanary](https://github.com/square/leakcanary)と違って、リリース用のダミー実装がない。
`BuildConfig.DEBUG`で判断してやるのもいいが、JARのサイズも500KBあるので、無視できない。

というわけで、リリース用の実装方法を書いてみる。

リリース実装方法
---

簡単に言うと、Leakcanary同様に`release`ソースにダミーのStethoを実装してやればよい。

すでにStethoが実装されているアプリを前提に書く。

1. `build.gradle`の`dependencies`を`compile`から`debugCompile`に変更する。

    ```gradle:app/build.gradle
    dependencies {
        debugCompile "com.facebook.stetho:stetho:${versions.stetho}"
        debugCompile "com.facebook.stetho:stetho-okhttp3:${versions.stetho}"
        debugCompile "com.facebook.stetho:stetho-js-rhino:${versions.stetho}"
    }
    ```

2. `release`ソースセットにStethoのダミークラス群を作る。

    ```kotlin:app/src/release/kotlin/com/facebook/stetho/Stetho.kt
    class Stetho {
        companion object {
            @JvmStatic fun initializeWithDefaults(context: Context) = Unit
        }
    }
    ```

    `StethoInterceptor`や`initializeWithDefaults`以外のメソッドを使用している場合は、適宜実装する。

    ```kotlin:app/src/release/kotlin/com/facebook/stetho/okhttp3/StethoInterceptor.kt
    class StethoInterceptor : Interceptor {
        override fun intercept(chain: Interceptor.Chain): Response {
            return chain.proceed(chain.request())
        }
    }
    ```

上記でリリース時はStethoを使わない実装になる。
Lambda + API Gateway を任意のドメイン（SSL）で使用する方法を調べてみた



## やりたいこと
* example.execute-api.ap-northeast-1.amazonaws.com っていう URL の Lambda + API Gateway の API を
* example.com または api.example.com っていうドメインで使用したい
* SSL で。

下記 2通りの方法がありそうです。


## 1. CloudFront の Origin に API Gateway のドメインを指定する

### 手順
1. [Certificate Manager](https://aws.amazon.com/jp/certificate-manager/) で CloudFront に設定する SSL 証明書を取得
 * 事前にドメインの管理者アドレスでメール受信できるようにしておくこと（下記記事が詳しいです）
 * [AWS Certificate Manager (ACM)で申請前に事前に確認しておくべき大切なこと](http://qiita.com/toshihirock/items/cf4e6d8afa08beaa728c) 
* 1.で取得した証明書使って CloudFront の Distribution 作成
* Origin に example.execute-api.ap-northeast-1.amazonaws.com 指定

### 気になる点
* 後述の API mapping 使えないので、ドメイン以降の URL を好きにできない
	* しかし API Gateway の公開用エイリアスを api っていう名前にしとけば、https://example.com/api/hello とかで公開用　API だけを CloudFront に設定できそう
* 二重に CloudFront 使ってる気がする
	* そもそも API Gateway が CloudFront を使ってそうなので、クラウド-クラウドやんっていう



### 所感
* SSL 証明書は勝手に更新してくれてしかも無料なんて最高


## 2. API Gateway のカスタムドメインを使用する
### 手順
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-custom-domains.html)参照ください。簡単。

### 気になる点
* まだ Certificate Manager が使用できない
* 証明書は自前で用意する必要がある
* その[SSL 証明書が今のところ更新不能らしい](http://stackoverflow.com/questions/35590419/how-to-update-certificate-on-aws-apigateway-custom-domain)（致命的）
 * 証明書を更新するには証明書を作りなおしてカスタムドメインの設定をやり直す必要があるのでダウンタイムが発生する
 * CLI でも無理そう（クライアント側証明書は更新できそう？） - [CLI ドキュメント](http://docs.aws.amazon.com/cli/latest/reference/apigateway/index.html#cli-aws-apigateway)
 * letsencrypt の SSL 使って証明書自動更新とか考えてたけど諦めた
* SSL を使用する場合の料金
 * SNI だから多分安い

### いいところ
* API mapping が使用できる

例えば、hello っていう API があって下記のようにエイリアスが設定されているとして、

* /dev/hello (開発用エイリアス)
* /prod/hello (本番用エイリアス)

下記のようにマッピングすることができます。

https://api.example.com/hello -> /prod/hello



### 所感
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-custom-domains.html)にはこっちが記載されてるので使っちゃいそうですが、
SSL 証明書更新できないのであればまだ止めといた方がよさそうです。（2016/3/4 時点）



## 参考URL
* [Amazon CloudFrontでAPI Gatewayの痒いところに手を届ける ｜ Developers.IO](http://dev.classmethod.jp/cloud/cache-api-gateway-by-cloudfront/)
* [AWS Certificate Manager (ACM)で申請前に事前に確認しておくべき大切なこと | Qiita](http://qiita.com/toshihirock/items/cf4e6d8afa08beaa728c) 
* [API Gateway でカスタムドメイン名を使用する | AWS Documentation](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-custom-domains.html)
* [How to update certificate on AWS APIGateway custom domain - Stack Overflow](http://stackoverflow.com/questions/35590419/how-to-update-certificate-on-aws-apigateway-custom-domain)
* [AWS CLI 1.10.10 Command Reference](http://docs.aws.amazon.com/cli/latest/reference/apigateway/index.html#cli-aws-apigateway)
c++ builder > TStringListの上限 > TStringList can hold up to 134,217,728 strings (MaxListSize+1). 

```txt:環境
C++ Builder XE4
```


参考 http://edn.embarcadero.com/jp/article/30333

> **What are the size limitations of a TStringList?**
> TStringList can hold up to 134,217,728 strings (MaxListSize+1). There are no limits on the size of the string (other than physical memory limits and processor address space limits).
たった2行のコーディングで、お問い合わせフォームを設置できるサービスを作った


* 3/7 23:58
  * 記事内容についてQiita運営に確認しているので、一旦記事を取り下げます。
  * 元記事は、編集履歴を見るか、gistを同じタイトルで検索すればでてきます

* 3/8 20:51
  * Qiita運営に投稿内容に関して確認をとりましたところ、投稿内容の意図をご理解頂きましたが、SNS上などでのご指摘事項を真摯に汲み取りたいと考え、記事の再公開については配慮したいと思います。
  * 今後は、Qiita上では同じような悩みを抱えた開発者に向けたハウツーなどの投稿をまとめていくので、ご期待ください。
POV-RayをUbuntu 14.04 LTS にインストールする


2016.03.04 時点で動いたもの
https://github.com/POV-Ray/povray/blob/master/unix/README.md
に書いてあるものだとうまくいかなかった人向け

``` bash
# clone the sourcecode from original repo
$ubuntu git clone -b 3.7-stable https://github.com/POV-Ray/povray.git 

# install required packages listed in https://github.com/POV-Ray/povray/blob/master/unix/README.md
$ubuntu sudo apt-get install libboost-dev libboost-date-time-dev libboost-thread-dev zlib1g-dev libpng12-dev libjpeg8-dev libtiff5-dev libopenexr-dev

$ubuntu cd povray/unix

# following sed commands are quoated from https://github.com/POV-Ray/povray/issues/54
$ubuntu sed 's/automake --w/automake --add-missing --w/g' -i prebuild.sh
$ubuntu sed 's/dist-bzip2/dist-bzip2 subdir-objects/g' -i configure.ac
$ubuntu ./prebuild.sh

$ubuntu cd ../

# http://askubuntu.com/questions/420100/pov-ray-installation-configure-error
$ubuntu ./configure COMPILED_BY="your name <email@address>" LIBS="-lboost_system -lboost_thread"

$ubuntu make
$ubuntu sudo make install

```
【AngularJS】JSONで受け取ったDateTimeの表示


MVCでAngularJSを利用してアプリケーション作成中、
DateTime型のデータ出力でつまづいたのでメモ

【Sample.cshtml】
{{sample.Date}}
/Date(1457058672120)/

{{sample.Date | date:'yyyy/MM/dd HH:mm'}}
/Date(1457058672120)/

{{sample.Date.substring(6,sample.Date.length-2) | date:'yyyy/MM//dd HH:mm'}}
2016/03/04 11:31

##JSONでのDatetimeのやりとり
/Date(ticks)/　の形式にシリアライズされていしまう。
※ticks = 1970/1/1からのミリ秒

##date:'yyyy/MM//dd HH:mm'
date型に整形してくれるフィルター

##str.substring(indexA[,indexB])
var str = "SampleText";
str.substring(0,3); //=Sam
str.substring(3,5)/ //=plete
str.subsring(6,str.length); //=Text

※C#の String.Substring(int startIndex, int length)とは違うので注意！！
https://msdn.microsoft.com/ja-jp/library/aka44szs(v=vs.110).aspx
gulpでwebpackのCommonsChunkPluginを使う

なにやらハマったので覚え書き。Gruntの場合とは異なる模様。
これが正攻法なのかは不明だけど、とりあえず動いた。
ちなみに環境はWindows 7です。

```lang:gulpfile.js
var webpack = require('webpack-stream');


// requireする必要あり。ここのパスは環境によって異なるかも..。
var CommonsChunkPlugin = require('webpack-stream/node_modules/webpack/lib/optimize/CommonsChunkPlugin.js');

gulp.task('webpack', function() {
    gulp.src('./src/js/**/*.js')
	  .pipe(webpack({
	      entry: {
	      	hoge: "./src/js/hoge.js",
	        foo: './src/js/foo.js'
	      },
	      output: {
            path: '/js/',
            publicPath: '/js/',
            filename: '[name].bundle.js',
            chunkFilename: "chunk-[id].js",
            library: 'myApp'
	      },
          // これだとエラーになる！（webpack.optimizeがundefined） 
          // plugins: [ new webpack.optimize.CommonsChunkPlugin("commons.js") ], :smiley: 
	      plugins: [ new CommonsChunkPlugin("commons.js") ], 
	  .pipe(gulp.dest('./dist/js/'));
});
```
FILTER_CALLBACKで受け取る変数は常に文字列になる


# 発端

FILTER_CALLBACKで、受け取った変数の型によってインスタンス生成するValidatorを分けようと思ってたら、stringしか取れなくて、びびった:fearful:  

## 検証用で書いたやつ

```php
<?php
$result = filter_var(
    2,
    FILTER_CALLBACK,
    [
        'options' => function ($value) {
            return $value;
        }
    ]
);
var_dump($result); // string(1) "2"
```

# この実装（≒仕様）にハマることは多分ない
以下の理由から、この挙動に意図せず"嵌まる"ことは、殆ど無いと思います。

* 型の検証までしたい場合は、大抵、[VALIDATEフィルタ](http://jp2.php.net/manual/ja/filter.filters.validate.php)を使うし、それで事足りる。
* 各フレームワークが、Validator（Validation）コンポーネントを提供してるし、普通そっちを使う。

# 文字列に変換してる箇所
[ここ](https://github.com/php/php-src/blob/master/ext/filter/filter.c#L405)で、呼び出されるフィルタに関係なく、文字列に変換してます。  
正確には、`convert_to_string()` を呼ぶ前に、「オブジェクトとかであるために、文字列に変換できなかったら、フィルタリングで失敗した（failした）」ことにする処理が入っていますが、どっちにしろ「フィルタリング対象となる変数・インスタンスは、フィルタリングする前に文字列に変換される」ということには変わりないです。
コールバックフィルタの場合は、その「コールバックフィルタ自体」が[フィルタリング処理](https://github.com/php/php-src/blob/master/ext/filter/filter.c#L407)に当たるので、事前に文字列に変換されてから変数が渡される、ということです。

ちなみに、さっき確認したら、[
ドキュメントに「値をフィルタリングする前に、 内部的に 文字列への変換 が行われることに注意しましょう。」と書かれていました。](http://jp2.php.net/manual/ja/function.filter-var.php)
写真アルバム用HTMLファイルを生成する AppleScript

## はじめに
　イベント等でたくさんの写真を参加者に配布するような際、Webでサムネイル一覧から欲しい画像をクリックして元画像（サイズが大きい）を表示させる HTML を生成する AppleScript です。

## 利用方法
　オリジナル画像のフォルダと、同名でサムネイル化した画像のフォルダを用意しておいて、スクリプトを起動し、どちらかのフォルダを指定します。サムネイル画像を一括で作成するスクリプトも公開していますので、それを利用すれば簡単にできます。（[画像リサイズクリプトへのリンク](http://qiita.com/ynomura/items/76bde7935af4b82ab8b1)）


　処理の最後に「テキストエディット」が起動され、画面に生成されたHTMLテキストが表示されて実行が終了します。

　内容を確認し、タイトル部分など必要な本文を追記して、保存します。

##  スクリプトのソース
　ソースは以下のとおりですが、実行前にオリジナル画像のフォルダ名、サムネイル画像のフォルダ名、横に表示する列数をお好みで修正してご利用ください。

```AppleScript:MakealbumHTML.scpt
-- アルバムを表示するHTMLファイルを生成するスクリプト
-- サムネイルを指定した列数で表示し、サムネイルをクリックするとオリジナル画像を別ウインドウに
-- 表示するHTMLファイルを生成する（画像データの名前が一致している必要があります）
-- 対象のフォルダは、サムネイル・オリジナルどちらかのフォルダを指定してください。
-- 「テキストエディット」を起動して、そこに結果をセットして終了しますので、
-- 内容を確認し、タイトルなどを追加してから、名前を付けて保存して利用してください。
-- Written by ynomura

set thumbDir to "thumbs/" -- サムネイル画像が入っているフォルダ名を指定
set orgDir to "org/" -- オリジナル画像が入っているフォルダ名を指定
set col to 5 -- 横に表示する列数を指定

set docType to "<!DOCTYPE HTML PUBLIC " & quote & "-//W3C//DTD HTML 4.01 Transitional//EN" & quote & ">"
set head to "<html>" & return & "<head>" & return
set meta to "<meta HTTP-EQUIV=" & quote & "Content-Type" & quote & " CONTENT=" & quote
set meta to meta & "text/html;CHARSET=UTF-8" & quote & ">" & return
set title to return & "<title><!-- Insert the title, here --></title>" & return & return
set body to "</head>" & return & "<body>" & return
set aText to docType & head & meta & title & body
set aText to aText & "<table>" & return & "<tr>" & return

set targetFolder to POSIX path of (choose folder with prompt "対象のフォルダー")
set aList to list folder of targetFolder

set cnt to 0
repeat with aData in aList
	if (text of aData) = ".DS_Store" then
	else
		set aText to aText & "<td><a href=" & quote & orgDir & aData & quote & " target=" & quote & "_blank" & quote
		set aText to (aText & "><img src=" & quote & thumbDir & aData as text) & quote
		set aText to aText & "></a></td>" & return
		set cnt to cnt + 1
		if cnt ≥ col then
			set aText to aText & "</tr>" & return & "<tr>" & return
			set cnt to 0
		end if
	end if
end repeat
set aText to aText & "</tr>" & return & "</table>" & return & "</body>" & return & "</html>" & return

tell application "TextEdit"
	activate
	set text of document 1 to aText
end tell
````
githubへのpushまでの簡単な流れ

githubでリポジトリ作成


$ git init

$ git add -A

$ git commit -m "first commit"


$ ssh-keygen -t rsa

$ cat ~/.ssh/id_rsa.pub

sshキーをgithubに登録

$ git remote add origin git@github.com:プロジェクトアドレス.git

$ git push -u origin master
今わかってることの記事を書くぞTodoList

せっかく覚えたことも少し試した程度では忘れるので
ここに書き残していきたい。
以下、書く予定物。順不同で

---

- [x] TodoList作成
- [ ] ResouceDictionary関連
- [ ] StaticResource関連
- [x] DataConverter関連
- [ ] XamlBehaviors関連
- [ ] [ListViewPersistenceHelper class](https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.listviewpersistencehelper.aspx)
- [ ] VisualStateManager
analogRead()用の関数作ってみた


[Arduino(?)に繋いだ可変抵抗を本当に回した時だけ値を受けとるには？](http://qiita.com/tadfmac/items/0aa8b07385dc557ff387)が勉強になりました。なるほど、こうやるのか!
で、

+ 平均化して、
+ 値が変ったときだけ出力

というのがやりやすいように関数にしてみました。

#移動平均を出力する関数

```cpp
int averageStream(int val){
    static const int MODULUS = 8;
    static int val_hist[MODULUS];
    static int sum=0;
    static byte i_mod=0;
    
    sum += ( val - val_hist[i_mod] );
    val_hist[i_mod] = val;
    i_mod = ++i_mod % MODULUS;
    return sum / MODULUS;
}
```

値を入力すると直近8個の移動平均を出力します。

#値が変ったかを判定する関数

```cpp
boolean isChanged(int val){
    static const int MODULUS = 4;
    static int val_hist[MODULUS];
    static byte i_mod=0;
    
    val_hist[i_mod] = val;
    i_mod = ++i_mod % MODULUS;
    for(int j = 0; j < MODULUS - 1; j++){
        if( val == val_hist[ (i_mod + j) % MODULUS ] ) return false;
    };
    return true;
}
```

直近の三つの値と比べて同じものがあれば偽、でなければ真を返します。

#まとめ
最近staticの使いどころが判ったので連発してみました。
これで一個のボリュームはいけるでしょう。

では複数にしたいときは?

+ クラスに変数と関数を登録して
+ インスタンスを作って...

みたいな感じなのかしら。こちら方面の流儀に疎いもんで...
Crontabのバックアップとリストア

環境移設の際にCronの設定も移すことがあると思う。
たまにしかやらないので、引っ越し方法を忘れることがあったのでメモ

- crontabのバックアップ

```
crontab -l > crontab.back
```

- crontabのリストア

```
crontab crontab.back
```

これだけ、ただ、ユーザごとにCrontabがあることも多いと思うので、そのあたりは一工夫要ると思う
※面倒だったら/var/spool/cron/(ユーザ名)に各ユーザのcrontabの実体があるので、これをコピーする
※mailtoで飛び先を指定している場合は/etc/aliasesの確認も忘れない
sassについてあれこれ。part4

[sassについてあれこれ。part3](http://qiita.com/hitomi5/items/42bfaccdcbbc9c37afe0)
前回から引き続きsassの機能を確認編。

最近は色んなフレームワーク使ってみよ〜と調べたりDLしてるんですが、全く分からん。他人のコードを触る気分・・・実際そうなんですが。
もっとたくさんのコード見ないとなれないですね・・・。


#extend

指定したセレクタのスタイルを継承できます。mixinとちょっと似てますが、非なるもの！
コード見た方が早いですね。

```lang:extend.scss
.container {
    width: 800px;
    height: 300px;
    background-color: #ff0;
}
.box {
    @extend .container;
}
```

```lang:extend.css
.container, .box {
  width: 800px;
  height: 300px;
  background-color: #ff0; }
```

このクラスと一緒にしよーって時は便利〜。
mixinとの違いは、スタイルを上書きできるとこです。

```lang:extend.scss
.container {
    width: 800px;
    height: 300px;
    background-color: #ff0;
}
.box {
    @extend .container;
    width: 500px;
}
.box-sub {
    @extend .box;
    width: 300px;
}
```

```lang:extend.css
.container, .box, .box-sub {
  width: 800px;
  height: 300px;
  background-color: #ff0; }

.box, .box-sub {
  width: 500px; }

.box-sub {
  width: 300px; }
```
mixinだと同じルールセット内にスタイルが書かれてよろしくない！
ちなみにextendは複数指定可能です。

でもどこかで継承したいスタイルのセレクタがないと機能しないんじゃ・・・と思う方、耳寄りです。
『%』を使ってプレースホルダーセレクタを作りましょう！

```lang:extend.scss
%container {
    width: 800px;
    height: 300px;
    background-color: #ff0;
}
.box {
    @extend %container;
}
```

```lang:extend.css
.box {
  width: 800px;
  height: 300px;
  background-color: #ff0; }
```

上書きができるmixinて感じですね〜




#import
cssにもある別のファイルを読み込む機能です。簡単な書き方は、

`@import 'file.css';`
`@import 'file';　//sassだと拡張子を省略できます`

cssだと先頭に記述しなくてはならないんですが、sassだとどこに書いてもコンパイル後に先頭に書いてくれます。

これ使い方が面白いんですが、importしたファイルもcssになるので無駄にcssファイルを作ることになります。
importでまとめてsassファイルにしたものを、cssにコンパイルすればいいだけなので読み込んだsassファイルのcssファイルはいらない！何を言ってるか分からないと思いますが・・・メインのsassファイルにあれこれつめとけって話で・・・。

つまり無駄にcssファイルを作らないために、　ファイル名の先頭に『_』をつけます！
そうするとcssファイルが作られません。この機能を**パーシャル**と言います。

例えばサイトを作るのにheader,section,footer・・・とスタイルを書いて、長〜くなった記述。このsectionのmarginをって時、どのあたりか探すのしんどい！面倒くさい！だるい！
こうしましょう。

<img width="396" alt="スクリーンショット 2016-03-04 9.47.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/110274/3ec1b46c-b25f-e064-8420-464d0b01cc85.png">


```lang:style.scss
@import 'header','section','footer';
```

読み込み時は『_』と拡張子を省略できます。複数読み込む時は上記のような感じで！
mixin用、変数用のファイルを作ったりすれば編集がしやすいです。


#演算
使うか・・？と思ったんですが、使うわ。となったので。
paddingの値を一度変えて戻すとなった時、元なんだっけ・・・となりますよね。なるんです。

```lang:calculation.scss
.container {
    width: 400px;
    margin-bottom: 27px - 4;
    .content {
        width: 200px;
        padding-right: 5px + 4;
    }
}
```

```lang:caluclation.css
.container {
  width: 400px;
  margin-bottom: 23px; }
  .container .content {
    width: 200px;
    padding-right: 9px; }
```

足す(+)引く(-)掛ける(*)割る(/)ができます。
割り算の場合書き方が値によって変わり、

```lang:caluclation.css
$value: 200px;
width: $value / 2;
width: (200px / 2);
width: 200px - 200 / 2;
```

どれも結果は100pxです。　
sassさん優秀か・・。




とりあえず今回はここまで！
私のとってもちいさな失敗　（ちょこちょこあげていきます）

##なんだか小さな失敗を繰り広げるので記録します。
本に書くまでもないこういう小さなことがきっと誰かの役にたつ・・・はず

##その１ しれっと＿（アンダーバー）つけちゃいました　の巻
viewを作成中　パーシャルのhtml.erbに_(アンダーバー)を付けるのを忘れてました。

そのままgitで　add . →　commit
`rails s -p $PORT -b $IP` (クラウド９)でサーバを立ち上げると
path通ってないんじゃない？とエラー画面でお叱りを受けます。。。

「あらら」と_を付けてパーシャルをリネーム

今度はpush出来ません。
「しれっとリネームしないでください。リネーム前のファイルはどうなったの？」
的ご指摘をいただき、
リネーム前のファイルを　rm して　それから push しました。


##その２　confrictしてアルファベットで詰め寄られるの巻
まぁ・・・いろいろありまして、confrictしたまではいいのですが（？）
bashさんに「どーするのよ」と詰め寄られました。[Ynaqdh]というアルファベットと共に＞＜

「いつもはもっと丁寧にあ～だこーだ言ってくれるのになぜ　アルファベットの羅列なの？？」
アルファベットはこういう意味だそうです。
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help

#Gitで fatal: remote origin already exists.
どうしてもリポジトリを作り直して、やりなおしたくなっちゃったんです。。。
githubにリポジトリを作って
git remote addしてって作業したんですけど・・・

でもなぜだか上のコメントと共にpushが反映されない。。。
一回削除して　やり直しました。
`$ git remote rm origin
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
$ git push -u origin master`
Mac の Visual Studio Code で C/C++/C# を実行する

#はじめに

Mac で C/C++/C# を１エディタで完結して試せる環境が欲しかったので用意した。
このやり方なら上記の3つ以外の他言語でも可能なので、暇を見つけて追加していく。


#手順

##インストール
###Visual Studio Code
まずは [Visual Studio Code](https://www.visualstudio.com/ja-jp/products/code-vs.aspx) をインストール。持ってる場合はもちろん省略。

###Runner
Visual Studio Code にはファイルタイプや拡張子ごとにファイルを実行できる
 [Runner](https://marketplace.visualstudio.com/items?itemName=mattn.Runner) というエクステンションがあるのでインストールする。

Visual Studio Code 上で F1 を押して下記を入力してインストールする。

```
ext install runner
```

###mono
C#の実行環境として mono を [brew](http://brew.sh/index_ja.html) で入れておく。

```
brew install mono
```

##シェルスクリプトを用意
コンパイルして実行するためのシェルスクリプトを言語ごとに用意する。

```bash:clang.sh
#!/bin/sh
clang -o out $1
./out
rm out
```

```bash:cpp.sh
#!/bin/sh
clang++ -o out $1
./out
rm out
```

```bash:csharp.sh
#!/bin/sh
mcs $1 -out:out.exe
mono out.exe
rm out.exe
```

##Runner の設定を変更する

### 実行するシェルスクリプトを指定
Code > Preferences > User Settings で下記の設定を追記。
これでファイルごとに上記で作成したシェルスクリプトを設定。

```js
"runner.languageMap": {
  "c"      : "~/sh/clang.sh",
  "cpp"    : "~/sh/cpp.sh",
  "csharp" : "~/sh/csharp.sh"
},
```

### キーボードショートカットを指定
Code > Preferences > Keyboard Shortcuts でショートカットを変更。
Mac の場合、他の機能とバッティングして動作しなかったので、別のショートカットに変える。

```js
[
  { "key": "cmd+shift+,",  "command": "extension.runner.start",
                              "when": "editorTextFocus" },
  { "key": "cmd+shift+.",  "command": "extension.runner.stop" }
]
``` 

#テスト

Visual Studio Code で下記のようなテストファイルを作成したら、
上で設定したキーボードショートカットを実行する。
※ extension.runner.start を設定した方のショートカット
正しく動作すると OUTPUT に出力が表示される。

```c:test.c
#include <stdio.h>

int main (int argc, char *args[])
{
    printf("Hello, World! Clang");
    return 0;
}
```

```cpp:test.cpp
#include <stdio.h>

class Test
{
public:
  Test() {
    printf("Hello, World! C++");
  }
};

int main (int argc, char *args[])
{
  Test test;
  return 0;
}  
```

```csharp:test.cs
using System;

public class Hello
{
  public static void Main()
  {
    System.Console.WriteLine("Hello, World! C#");
  }
}
```
play+jacoco4sbtでテスト用の設定ファイルを指定

ユニットテスト実行時に、それ用のapplication.confとlogger.xmlを指定したい場合のやり方。
テスト用のDBにつなぐ、テスト時はログレベルをdebugにしたいなどの時に。

```lang:build.sbt

testOptions in jacoco.Config += Tests.Setup( () => {
    System.setProperty("config.file", "conf/test/application.conf")
    System.setProperty("logger.file", "conf/test/logger.xml")
  }
)

```
VBScriptの暗黙的キャストの罠

VBScriptを触る機会があり、ちょっと不思議な挙動に出くわしたので書いてみる。
その道の人には既知かもしれないし、今後あまり触れることもないだろう。

## 比較演算子の挙動

公式のリファレンスをみましょう。
https://msdn.microsoft.com/ja-jp/library/cc392349.aspx

下の方に値に応じた処理内容の表がありますが、この中に一部気になる条件があります。
「一方の式が数値、他方が文字列」 => 「数式の方が文字列式より小さくなります。」

何を言っているのかよくわかりませんね。どうやら数値に落としての比較はしないってことのようです。
なんとなく期待される挙動としてはこういうことでしょうか。

```vbnet
10 < "a" '=> True
10 < "5" '=> True
```

しかし、現実は違います。

```vbnet
10 < "a" '=> Error: 型が一致しません。: '[string: "a"]' 
10 < "5" '=> False
```

どうやら、暗黙的に数値にキャストして比較してしまうようです。公式リファレンスとは何だったのか…。

## 変数に格納すると挙動が変わる

ところが、ちょっとだけ変化を加えるだけでリファレンス通りの挙動になります。

```vbnet
Dim n
n = 10
n < "a" '=> True
n < "5" '=> True
```

変数に格納しただけで暗黙的なキャストが効かなくなるようです。
なんでしょうね、このキモい挙動は…。

## まとめ

ちゃんと比較したいなら `CLng` などで明示的にキャストしましょう。