OmniAICreator/Qiita-1.07M huggingface dataset:
gulp、webpackでjqueryプラグイン(scrollmagic、tweenmax等)を使う時の設定



メモメモ
前提条件
* gulp-webpack、webpackがnpm installされている
* bowerにてscrollmagic等のプラグインをインストールしている


パスは適宜変更してください

#webpack.config.js
* gulpタスクが読み込む設定ファイルです。

```js
var webpack = require("webpack");
var path = require('path');

module.exports = {
    output: {
        filename: "bundle.js"
    },
    resolve: {
        root: [path.join(__dirname, "bower_components")],
        extensions: ['', '.js', '.coffee', '.html'],
        modulesDirectories: ['node_modules', 'bower_components'],
        alias: {
            bower: 'bower_components',
            TweenLite: __dirname + '/bower_components/gsap/src/uncompressed/TweenLite.js',
            TweenMax: __dirname + '/bower_components/gsap/src/uncompressed/TweenMax.js',
            TimelineLite: __dirname + '/bower_components/gsap/src/uncompressed/TimelineLite.js',
            TimelineMax: __dirname + '/bower_components/gsap/src/uncompressed/TimelineMax.js',
            ScrollMagic: __dirname + '/bower_components/ScrollMagic/js/jquery.scrollmagic.js',
            bxSlier: __dirname + '/bower_components/bxslider/jquery.bxSlider.min.js'
        }
    },
    module: {
        loaders: [
            { test: /\.coffee$/, loader: 'coffee' }
        ]
    },
    plugins: [
        new webpack.ResolverPlugin(
            new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["main"])
        ),
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.AggressiveMergingPlugin(),
        new webpack.ProvidePlugin({
            jQuery: "jquery",
            $: "jquery",
            jquery: "jquery"
        })
    ]
};

```

* resolveのaliasでそれぞれのモジュールへのパスと、読み込むときの名前を設定します。


#webpack.js
* gulpタスクの方です

```js
var gulp = require('gulp');
var conf = require('path/to/webpack.config.js');
var webpack = require("gulp-webpack");
module.exports = function () {
    gulp.task('webpack',function() {
        gulp.src('path/to/app.coffee')
        .pipe(webpack(conf))
        .pipe($.uglify())
        .pipe(gulp.dest('path/to/bundle.js'))
        .pipe($.browser.reload({stream: true}));
    });
}();

```

#app.coffee
* requireの仕方

```coffee
require 'TweenMax'
ScrollMagicObject = require 'ScrollMagic'
window.ScrollMagic = ScrollMagicObject.Controller
window.ScrollScene = ScrollMagicObject.Scene
bxSlider = require 'bxSlier'
```

* TweenMaxはrequireだけすることで使えました。
* ScrollMagicはControllerとSceneをグローバルに入れることで通常通り使えました。
* bxSliderは変数に入れることで使えました。
Railsのfield_with_errorsクラスにBootstrap3を適用

