OmniAICreator/Qiita-1.07M huggingface dataset:
Perlの特殊記号について


### Perlの記号もなかなか覚えられない。
####間違ってるよとか、他にもあるとというの教えて下さい。

#### 特殊記号一覧表
|   記号   |   意味                                       |
|:--------|:---------------------------------------------|
|   $0    |  スクリプトのコマンド名                          | 
|   $!    |  エラー場号、もしくはエラー文字列                  |
|   $?    |  外部お万度などを実行した際の最後のステータス        |
|   $@    |  直前のevalで発生した例外メッセージ                |
|   $n    |  パターンマッチ時にn番目の()にマッチした文字列       |
|   $\|   |  出力フッファリング、0位外でバッファリングが無効になる |
|　 $.  　 |ファイルハンドルの現在ある位置の行数                 |
|   $/	   |入力時の区切り文字。デフォルトは改行文字             |
|   $,	   |print使用時のセパレーター                         | 
|   $ ¥"   |print "@list_context"とした際の区切り文字         |
|   $$    	|プロセスのpid                                   |
| @ARGV	    |スクリプトに渡された引数                          |
| $^D    	|デバッグフラグの値                               |
| $^E	    |OS特有のエラーメッセージ                          |
| $^T	    |スクリプト実行時刻(epoch time)                   |
| %ENV	    |環境変数                                       |
| %INC	    |インクルードされたライブラリなどを記録              |
| %SIG	    |シグナルハンドラを設定するためのハッシュ             |
| @INC	    |ライブラリの検索対象ディレクトリ                   |
SpringでDIされるオブジェクトのMockテスト


調べてもいろんな方法があったので備忘録としてメモしておく。

かなり適当ですがこんな感じにSpringFrameworkでDIしているRepositoryBのみをMockにし、RepositoryBへのInputをテストしたいというのが動機。

```
class ServiceA{

    @Autowired
    RepositoryB repositoryB;
    
    @Autowired
    RepositoryC repositoryC;
    
    public void order1(String item){
    	repositoryB.save(item);
    }
    
    public void order2(String item){
    	repositoryB.save(item);
    	repositoryC.save(item);
    }

}
```

（注意）実際に試したコードは業務で使っているコードなので公開できません。考え方の参考にするためにこんな感じで考えましたという程度の情報ですので、その点はご了承ください。


テストコードはgroovyのSpockFramework使ってます。



## (1) Mockitoを使う

依存関係にmockitoを追加。

```build.gradle
testCompile "org.mockito:mockito-all:1.10.19"
```

こんな感じで書くとRepositoryBだけなら上手くいくのですが、RepositoryCを使うとエラーになります。どうもRepositoryCもMockにしないといけないっぽい。

```
@ContextConfiguration(locations = "classpath:context.xml")
class ServiceASpec extends Specification {

    @InjectMocks
    private ServiceA serviceA

    @Mock
    private RepositoryB repositoryB

    def setup() {
        MockitoAnnotations.initMocks(this)
    }

    def "RepositoryBをMockにしたテスト"() {
        when:
        sut.order1("test")

        then:
        Mockito.verify(repositoryB).save("test")
    }
}
```

## (2) Springockitoを使う

依存関係にSpringockitoを追加。

```build.gradle
testCompile "org.kubek2k:springockito-annotations:1.0.9"
```

これだとRepositoryCを使ってもMockされてない状態で動くはずでした。
ただ、実際業務で使っているコードで実装してみるとIllegalStateExceptionが出ました。RepositoryCは呼ばれているようでしたがなぜかはよくわからず断念。

```
@ContextConfiguration(locations = "classpath:context.xml", loader = SpringockitoContextLoader.class)
class ServiceASpec extends Specification {

    @Autowired
    private ServiceA serviceA

    @ReplaceWithMock
    @Autowired
    private RepositoryB repositoryB

    def "RepositoryBをMockにしたテスト"() {
        when:
        sut.order1("test")

        then:
        Mockito.verify(repositoryB).save("test")
    }
}
```

## (3) SpockのMockを使う

SpockにもMockあるのでそれで考えてみた。
RepositoryBのMockを作って強制的に置き換える方法ですが、意図したことはできました。

```
@ContextConfiguration(locations = "classpath:context.xml")
class ServiceASpec extends Specification {

    @Autowired
    private ServiceA serviceA

    def setup() {
        RepositoryB repositoryB = Mock()
        ServiceA.metaClass.setAttribute(serviceA, "repositoryB", repositoryB)
    }

    def "RepositoryBをMockにしたテスト"() {
        when:
        sut.order1("test")

        then:
        // repositoryB.save("test")が1回呼ばれた
        1 * repositoryB.save("test")
        
        // 上記以外でMockが呼ばれていない
        0 * _
    }
}
```

## まとめ
なんとかやりたかったことはできましたが、表面的にしか理解できていないのですっきりせず。。もっと勉強しなきゃと思いました。


