OmniAICreator/Qiita-1.07M huggingface dataset:
その変数には何が入っている(Pythonスクリプトの動作時)

Pythonのスクリプトを理解する手っ取り早い方法は、サンプルプログラムを動かしてみることである。

関数の引数や戻り値の意味するものがすぐにはわからなくても、Pythonの統合環境Spyderならば、すぐに変数とデータの種類、その値とを見ることができる。

`if __name__ == '__main__'`:
のブロックの中に出てきた変数は、このブロックが実行され終わってもPythonインタプリタ上に変数が残っている。

そのため、その変数をインタプリタ上でprintすれば値に参照できる。

それどころか、Spyder統合環境ではVariable Explorerを表示させるとインタプリタのメモリ上にある全ての変数のtype, size, valueが表示される。
arrayからなるリストのようなデータ構造でも表示される。

import pylab
とした後に
pylab.imshow(img)
あるいは、次のようにする。
import matplotlib.pyplot as plt
plt.imshow(img)

（たとえば、ステレオ画像から視差画像を得たときに、アルゴリズムによっては視差の値が整数だし、別のアルゴリズムでは浮動小数点になる。あるアルゴリズムでは、ちょうど良い初期値のときにはうまくいくが、別の初期値ではうまくいかない。そういったことが試してみればわかる。）

とSpyderのIPythonコンソールに打ち込むことで
オリジナルのスクリプトに手を加えることなしに動作後の変数について、それが画像ならば画像として表示させることもできます。

Pythonでは
出力 = 関数(入力の引数)
なので、データの依存性がわかりやすいこととあわせて
アルゴリズムの理解に向いています。
スクリプト言語なので、実行させたスクリプトと実行結果に乖離を生じない点も
アルゴリズムの理解に向いています。

OpenCVのC++のサンプルプログラムを動かしてみるよりは、
まずはOpenCVのPythonでのサンプルを動かしてみるのがお勧めです。
そして、モジュールの関数の入出力を理解したときには、
モジュールのC++のソースコードを読むのがいいと思っています。


まとめ
・Spyder統合環境のVariableExplorerで変数の型、大きさ、値が確認できる。
・スクリプトの実行後にインタプリタ上に変数が残っている時には、
　IPythonのコンソール上で
　import matplotlib.pyplot as plt
　plt.imshow(img)
として値の確認ができる。
【SpriteStudio】アニメーションGIF作成チュートリアル

アニメーション制作ツールにSpriteStudioを使用しているのですが、7月13日のアップデート（Version 5.5.0.5720）でアニメーションGIFの出力機能が追加されました。

というわけで、やってみました。

<a href="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/kame_m.gif" target="_blank"><img src="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/kame_m.gif" alt="「UMA（仮）」出演予定のメロンパンカメ氏。 イラストは、友達のしまんだに描いてもらっています。" class="size-full wp-image-486" /></a>
「UMA（仮）」出演予定のメロンパンカメ氏。
イラストは、友達のしまんだに描いてもらっています。


<h2>手順</h2>

1.SpriteStudioでアニメーションを作成します。

<a href="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/sprite-studio_gif.png" target="_blank"><img src="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/sprite-studio_gif.png" alt="アニメーションGIFファイルが出力されました。" class="alignnone size-full wp-image-489" /></a>

2.[アニメーション] > [レンダリング]
3.「レンダリング設定」ウィンドウが開く
4.[アニメーションGIFで出力]をクリック
5.[OK]をクリック

<a href="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/kame_gif.png" target="_blank"><img src="http://www.get-hack.info/blog/wp/wp-content/uploads/2015/08/kame_gif.png" alt="kame_gif" class="alignnone size-full wp-image-490" /></a>

6.アニメーションGIFファイルが出力されました。

めでたしめでたし。
MAMPにmongo.soがうまく入らない時

# ドライバをいれようとするとapiバージョンが合わないとエラー



```sh
$ PHP Warning:  PHP Startup: mongo: Unable to initialize module
Module compiled with module API=20100525
PHP    compiled with module API=20121212
These options need to match
 in Unknown on line 0
```

# brewで無事有効なmongo.soが作れました(php5.5.xの場合)
```shell-session
brew install homebrew/php/php55-mongo
```


php5.5.x以外の場合は検索してインストールする

```shell-session
brew search php
```
【Visual Studio】静的コード分析をしてみる

Visual Studio 2010まではUltimate Editionにしかなかったんですが、2012以降はProfessional Editionでも使えるようになりました。

# 使い方

## その1

ツールバーの[ビルド] → [ソリューションでコード分析を実行]

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/c7f77f5c-1bd0-940b-a86c-de0af17277e6.png)

## その2

[コード分析]ウィンドウ → [解析] → [ソリューション]

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/5f3998c9-3271-c405-68cb-9f7b09baaf2f.png)

※プロジェクト単位の分析も可能

## その3 (単一プロジェクトのみ)

[ソリューションエクスプローラー] → プロジェクト右クリック → [解析] → [コード分析の実行]

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/4ccf96ba-620c-65e7-562e-ed4af2ce3dd3.png)

# 分析の実行と結果

## 分析内容の設定

何をどう分析するかはプロジェクトファイル単位で設定できます。

[ソリューションエクスプローラー] → プロジェクト右クリック → [プロパティ] → [コード分析]タブ

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/0435645d-15bb-a421-b3cc-af18bb4a0bfd.png)

## 分析結果

デフォルトの設定で以下のようなコードを分析した場合、

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/10895222-38f5-0dd8-33bd-89e1647cc4ab.png)

以下の分析結果が得られます。

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/03adf91d-fee5-2775-7748-fb3846dc8c84.png)

一つ目はSQLインジェクションの可能性を、二つ目はDisposableなオブジェクトが2回廃棄されていることを指摘してくれています。

# まとめ

Visual Studioのコード分析はReSharperのCode Issuesには上がってこないようなものも上がってくるので、1回くらいは試してみてはいかがでしょうか。
【SQL Server】テーブルやカラムの説明を設定し、取得してみる

SQL Serverではテーブルやカラムに説明を付けることができます。

## 設定方法

### テーブル

① [オブジェクトエクスプローラー] →　対象のテーブルを選択して[右クリック] → [プロパティ] → [拡張プロパティ]

② [名前]にMS_Description、[値]に付けたい説明を入力。

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/c7c9552a-852d-9188-6f9b-1b7d9525e041.png)

### カラム

① [オブジェクトエクスプローラー] →　対象のテーブルを選択して[右クリック] → [デザイナ] → 対象のカラムを選択

② [列のプロパティ]の下のほうにある[説明]の項目に付けたい説明を入力。

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/37f5a1b1-f5b0-04d8-cc9f-7a6decd2fbf1.png)

※上記方法以外にもオブジェクトエクスプローラーの列フォルダ内からプロパティで設定することも出来ます。そのときはテーブルの設定方法と同じです。

## 取得方法

```sql
--テーブルの説明
SELECT
	t.name AS 'TableName',
	ep.value AS 'PropertyValue'
FROM
	sys.tables t
INNER JOIN
	sys.extended_properties ep
	ON
		ep.major_id = t.object_id
		AND
		ep.minor_id = 0
WHERE
	ep.name LIKE 'MS_Description'

--カラムの説明
SELECT
	t.name AS 'TableName',
	c.name AS 'ColumnName',
	ep.name AS 'PropertyName',
	ep.value AS 'PropertyValue'
FROM
	sys.tables t
INNER JOIN
	sys.columns c
	ON
		c.object_id = t.object_id
INNER JOIN
	sys.extended_properties ep
	ON
		ep.major_id = c.object_id
		AND
		ep.minor_id = c.column_id
WHERE
	ep.name LIKE 'MS_Description'
```

## 補足

この説明というプロパティ、どうもSQL Serverの拡張プロパティの機能の一部らしく、説明以外にも色々なプロパティを設定することができます。
(独自の項目を設定することも可能な模様。)

