OmniAICreator/Qiita-1.07M huggingface dataset:
Macでフォルダー内の画像を1発で複数のサイズにリサイズ


Macには画像をリサイズできるsipsコマンドがあります。
今までは大きいサイズをPhotoShopやPrint.Netなどでリサイズしていたのですが、これを使うと簡単に画像をリサイズできます。



## オプション(ほんの一部)
* -z height(px) width(px): 画像を縦横指定のサイズにリサイズ

```bash:例
$ sips -z 360 480 image.jpg

```


* -Z : 画像の縦横のうち、大きい方のサイズに合わせて縦横比率はそのままで指定サイズにリサイズ

```bash:例
$ sips -Z 800 image.jpg

```

* --out 指定ディレクトリにリサイズしたファイルを出力

```bash:例
$ sips -Z 800 image.jpg --out resized/

```



## マニュアル
[Apple公式リファレンス](https://developer.apple.com/library/Mac/documentation/Darwin/Reference/ManPages/man1/sips.1.html)


## 使ってみた
これらを使って、ディレクトリ内にある.jpgファイルを検索し、複数のサイズにリサイズするスクリプトを作ってみました。
ファイル名はresize_images.shにしました。


ディレクトリのチェックはしていないです。
スクリプトファイルのあるディレクトリ内に複数のjpgファイルがあり、サブディレクトリとしてresized1〜4、originがあるのが前提です。


```bash
#!/bin/bash

find . -name "*.jpg" -maxdepth 1 | while read f; do 

sips -Z 320 $f --out resized1/$f
sips -Z 800 $f --out resized2/$f
sips -z 160 160 $f --out resized3/$f
sips -z 80 80 $f --out resized4/$f
mv $f original/

done
```

./resize_images.sh で実行します。


処理内容は、
find でファイル名が*.jpgにマッチするファイルを検索。
-maxdepth 1 で深度をカレントディレクトリのみに指定。
read で画像ファイルを順に読み込みリサイズ処理をループ。
オリジナルの画像ファイルはoriginal/ディレクトリに移動。

## 結果

指定のディレクトリに
resized1/には
![320](http://www.abachibi.com/jiro-ins/images/320/jiro_nakayama.jpg)

や

resized3/には
![160x160](http://www.abachibi.com/jiro-ins/images/m/jiro_nakayama.jpg)

や

resized4/には
![80x80](http://www.abachibi.com/jiro-ins/images/t/jiro_nakayama.jpg)

みたいな感じのファイルが出力されます。
怒られる前に、最新のjsファイルを読み込ませよう!

多くの閲覧者のブラウザは、jsをキャッシュする設定になっているかと思います。
だので、jsを更新したりhtmlを更新したりした時に｢期待通り動かないよ!｣と怒られる場合があるます。

ちゃんとテストして自信たっぷりなのにブラウザキャッシュなんかにヒヤヒヤさせられたくないよね。

そんな時は、最新のjsを読み込んでもらうようにお願いしましょう。

```lang:html
<script src="hoge.js?ver=1"></script>
```

とかjsの後ろの **クエリストリングに値を入れてあげます。**
そうすることで、更新する度に違い値を入れてあげれば最新のものを読み込んでくれます。
値はなんでもいいです。

t=20140423123000 とか日付と時間でもいいと思います。

開発者が多いなら、それぞれに番号をもってもらって

ver=1&u=1

とかユーザー番号みたいなのをつけたりもよいかもですね。
Mavericks/Yosemite‎でNTFSのHDDを読み書きできるようにする方法（メモ）


参考サイト：http://apple.stackexchange.com/questions/106589/write-in-ntfs-using-mavericks

MacとWindowsでHDDを共有したいため、NTFSのHDDをREAD/WRITEマウントできるようにしてみた。

```Bash:command
brew update
brew install caskroom/cask/brew-cask
brew cask install osxfuse
brew install ntfs-3g
sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig
sudo ln -s /usr/local/sbin/mount_ntfs /sbin/mount_ntfs
brew info osxfuse
```
C++のconstメンバ関数の挙動を直感的に理解する


C++のconstメンバ関数ってなんとなく「そのメンバ関数の呼び出しによってオブジェクトの内容を変更しないことを宣言する」程度に理解していて、オブジェクトの内容を変更しないというのが具体的にどういう操作なのかきちんと理解していませんでした。

そのため、例えばなぜこれがエラーで：

```cpp:Hoe.h
class Hoe {
public:
    Hoe() {
    }
    
    virtual ~Hoe() {
    }

    void func() {
        ...
    }
};
```

```cpp:Fuga.h
class FugaNG {
private:
    Hoe _hoe;
    
public:
    FugaNG() : _hoe() {
    }
    
    virtual ~FugaNG() {
    }
    
    void callHoeFunc() const {
        _hoe.func(); // ← コンパイルエラー！
    }
};
```

これがエラーにならない：

```cpp:FugaOK.h
class FugaOK {
private:
    Hoe *_pHoe;
    
public:
    FugaOK() {
        _pHoe = new Hoe();
    }
    
    virtual ~FugaOK() {
    }
    
    void callHoeFunc() const {
        _pHoe->func(); // ← エラーにならない
    }
};
```

のか、知識としては分かっていても理屈が分かっていませんでした。

で、いろいろ調べたところ、以下のように考えるのが一番直感的だということが分かりました。（C++に詳しい人にとっては当たり前のことなのかもしれませんが…。）

    「constメンバ関数では、暗黙的に渡されるthisポインタがconstで修飾される」

具体的に見ていきます。

# 前提

メンバ関数が呼び出される時、自分自身へのポインタであるthisが暗黙的に渡されるわけですが、例えば `Hoe#func()` についてこれを便宜上次のように書くことにします：

```cpp:
void func([Hoe *this]) {
    ...
}
```

# オブジェクト経由でのメンバ関数を呼び出すケース

`FugaNG#callHoeFunc()` について考えてみます。このメンバ関数はconstメンバ関数ですので、渡されるthisポインタは次のようにconstで修飾されます：

```cpp:
void callHoeFunc([const FugaNG *this]) {
    _hoe.func();
}
```

ここで、`_hoe.func()` は実は `this->_hoe.func()` で、さらに上記の表記法で書くとこの呼び出しは `this->_hoe.func([&this->_hoe])` となりますが、<strong>thisがconst修飾されていることでconst修飾が波及して `&this->_hoe` もconst修飾された `const Hoe *` になる</strong>ため、呼び出そうとしているメンバ関数のシグネチャは

```cpp:
void func([const Hoe *this])
```

である必要があります。ところが実際は `func()` は非constなメンバ関数であるためシグネチャは

```cpp:
void func([Hoe *this])
```

となり、一致せずエラーになるというわけです。

# ポインタ経由でのメンバ関数を呼び出すケース

一方、`FugaOK#callHoeFunc()` についてはどうでしょう。このメンバ関数も同じくconstメンバ関数ですので、渡されるthisポインタは次のようにconstで修飾されます：

```cpp:
void callHoeFunc([const FugaOK *this]) {
    _pHoe->func();
}
```

ここで、`_pHoe->func()` は実は `this->_pHoe->func()` で、さらに上記の表記法で書くとこの呼び出しは `this->_pHoe->func([this->_pHoe])` となります。

さて `this->pHoe` の型はどうなるでしょう。thisがconst修飾されていることで `this->_pHoe` もconst修飾されて`const Hoe *` になると思いますか？<strong>実はそうはなりません。</strong>const参照はされますが、`Hoe * const` のように修飾されます。これは、<strong>こうしないとthisが指すオブジェクトの中身が保護できない</strong>からです。

仮に `this->_pHoe` が `const Hoe *` のように修飾されてしまうと、`_pHoe` が指す先は保護されますが `_pHoe` 自体は変更可能ということになってしまい、目的が達せられないことになります。`_pHoe` 自身を保護するために `Hoe * const` のように修飾されるというわけです。

続けましょう。

`Hoe * const` の `const` は関数のシグネチャには影響しませんので、呼び出そうとしているメンバ関数 `func()` のシグネチャは

```cpp:
void func([Hoe *this])
```

となります。このため無事 `Hoe#func()` が呼び出せるというわけです。

# まとめ

constメンバ関数の挙動を考える時は、次の原則を頭に置いておけば分かりやすいです。

- constメンバ関数では、暗黙的に渡されるthisポインタがconstで修飾される
- const修飾は波及する

「全然直感的じゃないじゃん！」と思われた方、すみません…。
UglifyJSでコードの削減

UglifyJS2でコードを削減する方法を調べつつ試したのでいくつかメモ。当然ながらgrunt-contrib-uglifyでも同様の事ができる。

# -c, --compress

```js:index.js
var a = (true) ? 1 : 2;
```

```sh
$ uglifyjs index.js -c -o index.min.js
```

```js:index.min.js
var a=1;
```

`--compress`を付けて分岐が常に片方しか実行されないようなコードを書くと、実行されない箇所のコードは削除される。

## pure\_funcs

```js:index.js
(function(global) {

  var _ = global._;

  function require_() {
    _ = require('lodash');
  }
  require_();

  function log_() {
    console.log('log');
  }
  log_();

  _.noop();

}(this));
```

```sh
$ uglifyjs index.js -b -c 'pure_funcs=["require_", "log_"]' -o index.min.js
```

```js:index.min.js
!function(global) {
    var _ = global._;
    _.noop();
}(this);

```

`--compress`のあとに`pure_funcs`を指定すると、指定された関数が削除される。

# -d, --define

```js:index.js
if (typeof __DEBUG__ !== 'undefined') {
  console.log('__DEBUG__');
}

if (__DEBUG__) {
  console.log('__DEBUG__');
}

console.log('Hello, World!');
```

```sh
$ uglifyjs index.js -c -d '__DEBUG__ = void 0' -o index.min.js
```

```js:index.min.js
console.log("Hello, World!");
```

`--define`で変数を宣言できる。`--compress`が同時に指定されていると実行されない箇所のコードが削除される。

# grunt-contrib-uglify

grunt-contrib-uglifyで指定する場合の設定など。load-grunt-configを使った場合のコードなのでいい感じになんとか。

```coffee:uglify.coffee
module.exports =

  main:
    files:
      'index.min.js': [
        'index.js'
      ]
    options:
      compress:
        pure_funcs: [
          'require_'
        ]
        global_defs:
          __DEBUG__: undefined
```
developブランチがないgitリポジトリでgit checkout developと打ってしまう問題

複数案件を同時に抱えたりして、[メインライン](http://itpro.nikkeibp.co.jp/article/COLUMN/20071105/286395/)のブランチの名前が `master` だったり `develop` だったりすることがあります。そのような場合、

```shell-session
% git co develop
(git)-[master]
error: pathspec 'develop' did not match any file(s) known to git.
```

というエラーを一日に何度も出してしまったり、手癖で上記のエラーを見過ごしたまま `develop` ブランチから分岐すべきところを `master` ブランチから分岐してしまったりして、つらいです。

そこで、 git リポジトリごとに `dev` という `alias` を設定することにしてみました。

```shell-session
# master で開発するリポジトリ
git config alias.dev 'checkout master'

# develop で開発するリポジトリ
git config alias.dev 'checkout develop'
```

こうすることで、`git dev` で、メインラインのブランチに統一的に戻ることができて便利になりましたとさ。めでたしめでたし。
CakePHP2.4.7でのDebugKit設定


```
git clone git://github.com/cakephp/cakephp.git
```
でCakePHP2.4.7を導入。

初めてCakePHP2に触れたので、エラーに出ているDebugKitの設定がよくわからなかったので、エラー名で調べると以下のサイトが出てきました。
http://sd.pot.co.jp/2012/02/01/cakephp2-0%E3%81%ABdebugkit%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%82%8B

しかし、このブログの通りにすると、syntaxerrorが起きてしまったので、
https://github.com/cakephp/debug_kit/blob/master/README.md
の本家本元のREADMEを読むと。

ブログでは
```
[php]CakePlugin::load('DebugKit');[/php]
```
と記載されていたのに対し、

```
CakePlugin::load('DebugKit');
```
が正しい表記であること。

そして、これを
```
app/Config/bootstrap.php
```
の末尾に書き加えるとエラーが解消しました。

やはり英語でも、ちゃんと原文のマニュアルを読もうってことですね。。。。

ちなみに、そのほかのエラーは
```
app/temp
```
の書き込み権限を再帰的に変更かけたらすべて解決でした。
jqueryでつくるテーブルのソート機能（ドットインストール）



テーブルのソート機能

 ```
<!DOCTYPE>
<html>
<head>
     <meta charset=“UTF-8”>
     <title>jQuery Table Sort</title>
</head>
<body>

<table>
     <thead>
          <tr>
               <th　class =“dothesort" data-type=“string”>名前<span></span></th>
               <th class=“dothesort” data-type=“integer">点数<span></span></th>
          </tr>
     </thead>
     <tbody>
          <tr>
               <td>taguchi</td>
               <td>32</td>
          </tr>
          <tr>
               <td>fkoji</td>
               <td>4</td>
           </tr>
           <tr>
               <td>dotinstall</td>
               <td>23</td>
            </tr>
            <tr>
               <td>takahashi</td>
               <td>12</td>
             </tr>
     </tbody>
<table>
</table>
<script src=“http://code.jquery.com/jquery-1.10.2.min.js”></script>
<script>
$(function(){

//並び替え順を設定
var sortOrder = 1; //1:昇順, -1:降順
//列をクリックしたら
     $(‘.dothesort’).click(function(){

          var type = $(this).data(’type’);
          var col = $(this).index(); //0, 1 ...

          //行全体を取得
          var $rows = $(’tbody>tr’);

          //行を並び替え（点数で）
          $rows.sort(function(a,b){
               return compare(a, b, type)*sortOrder;

          var arrow.empty.append($rows);

          var arrow = sortOrder === 1 ? “▲”:”▼”;
          $(‘.dothesort > span’).text('’);
          $(this).find(’span’).text(arrow)
          //並び替え順を反転
          sortOrder *= -1;
     });

     function  compare(a, b, type, col){
               var  _a = $(a).find(’td’).eq(col).text() *1;
               var  _b = $(b).find(’td’)eq(col).text() *1;

               if(type == “string”){
                    if(_a < _b)
                         return -1;
                    } 
                    if(_a > _b){
                         return 1;
                    }
                    return 0;
          } else {
               _a *= 1;
               _b *= 1;
               return _a - _b
              }
               

     }

});
</script>
</body>
<html>
```
ubuntu14.04でNetBeansの環境構築＋フォント変更

たぶんjavaが入っている必要がありますが，入っている前提で進めます．

もしも，なければ

```shell-session
sudo apt-get install openjdk-7-jdk
```
でインストールしてから進めます．

#NetBeansをダウンロードする
[NetBeans IDE 8.0 Download](https://netbeans.org/downloads/ "NetBeans IDE 8.0 Download")
でダウンロードしてきます．
僕はとりあえずALLのやつをダウンロードしました．

#インストールする
Downloadsのディレクトリに，netbeans-8.0-linux.shがダンロードされたとします．もし違ったら，適当に読み替えてください

```shell-session
sudo mv ~/Downloads/netbeans-8.0-linux.sh /usr/local/
cd /usr/local/
sudo ./netbeans-8.0-linix.sh
```
これで入ります
が，このままでは絶対パスを指定しないと起動できない．

#シンボリックリンクを貼ってどこからでも起動できるようにする
```shell-session
sudo ln -s /usr/local/netbeans-8.0/bin/netbeans /usr/local/bin/
```

#フォントがなんか変なのを直す
デフォルトで起動すると，フォントがとても残念な感じになりましたので，
Rictyのフォントを入れて，いい感じに表示されるようにします．

[公式サイト](https://github.com/yascentur/Ricty)見るのが早そう
参考サイト
[NetBeans 7.1 と プログラミング用フォント Ricty のインストール](http://d.hatena.ne.jp/Kenji_s/20120109/1326109653)

[プログラミング用フォント Ricty](http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html)
#いろいろダウンロードして，Rictyのフォントの生成

##環境構築

```shell-session
sudo apt-get install fontforge
```


##Miguフォントのインストール
[Migu（ミグ）フォント](http://mix-mplus-ipa.sourceforge.jp/migu/)
ここから，Migu 1Mをダウンロードします.
Migu Mixじゃないです．
~/Downloadsにダウンロードされたとします

```shell-session
cd Downloads
unzip migu-1m-20130617.zip
mkdir ~/.fonts
mv migu-1m-20130617/migu-1m-bold.ttf migu-1m-20130617/migu-1m-regular.ttf ~/.fonts
```
##inconsolataをインストール
[inconsolata](http://levien.com/type/myfonts/inconsolata.html)
ここから，OpenTypefileをダウンロードしてきます．otf形式のファイルがダウンロードされるはずです．

```shell-session
mv ~/Downloads/Inconsolata.otf ~/.fonts
```

##生成用のスクリプトをダウンロード

[github ricty](https://github.com/yascentur/Ricty)
ここから，zipなりsshなりでダウンロードして，
.fontsにぶち込む．

##Rictyの生成

```shell-session
cd ~/.fonts/Ricty
mv ./ricty_generator.sh ../
cd ..
./ricty_generator.sh Inconsolata.otf migu-1m-regular.ttf migu-1m-bold.ttf
```

これで30秒くらいでRictyのフォントが生成される

##Rictyのインストール

```shell-session
cd ~/.fonts
fc-cache -vf
```

これで入ります
#NetBeansの設定
##フォントをRictyに設定
NetBeansを起動して，メニューバーから[ツール]→[オプション]で，
「フォントと色」の設定で，フォントを『Ricty』に変更します．

これでもまだフォントが残念なのはほぼ変わりません．

設定ファイルを書き換えます

##設定ファイルの書き換え
今回の場合，netbensのソフトは．/usr/local/netbeans-8.0に入っているかと思いますので，そのつもりで．

```shell-session
cd /usr/local/netbeans-8.0/etc/
sudo (好きなエディタ) netbeans.conf
```

ここで，netbeans_default_options="ほにゃらら"という部分があるので，ほにゃららの後に

```
-J-Dawt.useSystemAAFontSettings=on
```

と付け加えてください．これで，NetBeansを再起動すればいい感じのフォントになっているはずです．
HttpUrlConnection とエラーハンドリング

## HttpUrlConnection の概要

ストリームを用いた汎用の Network I/O のためのインタフェースとして、[`URLConnection`](http://docs.oracle.com/javase/jp/7/api/java/net/URLConnection.html)があり、このうち HTTP に基づいたものが[`HttpUrlConnection`](http://docs.oracle.com/javase/jp/7/api/java/net/HttpURLConnection.html)です。さらにこの子クラスとして、[`HttpsUrlConnection`](http://docs.oracle.com/javase/jp/7/api/javax/net/ssl/HttpsURLConnection.html)もあります。

## Input

`URLConnection#getInputStream()`で得られる`InputStream`を読み取ることで、レスポンスのデータを取得します。

## Output

`URLConnection#getOutputStream()`で得られる`OutputStream`にデータを書き出すことで、リクエストを作成します。
`OutputStream`を`close()`するまでリクエストは送られません。

## Error

サーバから、4xxや5xxなどのエラーレスポンスが返されると、`FileNotFoundException`がスローされます（コードは[ここのL176](https://android.googlesource.com/platform/libcore/+/757afaa7afe96791a3cc612c9e3c4597a7321c7e/luni/src/main/java/libcore/net/http/HttpURLConnectionImpl.java)）。

ただし、`URLConnection`のインタフェースのほとんどは`IOException`をスローすることがドキュメントに明示されているのみで、IDE のコード補完にまかせてコードを書くと、`IOException`をキャッチするブロックに全てが吸収されてしまいます。

`FileNotFoundException`をキャッチした場合で、サーバがエラーレスポンスに何らかのデータをくっつけて来た場合、`HttpUrlConnection#getErrorStream()`で`InputStream`を取得し、エラーレスポンスを読み取ります。

よって、愚直に書くと以下の様な悲しいコードになります。

```java

InputStream in = null;
try {
    in = connection.getInputStream();
    // ...
} catch (FileNotFoundException e) { // IOException をキャッチするより先に FileNotFoundException をキャッチしないと IOException のキャッチブロックに行くのでこうする
    System.err.println(e);
    InputStream err = null;
    try {
        err = connection.getErrorStream();
        // 4xx または 5xx なレスポンスのボディーを読み取る
        // ...
    } catch (IOException e) {
        System.err.println(e);
    } finally {
        if (err != null) {
            try {
                err.close();
            } catch (IOException e) {
                System.err.println(e);
            }
        }
    }
} catch (IOException e) {
    System.err.println(e);
} finally {
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
            System.err.println(e);
        }
    }
    if (connection != null) {
        connection.disconnect();
    }
}
```
【Batch】年月日で階層化したフォルダを作成する【備忘録】

バッチファイル作って

```bat:
@echo off
md %DATE%
```


これでできるはず。
ついでに開いてもらうには

```bat:
@echo off
md %DATE%
cd %DATE%
start.
```

階層としては
2014/4/27で実行した場合

```
2014
└04
　└27
```

になる
初めて Admob を試した時のメモ：Admob を self.tableView.tableFooterView にセットしてみた


これでよいのだろうか？

```objective-c:AdmobBannerExampleViewController.m
#import "GADBannerView.h"

@interface AdmobBannerExampleViewController : UIViewController
{
  // インスタンスのバリューとして宣言
  GADBannerView *bannerView_;

}

...

#pragma mark -
#pragma mark GADBannerViewDelegate Method

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
{

	// スタティック変数を宣言
	static BOOL adViewDidReceiveAdLoaded;

	// 念のため動いているか確認
    NSLog(@"%s %d", __PRETTY_FUNCTION__, adViewDidReceiveAdLoaded);

	// 一度ロードされたら再度ロードされないようにする
	if (!adViewDidReceiveAdLoaded) {

		//フラグをたてる
		adViewDidReceiveAdLoaded = YES;

		//banner を表示させる為の view を予め容易しておく（余白の背景色を調整するため）
		//kGADAdSizeMediumRectangle banner なので、 横幅が 300px なので余白がでる
		UIView *backgroundView = [[UIView alloc] init];

		//bannerView.frame から backgroundView の大きさ調整
		//バナーのサイズを取得
		CGRect rect = bannerView.frame;

		//横幅を self.view の横幅に変更する
		rect.size.width = self.view.frame.size.width;

		//backgroundView に高さが banner と等しく、幅が self.view と同等にする
		backgroundView.frame = rect;

		//bannerView.frame の幅の余白調整
		rect = bannerView.frame;

		//幅余白分を調整
		rect.origin.x = (backgroundView.frame.size.width - bannerView.frame.size.width) / 2;

		//origin.x に左の余白をつくったので、それを bannerView に再度セットする
		bannerView.frame = rect;

		//backgroundView に bannerView を追加
		[backgroundView addSubview:bannerView];

		//bannerView_ が宣言されていたときに 0.0f していたので、1.0f にセットして表示させる
		bannerView.alpha = 1.0f;

		//tableFooterView に適応させると最終的に自動で
		//backgroundView の位置・サイズを調整してくれる（多分、どなたか突っ込みを）
		self.tableView.tableFooterView = backgroundView;

    }

}

...

- (void)viewDidLoad {

	//footer なので、ミディアムレクタングルを使ってみる
	//320x50	Standard Banner	Phones and Tablet kGADAdSizeBanner
	//300x250	IAB Medium Rectangle	Phones and Tablet kGADAdSizeMediumRectangle
	//bannerView_ をセットする
	bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeMediumRectangle];

	//tableFooterView にセットするところで表示させる
	bannerView_.alpha = 0.0f;

	//広告ユニットIDをセット
	bannerView_.adUnitID = @"広告のID";

	//root view controller の準備
	bannerView_.rootViewController = self;

	//デリゲートの準備
	bannerView_.delegate = self;

	//バーナーをロードの準備
	GADRequest *request = [GADRequest request];

	//テストの場合
	request.testing = YES;

	//バナーをロード
	[bannerView_ loadRequest:request];
}
```
FuelPHP開発入門_09


今回はAssetsの使い方をヽ(´@ω@｀)ﾉ

## Assetsとは

CSS、JS、IMAGEファイルなどを設置する場所で、Assetクラスと併せて利用します。
フォントはまだ使ったことがない(というかテキストサイト全盛期に黒歴史作った時しか触ってない)ので保留。

## 基本形

```php
<?php
	// <link type="text/css" rel="stylesheet" href="http://.../public/assets/css/base.css">
	echo Asset::css('base.css');

	// <script type="text/javascript" src="http://.../public/assets/js/validate.js"></script>
	echo Asset::css('validate.js');

	// <img src="http://.../public/assets/img/1.png" alt="alttext" >
	echo Asset::img('1.png',array('alt'=>'alttext'))
?>
```

これだけで動的にAssetsファイルを読み込んでくれます。
もちろんassetsの下にフォルダを作ることも可能で、各テンプレートでCSSの名前がかぶってしまっていたときも対処できます。

他の例に漏れず、screenやaltなどの属性を指定したい場合には第二引数に配列で記述することができます。

## 応用

アップローダーを作りたい。
アップローダーを設置して、たとえばユーザーのプロフィール画像などを表示したい。場合。
その場合はassets/imgの下にフォルダを作成することをおすすめします。

Uploadの使い方は後に詳しく書きますので今回は割愛(´@ω@｀)
### アップロード

```php
// 初期設定
$config = array(
    'path' => DOCROOT.DS.'assets'.DS.'img'.DS.'profile',
    'normalize' => true,
    'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
        );
 
        // アップロード基本プロセス実行
        Upload::process($config);
 
        // 検証
if (Upload::is_valid())
{
    // 設定を元に保存
    Upload::save();
}
// 正常系
foreach (Upload::get_files() as $file){...}

// 異常系
foreach (Upload::get_errors() as $file){...}
```

3行目に、assets/img/profileにファイルを保存する設定を書いています。
imgフォルダの下に置かないとAsset::img()が使えないようなので注意してください。
動的に画像アドレス読むの面倒くさいです。

### 表示

```php
echo Asset::img('profile/hoge');
```

以上！
次はHtmlヘルパーとFormヘルパーについてヽ(´@ω@｀)ﾉ
か、テンプレートファイルについてが先がいいでしょうか。ちょっと考えます。
端末での表示幅による表示制御

スマートフォン端末等で表示幅によって、表示制御を行う為には、Media Queryの指定時に端末の向きを考慮する必要があるので、`orientation`を含めた設定を行う。

例えば、縦横問わず、表示幅が320px以上の時に表示したい場合は、下記のように設定する。

```css
// 縦向き表示時
@media all and (min-device-width: 320px) and (orientation:portrait) {
  ...
}
// 横向き表示時
@media all and (min-device-height: 320px) and (orientation:landscape) {
  ...
}
```

上記を`SASS`のmixinとして書くなら、こんな感じで汎用化できるかと。

```sass
=if-over-width($max_width)
  @media all and (min-device-width: $max_width) and (orientation:portrait)
    @content
  @media all and (min-device-height: $max_width) and (orientation:landscape)
    @content

=if-below-width($min_width)
  @media only all and (max-device-width: $min_width) and (orientation:portrait)
    @content
  @media only all and (max-device-height: $min_width) and (orientation:landscape)
    @content
```
Mac＋標準ターミナルアプリ＋Vimで「※」などの記号がずれる問題への対処法


僕は普段Mac（Mountain Lion）＋標準ターミナルアプリ＋Vimでテキストを編集することが多いのですが、テキスト中の「※」などの記号を含む行で文字がずれる、カーソルがずれる、あるはずの文字が消える、等の現象が起こりました。

![kobito.1398215233.777101.png](https://qiita-image-store.s3.amazonaws.com/0/39704/b83ca788-57ae-120e-4fb5-f1d416e51cc8.png "kobito.1398215233.777101.png")


これを解決する方法を調べたところ、以下の方法で解決することが分かりました。

# 標準ターミナルアプリの設定

「環境設定...」から設定ダイアログを開き、「設定」タブから「詳細」ボタンを押して詳細画面を表示します。

詳細画面の下の方にある「言語環境」のところの

> Unicode 東アジア A (曖昧) の文字幅を W (広) にする

にチェックを入れて下さい。

# Vimの設定

.vimrcに以下の記述を追加して下さい：

```.vimrc
set ambiwidth=double
```

以上で問題は解消します。

![kobito.1398215179.182910.png](https://qiita-image-store.s3.amazonaws.com/0/39704/276f1a96-c1e2-3b6e-804a-48567f3f4c97.png "kobito.1398215179.182910.png")


# 参考

この問題を解決するにあたり、以下の情報を参考にさせていただきました。ありがとうございました。

- 「[Macで、Vimで、全角っぽい■とか※とかの記号がずれてイラッとくる問題を解決する](http://sugilog.hatenablog.com/entry/20120722/1342932656)」
    - 現象やこの問題の原因を含め、対処法が書かれています。ただし若干内容が古くなってしまっています。
- 「[TerminalEastAsianAmbiguousClearer](https://kita.dyndns.org/wiki/?TerminalEastAsianAmbiguousClearer)」
    - 最初の記事に書かれていた、標準ターミナルアプリの問題点を解消するためのソフトウェアのページです。これをみてMountain Lionでは単なる設定変更でOKだということを知りました。
シリアルコンソールからDebianをさくらのVPSにインストールした時のメモ

さくらのVPSにはVNCコンソールが存在するが、古いバージョンのJavaでないと正常に動作しないらしい。わざわざ脆弱性の塊をインストールするのは気が引けるから、シリアルコンソールからインストールしてみた。

ダウンタイムを気にしないなら、VPS上でこの作業をするとスムーズにできるかもしれない。

```zsh
#作業ディレクトリを準備
% mkdir ~/work
% cd ~/work
% wget 'ftp://ftp.jaist.ac.jp/pub/Linux/debian-cd/current/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso'
% mkdir customiso isoroot

#ISOの中身を抜き出す
% sudo mount -o loop ./debian-7.4.0-amd64-netinst.iso ./isoroot
% sudo rsync -a ./isoroot/ ./customiso/
% sudo umount ./isoroot

#ファイルをいじくる
#参考にしたのはhttp://www.fantaghost.com/how-to-install-debian-6-0-6-using-serial-console
% sudo vim ./customiso/isolinux/isolinux.cfg
% cat ./customiso/isolinux/isolinux.cfg
prompt 0
timeout 0

default Install
label Install
menu label ^Install
menu default
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz -- console=ttyS0,9600n8

% cd ~/work/customiso
% find -follow -type f -print | xargs md5sum | sudo tee ./md5sum.txt >/dev/null

#isoの作成
% sudo mkisofs -o ../customdebian.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -b isolinux/isolinux.bin ./

#VPSのコンパネから作れるISOイメージアップロード用のアカウントにアップロードすればおｋ
% sftp USER@HOST
cd /iso
put ../customdebian.iso
quit
% sudo poweroff
```
普通にインストールしておけばいいのだが、インストール完了後 **リブートする前にシリアルコンソールかsshdのセッティング** をしておかないとログインできなくなるので注意。
シリアルコンソールの有効化は、```/etc/inittab```の```#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100```をアンコメント。

### リンク
ISOイメージインストール（β版）｜さくらのVPS｜さくらインターネット公式サポートサイト http://support.sakura.ad.jp/manual/vps/cpanel/isoinstall.html
How to install Debian 6.0.6 using serial console - FantaGhost FantaGhost
http://www.fantaghost.com/how-to-install-debian-6-0-6-using-serial-console
ノートパソコンの温度を調べる

# CentOS7の場合

```bash:インストール
sudo yum install -y lm_sensors
```

```bash:温度確認
$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +79.6°C  (crit = +104.0°C)
temp2:        +34.0°C  (crit = +105.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +79.6°C  (high = +70.0°C)
                       (crit = +100.0°C, hyst = +95.0°C)
```

```bash:項目を増やせるっぽい(自分はダメだった)
yes | sudo sensors-detect
```

* /etc/sysconfig/lm_sensors に設定が書き込まれる。

* [lm_sensorsでサーバーの温度計測 | Kugelblitz](http://treewoods.net/kugelblitz/?p=334)

# ubuntuの場合
## インストール

```bash:インストール
sudo apt-get install -y acpitool
```

## 成功例

```bash:ノートパソコンで実行
$ acpitool
  Battery #2     : charged, 100.0%
  AC adapter     : on-line
  Thermal zone 1 : ok, 50 C
  Thermal zone 2 : ok, 46 C
  Thermal zone 3 : ok, 37 C
  Thermal zone 4 : ok, 22 C
  Thermal zone 5 : ok, 50 C
```

## ダメだった例

```bash:RaspberryPi(minibian)で実行
% acpitool
  Could not open any of these files : /proc/acpi/info, /sys/module/acpi/parameters/acpica_version
  Make sure your kernel has ACPI support enabled.
 AcpiTool v0.5.1, released 13-Aug-2009
```

```bash:macmini上のubuntu14.10で実行
$ acpitool
  Battery status : <not available>
  AC adapter     : <info not available or off-line>
  Thermal info   : <not available>
```


# ArchLinuxをmacminiにインストールした場合

```bash:インストール
pacman -Sy lm_sensors
```

```bash:確認
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +91.0°C  (high = +86.0°C, crit = +100.0°C)
Core 0:         +91.0°C  (high = +86.0°C, crit = +100.0°C)
Core 1:         +88.0°C  (high = +86.0°C, crit = +100.0°C)

applesmc-isa-0300
Adapter: ISA adapter
Exhaust  :   2523 RPM  (min = 1800 RPM, max = 5500 RPM)
TA0P:         +61.0°C
TA0p:         +61.0°C
TA1P:         +52.2°C
TA1p:         +52.2°C
TC0C:         +91.0°C
TC0D:         +91.5°C
TC0E:         +91.2°C
TC0F:         +94.0°C
TC0G:         +94.0°C
TC0J:          +2.5°C
TC0P:         +77.5°C
TC0c:         +91.0°C
TC0d:         +91.5°C
TC0p:         +77.5°C
TC1C:         +88.0°C
TC1c:         +88.0°C
TCGC:         +91.0°C
TCGc:         +91.0°C
TCPG:         +98.0°C
TCSC:         +86.0°C
TCSc:         +86.0°C
TCTD:          +0.0°C
TCXC:         +93.2°C
TCXc:         +93.2°C
TI0P:         +60.0°C
TI0p:         +60.0°C
TI1P:         +59.0°C
TI1p:         +59.0°C
TM0P:         +57.8°C
TM0S:         +58.2°C
TM0p:         +57.8°C
TMBS:         +50.0°C
TP0P:         +73.0°C
```
Eclipse Pluginを簡単に作成する方法


いまの時代、Eclipse Pluginは簡単に作れます。昔はプロジェクトを作ること自体が難しい（めんどくさい）イメージがあり、ハードルが高かったのですが、いまはtychoがあります。
https://www.eclipse.org/tycho/

tychoを使えば、プロジェクト作成、build、依存性管理などをある程度自動化できます。
ある程度と言ったのは、まだまだ依存性解決に関しては、うまく動作しない（tycho 0.20.0）ことがあり、手作業が必要になるからです。

依存性を完全に手作業でやるとしたら、以下のサイトのを使って下さい。プロジェクト作成、署名付きjar,featureなどリリースための作業が自動化されます。
https://github.com/open-archetypes/tycho-eclipse-plugin-archetype

依存性もある程度任せたいと思うなら、以下の方法で可能です。

# プロジェクトの作成
### archetypeを選択
まずは、実験用にforkしたcatalogがあるので、そこから作成します。　　
```$ mvn archetype:generate -DarchetypeCatalog=https://raw.githubusercontent.com/ko2ic/maven-catalog/master/snapshots/archetype-catalog.xml```

このとき気をつけることは、バージョンを必ず、major.minor.rivisonと3桁にすることです。
こうしないとpackageできません。

### Eclpseファイルの作成   
今回は、m2eを使わないで環境構築します。
(m2eを使っても今のところjarの依存性管理が効いてくれません。rootのpom.xmlの管理ができる・プロジェクト作成が楽など、m2eを使う意味はあります)

```$ mvn eclipse:eclipse```

その後Eclipseにソースを取り込みます


### mvn eclipse:eclipse後にやる作業
META-INF/MANIFEST.MFのBundle-VersionがSNAPSHOTに変わってしまっているので、qualifierに戻す
（これをしないとpackageできない）

# jarの追加
### 依存性を追加

例えば、

	  <dependencies>
	    <dependency>
	      <groupId>org.apache.poi</groupId>
	      <artifactId>poi-ooxml</artifactId>
	      <version>3.10-FINAL</version>
	    </dependency>
	  </dependencies>
その後
```$ mvn eclipse:eclipse```

### META-INF/MANIFEST.MFの修正
コンパイルは通っているが、packageしたときに依存jarがパッケージされないので、修正する   
Build ConfigurationでBinary Buildに依存させたいjarをチェックする。(RuntimeのClasspathにあるjarをチェックすればよい)

# Packageing
```$ mvn package -Psign```
これで、siteプロジェクトのtargetにzipファイルが出来上がります。   
中身を確認して、coreのjarの直下に依存jarが入っていれば、成功です。

# その他
Eclipse上、邪魔なjarが表示されているのですが、packagingされないので気にしなくて良いです。   
気になる場合は、削除しても構いませんが、```mvn eclipse:ecipse```をすると再度追加されてしまいます。
【Apache】DocumentRootの変更に伴うパーミッションの変更について

環境
CentOS6.4
apache2系

ApacheのDocumentRootの設定変更の仕方はこちら↓
http://www.adminweb.jp/apache/docroot/index1.html

さてここで実際の現場では、rootユーザーを利用して開発ということはなく、Linux上に新たにユーザーを作成して、そのユーザーにDocumentRootを設定して、web開発というのが一般的では無いでしょうか？

そうなんです。
この状態で何もせずに

```bash

$ emacs /etc/httpd/conf/httpd.conf
```
としてDocumentRootを変更すると、ブラウザでサーバーにアクセスした時に

Permission deniedになります。
403Fobbidenを喰らいます。

つまりサーバーにつながらないのです。

しかし、

```bash 
$ /etc/init.d/httpd/ configtest
```

で、サーバーまでのパスがとおているか確認すると

```bash 
$ Syntax OK
```

になり、サーバーまではなんの問題もなく起動しています。

ではなぜ権限が無いと拒否されるのか。

それは、rootユーザーにあった権限がユーザーディレクトリでは権限がないらです。

ユーザーを作成するとroot以下に

```bash
home/USERNAME/
```
のディレクトリができます。
このUSERNAMEディレクトリが曲者。

```bash

$ ls -la
```

で権限確認すると、権限が700なので、ユーザーディレクトリからはApacheがUSERNAMEディレクトリを読み込めんでくれませんので

```bash

$ chmod 755(or775) /home/USERNAME
```
で読み込み権限を付与して、Apacheを再起動するとブラウザ上で表示できるようになりました。
SCPクライアントについて

使っている環境
ターミナル：iTerm2
以前は標準のターミナルを仕様していましたが、ターミナルを縦に分割してくれる機能が非常に便利でiTerm２に乗り換えました。
フォントの自由が効くのも嬉しい。

さてさて、普段会社の環境がWinなので、SSH経由でコーディングするさいは

Putty　×　WinSCP

の組み合わせなのですが、自宅の環境がMacで、MacにWinSCPに相当するSSH経由でファイルをやりとりするアプリケーションがないものかと探していたら、CyberDduckがSFTP使えるので、そちらにサーバー情報とpassを入れて終了。
参考　http://nozawashinichi.sakura.ne.jp/usingmt/2009/12/macscpftpcyberduckok.html

サーバー側でrootユーザーへのログインを禁止しているので、あくまでユーザーのみですが、サーバー側で前もってApacheのドキュメントルート処理等もすでに済ませているので、これで家でも開発が進みそうです。
Gruntの基本的な使い方（grunt-contrib-uglifyで）

## 公式サイト

http://gruntjs.com/

## インストール

①Node.jsのインストール

http://nodejs.org

②npmのグローバルパッケージとしてGruntコマンドラインインターフェースをインストール

```
$ npm install -g grunt-cli
```

③プロジェクトのトップディレクトリにpackage.jsonの作成

```
$ npm init
```

設定をきいてくるので、そのままEnterキーを押していき初期値のままでも問題ない

④プロジェクトのローカルパッケージとしてGruntをインストール

--save-devオプションでgruntを依存パッケージとしてpackage.jsonに差し込む

```
$ npm install grunt --save-dev
```

⑤プロジェクトのローカルパッケージとしてGruntプラグインをインストール

--save-devオプションでgrunt-contrib-uglifyを依存パッケージとしてpackage.jsonに差し込む

```
npm install  grunt-contrib-uglify --save-dev
```

## タスクの定義

Gruntfile.jsのファイル名でタスクを記述

```js:Gruntfile.js
module.exports = function(grunt){
  grunt.initConfig({
    //親タスク（1階層目のキーは仕様で決められている）
    uglify: {
      //ターゲット（2階層目のキーは任意のキー）
      dist: {
        //子タスク（3階層目のキーは仕様で決められている）
        files: {
          //出力
          'dest/output.min.js': [
            //ソース
            'src/sample01.js',
            'src/sample02.js'
          ]
        }
      }
    }
  });
  //プラグインからタスクを読み込む
  grunt.loadNpmTasks('grunt-contrib-uglify');
  //デフォルトのタスクとしてuglifyを定義
  grunt.registerTask('default', ['uglify']);
};
```

## タスクの実行

### defaultのタスクを実行

```
$ grunt
```

### uglifyの全タスクを実行

```
$ grunt uglify
```

### uglifyのdistのタスクのみ実行

```
$ grunt uglify:dist
```

---

## CoffeeScriptでGruntfileを記述

グローバルパッケージにcoffee-scriptをインストールしておく必要がある

```
$ sudo npm install -g coffee-script
```

```coffeescript:Gruntfile.coffee
module.exports = (grunt) ->
  grunt.initConfig
    uglify:
      dist:
        files:
          'dest/output.min.js':[
            'src/sample01.js',
            'src/sample02.js'
          ]
          
  grunt.loadNpmTasks 'grunt-contrib-uglify'
  grunt.registerTask 'default', ['uglify']
```

gruntコマンドでJavaScriptで記述した場合と同様に実行できる

```
$ grunt
```
4つの数と四則と括弧

問題：https://codeiq.jp/ace/nabetani_takenori/q820

括弧を付けるのを許容するならyield解法が使えるので、短く書けます。
一応Ruby 1.8/1.9両対応です。1.8だとRational(rational,rational)が定義されていないので工夫が必要でした。

```rb:codeiq820.rb
#!/usr/bin/ruby
#derived from AOJ 0041
require 'rational'

class String
	def integer?
		Integer(self)!=nil rescue false
	end
end

def dfs(a,&block)
	return to_enum(:dfs,a) if !block_given?
	yield [a[0],a[0].to_s] if a.size<2
	(a.size-1).times{|i|
		dfs(a[0..i]){|l|
			dfs(a[i+1..-1]){|r|
				yield [l[0]+r[0],%Q((#{l[1]} + #{r[1]}))]
				yield [l[0]-r[0],%Q((#{l[1]} - #{r[1]}))]
				yield [l[0]*r[0],%Q((#{l[1]} * #{r[1]}))]
				yield [l[0].is_a?(Rational) || r[0].is_a?(Rational) ? l[0]/r[0] : Rational(l[0],r[0]),%Q((#{l[1]} / #{r[1]}))]
				yield ["#{l[0]}#{r[0]}".to_i,%Q(#{l[1]}#{r[1]})] if l[1].integer? and r[1].integer?
			}
		}
	}
end

h={}
[2,3,7,8].permutation{|e|
	dfs(e){|f|
		n=f[0]
		n=f[0].numerator if f[0].denominator==1
		if n.is_a?(Integer) && 1<=n && n<=99
			h[n]=true
		end
	}
}
puts [*1..99].reject{|e|h.has_key?(e)}*',' # 54,59,71,76,80,85,94,95
```
ScalaでTimeの0埋め方法


仕事でこんなコードを書いたので、Scalaっぽいかもと思ってメモ

ある時間を表す文字列"HH:mm"というのが場合によっては"H:mm"となる場合があるので ```format``` を使って0埋めします。

```
  /**
   * HH:mm形式で返す(0:00の場合は前0を付ける)
   * @param time
   * @return
   */
  private def formatTime(time:String):String = {
    time.split(':').map{
      t => "%02d".format(t.toInt)
    }.mkString(":")
  }
```

':'でsplitして配列にして、format関数で前0つけた文字列を返して':'で繋ぐ。もっと簡単に書けるかもしれないけど今の自分ではちょっとはScalaっぽく書けたつもり。もっとScala勉強しよう。
composer dump-autoloadが面倒くさい Laravel

##composer dump-autoloadが面倒だ！
Laravel以外のものでも使ってるものによっては、
実際に思う方も少なくないのでは？と思いますが、
ちょっとしたことで毎回ではなく必要最低限数実行すれば済むようになります。

**Laravel4-Generators使ってない方向けです！**

それはとても簡単なことでして、
psr-0 というオートローディング規約を思い出してみましょう。

Laravelはディレクトリ等自由にユーザーが変更することができます。
作者自身が述べているように、
モデルという名前で"データベースのための処理だ！"と
思い込んでいる方もいると思いますが、
そんな概念に捕われず真っ先に削除してしまいましょう。
(モデルという名前が好きであればそのままでもかまいませんよ！)
モデルやコントローラーを既存のままで使用したい場合は、
以下の説明のAcmeを、Models, Controllersとするとイイです。

オートローディング規約は、　
**\ベンダー名\名前空間\クラス名** とする必要があり、
トップレベル(最初の部分)は必ずベンダー名で始めます。
この場合はプロジェクト名としておきましょうか。
名前空間の区切りは
**ディレクトリ**　を表現します
最後はクラス名.phpにすれば良いOKです。

それを早速composer.jsonに記述します。

```json:composer.json
    "autoload": {
        "classmap": [
            "app/commands",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ],
        "psr-0": {
            "Acme": "app/"
        }
    },
```
今回はcontrollerもモデルも取っ払って、Acmeというトップレベルの名前にしました
global.phpのクラスローダーも要らないので取っ払います

```php:app/start/global.php
ClassLoader::addDirectories(array(
    app_path().'/commands',
    app_path().'/database/seeds',
));
```

composer.jsonに記載した様に app/Acme ディレクトリを作成します
作成したら

```bash
$ composer dump-autoload
```
これでもう叩くことはないだろう、と言わんばかりにコマンド叩きます
(ディレクトリ変更したら叩いてください app/Hoge/Acme とか)

あとは規約に沿って作っていくだけです。
そのままで使っている方は、BaseControllerに名前空間つけて、
extends時に忘れずにuse書きましょう。
プロバイダー等も作っていつも通りapp.phpに追記するだけです。

```php:AcmeServiceRepository.php
class AcmeServiceProvider extends ServiceProvider
{

    public function register()
    {
        $this->app->bind(
            'Acme\Repositories\AcmeRepositoryInterface',
            'Acme\Repositories\AcmeRepository'
        );
    }
}
```
ルーターもいつも通りです

```php:routes.php
\Route::group(['namespace' => 'Acme\Controllers'], function() {
    // 
    \Route::group(['prefix' => 'api', 'namespace' => 'Resource'], function() {
        \Route::resource('v1/activity', 'ActivityController', ['only' => ['show']]);
        \Route::resource('v1/user', 'UserController', ['only' => ['index']]);
    });

    \Route::controller('user', 'UserController');
    \Route::controller('/', 'HomeController');

});
```

是非どうぞー
OpenOpenSSLとは何だったのか

私が見た範囲での OpenOpenSSL についてのまとめです。

1. [Heartbleed](http://heartbleed.com/) 問題で盛り上がる
2. [OpenBSD で openssl の大掃除が始まる](http://undeadly.org/cgi?action=article&sid=20140415093252)
3. OpenBSD のサイトを適当に書き換えただけにみえる [OpenOpenSSL](http://openopenssl.org/) という(ネタ)サイトが話題になる
4. ニュースサイトも釣られる
   * [OpenBSDプロジェクト、「OpenOpenSSL」に着手 - Heartbleed以外にもバグ | マイナビニュース](http://news.mynavi.jp/news/2014/04/20/019/)
   * [OpenBSDがOpenSSLの大掃除に着手、「OpenOpenSSL」サイトも立ち上がる | スラッシュドット・ジャパン オープンソース](http://opensource.slashdot.jp/story/14/04/17/0541224)
5. slashdot.jp でネタサイト確定というコメントが書き込まれる
    * [Whois情報などが怪しさ満載という話](http://opensource.slashdot.jp/comments.pl?sid=629087&cid=2584398)
    * [（まだまだ）名前は必要としてないよ。という中の人のコメントの紹介](http://opensource.slashdot.jp/comments.pl?sid=629087&cid=2585215)
    * [ネタ確定と断言する意見](http://opensource.slashdot.jp/comments.pl?sid=629087&cid=2585606)
6. [LibreSSL](http://www.libressl.org/) というサイトが話題になる
    * [The OpenBSD Foundation](http://www.openbsdfoundation.org/)からもリンクされていて本物に見える
7. 一度 OpenOpenSSL という名前になった人が改名したの？と勘違い←イマココ
[一日一Vim](その9)折りたたみ

# 参考サイト

http://vim-users.jp/2010/10/hack178/

(追記) http://leafcage.hateblo.jp/entry/2013/04/24/053113

# 使い方

またも、上記サイトに全て記載されています。

`:set foldmethod=marker`とかすると、`zc`とか`zo`で折りたたみの開閉ができるようになります。

私としては`:set foldmethod=syntax`が一番しっくりくる折りたたみをしてくれるのでいいかなぁと思っています。

折り畳み位置で`l`で一段開く。なんてのができたらいいなぁとちょっと思ったりしています。キーマップを設定したらできるのかもしれませんが、よくわかっていません...

## 追記

`l`で開く。ありました!
[こちら](http://leafcage.hateblo.jp/entry/2013/04/24/053113) に記載されています。

```vim

nnoremap <expr>l  foldclosed('.') != -1 ? 'zo' : 'l'
```
このようにキーマップを設定すれば良いようです
int から 文字列に変換

#int型からcharの配列/std::stringに変換

ファイル名に日付を使いたいときなど、ctimeヘッダ内のtm構造体から日時を取得するとintで返ってくるのでそのまま使えない。
char型への通常のキャストでは数値に相当する文字にフォーマットされるので、そのままキャストして使えない。
　例：整数値10 → 改行文字 （アスキーコード相当の場合）

今回はソースコード簡潔にするため年だけを使った。

まず今年を表す数値を求める。
現実にはロケールを考慮する必要があると思うが、分からない。誰か教えて(´・ω・`)

```cpp
   #include <ctime>
  
   tm toady;
   time_t t_val;

   t_val = std::time( NULL );
   localtime_s( &today, &t_val );

   int year = today.tm_year + 1900   // 2014年
```

ここから数値2014を各桁に分割する。
分割方法は10で割った余り（1の位）を常に求め、10で割って桁を縮めた。

```cpp
    while( year >= 1 ) {
        year % 10;
        year = year / 10;
    }
```

上の例は余りを計算しただけで結果を破棄しているが、次にこれを利用する。
1桁のみ取得なので必ず1桁の数値になる。
よって文字[0:9]の範囲を部分として寄せ集める。

文字列定数"0123456789"を配列に格納すれば添字0が文字'0'、添字1が文字'1'なので都合がよさそうだ。

```cpp
    #include <string>
    #include <vector>

    // 添字(数値)と各文字列が1対1に対応するオブジェクトを用意
    const char number[11] = "0123456789";
    
    std::vector<char> date;
    int index = 0;

    while( year >= 1 ) {
         // 1の位を求める
         index = year % 10;
         // 1の位をchar型の動的配列に積み上げる
         date.push_back( number[index] );

         year = year / 10;
   }

   /* 1の位から順に格納したため逆順にする */

   vector<char>::reverse_iterator itr;
   itr = date.rbegin();

   string today = "";
   // リバース・イテレータを一つづつ進めて文字列に足し込む
   for( int i = 0; i < date.size(); ++i ) {
        today += *itr;
        ++itr;
   }
```

汎用性の高いstd::stringになったのでC文字列にも変換できるようになった。

```cpp
today.c_str();
```

先頭ポインタも取れるようになった

```cpp
const char* head_ptr = today.data();
```

もっといい書き方がありそう(´・ω・`)
jqueryでチェックボックスにチェックを入れるにはpropを使え。

$('input[name="checkbox"]').attr("checked",true);

ではなくて、

$('input[name="checkbox"]').prop("checked",true);

~~attrだと挙動が不安定。~~

~~理由は調べてないからわからない。~~

attrは、HTML属性を取得する、propはjavascriptでの属性を取得する。

true か falseはjavascriptでの属性。
Guzzle v3でストリームからレスポンスを読み込む

適切なタイトルが思い浮かばなかったもので、何だか分かり辛い物になってしまいました。

どこか、HTTPサーバーから何か読み込む時に、取り敢えずヘッダーまで読み込んでおいて、その内容に応じて続きを読むかどうか、読むとしたらどういう読み方をするか（ファイルに保存するか標準出力などに出すかSAXやMessagePackとしてパースするか、単にやめるかなど）選びたかったりします。しますよね。するんです。

[Guzzle][guzzle3]を使うとそれが割と簡単にできるようになります。

↓で、ヘッダーまで読んでその続きがいらないと判断したら、`while`ループに入らずに`close()`してしまえばいいです。

```php
<?php
require_once __DIR__ . '/vendor/autoload.php';

use Guzzle\Http;
use Guzzle\Stream;
use Guzzle\Parser\Message;

$client = new Http\Client('http://example.net');

$request = $client->get();
$factory = new Stream\PhpStreamRequestFactory();
$stream = $factory->fromRequest($request);

print_r($stream->getWrapperData());
$header = implode("\r\n", $stream->getWrapperData()) . "\r\n\r\n";
$parser = new Message\MessageParser;
$message = $parser->parseResponse($header);
print_r($message);

$buff = '';

while (!$stream->feof()) {
  $c = $stream->read(1);
  file_put_contents('php://stderr', $stream->ftell() . ":${c}". PHP_EOL);
  $buff .= $c;
  sleep(1);
}

$stream->close();
$stream->detachStream();

var_dump(strlen($buff) == $message['headers']['Content-Length']);
```

    $ lsof | grep php | grep curl; ps | grep php

あたりをしながら見ていると、「一旦全部読み込んで、擬似的にストリームとして読み直している」のではなくて、ちゃんと「接続先から一バイトずつ読んでいる」（一バイトかは分からないけどずっと接続をキープしている）ことが分かります。

↑の例は一バイトずつだから、日本語文字みたいなマルチバイト文字を読んでいる時は別にその為の処理を入れる必要があることに注意してくださいね。

なお、都合でPHP5.3を使わなくちゃいけなくて、Guzzleの（古いバージョンである）3を評価していましたけど、そういう制約がないなら現行の[バージョン4][guzzle4]を使ったほうがいいと思います。結構使いやすそう。

[guzzle3]: http://guzzle3.readthedocs.org/en/latest/index.html
[guzzle4]: http://guzzle.readthedocs.org/en/latest/
lldbデバッガでrecursiveDescriptionが呼べなくなっていた


Xcode5.1.1 環境での話。
lldbデバッガで"po [view recursiveDescription]"とやれば、Viewの階層構造が見れていたと思うのだけど、最近やってみたら出来なくなっていた。

```lldbデバッガ
(lldb) po [cell recursiveDescription];
error: instance method 'undoManager' has incompatible result types in different translation units ('id' vs. 'NSUndoManager *')
note: instance method 'undoManager' also declared here
error: 1 errors parsing expression
(lldb) version
lldb-310.2.37
(lldb) 
```


ソースに混ぜ込むと動いているようだし、関係ないと思われるundoManagerという文字も出てるので、lldbデバッガの不具合だろうか。
ブラウザのキャッシュを無効にする（Charles版）


proxyツールCharlesでキャッシュを無効にする。

```
Menu > Tools > No Chaching..
```

で「Enable No Chaching」にチェック。

下のOnly for selected locationsにチェックを入れて、サイトをしてするとキャッシュを無効にするサイトを限定できて便利。


![No_Caching_Settings_と_Charles_3_8_3_-_Session_1__.png](https://qiita-image-store.s3.amazonaws.com/0/41550/bbf6c260-0f3d-84dd-ae69-f31151217e25.png "No_Caching_Settings_と_Charles_3_8_3_-_Session_1__.png")


## リンク

[Charles HTTP proxy](http://www.charlesproxy.com/)
kobitoに画像を貼る→S3へアップ


ドラッグ&ドロップで簡単に画像が貼れる.
その画像はS3へ、そして張りつけタグが自動でセットされる
。技術的に興味がある。


![一般_と_OREILLY_COLLECTION（以下、オラコレ）iOS版がでた！.png](https://qiita-image-store.s3.amazonaws.com/0/41550/e87871db-3dc2-ab18-f226-c61147489e1d.png "一般_と_OREILLY_COLLECTION（以下、オラコレ）iOS版がでた！.png")


Retinaのキャプチャは、大きすぎてそのまま貼れない。

月間１００MBの制限があるけど。
これってお金は払ったら無限になるのか
コマンドラインから耳栓をつくる


soxというソフトウェアを使用します

```bash
$ sox -t sl -r 44100 -c 2 /dev/zero -r 44100 -c 2 \
	 mimisen10.mp3 synth 10:00 \
	 whitenoise vol 0.5
```

これで10分間ノイズが鳴るだけの音楽ファイルが生成されます。


イヤホンで聞いてれば周りの音はだいぶ聞こえなくなります。大変便利です。
こういうことを書くとヒドい人間とか言われそうですが、具体的にはバスの中で赤ちゃんが全然泣き止んでくれない場合に大変便利です。もちろん普通に作業中に3回リピート設定にしたりしてもいいと思います。


ちなみにsoxのインストールはbrewで出来ました。

```bash
$ brew install sox
```


mp3で音声ファイルを書き出したい場合はlameを入れてからインストールです。

```bash
$ brew install lame
$ brew install sox
```
ブラウザのキャッシュを無効にする（Chrome版）


chromeのデベロッパーツールを開いて、
①設定アイコンをクリック

![1.png](https://qiita-image-store.s3.amazonaws.com/0/41550/f2269ac2-ab02-69b3-8696-15fd6c4466a6.png "1.png")


②Disable Cacheにチェック

![2.png](https://qiita-image-store.s3.amazonaws.com/0/41550/0fb6d767-3f3e-671a-5b3b-6f4c9ad80ff1.png "2.png")

これでキャッシュが無効になる
VAIO ProにUbuntu Gnome 14.04をデュアルブートするための手順

#はじめに
Qiita初投稿なので読みづらい部分があればご指摘いただけると幸いです．
筆者はLinux初心者です．エラーなどを聞かれてもあまりお答えできません．
不適切・不必要な手順があればご指摘いただけると助かります．
**間違ってデータが破損しても責任は負いません．
Windowsのリカバリーメディアを作成することを強く推奨します．**

#前置き
Vaio Pro 13(SVP1321A1J) Windows8 64bitにUbuntu Gnome 14.04をインストールする手順です．
バージョンなどで多少の差異がある場合がありますので適宜変更してお読みください．

#デュアルブートの手順
##Windows側での準備
1. 高速スタートアップをオフにする．  
 * "スタート"->"コントロールパネル"->"ハードウェアとサウンド"->"電源オプション"->左側の"電源ボタンの動作の選択"->"高速スタートアップを有効にする"のチェックに外す
1. パーティションの準備
 * "Windowsキー+x"でメニューを開く->"ディスクの管理"->システムパーティションの縮小・削除を行いUbuntuをインストールする領域を確保する．
1. シャットダウンして，下のBIOSの設定に進む．

##BIOSの設定
1. PCの終了後，ASSISTボタンを押し，BIOSを起動する．
1. Intel(R) AT Support System: Disabled  
Secure Boot: Disabled  
Boot Mode: UEFI  
External Device Boot: Enabled  
Boot Priority: External Device,Internal Hard Disk Driveの順

##Ubuntuのインストール
1. インストーラにしたがって進める．
2. "インストールの種類"で"それ以外"を選択する
3. rootとswapを適当に作成する．ブートローダーはefiパーティションを選択(標準は/dev/sda3)
4. さらに進めていきインストール終了後，再起動．下の

##再びLiveDVDの起動
**この章では以下のパーティションを想定しています．適宜読み替えてください.
パーティションはgpartedやblkidで確認できます．
/dev/sda3: EFIパーティション
/dev/sda5: Windows8 Systemパーティション
/dev/sda6: Ubuntu rootパーティション**

* 再び，LiveDVDを起動し，"try ubuntu"を選択．

###マウント
* 以下のコマンドを実行していく．

```bash:bash
$ sudo bash
$ mount /dev/sda6 /mnt
$ mount /dev/sda3 /mnt/boot/efi
$ for i in /dev /dev/pts /proc /sys; do mount -B ${i} /mnt${i}; done
$ modprobe efivars
$ cp /etc/resolv.conf /mnt/etc/
$ chroot /mnt
```

### bootloaderの導入・設定
* 以下のコマンドを実行していく．

```bash:bash
$ apt-get install grub-efi-amd64
$ vi /etc/default/grub
```


   * vi起動後，以下のように編集.

    ```:変更前
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    ```

    ```:変更後
    GRUB_CMDLINE_LINX_DEFAULT="quiet splash libata.force=noncq"
    ```

* 変更後以下を実行．

```bash:bash
$ update-grub
```

###rEFIndの導入・設定

* 以下のコマンドを実行してrEFIndを導入する．

```bash:bash
$ wget -O refind_0.7.4-1_amd64.deb http://sourceforge.net/projects/refind/files/0.7.4/refind_0.7.4-1_amd64.deb/download
$ dpkg -i refind_0.7.4-1_amd64.deb
```

* EFIパーティションの確認.

```bash:bash
$ cd /boot/efi/EFI
$ ls
```

> Microsoft, refind, ubuntuなどがあることを確認．


###EFIの変更

* 以下のコマンドを順に実行していく．

```bash:bash
$ cd /boot/efi/EFI/Microsoft/Boot
$ mv bootmgfw.efi ../
$ cd /boot/efi/EFI/refind
$ mv refind_x64.efi refind_x64.efi.default
$ cp refind_x64.efi.default /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
$ cp refind.conf /boot/efi/EFI/Microsoft/Boot/
$ cp -r ./icons ./keys ./drivers_x64 /boot/efi/EFI/Microsoft/Boot/
```

###アンマウント

* 以下のコマンドを順に実行していく．

```bash:bash
$ exit
$ for i in /sys /proc /dev/pts /dev; do umount /mnt${i}; done
$ umount /mnt/boot/efi
$ umount /mnt
$ reboot
```
> 私はumount /mntが実行できず，そのまま終了しましたが問題ありませんでした．
> 終了も上手くできず，途中で強制終了しましたが問題ありませんでした．

###BIOSを戻す
Boot Priority: Internal Hard Disk Drive,External Deviceの順

##起動・確認
rEFIndの画面にwindowsとubnutuの2つあり，起動できればOK．
> (2014/05/01追記) 高速スタートアップを有効に戻すと切り替えが早くなります．

#最後に
長くなりましたが，間違っている点があればご指摘ください．
以下を参考にさせて頂きました．感謝いたします．
http://www.slideshare.net/Tinydile/vaio-pro13-win8ubuntu1310uefi
FluentdからSplunkにバランシングしながらデータ投入する方法

すでにFluentdでログ転送しつつ、ラムダアーキテクチャ的にSplunkでリアルタイム分析したいなーとおもったのですが、Splunk自体にはロードバランシングする機能がなく、負荷が高い場合には自分でバランシングする方法を採らないとならなかったのでプルリク送ってマージしてもらったのでメモ。

## [fluent-plugin-splunkapi](https://github.com/k24d/fluent-plugin-splunkapi)

Splunkへのインサートはfluent-plugin-splunkapiを使います。
以下はGithubの[リポジトリ](https://github.com/k24d/fluent-plugin-splunkapi)から引用して変更。

```
<match **>
  type splunkapi
  protocol rest
  server <host1>:<port1>,<host2>:<port2>[,<host3>:<port3>]
  verify false
  auth admin:changeme

  # Convert fluent tags to Splunk sources.
  # If you set an index, "check_index false" is required.
  host YOUR-HOSTNAME
  index SOME-INDEX
  check_index false
  source {TAG}
  sourcetype fluent

  # TIMESTAMP: key1="value1" key2="value2" ...
  time_format unixtime
  format kvp

  # Memory buffer with a short flush internal.
  buffer_type memory
  buffer_queue_limit 16
  buffer_chunk_limit 8m
  flush_interval 2s
</match>
```

要はserver設定をカンマ区切りで記載すればラウンドロビンでバランシングします。
最後にマージしていただいた[k24d](https://github.com/k24d)さんありがとうございました！
OREILLY COLLECTION（以下、オラコレ）iOS版がでた！


のでインストールしてみた。
そそるカバー


![スクリーンショット 2014-04-22 21.43.48.png](https://qiita-image-store.s3.amazonaws.com/0/41550/44a4f317-830c-8235-55cc-bc590f86f6e3.png "スクリーンショット 2014-04-22 21.43.48.png")

ガチャガチャキーボードをタイプして、コインを貯めて
ガチャ。

![スクリーンショット 2014-04-22 21.45.30.png](https://qiita-image-store.s3.amazonaws.com/0/41550/6559e469-f9d2-691d-6d1a-c09e568b745c.png "スクリーンショット 2014-04-22 21.45.30.png")


O'Reillyの本ゲット！


![スクリーンショット 2014-04-22 21.50.26.png](https://qiita-image-store.s3.amazonaws.com/0/41550/e9c45350-51c9-0f41-f852-2cab94f651e2.png "スクリーンショット 2014-04-22 21.50.26.png")

マイ本棚へ

![スクリーンショット 2014-04-22 21.50.50.png](https://qiita-image-store.s3.amazonaws.com/0/41550/11759323-c90c-680b-b61e-7e35417fb271.png "スクリーンショット 2014-04-22 21.50.50.png")

本を開くと

![スクリーンショット 2014-04-22 21.58.11.png](https://qiita-image-store.s3.amazonaws.com/0/41550/2f2dadcd-ee2d-f59f-1553-fe54e5a3b47b.png "スクリーンショット 2014-04-22 21.58.11.png")


購入のショートカットが！
これはUXレベルが高い！！


![スクリーンショット 2014-04-22 21.54.43.png](https://qiita-image-store.s3.amazonaws.com/0/41550/46d24040-c096-c561-a49a-329b693f6f27.png "スクリーンショット 2014-04-22 21.54.43.png")

１００円で謎の妖精を購入。。。。




![スクリーンショット 2014-04-22 21.44.36.png](https://qiita-image-store.s3.amazonaws.com/0/41550/1e5a0994-06ca-99ec-d0ed-36e76164efc2.png "スクリーンショット 2014-04-22 21.44.36.png")

完

そして、コンプ。

![iPhone_au_-_608x1080.png](https://qiita-image-store.s3.amazonaws.com/0/41550/a2b9a238-6201-1dc3-b13d-1bd98dbd6090.png "iPhone_au_-_608x1080.png")




## リンク
[O'REILLY COLLECTION](https://chogetsuku.jp/product/product01.html)
AFNetworkingでHTTP GETしてファイルに保存


```objc++
#import "AFHTTPRequestOperationManager.h"

-(void)downloadUrl:(NSString*)url toPath:(NSString*)path
          success :(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
          failure :(void (^)(AFHTTPRequestOperation *operation, NSError *error   ))failure
          progress:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))progress
{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFHTTPRequestOperation *op = [manager GET:url
                                  parameters:nil
                                  success:success
                                  failure:failure];
    [op setDownloadProgressBlock:progress];
    op.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
}

    NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.bin"];
    [self downloadUrl:url toPath:path
              success:^(AFHTTPRequestOperation *operation, id responseObject) {
                  NSLog(@"DL: success");
              }
              failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                  NSLog(@"DL: failed %@", error);
              }
             progress:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
                 NSLog(@"DL: progress %d", (int)(100 * totalBytesRead / totalBytesExpectedToRead));
             }];
```
ずーとiTunes 11.1.5のソフトウェア・アップデートが消えない【解決済】


こんな風に何回やってもアップデートがでていた。

![スクリーンショット 2014-04-22 20.58.10.png](https://qiita-image-store.s3.amazonaws.com/0/41550/d3f3827f-b5ed-b44d-7b40-d36632726d7d.png "スクリーンショット 2014-04-22 20.58.10.png")


/Library/Updatesに移動して、

![スクリーンショット 2014-04-22 20.59.25.png](https://qiita-image-store.s3.amazonaws.com/0/41550/db4a7bf7-a110-5551-7a2e-2f89167d634e.png "スクリーンショット 2014-04-22 20.59.25.png")


フォルダの中身を削除

![スクリーンショット 2014-04-22 20.59.07.png](https://qiita-image-store.s3.amazonaws.com/0/41550/2dc7ddd4-a22a-4849-f8b6-953f4afbd606.png "スクリーンショット 2014-04-22 20.59.07.png")

でなくなった！

完了

![スクリーンショット 2014-04-22 21.12.04.png](https://qiita-image-store.s3.amazonaws.com/0/41550/b6dcf862-1e38-142e-892f-43c221f3d3dc.png "スクリーンショット 2014-04-22 21.12.04.png")


でも、、
右クリックして、アップデートを隠すってやると消えたような。。。

## 参考にしたサイト

[Re: ソフトウェアアップデートを行い再起動してもアップデートしない](https://discussionsjapan.apple.com/message/100677112)