OmniAICreator/Qiita-1.07M huggingface dataset:
[Unity] MiniJSON 使って json 読み込み

ゲームに関する設定ファイルとかって json で管理したかったりしますよね？
ただ, C# では標準で JSON をパースする仕組みはサポートされていません.

そこで, MiniJSON ってやつが手軽でサクッと使えたので
簡単に使い方を紹介します.

## 1. MiniJSON.cs をダウンロードして Assets に配置

MiniJSON は MiniJSON.cs という単体のファイルで実装されています.

下記からダウンロードしましょう
[code](https://gist.github.com/darktable/1411710) or [raw](https://gist.githubusercontent.com/darktable/1411710/raw/513f1c0ceb0cd4728973e109bd0b13911f162ebd/MiniJSON.cs)

ダウンロードしたら下図のように
Plugins フォルダを作って MiniJSON を配置します.

![1.png](https://qiita-image-store.s3.amazonaws.com/0/7756/4cf65f98-a8d3-17c1-32d9-b00041ed8446.png)


## 2. json ファイルを作成

Resources フォルダに
sample.json というファイルを作りましょう.

ちなみに中身はこんな感じになっています.

```json
{
	"name": "phi",
	"age": 26,
	"bloodType": "O"
}
```

![2.png](https://qiita-image-store.s3.amazonaws.com/0/7756/23ed9d37-68b7-c08d-473a-27dcf59707e1.png)


## 3. 実際に MiniJSON を使って json をパースする

適当に C# ファイルを作成し, 空のオブジェクトとかに
くっつけてください.

そしてまず, 下記のように using します.

```csharp
using System.Collections.Generic;
using MiniJSON;
```

次に実際に読み込んでパースします.

`Resources.Load()` で json ファイルを読み込んで
MiniJSON で定義されている `Json.Deserialize()` に中身を渡しています.
`Start()` とか `Awake()` あたりに書いてください.

これで json の構造に合わせた Dictionary が返ってきます.

```csharp
var textAsset = Resources.Load ("sample") as TextAsset;
var jsonText = textAsset.text;

// 文字列を json に合わせて構成された辞書に変換
var json = Json.Deserialize (jsonText) as Dictionary<string, object>;
```

下記のようにキャストして使います.

```csharp
Debug.Log ((string)json["name"]);
Debug.Log ((long)json["age"]);
Debug.Log ((string)json["bloodType"]);
```


## 4. Unity で実行する

実行してみてください. 下図のように
結果が Console パネルに表示されているのがわかるかと思います.

![3.png](https://qiita-image-store.s3.amazonaws.com/0/7756/9d2b2d3f-2587-27ec-4793-8949483eb692.png)


以上, 備忘録でした.
UITableViewのimageViewに画像を設定するときの注意点

#時間差で異なる大きさの画像を設定すると表示がおかしくなる

例えば、UITableViewの同じセルのimageViewに２種類の大きさの画像(ローディング画像80x80,アイコン画像250x250)を時間差で設定すると、最終的に250の画像を表示していても、最初から250で表示されている場合より小さく表示される。

この現象は、スクロールなどでUITableViewCellが再利用された際にも残る。

最終的にローディング画像をコードでリサイズして大きさをアイコン画像と揃えることで対処した。
ansi-cl ***-stream をまとめた図

http://ja.stackoverflow.com/questions/1724/unixのパイプ処理のようにストリームを扱いたい に関して。書き捨て御免!


![stream.png](https://qiita-image-store.s3.amazonaws.com/0/6090/1b34cc80-da09-0ec4-ed48-2e3fa7b367ac.png)

gray stream を使えばこう出来るらしい:

http://kurohuku.blogspot.jp/2009/11/gray-stream.html
ELBでサブドメインなしのURLにするときにハマったこと

### やりたいこと
http://wannie.net
このURLをELBでスケールしたい。
（私の作ったサービスです。URLの中身もどうぞよろしくお願いします。）

### 困ったこと
ELBで生成されたDNS Nameをお名前.comにCNAMEで追加しようとしても、ルートドメインにCNAMEは追加できないよって怒られる。

### やったこと
AWSのRoute53を使う。
（始めて、このサービスを知った時、え？国道？え？なに？となって、それからうちの開発チームでは、Route53のことを国道と呼んでいる。）

このサイトが非常に役立ちました！
>お名前.com で取ったドメインを Amazon Route53で管理し、サブドメインをはてなブログに割り当てるまで
> http://tech.tanaka733.net/entry/2013/09/15/%E3%81%8A%E5%90%8D%E5%89%8D.com_%E3%81%A7%E5%8F%96%E3%81%A3%E3%81%9F%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92_Amazon_Route53%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%97%E3%80%81%E3%82%B5%E3%83%96%E3%83%89
emacs上で、root権限でファイル編集 

emacs使っているけど、「root権限でファイルを編集したい」という場合。

```
C-x C-f /sudo::/path/to/file
```

これで開く。もちろん開くとき(大抵)パスワード必要。


trampを使い、リモートのホストのファイルを `sudo` で開きたい場合。

```
C-x C-f /ssh:user@host|sudo:host:/path/to/file
```

`|sudo:host` というのを、接続先のホスト名の直後に追加。
curl コマンドケーススタディ

自分用メモも兼ねて。

#Q1. curl コマンドでGETパラメータがうまく渡らない
```bash
$ curl -X GET http://api.facebook.com/restserver.php?method=links.getStats&urls=http://jp.techcrunch.com/2014/12/18/20141217googles-end-to-end-email-encryption-tool-gets-closer-to-launch/

<?xml version="1.0" encoding="UTF-8"?>
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
  <error_code>100</error_code>
  <error_msg>The parameter urls is required</error_msg> #urlパラメータが落ちてる
  <request_args list="true">
    <arg>
      <key>method</key>
      <value>links.getStats</value>
    </arg>
  </request_args>
</error_response>
```

#A1. `&` をエスケープしましょう
```bash
$ curl -X GET http://api.facebook.com/restserver.php?method=links.getStats\&urls=http://jp.techcrunch.com/2014/12/18/20141217googles-end-to-end-email-encryption-tool-gets-closer-to-launch/

<?xml version="1.0" encoding="UTF-8"?>
<links_getStats_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
  <link_stat>
    <url>http://jp.techcrunch.com/2014/12/18/20141217googles-end-to-end-email-encryption-tool-gets-closer-to-launch/</url>
    <normalized_url>http://jp.techcrunch.com/2014/12/18/20141217googles-end-to-end-email-encryption-tool-gets-closer-to-launch/</normalized_url>
    <share_count>25</share_count>
    <like_count>32</like_count>
    <comment_count>6</comment_count>
    <total_count>63</total_count>
    <click_count>0</click_count>
    <comments_fbid>954845757876498</comments_fbid>
    <commentsbox_count>0</commentsbox_count>
  </link_stat>
</links_getStats_response>
```
bash 側で `&` を拾ってしまったようです。

もしくは、文字列にして渡しましょう。

```bash
$ curl -G -d "method=links.getStats&urls=http://jp.techcrunch.com/2014/12/18/20141217googles-end-to-end-email-encryption-tool-gets-closer-to-launch/" http://api.facebook.com/restserver.php
```

オプションが `-X GET` ではなく `-G` になってるのがミソです。

## オプションまとめ

| オプション | 内容 |
| :-- | :-- | 
| -X | GET/POST/PUT HTTPメソッドの指定 |
| -G | GET メソッド |
| -A | UserAgent の書き換え |
| -H | header を指定する |
| -d | GET/POST用のパラメータを記述 |
| -L | リクエスト先が移動してた（301/302）場合にリクエスト先に再実行する |
| -I | レスポンスヘッダだけ取得 |
| -o | 出力先。`/dev/null` にすれば破棄 |
| -s | サイレント（何も出力しない） |



### 例)

```bash
$ curl -X POST -H "Content-Type: application/json" -A "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" http://api.hogehoge.com/post/resource -d '{"paramter":"value"}'
```
[Unity] テキストファイルをスクリプトでロードして中身を表示する方法

テキストファイルをスクリプトでロードして中身を表示する方法です.
`Resources.Load(path)` というメソッドを使います.

## 1. Resources フォルダを作ってテキストファイルを作る

Unity では "Resources" というフォルダを作ると,
その中のアセットをプログラムからアクセスすることができます.

下記の画像のように "Resources" というフォルダを作って
sample_text.txt というファイルを作りましょう.

![1.png](https://qiita-image-store.s3.amazonaws.com/0/7756/7ade89a7-ec1f-5563-607b-72969f7080e2.png)

ちなみに中身は "Hello, world!" と書いてあるだけの
シンプルなファイルです.

![2.png](https://qiita-image-store.s3.amazonaws.com/0/7756/0e076122-8593-bbe9-53ae-27e5eac2ec08.png)

## 2. スクリプトでロードして中身を表示する

適当な Script を作って Awake あたりで下記のコードを書いてください.

```csharp
var textAsset = Resources.Load ("sample_text") as TextAsset;
Debug.Log (textAsset.text);
```

`Resources.Load(path)` の返り値は `Object`型なので
`TextAsset` にキャストしています.

## 3. 実行する

Unity で実行してみてください.
Console パネルに結果が表示されるのがわかるかと思います.

![4.png](https://qiita-image-store.s3.amazonaws.com/0/7756/3e94bcfd-2c51-5bc4-d343-3b6bad3a7d31.png)


以上, 備忘録でした.
sudoがどのldap.confを読んでいるか確認する

ldapユーザーで`sudo`コマンド実行できない！とハマっていると読んでいる`ldap.conf`が違ったりするので確認方法をメモ。

----

`sudo -V`するとつらつらと表示されるので`ldap.conf path:`で始まる行をみればok。

```shellsession
# sudo -V | grep 'ldap.conf path:'
ldap.conf path: /etc/ldap.conf.sudo
```
Node.jsでのRSS配信方法。

# Node.js環境でデータベースから情報を引っ張り、自動的にRSSを作ってくれるまで。

## 参考サイト
https://www.npmjs.com/package/feed

https://github.com/dylang/node-rss

このふたつのどっちかを使えばうまくできそう。

具体的なやり方は、後で、試してみたら更新するよ！

http://nodejs.osser.jp/node/node-rss/

このサイトも参考になりそう。
改めてObjective-C の言語を理解する(プロパティ編 その2)


# 前回の続きです
前回がsetterオプションでしたので、今回はgetterオプションを確認します。

# 確認前の予想
setterオプションと同様にgetterメソッドが明示的に指定出来て、全てのアクセスが指定されたgetter経由となると思われる。

# オプション(アクセサー名の指定: getter=)
まずは前回同様に、オプションだけ指定して呼び出してみます。
想定では実行時にクラッシュします。

```objc:
// Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (getter=shortName) NSString *name3;

@end
```

```objc:
// ViewController.m
#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

// ------ 一部省略 ------ //

#pragma mark -

// プロパティ実験(アクセサー名の指定)
- (IBAction)tapPropertiesTestByAccessorName:(id)sender {
    
    Person *person = [[Person alloc] init];

    // NG: メソッドを用意していないから
    NSString *name = person.shortName;
    NSLog(@"name=%@", name);
}
@end

```

# 結果
クラッシュしませんでした。
値も取得出来ています。

# 調査しました
setterオプションと同じ結果になると予測していたのに、同じ結果にならないのはやはり実際に実行しないとわからないこともあるものだと痛感させられました。
同じ結果にならない理由については、また別途調べたいと思います。

getterオプションについても、メソッドを用意することで必ずそのメソッド経由で取得されるようになるのは確認出来ました。

```objc:
// Person.m
#import "Person.h"

@implementation Person

-(NSString*)shortName {
    return _name3;
}

@end
```

# 備考
思った結果にならないことがあると面白いです。(但し、心にゆとりがあれば)
プロパティだけで意外とボリュームがあるので、真面目に全てを理解してから始める方法と行うと辛いかもしれませんね。
Railsの新規プロジェクト作成手順メモ(個人用)

ただの個人的手順のメモです。


とりあえずrailsコマンドいれる。直接gemインストールしたくないのでbundlerで。

```
$ mkdir app_name
$ cd app_name
$ vim Gemfile
source "https://rubygems.org"
gem "rails"
$ bundle install --path=vendor/bundle
```

プロジェクト作る

```
$ bundle exec rails new . --skip-test-unit --skip-bundle --database=mysql
```

bundleしなおす

```
$ rm -rf vendor/bundle Gemfile.lock
$ bundle install --path=vendor/bundle
```

gitレポジトリの初期化

```
$ git init
$ vim .gitignore
/.bundle
/vendor/bundle
/log/*.log
/tmp
.DS_Store
*.swp
$ git add -A
$ git commit -m init
```

DB作る

```
$ bundle exec rake db:create
```
Sinatraを使ってHamlで作成したテンプレートを表示する方法


お疲れ様です。最近Rubyにはまっているジャックです。
「Iwate Developers Advent Calendar 2014」の17日目を担当します。
少し投稿が遅れてしまいました。すみませんmm
今回はRubyについて書きたいと思います。

## Sinatraのgemをインストールする
まずは必要なgemをインストールします。下記コマンドを叩いて終了です。

```
$ gem install sinatra --no-rdoc --no-ri
$ gem install sinatra-reloader --no-rdoc --no-ri
$ gem install haml --no-rdoc --no-ri
```

## Hello, World!を表示する
erbテンプレートに、お決まりの「Hello, World!」を表示させる為には、下記のようなソースコードになる。Sinatraでviewテンプレートを利用する際は、viewsディレクトリを作成して、そのディレクトリにテンプレートを配置します。Sinatraは比較的viewの表示が容易に行う事ができて便利です。

```sample/sample-erb.rb
require 'sinatra'
require 'sinatra/reloader'

get '/' do
    @title = 'Hello, World!'
    @subtitle = 'Hello, World!'
    erb :index
end
```

```sample/views/index.erb
<html>
    <head>
        <title><%= @title %></title>
    </head>
    <body>
        <h1><%= @title %></h1>
        <p><%= @subtitle %></p>
    </body>
</html>
```

## Hamlで表示してみる
もちろん、Hamlを使って表示する事ができます。

```sample/sample-haml.rb
require 'sinatra'
require 'sinatra/reloader'
require 'haml'

get '/' do
    @title = 'Hello, World!'
    @subtitle = 'Hello, World!'
    haml :index
end
```

```sample/views/index.haml
!!!
%html
  %head
    %title #{@title}!
    %body
      %h1 #{@title}!
      %p #{@subtitle}!
```

簡単なお問い合わせフォームを作る際には便利かもです。
VueifyでStylusのimportをやる方法

# **Vueify**とは

<img src="https://qiita-image-store.s3.amazonaws.com/0/47955/9b66ed5f-9fa5-b728-673c-fead613e7769.png" style="width:50%;" />

[Vueify](https://github.com/vuejs/vueify)

Vueifyは[こちら](http://qiita.com/tejitak/items/54eccf0d6067d40acccd)の記事を参考にするとわかりやすいので導入についての説明は省きます。
簡単にVueifyを説明すると、Vue.jsでComponent毎にHtml/Css/Javascript(Vueオブジェクト)をBrowserifyで管理できるものです。

Html/Css/Javascriptはそれぞれ、Template Engine/MetaCSS/AltJsを指定することで利用できます。

## 例えば…

ほげと表示される**hoge.vue**というコンポーネントを作りたい場合。

#### **構成**

- Html
    - Jade
- Css
    - Stylus
- Javascript
    - CoffeeScript

#### **サンプルのhoge.vueファイル**

```:vue
<style lang="stylus">
.hoge
	color #cc3366
</style>

<template lang="jade">
.hoge
	p {{hoge}}
</template>

<script lang="coffee">
module.exports =
  data: ->
    hoge: "ほげ"
</script>
```

ところで、MetaCSSといえば@importなどで外部ファイルをimportでき、StylusやSassだと@extendでスタイルの継承ができます。

コンポーネントの外部に自前のmixinやextendを使用したいケースはよくあると思います。
しかし、Vueifyのようにコンポーネント毎にファイル化してしまうと使えるのか心配になりますし、そもそもドキュメントにもどこにもこの辺りは明記されていないので試してみました。

## gulpを使用する場合

#### **ディレクトリ構成**

※サンプルなのでお好みの構成で

- /bower_components
- /node_modules
- package.json
- bower.json
- gulpfile.coffee
- /src
    - /javascripts
        - app.js
        - /vue
            - hoge.vue
    - /stylus
        - /extends
            - border.styl
    - /jade
        - index.jade


#### **border.styl**

```:stylus
.border
	border 1px solid #cc3366
```

#### **hoge.vue**

```:vue
<style lang="stylus">
@import './src/stylus/extends/border'
.hoge
	@extend .border
	color #cc3366
</style>

<template lang="jade">
.hoge
	p {{hoge}}
</template>

<script lang="coffee">
module.exports =
  data: ->
    hoge: "ほげ"
</script>
```

まぁ書いてしまえばなんということはないですが、注意したいのは以下のファイルの参照の仕方です。

> .vueファイルからの相対ではなく、
> gulpfileからの相対で記述

ここに注意しないと、border.stylがないと怒られます。しかしこの参照についてドキュメント類がみつからなかったので一瞬迷いました。


# 所感

VueifyはVue.js使いにはかなり使えそうなものだと思います。React.jsもReact-Jadeがありますが、.jsxファイルのrender()を直接見に行くという点では、Html/Cssしか書けないフロントエンドエンジニアには厳しいし、デザイナーにしてみたら多分見たくもないでしょう。
しかし、コンポーネントが明示的にファイル化されていて、Styleもそこにあるとなれば運用・管理はしやすいのではないかと思いました。


## 追記

Jadeのincludeがうまくいかないワナにハマっています。VueのComponentにすればよいのですが… 汎用的なJadeは外においておきたいのに…。どなたかッ!!
QtSerialPortをいじってみる

こんにちは。この記事は[Qt Advent Calendar 18日目](http://qiita.com/advent-calendar/2014/qt)となります。

#QtSerialPort
##QtSerialPortとは
QtSerialPortとは、その名の通りQtでシリアルポートを動かすためのクラスです。たとえば、

* ロボットの操作インターフェイスをQtで作りたい
* 組み込みシステムを作りたい

といった時に必要となるシリアルポートの操作が可能となります。

QtSerialPortには二つのクラスがあります。
###QSerialPort
QSerialPortとはQtSerialPortの基盤となるクラスであり、またシリアルポートへの基本的なアクセスができます。Qt5.1から使用可能となりました。
[QSerialPort Class | QtSerialPort 5.3](http://doc-snapshot.qt-project.org/qt5-5.3/qserialport.html)

###QSerialPortInfo
QSerialPortInfoクラスではシステムにおいて利用できるシリアルポートの情報を取得することができます。Qt5.1から使用可能となりました。
[QSerialPortInfo Class | QtSerialPort 5.3](http://doc-snapshot.qt-project.org/qt5-5.3/qserialportinfo.html)


QtSerialPortはQIODeviceを継承して作られているため、QIODeviceの関数である.writeや.read()なども使用することができます。

###使い方

QtSerialPortを利用する際は、プロジェクトファイルに次のように追記します


```:.pro
//Qt4の場合
CONFIG += serialport //これは.proファイルの一行目もしくは二行目に
//Qt5の場合
QT += serialport
```

また、次の二つのヘッダーを読み込みます。

```cpp
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
```

###対応OS

| OS         | サポート状況  |
|:-----------|:-----------:|
| Windows    |      ○      |
|GNU/Linux   |        ○    |
| MAC OSX    |          ○  |

他にもWindowsCEとかでも使えるみたいです。凄いなぁ...

###簡単なサンプル

```cpp
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
 
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
 
QT_USE_NAMESPACE
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    // Example use QSerialPortInfo
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { //availablePorts()で利用可能なすべてのシリアルポートが取得できる
        qDebug() << "Name        : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
 
        // Example use QSerialPort
        QSerialPort serial;
        serial.setPort(info);
        if (serial.open(QIODevice::ReadWrite))
            serial.close();
    }
   
    return a.exec();
}
```
![057.png](https://qiita-image-store.s3.amazonaws.com/0/34961/03c6de78-9aa6-1092-50d8-817524eff3cb.png)

##参考資料
というか、ほとんどこのページの要約と翻訳って感じです...
[QtSerialPort | Qt Wiki | Qt Project](http://qt-project.org/wiki/QtSerialPort)
Casual Compression on MongoDB その後(執筆中)


# はじめに
２年ほど前に、以下のような資料をもとに勉強会で発表しました。

![mongotitle.png](https://qiita-image-store.s3.amazonaws.com/0/44364/9ae71137-f332-458d-04d6-96fa5fb290fd.png)
<iframe src="//www.slideshare.net/slideshow/embed_code/13558123" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/moaikids/casual-compression-on-mongodb" title="Casual Compression on MongoDB" target="_blank">Casual Compression on MongoDB</a> </strong> from <strong><a href="//www.slideshare.net/moaikids" target="_blank">moai kids</a></strong> </div>

MongoDBは、その構造的な特徴から、どうしても他のデータストアに比べてデータが肥大化しがちです。正確にいうと効率的なデータ圧縮を行いづらい構造になっています。

それに対するちょっとしたCasualな対策として、以下の２つのテクニックを用いてデータサイズを圧縮する事を当時試みており、その話をさせていただいたのが上述の資料です。

* フィールド名をできるだけ短くする
* 特定のデータをbinary形式で保存

# その後の話
(すみません。今時間が取れないので、随時追記していきます......orz)
ローカルでPHP×Apache連携（Windows環境）


##目的
ローカル(Windows環境)でPHP×Apache環境を構築
html拡張子で、phpが動作するように対応する
##事前準備
Download : Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ - http://www.microsoft.com/ja-JP/download/details.aspx?id=30679

##Aapacheインストール
1. Apacheのダウンロード(http://www.apachelounge.com/download/)
1. zipを解凍し、任意の場所に置く
1. **http.conf**の設定を変更する

```bash
# http.conf
ServerRoot "c:/your/apache/path"
DocumentRoot "c:/your/apache/path/htdocs"
<Directory "c:/your/apache/path/htdocs">
ScriptAlias /cgi-bin/ "c:/your/apache/path/cgi-bin/"
Listen 127.0.0.1:80
ServerName localhost:80
```

コマンドプロンプトを立ち上げ、Apahceをローカル環境のサーバとしてインストールする

```bash
$ cd Apache\bin
$ httpd -k install
Installing the Apache2.4 service
The Apache2.4 service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
httpd: Syntax error on line 37 of c:/your/apache/path/conf/httpd.conf: S
erverRoot must be a valid directory
```
以下から起動を確認できる
1. コントロールパネル
2. 管理ツール
3. サービス

## PHP
1. PHPのダウンロード(http://windows.php.net/download/)
2. zipを解凍し、任意の場所に置く
3. ``php.ini-development``を``php.ini``に変更
4. PHPをApacheで利用できるように**http.conf**の設定を変更  
以下の設定で、html拡張子で``.php``も利用できるようになる。

```bash
# http.conf
LoadModule php5_module "C:/your/path/php-5.6.3/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "/your/path/php-5.6.3"
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
```

Apacheを再起動し、htdocs以下に``info.php``を作成

```bash
# info.php
<?php
phpinfo();
?>
```
以下のURLでPHPの設定が確認できると完了  
http://localhost/info.php
gitで差分ファイルを抽出する（改変）

gitで差分取ってzipするやつ、少し改変して使わせてもらった。

http://qiita.com/kaminaly/items/28f9cb4e680deb700833

```bash:.bashrc

function git_diff_archive() 
{
  dateTime=`date '+%Y%m%d%H%M'`
  local diff=""
  local h="HEAD"
  if [ $# -eq 1 ]; then
    if expr "$1" : '[0-9]*' > /dev/null ; then
      diff="HEAD HEAD~${1}"
    else
      diff="HEAD ${1}"
    fi
  elif [ $# -eq 2 ]; then
    diff="${1} ${2}"
    h=$1
  fi
  if [ "$diff" != "" ]; then
    diff="git diff --name-only ${diff}"
  fi
  git archive --format=zip $h `eval $diff` -o ${PWD##*/}-$dateTime.zip
}
alias git_diff_archive=git_diff_archive
```
ちょっといじったのはzipで固めるファイル名。
`今いるディレクトリ名-yyyyMMddHHmm.zip` にする。
repo のルートにいないとダメですかそうですか。

```bash
$ git_diff_archive ab8c41c
```

repo のルートで打つと、hogehoge-201412121330.zip ができる。
MySQL レプリケーションエラーの対処

##BINLOG_FORMATで怒られる場合

```sql:sql
mysql> show slave status \G
```
で

```sql:sql
Last_Error: Error executing row event: 'Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.'
```

とでたら、

```sq:sql
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';
```
でbinlog_formatを確認。

マスターとスレーブで異なっているいる場合に起こるようです。

コマンドでmysqlを再起動せずに変更するなら、※扱い注意！

```sql:sql
mysql> slave stop;
mysql> SET GLOBAL binlog_format = 'MIXED';
mysql> slave start;
mysql> show slave status ¥G;
```

※忘れずにmy.cnfにも記述してmysql再起動後も反映されるように。

```my.cnf
binlog_format = MIXED
```
UILabelの背景に画像を設定するとXcode6でビルドしてiOS8で動かした場合だけ画像がズレる


UIColor.colorWithPatternImageを使用することでUILabelの背景に画像を設定できるのですが、Xcode6でビルドしてiOS8で動かすと画像がおかしくなります。
原因はわかっていないのですがラベルに日本語を設定した場合だけズレるようです。
下記を追加することで対応できます。

```objective-c
label.clipsToBounds = YES;
```

コード

```objective-c
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    {
        UILabel *label = [[UILabel alloc] init];
        label.text = @"koreha daijoubu";
        label.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test"]];
        label.frame = CGRectMake(100.0, 100.0, 124.0, 21.0);
        [self.view addSubview:label];
    }
    
    {
        UILabel *label = [[UILabel alloc] init];
        label.text = @"これはダメ";
        label.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test"]];
        label.frame = CGRectMake(100.0, 100.0 + 100.0, 124.0, 21.0);
        [self.view addSubview:label];
    }
    
    {
        UILabel *label = [[UILabel alloc] init];
        label.text = @"こうするとOK";
        label.clipsToBounds = YES;
        label.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test"]];
        label.frame = CGRectMake(100.0, 100.0 + 200.0, 124.0, 21.0);
        [self.view addSubview:label];
    }
}
```

iOS7
![20141213002816.png](https://qiita-image-store.s3.amazonaws.com/0/2569/b60d52df-29ea-cc79-2588-e65f7e2b4a20.png "20141213002816.png")

iOS8
![20141213002826.png](https://qiita-image-store.s3.amazonaws.com/0/2569/55db32c0-f891-0ac7-bb6e-87e476c05fba.png "20141213002826.png")
[Unity] git で管理する際の無視ファイル(.gitignore)設定

色々見た結果, 下記に落ち着いた.

```bash:.gitignore
# for unity
[Tt]emp/
[Oo]bj/
[Ll]ibrary/
[Bb]uild/

# for VisualStudio/MonoDevelop
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.userprefs
*.pidb
*.booproj
```
外部htmlの表示について

色々と調べてみても設定できなかったので、質問させて頂きます。



tomcatとapacheは連携済みで、

htdocsの直下にAAAというディレクトリがあり

その中のhtmlファイルを表示させたいです。

SSIの設定が必要かと思い、

以下の作業をしましたが、まだ表示されません。



apache側の設定

httpd.confに以下の設定追加

Options +Includes

AddType text/html .shtml

AddHandler server-parsed .shtml



tomcat側の設定

web.xmlの以下のコメント部分を有効化
ssiの<servlet>〜</servlet>
ssiの<servlet-mapping>〜</servlet-mapping>

context.xmlに下記を追加
<context privileged="true">



ちなみにバージョンは以下の通りです。

tomcat7.0.57

apache2.4



問題解決にあたり他に必要な情報がありましたらコメントお願いします。
Yahoo知恵袋　質問検索APIの検索結果件数についてお教え下さい。

Yahoo知恵袋　質問検索APIの検索結果件数についてお教え下さい。

Yahoo知恵袋で「美容室経営 悩み」と検索すると、検索結果が77件になります。

APIでプログラムを作成して検索すると、検索結果が18件になります。

他の方のサイトでも試しましたが、検索結果は同じ18件です。

質問1.
Yahoo知恵袋で手入力した結果とＡＰＩで検索した結果は、同じにならないのでしょうか？

質問2.
ＡＰＩでYahoo知恵袋で手入力した結果と同じようにする方法があれば教えてください。

以上、よろしくお願いします。
CentOS7 nmcliでresolvだけstaticに設定する。(内部DNSとか使いたいなど)

基本的にDHCPでIPは設定するんだけど、resolvだけはstaticに設定したいときなど。
ipv4.ignore-auto-dns, ipv4.dnsを設定すればOKです。

```
# nmcli con show
名前        UUID                                  タイプ          デバイス    
有線接続 1  4dd66ee4-65a8-4895-9ede-b4aa790fb7cf  802-3-ethernet  eno16777984 

# nmcli con mod 4dd66ee4-65a8-4895-9ede-b4aa790fb7cf +ipv4.ignore-auto-dns yes
# nmcli con mod 4dd66ee4-65a8-4895-9ede-b4aa790fb7cf +ipv4.dns 8.8.8.8
# nmcli con up 4dd66ee4-65a8-4895-9ede-b4aa790fb7cf
```

これで、基本はDHCPでresolvだけはstaticに設定できます。
Chromeの安定版とBeta版を共存させる方法

# ベータ版のインストーラをダウンロードする

https://www.google.com/chrome/browser/beta.html

からChromeSetup.exeをダウンロードする。

# インストーラを展開する

ChromeSetup.exeを解凍するとChrome-binというディレクトリがあり、
Chrome-binの下に、chrome.exeと名前がバージョン番号のディレクトリがある。

## 例

* Chrome-bin/chrome.exe
* Chrome-bin/40.0.2214.45

# バージョン番号ディレクトリにchrome.exeを移動させる

## 例

Chrome-bin/chrome.exe→Chrome-bin/40.0.2214.45/chrome.exe

# --user-data-dirオプションをつけてchrome.exeを起動する

## 例

```
C:\hogehoge\Chrome-bin\40.0.2214.45\chrome.exe --user-data-dir="C:\hogehoge\Chrome-bin\40.0.2214.45"
```

Chrome-bin/40.0.2214.45/chrome.exeのショートカット作ってリンク先を変更すればいい。まっさらなプロファイルでchromeが立ち上がったら起動成功。

```
chrome://version
```

とURLバーに打ち込めば起動中のバージョンを確認出来る
Gitエラー：there are still refs under 

Gitエラー対処時のメモ

参考: http://otiai10.hatenablog.com/entry/2013/12/14/123117

##エラー内容##
there are still refs under 'refs/remotes/origin/release'

##原因##

origin/release/old
↓
origin/release
のような旧サブフォルダ名が新ブランチ名になったときに発生？

[Aさん]ブランチを作成: origin/release/old
[Bさん]ブランチをチェックアウト: origin/release/old
[Aさん]ブランチを削除: origin/release/old
[Aさん]ブランチを作成: origin/release
[Bさん]pullでエラー

```
 # git pull
 error: there are still refs under 'refs/remotes/origin/release'
```

##対応##

リモートの追跡を削除してからpull

```
 # git branch -d -r origin/release/old
```
cronologでcatalina.outをローテーションさせる

catalina.outログは、rotatelogsやcronologのようなログローテーションプログラムを使用して、ローテーションさせることができます。

通常、標準出力と標準エラー出力はcatalina.outに出力されますが、ファイルではなくログローテーションプログラムにパイプします。ここでは、cronologでこれを行う方法を例示します。他のプログラムを使用する場合もだいたい同じですが、コマンドが一部違うことになります。

※注意：この場合、logging.propertiesやlog4j.propertiesファイルによって制御することはできません。
- - -
$CATALINA_HOME/bin/catalina.shを開いてから、次の行を検索し、それをコメントアウトします。

```bash
touch "$CATALINA_BASE"/logs/catalina.out

```

※Tomcatのバージョンによっては、以下のように記載されています：

```bash
touch "$CATALINA_OUT"

```

さらに、次の行を検索して、

```bash
>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
```

次の行で置換します。

```bash
2>&1 |/usr/bin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &
```

※バージョンによっては、以下のように記載されています。

```bash
>> "$CATALINA_OUT" 2>&1 &
```

完了したら、bin/catalina.shを保存して、Tomcatを再起動します。
- - -
これで、ログディレクトリに"catalina-2014-12-13.out"というような名前のファイルが出力されるはずです。日付が変わると、新しいログファイル("catalina-2014-12-14.out")が作成されます。ログファイルは、日付が変更された後に何かがログに書き込まれて、初めてローテーションします。
GCE上のCentOSインスタンスにOracleのjdkをインストールするまで。

GoogleComputeEngineに作成したCentOSのインスタンスにOracleのjdkをインストールするのに一苦労したのでそのメモ。

## 実行環境
* GoogleComputeEngineに作成したインスタンス
 * イメージはcentos-6-v20141205
* jdkの最新版はjdk1.8.0_25(2014/12/18現在)


## rpmファイルをダウンロードする
rpmのダウンロードURLはweb上のAcceptにチェック入れないとwgetできないので、[このページ](http://qiita.com/hajimeni/items/67d9e9b0d169bf68d1c9)を参考に以下のオプションつけて実行

```bash
wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-i586.rpm
```

## rpm install -> 失敗
そのままrpm installしようとしても失敗…

```bash
$ sudo rpm -ivh jdk-8u25-linux-i586.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8.0_25            ########################################### [100%]
Unpacking JAR files...
        rt.jar...
/var/tmp/rpm-tmp.dagDzw: /usr/java/jdk1.8.0_25/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file
 or directory
Error: unpack could not create JAR file:
        /usr/java/jdk1.8.0_25/jre/lib/rt.jar
Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
        jsse.jar...
/var/tmp/rpm-tmp.dagDzw: /usr/java/jdk1.8.0_25/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file
 or directory
Error: unpack could not create JAR file:
        /usr/java/jdk1.8.0_25/jre/lib/jsse.jar
(以下略)
```

## 必要パッケージのインストールからのjdk再インストール
[ここ](http://slumbers99.blogspot.jp/2012/04/centos-64bit-libld-linuxso2-bad-elf.html)を参考にld-linux.so.2をインストール

```bash
sudo yum install ld-linux.so.2
```

アンインストールしてもう一回実行、が失敗…w

```bash
$ sudo rpm -e jdk1.8.0_25
$ sudo rpm -ivh jdk-8u25-linux-i586.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8.0_25            ########################################### [100%]
Unpacking JAR files...
        rt.jar...
/usr/java/jdk1.8.0_25/bin/unpack200: error while loading shared libraries: libgcc_s.so.1: cannot open shared object
 file: No such file or directory
Error: unpack could not create JAR file:
        /usr/java/jdk1.8.0_25/jre/lib/rt.jar
(以下略)
```

libgcc_s.so.1も必要なのか？、ってことでインストールしてjdk再インストール

```bash
sudo yum install libgcc_s.so.1
```

```bash
$ sudo rpm -e jdk1.8.0_25
$ sudo rpm -ivh jdk-8u25-linux-i586.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8.0_25            ########################################### [100%]
Unpacking JAR files...
        rt.jar...
        jsse.jar...
        charsets.jar...
        tools.jar...
        localedata.jar...
        jfxrt.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) Client VM (build 25.25-b02, mixed mode, sharing)
```

やっとインストール完了しました。
コミットログにはWhyを書けとよく言われるが、実はそれほど簡単ではない件について

## コミットログには"Why"を書け？

よくコミットログには「何をしたか」ではなく「なぜその変更をするのか理由を書け」と言われます。
これは確かに一理あります。

例えば、コミットログに

```
「登録画面のtitle要素を変更」
```
などと書かれていたとすると、「いやいや、そんなのは`git log -p`すればわかるでしょ。何で変更するのかその理由を書いてよ」と言いたくなります。

そこでチームの規約で「コミットログには理由を書くこと」と定めたとします。
まあよくある話ですね。

そうすると、コミットログはこうなるでしょう。

```
「SEO対策のために(登録画面のtitle要素を)変更」
```

さあこれでよいでしょうか？

## 「理由」を突き詰めると「生きる理由とは？」になってしまう

これは確かに立派な理由かもしれませんが、「ではそれは何のために？」と理由をさらに深堀りする人がいるかもしれません。

* 「なぜその変更がSEO的に有効なのか？」
* 「そもそもなぜSEO対策が必要なのか？」


これらの疑問はもっともです。
コミットログにその理由を書いてみましょう。

```
「SEOの達人の記事によると、title属性をこう変えた方がSEO的に有利であると書いていたので。また、SEO対策は、ページビューを増やすためには必要であり有効である。」
```

でもこれにも理由があります。
なんでページビューを増やす必要があるのか？

```
「業績向上のため」
```

では「業績向上のため」は何ために？

そうです。
Whyを深堀りすると、「会社は何のために存在するのか？人は何のために生きるのか？」という哲学的な問いに陥ってしまいます。

でもこうなると、「業績向上のためって、それ当たり前じゃないか」という気持ちになってきます。

つまり「コミットログには理由を書け」というポリシーは、それほど自明なものではないのです。

## どうするべきなのか

現実的な方法としては、このようにするのがいいのではないでしょうか。

* BTSなどで、やるべきタスクをIssueとして作成する(例：SEOランク向上)
* そこに案件の背景や詳しい理由を書く
* コミットログにIssue番号を書く。 
「refs #12345」
* 必要なら、続けて補足的説明を書く。
「refs #12345 登録画面のtitleをこうした方がSEO的に有利なので」

こうすれば、大目的はIssueに書かれているので、コミットログに毎回書かかなくてよくなります。
コミットログには、「Issueや差分には書かれてないこと」だけを書けばよくなります。
Issue番号をいちいち書くのが面倒くさいなら、ブランチ名にIssue番号を含めておいて(`dqneo_12345_fix_hoge`など)、コミット時に自動で記録されるようにしておけばよいでしょう。

この方法は、実際に私のチームが現場で毎日実践しており、今のところうまく機能しています。

他によいアイデアなどがあれば教えてください。

それではHappy Committing!
Blenderによるモデル作成

Android,OpenGLESで使用するオブジェクト作成
参考
http://www.blender3d.biz/knowledge_editing_quadstotriangles.html


![kobito.1418801939.758556.png](https://qiita-image-store.s3.amazonaws.com/0/59354/6f97ca7c-5867-6210-0fc8-7c254b8b6723.png "kobito.1418801939.758556.png")


1.素材やツールの用意
1) Blender 2.72b-OSX_10.6-x86_64ダウンロード(Mac)
http://www.blender.org/download/

![スクリーンショット 2014-12-17 22.50.22.png](https://qiita-image-store.s3.amazonaws.com/0/59354/63de9694-304f-5bb4-c512-3a49aa9f4198.png "スクリーンショット 2014-12-17 22.50.22.png")



2) モデル(.obj形式)のダウンロード
http://www.datadesign.co.jp/artec3d/

3DモデルはFreeでたくさんあるのでサイトを探してみてください。
※今回は.obj形式で進めます。

3) フォルダ展開→Blender起動
ダウンロードしたZipを展開したらBlenderフォルダが入っています、フォルダの中にあるblenderをクリックすればBlenderが起動します、私はインストールせずに使っています。
![スクリーンショット 2014-12-20 1.37.44.png](https://qiita-image-store.s3.amazonaws.com/0/59354/5c961ba8-74ab-d6e7-9d7e-f69a864bc1be.png "スクリーンショット 2014-12-20 1.37.44.png")



2.オブジェクト作成
1) Blenderで.objファイルをimportする。
　　　Blenderを起動する。> Import > Wavefront(.obj)
![スクリーンショット 2014-12-17 23.15.05.png](https://qiita-image-store.s3.amazonaws.com/0/59354/0a183e0d-1b81-c9f1-f606-68ce12f36f25.png "スクリーンショット 2014-12-17 23.15.05.png")


Blenderは.objだけでなく、(.dae)(.bvh)(.svg)(.ply)(.stl)(3ds)(fbx)(.x3d/.wrl)をimportする事ができます。

2)四角ポリゴンから三角ポリゴンへ変更
　　　三角ポリゴンにしたいオブジェクトを選択し、Object Mode > Edit Modeにし、Solid > Wireframeにします。後は control+T で四角ポリゴンが三角ポリゴンになります。

![スクリーンショット 2014-12-18 0.51.53.png](https://qiita-image-store.s3.amazonaws.com/0/59354/1505d0a3-3eea-9ca6-c87d-0a2668a5edf4.png "スクリーンショット 2014-12-18 0.51.53.png")

逆に三角ポリゴンから四角ポリゴンにしたい時 Alt + J

3)Blenderで.objファイルをExportする。
     オブジェクトを選択する。> File > Export > Wavefront(.obj)
![スクリーンショット 2014-12-18 1.08.52.png](https://qiita-image-store.s3.amazonaws.com/0/59354/95657dc6-50ca-66b5-98d1-14e722d757cb.png "スクリーンショット 2014-12-18 1.08.52.png")


Blenderは.objだけでなく、(.dae)(.bvh)(.ply)(.stl)(.3ds)(.fbx)(.x3d)をExportする事ができます。
.objファイルをExportした時、同時にマテリアルファイルも作られます。




Blenderをもっと詳しく知りたいと思う方は私が参考にしたサイトのURLに行ってみてください。
http://www.blender3d.biz/setup_windows_downloads.html

http://cg.xyamu.net/Blender/entry156.html
GolangのTemplateで<select>タグを簡単に記述する

Golangには標準でhtml/templateがありますが、Django formなどに慣れてると、物足りなさを感じます。
(私自身がDjangoに慣れてるわけじゃないですが・・)

ちょっと調べたらtemplateのFuncMap関数を使ったらテンプレート内で使える関数を簡単に定義できるようでしたのでやってみました。


[http://play.golang.org/p/FshNbC3KsY](http://play.golang.org/p/FshNbC3KsY)

```go:sample.go
package sample

import (
	"fmt"
	"html/template"
	"net/http"
)

func init() {
	http.HandleFunc("/", handle)
}

type tmplParams struct {
	Weekday *forHTMLSelect
	Month   *forHTMLSelect
}

type forHTMLSelect struct {
	Options  []string
	Selected int
}

func handle(w http.ResponseWriter, r *http.Request) {
	funcMap := template.FuncMap{
		"select": func(sel *forHTMLSelect) template.HTML {
			h := "<select>"
			for i, v := range sel.Options {
				var s string
				if i == sel.Selected {
					s = " selected"
				}
				h += fmt.Sprintf(`<option value="%d"%s>%s</option>`, i, s, v)
			}
			h += "</select>"
			return template.HTML(h)
		},
	}

	p := new(tmplParams)
	weekday := new(forHTMLSelect)
	weekday.Options = []string{"月曜", "火曜", "水曜"}
	weekday.Selected = 1
	p.Weekday = weekday

	const templateText = "<label>曜日：{{select .Weekday}}</label>"
	tmpl, _ := template.New("selectTest").Funcs(funcMap).Parse(templateText)
	tmpl.Execute(w, p)
}
```

出力
`<label>曜日：<select><option value="0">月曜</option><option value="1" selected>火曜</option><option value="2">水曜</option></select></label>`

forHTMLSelect型っていうのを自分で定義して、そこに選択肢とSelectedにしたい要素を入れます。
テンプレート内では{{ select . }}でoptionタグも全部書いてくれます。

標準以外のライブラリを使わないでもっと良い方法があったら教えて欲しいです。
flask/python で POST されたデータを echo するサーバー

webhook とかのデバッグに利用

```:python
from flask import Flask, request
app = Flask(__name__)

@app.route("/", methods=['POST'])
def webhook():
    print request.headers
    print "body: %s" % request.get_data()
    return request.get_data()

if __name__ == "__main__":
    app.run()
```
Gmailみたいに一気に選択できるチェックボックス

初めてのjQueryプラグインを作ってみました。
https://github.com/uchikoba/checkboxMultiSelector

jQuery本体は別途読み込んでください。

```:Sample
<input type="checkbox" class="chk" value="1">チェック１
<input type="checkbox" class="chk" value="2">チェック２
<input type="checkbox" class="chk" value="3">チェック３
<input type="checkbox" class="chk" value="4">チェック４
<input type="checkbox" class="chk" value="5">チェック５

<script type="text/javascript" src="jquery.checkboxMultiSelector.js"></script>
<script type="text/javascript"><!--
$(document).ready(function () {
  $('.chk').checkboxMultiSelector();
});
// --></script>
```
gulpfile.coffee (livereload+scss+coffee)

# Usage
```bash
$ npm install
$ gulp
```
![スクリーンショット 2014-12-18 12.40.13 PM.png](https://qiita-image-store.s3.amazonaws.com/0/28576/1f3ab20a-0ca4-2017-4818-652c0cd7e64e.png)

##./package.json

```json
{
  "name": "mygulp",
  "main": "index.html",
  "devDependencies": {
    "coffee-script": "^1.8.0",
    "gulp": "^3.8.10",
    "gulp-coffee": "^2.2.0",
    "gulp-concat": "^2.4.2",
    "gulp-connect": "^2.2.0",
    "gulp-pleeease": "^1.1.0",
    "gulp-plumber": "^0.6.6",
    "gulp-ruby-sass": "^0.7.1"
  }
}
```

##./gulpfile.coffee
```coffeescript
gulp= require 'gulp'
concat= require 'gulp-concat'
plumber= require 'gulp-plumber'

files= ['*.html','*.js','*.css']
gulp.task 'watch',->
  gulp.watch '.coffee/*.coffee',['coffee']
  gulp.watch '.scss/*.scss',['scss']
  gulp.watch 'gulpfile.coffee',['coffee','scss']
  gulp.watch files,['reload']

gulp.task 'reload',->
  gulp.src(files)
    .pipe(localhost.reload())

gulp.task 'coffee',->
  coffee= require 'gulp-coffee'
  gulp.src '.coffee/*.coffee'
    .pipe plumber()
    .pipe coffee()
    .pipe concat 'index.js'
    .pipe gulp.dest __dirname

gulp.task 'scss',->
  sass= require 'gulp-ruby-sass'
  pleeease= require 'gulp-pleeease'
  gulp.src '.scss/*.scss'
    .pipe plumber()
    .pipe sass({
      style:'nested'
      "sourcemap=none": true
    })
    .pipe pleeease {
      minifier:false
      autoprefixer:
        browsers:
          ['last 2 version']
    }
    .pipe concat 'index.css'
    .pipe gulp.dest __dirname

localhost= require 'gulp-connect'
gulp.task 'localhost',->
  localhost.server {
    root: __dirname
    port: 8000
    livereload: true
  }

gulp.task 'default',['localhost','watch']
```

### via 
* [gulpでsassをコンパイルするタスクを作る - yutaponのブログ](http://yutapon.hatenablog.com/entry/2014/09/11/100000)
* [gulp-pleeease: throw "Unknown word”](https://github.com/sindresorhus/gulp-autoprefixer/issues/20)
* [gulpでlivereloadしたい時の書き方 by liion_man44](http://qiita.com/liion_man44/items/9b740aea439ef5643048)

## livereload抜きの単純な例
```bash
$ gulp
```
gulpfile.coffee

```coffeescript
gulp= require 'gulp'
plumber= require 'gulp-plumber'
pleeease= require 'gulp-pleeease'

gulp.task 'coffee',->
  coffee= require 'gulp-coffee'
  gulp.src 'js/*.coffee'
    .pipe plumber()
    .pipe coffee()
    .pipe gulp.dest 'js/index.js'

gulp.task 'scss',->
  sass= require 'gulp-ruby-sass'
  gulp.src 'css/*.scss'
    .pipe plumber()
    .pipe sass({
      style:'nested'
      "sourcemap=none": true
    })
    .pipe pleeease {
      minifier:false
      autoprefixer:
        browsers:
          ['last 2 version']
    }
    .pipe gulp.dest 'css/index.css'

gulp.task 'watch',->
  gulp.watch 'js/*.coffee',['coffee']
  gulp.watch 'css/*.scss',['scss']

  gulp.watch 'gulpfile.coffee',['coffee','scss']

gulp.task 'default',['watch']
```

![スクリーンショット 2014-12-18 1.25.56 PM.png](https://qiita-image-store.s3.amazonaws.com/0/28576/0d728efc-96df-4ecb-94e4-c8ae01f63aea.png)
GLIというツールについてのこと

##GLIとは
Rubyでコマンドラインプログラムを作成する時に使えるツール。

###前提として
コマンドラインプログラムを作る機会はあまりないかもしれない。
基本として、$ プログラム名 でプロンプトから動かすわけだけれど、プログラム名の後に、オプションスイッチ、コマンド、と続けてパラメータを渡して動かすことが多い。

*ここでは、rprog -i hogehoge　とか　rprog -i fugafuga で何かを動作するプログラムを作りたい、という前提でこの後をメモしている。*

##使い方

> gem install gli

でツールをインストールして、

> gli rprog　rpogsrc　hogehoge fugafuga

するとスケルトンが出来上がる。

* ./rpogsrc/ディレクトリが出来ている。
* ./rpogsrcディレクトリ配下に、rmakefile,gemfileが作られる。
* テストコードが作られている
* docファイルのひな型が作られている。

後はここにrbファイル、プログラムファイルを書いていくだけ。

***
require 'gli'
include GLI::App

はARGVの解析などを請け負うライブラリでもあるので、知っておくと色々と便利かもしれない。
dispatch_afterを使って遅延実行する


例えば、画像のダウンロード状況をプログレスで表示していて、プログレスが100%の状態を一定時間ユーザーに見せておきたい場合、以下のように記述します。

※画像のダウンロード処理はSDWebImageを使用しています。

```objective-c:Blocksで遅延実行する

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:photo.imamgeURL
                                                          options:0
                                                         progress:
     ^(NSInteger receivedSize, NSInteger expectedSize) {
         float progress = [@(receivedSize) floatValue]/[@(expectedSize) floatValue];
         progressView.progress = progress;
     } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
         if( error ){
             return;
         }
         
         if( finished ){
         	  //dispatch_afterを使って遅延させる
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
                 [progressView dismiss:YES];
             });
         }
         
     }];

```
RC版のAndroidGradlePluginの指定方法


[公式サイト]()の通り指定すれば、確かに一致するのですが紛らわしかったのでメモしておきます。
AndroidStudio 1.0のリリースに伴って、AndroidGradlePluginも1.0がリリースされました。（正確にはまだRC版ですが）
そのためAndroidStudioさんのlintチェックに従えば、以下のように書くことが推奨されてます。

```groovy:build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}
```

ところが[公式サイト]()のリリースノートを見ると、1.0.0-rcxというバージョンが複数リリースされてます。
これを直接指定したいなーと思って、以下のように書いてみました。

```groovy:build.gradle
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0-rc4'
    }
```

そうするとlintさんが、ちゃんと`1.0.0`って指定してくれとお怒りになるんですよね。赤いアンダーライン付きで。
mavenリポジトリ見てみればいいかと思い、見に行った結果がこれでした。

![スクリーンショット 2014-12-18 11.22.54.png](https://qiita-image-store.s3.amazonaws.com/0/4706/b093e7cf-06d7-92e5-4437-26d6e583765e.png "スクリーンショット 2014-12-18 11.22.54.png")

現場からは以上です。
Lightningコンポーネントを通してiframeをSalesforce1に表示する

LightningコンポーネントはSalesforce1に表示することができます。追加の方法はドキュメントに書いてありますが、下記3ステップですね。

1. aura:componentタグに`implements="force:appHotable"`指定
2. [設定] - [作成] - [タブ] から新規Lightningコンポーネントの追加
3. [設定] - [モバイル管理] - [モバイルナビゲーション]に追加

それではさっそくiframeを足してみましょう。

```xml:cmp
<aura:component implements="force:appHostable">
    <iframe src="https://www.youtube.com/embed/WujFatRR1KA?autoplay=true" />
</aura:component>
```

![IMG_1882.jpg](https://qiita-image-store.s3.amazonaws.com/0/44645/c88b4d46-6aba-de78-38ea-4a5fb4d41eb6.jpeg)
![IMG_1880.jpg](https://qiita-image-store.s3.amazonaws.com/0/44645/c13bd44f-6a4b-c67e-f1ae-e23f7b53d2c6.jpeg)

足せました。簡単でしたね。
JavaScriptでiframeのsrcを動的に変更したりもできますね。Salesforce外のポータルページを見せる時などには使えるでしょうか。

注意事項として、URLによっては"Display forbidden by X-Frame-Options"などと言われてiframe内が表示されないことがあります。
これはアクセス先のURLの設定によるものですので、自分が管理しているサイトであれば、設定を変えましょう。

ちなみに、VisualForceページでiframeを足す時は下記ステップでやると良いみたいですね。
[Adding web tabs to salesforce1](https://success.salesforce.com/answers?id=90630000000hV8jAAE)
[JAWS-UG CLI] 総合案内

```
このページの更新は終了しました。
今後は、 http://jawsug-cli.s3-website-ap-northeast-1.amazonaws.com/ をご参照ください。
```
* JAWS-UG CLI専門支部 総合案内: http://jawsug-cli.s3-website-ap-northeast-1.amazonaws.com/
* 

# JAWS-UG CLI専門支部 とは

AWS CLIを使いこなしたいユーザの集まりです。

日本のAWS公式ユーザコミュニティ JAWS-UG「初の専門支部」(自称)として、2014年7月に立ち上がりました。

現在、隔週月曜日に茅場町(コワーキングスペース 茅場町 Co-Edo)でハンズオンを開催することがメインの活動です。(たまに呑みにも行きます。)

主に運用系エンジニアを対象としたハンズオンになっていますが、運用以外の方でも是非ご参加ください。

「運用のためのAWS」知識や経験の交換をしていきましょう!


# JAWS-UG CLIの参加対象者

次のような方々にとくにお勧めです

* AWS CLIに興味ある
* AWS CLIを使いこなしたい (一緒に議論しましょう)
* AWS CLIを広めたい

JAWS-UG CLI専門支部に参加される方は、JAWS-UGの定める以下の行動規範に則って行動することをお願いいたします。

* JAWS-UG運営 行動規範 - Code of Conduct - https://github.com/jaws-ug/manifesto/blob/master/for-contributors.md

多くの場合、常識的な参加をされていれば問題ありません。


## 参加のお断りおよび登録削除について

JAWS-UGの運営は原則として全ての参加者に開かれています。
しかし、残念なことにその精神から逸脱する人に対して、JAWS-UG CLI専門支部では参加をお断りする場合があります。

特に悪質な以下のような行為(一例です)を過去行ったもしくは現在も行っていると認められる人物については、ご参加をお断りいたします。

* セクハラ行為
* 誹謗中傷
* 差別行為や発言

このような人物がイベントに参加しようとした場合は、予告なくJAWS-UG CLI専門支部が運営するイベントサイト、SNSサイトから登録を削除させていただきます。

相互尊重および互助の精神で運営をするため、ご理解の程よろしくお願いいたします。

# JAWS-UG CLIの対象領域

JAWS-UG CLIは以下を活動の対象領域としています。

* Unified AWS CLI: http://aws.amazon.com/jp/cli/
* AWS API

SDKやIDEは対象外としています。


# JAWS-UG CLIのリソース

イベント情報は http://jawsug-cli.doorkeeper.jp/ を参照してください。
情報交換などは Facebookのグループで行なっています。 ( https://www.facebook.com/groups/jaswug.cli/ )

JAWS-UG公式サイト( http://jaws-ug.jp/bc/cli/ )にもJAWS-UG CLIは掲載されています。

過去のハンズオンは http://qiita.com/tcsh/items/b55eee599ae2c8806e4f に一覧にしてあります。

# JAWS-UG CLIハンズオンの環境

JAWS-UG CLIハンズオンの環境は、参加者が各自ご用意ください。

JAWS-UG CLIハンズオンの各手順は以下の環境を前提としています。


## 利用するシェル環境について

JAWS-UG CLIのハンズオンでは、Amazon Linuxの標準シェルであるbashを前提としてます。

## 利用するAWSアカウントについて

当日利用するAWSアカウントについては、**必ず個人の練習用アカウントを利用**するようにしてください。

### アンチパターン

* 職場で使っているIAMユーザで作業 (特殊な設定の影響を受けるかもしれません...)
* サービス本番環境で作業 (サービスに影響があっても誰も助けてくれません...)

### アカウントの作成時期

2013年12月以前に作成したアカウントの場合、ハンズオンの想定している環境と異なる可能性があります。

以下の症状が見える場合は、新しいアカウントを作成しておきましょう。

* EC2-Classicが見える
* TokyoリージョンでAZ-Bが見える。(ハンズオンでは、AZ-AとAZ-Cが見えることを前提としています。)



## JAWS-UG CLIハンズオンに必要な環境の準備

JAWS-UG CLIハンズオンに参加する前に、必ず以下の手順に従って、必要な環境を準備しておいてください。

https://qiita.com/tcsh/items/b55eee599ae2c8806e4f#%E9%87%8D%E8%A6%81-jaws-ug-cli%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99

# ハンズオンでのよくあるトラブル

* output形式をtextに変更していると、想定の値が取れません。(デフォルトのJSONにしておいてください。)
* かなり古いアカウントだと、想定外の動作をする場合があります。(EC2-Classicが見えるアカウントなど。)


# 注意点 (イベントについて)

* 遅刻早退自由です
* 出席できなくなった場合は当日でも良いので必ずキャンセルをお願いします。
* 貸し切りではないので、周囲ががやがやするかもしれません。
* ネットワークへの接続などITの基礎的な部分は自助でお願いします。


# この記事は

JAWS-UG Advent Calendar 2014 (http://www.adventar.org/calendars/587 )の12/17の記事として書きました。
(只今、US-WEST-2 オレゴンは 2014年12月17日18時19分20秒です。セーフ)

1.7が出るとおもって17日にしたのですが、今日1.6.10が出てました。残念。
tig 2.0.3 用の .tigrc を晒してみる。


## 前置き

git 大好きです。

コマンドラインも大好きです。

なので、Mac でのリポジトリビューワには [tig](http://jonas.nitro.dk/tig/) を使っています。

んで、どこかのバージョンで .tigrc の記法が変わったらしく、色々調べて設定してみたので、その設定を晒してみる。

## 晒す

```conf:.tigrc
set line-graphics = utf-8       # グラフ描画時の種別
set tab-size = 8                # TAB 文字の表示幅
set ignore-space = all          # 空白無視
set split-view-width = 75%      # 垂直分割時の比率

# メインビューの表示設定
set main-view = id:yes date:local author:full commit-title:graph=yes,refs=yes

# ステータスビューで V 押下すると、差分表示モードでコミットログ入力画面を開く
bind status V !git commit -v
```

## 解説

詳しい内容は [tigrc (5)](http://jonas.nitro.dk/tig/tigrc.5.html) を参照のコト。

* 1 行目
	* リビジョンツリーの記号を Unicode 文字で表示する。
	* Terminal.app の設定として "Unicode 東アジアA (曖昧) の文字幅を W (広) にする" のチェックを外しているので、utf-8 モードにしてもきれいに表示されます。<br />![スクリーンショット 2014-12-18 10.58.24.png](https://qiita-image-store.s3.amazonaws.com/0/33086/2cc2ec00-3e89-e161-be0a-5831682f133d.png "スクリーンショット 2014-12-18 10.58.24.png")

* 2 行目
	* 4桁ソフトインデント派なので、タブ文字を敢えて8桁で表示して区別する。
* 3 行目
	* 空白の差分は無視する。
* 4 行目
	* iMac Retina 5K を使っており画面が広いので、Diff などの表示は垂直分割してくれるため、右側を広めにとる。
* 7 行目
	* メインビューの表示方法を設定。
	* `set main-view = ...` でメインビューの表示内容や表示順を制御。
	* イコールの右辺として、表示内容を表示したい順に記述。
	* 個人的な好みの問題で、id date author commit-title の順で表示。
	* commit-title は一番最後にする必要があるらしい。
* 10 行目
	* ステータスビューで Shift + v を押下するコトで、差分を表示しつつコミットコメントを入力できるようにする。

最初 `set main-view = ...` の箇所の設定方法が謎で、ちょっと時間掛かったけど、満足のいく表示にできた。
1分もかからずキャッシュカードのセキュリティを向上させる(?)

今日は18日ですが、[1分で実現できる有用な技術 Advent Calendar 2014](http://qiita.com/advent-calendar/2014/one-minute) の7日目が空いていたので勢いで書いちゃいます。


# 概要
クレジットカードのセキュリティをちょっとした方法でアップさせる?

# やりかた

## 準備するもの

- クレジットカード
- マジック（色は任意）

## まずクレジットカードを用意する

![card-origin.jpg](https://qiita-image-store.s3.amazonaws.com/0/28681/7bc47e73-9da0-0aa8-cf5b-76ec8b1eae70.jpeg)
こんなのが皆さんの財布に入ってますね？

## マジックでカードに4桁の番号を書く
![card-img.jpg](https://qiita-image-store.s3.amazonaws.com/0/28681/026a6320-0fe4-1fab-a9ea-716d93beeb5e.jpeg)
こんなかんじです。
財布に免許証などが一緒に入っている場合、生年月日となる数字だとなおセキュアになりそうな予感がします（!?）

## できあがり。
悪人さんはクレジットカードに生年月日っぽい番号が書いてあった場合、おそらくATMにコレを打ち込まない人はいないでしょう！！
打ち込まれればしめたもの！
残りのチャレンジは2回となりますので、暗証番号を当てられる確率がグッと下がりますね！！

# 注意
正直に本当の暗証番号は書いてはダメです！←アタリマエ
3回間違うとロックされる想定で書いてます。
用法・用量をまもってご利用ください。

**なお、利用の結果生じた損害について、私は一切責任を負いません**
zshで過去に切り取った（コピーした）文字列をペーストする

この記事は[zsh Advent Calendar 2014 - Qiita](http://qiita.com/advent-calendar/2014/zsh)の18日目のエントリです。

zshで`control-w`(カーソル左の単語切り取り), `control-u`(一行切り取り), `control-k`(カーソルから行末まで切り取り), `meta-d`(カーソル右の単語切り取り)等で切り取った文字列は`control-y`でペースト出来ます。
で、`control-y`だと直前に切り取ったものしかペースト出来ませんが、`meta-y`でそれ以前に切り取った文字列をペーストすることが出来ます（`meta-y`は「escape押してy」の意味）

使い方は、`control-y`で直前に切り取った文字列をペーストしてから`meta-y`すると、`control-y`でペーストした文字列がその1回前に切り取った文字列に置き換わります。あとは`meta-y`押す度にその前に切り取った文字列で置き換えすることが出来ます。

と文字で説明しても分かりづらいので、gif動画にするとこんな感じ。

![yank-pop.gif](https://qiita-image-store.s3.amazonaws.com/0/94/03f0bf90-4422-69af-a9ee-f07ec3552c38.gif)

ここでは`1`,`22`,`333`,`4444`を順番に切り取ってから、`control-y`,`meta-y`,`meta-y`,`meta-y`...と入力してます。`control-y`で`4444`をペーストして、`meta-y`を押すたび`333`,`22`,`1`と置き換えていって、その次が`4444`に戻って、という感じです。

この「過去に切り取った文字列」は8個まで記憶してます。

`meta-y`は`control-y`の後に続けて使わないと動かないので注意。

個人的には、文字列を切り取る→過去のコマンド検索→見つけたコマンドと切り取った文字列を組みわせてコマンド作る、ということをよくやるんですが、組み合わせるときに下手に`control-w`とかすると最初に切り取った文字列が使えなくなっちゃうので1文字ずつ消す、ということをしてました。`meta-y`を知ってからそういうのを気にしなくて良くなったのでかなり重宝してます。
vimで開いたら行末に^Mと表示された時の対処法

細かい設定してないvimでcrlfなファイルを開くと行末に^Mとか出て鬱陶しいと思います。
改行コードを変更してもいいけど、しないでおきたいときの対応方法

以下のExコマンドを実行

``` vim
:e ++ff=dos
```

戻したい場合は

``` vim
:e ++ff=unix
```
AWS Lambda と戯れた日々

きっかけ
---

数ヶ月前に尊敬するパイセンから Python をお勧めされたので、最近 Python であれこれ作っています。

最初に以下のような動画トランスコードの流れを作りました。 Python と boto は楽でいいですね。一言でいうと「Python は私をクリアに保ってくれる...」という感じです。

![Untitled (1).png](https://qiita-image-store.s3.amazonaws.com/0/50554/95b6593a-8a38-4973-f0ff-5fe638f53242.png)

AWS Pipeline で時間を見てジョブを実行していたのですが、バケットにファイルを投入するタイミングとエンコードの終了のタイミングとジョブ開始時間の調整が難しくて、気がつくとたまにジョブがこけてることが...

この際なので EC2 上で動かしていた Python のスクリプトをさっくりと AWS Lambda に置き換えようと思いました。上の図の EC2 と Data Pipeline を Lambda に切り替えるイメージです。

しかし結構土俵が違うというか、いろんなことが一筋縄では行かなかったのでメモしておこうと思います。

EC2 上との違い
---
1. Python2.6 の site-package は入ってるけど Python2.7 の site-package がない（2.6が入っていることだけでもありがたいと思うべきか...）
2. aws cli は入ってない
3. 外部コマンドとして呼び出されたスクリプトには "lambda_exec_role" で定義したロールの権限がつかない
4. パスが通ってないところがある

どう対応したか
---
1. 仕方ないので Python2.6 ベースに書き直した （例: subprocess.check_output とか使ってしまっていたので subprocess.Popen に修正など...）
2. 一部手抜きで aws cli 呼び出してごまかしていたところを直した（ぉぃ）
3. 必要な権限だけつけた user の credentials を export コマンドでセットしてからスクリプトを実行（結構無理矢理感があるので真似しない方がいいかもしれません...）
4. なるべく絶対パスで記述

```lang.filename
exports.handler = function(event, context) {
    var exec = require('child_process').exec;
    
    var cmd = "export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX;export AWS_SECRET_ACCESS_KEY=XXXX;unset AWS_SESSION_TOKEN;curl -s http://xxxxxx.s3.amazonaws.com/sns_notification_bl.py > /tmp/sns_notification_bl.py;chmod 755 /tmp/sns_notification_bl.py;python26 /tmp/sns_notification_bl.py"
    var child = exec(cmd, function(error, stdout, stderr) {
        if (!error) {
            console.log('standard out: ' + stdout);
            console.log('standard error: ' + stderr);
            context.done();
        } else {
            console.log("error code: " + error.code + ", err: " + error);
            context.done(error,'lambda');
        }
    });
};
```

ここまでやるなら JavaScript/Node.js で書けばと言われそうですが...

まとめ
---
紆余曲折ありましたが、ファイルをバケットに入れてから通知までするするとワンストップで行けるようになりました。そしてなんとなく Lambda が可愛く思えて来ました。とある巨匠の「こう見えても、僕、テクノロジー的には○リコンなんですよ」という言葉の意味が見えてきた気がしました。

**免責
こちらは個人の意見で、所属する企業や団体は関係ありません。
パイセンや巨匠はフィクションです。**
Firefoxではcanvas上でフォントの斜体が効かない


厳密には、フォントファイルに斜体のものが含まれていない場合、斜体を描画しない。
一方でその他のブラウザでは、斜体をブラウザ上で擬似的にレンダリングする。(つまり実際にデザインされた斜体ではない)

Firefoxはとことん仕様に愚直なブラウザーだ。
git rebase -iしない

Gitで過去のコミットを改変する際にはgit rebase -iを用いるのが一般的ですが、私はささいな変更のとき以外は使いません。git rebase -iを使うと、--continueしてconflictが多発したときに、よくわからなくなって--abortしたくなるからです。

私が過去のコミットを改変するときは、まずそのコミットからブランチを作ります。たとえば、以下の履歴でBを改変するときは、まずgit checkout -b rebase/b Bとしてブランチを作ります。

```
A-B-C-D-E develop
```

```
rebase/b
  ↓
A-B-C-D-E develop
```

Bを修正してgit add; git commit --amendします。

```
  B' rebase/b
 /
A-B-C-D-E develop
```
次に、B'にC-D-Eをつなげていきます。conflictしそうにないときは、git rebase --onto rebase/b B developで一気につなげます。

```
A-B'-C'-D'-E' rebase/b develop
```

rebase中によくわからなくなりそうなときは、cherry-pickで一つずつつなげます。git cherry-pick Cすると以下のようになります。conflictしたら直してください。

```
A-B'-C' rebase/b
\
 B-C-D-E develop
```

続いてgit cherry-pick Dします。

```
A-B'-C'-D' rebase/b
\
 B-C-D-E develop
```

残りはEだけなのでrebaseします。git rebase --onto rebase/B D developとすると以下のようになります。これで完成です。

```
A-B'-C'-D'-E' rebase/b develop
```

そもそも、rebase中によくわからなくなりそうなほど、古いコミットを大きく書き換えるのが悪いのですが、そういうときでもこの手順ならうまく処理できると思います。