他の拡張プロパティを取得するときは、上記のSQLのWHERE句を消せば他のプロパティを取得することが出来ます。
【ASP.NET】HTTPレスポンスヘッダーからASP.NET/IISの情報を削除する

# HTTPレスポンスヘッダーに出力される情報

ASP.NETアプリケーションを普通に開発や運用していて、ブラウザの開発者ツールでネットワーク周りを見ていると、
HTTPレスポンスヘッダーに以下のような情報が出力されていることが確認できます。

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/e7d7002d-f317-8c33-e808-fa5a5cbf4aea.png)

ServerやX-AspNet-Version、X-AspNetMvc-Version、X-Powerd-Byといった要素に、ASP.NETやIISを使っていること、またはそのバージョンが出力されています。

別に問題ないといえば問題ないんですが、何となく何のサーバー使ってて何のWebフレームワークで開発しているのかをオープンにしたくない場合、
これらの情報をサーバーサイドで削除することができます。

# 削除方法

### Server

Global.asaxに以下の処理を追記します。
リクエストのパイプライン上であれば、どのイベントでも大丈夫なようです。

```csharp
Response.Headers.Remove("Server");
```

### X-AspNet-Version

Web.configでsystem.Webセクション内のhttpRuntime要素でenableVersionHeaderプロパティをfalseに設定します。

```xml
<system.web>
    …
    <httpRuntime … enableVersionHeader="false" />
    …
</system.web>
```

### X-AspNet-Mvc-Version

Global.asaxに以下の処理を追記すると削除されます。
これもリクエストのパイプライン上であれば、どのイベントでも大丈夫なようです。

```csharp
MvcHandler.DisableMvcResponseHeader = true;
```

### X-Powered-By

Web.config内でsystem.webServerセクション内のhttpProtocol要素にあるcustomHeaders要素からX-Powered-Byを削除します。
removeでなくclearでも大丈夫ですが、余計なものまで消されて何かが動かなくなる可能性はあります。

```xml
<system.webServer>
    …
    <httpProtocol>
        <customHeaders>
            <remove name="X-Powered-By" />
        </customHeaders>
    </httpProtocol>
    …
</system.webServer>
```

# 結果

上記の設定を全て行った後に、もう一度開発者ツールを使用すると以下のようになります。

