OmniAICreator/Qiita-1.07M huggingface dataset:
gibo (gitignore-boilerplates) による .gitignore 生成（Windows でもできるよ）

（この記事は [Zenn に移行](https://zenn.dev/spiegel/articles/20200921-gitignore-boilerplates)しました。今後のメンテナンスはありません）

git の repository を作る際に `.gitignore` をどうするかは悩みどころだが（つか、他の repository からコピってくることが多いのだが）、 `gibo` というツールを使えば `.gitignore` の生成をかなり自動化できるらしい。

- [simonwhitaker/gibo](https://github.com/simonwhitaker/gibo)

導入は `README.md` に書かれているのでそちらを参考にすればいいのだが、実体はスクリプトなので、まぁどうにでもなるだろう。

Windows の場合は scoop を使わなくても repository を clone し、そのフォルダにパスを通せばいい。

導入したら動作確認。

```shell
C:>gibo -v
gibo 1.0.4 by Simon Whitaker <sw@netcetera.org>
https://github.com/simonwhitaker/gitignore-boilerplates

C:>gibo -u
Cloning https://github.com/github/gitignore.git to C:\Users\username\AppData\Roaming\.gitignore-boilerplates
```

これで `C:\Users\username\AppData\Roaming\.gitignore-boilerplates` に情報がセットされる。使用するにはコマンドラインに言語名やフレームワーク名を並べればよい。

```shell
c:>gibo java eclipse
### java

*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hot
spot.xml
hs_err_pid*


### eclipse

*.pydevproject
.metadata
.gradle
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath

# Eclipse Core
.project

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

# CDT-specific
.cproject

# JDT-specific (Eclipse Java Development Tools)
.classpath

# Java annotation processor (APT)
.factorypath

# PDT-specific
.buildpath

# sbteclipse plugin
.target

# TeXlipse plugin
.texlipse
```

出力は標準出力なので適当にリダイレクトする。

```shell
C:>gibo java eclipse > .gitignore
```

対応している言語等が知りたければ `-l` オプションを付けて起動すると一覧が表示される（めちゃめちゃ多いので動作例はパス）。
オブジェクトのXMLシリアル化、逆シリアル化のUtilityクラス

<H1>概要</H1>
オブジェクトを簡単にXMLファイル、XMLファイルをオブジェクトにします。

<H1>定義メソッド</H1>
```csharp
 public static class XmlUtility
    {
        public static void Serialize<T>(T obj, string filePath)
        {
            using (var sw = new StreamWriter(filePath, false, new UTF8Encoding(false)))
                new System.Xml.Serialization.XmlSerializer(typeof(T)).Serialize(sw, obj);
        }

        public static T Deserialize<T>(string filePath)
        {
            var returnValue = default(T);
            using (var sr = new StreamReader(filePath, new UTF8Encoding(false)))
                returnValue = (T)new System.Xml.Serialization.XmlSerializer(typeof(T)).Deserialize(sr);
            return returnValue;
        }
    }
```

<h1>使用コード</h1>
```csharp

class MainClass
{
    public static void Main()
    {
        var sample = new SampleClass() { Message = "test" };
        
        // 書き込み（シリアル化
        sample.Save();

        // 読み込み（逆シリアル化
        var sample2 = SampleClass.Load();
    }
}

public class SampleClass
{
    public int Number;
    public string Message;
    public static readonly string FilePath = @".\sampleclass.xml";

    public static SampleClass Load()
    {
        return XmlUtility.Deserialize<SampleClass>(FilePath);
    }

    public void Save()
    {
        XmlUtility.Serialize<SampleClass>(this, FilePath);
    }
}
```

<h1>注意</h1>
シリアル化したいオブジェクトがArrayList、Hashtable、Dictionaryなどである場合は、このままではうまく行きません。（参考　DOBON.NETより）

<h1>参考</h1>
http://dobon.net/vb/dotnet/file/xmlserializer.html
アニメ情報サーバーにアクセスするWebサイト

[Google Cloud Endpointsでアニメ情報API](http://qiita.com/kumo2ji/items/248b4e348af68d9c317e)に対するクライアントサイトを作成した。([Anime Info Client](https://animeinfoclient.appspot.com/))
![Anime Info Client.PNG](https://qiita-image-store.s3.amazonaws.com/0/56307/3afa270b-26ed-1eb5-92d1-aaba92e74367.png)
# 構成
JavaScriptは書ける気がしないのでTypeScriptで作成。
CSSどころかHTMLもよく分からないのでBootstrapでそれっぽい感じにした。
GAEで作成したので、無駄にHTTPS。
Bootstrapのおかげでスマホ対応も簡単にできた。便利。
# API呼び出し
Google Cloud Endpointsで作成したAPIはJavaScript client libraryを使ってAPIを叩くことができるので、これを使って作成した。
試してはいないが、AndroidとiOSのライブラリも作成することができるらしい。
# サイト説明
左上の放送期間を選択すると対応するアニメ一覧をサーバーに取得しに行き、右のアニメ一覧を更新する。
アニメを選択すると下のフォームが更新される。

|ボタン|説明|
|:--|:--|
|New|アニメの新規作成用。フォームを空にするだけで、通信は行わない。情報を記入して、Saveボタンを押すことでデータベースが更新される。|
|Save|アニメ情報更新用ボタン。IDが入っている場合は上書き。IDが入っていない場合は新規作成となる。|
|Delete|データベースから対応するIDのアニメ情報を削除する。|

データベース的にはハッシュタグ、別名は３つ以上保存することはできるが、UI作るのが難しかったので、３つに制限している。

# ソースコード
[kumo2ji/AnimeInfoClient](https://github.com/kumo2ji/AnimeInfoClient)
SQL Server Express LocalDB 2014 サーバ名他

# SQL Server Express LocalDB 2014 サーバ名他
2015-09-22

備忘録としてメモ

## サーバ名

- SQL Server Express LocalDB 2014
    (localdb)\\MSSQLLocalDB

- SQL Server Express LocalDB 2012
    (localdb)\\v11.0


## インストールフォルダ

- プログラム
    "C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe"

- データ
    "C:\Users\アカウント名\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB"


## コマンドライン sqllocaldb

```
>C:\Users\アカウント名>sqllocaldb versions
Microsoft SQL Server 2014 (12.0.2000.8)
```
CSSフレームワーク Ink (Sass/Compass) を試してみたメモ 

# 背景
集計データをHTMLテーブルでいい感じに見せられるCSSフレームワークを探していたところ、
InkというCSSベースのフレームワークを見つけたので試してみるメモ。
※CSSは本格的に書いた事がないので、色々ワカラナイまま進めています。（備忘録的内容）

#CSS Framework
[Ink Interface Kit](http://ink.sapo.pt/)
Bootstrapとか豪勢なものは必要なかった。
シンプルかつCSSベースで探すとInkが見つかった。
MITライセンスの上記を使用してみることにする。

どうやらSassという独自記法のソースをコンパイルしてCSSを生成しているようなので、
サイトからソースコード付きのZIPを取得。

* ink-3.1.10.zip

## データ構造：
実際のソースは /src/sass に入っている。（*.scss のファイル）
cookbookフォルダにあるサンプルHTMLでは、ink-flex.min.cssを参照しているようだが、
ソースには存在していないようだ。

下記のような書き方で複数の sassファイルをコンパイル時に内包させる仕組みらしい。

    @import (sass ファイルを相対パス指定）

さらに compass と呼ばれる sass用のフレームワークみたいなものも入っているようだ。
諸々よくわからないので下記をとりあえず一読させて頂いた。
[今日から使える！ Sass/compass ゆるめ勉強会](http://www.slideshare.net/yuka2py/sasscompass-28389532)

## 課題発見
今回はテーブルをメインで使用したいので、公式ページのリファレンスを見たり、
cookbookデータを軽く編集したりしてみた。
どうやらデフォルトのままではテーブル行の色付けは出来ても、
テーブルセル単位で色をつけることができないようだ。
これでは困るので改造することにした。

# 改造作業

## 環境導入：
下記サイトを参考にさせて頂いた。RubyとKoaraをインストール。
特別何も設定はせずに先へ進んだ。
[これからSassを始めたい人へ！導入手順をまとめてみた(Dreamweaver対応) | 株式会社LIG](http://liginc.co.jp/web/html-css/css/56599)

* rubyinstaller-2.2.3-x64.exe
* koala_2.0.4_setup.exe

## テーブルセル色変更の修正
とにかく色だけが変えたいのでそれらしき箇所を探る。
/src/sass/themes/_tables.scss にカラー指定があった。
見よう見まねで td 用の定義を記述してみた。

	tbody {
	    & > tr {
	        &.red {
	            td {
	                background: $red;
	                color: lighten($red,80%);
	            }
	        }
	        &.green {
	            td {
	                background: $green;
	                color: lighten($green,80%);
	            }
	        }
	        & > td {
	            &.red {
	                background: $red;
	                color: lighten($red,80%);
	            }
	            &.grey {
	                background: $grey-10;
	                color: darken($grey-10,80%);
	            }
	        }
	    }
	}

## コンパイルエラー発生
とにかくコンパイルしてみるかということで、Koalaでコンパイルしてみた。
どうやらソース修正以前の状態でもコンパイル出来ないようだ。エラーを潰していった。

### こんな感じのエラー：
	C:\*\ink\src\sass\ink-ie.scss
	Error: File to import not found or unreadable: compass/layout/grid-background.
	       Load path: C:/*/ink/src/sass
	        on line 1 of C:/*/ink/src/sass/contrib/compass/typography/_vertical_rhythm.scss
	        from line 4 of C:/*/ink/src/sass/contrib/compass/_typography.scss
	        from line 16 of C:\*\ink\src\sass\ink-ie.scss
	  Use --trace for backtrace.

@Importのパスが間違っている。config.rb などの設定を正しく行えば、
任意フォルダをルートにして相対パスImportできるのだろうか？
ワカラナイのでファイルからの相対パスに全て書き換えてエラーを解消した。

### こんな感じのエラー：
	C:\*\ink\src\sass\ink-flex.scss
	Error: Invalid Windows-31J character "\xE2"
	        on line 109 of C:/*/ink/src/sass/modules/_typography.scss
	        from line 68 of C:\*\ink\src\sass\ink-flex.scss
	  Use --trace for backtrace.

下記サイトが見つかったので同様に対処した。
[Windows環境のcompassで”Invalid Windows-31J character”のエラー](http://blog.a4works.co.jp/archives/326)
よくわからないので config.rb は作るまいと思っていたが必要だった。
Koalaでプロジェクト右クリックして Compass用の設定ファイルを生成して編集した。

## 結果
無事セルカラーだけ変更する事ができた。
他にもテーブルヘッダーも色付け出来るようにしたり、簡単な変更も加えてみて編集フローが機能していることを確認した。
![20150921222537.jpg](https://qiita-image-store.s3.amazonaws.com/0/21705/383da956-334b-9d44-d04e-35601690f760.jpeg)

#今後
かなりヨクワカラナイ部分をそのままにして進めたので、後からSassやCompassについて調べる。
Sass自体は一般的なプログラミング言語の作法が取り入れられており苦労することは無さそう。
PHAssetCollectionSubtypeの内容メモ（自分用）

タイトルの通り。
項目名になにが表示されるか調べたのでメモ。
PHAssetCollectionTypeはSmartAlbumです。

## PHAssetCollectionTypeAlbum regular subtypes

###### | AlbumRegular | AlbumSyncedEvent | AlbumSyncedFaces | AlbumSyncedAlbum | AlbumImported |

* ビデオ
* パノラマ
* お気に入り
* バースト
* スローモーション
* カメラロール
* 最後に追加した項目
* 最近削除した項目
* タイムラプス
* 非表示
* セルフィー
* スクリーンショット

## PHAssetCollectionTypeAlbum shared subtypes

###### | AlbumMyPhotoStream | AlbumCloudShared |

上と一緒

## PHAssetCollectionTypeSmartAlbum subtypes

###### SmartAlbumUserLibrary

* カメラロール

###### SmartAlbumFavorites

* お気に入り

###### SmartAlbumRecentlyAdded

* 最後に追加した項目

###### SmartAlbumTimelapses

* ライムラプス

###### SmartAlbumGeneric

* なし

###### SmartAlbumPanoramas

* パノラマ

###### SmartAlbumVideos

* ビデオ

###### SmartAlbumAllHidden

* 非表示

###### SmartAlbumBursts

* バースト

###### SmartAlbumSlomoVideos

* スローモーション

###### SmartAlbumSelfPortraits

* セルフィー

###### SmartAlbumScreenshots

* スクリーンショット

## 結果的に

個別追加だと最後に削除した項目が表示でになかったのでassetCollectionSubtype.hashValueの値を調査。該当のものだけ表示するようにして対応。

| Subtype | hashValue |
|:--------|:---------:|
| ビデオ | 9 |
| パノラマ | 8 |
| お気に入り | 10 |
| バースト | 14 |
| スローモーション | 15 |
| カメラカメラロール | 16 |
| 最後に追加しに追加した項目 | 13 |
| 最近削除した項項目 | 0 |
| タイムラプス | 11 |
| 非表示 | 12 |
| セルフィー | 17 |
| スクリーンショット | 18 |
CIGaussianBlur（CoreImage）の出力サイズがiOS9で変わった


`CIGaussianBlur`でぼかした結果の画像サイズがiOS8以前とiOS9で変わったように見えます。

## 検証コード

* Xcode 6.4 (SDK 8.4) + Swift

```swift:ViewController.swift
import UIKit

func blur(orgImage: UIImage, radius: CGFloat) -> UIImage {
    let filteredImage = CIImage(CGImage: orgImage.CGImage)
    let blurFilter = CIFilter(name: "CIGaussianBlur")
    blurFilter.setDefaults()
    blurFilter.setValue(filteredImage, forKey: kCIInputImageKey)
    blurFilter.setValue(radius, forKey: "InputRadius")
    return UIImage(CIImage: blurFilter.outputImage)!
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let orgImage = UIImage(named: "Test")!
        let blurImage = blur(orgImage, 3)
        println("\(orgImage.size) -> \(blurImage.size)")
        view.addSubview(UIImageView(image: blurImage))
    }
}
```

※Retinaを考慮しないものとしています。

## 検証結果

```text:
iOS8
(48.0, 48.0) -> (66.0, 66.0)
```

```text:
iOS9 + iPad Air
(48.0, 48.0) -> (80.0, 80.0)
```

iOS9の方が余白が多く確保されるようになったようです。

## 何が困るか

ぼやかした画像をアニメーションで拡大縮小するときに、`frame`の`size`に固定値を入れてしまうと、iOS8以前と9とで見た目の画像サイズが変わってしまいます。アニメーション後の`size`ではなく倍率を固定値にすることで回避しました。
（iOS8以前はたぶん`blur値 * 3`が左右上下に拡大するような計算式だと思いますので、自前で出力結果のサイズを調整するのも手かもしれません...）

何故このような改変が有ったんでしょうね。
Google Cloud Endpointsでアニメ情報API

Google Cloud Endpointsで何か作ってみたかったので、([放映中のアニメ作品の情報を提供するAnime RESTful API サーバー作りました](http://qiita.com/AKB428/items/64938febfd4dcf6ea698))を参考にアニメ情報APIを作成した。

[Google APIs Explorer](https://animeinfoserver.appspot.com/_ah/api/explorer)でAPIを試すことができる。
![Google APIs Explorer.PNG](https://qiita-image-store.s3.amazonaws.com/0/56307/b7428668-175e-1f94-6cc1-bfc456fe224c.png)

authが付いているAPIは権限が必要。

# APIの詳細

## animeInfo.erase.anime
### 説明
Datastoreのアニメ情報を削除する。
### input
アニメIDの配列
### output
Boolean値

## animeInfo.get.anime
### 説明
アニメ情報を取得する。
### input
|名前|説明|
|:--|:--|
|period|放送期間を指定できる。指定方法をPeriod IDもしくはYearとSeason値。|
|cursor|一度のリクエストで全て取得できなかった場合、cursorを指定することで、残りの情報を取得できる。|
|limit|取得アニメ情報の上限数。MAXは100。指定しない場合100になる。|
Year値は2014、2015等。Season値は1、2、3、4がそれぞれ春、夏、秋、冬に対応する。
### output
アニメ情報の配列。アニメ情報は参考元とほぼ同じ。cursor値も返ってくる。

## animeInfo.get.period
### 説明
放送期間の情報を取得する。
### input
なし
### output
放送期間情報の配列。

## animeInfo.put.anime
### 説明
アニメ情報の新規作成と上書き保存。
### input
アニメ情報配列。idを指定しない場合は新規作成。idを指定した場合は上書き保存。Period IDは必須。
### output
保存されたアニメ情報配列。新規保存の場合はidに値が入って返ってくる。

# ソースコード
[kumo2ji/AnimeInfoServer](https://github.com/kumo2ji/AnimeInfoServer)
rails-assets-fontawesome 4.4.0 にアップデートしたらフォントが迷子に (asset compile 編)

# 前提: やったこと

* rails-assets-fontawesome を4.3.0 => 4.4.0 にアップデート
* http://qiita.com/ak10m/items/99ead102ece5f9f05100 に従い、パスを調整

```file:app/assets/stylesheets/application.css.scss
$fa-font-path: "fontawesome/fonts";
@import "fontawesome";
```

# 現象

* フォントファイル(fontawesome-webfont.woff2 など) が、production 環境で参照できなくなってしまった
    * development 環境では参照できる

# 調査

* 4.3.0 では`font-url` で参照していたためasset compile でfingerprinted url を取得できたが、4.4.0 から何故か`url` で参照するようになったため、fingerprinted url が取得できなくなってしまったらしい

```
# 4.3.0
-[100756]% grep -r woff2 vendor/bundler/ruby/2.0.0/gems/rails-assets-fontawesome-4.3.0
vendor/bundler/ruby/2.0.0/gems/rails-assets-fontawesome-4.3.0/app/assets/stylesheets/fontawesome/font-awesome.scss:  src: font-url("fontawesome/fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format('embedded-opentype'), font-url("fontawesome/fonts/fontawesome-webfont.woff2?v=4.3.0") format('woff2'), font-url("fontawesome/fonts/fontawesome-webfont.woff?v=4.3.0") format('woff'), font-url("fontawesome/fonts/fontawesome-webfont.ttf?v=4.3.0") format('truetype'), font-url("fontawesome/fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format('svg');


# 4.4.0
-[100757]% grep -r woff2 vendor/bundler/ruby/2.0.0/gems/rails-assets-fontawesome-4.4.0
vendor/bundler/ruby/2.0.0/gems/rails-assets-fontawesome-4.4.0/app/assets/stylesheets/fontawesome/_path.scss:    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
```

# 前提その2

## non-digest オプションがRails4 から無くなった件

https://github.com/rails/sprockets-rails/issues/49

* トレードオフ
    * non-digest なURL にすると、キャッシュの問題が起きてしまう
    * 全てをdigest にすると、3rd party でasset pipeline を気にせず作られたものはURL のリンク切れが起きてしまう (★ 今回はこの問題に引っかかった)
        * 毎回3rd party のfile をmodify (url => image-url, etc..) するのは微妙

* 上記スレッドで挙がっている解決策(案) と所感
    * rake task でコピーして元のURL で参照する
        * 所感: modify したときにURL が変わらないので、結局キャッシュの問題が解決できないぽい
    * redirect
        * 所感: これもおそらくキャッシュの問題が解決できない気がする
            * app.js => app-xxx.js の302 (これはブラウザがキャッシュする？)
            * app-xxx.js (これはブラウザがキャッシュするはず)
            * => fingerprint が効くようにするには302 をキャッシュしないようにするべきだが、それだと毎度app.js のリクエストがサーバーに飛ぶのであまり意味ない？ (302 だけなので速いかもしれないが)
    * override
        * 所感: 表示はされるようになるが、元のファイルが残っているので404 not found のリクエストが飛んでしまうのが嫌なかんじ
    * middle ware に何か挟み込む？
        * 所感: アイデアは書いてあるが、実装はまだ無いぽい
    * non-stupid-digest-assets gem を使ってnon-digest なファイルを指定する
        * 所感: キャッシュの問題は解決されないが、余分なファイルやリクエストは作らずに済む (設定ファイルは1つ増えるが)

# 今回とった方針

* non-stupid-digest-assets を利用する
    * 結局どれもキャッシュの問題が解決できないのであれば、せめて余計なものを作らないものを選ぶ

# その他メモ

* なぜかfont のリクエストヘッダにCache-Control: no-cache が付く件 (Chrome のDeveloper Console で確認)
    * 要調査
    * とりあえず現状キャッシュの問題は関係ないっぽい
[Chart.js] 目盛りのカスタマイズと注意点


# Chart.jsとは

HTML5のcanvasを使って、フラットなグラフが簡単に作れてしまうJavascriptのライブラリ。
入門記事はQiita内にも既に投稿があるので割愛します。
本記事はVersion: 1.0.2 を使用しています。


# 今回の概要
目盛り値のカスタマイズをしていた時に少しハマってしまったので、共有させてもらおうと思います。


# 目盛り値のカスタマイズ
![scale.png](https://qiita-image-store.s3.amazonaws.com/0/42884/41ac0e64-b7fd-e6c3-d30c-31ccd38edbe7.png)

そもそも目盛りが出るのは上記の3タイプのグラフ。
棒グラフ、線グラフ、鶏頭図(Polar area chart)になります。
<small>余談ですが、鶏頭図ってあのナイチンゲールが考案したそうです。多才。</small>


デフォルトでは目盛り値をそのまま表示するようになっています。

```javascript:Chart.js
90			// Interpolated JS string - can access value
91			scaleLabel: "<%=value%>",
```


このオプションを設定して上書きしてやることで、目盛り値のフォーマットを変更できます。

例えば健康系のアプリで体重の推移をグラフ化する場合なんかは、以下のように単位を付与してあげれば単位が表示されます。

```javascript:samples/bar.html
37		var ctx = document.getElementById("canvas").getContext("2d");
38		window.myBar = new Chart(ctx).Bar(barChartData, {
39			responsive : true,
+           scaleLabel: "<%=value%> kg",
40		});
```


![scale2.png](https://qiita-image-store.s3.amazonaws.com/0/42884/4af3512d-0651-e0f3-19da-d67b4af38032.png)

ツールチップを表示している場合は、ツールチップのフォーマットも編集してあげないと上図のようになってしまいます。
ツールチップの値のフォーマット指定箇所は２つあり、上図のように2つ以上のデータセットを使用している場合は multiTooltipTemplate に、データセットが1つのみの場合は tooltipTemplate を使用します。

```javascript:samples/bar.html
37		var ctx = document.getElementById("canvas").getContext("2d");
38		window.myBar = new Chart(ctx).Bar(barChartData, {
39			responsive : true,
            scaleLabel: "<%=value%> kg",
+           multiTooltipTemplate: "<%=value%> kg"
40		});
```


これでツールチップにも単位kgが表示されるようになります。


# 桁区切りは要注意
#### 問題点


さて、ここからが今回の本題です。

単位が"円"のグラフを作成しようとしていたので、値も桁区切りさせてやりたくて以下のようなコードを書きました。

```javascript:samples/bar.html
+-14	var randomScalingFactor = function(){ return Math.round(Math.random()*10000)}; //100 -> 10000 4桁を超えるように
|
37  		var ctx = document.getElementById("canvas").getContext("2d");
38  		window.myBar = new Chart(ctx).Bar(barChartData, {
39  			responsive : true,
+               scaleLabel: "<%=value.toLocaleString()%> 円",
+               multiTooltipTemplate: "<%=value.toLocaleString()%> 円"
40		});
```


すると・・・

![scale3.png](https://qiita-image-store.s3.amazonaws.com/0/42884/a64e6c99-a917-73cc-e2de-7af1f5033e3f.png)

同じコードを記載しているのに、なぜかツールチップだけ桁区切りされて、Y軸の目盛りはそのままです。
Chart.jsがなにか内部でしているのだろうかとデバッグしてみたのですが、最終的にどちらも同じオブジェクトに対しtoLocaleString()していて、その結果が異なるというよくわからない状態に・・・。


#### 解決策
.toLocaleString()を使用せず、Intl.NumberFormatを使用することでうまくいきました。


```javascript:samples/bar.html
+-14	var randomScalingFactor = function(){ return Math.round(Math.random()*10000)}; //100 -> 10000 4桁を超えるように
|
37  		var ctx = document.getElementById("canvas").getContext("2d");
38  		window.myBar = new Chart(ctx).Bar(barChartData, {
39  			responsive : true,
+               scaleLabel: "<%=new Intl.NumberFormat().format(value) %> 円",
+               multiTooltipTemplate: "<%=new Intl.NumberFormat().format(value) %> 円"
40		});
```

![scale4.png](https://qiita-image-store.s3.amazonaws.com/0/42884/28dcb9d4-a8c8-ce16-7177-3985bf637d57.png)


でもなんか腑に落ちない。理由わかる方おられたら是非教えて下さい。
perlでちょっとIRCをつつくプログラム作ってみた。＋環境構築メモ

# 初めに
perlでIRCとのやり取りをするために、まずはチャンネルにログインをするプログラムを作成しようと思いました。
ですが、チャンネルにパスワードがかかっている時にアクセスの仕方がよく分からなかったので、逆転の発想でチャンネルのパスワードチェックマシーンを作成しました(汗)
ユーザアカウントでcpanmを利用しプログラムを作成したので、その事に関しての覚書として書きます。

# 目次
1. サーバ設定
2. plenv導入
3. cpanm導入
4. プログラム作成
5. 参考ページ

## 1. サーバ設定
サーバはawsのEC2を利用しています。
お金は無いので、スペックはもちろんt2.microです。
OSはCentOS 6 x86_64 (2014_09_29) EBS HVMを利用しています。
私のサーバ初期設定は以下で書くつもりなので、ご確認ください。
[サーバ初期設定(まだ)](https://qiita.com/)

まぁ、最低限 git がインストールされて、ircサーバ(私はngircdを用いています)が動いていればよいので、そちらは yum install およびサービスの実行でよろしくお願いします。

## 2. plenv導入

+ 今回、ユーザアカウントにて環境を構築しなければいけませんので、それ用にplenvを利用します。他にも perlbrew というサービスもありますが、特にこちらを選んだ理由はありません。また調べます。

まずはplenvのインストールから。
製作者のtokuhirom氏のgitからインストールします。


```bash
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
$ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
```
ここで、plenvを環境変数に設定します。
何度も書き込むことを防ぐために、grepで書き込まれているか確認するコマンドとorで条件分岐します。

```bash
$ grep 'export PATH="$HOME/.plenv/bin:$PATH"' ~/.bash_profile || echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
$ grep 'eval "$(plenv init -)"' ~/.bash_profile || echo 'eval "$(plenv init -)"' >> ~/.bash_profile
```

次に、環境変数を現環境に適応させます。

```bash
$ exec $SHELL -l
```

続いて、今回利用するperlの環境のバージョンを指定します。
以下のコマンドで確認が可能です。

```bash
$ plenv install -l | less
```

どれを選べばいいかはよく分かりませんが、とりあえず最新を選びました。
2015/09/22　時点では 5.23.3 が最新であったので、自分はそれをインストールしました。
それをローカル環境に設定を保存するためのコマンドを実行します。

```bash
$ plenv install 5.23.3
$ plenv local 5.23.3
```

## 3. cpanm導入

こちらはコマンド一つです。

```bash
plenv install-cpanm
```



## 4. プログラム作成


プログラム用cpanモジュールをインストールします。

```bash
cpanm AnyEvent
cpanm AnyEvent::IRC::Client
```

他のperlのファイルを実行する場合でもそうですが、plenvの環境でperlを動かす場合は以下の文章をソースコードの最初においてください。

```pl
#!/usr/bin/env perl
```

実際に作成したソース(test.pl)は以下のリンクにあります
https://gist.github.com/Critical-Monkey/286afa75048e2c78fb54

実行は以下のコマンドからです。

```bash
/usr/bin/env perl test.pl
```

## 5. 参考ページ

plenv・cpanmインストール について
http://qiita.com/uchiko/items/127b91001b45ad0312f0
http://www.omakase.org/perl/plenv.html

IRCbotに関して 参考コード
https://gist.github.com/kanetann/1344571/c58c751208a3c3cd210712bab3c5a4ad70a46296

IRC error codeに関して
http://www.geocities.jp/stardust_ircnet/command.html
.gitignoreについてのメモ

#What's .gitignore ?
gitignoreとは、git で無視するファイルを指定するファイルです。
例えば、iOSだったらframeworksとか誰でも入れられるものはアップロードとかしなくても良いものなのでそれだけgitにあげないでおく。とか。


##giboを使おう！
gibo → gitignore-boilerplates　の略
giboは.gitignoreをつくってくれるよ。

まずはinstallから。

```
$ brew install gibo
```

###きほんのき
「githubが考える、その言語についての.gitignoreのベストプラクティス」を作る時は、

```
$ gibo 言語名
```

複数のものを選択する時は、
例えば、"Macが出すDS_Storeとかいうゴミファイルいらねー"とか、

```
$ gibo OSX Swift >> .gitignore
```

giboの後ろに並べるだけ。

###おまけ
"."から始まる不可視ファイル、ディレクトリを見たい時のcommand

```
//true可視化
$ defaults write com.apple.finder AppleShowAllFiles true
//falseで不可視化
$ defaults write com.apple.finder AppleShowAllFiles false

```

DS_Storeとかいうファイルはディレクトリを開くたびに生成されるみたいで本当に嫌い。
テキストエディタで開く時とかなんじゃこいつ！って思ってましたから。
ansible備忘録

#困ったら
`ansible-doc <module>`

#git clone
gitモジュールがある。
repo=git:// (ssh)の場合だと、keyが云々にケチがつくので
`accept_hostkey=yes`

#git for private repo
ssh-agentを使う方法も有るらしい。
http://qiita.com/seizans/items/f5f052aec1592c47767f

#SELinux python
諦めていれろ

```
    - name: install essential packages
      yum: name=libselinux-python state=installed
```

#lineinfileで追記
追記できる。SELINUXPLUSと無いけど。

```
    - name: disable SELinux
      lineinfile: dest=/etc/selinux/config regexp=^SELINUXPLUS= line=SELINUXPLUS=disabled
```

削除もできる、その場合は `state=absent`
UILabelの高さを動的に可変させ,textを複数行表示する

テキストのfontsizeを変えずにまぁまぁ長い文を表示させたかった。

#Labelの高さを可変させる

```
@IBOutlet var titleLabel: UILabel!
//表示可能最大行数を指定
titleLabel.numberOfLines = 0 
//contentsのサイズに合わせてobujectのサイズを変える
titleLabel.sizeToFit() 
//単語の途中で改行されないようにする
titleLabel.lineBreakMode = NSLineBreakByWordWrapping

```

基本的にはこれだけ。
#このLabelの下に何かを置く時は...
えーっと、普通にstoryboardで設置すると、labelが大きくなった分が他のオブジェクトと重なってしまうから記述します。
今回はtableviewを下に置くことにします。

```
//labelのframe(位置とサイズ)を取っとく
labelframe = titleLabel.frame
//tableviewの位置指定
tableView.frame.origin.x = 0
tableView.frame.origin.y = labelframe.origin.y + labelframe.size.height
tableView.sizeToFit()

```

こんな感じ？
Rails で test-unit + simplecov を使おうとしてハマった（解決済み）

タイトルの通り、Rails で test-unit と simplecov を使おうとしてハマったので、他の方の参考のためにメモっておきます。


そもそも適当にググッて設定したのが問題だったのですが、test-unit を使おうと思って Gemfile と test_helpers.rb を編集してテストしたところ、元は 100% だった C0 カバレッジが妙なことに…

```rb
 bundle exec rake test:helpers
Coverage report generated for Unit Tests to /Users/bsdmad/xxxxx/xxxx/coverage. 43 / 117 LOC (36.75%) covered.
Loaded suite /Users/bsdmad/.rbenv/versions/2.2.3/bin/rake
Started
.............

Finished in 1.22676 seconds.
---------------------------------------------------------------------
13 tests, 55 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
---------------------------------------------------------------------
10.60 tests/s, 44.83 assertions/s
```

なぜかテストが開始される前にレポートが生成されています。しかも C0 カバレッジが 36.75% とか、意味不明 (--;。

結局、更にググッて色々と見ていたところ、simplecov は順序が重要らしい事が分かりました。更に Gemfile の記述で *:require => false* というのは、gem としては必要だけど require は別途行うよ（ここでは require しないよ）という事もわかりました。

ということで Gemfile を以下のように修正しました。

```rb:Gemfile
group :development, :test do
(省略)
  gem 'simplecov',        :require => false
  gem 'test-unit',        :require => false
  gem 'test-unit-rails',  :require => false
  gem 'test-unit-notify', :require => false
end
```

そして test_helper.rb の先頭を以下のようにします。

```rb:test_helper.rb
require 'simplecov'
require 'test/unit'
require 'test/unit/rails'
require 'test/unit/notify'

SimpleCov.start 'rails'

(省略)
```

この後、テストを実行したら正常にレポートが作成されました。

```rb

$ bundle exec rake test
Loaded suite /Users/bsdmad/.rbenv/versions/2.2.3/bin/rake
Started
.....................................................................
(省略)
............

Finished in 49.895481 seconds.
---------------------------------------------------------------------
612 tests, 2015 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
---------------------------------------------------------------------
12.27 tests/s, 40.38 assertions/s
Coverage report generated for Unit Tests to /Users/bsdmad/xxx/xxx/xxx/xxx/coverage. 2507 / 2556 LOC (98.08%) covered.
```

順序、重要ってことですね。
WPFのWebBrowserで使用されるIEのバージョンを最新にする

WebBrowserで使用されるバージョンのデフォルトはIE7なので、インストールされている最新のバージョンに変更したくなることはよくあるとおもう。ただその変更はレジストリを使用する以外に方法はありません。


## インストールされたIEのバージョンを取得

IEをどのバージョンに変更するかを決定するためにはインストールされているIEのバージョンを知る必要があります。

```csharp
private int IEVersion
{
    get {
        var r = new Regex(@"(\d{1,2})\.(\d{1,2})\.[\d]+.[\d]+");
        var m = r.Match(Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Internet Explorer").GetValue("Version").ToString());

        var ver1 = Convert.ToInt32(m.Groups[1].Value);
        var ver2 = Convert.ToInt32(m.Groups[2].Value);

        if (ver1 == 9 && ver2 > 9)
        {
            return ver2;
        }

        return ver1;
    }
}
```

IE10以上のとき、バージョンによってはちょっと形式が違うことがあるようなので、その処理を追加しています。


## レジストリを書き換える

WebBrowserがインストールされている最新のIEを使用するようにレジストリを書き換えます。

```csharp
public const string FEATURE_BROWSER_EMULATION = @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";

Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(FEATURE_BROWSER_EMULATION);
String exeName = System.IO.Path.GetFileName(Assembly.GetExecutingAssembly().Location);

int IeVer = this.IEVersion;
regkey.SetValue(exeName, IeVer * 1000, Microsoft.Win32.RegistryValueKind.DWord);
regkey.Close();
```

レジストリの削除には`DeleteSubKey`を使うだけです。

```csharp
regkey.DeleteSubKey(exeName, false);
regkey.Close();
```

設定の反映には当然ソフトの再起動が必要。
unity > Macアップ > 予期しない理由で終了しました > x86_64なら実行できる

```txt:動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
```

UnityでMac用ビルドをして実行すると以下が出るようになった。

```
xxxが予期しない理由で終了しました。
```

以前は普通に動いていたと思うが。

理由については調査中。

Windows用ビルドの実行ファイルは普通に動作する。
プレイモードでも動作する。

<hr>
(追記 2015/09/22)

##回避策

Mac用ビルドにするとき、Architectureを x86_64 にすると実行に失敗しないことが分かった。
unity > 実装 > stringGarbler > ファイルの文字列を一部可読不能にする

```txt:実装
Unity 5.1.3-f1 on MacOS X 10.8.5
```

Qiitaに投稿するなかで、「そのままの文字を載せるのはどうだろうか」という疑問を時々持つ中、Windows Updateがいつまでも終わらない状況でツールを作ることにした。
オンラインツールが欲しかったけど、すぐに見つからなかったのも理由の一つ。

##code
[v0.1 @ github](https://github.com/yasokada/unity-150922-stringGarbler/releases/tag/v0.1)

メインの処理は`ButtonCS.cs`に記載。

- garble_string() : 文字列を変更する処理のメイン
- get_maxRange() : 変更の割合のパーセンテージをInput Field値から計算
- garble_caller() : ファイル処理 + garble_string()をコール

```ButtonCS.cs
...
bool garble_string(string instr, out string outstr) {
		int judge;
		char code;
		int work;

		outstr = "";
		for(int idx=0; idx < instr.Length; idx++) {
			code = instr[idx];
			if (code == 0x0a || code == 0x0d) { // CRLF
				outstr = outstr + code.ToString();
				continue;
			}
			judge = Random.Range(0, get_maxRange(IF_percent.text));
			if (judge == 0) {
				// randomly change character
				work = code + Random.Range(0,5);

				work = Mathf.Max (0x20, work); // SP and later
				work = Mathf.Min(0x7e, work); // up to ~

				code = (char)work;
			}
			outstr = outstr + code.ToString();
		}
		return true;
	}
...
```

アスキーコード一覧で0x20未満、0x7E超過にならないようにしている。
bool型の関数でtrueしか返していないのは未完成。

##使い方

`indata.txt`というファイルを用意する。

```indata.txt
Today is a fine day.
She sells seashells at the seashore.
Daruma sann ga tatta. Kurara ga koronda.
```

コードをビルドして実行し、以下のように変換割合(e.g. 20%)を指定してButotnを押すと`outdata.txt`が出力される。

![Main_unity_-_150922-stringGarbler_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/d502ce2c-300f-1f16-543f-7a4539bb2b50.jpeg)

20%変換の結果

```
Today is"fine gey2
Sie sells siashellu at thi shcuhore.
Earuma#uann ga tdtta. Kutara ga koronfa.
```

100%変換の結果

```
Xrge{$lt$d"gjpi fdz2
Tie#whlpw tfduhipnv ax"wlh#vgdwjqrh2
Fcvwpe!sbqq#gc$wevxc.!Ovuesa$je"npvqnhc.
```

UTFなどに対する動作は未検証。

ちなみには「garble」という英語が文字化けという意味で一般的に使われているのかよくわからない。

## v0.2

[v0.2 @ github](https://github.com/yasokada/unity-150922-stringGarbler/releases/tag/v0.2)

空白はそのままの方がよさそうなので、0x20は変換しないようにした。
韓国のウェブ環境とマークアップについて

大部分は日本と同じと思いますが、いま韓国では、どんな風に開発するかを紹介してみたかったんです。韓国人ですので普通に日本語下手です。字が読みにくくてもよろしくお願い申し上げます。

# 韓国のウェブ環境

2015年になってMS Edgeも出た時代ですが、まだIE7まで対応しているので、CSS3の新しい属性を使うかどうかを心配している様子です。

今はProgressive enahncementを基とし「最新ブラウザを使う人にもっといい経験を与えよう」みたいな雰囲気になりつつありますが、まだ遠い話かと思ったりします。当然な話としてIE7への怒りが残っていますが、それが「なぜIE7をまだ使う！」ではなく、「IE7を作ったMSの方が悪い」と感じます。

IEを使うユーザーが87％ぐらいで残り13％はChrome, Safari, Firefoxを使います。
swingは韓国で作ったブラウザーの名前です。
![스크린샷 2015-09-22 오전 10.19.36.png](https://qiita-image-store.s3.amazonaws.com/0/92222/5ce3a6d4-22c9-5272-bbc1-81b3faba4e8a.png)

IEだけ見ればこんな感じ
![스크린샷 2015-09-22 오전 10.23.41 1.png](https://qiita-image-store.s3.amazonaws.com/0/92222/779c1f8b-3643-062a-7e0c-cfaa1c75bd82.png)

## なぜIEの占有率がこんなに高いのか
韓国のスマートバンキングやショピング関連のModuleがぜんぶIEのActive X記述でできていて、他のブラウザーを使うと使用できないです。だからこんな結果に、、、

# ネイバーと言う罠

韓国ではネイバーは検索関係のサービスですが、日本ではまとめサービスを運営していると思っています。

ネイバーは検索結果を表示する時に、自分達のサービスを使っているブログや広告を最優先で表示するため、SEOは発達せずにただ「keyword ad」だけがSEOとなります。韓国でネイバーを使うユーザーは90％ぐらいです。

# Editor
普段使うOSがWindows系ですねで*Sublime Text*や*Edit +*「韓国のみのEditor」の占有率が高く他にもいろいろ使いますが、代表的にはその二つ。

*Webstorm*や*Brackets*を使うユーザーも増えてるが今の所ATOMを使う人とかVIMを使う人はいないそうです。「本人はVIMを使います」

# Version Control System
まだ使わない会社も多いです。普通使うなら*SVN*ですね。理由は簡単で*Tortoise SVN*がWindowsでよく動くし、GITに比べたら簡単だからみんな*SVN*をよく使います。

でも最近はNAVERとかでgithubみたいなツール、*YOBI*を作って使うからにはgitへの関心も高まってきます。自分はGitで管理します。

# マークアップエンジニアーの呼び方
韓国ではマークアップエンジニアみたいな表現はなくウェブパブリシャー「英語：web publisher」と言う表現をマークアップエンジニアとして使っています。そうじゃなければフロントエンドエンジニアですね。

元は「ウェブのフロントからバックまでを管理するからパブリシャー」みたいな感じでしたが今にはHTMLとCSSの設計から作りまでする人をウェブパブリシャーと呼んでいます。それ以外にはUI開発と言うとマークアップエンジニアです。

# JavaScriptもする！
日本では違うと思いますが韓国ではマークアップエンジニアがUIレベルのJavaScriptは自分で作ったりします。理由は色々ありますが会社からの関心度が高くなくて要求だけするからだと思います。今はフロントエンドエンジニアとして働きますが、元はマークアップエンジニアでした。

# A11y
韓国では去年から障害人差別の禁止及び権利救済の法律が民間企業にも適用することになりアクセシビリティは強制的にします。その以前にはあまり興味のない人の方が多かったです。

韓国はW3Cの標準であるWCAG 2.0を韓国風に変えたKWCAG 2.0を基準としてアクセシビリティを守っています。

# SASSやLESS
普段SASSを使います。PURE CSSの方が多いですが、そうじゃなければ普段SASSの方がもっと多いです。理由はわからないですが、有名な開発者のセミナーとかでLESSよりSASSの方が便利だ！と言う表現があってからこんな感じになったんじゃないかと思っています。

ーーー
まだまだしたい話は多いですが時間の関係でここまでします！
dll > dllの見方 > VisualStudio Tools > dumpbin > dumpbin /exports example.dll

DLLの中身を知りたい。

http://www.nukoneko.info/blog/?p=270
に説明がある。

> [Windowsボタン] か [スタート] を押し [すべてのプログラム]->[Microsoft VisualStudio] -> [VisualStudio Tools] -> [VisualStudio コマンドプロンプト] を開く
dllの置いてあるディレクトリに移動する
そこで dumpbin /exports DLL名 を入力すると出力される。

<hr>
Visual Studio 2015 Community Editionで該当ツールの実行方法がわからなかったので、以下のようにした。

1. エクスプローラーで.dllファイルがある場所に移動
2. エクスプローラーのフォルダ表示部分に cmd を入力してコマンドプロンプト起動
3. コマンドプロンプト内で以下のように実行 (64bit windowsの場合）

```
c:\Program Files (x86)\Microsfot Visual Studio 14.0\VC\bin\dumpbin.exe /exports someApi.dll
```
パワーポイントやPDFを画像に変換する方法


# はじめに

ちょっとしたアプリをサンデープログラミング作っていて、アップロードしたパワポファイルやPDFのプレビューやサムネイル機能を付けたいなーと思ったので、その前提となるファイルの変換について説明します。環境はVagrant上で起動したUbuntu 14.04です。

# 一番簡単な方法

PDFであれば一番簡単な方法はunoconvとimagemagickの組み合わせでいける。以下のようにして必要なコマンドをインストールします。

```
sudo apt-get install unoconv
sudo apt-get install imagemagick
```

ここまで出来たら、以下のようにコマンドを実行します。

```
convert -density 600 -geometry 1000 hoge.pdf hoge_%03d.jpg
```

ただし、変換後の画像が汚いのが気に食わない..

# 綺麗に変換する方法

上の方法は簡単だけど、画像が汚いと意味がないので、もう一段工夫します。ここではxpdfを使って、pdfを一度ppmに変換し、その後画像に変換することにします。

まずxpdfをインストールします。

```
sudo apt-get install xpdf
```

その上で以下のように実行します。

```
pdftoppm hoge.pdf hoge
mogrify -format jpg hoge*.ppm
```

比べてみると分かりますが、だいぶ画像が綺麗です。

# パワポのファイルから変換をしたい場合

パワーポイントのファイルを直接unoconvで変換することは出来ないので、OpenOfficeとの組み合わせ技でいきます。OpenOfficeはGUIがあるので、仮想バッファフレームが必要です。

まず、Xvfbをインストールして起動します。

```
sudo apt-get install xvfb
export DISPLAY=:1.0
Xvfb :1 &
```

日本語フォントをインストールします。適当に入れてください。なお、オープンソースのフォントであれば問題ないですが、例えばMacやWindowsに入っているフォントをそのまま持っていくのはライセンス違反になると思うので注意が必要です。

```
sudo apt-get install ttf-mscorefonts-installer
sudo apt-get install fonts-vlgothic
sudo apt-get install fonts-mplus
sudo apt-get install fonts-migmix
```


次にOpenOfficeをインストールします。日本語入りのPDFを変換するだろうと思うので、日本語版のOpenOfficeが良いかと思います。

```
wget "http://downloads.sourceforge.net/project/openofficeorg.mirror/4.1.1/binaries/ja/Apache_OpenOffice_4.1.1_Linux_x86-64_install-deb_ja.tar.gz"
tar xvfz Apache_OpenOffice_4.1.1_Linux_x86-64_install-deb_ja.tar.gz
cd ja/DEBS
sudo dpkg -i *.deb
```

これでOpenOfficeはインストールできたので、unoconvをlistener付きで起動します。

```
unoconv --listener &
```

起動すると、以下のようなプロセスがいるはずです。

```
/usr/lib/libreoffice/program/soffice.bin
```

これで準備が整ったので、パワーポイントファイルを変換します。

```
unoconv -f pdf Fuga.pptx
pdftoppm Fuga.pdf Fuga
mogrify -format jpg Fuga*.ppm
```

# 各種デーモンを自動起動するようにしておく

ここまででやりたいことは終わっているのですが、サーバ再起動した際などに自動でデーモンを動くようにしたいので、supervisordを使って制御します。

まだsupervisordをインストールしていない場合は以下のようにインストールします。

```
sudo apt-get install supervisor
```

設定ファイルを、`/etc/supervisor/conf.d/unoconv.conf`などの名前で以下の内容で作成します。

```
[program:xvfb]
command=Xvfb :1
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/xvfb.log
redirect_stderr=true

[program:unoconv]
command=unoconv --listener
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/unoconv.log
redirect_stderr=true
environment=DISPLAY=:1
stopasgroup=true
```

終わったら一旦起動しているプロセスをkillした上で、supervisorを再起動すればOKです。サーバを再起動しても動作することを確認しておくと良いでしょう。
dll > 種類 > Win32 / COM / CLR

コードスペランカーさんのページ
http://d.hatena.ne.jp/ranmaru50/20130523/1369298387

Win32とCOMとCLRの違いについて詳しい。

言語(C#など)によってもどれが使いやすいか変わるようだ。

最終的にはC++で実装を考えているが、途中経過としてC#を使うのもすることになるかも。
dll > 種類 > {普通の/ .NET Assembly} / {Win32 Assembly / 普通の} / {普通の / COM / ActiveX}

DLL (Dynamic Link Library)を扱うソフトを作ろうかと思う。

「DLLって何？」の状態からスタート。

DLLにも色々種類があるようだ。
>http://blogs.wankuma.com/tyappi/archive/2007/07/14/85173.aspx

>とりあえず、こういうでっかいくくりがあり、 
・ 普通の DLL 
・ .NET Assembly 
で、「普通の DLL」の下で manifest の有無によって、こう分かれる 
・ Win32 Assembly 
・ 普通の DLL 
あと「.NET Assembly」に対抗する「普通の DLL」の下で、entry point というかそういった level で 
・ 普通の 
・ COM 
・ ActiveX 
とかに分かれる。ただし、これは厳密には DLL の種類とはいえないかもしれない。 


これから扱いたいDLLがどの種類なのか調べる必要がある。
技術英語 > 単数形と複数形で意味が異なる > mile:マイル / miles:[副詞的に]ずっと

引用: 冠詞マスター教本 by 石井隆之さん

単数形と複数形で意味が異なるものの例

- mile:マイル / miles:[副詞的に]ずっと
  - She is miles superior to me. (彼女は私よりははるかに優れている)

<hr>
http://ejje.weblio.jp/content/miles
でmilesを検索しても「ずっと」の意味は見つからなかった。

http://eow.alc.co.jp/search?q=miles&ref=sa
でmilesを検索すると以下などがある。

> miles ahead of ~ in many ways
> 《be ～》多くの点で～のはるか先を行っている

http://dictionary.reference.com/browse/miles?s=t
でmilesを検索して「ずっと」に対応してそうなものは以下だろうか。

> "5. a notable distance or margin:"

notableはweblioによると「注目に値する，著しい，顕著な; 有名な.」

<hr>
あと気づいたのは、milesは必ずしも「はるかに」という意味だけでなく、mileの複数形としても使われるということ。どちらなのかは文脈で判断するのだろう。
Intalling Android Studio on Archlinux

#Intalling Android Studio on Archlinux

> Yaourt
> Android Studio  

##Yaourt
Edit de the file  /etc/pacman.conf  and you write in the end:  
> [archlinuxfr]
> SigLevel = Never
> Server = http://repo.archlinux.fr/$arch

and uncomment

**before**
> \#[multilib]
> \#Include = /etc/pacman.d/mirrorlist

**after**
> [multilib]
> Include = /etc/pacman.d/mirrorlist

 now install it

```
sudo pacman -Syy  
sudo pacman -S yaourt  
```


when you install this  the terminal will ask you if you want
1) jdk7-openjdk or 2) jdk8-openjdk default: 1
 
##Android Studio

```
sudo pacman -Syy
yaourt -S android-studio android-sdk android-sdk-platform-tools android-sdk-build-tools android-tools
sudo chmod -R 777 /opt/android-sdk
```

Add next line in "sudo /etc/profile"

``` 
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk
```

When  you initiate android-studio add your SDK directory /opt/android-sdk


Perhaps you haven’t detected your smartphone android, then use this command.

```
sudo pacman -S android-udev
yaourt -S simple-mtpfs
```

**Xmonad** GUI:

```
sudo pacman -S android-file-transfer  
```

Also you need add in  xmonad.hs

```
import qualified XMonad.Hooks.ICCCMFocus as ICCCMFocus
```
and 

```
 logHook = ICCCMFocus.takeTopFocus
```
**Gnome:**

```
sudo pacman -S gvfs gvfs-mtp  
```
**KDE:**

```
sudo pacman -S kio-mtp
```

and restart your computer.

## Android Studio with Xmonad
Perhps you can have this problem
![Screenshot_20161028_091349.png](https://qiita-image-store.s3.amazonaws.com/0/91692/45ad89be-6d01-039c-8ada-65412e33b128.png)
How you can see .. well this is the point we can't see anything  using xmonad

on this case 
```
sudo pacman -S wmname
wmname LG3D
```
and now you can execute Android studio
Pythonで実装 PRML 第1章 多項式曲線フィッティング

パターン認識と機械学習、第1章から「多項式多項式曲線フィッティング」の図の再現に取り組んでみます。
早速図1.4の再現から行ってみたいと思います。また、データの数を増やすことで、予測の正確性が増すことの確認を図1.6で行っています。

数学的にも実装上もまだまだそんなに難しくないので、淡々と実装してみました。
とりあえず、最初の第一歩。

##実装の大まかな流れ
①(1.1)を実装。

```math
 y(x, {\bf w}) = w_0 + w_1 x + w_1 x^2 + ...+ w_M x^M = \sum_{j=1}^M w_j x^M (1.1)
```

②(1.122)と(1.123)を満たす値を求めると二乗誤差関数(1.2)を最小化するパラメータ${\bf w}$の値が求まる。

```math
E({\bf w}) = \frac{1}{2}  \sum_{n=1}^N \{{y({x_n, \bf x_n}) -t_n}^2 \}(1.2)
```

```math
\sum_{j=0}^M {\bf A}_{ij} w_j = {\bf T}_i(1.122)
```

```math
{\bf A}_i = \sum_{n=1}^N (x_n)^{i+j} (1.123)
```

```math
{\bf T}_i = \sum_{n=1}^N (x_n)^i t_n (1.123)
```


##コード
```python
import numpy as np
import pandas as pd
from pylab import *
import matplotlib.pyplot as plt
#(1.1)
def y(x, W, M):
    Y = np.array([W[i] * (x ** i) for i in xrange(M+1)])
    return Y.sum()

#(1.2),(1.122),(1.123)
def E(x, t, M):
    A =np.zeros((M+1, M+1))
    for i in range(M+1):
        for j in range(M+1):
            A[i,j] = (x**(i+j)).sum()
        
    T = np.array([((x**i)*t).sum() for i in xrange(M+1)])
    return  np.linalg.solve(A, T)

if __name__ == "__main__":
    #Sine curve
    x_real = np.arange(0, 1, 0.01)
    y_real = np.sin(2*np.pi*x_real)
    
    ##Training Data
    N=10
    x_train = np.arange(0, 1, 0.1)
    
    #Set "small level of random noise having a Gaussian distribution"
    loc = 0
    scale = 0.3
    y_train =  np.sin(2*np.pi*x_train) + np.random.normal(loc,scale,N)
    
    for M in [0,1,3,9]:
        W = E(x_train, y_train, M)
        print W
    
        y_estimate = [y(x, W, M) for x in x_real]
    

        plt.plot(x_real, y_estimate, 'r-')
        plt.plot(x_train, y_train, 'bo') 
        plt.plot(x_real, y_real, 'g-')
        xlim(0.0, 1.0)
        ylim(-2, 2)
        title("Figure 1.4")

```

##結果
![Screen Shot 2015-09-18 at 05.30.20.png](https://qiita-image-store.s3.amazonaws.com/0/62779/75a49aaa-bd56-e0cb-adbc-8a4492251d9d.png)



##コード
```python
if __name__ == "__main__":
    M2 = 9

    N2 = 20
    x_train2 = np.arange(0, 1, 0.05)
    y_train2 =  np.sin(2*np.pi*x_train2) + np.random.normal(loc,scale,N2)

    N3 = 100
    x_train3 = np.arange(0,1, 0.01)
    y_train3 =  np.sin(2*np.pi*x_train3) + np.random.normal(loc,scale,N3)


    W2 = E(x_train2, y_train2, M2)
    W3 = E(x_train3, y_train3, M2)
    
    y_estimate2 = [y(x, W2, M2) for x in x_real]
    y_estimate3 = [y(x, W3, M2) for x in x_real]

    plt.subplot(1, 2, 1)
    plt.plot(x_real, y_estimate2, 'r-')
    plt.plot(x_train2, y_train2, 'bo') 
    plt.plot(x_real, y_real, 'g-')
    xlim(0.0, 1.0)
    ylim(-2, 2)
    title("Figure 1.6 left")

    plt.subplot(1, 2, 2)
    plt.plot(x_real, y_estimate3, 'r-')
    plt.plot(x_train3, y_train3, 'bo') 
    plt.plot(x_real, y_real, 'g-')
    xlim(0.0, 1.0)
    ylim(-2, 2)
    title("Figure 1.6 right")
```

##結果
![Screen Shot 2015-09-18 at 05.33.32.png](https://qiita-image-store.s3.amazonaws.com/0/62779/5e00c51b-4c61-a95e-e024-2194f862a803.png)
dotfiles の管理は python-dotfiles が便利

[Windows でも homesick で dotfiles 管理がしたい！](http://qiita.com/kounoike/items/4ec4b21a9467581349f4) って記事で Ruby で作られた dotfiles 管理の紹介をしましたが、Python の dotfiles というパッケージがもっと便利だったのでその紹介です。

どんなところが良いかというと

* Python 製で pip 一発（個人的な趣味）
* Windows でも管理者権限のコマンドプロンプトで実行することを忘れなければ無改造でOK

というところですね。

使い方は https://pypi.python.org/pypi/dotfiles に載っている通りで、`pip install dotfiles` を（お好みで virutalenv で）実行してインストールした後、~/Dotfiles （Windows なら C:\Users\kounoike\Dotfiles）に github からリポジトリを clone してきて、`dotfiles --sync` して、お好きな .dotfile を `dotfiles --add .dotfile` して、Dotfiles の中で、`git add dotfile` して push。

ああ、なんか時間も時間なんで説明が雑だ・・・でも、便利で簡単なのですよ。
超簡易整形フィルタ

# 超簡易な欧文整形フィルタ

欧文プレーンテキストを弄っていると、こういうのが便利な時もあるので、備忘録として。

標準入力から受け取って整形された欧文テキストを返す（一行辺りの字数はコマンドライン引数で指定する）。日本語には対応していないが、分かち書きしない和文にはそもそも不要。

```shell-session
$ cat my.txt | format 40
```

みたいに使う。Textパッケージも使っていないやる気のないコードだが、そもそもそんな大量のテキストを処理することを想定していないのでこのまま。

```hs:Format.hs
import Control.Monad
import System.Environment (getArgs)
import System.Exit (exitSuccess)

-- 各行の右端はとりあえず指定字数まで空白で埋める
pretty :: Int -> [String] -> [String] -> Int -> IO ()
pretty count buffer strs n
  | null strs && null buffer = return () 
  | null strs   = flushWithWS 1 >> putStrLn (ws (n-count-(wc-1)*1)) -- 最終行は単純に左揃え
  | expect >  n = flushWithWS p >> putStrLn (ws (n-count-(wc-1)*p)) >> pretty 0 [] strs n
  | expect == n = flushWithWS 1 >> putStrLn (ws 1 ++ s)             >> pretty 0 [] ss n
  | expect <  n = pretty (count + length s) (s:buffer) ss n
  where
    (s:ss) = strs -- 目下読んでいる単語と残りの単語リスト
    wc = length buffer -- バッファの単語数
    expect = count + wc + length s -- 現在行に次の単語を入れると必要になる最低字数
    ws n = take n $ repeat ' ' -- n文字の空白
    p = div (n - count) wc -- 空白を均等割にするときの空白幅
    flushWithWS n = putStr $ drop n $ concatMap (ws n ++) $ reverse $ buffer -- n個の空白を挟みつつバッファを出力


main = do
  args <- map read <$> getArgs
  when (null args) $  putStrLn "Usage: cat file | format (number of letters per line)" >> exitSuccess
  dat <- words <$> getContents
  pretty 0 [] dat (args!!0)
```


試しにゲティスバーグ演説を66字幅で整形してみた。

```text
Four score and seven years ago our fathers brought forth on this  
continent, a new nation, conceived in Liberty, and dedicated to   
the proposition that all men are created equal. Now we are engaged
in a great civil war, testing whether that nation, or any nation  
so conceived and so dedicated, can long endure. We are met on a   
great battle-field of that war. We have come to dedicate a portion
of that field, as a final resting place for those who here gave   
their lives that that nation might live. It is altogether fitting 
and proper that we should do this. But, in a larger sense, we can 
not dedicate - we can not consecrate - we can not hallow - this   
ground. The brave men, living and dead, who struggled here, have  
consecrated it, far above our poor power to add or detract. The   
world will little note, nor long remember what we say here, but it
can never forget what they did here. It is for us the living,     
rather, to be dedicated here to the unfinished work which they who
fought here have thus far so nobly advanced. It is rather for us  
to be here dedicated to the great task remaining before us - that 
from these honored dead we take increased devotion to that cause  
for which they gave the last full measure of devotion - that we   
here highly resolve that these dead shall not have died in vain - 
that this nation, under God, shall have a new birth of freedom -  
and that government of the people, by the people, for the people, 
shall not perish from the earth.                               
```

まあ、それなり。
proxy経由のCloudWatch Monitoring Scriptの設定方法

#手順
scripts/aws-scripts-mon/CloudWatchClient.pmに下記を追加する

```Perl
my $proxy_url = "http://xxxxx:8080";
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
$ENV{HTTPS_PROXY} = $proxy_url;
#$ENV{HTTPS_CA_DIR} = '/etc/ssl/certs';
```
#参考
+ [Amazon CloudWatch Monitoring Scripts for Linux](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html)
watchOS 2 beta から正式版へのアップデート方法

[私のポートフォリオ的な Web サイトの記事](http://s.treastrain.jp/1FpFnFp)からテキスト文書のみを抜粋したものになります。
iPhone のスクリーンショット付きで見たいという方は[そちら](http://s.treastrain.jp/1FpFnFp)を閲覧することをお勧めします。

#watchOS 2 beta から正式版へのアップデート
##① iOS 9.0 以降にアップデートする。
まず、iPhone を iOS 9.0 以降にアップデートしてください。
[iOS 9 へのアップデート方法はこちらの記事](http://s.treastrain.jp/1UUHnXQ)で紹介しています。

##② Watch アプリを開く
iPhone の Watch アプリケーションを開きます。

##③ 一般をタップ
##④ プロファイル をタップ
##⑤ watchOS 2 beta をタップ
##⑥ プロファイルを削除 をタップ
##⑦ iPhone のパスコードを入力する
##⑧ 削除 をタップ
##⑨ プロファイルが削除されたことを確認する
プロファイルを削除中 という画面の後、
「現在インストールされているプロファイルがありません」と
表示されます。
##⑩ 通常のアップデートに進む
プロファイルの削除が完了すると、
通常のアップデートの手順と同じように
「ソフトウェア・アップデート」から
watchOS 2 にアップデートすることが出来ます。
トレイトをミックスインした無名クラスのインスタンスを試してみよう

## はじめに

トレイトをミックスインした無名クラスのインスタンスを紹介します。

コップ本などにも明記されていることなので、今更なぜそのような紹介が必要なのか不思議に思うかもしれません。

しかし、勘違いしやすいところかもしれないのです。

私が勘違いしていたように。。

## トレイトはインスタンス化できない

まず、トレイトはインスタンス化できません。

``` scala
trait Science
new Science // Error
```

これは問題ないと思います。

## 無名クラスのインスタンス化

これも問題ないと思います。

``` scala
new {}
```

## トレイトのミックスイン

これも問題ないと思います。

``` scala
trait Science
class Animal extends Science
new Animal
```

## トレイトをミックスインした無名クラスのインスタンス

こんな感じになります。

``` scala
trait Science
new Science {}
```

私は「トレイトのミックスイン」と勘違いしました。

``` scala
trait Science
new {} with Science
```

トレイトをミックスインするのだから、このようにwithの後にトレイトがあるべきだと勘違いしました。

しかし、これは間違いです。

これは事前定義があるトレイトです。

ちょっと分かりにくいのですが、上の例では無名クラスの本体が省略されています。

``` scala
trait Science
new {} with Science {}
```

## まとめ

トレイトをミックスインした無名クラスのインスタンスを紹介しました。

型クラスを使った拡張などをやろうとすると、トレイトをミックスインした無名クラスのインスタンスが必要になることがあります。

勘違いすることは稀かもしれませんが、Great catchを期待しています。
deviseの認証メール本文のリンクで ActionController::UnknownFormat

## 現象
deviseの認証メールの本文のリンクをクリックしたらActionController::UnknownFormatが発生した。

生成されたリンク:
http://localhost:3000/users/confirmation.5?confirmation_token=xxxxx

## 対策
app/views/devise/mailer/confirmation_instructions.html.erb

``` ruby
<%= link_to 'メールアドレスの変更を承認する',
            user_confirmation_url(@resource, confirmation_token: @token) %>
```
↓

``` ruby
<%= link_to 'メールアドレスの変更を承認する',
            controller: 'devise/confirmations',
            action: 'create',
            confirmation_token: @token %>
```
bundle exec rails serverでbin/rails:6: warning: already initialized constant APP_PATH



## 現象

`bundle exec rails server`を入力するとWEBrinkが起動しない。


## 解決までの道のり

* 以下を実行

```bash
rake rails:update:bin
```

* 以下のエラーがでる…

```
'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile
```


## 開発方法

* Gemfileに以下を追記

```Gemfile
gem 'mysql2', '~> 0.3.20'
```
* bundle installを実行

```
bundle install
```

* `bin/`以下を更新

```bash
rake rails:update:bin
```

```bash
bundle exec rails server
```

* 起動した！mysql2のバージョンアップに伴って、不具合が発生していると書いてありました。

## 参考

[Rails mysql2でrake db:createがエラー問題 - Qiita](http://qiita.com/shizuma/items/0f9660d5d46a0012eb9e)
Stackでyesodを使ってみる

# Stackとは
cabalを置き換えるようなものだと思えば良い。
詳しくは先人の皆様方の記事を見るのが手っ取り早く、かつ正確である。

「Haskellやったことないよ〜〜〜」という人はこちら

* [Stackでやる最速Haskell Hello world! (GHCのインストール付き!)](http://qiita.com/igrep/items/da1d8df6d40eb001a561)

「開発に至った詳細な背景etc.が知りたい…！」という人は、こちら

* [Haskellのビルドツール”stack”の紹介](http://qiita.com/tanakh/items/6866d0f570d0547df026)

# 実際にやってみる
とは言ったものの、[QuickStart](http://www.yesodweb.com/page/quickstart)の丸写しなんだけども…

## Stackのダウンロードとインストール
筆者の環境はMacなので、この場合は[公式ページ](https://github.com/commercialhaskell/stack/wiki/Downloads)から直接バイナリを落とす。
その上で、PATHの通っているところにバイナリをおけば良い。

公式サイトでは、Windowsなら```%APPDATA%\local\bin```、Macなら```$HOME/.local/bin```へインストールするようにと案内されている。また、Ubuntu・Debian・CentOS / Red Hat・Fedora・Arch Linuxではパッケージが提供されているので、この場合は何も考えず普段通りのことをすれば良い。

## Stackの実行
まず、```stack templates```で用意されているtemplateを確認する。
いくつか候補が出てくるので、```yesod-*```という名のtemplateのうちいずれかを選択して、```stack new```する。

```bash
# stack new PROJECT-NAME TEMPLATE 
# 以下、PROJECT-NAME = test、TEMPLATE = yesod-simple とする
$ stack new test yesod-simple
Downloading template "yesod-simple" to create project "test" in test/ ...
Writing default config file to: ***/stack.yaml
Basing on cabal files:
- ***/test.cabal

Checking against build plan lts-3.5
Selected resolver: lts-3.5
Wrote project config to: ***/stack.yaml
$ 
```
そして、次のコマンドを無心で叩けば良い。
いずれも、わりと時間がかかるのでお茶でも飲んで待とう。

```bash
$ stack install yesod-bin cabal-install --install-ghc
...
$ stack build
...
$ stack exec -- yesod devel
```
正常にyesodが起動すると、その旨がターミナルで通知され、yesodはアイドル状態に入る。
ターミナル上に表示されたURL（デフォルトで http://localhost:3000/ である）へアクセスすると、
![yesod.png](https://qiita-image-store.s3.amazonaws.com/0/35105/854607ca-b350-0d94-0642-13c844606af3.png)

正常にyesodが動いていることが確認できる。
なお、yesodを停止したい場合は、ターミナル上で```quit```と入力してEnterすれば停止する。
VirtualBox+Vagrant環境構築

VirtualBoxにVagrantを使って、CentOS環境を構築する手順の備忘録

各ソフト取得
--
VirtualBoxを公式サイトから導入
- https://www.virtualbox.org

Vagrantを公式サイトから導入
- https://www.vagrantup.com

1. 初期化 
--
コマンドプロンプト、またはターミナルを起動し、vagrantの初期化コマンドを実行する

```bash
$ vagrant init
```

2.  仮想マシンファイルのダウンロードを自動化する
--
テキストエディタを起動して、初期化時に生成されたVagrantfileを編集する。
ここでは、ダウンロードするアイテムをCentOS6.5に設定する
他OSの場合は( http://vagrantcloud.com/ )を参照。

```text
# config.vm.box = "base"
config.vm.box = "chef/centos-6.5"
```

3. 仮想マシンの取得と起動
--
以下のコマンドで、CentOS6.5環境のダウンロードと起動をする

```bash
$ vagrant up
```

初回起動時は、構成ファイルをダウンロードするので遅くなります。
２回目からはサクサク♪

__(注) windows端末でtimeout...のエラーが発生することがあります。これは、仮想化支援が無効になっているため、VirtualBoxの起動に失敗しています。そこで、コマンドプロンプトを管理者権限で起動し、以下のコマンドを入力して、仮想化支援を有効にします。__

_Windows限定_
仮想化支援の有効化コマンド

```bash
$ bcdedit /set hypervisorlaunchtype auto
```

元に戻す場合は、以下のコマンドを入力

```bash
$ bcdedit /set hypervisorlaunchtype off
```

4. 仮想マシンの操作
--
仮想マシンの状態を確認するなら、以下のコマンドを実行する

```bash
$ vagrant status
```

他のコマンドは公式サイト参照


5. sshでアクセスしよう
--
sshで仮想マシンにログインする

```bash
$ vagrant ssh
```

Windowsの場合、標準で備わっていないため、sshクライアントを別途用意する必要があります。
ちなみに、ssh環境がない状態で上記のsshコマンドを実行した場合、アクセス情報が出力されます。このアクセス情報を使って、sshクライアントから仮想マシンへログインしてください。

これでvagrantのセットアップ完了です。以上！