# 概要
Railsでは``Validation``エラーが発生したフォームに、自動で``field_with_errors``クラスを割り当ててくれます。[某チュートリアル](http://railstutorial.jp/)では、これにBootstrapのスタイルを適用することで、簡単に良い感じにする方法が紹介されています。

しかし、紹介されている方法はBootstrap2の書き方であるため、Bootstrap3を使用している場合はうまく動作しません。

# Bootstrap2での実装
[Rails Tutorialの7章](http://railstutorial.jp/chapters/sign-up?version=4.0#top)にある通り、``SCSS``で``.field_with_errors``に``.control-group``と``.error``を追加してあげると、エラー時に良い感じに色をつけてくれるようになります。``erb``側では特に何も設定する必要はありません。

> ```erb:new.html.erb
> <%= form_for(@user) do |f| %>

>   <%= f.label :name %>
>   <%= f.text_field :name %>

>   <%= f.label :email %>
>   <%= f.text_field :email %>

>   <%= f.label :password %>
>   <%= f.password_field :password %>

>   <%= f.label :password_confirmation, "Confirmation" %>
>   <%= f.password_field :password_confirmation %>

>   <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
> <% end %>
> ```

> ```scss:custom.css.scss
> .field_with_errors {
>   @extend .control-group;
>   @extend .error;
> }
> ```

# Bootstrap3での実装
Bootstrap3では``.control-group``と``.error``というクラスは消え去りました。[公式サイト](http://getbootstrap.com/migration/)を見たところ、多分次のように名前が変わっています。

|Bootstrap2|Bootstrap3|
|---|---|
|``.control-group``|``.form-group``|
|``.error``|``.has-error``|

なんと、**これを変更しただけではうまく動作しません**。

[Sass/Rails form validation with Bootstrap 3](http://stackoverflow.com/questions/24047236/sass-rails-form-validation-with-bootstrap-3)のAnswerを読むに、どうやら、素の``.has-error``のスタイルは無くなってしまったことが原因のようです。

したがって、それぞれのコンポーネントに``control-label``や``form-control``あたりの、適切なクラスを割り振ってやる必要があります。

具体的には、以下のようにクラスを追記しました。

```erb:new.html.erb
<div class="span6 offset3">
  <%= form_for(@user) do |f| %>

    <%= f.label :name, class: "control-label"%>
    <%= f.text_field :name, class: "form-control" %>

    <%= f.label :email, class: "control-label"%>
    <%= f.text_field :email, class: "form-control" %>

    <%= f.label :password, class: "control-label"%>
    <%= f.password_field :password, class: "form-control" %>

    <%= f.label :password_confirmation, "Confirmation", class: "control-label" %>
    <%= f.password_field :password_confirmation, class: "form-control" %>

    <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>
```

```scss:custom.css.scss
.field_with_errors {
  @extend .form-group;
  @extend .has-error;
}
```

これで無事、``field_with_errors``クラスにBootstrap3の``.has-error``スタイルを適用することができました。

# 補足
## ``.form-group``の役割
こちらは削除しても動きました。正直何をしてくれてるのか理解せずに書いていたので、とりあえず削除しています。

## ``collection_select``でのクラスの設定
上記のコードの通りに、``collection_select``にクラスを設定しようとしても、全く反映されませんでした。案の定、[全く同じ現象に遭遇している方](http://fnta.hatenablog.com/entry/2014/04/15/202128)がいました。

そちらを参考に、こんな感じで実装してみました。

```erb:new.html.erb
<%= f.collection_select(:type_id, Type.all, :id, :name,
      { prompt: "選択してください }, { class: "form-control" }) %>
```
git pushしたときのエラー 第2弾


gitにpushしようとした時に、下記エラーがでると報告があったので、対応した時のメモ。
[前回](http://qiita.com/ykirishima/items/2aceb27aed76d7529624)とはちょっと違うようだ。

```
git insufficient permission for adding an object to repository database ./objects
```

なんらかのタイミングで、```./objects```の権限がおかしくなったっぽい。

とりあえず、権限を変更して対応

```
chmod -R 777 ./objects
```

これで、pushできるようになる。ただ、解決法として、

```
git config core.sharedRepository group
chmod -R g+ws hooks
chmod -R g+ws info
chmod -R g+ws objects
chmod -R g+ws refs
```

これで解決するのが正しいような気がする。
一応、上記で再度対応してみたが、pushできているようなので、様子見。

***
参考サイト

* [Git: 複数アカウントで同リポジトリーで作業していると “error: insufficient permission for adding an object to repository database .git/objects” が発生する](http://tetsuwo.tumblr.com/post/38922104151/git-error-insufficient)
* [[git] リポジトリを後から共有できるようにする](http://d.hatena.ne.jp/kuma8/20110115/1295100616)
PyCharmで型補完を効かせる

型の手がかりがないと、PyCharmは候補を出してくれません。

![cameo_trackers_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/09abcfc8-dae3-419f-1333-7059e7453448.jpeg)

リスト型とわかると、リストに関するメソッドなどを候補として出してくれます。

![cameo_trackers_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/dc5e9c53-b4ec-5e49-1f2d-23ed7d5219fd.jpeg)

しかし、これでもリストに入っている要素の型まではわからないため、以下の場合、PyCharmは候補を出してくれません。

![cameo_trackers_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/52fde5eb-20d3-ad4a-c623-f3b6faec52a1.jpeg)

しかし`""":type: <type>"""`を使って、型を明示する文を入れてあげると、この場合はFaceクラスのフィールドが候補として出されます。

![cameo_trackers_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/4483c7f2-0f9c-9f40-89b6-0bbb8bbf918c.jpeg)

ちなみに関数を普通に書くとPyCharmは型を適宜推論してくれますが・・・

![3rd-typing_…_filters_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_5.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/87dca367-367d-7990-4fbd-efcc3d0b7bf7.jpeg)

`:rtype :<type>`を使って、関数の戻り値を型指定することもできます。

![3rd-typing_…_filters_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/0496f2aa-b832-4bb6-22c8-daa7f29520f0.jpeg)

返り値だけでなく引数の型を指定することもできます。

指定しないと何も候補を出してくれませんが・・・

![cameo_cameo_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_7.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/1a9213e1-f7b2-1ec0-0b3e-617ff16eb948.jpeg)

・・・`:type x: <type>`で指定すると候補を出してくれます。ちなみに関数を書いて改行したあとに`"""`と打って改行すると**docstrings**形式の注釈を入れるひな形をPyCharmが自動で入力してくれます。

![cameo_cameo_py_-_opencv-python_p150121_-____tmp_opencv-python_p150121_6.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/5eef27ae-af72-8c62-d176-6af0cfa5a703.jpeg)


|表記|内容|
|---|----|
| Foo | Fooクラス |
| x.y.Bar | x.yモジュールのBarクラス |
| Foo &#124; Bar | Foo もしくは Bar |
| (Foo, Bar) | FooとBarのタプル |
| list[Foo] | Fooを要素とするリスト |
| dict[Foo, Bar] | FooからBarへの辞書 |
| T | ジェネリック型 (T-Zはジェネリック型の予約語) |
| T <= Foo | Fooを継承したクラス |
| list[T <= Foo] | リストの要素として、Fooを継承したタイプしか受け付けない |
| Foo[T] | Tを引数にとるFoo |
| (Foo, Bar) -> Baz | Bazを返す、FooとBarの関数 |
| list[dict[str, datetime]] | 文字列からdatetimeへの辞書、のリスト（要素の入れ子） |

---
ブログやってます：[Weed software](http://weed.cocolog-nifty.com/wzero3es/)
Ruby + MeCab で Segmentation fault が発生した場合の対処

# はじめに
MeCab の標準の Ruby 用バインディングを利用してテキスト解析を行っていたら、
`hoge.rb:XX: [BUG] Segmentation fault at 0x00123456789abc`
のようなエラーが発生した。

発生したタイミングは次の通り。
・処理が一定の負荷を超えた場合、毎回そこで落ちる。
・軽い処理の場合は落ちない。

落ちてた部分は下記の行。
`node = MeCab::Tagger.new.parseToNode(string)`

# Python で同様の事例
以前 Python で意図しないガベージコレクションが実行されることにより、
似たような事例が発生した事があった。

(この件は次のサイトが詳しくまとめてくれている [Shogo's Blog: MeCabをPythonから使う注意点とか](http://shogo82148.github.io/blog/2012/12/15/mecab-python/))

# 対処
Ruby でも同じことが起きてるんじゃないかと思ったので、コードを書き換えた。
いきなり node を作らず、`MeCab::Tagger.new` を一度適当な変数に代入する。

```ruby:before
require 'mecab'

node = MeCab::Tagger.new.parseToNode(string)
while node
  ...
```

```ruby:after
require 'mecab'

m = MeCab::Tagger.new
node = m.parseToNode(string)
while node
  ...
```

これで無事に問題が発生しなくなった。

# おわりに
無事問題は解決した。
おそらく他の言語でも似たような事例が発生する可能性あり。
EventEmitterのemitを高速化してみた


https://gist.github.com/kacchan6/05b996fdb1203d5a69b6

作ったものでテストしたら、遅いケースでは2倍以上、元々ノーマルでも遅くないケースでも1.1倍程度は速くなっています。

（npmにも登録していないし、英語が苦手なのでEventEmitterにマージしてもらうためのPullRequestも送っていない・・・。）

#元々の処理
```javascript:events.js
    len = arguments.length;
    args = new Array(len - 1);
    for (i = 1; i < len; i++)
      args[i - 1] = arguments[i];

    listeners = handler.slice();
    len = listeners.length;
    for (i = 0; i < len; i++)
      listeners[i].apply(this, args);
```

まずxxx.emit("foo", 1, 2);というようにemitされると、リスナには1と2を渡す必要が有るため、[1, 2]という配列を作成しています。

その後リスナの配列をクローンしています。onceでリスンしている場合、リスナの要素数が変わるためです。

最後にリスナに対してapplyを呼び出しています。

#どう改善すればよいか
最終的には、以下のコードが実行されるのが最速です。リスナのクローンも変数に退避しているため不要ですし、引数のコピーも要りません。仮に引数が3つ、リスナが2つあるとすると以下のようになります。

```javascript:events.js
var l0 = handler[0],
var l1 = handler[1],
var a1 = arguments[1],
var a2 = arguments[2],
var a3 = arguments[3];
l0.call(this, a1, a2, a3);
l1.call(this, a1, a2, a3);
```

#これをどう動的に実行させるか

引数の数とリスナの数に合わせて、上記のコードを生成して、new Functionを行います。Functionの動的生成はコストが高いですがキャッシュしておけば一度だけしか作られません。

#他の細かい改善

arguments[1]は仮引数で予めarg1を受け取ると高速になります。
色んなとこにSSHで繋ぎに行くときのちょっと便利なやつ

historyから接続先をリストしてくれるやつと最後に繋いだとこに繋ぎに行くやつ
雑だけど最低限これでなんとかなってる

最終的にhistorysshで番号出して
番号選ぶとそこにつなぐみたいなやつ欲しかったけど途中でだるくなってやめた

~~~sh
#!/bin/bash

function historyssh() {
  history | grep " ssh " | awk '!colname[$3]++{print($2,$3)}'
}

function latest-ssh() {
  `historyssh | awk 'END {print}'` $@
}
~~~
pdfにフォントを埋め込む(Mac)


論文などを出すときに，pdfにフォントを埋め込むということが必要になることがあります．
また，macの場合，courierフォントやTimes Romanフォントなどが埋め込まれないということがあります．
ですが，Acrobat Distillerなどがない場合，どうすればよいのでしょうか．

世の中にはGhostScriptの設定をいじったり，フォントを準備するといった記事が多いようですが，
結構面倒ですし，知識がないとlatexに設定するpathなどもわかりにくいわけです．

しかしmacだと簡単に行きますので，その方法及びフォントが埋め込まれているかのチェックに
関する事柄を以下に記します．

**なお，macを用いた場合の記事ですので，windowsやlinux等の方は，別の方法が必要になります．**

#pdfにフォントを埋め込む

1. latexやwordなどで，pdfを作成
2. pdfをプレビューで開く
3. ファイル > 書き出す もしくは，ファイル > PDFとして書き出す を選ぶ
4. 保存したい名前を入力し，pdfで保存する．

#pdfにフォントが埋め込まれているかのチェック

いくつか方法がありますが，ここでは2つ記します．

・Adobe Readerを用いる

1. Adobe Readerでpdfを開く 
2. ファイル > プロパティ を選ぶ
3. フォント タブ を選ぶ

そこで，フォントの右側に埋め込みサブセットと書いてあれば，埋め込まれています．
これが全てのフォントに対して成立していれば，OKです．

・ターミナルを用いる

ターミナルなどを開いて，`pdffonts (ファイル名).pdf` と 入力する．

embという項目がyesならば，フォントが埋め込まれています．
よって，全てのフォントに対してyesなら，OKです．

高価なソフトを使える環境ならば，このような問題は生じないのかもしれませんが，フリーソフトなどでやるならば，
この方法は簡単でおすすめです．
Can't verify CSRF token authenticity への対応

# 状況
従来作成したRailsアプリを再度新規の環境で動かそうとした時に、Can't verify CSRF token authenticity と言われてログインできない。
認証機構はDeviseを使っていて、バージョン互換の問題と思い、gemのバージョンを戻してみたが変化なし。
セッション管理としてはクッキーを使用。

# 対処
クッキーセッションを使っているときは、クッキーの設定を確認する。
私の場合はdomainの設定が違っていたのが問題だった模様。
正しいドメインを設定すると上手く動いた。

# 蛇足
今回の状況は、エラーメッセージからだけではわからない。参考となる情報は原因究明後なら探すことができるが、エラーメッセージだけでググると関係ない情報ばかりが出てきて錯綜するので注意。

# 参考情報
https://github.com/plataformatec/devise/issues/2734
【Gulp】Sassを監視・コンパイルしたタイミングでチャットワークにメッセージを送る

普段はフロントエンドのタスクランナーに「grunt」を使ってますが、「gulp」の方が良いよーという声を最近良く聞くので試してみました。両方ともNode.jsで動作するので、個人的な感覚では、その導入手順に大きな違いは無いですが、一応記録しておきます。

sassのコンパイルのタスク実行後にチャットワークにメッセージを送るようにしています。（トリガーはsassのコンパイルじゃなくてもいいですが）


##準備

プロジェクトの作業ディレクトリに移動してお決まりのコマンド

```ruby:

npm init

```

続いてgulpをインストール

```ruby:

npm install gulp --save-dev

```


####プラグインのインストール

今回はSassのコンパイルなので「gulp-sass」というプラグインと、チャットワーク送信用に「request」というプラグインをインストールします。

・[gulp-sass](https://www.npmjs.com/package/gulp-sass)
・[request](https://www.npmjs.com/search?q=request)

```ruby:

npm install --save-dev gulp-sass request

```

##ソース

gulpfile.jsを作成して

```ruby:gulpfile.js

var gulp = require('gulp');
var sass = require("gulp-sass");

gulp.task('chatwork', function() {
  
	var request = require('request');
	var room_id = '<ルームID>';
	var message = '<任意のメッセージ>';
	var api_key = '<API_KEY>';
 
	var options = {
		url: 'https://api.chatwork.com/v1/rooms/'+room_id+'/messages',
		headers: {'X-ChatWorkToken': api_key},
	    form: { body: message },
	    json: true
	};
 
	request.post(options, function (error, response, body) {
	    if (!error && response.statusCode == 200) {
	       console.log(body);
	    }else{
	        console.log('error: '+ response.statusCode);
	    }
	});

});

gulp.task("sass", function() {
    gulp.src("sass/*scss")
        .pipe(sass())
        .pipe(gulp.dest("sass"));
});

gulp.task('watch', function(){
  var gaze_opt = {
    debounceDelay: 10000
  };
  gulp.watch('sass/*.scss',gaze_opt,['chatwork','sass']);
});

```

※scssファイルの中身と場所はお好きなように

##タスクの実行

```ruby:

gulp watch

```

scssファイルに変更を加えて、うまくいけば

![スクリーンショット 2015-02-04 10.56.54.png](https://qiita-image-store.s3.amazonaws.com/0/67591/6c9ccbc2-c8a8-dc85-b53c-605a3d6679cb.png)

チャットワークで確認

![スクリーンショット 2015-02-04 10.59.49.png](https://qiita-image-store.s3.amazonaws.com/0/67591/e609dc6c-2de0-510e-9038-6c5a037ab1ac.png)


##ハマったポイント

通常、ファイル監視する分には、以下のような感じで良いのですが、テキストエディタによっては、保存する際にタスクランナーのログを見ると2度走るケースが発生します。(Sublime Textを使ってました)

```ruby:

gulp.task('watch', function(){
  gulp.watch('sass/*.scss',['chatwork','sass']);
});

```

同じメッセージが二度、チャットワークに送信されてしまうと困るので、連続実行を抑止します。

詳しくはコチラ
http://qiita.com/cognitom/items/c6d821d72664f90f1e11


第二引数にgazeのオプションを渡します。
再実行されるのを10秒間抑制するために、次のようにオプションを指定します。 

```ruby:

gulp.task('watch', function(){
  var gaze_opt = {
    debounceDelay: 10000
  };
  gulp.watch('sass/*.scss',gaze_opt,['chatwork','sass']);
});

```


##発展

無いです。

[今回作ったサンプルはこちら](https://github.com/king-panda/gulp_chatwork)
Remote-syslogに不要なログを出さない方法

BIG-IPにてRemote-syslogを設定した際に、
受けるsyslogサーバ上で変なログが出続けていたのでこちらをフィルターする方法を紹介したいと思います。

うちで使っているsyslogサーバで下記のようなログが出続けていました。

```ruby:big-ip.log
Feb  4 03:19:20 xx.xx.xx.xx slot1/BIG-IP info logger: [ssl_req][04/Feb/2015:03:19:20 +0900] 127.0.0.1 TLSv1 AES256-SHA "/iControl/iControlPortal.cgi" 868
Feb  4 03:19:20 xx.xx.xx.xx slot1/BIG-IP info logger: [ssl_acc] 127.0.0.1 - - [04/Feb/2015:03:19:20 +0900] "/iControl/iControlPortal.cgi" 200 882
Feb  4 03:19:20 xx.xx.xx.xx slot1/BIG-IP info logger: [ssl_req][04/Feb/2015:03:19:20 +0900] 127.0.0.1 TLSv1 AES256-SHA "/iControl/iControlPortal.cgi" 882
Feb  4 03:19:20 xx.xx.xx.xx slot1/BIG-IP info logger: [ssl_acc] 127.0.0.1 - - [04/Feb/2015:03:19:20 +0900] "/iControl/iControlPortal.cgi" 200 658
Feb  4 03:19:20 xx.xx.xx.xx slot1/BIG-IP info logger: [ssl_req][04/Feb/2015:03:19:20 +0900] 127.0.0.1 TLSv1 AES256-SHA "/iControl/iControlPortal.cgi" 658
....
....
....
```

上記ログは内部スクリプトの記述ミスにより出力されているらしく、特に意味が無いようです。
また本事象は ID420295 にて管理されているみたいなのでいつか解消されるはずです。
が、しかし早く止めないとログが汚れるので下記手順によって止めます。
 

```ruby:１．tmshに入る
[admin@BIG-IP:Active:In Sync] ~ # tmsh 
```
 

```ruby:２．syslogサーバの削除
admin@(BIG-IP)(cfg-sync In Sync)(Active)(/Common)(tmos)#  modify /sys syslog remote-servers none 
```

```ruby:３．設定を保存
admin@(BIG-IP)(cfg-sync In Sync)(Active)(/Common)(tmos)#  save sys config 
Saving running configuration...
  /config/bigip.conf
  /config/bigip_base.conf
  /config/bigip_user.conf
```

```ruby:４．syslog設定にフィルターの適用
admin@(BIG-IP)(cfg-sync In Sync)(Active)(/Common)(tmos)#  edit /sys syslog all-properties

modify syslog { 
auth-priv-from notice 
auth-priv-to emerg 
cron-from warning 
cron-to emerg 
daemon-from notice 
daemon-to emerg 
description none 
include none <==== この部分を変更 
iso-date disabled 
kern-from notice 
kern-to emerg 
mail-from notice 
mail-to emerg 
messages-from notice 
messages-to warning 
remote-servers none 
user-log-from notice 
user-log-to emerg 
} 

```

```ruby:５．変更作業（vi風）
'include none'から下記に変更（ダブルクォーテーションまで忘れずにね！）

include " 
filter f_ssl_acc_req { 
not (facility(local6) and level(info) and match('\\[ssl_acc\\]')) or 
not (facility(local6) and level(info) and match('\\[ssl_req\\]')); 
}; 

destination d_remote_loghost { 
tcp(\"10.97.1.161\" port(514));
udp(\"10.97.1.161\" port(514)); 
}; 

log { 
source(s_syslog_pipe); 
filter(f_ssl_acc_req); 
destination(d_remote_loghost); 
}; 
" 


```
６．テキストエディタを閉じる
:wq
７．プロンプトにて y を押下し、設定を保存。
Save changes? (y/n/e) 

```ruby:８．設定の保存
admin@(BIG-IP)(cfg-sync In Sync)(Active)(/Common)(tmos)#  save /sys config
Saving running configuration...
  /config/bigip.conf
  /config/bigip_base.conf
  /config/bigip_user.conf
```

これで、受けるsyslogサーバには不要ログが来ないはず！
フィルターのかけ方は色々ありそうなので色々試して見てくださいm(_ _)m
以上っす(｀･ω･´)ゞ

参考URL
[SOL13333: Filtering log messages sent to remote syslog servers (11.x)](https://support.f5.com/kb/en-us/solutions/public/13000/300/sol13333.html?sr=43557607)
linux > 実行済みコマンドをスクリプトに > echo !1121 > testcomp

色々試行錯誤してうまく実行できたコマンドがあるとする。
そのコマンドをスクリプトにしたい時

    $ history

で成功したコマンドの履歴番号を探す。
履歴番号が1121だった場合 (下記)
  
    1121 gcc this.c is.c an.c ultra.c hyper.c very.c longer.c sample.c code.c -I/foo/bar/hoge/ -lpthread -lm -lunheardOfTheseDaysLibrary

echoと!を組み合わせて

    $ echo !1121 > testcomp
のようにすることで、ファイルに落とせる。(!!!testcompは上書きとなる点注意!!!)。

あとは必要であれば、`testcomp`の1行目に`#!/bin/env bash`を付けるなどの適宜追加修正する。

または、そのままで`bash -x testcomp`で実行するのでもよい。

<hr>
別の方法としては、カーソルの上矢印キーでそのコマンドの実行まで戻り、`echo "`と`" > testcomp`で挟んで実行というのでもできる。

こちらの方法を使ってきたが、historyを使えばいいと思いやってみたらできたので。
Sublime Text2 > ファイル名の入力補完 > AutoFileName

プログラムを書いている時、`#include`などでファイル名を書く時にAutoFileNameというパッケージを入れておけば、ファイル名の入力補完ができる。

今までコピーペーストしてたけど、大量に指定する場合はAutoFileNameを使えるようにしておくと捗る。

参考: [じっくり解説！Sublime Text 2 プラグイン 「AutoFileName」](http://charlie.hateblo.jp/entry/2013/04/19/112120)
linuxApp > 事前定義済みマクロ > #ifdef __linux__ 

動作環境

    CentOS6.5


OS混在のCプログラムを書く時、`__linux__`というdefineマクロが定義済みかどうかをチェックすることで、linux用の動作を書ける。

```c
    #ifdef __linux__
    void testif(void) {
       printf("This is linux\n");
    }
    #else
    void testif(void) {
       pritnf("This is not linux\n");
    }
    #endif
```

参考: [通信用語の基礎知識](http://www.wdic.org/w/TECH/%E4%BA%8B%E5%89%8D%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF%E3%83%9E%E3%82%AF%E3%83%AD)
Mysql   最後に更新されたものから取得。（update_dateがあればそれを利用、なければcreate_date　⇒　で降順に）

MySQLのデータベースのテーブルから、

最後に更新されたものから取得する時、

update_dateがあれば、それを利用、
なければ、create_dateを利用して、その日時の降順で取得する方法は、

ifnull

です。

ifnull関数は引数に指定した2つの値の中で、最初のNULLでない値を取得するために使用します。書式は次の通りです。

ifnull(値1, 値2)

引数には2つの値を指定します。ifnull関数は引数に指定された2つの値の中で、最初にNULLでなかった値をコピーしたものを返します。どちらの値もNULLだった場合にはNULLを返します。

EX.)

SELECT
    id,
    detail_id,
    ifnull (update_date, create_date) AS create_date
FROM documents
ORDER BY create_date DESC


関連：
同じような目的で利用する関数にcoalesce関数があります。coalesce関数は引数に指定した値の中で、最初のNULLでない値を取得するために使用します。
PowerShellでFTPサーバのファイルを一覧する

.Netの```System.Net.WebRequest```を使用します。

```ps1:lsftp.ps1
# 一覧を取得するURL
$url = "ftp://ftp.example.com/pub"

# ログインID
$user = "someone"

# パスワード
$pass = "secret"

$wr = [System.Net.WebRequest]::Create($url)
$wr.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
$wr.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails
$res = $wr.GetResponse()
$rs = New-Object System.IO.StreamReader($res.GetResponseStream())
$list = $rs.ReadToEnd()
$rs.Close()
$res.Close()

# $listにファイルの一覧が格納されますので、あとは煮るなり焼くなり。
```
TikZを使ってgnuplotのグラフに数式を埋め込む

gnuplotは便利ですがあくまでグラフの描画にとどまります。「軸のラベルに数式を使いたい」と思ってもgnuplot単体ではできません。そこでTeXと連携することで数式を埋め込むことを試みます。

(以下ほぼ自分用のメモみたいなものです。)

gnuplotからグラフを書き出してTeXに埋め込むにはpngやepsを使うことが多いかと思います。特にepsでは目的であるTeXで数式を埋め込むということができるようです(やったことないので詳しいことはわかりません)。
しかしどうやらナウい方法はTikZを使う方法のようです。TikZはTeX文章中に描画コマンドを書き込むことでなんでもかけちゃう(？)代物とのこと。
ではさっそくやってみます。

こちらの環境はMac OS X 10.10にMacTeX 2014です。
(UpTeXを使っていたのですがどうもUpTeXではTikZが使えないようで悪戦苦闘した末にMacTeXに乗り換えました。)

いきなり最低限のルートを説明してもよいのですが少し説明を。
gnuplotから書きだしたものをTeXに埋め込むには`gnuplot-lua-tikz.sty`が必要です。このファイルはgnuplotがインストールされたディレクトリのどこかにあります。僕の場合は`/usr/local/Cellar/gnuplot/4.6.6/share/texmf/tex/latex/gnuplot`にありました。
こちらのスタイルファイルをTeXに通すかまたは埋め込みたいTeXファイルのあるディレクトリに直接置きます。

```
gnuplot > set term tikz createstyle
```

とすると現在いるディレクトリに`gnuplot-lua-tikz.sty`、`gnuplot-lua-tikz.tex`、`gnuplot-lua-tikz-common.tex`の3つが生成されるのでコンパイルするTeXファイルがあるディレクトリでこのコマンドを叩けばよいです。

それではgnuplotからグラフを書き出してみたいと思います。

```
gnuplot > set term tikz
gnuplot > set output "graph.tex"
gnuplot > plot x
```

ちなみに1行目の`gnuplot > set term tikz`ですが、`gnuplot > set term tikz createstyle`をした人は必要ありません。
これで`graph.tex`というファイルが生成されたと思います。後はこのTeXファイルを本体のTeXファイルからインクルードすればOKです。

プリアンブルには最低限

```tex
\usepackage[dvipdfmx]{graphicx}
\usepackage{gnuplot-lua-tikz}
```

を追加してください。最後に本文で次のようにインクルードしてください。

```tex
\begin{figure}
  \begin{center}
    \include{graph}
    \caption{TikZ}
  \end{center}
\end{figure}
```

以上で最低限TikZを使ってgnuplotのグラフをTeXに貼り付けることが出来ます。
enchant.jsとtmlib.jsを使ったゲーム作成フレームワーク「enforce」チュートリアル（１８）テキストラベル

ここでは、「**game01**」というディレクトリ内で作業しているという前提で説明しています。

# テキストラベルを生成する
画面上にテキストデータを表示するスプライトを生成することが出来ます。
これを使って、スコア表示やゲームスタートボタンを置くことが出来ます。

※ **XPERIA A(SO-04E)では、テキストラベルを使用すると標準ブラウザが落ちます**

それでは、「**gameControl.coffee**」を開き、「**behavior**」にある「**when 1**」の最後にある「**@nextjob()**」の前に、下記のコードを追記してください。

```coffeescript
                addObject
                    type: LABEL
                    x: 0
                    y: 0
                    width: SCREEN_WIDTH
                    height: 48
                    fontsize: 48
                    color: 'yellow'
                    textalign: 'center'
                    labeltext: "enforce"
                    scene: GAMESCENE_SUB2
```
「**type**」に「**LABEL**」を指定しています。
これでオブジェクトがラベルオブジェクトになります。
**x**、**y**は表示位置なのですが、スプライトと違い右上の座標を指定します。
**width**、**height**はサイズ、**fontsize**はフォントのサイズ、**color**はテキストの色、**textalign**はテキストの整列方法、そして、**labeltext**に表示するテキストデータを指定します。
修正が終わりましたら保存し、コンパイルし、Webブラウザをリロードし、「z」キーを押すと画面の中央に黄色で「**enforce**」と出ていると思います。
**x、y、fontsize、labeltext**は直接データを設定すると変更が反映されます。
通常のスプライトと同じく、**opacity**と、**visible**もパラメータとして指定したり、後から変更することが出来ます。


[チュートリアル（１７）](http://qiita.com/digitarhythm/items/bbb9feb4a6725cb89980) <--- ⬛︎ ---> [チュートリアル（１９）](http://qiita.com/digitarhythm/items/beb7c6f35e76a733d1aa)

---

[enforceチュートリアル一覧](http://qiita.com/digitarhythm/items/9e75c871f5ce582a4d01)
【ps・kill】実行中のプロセス表示と強制終了


# 実行中のプロセスを表示
よく使うコマンドは下記。

```
ps aux
```

- `ps`コマンド：実行中のプロセスを表示
- auxはオプション
- a：自分以外のユーザーのプロセスも表示する
- u：ユーザー名と開始時刻を表示する
- x：制御端末のないプロセスの情報も表示する

実際には、`grep`コマンドとセットで用いることが多い。
▼実行例

```
ps aux | grep eclipse
```

- |：パイプ（左のコマンドの結果を右のコマンドの引数に渡す）
- `grep`コマンド：文字列検索

実行結果は下記。

```
tamushun      4753   1.3 17.1  7645116 1430280   ??  S    月09AM 177:06.55 /path/to/eclipse/Eclipse.app/Contents/MacOS/eclipse -psn_0_217141
tamushun     32777   0.0  0.0  2432768    596 s013  R+    2:28AM   0:00.00 grep eclipse
```

左から順に、

- USER：プロセスの所有ユーザー
- PID：プロセス番号
- %CPU：CPUの占有率
- %MEM：実メモリでの占有率
- VSZ：仮想分も含めた使用サイズ(Kバイト)
- RSS：実メモリ上の使用サイズ(Kバイト)
- TT：端末名
- STAT：プロセスの状態
  - R：稼動中
  - S：一時停止中
  - D：停止不可能で一時停止
  - T：終了処理中
  - Z：ゾンビプロセス（すでに実体は無い）
  - W：実メモリ上に無くて，スワップアウトしている
  - N：nice値
- STARTED：プロセスの開始時刻
- TIME：プロセスの総実行時間
- COMMAND：実行コマンド名とパス（シェル表記の場合もあり）

を表す。

# プロセス及びジョブの強制終了
```
kill 4753
```

- 4753はプロセスID
  - （上の例だとeclipseの実行プロセスIDが4753）
WordPress本文中に埋め込むタイマーショートコード

いろんな項目を本文中でタイマー表示させる機能を作りました。
自分ではよく使いそうなのでメモです。
##任意のテキストをタイマー表示
（各関数名のスコープなどは適宜）

###タイマー関数
```php:functions.php
function start_end_timer($start = null, $end = null) {

	//php5.4↑記法
    $now = (new DateTime())
            ->setTimeZone(new DateTimeZone('Asia/Tokyo'))
            ->format('Y-m-d H:i:s');
	
	//php5.3↑記法
    $is_open = (!$start) ?: (strtotime($start) <= strtotime($now));
    $not_close = (!$end) ?: (strtotime($now) < strtotime($end));

    if ($is_open && $not_close) {
        return true;
    } else {
        return false;
    }
}
```

###タイマー関数を使ったテキストを表示するだけのショートコード

```php:functions.php
function timer_text_shortcode($atts,$content=null) {
    extract(shortcode_atts(array(
        'start' => null,
        'end' => null,
                    ), $atts));

    if (!start_end_timer($start, $end)) {
        return null;
    }
    return $content;
}
add_shortcode('timer_text', 'timer_text_shortcode');
```

###本文中に書くショートコード
時刻の記述は正確に'Y-m-d H:i:s'で。（自動改行\<br>はここではカットしてません。）

```
[timer_text start='2015-02-04 14:30' end='2015-02-04 15:00']
2/4 14:30~15:00の間のみ表示されるテキスト
[/timer_text]

[timer_text end='2015-02-04 15:00']
2/4 ~15:00で非表示になるテキスト
[/timer_text]

[timer_text start='2015-02-04 15:00']
2/4 15:00~からずっと表示されるテキスト（一つ上のテキストと入れ替え表示になる）
[/timer_text]
```

##ほかの任意のショートコードにもこのタイマー機能を埋め込む
exelファイル読み込んでhtmlに展開する関数と合わせる、などに使えると思います。

```php:functions.php
function some_function_shortcode($atts) {
    extract(shortcode_atts(array(
		'title' => null,
		'file' => null,
		 //ここにstart,endの引数を追加するだけ
        'start' => null,
        'end' => null,
                    ), $atts));

    if (!start_end_timer($start, $end)) {
        return null;
    }
    return //title,urlなどで何かしらの処理をしたhtml;
}
add_shortcode('some_function', 'some_function_shortcode');

//ショートコードは同様に
//[some_function title=title file=data.xlsx start='2015-02-04 15:00']
```
Lombokの日本語訳

自分の勉強も兼ねて、Lombok公式サイトをなんちゃって和訳してみます。
間違っているかもしれませんが、あしからず。
あと、和訳できるところから和訳しているので、歯抜け状態です。
[公式サイト](http://projectlombok.org/index.html)

# `@NonNull`
_Lombok 0.11.10 から利用可能_
メソッドやコンストラクタの引数に`@NonNull`を使うと、Nullチェック文を自動生成します。

フィールドに`@NonNull`を記述すると、全てのメソッドやコンストラクタにnullチェック文が生成されます。
`@Data`の例を通して？
`lombok.NonNull`を引数に設定すると、指定したメソッドやコンストラクタにnullチェック文が追加されます。

nullチェックは`if (param == null) throw new NullPointerException("param");`のような文で、メソッドの一番上に追加されます。
コンストラクタでは、明示的に`this()`や`super()`が呼ばれたすぐ下に、nullチェックが追加されます。

もしnullチェックが上の方ですでに存在するならば、nullチェックは追加されません。





# `@Data`

全てのフィールドに`@ToString, @EqualsAndHashCode, @Getter`が、finalでないフィールドに`@Setter`が、そして`@RequiredArgsConstructor` !

## 概略

`@Data`は、@ToString, @EqualsAndHashCode, @Getter / @Setter を一緒に設定できる、ショートカット用のアノテーションです。
つまり、@Dataは、POJOs(Plain Old Java Objects)やbeansで通常使われる定型文（boilerplate)を生成します。
getterは全てのフィールド、setterはfinalでないフィールド、

〜
省略
〜

生成されるgetter/setterの全ては`public`です。
アクセス修飾子を上書きするには、フィールドやクラスに明示的に`@Setter`/`@Getter`を記述してください。
`AccessLevel.NONE`を使うと、生成されたgetter / setterは使えなくなります。？？



# `@Getter` と `@Setter`

## 概略
フィールドに`@Getter`や`@Setter`を書くと、lombokはデフォルトのgetter/setterを自動的に生成します。
デフォルトのgetterはフィールドをそのまま返します。フィールドの名前が`foo`の場合、関数名は`getFoo`です。
(フィールドの型が`boolean`の場合、関数名は`isFoo`）

生成されたgetter/setterは、明示的に`AceessLevel`を指定しない限り、`public`です。（下記の例参照）
利用できるアクセスレベルは、`PUBLIC`,`PROTECTED`,`PACKAGE`,`PRIVATE`です。

`AccessLevel.NONE`というアクセスレベルで、いつでもどんなフィールドに対しても、getter/setterの自動生成を手動で無効にできます。
つまり、クラスに記述された`@Getter`, `@Setter`, `@Data`アノテーションによる振る舞いを、上書きできます。

## Supported configuration keys:

### `lombok.getter.noIsPrefix = [true | false] (default: false)`
trueならば、booleanフィールドから生成されたgetterは、接頭辞がisでなくgetになります。

## Small print
* `java.lang.Boolean`の接頭辞はisでなくgetです。

# `@Log`
## 概略
_lombok 0.10から_ クラスにlogアノテーションを書くと、loggerフィールドを生成します。
loggerフィールドの名前は`log`で、型は記述したloggerアノテーションにより決まります。

利用できるアノテーションは６個です。

〜省略〜



するlogアノテーションは、どんなクラスにも使えます。



# Configuration System

## 概略
_Lombok 1.14 から利用可能_

`lombok.config`ファイルをどのディレクトリにでも作成できる。
この設定はディレクトリ内の全てのファイル、ディレクトリに適用されます。
Lombokの細かい使い方

Lombokの細かい使い方を紹介します。
Lombokを利用すると、Javaのgetter/setterなどメソッドを自動生成することができます。
http://codezine.jp/article/detail/7274

この記事は、Lombokの基本的な使い方を知っている人を、対象としています。

## 特定のフィールドのみメソッドを自動生成しない方法

クラスに@Data/Getter/Setterを設定した場合、すべてのフィールドに対してgetter/setterが生成されます。
しかし、ある特定のフィールドに対してはSetterを生成したくない場合がありあます。
たとえば、以下のクラスのような、コンストラクタで値を設定するフィールドに対しては、Setterを生成しない方がよいでしょう。
そんなときは、`@Setter(AccessLevel.none)`でSetterは生成されなくなります。

```java
/** グラフのプロット点を表すクラス */
@Data
class GraphPoint {
    GraphPoint(double x, double y) {
        this.x = x;
        this.y = y;
    }
    /** x値 */
    @Setter(AccessLevel.none)
    private double x = 0d;
    /** y値 */
    @Setter(AccessLevel.none)
    private double y = 0d;
    /** プロット点の色 */
    private String color = null;
    /** プロット点の形 */
    private String figure = null;
}
```
Embulk-plugin-inputの作り方

Bulk Loadに特化したOSS Embulk
まだ出始めなのでプラグインが少ないため、自己学習のため簡単なものを作ってみました
理解しているとは言えませんが、参考になればと思い、私が作った内容をシェアします

# 作成したプラグイン

指定ディレクトリ配下のファイルリストを取得するだけのinputプラグインです
下記githubにあげてみました

https://github.com/tadaichiro/embulk-plugin-input-fileinfo

# ソースコード

## モジュール・クラス

モジュールはEmbulk
クラスは任意の名前ですが、InputPluginを継承してください
また0.5(or 0.4?)からEmbulk配下にmodule Inputが必要となっています

またファイル名がinput_xxxからxxxx(プラグイン名のみ)に変わり、ディレクトリ構成がembulk/lib配下からembulk/lib/inputに変わったのでファイル名とディレクトリにも留意ください

```ruby:fileinfo.rb
module Embulk
  module Input
	class InputFileInformation < InputPlugin
```

## 実装メソッド

以下の３種類を実装する形になります

- self.transaction
- initialize
- run

### self.transaction

ここでは３つの変数を定義します

まず一つはtask
ここにはconfig.ymlで記載した内容など実行する際に必要な情報を詰め、後続に渡します

なおconfig.paramのdefault属性を付与しない場合は必須項目となり、設定しない例外が発生します

```ruby:fileinfo.rb
def self.transaction(config, &control)

  rootdir = config.param('rootdir', :string)
  ext = config.param('extension', :string, default: '*')
  sizelowerlimit = config.param('sizelowerlimit', :long, default: 0)
```

次にcolumns
これはinputプラグインが最終的に作成するスキーマ構造を定義します

```ruby:fileinfo.rb
columns = [
  Column.new(0, 'FILE_NAME', :string),
  Column.new(1, 'FILE_PATH', :string),
  Column.new(2, 'FILE_SIZE_RAW', :long)
]
```

なおColumnに適用できる属性は下記5つとなります

+ :boolean
+ :long
+ :double
+ :string
+ :timestamp

参照: https://github.com/embulk/embulk/blob/master/lib/embulk/column.rb

そしてthreads
これは実行スレッド数を定義します
今回は単なるファイル検索のためスレッドを１とベタ打ちしています

```ruby:fileinfo.rb
threads = 1
```

これらを定義した後にrunに渡すためにyieldを実行します

```ruby:fileinfo.rb
commit_reports = yield(task, columns, threads)
```

### initialize

今回は使いませんでしたがrun実行前の処理と思っています

### run

名前の通り実際の処理を記述する場所です
self.transactionで作成したスキーマ定義(columns)と同じ順序で@page_builderにaddし、最後に@page_builder.finishで確定させます

```ruby:fileinfo.rb
Dir.glob(rootdir + '/**/*') {|f|

  next unless FileTest.file?(f)
			  
  s = File::stat(f)

  next if ext != "*" && File::extname(f) == ext 
  next if s.size < sizelowerlimit * 1024 * 1024

  @page_builder.add([File::basename(f), File::dirname(f), s.size])
}
@page_builder.finish
```

最低限以上のものを実装すればプラグインとして動作します

# テスト方法

テストを実施するためにはまずbundleコマンドを実行します

```
java -jar embulk.jar bundle ./embulk_bundle
```

実行後./embulk_bundleフォルダが作成されます
このフォルダ配下にembulkフォルダがあるので、ここに今作成した.rbファイルを置きます

あとは通常と同様にconfig.ymlを作成してguess, preview, runを実行すればプラグインが動作するので、テストができるという手順です

ただしbundleで実行するので必ず-bで先ほど作成したフォルダを指定してください

```
java -jar embulk.jar run ./config.yml  -b ./embulk_bundle 
```

# gem installするような追加ライブラリを使いたい場合

例えばaws-sdkライブラリのように、通常のRubyならgem installして使うようなライブラリを使いたい場合があるかと思います
その場合以下の手順を踏んでください

1.　bundleコマンドでbundle用フォルダを作成する

```
java -jar embulk.jar bundle ./embulk_bundle
```

2.　作成されたフォルダ内のGemfileファイルに必要となるライブラリ名を追加します
ここではaws-sdkを指定します

```:Gemfile
gem 'aws-sdk', "~> 1.59.1"
```

3.　もう一度bundleコマンドを実行します

```
java -jar embulk.jar bundle ./embulk_bundle
```

この手順を踏むとGemfile.lockが更新され、依存するライブラリが登録されます
後は「テスト方法」と同様の手順で実行すればOKです

手順は以上となります

私のようなOSS初心者でも非常に簡単にプラグインが作成できるので、ぜひ作成してEmbulkにコントリビュートしてもらえればと思います
RxJSとajaxのGETを組み合わせた処理がIEで動かなかった問題と対処

# 事の発端
IE8-IE11で、RxJSのfromPromiseの定期的なGETを起点にした処理が1度しか実行されなかった。
IE11では、何故か開発者ツールを開いているときだけ正しく動作し、閉じていると動作しなかった。

# 原因
Internet Explorerは、AjaxのGETをキャッシュし、リクエストURLが同じならば2度目以降はAPIリクエストせずキャッシュを返す。
また、開発者ツールを開いている際はキャッシュが無効になる（ようだ）。

# 解決策
ajaxで送るデータのプロパティに次を追加する。

```js
cache: false
```

# 罠だったところ
ajax単体で使って変数にデータを代入するだけなら、キャッシュが利用されていても値が1回目と同じになるだけで済む。
しかし、RxJsのfromPromiseを用いている場合、キャッシュが利用されていると、定期的にGETしてもストリームに2度目以降の値が流れてこない（completeもerrorも起きない）。そこを処理の起点にしていたので、それ以後の処理も走らないという結果になっていた。

また、IEで「開発者ツールを開いている時だけ動作する」よくある原因として、Consoleオブジェクトを使っていることが多く挙がっていたので、しばらくその線で調査していたが、全然関係なかった。

# 参考文献
http://nobnoob.hatenablog.com/entry/2013/03/10/080419
JSPで発生した問題

JSP関係でハマった問題とその解決方法を、書いていきます。

# includeディレクティブとincludeアクションの違いを理解していなかっとことによる問題

## 問題
parent.jspにアクセスすると、以下のエラーが発生。

```text
javax.servlet.ServletException: JSP ファイル &quot;/grandchild.jsp&quot; が見つかりません
```

```jsp:parent.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<h1>Parent</h1>
<%@ include file="child.jsp" %>
```

```jsp:child.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<h2>Child</h2>
<jsp:include page="grandchild.jsp" />
```

```jsp:grandchild.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<h3>Parent</h3>
```

## 解決方法

* parent.jsp内の、`<%@ include file="child.jsp" %>` を `<jsp:include page="child.jsp" />` に置き換える。

* child.jsp内の、`<jsp:include page="grandchild.jsp" />` を `<%@ include file="grandchild.jsp" %>` に置き換える。


## 原因

includeディレクティブとincludeアクションの違いは次の通り。

>
* includeディレクティブは、Servletプログラムに変換する時点で組み込まれる。includeアクションはリクエストのあった時点で組み込まれる。
* includeディレクティブは、静的にリソースを組みこみ、組み込んだ側のJSPページと一体で処理される。includeアクションは処理された結果が、組み込まれる。


http://www.techscore.com/tech/Java/JavaEE/JSP/4-2/#jsp4-4

リソースが読み込まれる順番は次の通り、だと思う。
1. parent.jspがアクセスされる。→ parent.jsp
2. child.jspを静的にインクルードしようとするが、この時点でchild.jspにアクセスさらていないので、grandchild.jspをインクルードできない。
 ⇨エラー


## 終わりに
エラーが発生する原因は、インクルードの順番の問題だとは思うけど、いまいちうまく説明できなかった。

`<c:import>`と`<jsp:import>`が混在している場合も、上記のエラーが発生した。
原因は同様であると思うが、ちゃんと調査したい。

`<c:import>`は`<jsp:import>`よりパフォーマンスが最適かされているようなので、今後は`<c:import>`を使っていきたい。
http://struts.wasureppoi.com/jstl/02_import.html
小さなお友だちの為の　MacOsXでLua #3


#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#Lua
オフィシャルはこちら
http://www.lua.org/
![kobito.1422969331.288842.png](https://qiita-image-store.s3.amazonaws.com/0/33317/bb90acbc-77be-8953-59f8-f2c6c74aec71.png "kobito.1422969331.288842.png")

#ダウンロードページ
http://lua-users.org/wiki/LuaBinaries
![kobito.1422969462.986417.png](https://qiita-image-store.s3.amazonaws.com/0/33317/a00656c5-da08-d0c2-7c20-540b00165036.png "kobito.1422969462.986417.png")

色んなコンピュータで動いてますね。
Macの場合brewで一発
brew install lua
拡張したい人は、ここを参照。いいまとめ。
http://y-ken.hatenablog.com/entry/macosx-install-lua-luajit-luarocks

#動画にて公開しています。
http://youtu.be/5XsmMpi_VAQ

#luaファイルの作成
今回はテーブル型の紹介。
Indexがゼロ始まりではないのです。従って０では、「nil」として戻ります。
「Null」じゃないところ、とても突っ込みたい…
言語による決め事なので、ここは素直に学びましょう。

```lua:mytable.lua
-- mytable.lua
tbl = {"あ","い","う","え","お"}
print( tbl[2] )
print( tbl[4] )
print( tbl[1] )
print( tbl[0] )
```

#Result
lua FileName
うーん。確かに「nil」ですね。

![スクリーンショット 2015-02-04 0.27.57.png](https://qiita-image-store.s3.amazonaws.com/0/33317/c4a2d799-35d5-015b-9963-528e9245b584.png "スクリーンショット 2015-02-04 0.27.57.png")
Special folds in Powershell


# 理想と現実

## 理想
```ps1
> function sum {foldl {$_1 + $_2} ($_.GetType()::Zero)}
> 1..4 | sum
10
> $false, $false, $true | sum
True
```

## 現実
```ps1
> function sum {$input | foldl {$_1 + $_2} 0}
> 1..4 | sum
10
> function or {$input | foldl {$_1 -or $_2} $false}
> $false, $false, $true | or
True
```




# 実装

## foldl

[PowerShellでfoldl](http://d.hatena.ne.jp/kya-zinc/20091128)をコピればいいと思う。

```ps1
function foldl
{
  Param
  (
    [Parameter(Mandatory = $true)]
    $f,

    $_1,

    [Parameter(ValueFromPipeline = $true)]
    $_2
  )

  Process { $_1 = & $f $_1 $_2 }

  End { $_1 }
}
```

# 感想

`%{$memo = 0}{$memo += $_}{$memo}`で十分かな。
`%`と`?`以外の汎用的な高階関数はそこまで必要ないという感じ。



# おまけ

## foldl1

```ps1
function foldl1
{
  Param
  (
    [Parameter(Mandatory = $true)]
    $f,

    [Parameter(ValueFromPipeline = $true)]
    $_2
  )

  Begin { $first = $true }

  Process {
    if($first)
    {
      $_1 = $_2
      $first = $false
      return
    }

    $_1 = & $f $_1 $_2
  }

  End { $_1 }
}
```

## Special folds

```ps1
function and {$input | foldl {$_1 -and $_2} $true}

function or {$input | foldl {$_1 -or $_2} $false}

function sum {$input | foldl {$_1 + $_2} 0}

function prod {$input | foldl {$_1 * $_2} 1}

function maximum {$input | foldl1 max}

function minimum {$input | foldl1 min}

function max($_1, $_2){if ($_1 -ge $_2) {$_1} else {$_2}}

function min($_1, $_2){if ($_1 -le $_2) {$_1} else {$_2}}
```




## map-fold fusion

```ps1
function map-foldl
{
  Param
  (
    [Parameter(Mandatory = $true)]
    $g, 

    [Parameter(Mandatory = $true)]
    $f,

    $_1,

    [Parameter(ValueFromPipeline = $true)]
    $_2
  )
  
  Process
  {
    $_2 = & $g $_2
    $_1 = & $f $_1 $_2
  }

  End { $_1 }
}

function map-foldl1
{
  Param
  (
    [Parameter(Mandatory = $true)]
    $g, 

    [Parameter(Mandatory = $true)]
    $f,

    [Parameter(ValueFromPipeline = $true)]
    $_2
  )
  
  Begin { $first = $true }

  Process {
    if($first)
    {
      $_1 = & $g $_2
      $first = $false
      return
    }

    $_2 = & $g $_2
    $_1 = & $f $_1 $_2
  }

  End { $_1 }
}
```

## Special map-fold

```ps1
function all ($f) {$input | map-foldl $f {$_1 -and $_2} $true}

function any ($f) {$input | map-foldl $f {$_1 -or $_2} $false}
```

## Hmm...

```ps1
# > $array | concat
# > $array | {$_}

# > $array | concatMap $f
# > $array | %{$_ | %{& $f $_}}
# > $array |  %{$_} | %{& $f $_}

function maximumBy ($comp) {$input | foldl1 {maxBy $comp $_1 $_2}}

function minimumBy ($comp) {$input | foldl1 {minBy $comp $_1 $_2}}

function maxBy($comp, $_1, $_2){if ((& $comp $_1 $_2) -ge 0) {$_1} else {$_2}}

function minBy($comp, $_1, $_2){if ((& $comp $_1 $_2) -le 0) {$_1} else {$_2}}
```
Riot.js試してみた


Reactで消耗しているmizchiです。

とりあえず一通り動かしてみた。webpack上でtag-loader使ってtagを動的にコンパイルすると便利だった。 https://github.com/mizchi-sandbox/webpack-riot-skeleton

## Overview

- 軽量仮想DOM実装
- Vue風の独自文法

riotが軽量なのは独自の文法に対してプリコンパイラを持っててパーサがランタイムから切り離されてることと、仮想DOM実装が本当に最低限で結構サボってるようにみえる。

仮想DOMの実装部分はここ https://github.com/muut/riotjs/blob/master/riot.js#L348-L413


一通り書いてみた結果、独自シンタックスが最大の特長で、イベントハンドラ周りで基本的にDOMべったりのコードを要求されるといった印象。

JSとHTMLを並列して書くのをあえて推奨している。作者はたぶんそれがいいと思ったんだろう。(個人的に全く趣味があわない)

## 個人の感想

以下ボロクソいうんで好きな人は注意。


写経して理解するにつれ深まったのが、いまさら独自シンタックスのテンプレートとかどうでもいいしなんでそこで頑張っちゃってんの、っていう気持ち。


独自文法のパーサがあまり信頼出来ない。それはまあ開発がすすめばいいとして、意外と覚えることが多い。アンドキュメントな暗黙の約束事(引数がoptsに入ってるとか)が多くてなんかめんどい。Vueとなんとなく記法が似てるんだけど、そんなんだったらvue.js使うわってなる。


公式サンプルを引用。

```
<timer>
  <p>Seconds Elapsed: { time }</p>

  this.time = opts.start || 0

  tick() {
    this.update({ time: ++this.time })
  }

  var timer = setInterval(this.tick, 1000)

  this.on('unmount', function() {
    clearInterval(timer)
  })

</timer>
```

このテンプレートではある程度カプセルしたHTMLとJSが混在できて便利、みたいな作者の気持ちを感じるけど、知ってる言語のコンビネーションではなく、新しいテンプレートエンジン一つ覚えてパーサの気持ちを察しろみたいなコンテキストの分離しづらさを感じてしまっている。パーサの気持ちにならないと書けない。怖い。(同様の理由でReactのJSXを使わずreact-jadeを使っている)

プリコンパイラに依存しているのでビルドパスが複雑になって、簡単に実行できて便利、という風にもならないと思う。


とまあ、自分はあまり好きになれなかった。

個人の感想です。
Ruby 2.2.0 インストール(CentOS 6)


## 前提条件

事前に必要なパッケージがインストールされていること
[CentOS 6 初期設定](http://qiita.com/TatsuNet/items/8b54cc9c1687ecbff04f)

## 手順


```console:
# git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# source ~/.bash_profile
# rbenv --version
rbenv 0.4.0-129-g7e0e85b
# git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# rbenv install --list | grep 2.2.0
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  rbx-2.2.0
# rbenv install 2.2.0
# rbenv global 2.2.0
# ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
# gem install bundler
```
swift勉強しててふむふむ思った事１【subscript,property observer】

ちゃんと体系的にswift勉強してなかったので再勉強しているメモ
とりあえず今日書いてみたコード

```
import UIKit

struct Human
{
    var hands = 2
    var talk = "Muuu..."
    var name = [String]()
    
    var say:String{
        mutating get{
            return "Hello"
        }
        set {
            // 引数が勝手にStringになる
            talk = newValue
        }
    }
    
    // プロパティオブザーバーで値がセットされた時のロジックを仕込める
    var heart:String = "Stable"{
        willSet{
            say = "Change mind"
        }
    }
    
    // インスタンスの添字にアクセスできる
    subscript(i:Int)->String
    {
        get{
            return name[i]
        }
        set(newName){
            name.append(newName)
        }
    }
}

var ore = Human()
ore.say = "Good Morning"
print(ore.talk)

ore.heart = "Up!"

// subscript
ore[0] = "Jumbo"
ore[0]
ore[1] = "ken"
ore[1]


```
# subscript
インスタンスを作ってその添字にアクセスする仕組み。
Modelとかを作る時にすごく活躍しそう、JsonのレスポンスをModelに突っ込んで出す時とか、入れる時にただの配列オブジェクトにして無駄なクラス作るよりも、ちょっと使うだけのmodelとかを汎用性維持しつつちょろっと作る時に使いたい．

# property observer
ObjC時代にもあったけど進化したし、何より書き方がきれいになったので積極的に使いたい。
型推論もあるのであまり引数とかを意識しないでかけるのが良い。
数独ソルバー

9×9の数独を二国同盟を使って解こうと思います。
#データ構造
候補はそのマスの縦横四角をチェックして入れられる数字です。
例えば1,3,5が入るなら、kouho[1],[3],[5]の値を1、kouho[0]を3、それ以外は0です。

```c++:nikoku.cpp
//数字を入れるマス
class masu {
public:
	int number = 0;         //マスに入っている値
	int col, row;           //マスが入っている小区画の位置
	int kouho[9 + 1];   //マスに入りうる候補
};

//全てのマスをまとめたもの
class table {
public:
	masu square[9][9];
};
```

#プログラム
##二国同盟とは
二国同盟は、入れるマスが2択に絞られている数字が2つあり、そのマスが全く同じ時、対象のマスはその2つの数字のどちらかが必ず入るという手法です。
>[二国同盟-数独の解き方]http://www.sudokugame.org/solv/pairs.php

##関数
上記の候補を使って対象となるマスをまず探します。

```c++:nikoku.cpp
void rowUnion(table &table){
	//1行目から9行目まで
	for (int i = 0; i < 9; ++i){
		//各数字がどのマスを候補に持つか
		int nitaku[saizu + 1][2] = { 0 };
		for (int k = 1; k < 9 + 1; ++k){
			vector<int> temp;
			for (int j = 0; j < 9; ++j){
				if (table.square[i][j].kouho[k] == 1){
					temp.push_back(j);
				}
			}
			//候補となるマスが2つしかなければ
			if (temp.size() == 2){
				nitaku[k][0] = temp[0];
				nitaku[k][1] = temp[1];
			}
		}
```

これで2択に絞られている数字がわかりました。
##二国同盟のチェック
nitaku[k][0]とnitaku[k][1]が数字kの入るマスなので、これが一致するかを確認します。

```c++:nikoku.cpp
//各数字について
for (int k = 1; k < saizu + 1; ++k){
	//その数字が入るマスが2択であれば
	if (nitaku[k][0] != 0){
		for (int m = k + 1; m < saizu + 1; ++m){
			//同じマスを2択として持つ数字を探す
			if ((nitaku[k][0] == nitaku[m][0]) 
				&& (nitaku[k][1] == nitaku[m][1])){
				//2択であるマスをa,bとする
				int a = nitaku[k][0];
				int b = nitaku[k][1];
				//2つのマスの候補を一旦すべて消す
				for (int n = 0; n < saizu + 1; ++n){
					table.square[i][a].kouho[n] = 0;
					table.square[i][b].kouho[n] = 0;
				}
				//2つの候補だけの状態にする
				table.square[i][a].kouho[k] = 1;
				table.square[i][a].kouho[m] = 1;
				table.square[i][a].kouho[0] = 2;

				table.square[i][b].kouho[k] = 1;
				table.square[i][b].kouho[m] = 1;
				table.square[i][b].kouho[0] = 2;
			}
		}
	}
}
```

難問ナンプレを手で解くときは効果的な二国同盟ですが、このコードを使って解いたところかえって遅くなりました。候補が1つしかないマスを確定させるのと、候補が少ないマスから探索するのは速くなったので、二国同盟の出現頻度が少ないのが原因かなと。
小さなお友だちの為の　MacOsXでLua #2


#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#Lua
オフィシャルはこちら
http://www.lua.org/
![kobito.1422969331.288842.png](https://qiita-image-store.s3.amazonaws.com/0/33317/bb90acbc-77be-8953-59f8-f2c6c74aec71.png "kobito.1422969331.288842.png")

#ダウンロードページ
http://lua-users.org/wiki/LuaBinaries
![kobito.1422969462.986417.png](https://qiita-image-store.s3.amazonaws.com/0/33317/a00656c5-da08-d0c2-7c20-540b00165036.png "kobito.1422969462.986417.png")

色んなコンピュータで動いてますね。
Macの場合brewで一発
brew install lua
拡張したい人は、ここを参照。いいまとめ。
http://y-ken.hatenablog.com/entry/macosx-install-lua-luajit-luarocks

#動画にて公開しています。
http://youtu.be/CosYOpye_1Q

#luaファイルの作成
今回は素数を求めます。剰余を求める関数を作成し、ループしてるだけです。
割り切れたら、素数ではないのでfalse
割り切れなかったら、素数なのでtrueというだけのロジックなのです。
こんなんで100くらいまでは求めることが可能です。
高等数学における素数や複素数とかについては…保留

```lua:prime.lua
-- prime.lua
function is_prime(n)
  local i
  for i = 2,(n-1) do
    if n % i == 0 then return false end
  end
  return true
end

-- check prime
for i=2,100 do
  if is_prime(i) then io.write("["..i.."]") end
end
```

#Result
lua FileName
簡単ですね！！
![スクリーンショット 2015-02-03 23.29.07.png](https://qiita-image-store.s3.amazonaws.com/0/33317/d2ed353a-3f9d-b869-550f-3420339e9b05.png "スクリーンショット 2015-02-03 23.29.07.png")
show-trailing-whitespaceは便利だが、見栄えが悪いこともある

Emacsでは、この変数を有効にするだけで余分な空白が目立つようになって極めてべんりだ。

![php-mode with show-trailing-whitespace](https://qiita-image-store.s3.amazonaws.com/0/4121/ca3c3cba-cc68-9073-f269-fda58d069421.png)

`~/.emacs.d/init.el`に次のような一行を足すとよい。

```init.el
(setq-default show-trailing-whitespace t)
```

……と、ところでこのままでは若干見栄えが悪くなることもある。Eshellや対話環境を利用するときなど。

![](https://qiita-image-store.s3.amazonaws.com/0/4121/8879466b-8bf4-2491-5d2a-aab7c06742bd.png)

## 解決策

微妙な感じもするんだけど、`(setq show-trailing-whitespace nil)` つまり機能を無効化するだけのフックを各モードに設定する。

`my/disable-trailing-modes`は末尾の空白表示を無効化するモードのブラックリストなので、嫌だなと思ったらこのリストに追加してやればいい。

```init.el
(defun my/disable-trailing-mode-hook ()
  "Disable show tail whitespace."
  (setq show-trailing-whitespace nil))

(defvar my/disable-trailing-modes
  '(comint-mode
    eshell-mode
    eww-mode
    term-mode
    twittering-mode))

(mapc
 (lambda (mode)
   (add-hook (intern (concat (symbol-name mode) "-hook"))
             'my/disable-trailing-mode-hook))
 my/disable-trailing-modes)
```

私は[dash.el](https://github.com/magnars/dash.el)がだいすきなので、例によって`mapc`は短く書ける。

```init.el
(--each my/disable-trailing-modes
  (add-hook (intern (concat (symbol-name it) "-hook"))
            'my/disable-trailing-mode-hook))
```
SublimeText | SublimeCodeIntel plugin で快適な Ruby コーディング。 定義ジャンプ・コード補完・関数呼び出しツールチップ

## :musical_score: 概要
SublimeText の SublimeCodeIntel plugin で快適な Ruby コーディング。

:dolphin: 定義ジャンプ
<i class="fa fa-puzzle-piece" style="font-size:1em;"></i> コード補完
:hammer: 関数呼び出しツールチップ

## :musical_note: 公式トップページ
<i class="fa fa-external-link" style="font-size:1em;"></i> [SublimeCodeIntel 公式サイト](http://sublimecodeintel.github.io/SublimeCodeIntel/)

トップページのアニメーション GIF のデモをみるだけでわくわくします

## <i class="fa fa-cloud-download" style="font-size:1em;"></i> Installations
Package Control をインストールしてある前提とします。
Package Control の Install を呼び出し、 `SublimeCodeIntel` で検索してインストールを実行します

インストール後に、 Sublime Text を再起動し、下記のエラーが発生する場合

~~~
"A plugin (SublimeCodeIntel) may be making Sublime Text unresponsive by taking too long (0.022177s) in its on_modified callback.

This message can be disabled via the detect_slow_plugins global setting"
~~~

User Settings に以下を追加する

~~~json
“detect_slow_plugins”: false
~~~

## <i class="fa fa-flask" style="font-size:1em;"></i> 試用
### :dolphin: 定義ジャンプ
`Alt + クリック` または `super + alt + ctrl + up` でメソッドや変数の定義もとへジャンプできます。  
外部ファイルへのジャンプも可能です。  
ショートカットキーは変更可能です。  

* サンプル
Hoge クラスと Hige クラスは別ファイルになっています。

![jump.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/e919a142-b62a-7d29-a478-224dfb94c593.gif)

### <i class="fa fa-puzzle-piece" style="font-size:1em;"></i> コード補完
標準ライブラリや、自作メソッドの補完が可能になります。  
ドットやコロン×2などを入力すると自動的に呼び出されます。  
手動で呼び出したい場合は、 `shift + ctrl + space` を押します。  

* サンプル

![def.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/22f14b28-d6c2-597c-8c3b-7164cbf42a32.gif)

### :hammer: 関数呼び出しツールチップ
標準ライブラリや、自作メソッドの補完時に、該当メソッドのドキュメンテーションを行ってあると、
ドキュメントを表示してくれます。

* サンプル

![suggest.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/783ae549-8a68-864d-e2e9-dca0c6b3e1d0.gif)

## :link: 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [SublimeCodeIntel 公式サイト](http://sublimecodeintel.github.io/SublimeCodeIntel/)