### 2015/4/24 追記
「[SpringでDIされるオブジェクトのMockテストその２](http://qiita.com/nyasba/items/16daeff7b9a2a65ef07f)」で
(4)Mockito+RelfectionUtilsを使う方法を書きました。ほぼ(3)と同じですが。
CentOS7にHHVMをインストールする方法

## http://yum.gleez.com/ にHHVMのrpmが！

http://yum.gleez.com/ というyumレポジトリでHHVMが提供されているのでこれを使います。

```bash
yum install -y epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -Uvh http://yum.gleez.com/6/x86_64/gleez-repo-6-0.el6.noarch.rpm
sed -i 's|baseurl=http://yum.gleez.com/6/$basearch/|baseurl=http://yum.gleez.com/7/$basearch/|g' /etc/yum.repos.d/gleez.repo
yum --nogpgcheck -y install hhvm
```

(sedでゴニョゴニョしてるのは、7用のrpmが見つからなかったからです。
 thanks to http://qiita.com/nyatakasan/items/f2851809aa5e3f1ad709)


## 確認

```
$ hhvm --version
HipHop VM 3.6.0 (rel)
Compiler: tags/HHVM-3.6.0-0-g6ef13f20da20993dc8bab9eb103f73568618d3e8
Repo schema: 3ab6576af394a33abbb29796c652f06b1c7640ce
```

## Vagrantfile作りました

こちらにVagrantfileをあげておきましたのでご自由にお使いください。
vagrant upするだけでhhvm環境が手に入ります！！₍₍⁽⁽(ી(ˇωˇ)ʃ)₎₎⁾⁾

https://github.com/DQNEO/vagrant-centos7-hhvm

## 参考

rpmのうｐ主はこちらのインドの方のようです。

https://github.com/facebook/hhvm/issues/4527#issuecomment-68076133
https://github.com/sandeepone

関係ないけど私のアイコンはインドの神様なので親近感が湧いてきました。(どうでもいいつぶやき)
Twitterのアプリケーションを新規登録しようとするとYou must add your mobile phone to your Twitter profile before creating an application.と言われる解決方法

Twitterのアプリケーションを登録する際に携帯電話を登録しろと言われました。
そちらの手順について書いておきます。

# Twitterで新規アプリケーションを登録する
Twitterで新規アプリケーションを作成するには以下のURLへアクセスします。
https://apps.twitter.com

ログインして `Create New App` を押すと新しくアプリケーションを作成できます。

# アプリケーションの作成でエラーがでる
アプリケーション作成ページからアプリケーションを作成します。
https://apps.twitter.com/app/new

上記ページから各項目を入力して `Create your Twitter application`を押します。

```text:Twitterアプリケーション作成でエラーがでる
Error
You must add your mobile phone to your Twitter profile before creating an application. Please read https://support.twitter.com/articles/110250-adding-your-mobile-number-to-your-account-via-web for more information.
```
すると上記のようなエラーがでます。

携帯電話をTwitterプロフィールから先に追加しろと書いてあります。

# Twitterのプロフィールから携帯電話を登録する
サポートURLを読むとTwitter設定から携帯電話を登録しろとあります。以下のURLにアクセスします。
https://twitter.com/settings/devices

電話番号を追加してください。と書いてあるので、入力して `続ける` を押します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/a77d87cb-3a91-a064-4bf6-b1bbb59d8c1d.png" width="300">

SMSで届いた確認コードを入力します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/1d3253f0-f150-3278-df7d-fbb5b8b5b722.png" width="300" >

携帯電話は有効化されました。と表示されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/84e64d85-b061-3b1b-d3cd-7cb94e3cec38.png" width="300" >

# アプリケーションを作成する
再度以下のページからアプリケーションを作成します。
https://apps.twitter.com/app/new

情報を入力して `Create your Twitter application` を押します。

```text:Twitterアプリケーションの作成
Your application has been created. Please take a moment to review and adjust your application's settings.
```
今度は携帯電話を登録してるので、上記のようにアプリケーションを作成しましたというメッセージがでます。
[Ajax] onreadystatechange の代わりに loadend イベントを使う

onreadystatechange を使うのはやめようと思った

そもそも readyState ってなんだろう

[AJAX The XMLHttpRequest onreadystatechange Event](http://memopad.bitter.jp/w3c/ajax/ajax_xmlhttprequest_onreadystatechange.html) によれば、
> XMLHttpRequest のステータスを保持する。0 から 4 までに変化する:
> 0: リクエストは初期化されていない
> 1: サーバ接続は確立した
> 2: リクエストを受信した
> 3: リクエストの処理中
> 4: リクエストは終了してレスポンスの準備が完了

だそうだ

そして、onreadystatechange は readyState 属性が変更されるたびに呼び出されたイベントハンドラを返す

つまり、onreadystatechange は一回の通信で何回も呼び出される可能性があるということ

なので普通は readyState の確認をするわけだ

```js
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    console.log(xhr.response);
  }
}
xhr.open('GET', '/path/to/file', true);
xhr.send();
```

でも調べていくうちに load イベントとか error イベントとかあるじゃん。しかし、エラーなのに error でなく load が呼ばれることがあるそうで、loadend イベントならまとめて拾えるらしい

```js
var xhr = new XMLHttpRequest();
xhr.addEventListener('loadend', function(){
  if(xhr.status === 200){
    console.log(xhr.response);
  }else{
    console.error(xhr.status+' '+xhr.statusText);
  }
});
xhr.open('GET', '/path/to/file', true);
xhr.send();
```

ってことでこれでOK？

#### 参考

- [XMLHttpRequest - Web API Interfaces | MDN](https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest)
- [十三章第一回　XMLHTTPRequest — JavaScript初級者から中級者になろう — uhyohyo.net](http://uhyohyo.net/javascript/13_1.html)
windows8で、spf13-vimのインストールに詰まった

## 環境
os:windows8
vim:vim74-kaoriya-win64
spf13-vim:spf13-vim 3.0

## 事象
インストール用のバッチファイルの最終行で
Pluginのインストールが軒並みエラーになった。

```bat:spf13-vim-windows-install.cmd
52 call vim -u "%APP_DIR%/.vimrc.bundles" +BundleInstall! +BundleClean +qall
```

↓こんな感じでファミコンのバグ画面みたいになりました。
![2015-04-19_005106.png](https://qiita-image-store.s3.amazonaws.com/0/39563/7677d211-c67f-ec48-b8ab-49abcee378d3.png)

その後vimを起動すると、日本語が文字化けし、各関数の実行エラーがわんさか出て使えなくなってしまいました。

## 原因
.vimrc.bundlesのWindows Compatible {}部のエンコード指定がよろしくないようでした。

## 対処
.vimrc.bundlesを修正します。

43行目の
`set termencoding=cp850`
を
`set termencoding=cp932`
に。

45行目の
`set encoding=utf-8`
をコメントアウト。

51行目の
`set fileencodings=ucs-bom,utf-8,utf-16le,cp1252,iso-8859-15`
を
`set fileencodings=utf-8,cp932`
に。

そして、~/

これで無事にインストールできました。

`set encoding=utf-8`を外すと、utf-8のファイルを編集できないそうですが、
回避策はありそうです。

ひとまず今回はここまで。
Windows でも Let's Chat で ChatOps

# Windows でも Let's Chat で ChatOps

開発内コミュニケーション、どうしてますか？　メールでなんてやってられませんよね。というわけでチャットツールの導入についてです。

で、以下のような条件で探したところ [Let's Chat](http://sdelements.github.io/lets-chat/) が候補に挙がったので導入方法の紹介です。

* クライアントソフトが不要
* Windows でサーバが動かせる
* ログが残せる
* Redmine や Jenkins との連携がある（といいな）
* サーバマシンの起動で自動的に起動する


Let's Chat には以下のような特徴があります。

* BYOS (bring your own server)
* LDAP / Kerberos 認証もサポート
* XMPP Multi-user chat (MUC)
* 複数のルームを作成可能
* デスクトップ通知（やり方わかってません）
* メンション
* 画像の埋め込み
* ファイルアップロード
* Hubot 連携
* REST-like API
* チャットの過去ログが閲覧可能
* MIT ライセンス

# インストール

## 事前準備

まずは下回りとして以下をインストールします。

* Python 2.7
* MongoDB
* Node.js

Python と Node.js は適当にインストーラでインストールするだけなので省略します。

MongoDB のインストールは、[MongoDB のインストールドキュメント](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/)を参照して、サービス起動できるようにします。

## Let's Chat のインストール

https://github.com/sdelements/lets-chat から適当に Releases か Download ZIP なり、git で落とすなりして適当なフォルダに落としておきます。

### 起動まで

https://github.com/sdelements/lets-chat/wiki/Installation に書いてある通りに`npm install`して`npm start`すればOK・・・と思いきや、Windows ではちょっとトラブルがあるので対応します。具体的には`npm start`の中で呼ばれる migroose コマンドが、カレントディレクトリにあるmigroose.js とぶつかっていて、node_modules\.bin\migroose.cmd を呼びたいのに .\migroose.js を起動してしまうためです。

対策としては、環境変数 PATHEXT を修正するか、package.json を修正するかのどちらかになります。ここでは後者で対応します。

```json:package.json修正前（関係あるものだけ）
{
  "scripts": {
    "start": "node app.js",
    "prestart": "migroose",
    "migrate": "migroose"
  }
}
```

```json:package.json修正後（関係あるものだけ）
{
  "scripts": {
    "start": "node app.js",
    "prestart": "migroose.cmd",
    "migrate": "migroose.cmd"
  }
}
```

これで、`npm start`で起動できます。

### サービス化

Node.js の Windows でのサービス化って難しいのかと思っていたのですが、実はとても簡単でした。

[winser](https://www.npmjs.com/package/winser) というパッケージを使えば、`npm start` するアプリを簡単にサービス化できるみたいです。

サービス化は管理者として実行したコマンドプロンプトで`npm install winser` して、`winser -i` するだけで終わりです。これでサービス一覧に lets-chat が並びますので、普通に起動したり、PC の再起動をしたときに Let's Chat が起動するようになります。


# インストールの後に

## ファイルアップロード

デフォルトでは default.yml でアップロードが禁止されているので、settings.yml を書いて許可します。
```yaml:settings.yml
files:
  enable: true
  provider: local
  local:
    dir: uploads
  restrictTypes: false
```

restrictTypes を無効にしているので、何でもアップロードできるようになります。制限したい場合は、true (か、書かない)にすると defaults.yml に書かれている allowedTypes によって、jpeg/png/gif に制限されます。

それと、settings.ymlでhttp.host: 'localhost' としているので、この行を削除します。（削除しないとlocalhostからしかアクセスできません。

## Hubot で各種ツールと連携

Redmine や Subversion、Jenkins といったツールとの連携を、[Hubot](https://hubot.github.com/) を使って実現できるみたいです。まだ試してないので、試したら記事にする、かも？

## 運用面

投稿されたメッセージやアップロードしたファイルがずっと残るような気がします（実際にどうだかは調べてません）。定期的にスクリプトを実行して削除処理をかけないと、容量を食いつぶしてしまうかもしれません。
RaspberryPiでFulePHPを動かす方法


# はじめに
* 記憶を頼りに書いたので、漏れ／間違いがあったらゴメンなさい
* 最低限の労力で動かす方法となります

# 準備

* Raspberry PiへSSHログインができるようにする
* vimをインストール

# インストール

piでログインする

```bash
sudo apt-get update
sudo apt-get install nginx php5 php5-fpm php5-mysql mysql-server mysql-client
curl get.fuelphp.com/oil | sh # gitが必要と言われたらapt-getでインストール
```

でインストール終了

# oilコマンドでfuelプロジェクトの作成

```bash
cd ~
oil create test
ln -s test /var/www # シンボリックリンクをnginxのドキュメントルートに貼る
```

# nginxの設定


```bash
cd /etc/nginx/conf.d
vim fuelphp_test.conf
```


```nginx:/etc/nginx/conf.d/fuelphp_test.conf
server {
    server_name localhost; # きっとここでwarmが出るけど動きます

    access_log /var/www/test/nginxlogs/access.log;
    error_log /var/www/test/nginxlogs/error.log;
    root /var/www/test/public;

    location / {
        index index.php;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock; # 特にここの記述は公式ドキュメントと異なるので注意
        fastcgi_index index.php;
        fastcgi_param FUEL_ENV "development";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
```

nginxのログをfuelプロジェクト内に保存する為にnginxlogsディレクトリを作成

```bash
mkdir ~/test/nginxlogs
```

# 起動／apache停止&自動起動設定

```bash
sudo service apache stop
sudo service nginx start
sudo service php5-fpm start
```

```bash
sudo chkconfig apache off
sudo chkconfig nginx on
sudo chkconfig php5-fpm on
```

# 最後に...
あとは、raspberry piへブラウザからアクセスすると、Welcomeページが起動するはず。mysqlとの連携などは他の環境と同じなので割愛します。
Perlで参照渡し

参照渡しの記事を見たので便乗。
Perlにおいて参照渡しは以下のように``\``を付けてリファレンスとして渡します。
そうするとサブルーチンを抜けた後は変数が書き換えられて出てきます。

```pl:subroutine.pl
#!/usr/bin/perl
use strict;
use warnings;

my $foo = 0;

unless (bar(\$foo)) {  # リファレンスで渡す
  die "bar failed";
}

print "$foo\n";

sub bar
{
  my ($baz) = @_;
  $$baz = "hogehoge";  # リファレンスを参照して代入
  return 1;
}
```
MacBook Proを買ってやったこと

# はじめに

本日MacBook Pro Retina 13インチ Late2015を買って参りました。

![info.jpg](https://qiita-image-store.s3.amazonaws.com/0/27674/61c3979e-bb70-8e93-b47a-b1dac95a74b0.jpeg)

とりあえずドット欠けなどは見つからず、よかったです。
で、その時に行った環境設定をメモ。

## トラックパッド

いつの間にか3本指でドラッグ・アンド・ドロップの設定項目がシステム環境設定のトラックパッドから設定できなくなっていたので別途設定する。

1. システム環境設定 -> アクセシビリティ -> マウスとトラックパッド -> トラックパッドオプション
2. ドラッグを有効にするにチェック、3本指のドラッグをプルダウンから選択。

## キーボード

システム環境設定 -> キーボード

* キーのリピート
    * 最速に設定
* リピート入力認識までの時間
    * 最短に設定

## Chrome

基本。
パスワード、ブックマークもろもろ同期されるので便利。

## iTerm2

基本。
ウインドウの透過設定などはお好みで。

### フォントの設定

下記サイトを参考にRictyをインストール。

http://morizyun.github.io/blog/ricty-font-homebrew-mac/

時間が結構掛かる。

````
$ brew tap sanemat/font
$ brew install Caskroom/cask/xquartz
$ brew install ricty
$ cp -f /usr/local/Cellar/ricty/3.2.4/share/fonts/Ricty*.ttf ~/Library/Fonts/
$ fc-cache -vf
$ defaults -currentHost write -globalDomain AppleFontSmoothing -int 2
````

vimのpowerlineに対応させるため下記コマンドを実行。

````
brew reinstall --powerline --vim-powerline ricty
cp -f /usr/local/Cellar/ricty/3.2.4/share/fonts/Ricty*.ttf ~/Library/Fonts/
fc-cache -vf
````

## Dropbox

バックアップとして使ってるけど移行の時便利ですよね。

## Caps LockキーをControlに変更

システム環境設定 -> キーボードタブ -> 装飾キーから変更できる。

## 日本語入力切り替えをCtrl+Spaceで行う

Google日本語入力をインストールする。

### デフォルトではSporlightに割り当てられているのでまずそちらをAlt+Shift+Spaceに変更する

* システム環境設定 -> Spotlight -> キーボードショートカット -> Sporlight検索を表示をAlt+Shift+Spaceに変更。

### 切り替えのショートカットを設定

* システム環境設定 -> キーボード -> 入力ソースタブ
Google日本語入力のひらがなと英数を残して削除。
* Google日本語入力の環境設定のキー設定からControl+Spaceで割り当てられているショートカットを削除 (いらないかも…)
* システム環境設定 -> キーボード -> ショートカットタブ -> 入力ソース
* 前の入力ソースを選択のショートカットをControl+Spaceに変更

## Dash

ドックセットをインストール。

* raiks
* cakephp
* mysql
* postgresql
* apache
* ruby
* php
* man pages

DashのショートカットをAlt+Spaceで設定。

## zsh


brewからzshをインストールする。

6月21日追記: zshはプリインストールされているのでbrewからインストールしなくても大丈夫です。ご指摘くださったmanji-0さん、ありがとうございます。

デフォルトのシェルを下記コマンドでzshに変更する。

````
chsh -s /bin/zsh
````

## 夜フクロウ

基本。
投稿をControl+Enterにする。
リストタブを設定する。

## Alfred

起動ショートカットをControl+Shift+Spaceに変更。

## Marked2

Markdownを書くときはこれを使っている。

## iStat

システムのモニタリングに。

## ニコ生アラート（本家）

ニコ厨なので。

## Flash Player

Chromeだとバンドルされているけれど、Safariでは別途インストールが必要。

## iTunes

iTunes Matchに登録しているのでAppleIDを入力すればすべて移行完了。


## MacVim

brew版もあるとかないとか…

下記リンクからダウンロード

https://github.com/splhack/macvim-kaoriya

## AppCleaner

アプリの削除はこれが便利

## SourceTree

まあCLIでやっちゃうことが多いけど一応

## Microsoft Remote Desktop

Windowsと接続するのに使う

## VLC

入れておくと色々便利。brew caskで入る

````
brew cask install vlc
````

## OmniFocus 2

使っているので

## 他いろいろ

自動アップデートがないソフトとかはbrew (cask)で入れる

````
brew cask install virtualbox
brew cask install blender
brew cask install vagrant
````
Visual DでUncrustifyVSを使う

整形ツールがVisual Dで使えると便利だと思い、色々と試行錯誤をしたときのメモを残す。

#1.整形ツールを探す。
UniversalIndentGUIを見つける。これはフロントエンドだ。
整形ツールがD言語に対応するのは、Uncrustifyだけしかない。

インストールして試すが、うまく動かない。
プレビューは変更されているが、ファイルが整形されていない。
どこか設定ミスをしているようだが、分からずあきらめる。

#2.Uncrustify をコマンドラインで使ってみる。
最初、設定ファイルで悩む。
cfgフォルダにd.cfgがあるのを発見する。
コマンドを打つのが面倒だが、整形ができた。

#3.Visual StudioのAddin UncrustifyVS を導入する。　
偶然にAddinのUncrustifyVSを見つける。
そのままでは、D言語の整形ができなかったが、設定ファイルを指定する事で整形ができた。

##1.インストール
その前にUncrustifyをインストールしておいて下さい。
[uncrustify](http://sourceforge.net/projects/uncrustify/)
uncrustify-0.61.3-gf65394e-win32.zipをダウンロードしてください。
この写真の例では、C:\bin\uncrustifyにインストールしています。

UncrustifyVSを検索してインストールして下さい。（画像１、２枚目）

![install1.png](https://qiita-image-store.s3.amazonaws.com/0/76042/affb53a1-7867-8192-6787-cfed94d0cb78.png)
![install2.png](https://qiita-image-store.s3.amazonaws.com/0/76042/29a24470-fc30-44bd-13fc-320c82afa4f9.png)


##2.設定
設定の方法を変えました。
3 追記(2015年5月12日)を読んでください。

![menu.png](https://qiita-image-store.s3.amazonaws.com/0/76042/102d68a8-02d6-5d12-1c97-4dab068c6f85.png)
![options.png](https://qiita-image-store.s3.amazonaws.com/0/76042/0d6a7105-ec13-7f12-da52-a501997268f1.png)

UncrustifyVSのオプションを設定します。（画像３、４枚目）
Configuration File （設定ファイルの指定）に　
**C:\bin\uncrustify\cfg\d.cfg**
Uncrustify　（uncrustifyの実行ファイル指定）に　
**C:\bin\uncrustify\uncrustify.exe**
を設定します。

＊注　上記の設定はUncrustifyをC:\bin\uncrustifyにインストールした場合の設定です。

##3**追記(2015年5月12日)**
設定を変えました。
![options_2.png](https://qiita-image-store.s3.amazonaws.com/0/76042/6538bdc0-01ef-30bb-ff7a-b812de925273.png)

CommandLine を選択して直接編集します。
**-c "%CFGFILE%" -q -l %lANGUAGE% --no-backup "%FILE%"**
の%lANGUAGE% を削除して、D に変えます。
**-c "%CFGFILE%" -q -l D --no-backup "%FILE%"**

Configuration File （設定ファイルの指定）は空白にします。　

オプション指定の仕方は、
（http://manpages.ubuntu.com/manpages/lucid/man1/uncrustify.1.html）
ここを参考にしました。

#4使い方
使い方は、整形したいファイルを表示させてから、
TOOL ->　UncrustifyVS -> Format Document で整形ができます。
編集した状態なので、ファイルの保存を行ってください。

選択範囲のみ整形したいときは、
TOOL ->　UncrustifyVS -> Format Selection で整形できます。
Laravel5でイベントをとりあえず作って動かしてみたいなら。

こんな感じに書くと良いです。イベントが何をやるのかわからない人向け。

```php
// Eventのディスパッチャーのインスタンス取ってくる
$event = app('Illuminate\Contracts\Events\Dispatcher');

// listenメソッドでイベントを登録する
$event->listen('test event', function(){
    echo 'test event fire!';
});
echo "テスト";

// イベントを発火させる
$event->fire('test event');
```

```
テストtest event fire!
```

コアクラスでのイベントの追加はこの形式が多いみたいです。
と、いってもコンストラクタインジェクションを利用してメンバ変数に登録した上で使ってるみたいですね。
windows > UTF-16使用 || linuxやOS X > UTF-32使用

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

> WindowsはUTF-16を文字エンコーディングとして使用しているので、wchar_tのサイズは一般に<font color=red>2バイト</font>である。LinuxやOS X (GCC/g++やXcode)は文字エンコーディングにUTF-32を使用しているので、wchar_tのサイズは一般に<font color=red>４バイト</font>である。

両方の環境のソフトを作成していくと混乱してしまいそう。
Excel->pandas->sqlite

Excelのシートからsqlへ放り込むにはODBCのドライバを入れたり、vbaをコツコツと書かないといけないけどpythonだと簡単だよというお話。

![sheet.PNG](https://qiita-image-store.s3.amazonaws.com/0/22023/997a945e-e1a7-61b6-9310-f721c439b74e.png)

↑C:\temp\Book1.xlsxにこんなシートが開いてるとして
pandas経由で放り込むとあら簡単。
めんどくさいcreateとかしなくてもto_sqlで一発でdbとtableの作成もやってくれる。

```
# -*- coding: utf-8 -*-
from xlwings import Workbook, Range
import pandas as pd
import pandas.io.sql as psql
import sqlite3

# 既に開いているExcelブックを読み込む
wb = Workbook(r'C:\temp\Book1.xlsx')
# A1から終端までのデータを取り込む
data = Range('A1').table.value
# pandasのデータフレームに変換する
df = pd.DataFrame(data[1:], columns=data[0])

with sqlite3.connect('fruit.db') as conn:
    psql.to_sql(df, 'fruit', conn)

cur = conn.execute('select * from fruit')
print(cur.fetchall())
```

今回はダイナミックに編集しているExcelを読み込むためにxlwingsを使ったけど保存済みのファイルならpd.read_excelで読み込んでもOK。

多分これが一番楽だと思います(フラグ)
GLFWをつかってオフスクリーンレンダリングをする方法

# はじめに
glfwを使えば，クロスプラットフォームでOpenGLのオフスクリーンレンダリングができるということがわかりましたので，その方法を簡単にまとめます．WindowsやMesaではやる方法があったのですが，GLFWを使えばどこでも簡単にできるようになりました．

使い方としては，ウィンドウを出さずに済むので，サーバー側でバッチ処理とかに使えそうです．図を固定した視点でレンダリングして，画像にするという使い方を考えています．修論で，法線マップを画像に書き出して以来気にしていたのですが，できる方法が確立されてスッキリです．

# 方法

　`::glfwWindowHint( GLFW_VISIBLE, 0 )`を入れればokです．入れるタイミングは，以下のあたりです．画像の取得は，glReadPixels()などを使えばできます．

```cpp
int width = 640;
int height = 480;
if ( ::glfwInit() == GL_FALSE )  return false;
::glfwWindowHint( GLFW_VISIBLE, 0 );
GLFWwindow* win =  ::glfwCreateWindow( width, height, "tmp", NULL, NULL );
```
# ラッパー
C++のラッパーを作成しました．サンプルプログラムや，他のクラス，関数(gluUnproject()などの代替，カメラクラスなど）もあります．

* https://github.com/tmichi/migl
[Node.js]Express3をインストールする方法

# Express3をインストールする方法

Node.jsを使う必要があって勉強しています。
参考にしている書籍『実践Node.js プログラミング』はExpress3で学習を進めます。
「npm install -g express」すると最新のExpress4がインストールされてしまうので以下のように入れます。

```bash
npm install -g express@3.x.x
```

もしくはpackage.jsonのdependenciesに記述するかですね。
C > 文字定数 > int型 || C++ > 1文字の文字リテラル > char型

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

sizeof()の値がCとC++で異なるとのこと。

ideoneでやってみたところ、確かにタイトルの通りになった。

|言語|sizeof()|結果|ideone|
|:---:|:---:|:---:|:---:|
|C言語|sizeof('H')|4|http://ideone.com/RfurWw|
|C++|sizeof('H')|1|http://ideone.com/2H2hHY|

これらの違いが処理に影響がないようにコーディングしないと失敗するかも。
AWS初心者向け資料置き場（Webシステム設計・構築編）


他チームへの説明用資料置き場です。
[AWS初心者向け資料置き場（Web系）](http://qiita.com/shogomuranushi/items/ed9f89c50f8f5af36659)で概ねWeb系で利用するサービスの一部を理解出来た方向けに、
もう少し深く説明されている資料をまとめています。

設計・構築時の考慮ポイント集になります。

(またしても先人の知恵を拝借させていただきます・・)

ただ、ハンズオン的な要素を求めるのであれば、[Amazon.co.jp Amazon Web Sevices クラウドデザインパターン実装ガイド　改訂版](http://www.amazon.co.jp/dp/4822277364/ref=pd_lpo_sbs_dp_ss_2?pf_rd_p=187205609&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=4822211983&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=01AKV44MXGYE64CANCXE)をオススメします。
画像付きで細かな手順まで記載されています。

　
> ## Webシステム構築（ミニマム）
> 小規模な構成ですが、VPCの作成からSubnet、Route Table、Security Groupときて、
> RDS、EC2、更にはMySQLへ接続、Apacheのインストールまで網羅されています。
> - [【AWS 再入門】EC2 + RDS によるミニマム構成なサーバー環境を構築してみよう](http://goo.gl/HPP0fh)

　
> ## Webシステム構築（WordPressをスケーラブルに）
> WordPreesをベースに、上記ミニマムからよりアプリケーションに近づいた構築になります。
> s3とELBが追加されています。
> - [【AWS 再入門】AWS 上にシンプルかつスケーラブルな WordPress 環境を構築してみよう (前編)](http://goo.gl/haP92o)
> - [【AWS 再入門】AWS 上にシンプルかつスケーラブルな WordPress 環境を構築してみよう (前編)](http://goo.gl/MZZrbj)

　
> ## バックアップ
> AWS上でのバックアップの考え方、ポイントが公式にまとめてられています。
> - [初心者向けWebinar 貴重なデータを守るクラウドバックアップの実現](http://goo.gl/dKvdJ3)
ShaderToyのソースコードをTouchDesignerで使う

TouchDesignerでGLSLを使うには、GLSL TOPとText DATをつなぎ、Text DATにGLSLのコードを書く。
ShaderToyのコードも、サイト特有の変数表記をTouchDesigner特有のものに差し替えればほぼそのまま動く。
以下はその差し替え項目と差し替え方の例。他にもあるかも。

## 1 メイン関数?の表記差し替え
<code>void mainImage( out vec4 fragColor, in vec2 fragCoord )</code>
を
<code>void main( void )</code>
へ。

## 2 Shadertoy固有の変数
こんな感じでText DAT内で定義した上で、
<code>
uniform vec3      iResolution;
uniform float     iGlobalTime;
uniform vec4      iMouse;
</code>

GLSL TOPのパネルで変数定義をする。
iGlobalTimeについては、たとえばme.time.secondsもしくはabsTime.secondsといったビルトイン変数などを割り当てる。

## 3 画像や動画の入力口の名称
iChannel* は画像などの入力なので、GLSL TOPに入力する口に合わせて変数を入れ替える。
<code>iChannel0</code>
を
<code>sTD2DInputs[0]</code>
へなど。

## 4 使わない変数にはとりあえず0を入れておく
vec2 fragCoord = vec2(0.0, 0.0);
HBase shellで文字列以外の値をputする


HBaseでは、`hbase shell`コマンドを実行して起動できるインタラクティブシェル内において、下記のようにすることで文字列のバイト列をテーブルにputすることができます。

```
put 'my_table', 'foo', 'f:q', 'some_string'
```

文字列のみを扱うテーブルであればこれで問題ないのですが、たとえば数値を扱うテーブルの場合などで、putの引数として数値を渡した場合でも、数値が一旦文字列に変換されてから文字列のバイト列としてテーブルに書き込まれます。HBaseで数値を扱うJavaアプリケーションでは`org.apache.hadoop.hbase.util.Bytes`クラスの変換メソッドを使ってLong型の値をバイト列に変換して書き込むというケースがよくありますが、HBase shell内で普通にputを行おうとすると、これと同様のことを行うことができません。

実は、HBase shell内で`get_table`を呼び出し、その戻り値の`table`プロパティにアクセスすることで`org.apache.hadoop.hbase.client.HTable`インスタンスにアクセスすることができます。これに直接アクセスすることで、Javaアプリケーションと同様な操作を行えるようになります。

```
hbase(main):001:0> t = get_table('my_table').table
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x17b37e9a>
```

実際にこの`HTable`インスタンスと`Bytes`クラスをつかって、数値を書き込んでみます。

```
hbase(main):001:0> import java.lang.Long
hbase(main):002:0> import org.apache.hadoop.hbase.util.Bytes
hbase(main):003:0> import org.apache.hadoop.hbase.client.Put

hbase(main):004:0> row = 'foo'
hbase(main):005:0> family = 'f'
hbase(main):006:0> qualifier = 'q'

hbase(main):007:0> t = get_table('my_table').table
=> #<Java::OrgApacheHadoopHbaseClient::HTable:0x7cfac39f>

hbase(main):008:0> p = Put.new(row.to_java_bytes).add(family.to_java_bytes, qualifier.to_java_bytes, Bytes.toBytes(Long.new(15)))
=> #<Java::OrgApacheHadoopHbaseClient::Put:0x2ead6ba4>

hbase(main):009:0> t.put(p)
```

`org.apache.hadoop.hbase.client.Put`インスタンスを生成して、`HTable#put`に渡しています。テーブルをscanしてみると、期待通りに書き込まれていることがわかります。

```
hbase(main):010:0> scan 'my_table'
ROW                                    COLUMN+CELL                                                                                                   
 foo                                   column=f:q, timestamp=1429359211800, value=\x00\x00\x00\x00\x00\x00\x00\x0F                                      
1 row(s) in 0.0630 seconds
```

今回はputについて扱いましたが、`HTable`インスタンスに直接アクセスする方法を覚えておけば、HBase shellの壁にぶつかった時により柔軟な操作を行えるようになるでしょう。
Dartのhttpパッケージで文字化け


DartでHTTPリクエストをしたい時は、`dart:io` の [HttpClient](https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:io.HttpClient) を使えなくもないらしいんですが、実際使ってみると面倒でよく分かんないので、[httpパッケージ](https://pub.dartlang.org/packages/http) を利用します。

**http**
https://pub.dartlang.org/packages/http

ただ、とあるサイトのHTMLページを取得した時に、UTF8のはずなのに何故かレスポンスボディ文字化けしてしまいました。

```dart
import "package:http/http.dart" as http;
main {
  http.get("http://example.com/").then((http.Response response){
    print(response.body); //何故か文字化けする
  });
}
```

結論からするとそのサイトのContent−Typeは、`Content-Type: text/html` が指定されていたわけなんですが、これだと[httpパッケージ](https://pub.dartlang.org/packages/http)は`UTF-8`ではなくて`LATIN-1`として解釈してしまうんですね。
`Content-Type: text/html; charset=utf8` のように `charset` がちゃんと指定されてないとそうなっちゃいます。

なぜこうなっちゃうかというと、`http.Response`クラスの`body`の取得箇所を見ると分かるんですが、

```dart
String get body => _encodingForHeaders(headers).decode(bodyBytes);
```

のように、ヘッダーをパースしてContent-Typeみて適切なエンコードに変換しようと頑張っちゃった系なんですね。いい迷惑です。

なので、対処法としては、そのようなサイトにあたった時は、`.body` を使わずに `.bodyBytes` を使って解決できます。


```dart
import "dart:convert";
import "package:http/http.dart" as http;
main {
  http.get("http://example.com/").then((http.Response response){
    String responseBody = UTF8.decode(response.bodyBytes);
    print(responseBody); //文字化けしない！素敵！
  });
}
```

[httpパッケージ](https://pub.dartlang.org/packages/http)の仕様が悪いのか、`charset`を指定してないそのサイトが悪いのか、なんとも言えないアンニュイな気持ちになる割に、`.body`が生のレスポンスボディじゃなくて`.bodyBytes`が生のレスポンスボディだって事を知らないと微妙にお時間をとられるので、ご注意ください。

レスポンスする側（サーバーサイドアプリケーション側）の皆々様は、世の中にこんなライブラリがあったりするのを心の片隅においておき、ちゃんと`Content-Type`には`charaset`まで含めてあげる優しさを持ってほしいなと思いました。
Dartでsleep/wait的なやつ


1.9からasync/awaitが使えるのでシンプルに書けるようになった。素敵。

```dart
import "dart:async";
main async {
  print("BEFORE SLEEP");
  await new Future.delayed(new Duration(seconds: 3));
  print("COMPLETE!");
}
```

これを実行すると（テキストじゃ伝わりにくいけど）

```
BEFORE SLEEP
...この状態で3秒まって...
COMPLETE!
```

みたいに書ける。素晴らしい。

* `dart:async` が `import` されてること
* 実行箇所は `async` が宣言されてること
* `new Future.delayed()` の前に `await` を書くこと

この3つを守れば大丈夫。素敵。

ちなみにこれまでの書き方だと

```
import "dart:async";
main {
  print("BEFORE SLEEP");
  new Future.delayed(new Duration(seconds: 3)).then((_)=> print("COMPLETE!"));
}
```

みたいにネストせざるをえないので、随分わかりやすく書けるようになったね。よかったね。
新人さんに既存プロジェクトのsvnリポジトリをgitに移行して使ってもらうまで

かつてのプロジェクトを改修することになりました。さらには新メンバーを迎えることになりましたので、使っていたsubversionリポジトリをgitへ移行することにしました。

# 環境

こんな環境です。古いgitだとgit svnコマンドが無いかもです。

- FreeBSD 10.0
- git 2.3.5

# 作業内容

## svnリポジトリをclone

svnリポジトリを取得して、ローカルに展開します。

```zsh:
git svn clone -s --prefix=svn/ file://home/project/repos/myproj
```

svnリポジトリはtrunk、tags、branchesディレクトリに分かれているので、``-s``オプションを付けます。これを付けないと、tagsやbranchesのディレクトリがそのままできてしまいま（す｜した）。 :sweat: 

``--prefix``オプションを付けると、gitのブランチ名にプレフィックスが付きます。なくてもいいけど、付けるとわかりやすいかもです。

## タグを移行

``git branch -r``とすると、svn/tags/の下にかつて付けたタグが出てきます。これらをgitのタグにします。やってもやらなくてもいいかもです。 :expressionless: 

```zsh:
git branch -r | grep svn/tags | sed -e 's#svn/tags/##' | xargs -I % git tag % svn/tags/%
```

## 中央リポジトリの作成

このあたりはいつものやり方です。はい。

```zsh:
mkdir /home/project/repos/myproj.git
chgrp myteam /home/project/repos/myproj.git
git init --bare --shared=group /home/project/repos/myproj.git
```

## 中央リポジトリにpush

このあたりもいつものやり方です。

```zsh:
git remote add origin file:///home/project/repos/myproj.git
git push -u origin --all
git push origin --tags
```

## おしまい

準備できましたので、新人さんにgit cloneしてもらいましょー。


これにて終了です。
お疲れさまでした。
Pandoc で Windows に作るmarkdown to html, docx 環境

Pandoc のインストール
----------------------
* [github pandoc](https://github.com/jgm/pandoc/releases) から最新版の Pandoc-x.yy.z-windows.msi をダウンロード。
* Pandoc-x.yy.z-windows.msi をインストール。
* システム環境変数 Path に 「C:\Users\UserName\AppData\Local\Pandoc」を通す。（※UserName は現在のログインユーザ名）

基本コマンド
-------------
```
pandoc input.xx -o output.yy
pandoc input.xx input2.xx -o output.yy
```
※複数のファイルを連携して出力することも可能。
※出力形式は「-o」引数の拡張子で自動判別する。

Markdown to HTML
------------------
```
pandoc input.md -s --self-contained -t html5 -c github.css -o out.html
pandoc input.md -s --self-contained -c github.css -o out.html
```
※github 風の html を生成する方法は [ドキュメント変換ツールPandoc：ユーザーズガイドを熟読して分かったマニアックな使い方](http://qiita.com/griffin_stewie/items/95026360fdfca1bd8e33) を参照。


Markdown to docx
------------------
```
pandoc input.md -o output.docx
```

Markdown to docx (original style)
-----------------------------------
```
pandoc --print-default-data-file reference.docx > reference.docx
pandoc input.md --reference-docx=reference.docx -o output.docx
```
※ [style を変更する](http://nenono.hatenablog.com/entry/2015/02/10/173516#fn-b99df209)には、 reference.docx のスタイルを変更し、保存すればよい。

参考
-----
* [Pandoc ユーザーズガイド 日本語版](http://sky-y.github.io/site-pandoc-jp/users-guide/)
* [日本語MarkdownをPandocで印刷用に変換する方法](http://d.hatena.ne.jp/casualstartup/20150111/printing_markdown_with_pandoc)
* [Pandoc Convert Markdown to other formats via Pandoc](http://yihui.name/knitr/demo/pandoc/)
* [Pandoc Demos](http://pandoc.org/demos.html)

余談
------
* pdf への変換も考えていたけど、 Pandoc 標準だと日本語対応していないことと、 latex 環境を入れるのが面倒だったので今回はやらなかった。
とある世界のタクシー料金 #yhpg


METER[elem][:dist]が10で割り切れないのは街の真上でメーターが上がらないようにするためであることに気づいたのはテストを通した後だった.
あと,1箇所でしか使わないのになぜわざわざtrue.to_iとfalse.to_iを定義したのか謎(※colorを誤って発点で判定していた名残).

```hena30.rb
#!/usr/bin/env ruby
#http://qiita.com/Nabetani/items/c70417d384720a3339d6
#http://nabetani.sakura.ne.jp/hena/ord30taxi/

class TrueClass
	def to_i() 1 end
end
class FalseClass
	def to_i() 0 end
end

DIST={
	'AB'=>[1090,0],
	'AC'=>[180,0],
	'AD'=>[540,1],
	'BC'=>[960,0],
	'BG'=>[1270,0],
	'CD'=>[400,1],
	'CF'=>[200,0],
	'DE'=>[720,1],
	'DF'=>[510,1],
	'EG'=>[1050,1],
	'FG'=>[230,1],
}
METER=[
	{:dist=>995,:cost=>400},{:dist=>845,:cost=>350}
]
DIFF=[60,50]

if __FILE__==$0
	while gets
		line=$_.chomp.chars.each_cons(2).to_a
		cost=dist=0
		meter=METER[('C'<line[0][0]).to_i]
		cost=meter[:cost]
		dist=meter[:dist]
		line.each{|e|
			d,color=DIST[e.sort.join]
			dist-=d
			while dist<0
				cost+=DIFF[color]
				dist+=200
			end
		}
		p cost
		STDOUT.flush
	end
end
```
2015-04-18 tmux > 前回の作業状態に戻る > tmux attach -d | 2019-09-19 -dの意味

```txt:動作確認
CentOS 6.5
```

ターミナル上の作業状態を前回の状態にして引き続き作業したい。

以下の手順を行えばいいようだ。
<終了時 (tmuxで作業していること)>
1. 右上のxマーク (Close Window)にてターミナルを終了
2. logoutする

<再開時＞
1. loginする
2. ターミナルを立ち上げる
3. ターミナルにて以下を実行すると前回終了時の作業状態に戻る
`$tmux attach -d`

[参考](http://meme.biology.tohoku.ac.jp/students/iwasaki/dev/tmux.html)

終了時にCentOSをlogoutでなくshutdownするとtmuxの前回の状態は取得できないようだ。vmなどで動かしている場合はCentOSをshutdownしてきたが、そういう場合は今回の方法は有効でない。そうなるとvm自体のresume機能を使うほうがいいのかもしれない。


### -dの意味
(2019-09-19追記)

http://man7.org/linux/man-pages/man1/tmux.1.html

```
  attach-session [-dErx] [-c working-directory] [-t target-session]
                   (alias: attach)
             If run from outside tmux, create a new client in the current
             terminal and attach it to target-session.  If used from inside,
             switch the current client.  If -d is specified, any other
             clients attached to the session are detached.  If -x is given,
             send SIGHUP to the parent process of the client as well as
             detaching the client, typically causing it to exit.  -r signi‐
             fies the client is read-only (only keys bound to the
             detach-client or switch-client commands have any effect)
```

>  If -d is specified, any other clients attached to the session are detached. 

@sharow さんにQiitadonで聞いたのが、tmuxは同時接続が可能ということ。
同時接続を禁止する方法としての「-d」がある、と理解しました。

情報感謝です。
139kgのマシュマロ女子とはいかほどか？

# 概要
最近ネットで、[【画像】体重139kgのマシュマロ女子だけど、引っ越し先で重大な事実に気付いた…](http://www.mudainodocument.com/articles/29507.html) という記事を見かけ、139kgのマシュマロ（だけで構成された）女子ってどのくらいの大きさや！と思ったので調べてみた。
なお、マシュマロ女子の定義は「[Wikipedia マシュマロ女子](http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B7%E3%83%A5%E3%83%9E%E3%83%AD%E5%A5%B3%E5%AD%90)」によると
> ファッションに関心が高く積極的な、ぽっちゃり、ふくよかな女性を表す名称

とある。

# マシュマロの密度
「[グラムのわかる写真館　マシュマロのカロリー](http://www.eiyoukeisan.com/calorie/gramphoto/okasi/masyumaro.html)」大きさ中のマシュマロの画像 より
計りとマシュマロの大きさを比較し、マシュマロの密度を求める。
画像より、計りは「TANITA デジタルクッキングスケール ホワイト KD-173-WH」を使用しており
計りの大きさは[Amazonのデータ](http://www.amazon.co.jp/%E3%82%BF%E3%83%8B%E3%82%BF-TANITA-KD-173-WH-%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%82%AF%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB-%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88/dp/B0000C98HF)から奥行き201mm、幅146mm、高さ40mmとわかり、画像では幅（円盤プレートの直径）は170pxであるとわかる。
また、中マシュマロの1個の大きさは縦22px、幅19px、高さは目分量で8px、重さは0.8gとわかる。
![計りとマシュマロ.png](https://qiita-image-store.s3.amazonaws.com/0/72064/60fd74e3-2537-fb17-68f6-43c4d546f3f8.png "計りの大きさ（単位:mm）")![マシュマロ大きさ.png](https://qiita-image-store.s3.amazonaws.com/0/72064/36982741-ebac-06a8-d136-7244e2ed6bd2.png "マシュマロの大きさ（単位:px）")


ここで中マシュマロを底辺を長軸19px、短軸8pxの楕円、高さを22pxとする楕円柱とみなすと、
その体積は、
$ \pi ×(19/2)×(8/2)×22×(146/170)^3 ≒ 1663.673 [mm^3] $
である。
よってマシュマロ1個の密度は
$(0.8/1663.673)×(10^6/10^3) ≒ 480.864 [kg/m^3]$
となる。

# 結論
マシュマロの密度は$480.864 [kg/m^3]$であることから 
139kgのマシュマロ女子の体積は
$139/480.864 ≒ 0.289 [m^3] = 289 [L]$
となり**米俵4俵**とほぼ同じ大きさであることが分かった。[^1]
![マシュマロイコールタワラ.png](https://qiita-image-store.s3.amazonaws.com/0/72064/6eb989ac-2c13-fc9a-43e6-38367f3e3317.png)


因みに人体の密度は$1025 [kg/m^3]$である。[^2]


[^1]: １俵はおよそ72Lで、重量になおすと60kgである

[^2]: 「[Wikipedia 密度の比較](http://ja.wikipedia.org/wiki/%E5%AF%86%E5%BA%A6%E3%81%AE%E6%AF%94%E8%BC%83)」息を吐いた時の人体の平均 より
Reactに最適化したテンプレートエンジンを作り始めた


Reiny, 名前の由来は、一昨日の木曜日に作り始めて、その日雨が降ってたから。

最近react-jadeに不満を持ってて、自分はコンパイラというかプリプロセッサを作るノウハウはあるので、だったら自分で作ればいいじゃん、といった感じで作り始めた。(typed coffee を作り直すためのAST操作の勉強も兼ねてた)

## 何ができるか

今これが動いてる

```jade
- let i = () => {};
div(hoge='fuga') {
  backgroundColor = 'red'
}
  // unicode
  span(
    key="--🐑--"
  )

  // ref with &
  span&foo()

  // for syntax
  ul
    for i in @items
      li(key=i) = i

  // if syntax
  if false
    a hoge fuga aaa

  // inline expression
  if { 2 > 1 }
    a(key='fooo') hoge fuga aaa

  // text
  | aaaa bbbb

  // object mixin as property
 　- let o = {'data-a': 'aaa', 'data-b': 'bbb'};
  foo(
    > o
    onClick = {- function(){console.log('foo')} -}
  )
```

テンプレートをコンパイルすると、reactの仮想DOMを生成する関数を生成する。一種のaltjsのようなもの。reinyのruntimeと一緒に使う。　

詳しくは [reiny/example at master · mizchi/reiny](https://github.com/mizchi/reiny/tree/master/example "reiny/example at master · mizchi/reiny") をみてほしい

## 長所

基本的にはjadeのシンタックスはそのままに、インラインでコードを書けるようにした。そしてインラインコードはbabelでプリプロセスされるので、es6のコードが書ける。 (本当はif文やfor文のexpressionでも使いたかったのだが、自前でes6パーサが必要になるので後回し)

他のテンプレートエンジンと比べた際の最大の特長は、インラインのstyle記法にシンタックスを一個割り振ってる。(Reactのstyle: {} に相当)

```
.foo&refName:keyName(
  id = 'foo'
) {
  backgroundColor = 'red'
  fontSize = { 4*4 }
}
```

インラインスタイルは賛否あるが、Reactでグリグリ動かす際にはcssクラスの付け替えるのはJS書く目線だと結構面倒くさくて、特にposition:absolute 下でのtopやleftのJSで触る値については完全に完結できるようにしたかった。ゲームとか作ってる人は欲しいと思う。


普段はscssを使っているのだが、ほぼ同じツリーを二度書いている感覚あって、だったらここで全部書けてもいいのでは、という感じ。おそらく、自分の用途だとマークアップエンジニアと連携するときは最小限に抑えるが、自分で書くときはここにベタに書くだろうなァという気がしている。


gfmと同じように`\`` 3つで複数行のコード書けるようにしたんだけど、markdownにやさしくなかった…

## react-jade の不満

[jadejs/react-jade](https://github.com/jadejs/react-jade "jadejs/react-jade")

基本的に良く出来てて、それなりに枯れてそうに見えるのだけど、元がreact用ではないjadeをベースに無理やり拡張しているので、細かい不満がある。

- 複数行にまたがるインラインコードが書けない
- React環境下でロジックをたくさんテンプレートエンジンで書かないといけない状態で、生のJSが辛い
- 引数としてオブジェクトが渡せない (`MyComponent(obj)` が出来ない)

基本的には枯れてるreact-jadeを使えばいいと思うのだけど、不満があったらreinyの方も見て欲しい。といった感じ。

## なぜJSXではダメか

jsxはエンジニアに寄りすぎて少なくともデザイナには無理だし、そもそも読み易くない(と自分は思っている)。独自パーサなので他のaltjsにもやさしくない。reinyは生産性と拡張性のそのあたりのバランスを取りたい。


## gulp / browserify 用プラグイン

gulpプラグインとbrowserifyプラグインは作った。

- gulp: [gulp-reiny](https://github.com/mizchi/gulp-reiny "mizchi/gulp-reiny")
- browserify: [reinify](https://github.com/mizchi/reinify "mizchi/reinify")

あとはとりあえずatom用のシンタックス定義でも作るか、という気がしている。


## 現状

- Babel決め打ちになってる部分を、オプションで他のコンパイラを選べるようにする
- 細かい部分が枯れてないので、ドッグフーディングする

とにかくエッジケースを潰してないので、ドッグフーディングして潰す。
画面に配置せずにViewからBitmapを生成する

## やりたいこと

- アプリ内で動的にBitmapを生成したい
- そのBitmapの中に動的にテキストとか入れたい
  - →Viewから動的にBitmapをつくろう

## 解決法

ViewからBitmapを生成すればOK(http://stackoverflow.com/a/3036736/4804134)

```java
public void createBitmap() {

  // ビューを生成
  // 例として、TextViewに動的にテキストを入れる
  View v = LayoutInflator.from(this).inflate(R.layout.hoge, null);
  TextView tv = (TextView)v.findViewById(R.id.textView);
  tv.setText("ここに動的にテキストを入れる");

  // 画面内に配置してないので、measureを読んでからBitmapに書き込む
  if (v.getMeasuredHeight() <= 0) {
    v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    v.draw(c);
    return b;
  }
}
```
第30回オフラインリアルタイムどう書くの問題をRubyで解く

問題はこちら。
http://nabetani.sakura.ne.jp/hena/ord30taxi/

```rb
DIST={AB:1090,AC:180,AD:540,BC:960,BG:1270,CD:400,CF:200,DE:720,DF:510,EG:1050,FG:230}
FEE={AB:60,AC:60,AD:50,BC:60,BG:60,CD:50,CF:60,DE:50,DF:50,EG:50,FG:50}
def solve(q)
  cur_pos, *pos = q.chars
  sum, dist = cur_pos < 'D' ? [400,995] : [350,845]
  pos.each{|p|
    key = [cur_pos, p].sort.join.to_sym
    d = DIST[key]
    if d <= dist
      dist -= d
    else
      d -= dist
      while true
        dist = 200
        sum += FEE[key]
        if d < dist
          dist -= d
          break
        else
          d -= dist
        end
      end
    end
    cur_pos = p
  }
  sum
end

DATA.readlines.each do |line|
  no,q,a = line.strip.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans.to_s
  puts ans == a.to_i ? ' o' : ' x'
end
__END__
0	ADFC	510
1	CFDA	500
2	AB	460
3	BA	460
4	CD	400
5	DC	350
6	BG	520
7	GB	530
8	FDA	450
9	ADF	450
10	FDACB	750
11	BCADF	710
12	EDACB	800
13	BCADE	810
14	EGFCADE	920
15	EDACFGE	910
16	ABCDA	960
17	ADCBA	1000
18	BADCFGB	1180
19	BGFCDAB	1180
20	CDFC	460
21	CFDC	450
22	ABGEDA	1420
23	ADEGBA	1470
24	CFGB	640
25	BGFC	630
26	ABGEDFC	1480
27	CFDEGBA	1520
28	CDFGEDABG	1770
29	GBADEGFDC	1680
```
第30回オフラインリアルタイムどう書くの問題


オフラインでリアルタイムに「どう書く」をやるイベント( https://yhpg.doorkeeper.jp/events/22168 )を行っています。

問題は「とある世界のタクシー料金」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/ord30taxi/
です。

出題者の気分としては、問題を読み始めてから解けるまで1時間ぐらいあれば足りるんじゃないかと思っています。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
レガシーなjsの環境でtypoを防ぐ方法

イベント周りでtypoして発火したイベントと待ち受けているイベントが異なって失敗するなどを防ぎたい。

例えば

- 発火したイベント: newItem
- 待ち受けていたイベント: newItme

という感じでtypoによってイベントが上手く伝搬していかないなどがあると悲しい。

他の言語とは異なり、jsのobjectでは保持していないkeyでアクセスしてもundefinedが返ってくるだけでエラーにならない。
そしてundefinedが値として使われたまま処理が継続され、実際のtypoした場所と異なるところでエラーになるというのが辛い。


`strict`というすごく単純な関数を定義して使ってみているのだけれど、意外と役に立っている。

```js
function strict(name){
  if(!name){
    throw new Error('invalid name');
  }
  return name;
}
```

以下の様にして使う。

```js
var events = {
  createItem: "*createItem",
  removeItem: "*removeItem",
  updateItem: "*updateItem"
};

strict(events.createItme) // => invalid name
```

undefinedが渡された際にエラーになる関数に渡している。そこで存在しないkeyでアクセスした場合にエラーになる。
`new Error`をしっかり書いておくと、エラー時にスタックトレースを出力してくれるので最悪どこでtypoしていたか分かる。
(下記はnode.jsでの例。ブラウザでも同様。)

```
/private/tmp/a.js:3
    throw new Error('invalid name');
          ^
Error: invalid name
    at strict (/private/tmp/a.js:3:11)
    at Object.<anonymous> (/private/tmp/a.js:13:1)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3
```
もっと良い方法があったら知りたい所
AVXのunpack図示

##概要及び注意書き
AVXの_mm256_unpack～の図示。
メモ書き程度に。
厳密に理解したい場合は脳内で左右反転するようお願いします。

##コード
```C++:__mm256_unpack.cpp

	#include <immintrin.h>

	__m256i a = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7);
	__m256i b = _mm256_setr_epi32(10, 11, 12, 13, 14, 15, 16, 17);

	// 2,12,3,13,6,16,7,17
	__m256i unpackhi = _mm256_unpackhi_epi32(a, b);

	// 0,10,1,11,4,14,5,15
	__m256i unpacklo = _mm256_unpacklo_epi32(a, b);
```

##コード内容の図示
![rapture_20150418163248.png](https://qiita-image-store.s3.amazonaws.com/0/76010/a4a2389f-e315-b11c-1c16-464ffe1c6a21.png)

##参考
* x86/x64 SIMD命令一覧表　（SSE～AVX2）
http://www.officedaytime.com/tips/simd.html

* Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
Zabbixでプロセス監視を自動で設定追加する

ZabbixでSNMPのLLD(ローレベルディスカバリ)を利用して正規表現で定義したプロセスが、監視対象で動作していたら自動でプロセス監視の設定を追加する。
これでプロセス監視を１つのテンプレートに集約できる。

#前提条件
監視対象にZabbix Agentがインストール済みであること

# SNMP設定
##1. 監視対象にsnmpdインストール
```
# yum install -y net-snmp
# sed -i -e 's/^#view all/view all/' -e 's/systemview none none/all none
none/' /etc/snmp/snmpd.conf
# chkconfig snmpd on
# service snmpd start
```
上記でSNMPで全ての項目を取得できるよう設定を変更している
別途Zabbix Serverから監視対象への 161port/udp を通信許可する

##2. Zabbix Serverからsnmp疎通テスト
Zabbix Serverからsnmpwalkを実行し起動プロセスが取得できることを確認する
※52.68.137.109は監視対象のIPアドレス

```
$ snmpwalk -v 2c -c public 52.68.137.109 'HOST-RESOURCES-MIB::hrSWRunName'
HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "init"
.
.
HOST-RESOURCES-MIB::hrSWRunName.2374 = STRING: "zabbix_agentd"
HOST-RESOURCES-MIB::hrSWRunName.2416 = STRING: "snmpd"
```

#Zabbix Web設定
##1. 監視対象プロセスの正規表現の作成
Zabbix Webに管理者権限でログインし、管理タブ、一般、正規表現、正規表現の作成の順で進み
sshd, zabbix_agentd, snmpd とマッチするプロセスが起動しているか確認するルールを作成する。

```
名前　      = snmp-process-monitor
条件式      = ^(sshd"|"zabbix_agentd|snmpd)$
条件式の形式 =  結果が真
```

![スクリーンショット 2015-04-18 15.02.42.png](https://qiita-image-store.s3.amazonaws.com/0/40672/93668be4-359a-e21c-8f32-2cf20b30b9a1.png)

##2. プロセス監視アイテム自動追加用テンプレートの作成

![スクリーンショット 2015-04-18 15.04.48.png](https://qiita-image-store.s3.amazonaws.com/0/40672/c1763c15-0bb4-338c-b6f0-eb6c2d319495.png)

###2-a. ディスカバリルール
起動プロセスを取得するOIDを設定

|項目|値|
|---|---|
|名前|Process discovery|
|タイプ|SNMPv2エージェント|
|キー|hrSWRunName|
|SNMP OID|HOST-RESOURCES-MIB::hrSWRunName|
|SNMPコミュニティ|public|

![スクリーンショット 2015-04-18 15.08.21.png](https://qiita-image-store.s3.amazonaws.com/0/40672/9cf79c3d-7590-d141-7377-907196df0c6e.png)

###2-b. フィルター
作成した正規表現とマッチするプロセス名をマクロに設定するルール

|マクロ|正規表現|
|---|---|
|{#SNMPVALUE}|@snmp-process-monitor|

![スクリーンショット 2015-04-18 15.09.54.png](https://qiita-image-store.s3.amazonaws.com/0/40672/47017eab-b680-5f75-9539-8a9ed454200c.png)

###2-c. プロセス数取得用アイテムのプロトタイプ
|項目|値|
|---|---|
|名前|proc.num[$1]|
|タイプ|Zabbixエージェント|
|キー|proc.num[{#SNMPVALUE},,,]|

![スクリーンショット 2015-04-18 15.06.06.png](https://qiita-image-store.s3.amazonaws.com/0/40672/75a2b8ee-a074-79f2-e715-4bad6f120b3a.png)

###2-d. 仮想メモリ使用サイズ取得用アイテムのプロトタイプ
|項目|値|
|---|---|
|名前|proc.mem[$1]|
|タイプ|Zabbixエージェント|
|キー|proc.mem[{#SNMPVALUE},,,]|
|単位|B|

![スクリーンショット 2015-04-18 15.05.48.png](https://qiita-image-store.s3.amazonaws.com/0/40672/1c1ff129-de05-2dfa-4d75-b4b3fa8fe8a8.png)

###2-e. トリガーのプロトタイプ
プロセス数監視用トリガー
![スクリーンショット 2015-04-18 15.06.26.png](https://qiita-image-store.s3.amazonaws.com/0/40672/dd4add97-8722-cd4a-0eba-c23af40aa231.png)

##3. ホストの追加
監視対象ホストを追加し、作成したテンプレートを適用する
![スクリーンショット 2015-04-18 14.59.28.png](https://qiita-image-store.s3.amazonaws.com/0/40672/992dbd4c-fe7f-935d-ad0a-a6c00e8258fc.png)

１時間以内に下記のようにプロセス監視が勝手に追加される
![スクリーンショット 2015-04-18 16.04.09.png](https://qiita-image-store.s3.amazonaws.com/0/40672/4e97d60c-6498-d101-eed7-62b8a2bca5ad.png)

#テスト環境
OS: Amazon Linux
Zabbix: 2.4.4
自分用なんでもメモ

便利そうなもののメモ
sudoが効かないリダ入れクションを通す方法
shのオプションに-cを付ける
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
$ sudo sh -c "echo 'redirect' >> /var/test/hoge.txt"


コマンドプロンプトでtreeコマンドを使って任意の階層までを表示する

>tree 起点となるディレクトリ | find str /D /C:"^ treeで出てきた頭の記号を任意の階層まで全パターンコピーし、網羅して羅列！"

/C:は必要なだけ書く。



---
あとでまた見る系

###Fabric
https://blog.cloudpack.jp/2016/05/09/deploy-any-instance-on-fabric/

###AWS ARNの付き方（名前空間）
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-arns-and-namespaces.html
Pythonでの開発環境

これからはPythonをメイン言語として開発を進めていくので、開発環境の紹介をします。まずOSはPCゲームをするのでWindows7を使っています。Linuxでの開発も考えたのですがデュアルブートをするにはHDDが500GBと容量が少なく、VMへのインストールも動作が遅くなったりしそうなので、そのまま今のOSでの開発にしました。ただしPythonは少ししか触ったことがなく、ほとんど覚えていないのでPythonの勉強をしながら開発していきますね。

Windows7上での開発ということで学生時代に友人に教えてもらったAnacondaというアプリケーションをインストールして開発していきます。Anacondaの利点を少し箇条書きしていきますね。

１．Pythonのインストールが簡単

２．NumPyがデフォルトでインストールされる。

３．SciPyがデフォルトでインストールされる。

４．Matplotlibがデフォルトでインストールされる。

まずこれだけの開発環境を整えようと思えば自分でするのはすごく手間がかかりそうなのでAnacondaを使用することにしました。AnacondaはSpyder（JAVAでいうEclipseみたいなのかな？）というGUIがあるので開発しやすいかとも思います。PythonはAIの課題をしている時、TAにコードが短く書きやすいからとお勧めされた言語で、この分野ではよく使用されてるみたいですね。日本ではRubyなどが似ていて人気があるのであまりメジャーではないような気もしますが海外ではよく使われてるみたいです。ちなみにRubyは触った事もないのでPythonを選びました。

NumPyとSciPyは学生時代に課題（画像処理の授業だったかな？）をする上で必要だったのですが、何かと数学的なアルゴリズムが入っているライブラリーで便利だった気がしますが、たぶんこの先有用になってくると思います。例えば、Matlabというソフトの代わりに使ったりもするみたいですね。

Matplotlibは出力されたデータをグラフ形式にしたりして描くのに便利です。例えばアルゴリズムの速度などを計る時には、目に見えるグラフにすると解りやすくデータとしても残しておけると思います。

と、ここまでは僕が知っているだけの事を話してきましたが間違っている点、知らない点などもあると思います。これから勉強しつつ投稿していこうと思うので、もし何かあれば、ご指摘、ご教授してください。では、次回の投稿からAnacondaを実際に使ってコードを書いていくのでよろしくお願いします。

Anacondaのダウンロードサイト：
http://continuum.io/downloads

LinuxやMacにも対応してるみたいなので、皆さん使ってみてくださいね！！！
node.js初心者のPromiseサンプル

# 概要
node.jsを今更始めたので、callbackではなくPromiseベースで勉強中。
勉強がてら書いた簡単なPromiseベースなコードサンプルをメモ

# サンプル

```js
//
//Promiseの練習用
//

// Promise1つだけのケース
// 引数をそのまま次のfunctionに渡すだけ
var return_number = function(num){
    return new Promise(function(onFulfilled, onRejected){
        onFulfilled(num);
    });
};

// Promiseを連鎖するケース1
// return_numberの返り値に引数を追加するだけ
var add_number = function(add_num){
    return new Promise(function(onFulfilled, onRejected){
        return_number(1)
            .then(function(num){
                onFulfilled(num + add_num);
            });
    });
};

// Promiseを連鎖するケース2
// mul_numberの返り値に引数をかけるだけ
var mul_number = function(mul_num){
    return new Promise(function(onFulfilled, onRejected){
        return_number(1)
            .then(function(ret_num){
                add_number(ret_num)
                    .then(function(add_result){
                        add_result = add_result * mul_num;
                        onFulfilled(add_result);
                    });
            });
    });
};


// 実行
return_number(1)
    .then(function(num){
        console.log(num);
    });
// -> 1

add_number(2)
    .then(function(num){
        console.log(num);
    });
// -> 3

mul_number(3)
    .then(function(num){
        console.log(num);
    });
// -> 6
```
# コードの説明
最終的なmul_numberメソッドのやっていることは、単純に

```
(1 + 1) * 2 = 6
```

をやっているのみで、処理を分解すると以下のようになる。

```
mul_number 2
= (add_number 1) * 2
= ((return_number 1) + 1) * 2
= (1 + 1) * 2
```
therubyracerでオブジェクトの使い方3種

[therubyracer](https://github.com/cowboyd/therubyracer)は、V8 JavaScriptエンジンをRubyから使うためのGemです。ちょっと試してみたので、忘れないうちにメモしておきます。

オブジェクトを作って、そのメソッドを呼び出すという単純な例を、RubyとJavaScriptで実行する部分を変えて3種類作ってみました。

## 準備

JavaScriptでクラス(?)を定義する。

```ruby
require 'therubyracer'

v8 = V8::Context.new

v8.eval <<EOF
function Friend(name) { 
    this.name = name;
    this.hello = function() { return "Hello, " + this.name };
} 
EOF
```

## その1: 全部JavaScriptでやる

JavaScriptでオブジェクトを作り、メソッドを呼び出す。

```ruby
script = <<EOS
var suzuki = new Friend("Suzuki");
suzuki.hello();
EOS
puts v8.eval(script)  # => Hello, Suzuki
```

## その2: オブジェクトをJavaScriptを作る

JavaScriptでオブジェクトを作り、Rubyでメソッドを呼ぶ。

```ruby
tanaka = v8.eval "new Friend('Tanaka')"
puts tanaka.hello  # => Hello, Tanaka
```

## その3: 全部Rubyでやる

JavaScriptからコンストラクタを取り出す。
Rubyでオブジェクトを作り、メソッドを呼び出す。

```ruby
Friend = v8.eval "Friend"
kimura = Friend.new("Kimura")
puts kimura.hello  # => Hello, Kimura
```