![image](https://qiita-image-store.s3.amazonaws.com/1251/51653/79c09e59-e620-fef3-0340-750d1b6870aa.png)

Microsoftプラットフォームのアプリだとバレずに済みますね！
WPFでWindowとかUserControlエレメントでStaticResourceを呼ぶとエラーになった

なんかエラー出てはまったので

こんなViewModelがあるとして

```csharp
    public class MainVM : BindableBase
    {
        private string _Title;
        public string Titile
        {
            get { return _Title; }
            set { SetProperty(ref _Title, value); }
        }

        private bool _IsVisible;
        public bool IsVisible
        {
            get { return _IsVisible; }
            set { SetProperty(ref _IsVisible, value); }
        }

    }
```

こんなXamlだとする。

```xml
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Height="350" Width="525" 
        Title="{Binding Title}" 
        Visibility="{Binding Path=IsVisible,Converter={StaticResource bvConv}}">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="bvConv" />
    </Window.Resources>
    <Grid>
        
    </Grid>
</Window>
```

![エラー](https://qiita-image-store.s3.amazonaws.com/0/72379/8e38e5ef-2dbb-4f37-bdcc-14ea173df463.png)


ぎゃ～～( ;∀;)

```xml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Height="350" Width="525" 
        Title="{Binding Title}">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="bvConv" />
    </Window.Resources>
    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Setter Property="Visibility" Value="{Binding Path=IsVisible,Converter={StaticResource bvConv}}" />
        </Style>
    </Window.Style>
    <Grid>
        
    </Grid>
</Window>
```


でオッケー(^^)/
[お洒落アイコン簡単設置]Font AwesomeをAndroidで使う方法[初心者用]



とても簡単にイケてるシンプルなアイコンを使ってみました。
Web制作のときにお世話になりまくりのFont Awesomeです。

初心者趣味プログラマーなのでツッコミどころ満載だと思うので
容赦ないツッコミよろしくお願いします

わかりにくい。
ここは良くない等の指摘は大歓迎です。
ガンガンコメントください。



##android-iconifyを使う
https://github.com/JoanZapata/android-iconify

##gradle
compile 'com.joanzapata.android:android-iconify:1.0.10'

#↓最小限のサンプル↓

##layoutのactivity_main.xmlで使ってみる
```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <IconTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:shadowColor="#22000000"
        android:shadowDx="3"
        android:shadowDy="3"
        android:shadowRadius="1"
        android:text="{fa-android} Android"
        android:textSize="45dp"
        android:textColor="#FF33B5E5" />

</RelativeLayout>
```

##ActionBarで使ってみる


```
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        MenuItem actionItem = menu.add("man");
        Drawable aboutDrawable = new IconDrawable(this, Iconify.IconValue.fa_male)
                .colorRes(R.color.blue)
                .actionBarSize();
        actionItem.setIcon(aboutDrawable);
        actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        return true;
    }
```

##少しでもここは直すべきと思うことあれば...
もし時間あって気が向いた時にでも
コメントで指摘してもらえたら嬉しいです。
テックブログのフィード一覧


テックブログ更新をIFを使って通知したりしているのですが，フィードURLが公開されていないブログもあり，探すのが少し面倒だったのでフィードメモ。

ちなみに，CAREER HACKさんの[成長志向のエンジニアならブックマークすべきテックブログまとめ](http://careerhack.en-japan.com/report/detail/323)に記載されている一覧がベースです。

### 国内企業

|ブログ|フィードURL|備考|
|:-:|:-:|:-:|
|[Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/)|http://feeds.feedburner.com/AmazonWebServicesBlogJp?format=xml||
|[Mercari Engineering Blog](http://tech.mercari.com/)|http://tech.mercari.com/rss||
|[さくらのナレッジ](http://knowledge.sakura.ad.jp/)|http://knowledge.sakura.ad.jp/feed/||
|[インフラエンジニアWay（ハートビーツ）](http://heartbeats.jp/hbblog/)|http://heartbeats.jp/hbblog/atom.xml||
|[DSAS開発者の部屋（KLab）](http://dsas.blog.klab.org)|http://dsas.blog.klab.org/index.rdf||
|[VOYAGE GROUP techlog](http://techlog.voyagegroup.com)|http://techlog.voyagegroup.com/rss||
|[Google Japan Developer Relations Blog](http://googledevjp.blogspot.jp/)|http://feeds.feedburner.com/GoogleJapanDeveloperRelationsBlog?format=xml||
|[LINE Engineers' Blog](https://engineering.linecorp.com/ja/blog/)|https://engineering.linecorp.com/ja/feed/||
|[DeNA Engineers' Blog](https://engineer.dena.com/)|https://engineer.dena.com/index.xml||
|[GREE Engineer's Blog](http://labs.gree.jp/blog/)|http://labs.gree.jp/blog/feed/||
|[CyberAgent Developers Blog](https://developers.cyberagent.co.jp/blog/)|https://developers.cyberagent.co.jp/blog/feed/||
|[クックパッド開発者ブログ](http://techlife.cookpad.com/)|http://techlife.cookpad.com/rss||
|[はてな開発者ブログ](http://developer.hatenastaff.com/)|http://developer.hatenastaff.com/rss||
|[Developers.IO（クラスメソッド）](http://dev.classmethod.jp/)|http://dev.classmethod.jp/feed/||
|[mixi developers](https://medium.com/mixi-developers)|https://medium.com/feed/mixi-developers||
|[Septeni EngineerBlog](http://labs.septeni.co.jp/)|http://labs.septeni.co.jp/rss||
|[GMO MEDIA CREATOR BLOG](https://blog.gmo.media/)|https://blog.gmo.media/feed/||
|[ヌーラボ](http://nulab-inc.com/ja/blog/)|http://nulab-inc.com/ja/feed/||
|[シナジーマーケティング（TECH SCORE）](http://www.techscore.com/blog/)|http://www.techscore.com/blog/feed/||
|[Yahoo! JAPAN Tech Blog](http://techblog.yahoo.co.jp/)|http://techblog.yahoo.co.jp/atom.xml|2015/10/19追記|
|[Wantedly Engineer Blog](https://www.wantedly.com/feed/s/wantedly_engineers)|http://engineer.wantedly.com/feed|2015/10/19追記|
便利なCASE文

条件分岐の際にとっても便利なので簡単なサンプルを利用してメモ

## CASE文の書式

※ 各分岐が返すデータ型を統一し、ELSEを必ず入れる
<pre>
-- 単純 CASE式
CASE sex
  WHEN '1' THEN '男'
  WHEN '2' THEN '女'
ELSE 'その他' END

-- 検索 CASE式
CASE WHEN sex = '1' THEN '男'
     WHEN sex = '2' THEN '女'
ELSE 'その他' END
</pre>


## 例１）下記の体系を新しい体系へ変換

以下のテーブルがあったとして(ノーマルテーブル)

|県名|人口|
|:---|---:|
|青森|200|
|秋田|600|
|山形|500|
|岩手|300|
|東京|200|
|茨城|100|
|徳島|100|
|愛媛|400|
|香川|500|
|高知|200|

集計結果を以下のようにしたい

|地域名|人口|
|:---|---:|
|東北|1600|
|四国|1200|
|その他|300|

<pre>
SELECT CASE 県名
  WHEN '青森' THEN '東北'
  WHEN '岩手' THEN '東北'
  WHEN '秋田' THEN '東北'
  WHEN '山形' THEN '東北'
  WHEN '徳島' THEN '四国'
  WHEN '愛媛' THEN '四国'
  WHEN '香川' THEN '四国'
  WHEN '高知' THEN '四国'
ELSE 'その他' END AS distinct,
SUM(人口)
FROM ノーマルテーブル
GROUP BY CASE 県名
  WHEN '青森' THEN '東北'
  WHEN '岩手' THEN '東北'
  WHEN '秋田' THEN '東北'
  WHEN '山形' THEN '東北'
  WHEN '徳島' THEN '四国'
  WHEN '愛媛' THEN '四国'
  WHEN '香川' THEN '四国'
  WHEN '高知' THEN '四国'
ELSE 'その他' END;
</pre>

※ SELECT分をコピーするという事が大事！

## 例２）UPDATE - id（主キー）1と2を入れ替える -

サンプルテーブル

|id|value1|value2|
|:--|:---|:---|
|1|a|あ|
|2|b|い|
|3|c|い|

下記の様にするのもいいが３回実行するのは無駄
<pre>
-- 1. id(1)の値を4へ
UPDATE サンプルテーブル
  SET id = '4'
  WHERE id = '1';
-- 1. id(2)の値を1へ
UPDATE サンプルテーブル
  SET id = '1'
  WHERE id = '2';
-- 1. id(4)の値を2へ
UPDATE サンプルテーブル
  SET id = '2'
  WHERE id = '4';
</pre>

CASE式で
<pre>
UPDATE サンプルテーブル
  SET id = CASE 
           WHEN id = '1' THEN '2'
           WHEN id = '2' THEN '1'
           ELSE id END
  WHERE id IN ('1', '2');
</pre>

## 例３）テーブル同士のマッチング

TEAM_MST

| ID| TEAM_NAME |
|:--|:----------|
| 1 | 赤坂ライオンズ |
| 2 | 大門ジャイアンツ |
| 3 | 田町イーグルス |
| 4 | 六本木ロッカーズ |

SCHEDULES

| MONTH| TEAM_ID |
|:-----|:--------|
| 201507 |  1|
| 201507 |  3|
| 201507 |  4|
| 201508 |  4|
| 201509 |  2|
| 201509 |  4|


<pre>
TEAM_NAME        ７月  8月  9月
---------        ---- ---- ----
赤坂ライオンズ     勝　　負　　負
大門ジャイアンツ   負　　負　　勝
田町イーグルス     勝　　負　　負
六本木ロッカーズ   勝　　勝　　勝
</pre>

上記のように勝ち負けを表にしたい時

<pre>
SELECT A.TEAM_NAME,
       CASE
       WHEN EXISTS
         (SELECT TEAM_ID FROM SCHEDULES B
            WHERE MONTH = 201507
              AND B.TEAM_ID = A.TEAM_ID) THEN '勝'
       ELSE '負' END AS '7月',
       WHEN EXISTS
         (SELECT TEAM_ID FROM SCHEDULES B
            WHERE MONTH = 201508
              AND B.TEAM_ID = A.TEAM_ID) THEN '勝'
       ELSE '負' END AS '8月',
       WHEN EXISTS
         (SELECT TEAM_ID FROM SCHEDULES B
            WHERE MONTH = 201509
               AND B.TEAM_ID = A.TEAM_ID) THEN '勝'
       ELSE '負' END AS '9月'
     FROM TEAM_MST A;
</pre>

INでも実装可能だがINとEXISTSで迷ったらEXSITSのパフォーマンスは良いらしい。
サブクエリで主キーのインデックスを利用できる為
条件分岐中にechoは使えない

でもprintは使える。

```php
<?php
	for($i=0;$i++<10;echo  $i); // Parse error: syntax error, unexpected 'echo'
	for($i=0;$i++<10;print $i); // 12345678910

	while($i++<10 && echo  $i); // Parse error: syntax error, unexpected 'echo'
	while($i++<10 && print $i); // 12345678910

	if(echo  $i=1); // Parse error: syntax error, unexpected 'echo'
	if(print $i=1); // 1

	switch(echo  $i=1){} // Parse error: syntax error, unexpected 'echo'
	switch(print $i=1){} // 1

	switch($i=1){
		case echo  $i; // Parse error: syntax error, unexpected 'echo'
	}
	switch($i=1){
		case print $i; // 1
	}

	$i = echo  1 ? true : false; // Parse error: syntax error, unexpected 'echo'
	$i = print 1 ? true : false; // 1
	echo 1 ? true : false; // 1 代入しなければ動く

	$i = echo  1 <=> 1; // Parse error: syntax error, unexpected 'echo'
	$i = print 1 <=> 1; // 1
```

なぜなのか。
DatadogのAmazon Web Services Integrationを使った際に課金対象EC2インスタンスを制限する方法


FAQ化しているネタなので、Qiita上に公開しておきます。

Datadogの"Amazon Web Services Integration”の設定画面をよく見ると、AWS credentailsの入力欄の下に`Limit metric collection for all accounts`と言う項目があります。この部分をクリクすると、EC2につけたタグに基づいて **メトリクス収集するEC2の制限をする** ための設定用入力欄が表示されます。

`By Hosts and Tags`という項目の下のプルダウンメニューを開いて`Limit to hosts`を選択すると、下記のようにタグの入力欄が表示されます。

ここにEC2インスタンス側で事前に設定した任意のタグを入力(簡易な正規表現の利用可)をすると、そのタグの条件に基づいたEC2インスタンスの情報のみが収集されるようになり、課金対象が制限できるようになっています。

テスト環境と実運用環境などが同じAWSのアカウント上で構築されている場合、実運用環境のみをDatadogの監視対象にする場合に活用できると思います。


![screenshot-app.datadoghq.com 2015-08-04 19-36-05.png](https://qiita-image-store.s3.amazonaws.com/0/53101/c8f7c821-20cd-4359-8f1e-d8a45ceadca3.png "screenshot-app.datadoghq.com 2015-08-04 19-36-05.png")


一部のEC2のみをDatadogで監視するには、非常に便利な機能だと思います。
Laravelでcsvファイルからデータを一括で取り込む

## 概要
Laravelプロダクトで大量の初期データを流し込む必要があったので、その備忘録です。
csvファイルをパースするために、[goodby/csv](https://github.com/goodby/csv) を使用しています。

### composerからライブラリを取り込む
composer.jsonに追記

```json:composer.json
"require-dev": {
    ~~~,
    "goodby/csv": "1.2.0",
}
```

```bash:いつものやつ
$ composer update
```

### 流し込むためのクラス生成
今回はLaravelのSeederクラスを使ってインポートしました。

```php:app/database/seeds/InitialExampleDataSeeder.php
<?php

use Goodby\CSV\Import\Standard\Lexer;
use Goodby\CSV\Import\Standard\Interpreter;
use Goodby\CSV\Import\Standard\LexerConfig;

class InitialExampleDataSeeder extends Seeder
{
    const CSV_FILENAME = 'path/to/file';

    public function run()
    {
        $this->command->info('[Start] import data.');

        $config = new LexerConfig();
        // セパレーター指定、"\t"を指定すればtsvファイルとかも取り込めます
        $config->setDelimiter(",");
        $lexer = new Lexer($config);
        $interpreter = new Interpreter();
        $interpreter->addObserver(function(array $row) {
            // 各列のデータを取得
            $first = $row[0];
            $second = $row[1];

            // 登録処理をここに書く
        });

        $lexer->parse(app_path() . self::CSV_FILENAME, $interpreter);

        $this->command->info('[End] import data.');
    }
}
```


### Seeder実行

```bash
$ php artisan db:seed --class=InitialExampleDataSeeder
```
意識低い感じで Elasticsearch に Wikipedia のデータを流し込む

**！！！この記事はもう古いので現代ではもう通用しません！[新しいやり方](https://qiita.com/maitake9116/items/7138f407bfc8536ba507)を載せている人がいるので、そちらを参考にしてください！！！**


Wikipedia のデータをお手軽に Elasticsearch に流し込む手順です。

## Wikipedia 記事データのダウンロード

http://dumps.wikimedia.org/backup-index.html からリンクをたどると pages-articles.xml.bz2 というファイルをダウンロードできる。
日本語版だったら jawiki.

ここでは jawiki の 20150602 のデータを使う。

```bash

$ wget http://dumps.wikimedia.org/jawiki/20150602/jawiki-20150602-pages-articles.xml.bz2
```

ダウンロード完了まで時間かかるからその間に並行して elasticsearch のインストールとかするとよさそう。

## elasticsearch 関係のインストール

### 本体

```bash

$ brew install elasticsearch
```

ここでは Mac 環境なので Homebrew でいれてます。

### elasticsearch-head

http://mobz.github.io/elasticsearch-head/
elasticsearch の Web フロントエンド。入れると http://localhost:9200/_plugin/head/ でブラウザからいろいろできる。

```bash

$ /usr/local/Cellar/elasticsearch/*/libexec/bin/plugin install mobz/elasticsearch-head
```

### stream2es

https://github.com/elastic/stream2es
ストリームで elasticsearch にデータを流し込むのが簡単になるもの。

```bash

$ curl -O download.elasticsearch.org/stream2es/stream2es
$ chmod +x stream2es
$ mv stream2es /usr/local/bin/
```

## インデックスをつくる

n-gram で検索したいので analyzer と mapping をここで定義。
ここでは 1-3 gram にしてる。

```bash

curl -XPUT 'localhost:9200/wiki' -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "ngram": {
          "filter": [
            "cjk_width",
            "lowercase"
          ],
          "char_filter": [
            "html_strip"
          ],
          "type": "custom",
          "tokenizer": "ngram"
        }
      },
      "tokenizer": {
        "ngram": {
          "token_chars": [
            "letter",
            "digit"
          ],
          "min_gram": "1",
          "type": "nGram",
          "max_gram": "3"
        }
      }
    }
  },
  "mappings": {
    "page": {
      "properties": {
        "redirect": {
          "type": "boolean"
        },
        "special": {
          "type": "boolean"
        },
        "disambiguation": {
          "type": "boolean"
        },
        "link": {
          "type": "string"
        },
        "stub": {
          "type": "boolean"
        },
        "text": {
          "analyzer": "ngram",
          "type": "string"
        },
        "category": {
          "type": "string"
        },
        "title": {
          "analyzer": "ngram",
          "type": "string"
        }
      }
    }
  }
}'
```

## データを流しこんでみる

ためしに5件。

```bash

$ stream2es wiki --max-docs 5 --source jawiki-20150602-pages-articles.xml.bz2
```

ブラウザで http://localhost:9200/_plugin/head/ を開いて以下のようにでればOK

![Screen Shot 2015-08-04 at 17.59.00.png](https://qiita-image-store.s3.amazonaws.com/0/48207/6a3eff00-4cff-9d82-847d-28264a168c2f.png)



もし、Unassigned ってでたら

```bash

$ curl -XPUT localhost:9200/_settings -d'{"number_of_replicas":0}'
```

してからやり直し。


![日本語Wikipediaの全記事をElasticsearchにいれた](https://qiita-image-store.s3.amazonaws.com/0/48207/96e78cc3-7060-0721-a3d5-a70d11d665d7.png)
全部入れるとこのくらいになる。
M3D リンク集

* [本家](http://printm3d.com)
	* [facebook](https://www.facebook.com/Micro3DPrinter)
	* [twitter](https://twitter.com/TheMicro3D)
	* [flickr](https://www.flickr.com/photos/122915984@N04/sets/)
	* [instagram](https://instagram.com/themicro3d/)
	* [youtube](https://www.youtube.com/channel/UCPRtb_d3Hca9PVfChCl15GQ)
* HowTo
	* [フィラメントを内部に格納（ソフトのバージョンが違います）](https://www.youtube.com/watch?v=68_CSVnqGUc)
* 購入
	* [正規代理店？(本家からのリンクがないので確信がもてない)](http://www.3d-micro.com) 注文したらちゃんと届きました
* ユーザブログ
	* [愛する患者の為いち歯医者が3Dプリント技術と戦うブログ](http://3d-dental.jp/tag/m3d/)
	* [ON THE HAND](http://onthehand.blog.fc2.com/blog-category-9.html)

* なんか作った記事
	* 2015/06/17 [Autodesk 123D でドリルを作る](http://onthehand.blog.fc2.com/blog-entry-24.html)
	* 2015/06/01 [３Dプリンターでヤクルトスタンドを作ってみる](http://onthehand.blog.fc2.com/blog-entry-22.html)

* 紹介記事
	* ????/??/?? [2万円で買える3DプリンターThe Microは安くて小さいだけなのか？](http://www.3d-caddata.com/news/the-micro-merit)
gem開発で$LOAD_PATHにlibとかspecとか入れたい時のpryrc

```ruby:.pryrc
Pry.config.hooks.add_hook(:before_session, :add_load_path) do
  %w(lib spec test)
	.map { |dir| File.expand_path("../#{dir}", __FILE__) }
	.each { |lib| $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) }
end
```
Pry version 0.10.1 on Ruby 2.2.2
Mattermostで通知をメールでも受け取るようにしたい場合にやること


## Mattermostの通知について
Mattermostはデフォルトでブラウザのデスクトップ通知に対応しています。しかし、設定をすることでメールでも通知が可能です。

## 想定環境
既に docker でmattermost-devという名称で稼働している想定です。mattermost立ち上げまでは[公式ページ](https://github.com/mattermost/platform)を参考にしてください。

## 設定方法
起動しているコンテナへ入ります。

```bash
docker exec -it mattermost-dev bash
```

２つのconfigファイルを編集します。

```bash
vi /go/src/github.com/mattermost/platform/config/config.json
vi /go/src/github.com/mattermost/platform/config/config_docker.json
```

編集内容は"EmailSettings"の項目です。行コメントが打ってありますが、便宜上のものなので、JSONにそのまま書き込んでしまうとエラーとなります。書き込む場合は行コメントを含めないようにしてください。

```json
	"EmailSettings": {
        "ByPassEmail" : false, // ここはfalseにする
        "SMTPUsername": "SMTPユーザー名",
        "SMTPPassword": "SMTPパスワード",
        "SMTPServer": "SMTPサーバー名とポート", // ex) smtp.gmail.com:465
                "UseTLS": true, //必要ならば
        "FeedbackEmail": "",
        "FeedbackName": "",
        "ApplePushServer": "",
        "ApplePushCertPublic": "",
        "ApplePushCertPrivate": ""
    },
```

編集が終わったらコンテナから出て再起動。

```bash
docker restart mattermost-dev
```

これで通知が飛ぶ様になっているはずです。Mattermostは5分間離席中（ログアウトしているかページを閉じている）とメール通知を飛ばすようです。
WindowsのOpenVPNですべてのトラフィックをOpenVPN経由にする

最近、作業環境をUbuntuからWindowsに移しました。

# トラフィックをすべてOpenVPNに流す。
極めてシンプルで、設定ファイル(.ovpn)に以下の一行を足せば良い。
これはLinuxでもなんでも共通。

```
redirect-gateway def1
```

# 管理者権限で実行する
普通に接続するだけだと管理者権限を渡さなくていいんだけれど、「redirect-gateway」を動作させるためにはOpenVPNを管理者として実行しなければならない。

# 感想
管理者権限渡さなくてもぱっと見では動いているように見えるので、わりとハマった。
sublime ショートカットメモ

```

Contrl + K (Windows) / Command + K (Mac)： 今選択している文字列の選択を解除します。

Alt + F3 (Windows) / Command + Control + G (Mac)： 今選択している文字列と同じ文字列をすべて選択

```

#参照
http://webdesign-workbook.com/sublimetext-useful-shortcut-10/
Linux でミリ秒まで表示するワンライナー時計

Linux の date コマンドを使うとナノ秒まで表示出来ます。
また常に時刻を表示してたい時がたまにあったりします。

そんな時は以下のワンライナーを使うとコンソールに常に時間をミリ秒まで表示することが出来ます。

```
while true ; do printf "\r%.12s" `date +%T.%N`; sleep 0.01 ; done
```

![oneliner-date.gif](https://qiita-image-store.s3.amazonaws.com/0/26783/c5697f20-777a-0df8-a811-c76b6dc74e78.gif)
Unity:prefab中のprefab

普通はprefabを変更すれば、各sceneは変わるはずですけど、
若しprefabの中にprefabがある場合、要注意です。
説明が難しい、簡単に言うと：
Sceneの直下のprefabを変更しないと変わらないです。


Scene
 -prefab A
     -prefab B


prefab Bだけ変更しでも、Sceneが変わらないです、prefab Aを変更しないといけないです。

以上です。
UIAlertControllerを時間差で閉じる方法


##２秒後に自動で閉じる

```swift:Swift
let alert: UIAlertController = UIAlertController(title: "", message: "Alert", preferredStyle: .Alert)
self.presentViewController(alert, animated: true) { () -> Void in
            let delay = 2.0 * Double(NSEC_PER_SEC)
            let time  = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
            dispatch_after(time, dispatch_get_main_queue(), {
                self.dismissViewControllerAnimated(true, completion: nil)
            })
        }

```

意外と簡単便利。
Mac OSX (Yosemite) 上でE-Cell4のPython拡張をビルドする

**以下の情報は時代遅れです。最新の情報は[こちら](https://github.com/ecell/ecell4#installation)を参照してください。**

1. brewをインストールする.

    ```bash
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
```

1. gitをインストールしてecell4のソースをダウンロードする. 必要であれば```ssh-keygen -t rsa -C hoge```などとしてsshキーを作成し, githubのアカウントに登録しておく. ```git clone https://github.com/ecell/ecell4.git```としても良い.

    ```bash
brew install git
git clone git@github.com:ecell/ecell4.git
cd ecell4
```

1. ビルドに必要なライブラリをインストールする.

    ```bash
brew install gsl
brew install cmake
brew install boost
brew tap homebrew/science
brew install hdf5
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py 
sudo pip install "ipython[notebook]"
sudo pip install cython
```

1. インストールしたライブラリのパスを通しておく.

    ```bash
export CPLUS_INCLUDE_PATH=/usr/local/Cellar/boost/1.58.0/include:/usr/local/Cellar/gsl/1.16/include:/usr/local/Cellar/hdf5/1.8.14/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/Cellar/boost/1.58.0/lib:/usr/local/Cellar/gsl/1.16/lib:/usr/local/Cellar/hdf5/1.8.14/lib:$LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/Cellar/boost/1.58.0/lib:/usr/local/Cellar/gsl/1.16/lib:/usr/local/Cellar/hdf5/1.8.14/lib:$DYLD_LIBRARY_PATH
# export LD_LIBRARY_PATH=/usr/local/Cellar/boost/1.58.0/lib:/usr/local/Cellar/gsl/1.16/lib:/usr/local/Cellar/hdf5/1.8.14/lib:$LD_LIBRARY_PATH
```

1. 最後に,

    ```bash
./install.sh py2
```

    ちなみに通常`make`するところで下記のようにすると`egfrd`のテーブルだけ生成できると思われる.

    ```bash
make BesselTables
```
Wordpress 設定内容(プラグイン・テーマユニットテスト)

Wordpress管理画面での設定内容メモ
ちょっとした記録を残しておく

## プラグイン
以下のプラグインを有効にしておく
・ WP Multibyte Patch
>
WordPress日本語版に最初から含まれるプラグインのひとつ。
WP Multibyte Patchは、日本語でWordPressを使用する上で必須。
日本語などのマルチバイトを正しく扱うために開発されたプラグイン。
参考URL：[WP Multibyte Patchの使い方 | WordPress College](
http://wordpresscollege.org/plug-in/wp-multibyte-patch/#ixzz3hpJjBKgT)


## テーマユニットテストのインストール
テーマをテストするためにインポートできる WordPress エクスポート (WXR) ファイル
参考URL：[テーマユニットテスト](http://wpdocs.osdn.jp/%E3%83%86%E3%83%BC%E3%83%9E%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88)

テストデータの取得
>
https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml
ブラウザで開き内容を保存する

インポート方法
>
ツール>インポート>WordPress
1. インポートツールがプラグインではいっていなければインストールが要求されます。
![スクリーンショット 2015-08-04 16.10.23.png](https://qiita-image-store.s3.amazonaws.com/0/39911/1f4584f1-9cf7-e3f1-fc4c-9638094d8a60.png)
2. プラグインがインストールされると完了画面が表示されます  
![スクリーンショット 2015-08-04 16.13.17.png](https://qiita-image-store.s3.amazonaws.com/0/39911/be4afbe8-4ddb-8bd7-ae81-eb464bfe46df.png)
3. [プラグインを有効化してインポートツールを実行]を選択する  
![スクリーンショット 2015-08-04 16.15.40.png](https://qiita-image-store.s3.amazonaws.com/0/39911/5e30317c-219d-1609-1e29-87f86b8ae1e2.png)
4. ファイルの読み込みになるので、保存しておいたwordpress-theme-test-date-ja.xmlのファイルを選択し、インポートする  
![スクリーンショット 2015-08-04 16.25.04.png](https://qiita-image-store.s3.amazonaws.com/0/39911/c1215894-df85-0bfd-dcc4-aef79f7db7fd.png)
5. [添付ファイルのインポート]をチェックして実行する  
しばらくインポートに時間がかかるが、テストデータがよみこまれます。完了すると以下の画面が表示されます
![スクリーンショット 2015-08-04 16.42.44.png](https://qiita-image-store.s3.amazonaws.com/0/39911/cb764094-be21-c60c-4952-ede025f854bc.png)

管理画面の投稿記事や、自分のサイトをみてみてください。
テストデータが埋め込まれてこんな表示になる的なのがわかります。
![スクリーンショット 2015-08-04 16.45.54.png](https://qiita-image-store.s3.amazonaws.com/0/39911/5c229a9d-6339-532d-f33b-9d8e5768a3c6.png)
Goで埋め込んだ構造体データを取り出す

Go言語の構造体の埋め込みは継承のようなものだと思い込んでいたので、以下のコードで動くものだと勘違いしていたのだが、実際は動かない。

```go:json-ng.go
package main

import (
    "encoding/json"
    "fmt"
)

type Info struct {
    Id   int    `json:"id"`
    Name string `json:"name"`
}

type JsonInfo struct {
    Info // ←埋め込む
    SubInfo *Info `json:"sub_info"`
}

const (
    json_string1 = "{\"id\":1,\"name\":\"test1\",\"sub_info\":{\"id\":2,\"name\":\"test2\"}}"
    json_string2 = "{\"id\":1,\"name\":\"test1\",\"sub_info\":null}"
)

func show_json(in_json_string string) {
    var json_data JsonInfo
    err := json.Unmarshal([]byte(in_json_string), &json_data)
    if err != nil {
        fmt.Println(err)
        return
    }
    var show_info Info
    if json_data.SubInfo != nil {
        show_info = *json_data.SubInfo
    } else {
        //show_info = json_data // ←エラーになる
    }
    fmt.Printf("%d : %s\n", show_info.Id, show_info.Name)
}

func main() {
    show_json(json_string1)
    show_json(json_string2)
}
```
```zsh:実行結果
2 : test2
0 :
```

~~構造体に取り出し用のメソッドを実装することにより取り出すことが可能となった。~~
(2015/08/05 追記) [コメント](http://qiita.com/nayuneko/items/cfecf7a72a5f13aad479#comment-022edaa9e252a4c646fc)でご指摘いただきました。取り出しのメソッドは必要なく、埋め込んだ型名で取り出せることを確認しました。ご指摘ありがとうございます。

```go:json-ok.go
package main

import (
    "encoding/json"
    "fmt"
)

type Info struct {
    Id   int    `json:"id"`
    Name string `json:"name"`
}

///*
// * 取り出し用のメソッド
// */
//func (info Info) getInfo() Info {
//    return info
//}

type JsonInfo struct {
    Info
    SubInfo *Info `json:"sub_info"`
}

const json_string1 = "{\"id\":1,\"name\":\"test1\",\"sub_info\":{\"id\":2,\"name\":\"test2\"}}"
const json_string2 = "{\"id\":1,\"name\":\"test1\",\"sub_info\":null}"

func show_json(in_json_string string) {
    var json_data JsonInfo
    err := json.Unmarshal([]byte(in_json_string), &json_data)
    if err != nil {
        fmt.Println(err)
        return
    }
    var show_info Info
    if json_data.SubInfo != nil {
        show_info = *json_data.SubInfo
    } else {
        //show_info = json_data.getInfo()
        show_info = json_data.Info // ←これで取り出せる
    }
    fmt.Printf("%d : %s\n", show_info.Id, show_info.Name)
}

func main() {
    show_json(json_string1)
    show_json(json_string2)
}
```
```zsh:実行結果
2 : test2
1 : test1
```

他にもっといい方法がありましたら教えてください。。

# 参考サイト

http://golang.org/pkg/encoding/json/
http://postd.cc/is-go-object-oriented/
SSPullToRefreshViewでtableViewがnavigationBarに隠れるのを回避する

## 使用したライブラリ
[SSPullToRefreshView](https://github.com/soffes/sspulltorefresh)
## 現象
上記のライブラリを使ってpull更新をtableViewに追加したところ、更新後にtableViewの上部がheaderに隠れてしまいました。 

![pullFail.gif](https://qiita-image-store.s3.amazonaws.com/0/10532/d309b06d-0a09-4994-84d5-f2dc626c286a.gif "pullFail.gif")


```objectivec
- (void)viewDidLoad
{
	pullToRefreshView = [[SSPullToRefreshView alloc] initWithScrollView:self.tableView
                                                               delegate:self];
...
}
```

## 原因・対処
ライブラリのRead.meにある通り、automaticallyAdjustsScrollViewInsetsがYESかNOかで、初期化のタイミングを分ける必要がありました。 
今回はviewDidLayoutSubviewsで初期化することにより回避出来ました。

```objectivec
// If automaticallyAdjustsScrollViewInsets is set to NO:
- (void)viewDidLoad {
   [super viewDidLoad];
   self.pullToRefreshView = [[SSPullToRefreshView alloc] initWithScrollView:self.tableView delegate:self];
}

// If automaticallyAdjustsScrollViewInsets is set to YES:
- (void)viewDidLayoutSubviews {
   if(self.pullToRefreshView == nil) {
      self.pullToRefreshView = [[SSPullToRefreshView alloc] initWithScrollView:self.tableView delegate:self];
   }
}
```
![pullSuccess.gif](https://qiita-image-store.s3.amazonaws.com/0/10532/e1638ccb-4b32-4dce-e8cc-757885ca1632.gif "pullSuccess.gif")
PowerShellでのプロファイル (.bashrcのようなもの)


#発想
PowerShellで.bashrcとか.bash_profileとか.zshrcみたいなことをしたい。
この操作を行うとエイリアスの設定やそのほかの毎度の設定を楽に行うことができるようになります。

今回は例としてエイリアスの作成とシェル関数を定義してみます。


#準備
まず作成したプロファイルを実行するために管理者権限のシェルから以下のコマンドを実行し、制限モードを解きます。

```
> Set-ExecutionPolicy Unrestricted
```

これを実行しないとセキュリティ上の問題でプロファイルが実行されません。


#プロファイルの場所
あとは用途に合わせてプロファイルの場所を選ぶだけです。

##すべてのユーザーのすべてのシェル向けのプロファイル
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1 

##すべてのユーザーのMicrosoft.PowerShellシェル向けのプロファイル
%windir%\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1 

##指定したユーザーのすべてのシェル向けのプロファイル
%UserProfile%\Documents\WindowsPowerShell\profile.ps1 

##指定したユーザーのMicrosoft.PowerShellシェル向けのプロファイル($profile)
%UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 

なかったらディレクトリとファイルを自分で作成してください。
あとはバリバリ書くだけです。


#例: エイリアスを作成してみる
エイリアスを作成する場合はコマンドラインから以下のようにするとラクです。

```
> notepad $profile
```

llでGet-ChildItemが実行されるように設定してみます。

``` ps1:$profile
Set-Alias ll Get-ChildItem
```

以下のようになれば成功です。

```
> ll


    ディレクトリ: C:\Users\***


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---       2015/08/04      1:45                3D Objects
d-r---       2015/08/02      9:44                Contacts
...
```

#例: 関数を作成してみる
今度は関数を作成してみます。

```
> notepad $profile
```

``` ps1:$profile
function wc([switch] $l, [switch] $w, [switch] $c, $file = (throw "ファイルを指定してください")) {
	$content = Get-Content $file
	$is_not_defined = $l -eq $false -and $w -eq $false -and $c -eq $false
	if ($l -eq $true -or $is_not_defined) {
		($content | Measure-Object -Line).Lines;
	}
	if ($w -eq $true -or $is_not_defined) {
		($content | Measure-Object -Word).Words;
	}
	if ($c -eq $true -or $is_not_defined) {
		($content | Measure-Object -Character).Characters;
	}
}

```

以下のようになれば成功です。

```
> Get-Content file
a b cd
> wc file
1
3
6
```

(このwcの例ではパイプラインには対応していません)
iOS8+Safariの時だけtype="search"で「改行」が「検索」にならない

# 経緯

ざっくりマークアップしているときに、iOS8端末のSafariだけ

```html
<form>
  <input type="search">
</form>
```

にフォーカスしたときに、キーボードの「改行」ボタンが「検索」に変わってくれなかった。
iOS7端末や、ChromeiOSなら普通に変わってたのに。


# 解決

iOS8+Safariはaction属性を記載しておかないと、`type="search"`が正常に（？）判別されない模様。
判定基準を厳密にしたのかな？

```html
<form action="/">
  <input type="search">
</form>
```
カメラロールのファイルをサーバーに保存するメモ

ただのメモです。

## カメラロールを開く
写真を選択させる。

```objc
- (IBAction)attachmentFile:(id)sender {
	UIImagePickerController *controller = [[UIImagePickerController alloc] init];
	controller.delegate = self;
	[controller setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
	[self presentViewController:controller animated:YES completion:nil];
}
```

## コールバック
写真選択された場合

```objc
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    // カメラロールを閉じます。
    [picker dismissViewControllerAnimated:YES completion:nil];
    
    // Pathを取得
    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    // AssetsLibratyを作成
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library assetForURL:referenceURL resultBlock:^(ALAsset *asset) {
        // まずassetからバッファをつくる
        ALAssetRepresentation *rep = [asset defaultRepresentation];
        Byte *buffer = (Byte*)malloc(rep.size);
        NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
        NSData *imageData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
        
        // 取得したデータから拡張子を取得
        NSString *fileExtension = [asset valueForProperty:ALAssetPropertyRepresentations][0];
        fileExtension = [fileExtension pathExtension];
        
        // ファイル名を生成する。
        _attachmentFileCount++;
        NSString *fileName = [NSString stringWithFormat:@"写真.%@", fileExtension];
        
        // サムネイルを取得します。（このコードでは使いません。）
        UIImage *image = [UIImage imageWithCGImage:[asset thumbnail]];;
        
        // APIを呼び出します。（これは適当です。本当はAFHTTPClient内部の処理）
		NSMutableURLRequest *request = [self multipartFormRequestWithMethod:@"POST" path:@"パス" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
	        // ファイル名から拡張子を取得。（すでに拡張子は取れているが、、、メモなので・・）
	        NSString *mimeType = [NSString stringWithFormat:@"image/%@", [fileName pathExtension]];
	        // マルチパートデータに詰める。
	        [formData appendPartWithFileData:imageData name:@"attach_file" fileName:fileName mimeType:mimeType];
	    }];
    
	    // 送信処理
		AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
	        // 成功時
	    } failure:nil];
	    [AFHTTPClient enqueueHTTPRequestOperation:operation];
        }];
    } failureBlock:^(NSError *error) {
        // 画像データが取得できない場合
    }];
}
```

## 最後に
僕が近々使う可能性があるコードを適当にまとめてます。
AFHTTPClientは多分使わないけど、後で見るかもしれないので書いておく。
開発用途で MySQL 5.6 をインストールした後、rootパスワードを消す裏技


べつに裏技でもなんでもないけど周りの人が「MySQL5.6 はインストール時に root のパスワードが乱数で生成されるから自動化するのが面倒なので expect 書いたど」と言ってたので対抗して。

```bash:mysql/task/main.yml
----

- name: MySQL install
  yum: name={{item}} state=installed
  with_items:
    - http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-{{mysql_version}}-1.el6.x86_64.rpm
    - http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-{{mysql_version}}-1.el6.x86_64.rpm
    - http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-{{mysql_version}}-1.el6.x86_64.rpm
    - http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-{{mysql_version}}-1.el6.x86_64.rpm
    - http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-{{mysql_version}}-1.el6.x86_64.rpm

- name: MySQL Start service
  service: name=mysql state=started enabled=yes

- name: MySQL Clear root password
  shell: mysql -uroot -p$(cat /root/.mysql_secret | awk '//{print $NF}') --connect-expired-password -e "SET PASSWORD=PASSWORD('')"
```
Yosemite にしてからマルチディスプレイ環境でやったこと

## はじめに

先日、MacBookAir で OS を Marverics(10.9.5) から Yosemite(10.10.4) にアップデートしました。
その際、外部ディスプレイ周りでトラブルがあったので、シューティングメモを残しておきます。

前提として、外部ディスプレイを2つ使っており、1つは [Mini DisplayPort DVI アダプタ](http://www.apple.com/jp/shop/product/MB570Z/B/mini-displayport-dvi%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)で、もう1つは [BUFFALO GX-DVI/U2AI](http://buffalo.jp/products/catalog/multimedia/gx-dvi_u2ai/) を使って、USBポートで接続しています。

## 問題 - 画面がちらつく

問題としては、GX-DVI/U2AI で接続した画面の描画がちらつくようになりました。
静止画は問題ないのですが、スクロールなどすると表示が乱れ、見づらいです。

## 対応

### (1) 透明度を下げる

[【悲報】「OS X Timger」から「OS X Yosemite」へ、パフォーマンスが悪化したと話題に](http://www.softantenna.com/wp/mac/os-x-yosemite-performance/) という記事を参考に、システム環境設定から「アクセシビリティ > ディスプレイ > 透明度を下げる」にチェックを入れてみました。

ちらつきは改善されませんでしたが、負荷は下がったのかもしれません。

### (2) ドライバのアップデート

GX-DVI/U2AI では DisplayLink というドライバを使っているようです。
[こちらのダウンロードページ](http://www.displaylink.com/downloads/mac_downloads.php)にアクセスすると、2015年7月3日に Yosemite に対応したバージョン 2.4 がリリースされていました。

こちらをインストールし、PC を再起動したところ、ちらつきが出なくなりました。

以上です。

## 参考

- https://support.apple.com/ja-jp/HT1573 ... Apple サポートページ。外部ディスプレイまたは内蔵ディスプレイの映像に関する問題のトラブルシューティング
- [BUFFALO GX-DVI/U2 | matsudananda](https://matsudananda.wordpress.com/tag/buffalo-gx-dviu2/)
主にMySQL使っているエンジニアがMSSQLで戸惑ったこと

# 概要
主にMySQLを使用しているのですが、MSSQLを使用する機会があり詰みかけたので
MySQLとMSSQLの際で戸惑った点について記載していきます。

# 同名indexはDB内に一つのみ
DB内にテーブル名が複数

```sql
release
release_history
```
というテーブルが合って、
pk_release というINDEXを作ろうとした時に、MySQLではどちらのテーブルにも同名でINDEXを付与することができるが、
MSSQLでは行うことができない。

# テーブルをコピーした時にはINDEXや権限まわりが引き継がれない
MySQLでいう

```SQL
CREATE TABLE tmp_table LIKE table;
```
のようなことをMSSQLで実現したい。
その場合

```SQL
SELECT * INTO tmp_table FROM table where 1=0;
```
のようなクエリでテーブル構造をコピーできる。
がINDEXや権限回りは引き継げない。

# MySQLでautoincrementになっているようなカラムにINSERTできない。
MSSQLではIDENTITYが設定されているカラム(MySQLではautoincrementが設定されているイメージ)
にそのままではINSERTできない

IDENTITY INSERTをONにする必要がある
たとえば

```SQL
SET IDENTITY_INSERT import_table ON
INSERT INTO ~~
SET IDENTITY_INSERT import_table OFF
```
のようにする。
また、セッション内でIDENTITY INSERTをonにできるのは1テーブルのみなのでoffにしたほうがいい。
https://msdn.microsoft.com/ja-jp/library/ms188059.aspx

# datetime型を「YYYY-mm-dd HH:mm:ss」にしたい
MSSQL側がdatetim型の場合そのままMySQLへ持ってくると
2015-08-03 20:06:00.000のようになる。
以下の用にCONVERTすることで 2015-08-03 20:06:00で取得可能

```SQL
convert(varchar, start_datetime, 120) AS start_datetime,
```

# 文字コード問題
これはMSSQLだから～という固有の問題ではないが、異なるミドルウェア間で文字コードが異なる場合はプログラムなのでConvertが必要。
PHPでは、

```php
 mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
```
のように変換する。
($strを変換元文字コード→変換後文字コード）
http://php.net/manual/ja/function.mb-convert-encoding.php
インライン要素で謎の隙間が出てくる問題


```HTML
<div class="hoge">
	<div class="fuga"></div>
	<div class="fuga"></div>
	<div class="fuga"></div>
</div>
```

```CSS
.fuga{
	display:inline-block;
	margin:0px;
}
```

とかやっても何故か謎の隙間が出来てします。
float:leftとかにするのも手ですが、heightをしっかり出したいときにfloatは使えません。

---
http://qiita.com/chitoku
chitokuさん指摘事項追記
　
ここで生じている隙間は HTML 上のスペースによるものです。

```html
<div class="hoge">
    <div class="fuga"></div><div class="fuga"></div><div class="fuga"></div>
</div>
```

のように詰めてしまうか

```html
<div class="hoge">
    <div class="fuga"></div><!--
 --><div class="fuga"></div><!--
 --><div class="fuga"></div>
</div>
```
のようにコメントアウトする方法がよく取られます。
(chitokuさん指摘ありがとうございました！)

---


HTMLを上記のように編集出来ない場合はCSSで親要素のfont-sizeを0にして目的のクラスでfont-sizeを設定すると、隙間がなくなります。

```CSS
.hoge{
	font-size:0;
}
.fuga{
	font-size:20px;
	display:inline-block;
}
```

めでたしめでたし
Auto Backup on Android M

#はじめに

このページはAndroid MのAuto Backupに関する共有を目的とするページです
結構便利そうなので、積極的に使ったほうが良いかなーと思っています。
と同時に、自動的にAuto Backup機能がopt-inされてしまうので、ユーザに使ってほしくない場合は、manifestに一行追加しなければいけないようです。

#必須条件

- targetSdkVersionが23以上

#概要

Android MにはAuto Backupという機能が追加される。
簡単にいえば「開発コスト、ユーザの操作コストを極力かけずにアプリのユーザデータの自動バックアップを作成する」というもの。

#特徴

- OSがAndroid M以上のすべての端末で動作
- Google Driveに暗号化された状態でバックアップが作成される。アプリがバックアップのスケジュールを指定できない
- 作成されたアプリのバックアップはGoogle Driveの保存領域制限(quota)としてカウントされない
- バックアップは24時間ごとに行われる
- バックアップは充電中、WiFi接続、アイドル状態の3つの条件が満たされた時に行われる
- バックアップデータはユーザが新しく携帯を購入した時、アプリをアンインストール後再インストールした際に復元される
- データ復元の実行は、アプリのインストール時に行われる
- ユーザがバックアップをオプトアウトしたい場合は設定変更ができる
- アプリがバックアップをオプトアウトしたい場合は、明示的にオプトアウトするプロパティをmanifestに追加しなければいけない
- バックアップに必要なクラウドの費用などはすべて無料（通信料は必要）
- 1アプリ25MBまでバックアップを作成できる。25MBを超えるとバックアップは停止される

#バックアップしてはいけないもの

- デバイス固有のtoken、例えばregistration IDなど
- センシティブなユーザデータ

#Auto Backupのデバッグ方法

##Backupのログを有効にする

```
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
```

##Backup Managerを初期化する

```
$ adb shell bmgr run
```

##Backupを実行する

```
$ adb shell bmgr fullbackup <PACKAGE>
```

#バックアップデータを復元する

```
$ adb shell bmgr restore <PACKAGE>
```

#トラブルシューティングをする

もしバックアップのテスト中何らかのエラーが起きてしまった場合下記の3つの方法でバックアップデータを削除することが可能
- 設定でバックアップをOFFにしてONにする
- 工場出荷状態まで戻す
- 下記コマンドを実行する

```
$ adb shell bmgr wipe <TRANSPORT> <PACKAGE>
```

<TRANSPORT>はcom.google.android.gmsによって設定されている。transportのリストを表示するには

```
$ adb shell bmgr list transports
```

を実行する。

#例

##バックアップ機能のオプトアウト

```:manifest
<application
	android:allowBackup="false"
	...
/>
```

##バックアップしないものをブラックリスト指定
例では、device_info.db以外すべてをバックアップするように設定

```:manifest
<application
	android:fullBackupContent="@xml/my_xml_file"
	...
/>
```

```:my_xml_file.xml
<full-backup-content>
	<exclude domain="database"
		path="device_info.db" />
</full-backup-content>
```

##バックアップしないものをホワイトリスト指定

例では、somethin_to_backup.txt以外すべてをバックアップしないように設定

```:manifest
<application
	android:fullBackupContent="@xml/my_xml_file"
	...
/>
```

```:my_xml_file.xml
<full-backup-content>
	<include domain="file"
		path="somethin_to_backup.txt" />
</full-backup-content>
```

##ドメイン指定できるもの

`sharedpref` | `file` | `database` | `external` | `root`

#参考文献

http://developer.android.com/preview/backup/index.html
https://github.com/googlesamples/android-AutoBackupForApps
Meteor 開発者がおさえておきたい「ファイルの読み込み順番(File Load Order)」


# File Load Order

http://docs.meteor.com/#/full/fileloadorder

- Meteorではファイルの読み込み順番に影響を受けないようなコードを書くのが一番いい
	- 読み込み順番に影響を受けるようなコードはパッケージ化する(オススメ！)
	- 読み込みを明示的に制御できる場合は Meteor.startup を使用する
- しかしアプリケーションによっては、読み込み順番の依存関係を避けられない場合がある
- Meteor にはいくつかのファイル読み込み順番に関するルールが存在している
	- そのルールは以下の通り

# File Load Order ルール

ルール1. HTMLテンプレートファイルは常に何よりも先に読み込まれる
ルール2. ファイル名が「main」から始まるファイルは **最後** に読み込まれる
ルール3. libディレクトリ内にあるファイルが次に読み込まれる
ルール4. 深いパスにあるファイルが次に読み込まれる
ルール5. ファイルはアルファベット順に読み込まれる

数字が小さいルールの方が優先度は高い。
また、ルール1から順番に適用される。

# Example

以下のようなファイル構成だった場合、

```bash
.
├── client/
│   ├── feature-y.js
│   ├── lib/
│   │   ├── methods.js
│   │   └── styles.js
│   └── main.js
├── feature-x.js
├── lib/
│   ├── collections.js
│   └── feature/
│       └── styles.js
├── main.html
└── nav.html
```

これは以下の順番で読み込まれる。

```bash
nav.html
main.html   
client/lib/methods.js 
client/lib/styles.js  
lib/feature/styles.js
lib/collections.js
client/feature-y.js
feature-x.js
client/main.js
```

## ポイント

- HTMLテンプレートである main.html と nav.html はルール1により js ファイルより先に読み込まれる
- ルール2により、main.html が nav.html よりも後に読み込まれる
	- ルール5のアルファベット順で main.html は nav.html よりも前になるが、ルール2のほうが優先度が高いため、nav.html の方が先に読み込まれる
- ルール4により、ディレクトリ階層が深いファイルから先に読み込まれる
- ルール4では client/lib/styles.js と lib/feature/styles.js は同一の優先度だが、ルール5によりclient/lib/styles.js の方が先に読み込まれる
OSGi (Open Services Gateway initiative)

JAVAのモジュールを管理する実行基盤
Eclipse,Spring,Jbossの実行基盤として採用されている。仕様はOSGi Allianceにより策定されている。

OSGiでは、モジュールをバンドルと呼び、バンドルを管理する仕組みがOSGi仕様としては[OSGi Aliance](http://www.osgi.org/Download/Release4V43)からダウンロード出来る。

#参照
[wikipedia osgi](https://ja.wikipedia.org/wiki/OSGi)
[EclipseやSpringで使われている基盤技術OSGiとは](http://www.atmarkit.co.jp/fjava/special/osgi/osgi_1.html)
[OSGiフレームワーク Apache Felix その1](http://etc9.hatenablog.com/entry/20091010/1255144517)
[OSGiの最新仕様を追っかけろ【第1回】 ](http://blog.goo.ne.jp/jsp_job/e/8476ede8e71383c8cc1a2db588cf1e6b)
[OSGiユーザフォーラムJapan](http://japan.osgiusers.org/Main/HomePage)
[OSGi DevCon London](http://www.infoq.com/jp/news/2010/03/osgi-devcon)