OmniAICreator/Qiita-1.07M huggingface dataset:
Xamarin.Forms.Labs機能紹介

> この記事は[Xamarin Advent Calendar 2014](http://qiita.com/advent-calendar/2014/xamarin)の12/14の記事です

みなさん
Xamarin.Forms使ってますか？

Xamarin.Forms色々便利なんですが
時々気が効かないところがあったり、この機能が足りてないとかします。

そんな時にはXamarin.Forms.Labsを見てみたら
これって機能があったりするかもです(後は少し弄れば使えそうな物があったりと)

せっかくのアドベントカレンダーなので
色んな機能のうち幾つか紹介していこうと思います。

追加コントロール
---------------
Calendar Control
=================
カレンダー！

![xfoms_calendar.png](https://qiita-image-store.s3.amazonaws.com/0/42898/f23a5c61-5dbf-14f0-74c9-d064749a17fe.png)

見たままです！カレンダーです。
FormsにはDatePickerがありますが、あれはリールで日付を選ぶ形で
誕生部選ぶにはいいかもしれませんが、予定等で日付を選ぶには不向きです
これだと、jQueryUIのカレンダーのような使い勝手で選べます
なんで本家に無いのか理解に苦しみます

Extended Label/Extended Entry
=================
本家Label/Entryの拡張で、主にフォントオプションが付いたものです。
デザインの都合やユーザーへの案内の都合でフォントを変えたい時に便利かなと思います

![xfoms_label.png](https://qiita-image-store.s3.amazonaws.com/0/42898/0f57abac-820f-3ad5-f63f-06e6adbcb2fa.png)

HybridWebView
===============
本家WebViewの拡張で、クリック時のコールバックやJavascriptの実行ができます。
見た目はただのWebViewなのですが、これをうまく使うとWebView内部のJSとC#側とでやりとりが出来るようになります

やりとりができて何が嬉しいかというと、Webアプリケーションとの合いの子みたいなアプリもXFormsで作れるようになります。

変更が激しい場所はWebViewで、XFormsが合うところはXFormsでという住み分けが出来るようにもなりますし、
工夫すればWebView内部のタップイベントでXForms側を操作とかもできます
(内部のコードは読んでもらう必要はあると思いますし、多分JS側に何らかのヘルパがあったほうが良い気がします)

コントロールを使うにあたっての注意事項
================

上記紹介したコントロール以外にもたくさんのコントロールがあります。(Wikiには20個書かれています)
これらは大体はiOS/Android両方で使えますが、いくつかはiOS専用だったり、コントロールは使えるけどこのプロパティーはAndroid専用だったりといった制限があります。

あとは使ってみて、もし「iOSでLabsのコントロールが表示されない」時は
以下の「おまじない」をAppDelegateに書くと表示されることがあります

```csharp
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
       Forms.Init();
       new CalendarViewRenderer();//おまじない
    }
```

この「おまじない」ですが
どうもLabsのiOSアセンブリ内のRendererがアセンブリごと抜け落ちているみたいです。
自作のコントロールライブラリも、アセンブリが別だと抜け落ちるので現状だと仕方ないのかなと思ってます。
(原因はiOSのAOTコンパイルじゃないかなと勝手に推測してますが、AOTなしのAndroid機を現状持ってないので検証できてません)

その他有用な機能
---------------

ざっと面白そうな機能を上げていきます

Services
=======
各種デバイスを使った機能をServiceという形で実装しています
Xamarin Formsではデバイス固有の機能はインターフェイスだけPCLに定義し、実装を各デバイスごとに定義する。という作りです。
このServicesは代表的な機能の実装です。(車輪の再発明いらない)

機能一覧
* 加速度センサー
* カメラ
* バッテリー等のデバイス情報
* 位置情報
* 電話機情報
* サウンド再生
* Text To Speech


MVVM helper類
==============

MVVMや"イケてる"設計をするためのクラス類もあります

* IOC

Xamarin FormsのDependencyServiceはUnityやAutofacといったDIコンテナライブラリと比べたら正直微妙。
ただ、デバイスごとの違いを吸収するためにIOCの機能は必要です。
なので、Xamarin.Forms.Labsは、UnityやAutofacといった既成のDIライブラリをXamarin.Forms.Labs用のIOCとして使うことができます。

* ViewModel, ViewFactory

簡易なMVVMフレームワークです
ViewModelとViewを対応づけることで、ViewModelから次のViewを表示できます。

メモ
--------
いろいろ便利機能があるXamarin Forms Labsですが
まだβバージョンかなーという感じです
うまく使いこなせばすごく便利なのは間違いないのですが
使いこなすにはコードよんだり動かしてみたりする必要があると思います。

活用事例増えていかないかなぁ。

Link
-----

* [Xamarin Forms Labs](https://github.com/XLabs/Xamarin-Forms-Labs)
* [Xamarin Forms Labs Wiki](https://github.com/XLabs/Xamarin-Forms-Labs/wiki)
かなりいい加減なAndroidエラー解決方法

Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running. If it's being used by something else, choose a new port number in the preferences.

Android Studioでプロジェクトを実行中に、Eclipseで違うプロジェクトを実行したらなった。
どうやらlocalhostないで同じportを使用している模様。どちらかのport番号かえればよかったのかもしれないがよくわからないので、Android Studioでプロジェクトの実行やめて、Eclipseで違うプロジェクトを実行したらできた。

-------------------
JSON Formでフォームや質問がお手軽に生成できますよ！　Webディレクターさん！

こんにちは、[Livesense Advent Calendar 2014](http://qiita.com/advent-calendar/2014/livesense) 14日目です。
皆さん、年末用のゲームはもう決めましたか？
おすすめはDragon Age InquistionとMETRO Reduxです。

### 日々要件が変わっていくアンケートフォーム

今年は業務ツールを作り続ける1年でした。
自分の所属する事業部では日々クライアント様やユーザ様の使い勝手や精度向上のために電話やメール等によるヒアリングを行っています。

と、なるとヒアリング内容をDBに入力するような作業が発生します。
もちろんこの項目は日々ブラッシュアップされていく訳で
新しくこういう項目を入力する場所が欲しいとか、逆にアレはもういらないとか発生します。

その度「じゃあ来季スプリントで検討しますのでチケットを作って下さい！　リリース？　まぁ見てて下さい。 来月の頭にはなんとかしますよ！！」では現場のスピード感的にも合いません。
「リリースされるまではメモ欄に隅括弧で〜」みたいなパワフルな運用が行われてしまいます。

### JSON Form

https://github.com/joshfire/jsonform
JSON Formはjson schemaを渡すとフォームを生成してくれるjQuery pluginです。
angularjsと連携した[angular-schema-form](https://github.com/Textalk/angular-schema-form)なんてのもあります。
動作サンプルはangularの[コレ](http://textalk.github.io/angular-schema-form/examples/bootstrap-example.html)なんかがわかりやすいと思います。

```html
<script type="text/javascript" src="deps/jquery.min.js"></script>
<script type="text/javascript" src="deps/underscore.js"></script>
<script type="text/javascript" src="deps/opt/jsv.js"></script>
<script type="text/javascript" src="lib/jsonform.js"></script>
<script type="text/javascript">
$('form').jsonForm({
  schema: {
    name: {
      type: 'string',
      title: 'Name',
      required: true
    },
    age: {
      type: 'number',
      title: 'Age'
    }
  }
});
</script>
```

![form.png](https://qiita-image-store.s3.amazonaws.com/0/54564/964735ef-32d5-73f7-06ab-202095ce1512.png)
上の例ではこんなフォームができるわけですね
ちゃんとNameはrequiredだし、Ageは数字じゃないとバリデートされます。

### よし！あとは適当なデータからjsonさえ生成できればOKだ

[ドキュメント](https://github.com/joshfire/jsonform/wiki)を見ればinput:text以外のプルダウンやらチェックボックスやらテキストエリアやらなんでも作れることがわかります。

あとはもう楽勝ですね。
「クライアントへのヒアリング内容を保存するフォームに『使い勝手はどうでしたか？』という項目を追加したいです。
プルダウン形式で『未回答』『よい』『ふつう』『わるい』を選択できるようにして下さい」
みたいな依頼もこんな風に入力して、
![inputform.png](https://qiita-image-store.s3.amazonaws.com/0/54564/6f6c10ad-7a44-3b9c-28a8-520092db4f50.png)
それをいい感じにjson schemaに変換して

```json
question1: {
    title: "使い勝手はどうでしたか？",
    type: "string",
    enum: [
        "未回答",
        "良い",
        "普通",
        "悪い"
    ]
}
```
jsonformに食わせたらこんなformが表示されます。
![outputform.png](https://qiita-image-store.s3.amazonaws.com/0/54564/6b0806f2-8537-a9eb-b6ba-1d16a6fedef6.png)
この「フォームの項目が増える程度でコードを触る必要ないだろ？　schemaはデータだ」感が素敵です。


### とはいえ問題も結構……

jsなので悪意を持って弄くられたらどうにもなりません。
あと、上の例だとバリデーションがされてません。
細かく設定しようと思うと項目を追加するフォームをごちゃごちゃさせるか、
もしくは項目を追加する人がjson schemaを書ける必要があるのでお手軽運用できるか微妙です。
更に、DB schemaとJSON schemaはもちろん対応してないのでデータの保存はkeyvalueとかスキーマレスな感じになってしまいます。
結局分析する時に大変だったりして……、それ、SurveyMonkeyでいいんじゃないか……。

スピードが重要だったり項目がコロコロ変わる場合などで、社内で限定的に使う分にはお手軽でよいなぁーと思ってます。
時間があればちゃんと作った方が良いですね。
Android Studio プロジェクト構成を理解して読み解いてみる

　書籍とかから手に入れるサンプルプロジェクトを読み解くときに、構成がわからないと萎えてしまうので基本的にプロジェクト構成を理解してみます。

　とりえあず、適当なHellorWorld的なプロジェクトを作成してみました。Blank Activityを選択して作成しました。
![android_studio_project.png](https://qiita-image-store.s3.amazonaws.com/0/17192/97128125-9ea3-57c1-2b2f-0f2d23dadb29.png)
Gradle ScriptsはEclipseプロジェクトにはなくてAndroidStudioで追加されたものなので、よくわからないため割愛します。当分は手を入れていじるとかはしないと思われます。

# Manifests
　まずプロジェクトを理解するに当たってマニフェストファイルはみるのがいいです。
なぜならここにはアプリのエントリポイント(アプリを起動したとき最初に起動する画面)が記述されているからです。
 XML形式で記述されていますが、とりあえず知っておくべきところは「intent-filter」です。

```html
<activity
    android:name=".HelloWorldActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
```

このように「android.intent.action.MAIN」と「android.intent.category.LAUNCHER」が設定されているactivity(このintent-filterタグをの親タグ)がエントリポイントになります。

# エントリポイント
![enrty_point.png](https://qiita-image-store.s3.amazonaws.com/0/17192/a4a7e0b2-7ac7-f788-b7fc-bb963d5cd35a.png)
　マニフェストファイルより「HelloWorldActivity」がエントリポイントとわかりました。これは上記画像の「HelloWorldActivity」がそれにあたります。
　このファイルはjavaのソースになります。主にこのjava以下のファイルを編集していくのがアプリ作成の作業になります。
　例によって色々書いてありますが、とりあえず知っておくべきのは「onCreate」メソッドからプログラムは開始されます。

```java
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
    }
```

setContentViewの引数でレイアウトを指定しています。ここでレイアウトが画面に描画されるわけです。
このレイアウトはなにかというと⬇で説明します。

# レイアウト
![layout.png](https://qiita-image-store.s3.amazonaws.com/0/17192/4ac4db7e-d4ce-8855-3a04-6a96bddf33c8.png)
　setContentViewの引数で描画されるレイアウトファイルは上記画像のactivity_hello_world.xmlファイルになります。

こんなもんでいいでしょう＾＾

# 追記
実は今回デフォルトの「Android」形式のプロジェクトで表示していました。
![android_project.png](https://qiita-image-store.s3.amazonaws.com/0/17192/6591d858-6c99-003b-8e9f-3926ea32564a.png)

従来通りの「Eclipse」形式のプロジェクトで表示することもできます。
![eclipse_project.png](https://qiita-image-store.s3.amazonaws.com/0/17192/f23558bb-7de3-ae49-7106-0c4140ebb882.png)
sunspot_solrを使ってインデックスを作成する場合の注意点

# 1. はじめに

solrを使って全文検索を高速化する際に，
インデックスを張る段階でこけたのでメモ．

環境は以下．
rails(4.1.8)
sunspot_rails(2.1.1)
sunspot_solr(2.1.1)

# 2. インデックス

モデルのサイズによっては，

```rb
rake sunspot:reindex
```

のみでは途中で終了する場合がある．

```rb
rake sunspot:reindex[size]
```

として，サイズを指定した場合は正しくインデックスが張れた．
自分のケースだと150万レコード程度で強制終了していた．
Twitter Kitを使ってTweet一覧を取得する

2014/10に発表された[Fabric](https://dev.twitter.com/products/fabric)に[Twitter Kit](https://dev.twitter.com/twitter-kit/overview)というAndroid用公式TwitterSDKが入っています。
今まで[Twitter4j](http://twitter4j.org/ja/)を使ってやっていたところを簡単に実装できていい感じです。特にログイン周りは、Twitterクライアントとシームレスに連携できるので気持ちいいです。セッションまわりもSDKが全部面倒見てくれます。

[導入](https://dev.twitter.com/twitter-kit/android/integrate)や[ログイン](https://dev.twitter.com/twitter-kit/android/twitter-login)は公式ドキュメントを見てやれば問題ないと思うので割愛するとして、Tweet一覧を取得する方法をメモしておきます。

#ログイン後にREST APIにアクセス
ログイン状態であれば、SDK経由でREST APIにアクセスできます。
Tweet一覧を取得するAPIは[GET statuses/home_timeline](https://dev.twitter.com/rest/reference/get/statuses/home_timeline)です。
これを、Twitter Kitから呼び出します。

#RetrofitベースのAPI呼び出し
Twitter KitはAPIへのアクセス基盤として[Retrofit](http://square.github.io/retrofit/)を採用しています。RetrofitはREST APIをすごくシンプルに呼び出せます。

Tweet一覧を取得するコードはこんな感じです。

```java
TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
// statusAPI用のserviceクラス
StatusesService statusesService = twitterApiClient.getStatusesService();

// homeTimelineを呼ぶと、CallbackでTweetのリストが返ってきます。
statusesService.homeTimeline(10, null, null, false, false, false, false,
    new Callback<List<Tweet>>() {
        @Override
        public void success(Result<List<Tweet>> listResult) {
            for (Tweet tweet : listResult.data) {
                // 
            }
        }

        @Override
        public void failure(TwitterException e) {
            //
        }
    });
```

#`homeTimeline`の引数
`homeTimeline`に引数がたくさんあって戸惑うと思うので、簡単に説明します。基本的には[リファレンス](https://dev.twitter.com/rest/reference/get/statuses/home_timeline)のとおりです。

| No | Parameter           | type    | Description |
|:--:|:--------------------|:-------:|:------------|
| 1  | count               | Integer | ツイート取得数。 |
| 2  | since_id            | Long    | 最小tweet_id。このIDより未来のツイートを取得する。指定しない場合は`null`。`0L`を指定するとエラーが変えるので注意。 |
| 3  | max_id              | Long    | 最大tweet_id。このIDより過去のツイートを取得する。指定しない場合は`null`。`0L`を指定するとエラーが変えるので注意。
| 4  | trim_user           | Boolean | レスポンスのユーザー情報をtrimするかどうか。 |
| 5  | exclude_replies     | Boolean | レスポンスのリプライ情報を取り除くかどうか。 |
| 6  | contributor_details | Boolean | `status response`に入る情報をにscree_nameなども含めて返すようにする。 |
| 7  | include_entities    | Boolean | `entities node`を含めるかどうか。
機械学習の学習とWolframAlpha


皆さん、機械学習の勉強って楽しいですけど、正直キツくないですか？
何がキツイって、結局のところ数学なんじゃないかと思います。

数学があまり強くない自分は、RやPythonで可視化してみたり、実装してみたり、単純に情報をググってみたりすることが結構多いですが、僕がもう一つやる選択肢が、Wolfram Alphaで数式や関数、分布を検索することです。
これがあまり有名じゃないみたいなので紹介します。

## Wolfram Alphaとは

http://www.wolframalpha.com/


自分は、「統計情報や数学的な理論などの、事実を探せる検索エンジン」と認識しています。Webではなく、膨大なデータベースと数学処理エンジンに問い合わせをしている感じです。


ただ、彼らが作っているaboutページには、
http://www.wolframalpha.com/about.html

例えば「Tokyo」を検索すると、人口や地図上の場所、面積、現在の時間や気候、著名な人や会社などが次々に出てきます。
http://www.wolframalpha.com/input/?i=tokyo

![wolfram_tokyo.png](https://qiita-image-store.s3.amazonaws.com/0/6664/b7f32687-ecd0-4d07-76c3-38addd91914b.png "wolfram_tokyo.png")

他にもいろんな事が検索できるので、彼らが用意してくれている例の一覧を見てみると良いです。
http://www.wolframalpha.com/examples


ちなみにこのエンジン、[Mathematica](http://ja.wikipedia.org/wiki/Mathematica)の生みの親Stephen Wolframが2009年にリリースしたもので、数百万行のMathematicaのコードで出来ているらしいですw

## Wolfram Alphaを利用する

### Lpノルムを書いてみる

例えばSVMを勉強していてL1正則化、L2正則化とか勉強していた時、Lpノルムという概念が出てきます。ググると[Lp空間](http://ja.wikipedia.org/wiki/Lp%E7%A9%BA%E9%96%93)というWikipediaページが最上位に来ます。

この時、L1, L2, L∞, L(2/3)のグラフについては書いているのですがL(1/2)とかL4とか知りたいなと思ったらWolfram Alpha先生で以下のクエリを投げます

![wolfram_l12.png](https://qiita-image-store.s3.amazonaws.com/0/6664/2b58ebd5-ed37-23c5-795e-14117eae9671.png "wolfram_l12.png")

http://www.wolframalpha.com/input/?i=%28%7Cx%7C%5E%281%2F2%29%2B%7Cy%7C%5E%281%2F2%29%29%5E2%3D1

ご丁寧に、yについても解いてくれちゃってます。

### ベータ分布ってどんな分布だっけ？

後よく出てくるのに正規分布、ポアソン分布、ベータ分布とか分布が出てきたりします。ググるのも良いですが、例えばベータ分布で検索する(本来は英語で検索したほうがいいですが、簡単なものなら勝手に訳して検索してくれます)と

![wolfram_beta_dist.png](https://qiita-image-store.s3.amazonaws.com/0/6664/524a972a-4fb4-5b49-5c58-0e11b25391e2.png "wolfram_beta_dist.png")



http://www.wolframalpha.com/input/?i=%E3%83%99%E3%83%BC%E3%82%BF%E5%88%86%E5%B8%83

ベータ関数とは違うんだよね？？とか思ったら

[beta function](http://www.wolframalpha.com/input/?i=beta+function)で検索したり、[beta(x,y)](http://www.wolframalpha.com/input/?i=beta%28x%2Cy%29)と入力したりしてみると良いです。

![wolfram_beta_xy.png](https://qiita-image-store.s3.amazonaws.com/0/6664/82be87cd-48ea-edc6-0cac-8750f5301f2c.png "wolfram_beta_xy.png")

### 他にも

[sin(x)をテイラー展開](http://www.wolframalpha.com/input/?i=taylor+sin%28x%29)してくれたり、
ちょっと難し目な[sin(log(x))](http://www.wolframalpha.com/input/?i=sin%28log%28x%29%29)のグラフ描画や微分積分をやってくれたり。
Rとか開く前に、ここで何とか出来ないかなってやってみるといいことがあります。

## ちなみに

有料(約300円)ですが、アプリもあるみたいです。 => [iOS](https://itunes.apple.com/jp/app/wolframalpha/id334989259?mt=8), [Android](https://play.google.com/store/apps/details?id=com.wolfram.android.alpha&hl=ja)

最近、[Wolfram Language](http://www.wolfram.com/language/)というのを出したみたいです。すごいです。いろんな機械学習も出来ます。 => [デモ動画](https://www.youtube.com/watch?v=_P9HqHVPeik)
証明された Common Lisp / Emacs Lisp コードを手に入れる

対話的定理証明系 [Coq](https://coq.inria.fr) では、それ自身でプログラムを書き、性質を証明し、証明したコードを Haskell, OCaml, Scheme といった言語のプログラムとして抽出（Extraction）することができる。

しかし、 Lisp 系の言語で実用的なプログラムというと、 Common Lisp や Emacs Lisp で書かれることが多いのも事実である。

ということで Coq to Scheme Extraction で生成された Scheme コードを Common Lisp や Emacs Lisp （24.1 以降）としても読めるように変換するプログラムを作ってみた。

https://github.com/leque/coq-to-lisp

（変換の仕方は、同様のことを Coq 本体を改造して実現する話を [ProofSummit 2014](http://proofcafe.org/wiki/Schedule/ProofSummit2014) でしたので、そのときの[スライド](http://www.slideshare.net/dico_leque/proof-and-emacs-38766692)を参照のこと）

変換プログラムは R7RS Scheme で書かれている。例えばリポジトリ内の `example.v` をコンパイルして、それを Common Lisp から使う場合には、以下のようにする（ここでは処理系として [chibi-scheme](https://code.google.com/p/chibi-scheme/) を使った）。

```
% coqc example.v
% chibi-scheme unscheme.scm example.scm example.lisp
```

これで、 Scheme 版の `example.scm` を経由して、 `example.lisp` として Coq の関数が抽出される。このファイルを実行するための補助マクロはリポジトリ内の `macros_extr.lisp` に定義されている（Emacs Lisp の場合は `.lisp` を `.el` に読み替える）。

例えば SBCL を使って次のようにして抽出された関数を実行してみることができる。

```
% sbcl --load macros_extr.lisp --load example.lisp --script test.lisp
```

Coq から Extraction されたコードを使う話としては、 Coq で書かれたソート関数を Standard ML から使う、[SMLでソート - チラシの裏](http://fetburner.hatenablog.com/entry/2014/12/07/222951)の記事が参考になるだろう。

また、実際に Extraction されたコードがどのようになるか見てみたい場合は、 Coq から Erlang を Extraction してみる、 [Verlang と Coq の Extraction について - Qiita](http://qiita.com/amutake/items/db595761435c01356e88) の記事も参考になる。

# まとめ

* Coq to Scheme Extraction で抽出された Scheme コードを Common Lisp / Emacs Lisp としても読めるように変換するプログラムを書いた
* 上記変換をしたコードを Common Lisp, Emacs Lisp として実行するための補助マクロを書いた

Coq 自体を改造して Extraction されるコードを変更する方法では、 Coq 本体の変更に追従するのが面倒だったり、そのために、 Coq のバージョンに依存したコードを Extraction するのが面倒だったりという問題があった。

今回の変更でより手軽に証明された Common Lisp / Emacs Lisp プログラムが手に入るようになったと思う。
screen

# 折り返しを無効

* `C-a r`

# デタッチモードで起動

* 参考: [Screen 使ってDaemon起動 - swordheartの日記](http://d.hatena.ne.jp/swordheart/20080618/1213768911)

```bash:crontab
@reboot (screen -dmS ircbot ~/bin/ircbot.rb)
```

* -d -m : screen  を detached モードで起動する。
* -S : セッション名の指定

```bash:再接続
screen -r ircbot
```

```bash:強制終了
screen -S ircbot -X quit
```

----

# シリアル接続の表示が狂った場合の直し方

## 対処

```
sudo killall screen
```

## シリアル接続方法

```bash:
sudo screen /dev/ttyS0 9600
```

## 問題の再現方法

機器によっては`^a`が喰われてscreen終了できない。
とりあえず端末をそっと閉じる。

で、そのことに忘れて新たに同じのを起動すると出力が半分しかされなくなったりする。
(今月５回位経験した)
MySQLに関する新人研修のカリキュラム概要の紹介

# 背景
今年は、2014年4月に入社した方々への研修を担当しました。
既にWebアプリケーションの開発経験がある人も居ましたが、MySQLを全く知らなくても大丈夫な内容にしようと考えました。

「SQLの基本」は、[改訂新版 反復学習ソフト付き SQL書き方ドリル]( http://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-%E5%8F%8D%E5%BE%A9%E5%AD%A6%E7%BF%92%E3%82%BD%E3%83%95%E3%83%88%E4%BB%98%E3%81%8D-SQL%E6%9B%B8%E3%81%8D%E6%96%B9%E3%83%89%E3%83%AA%E3%83%AB-PRESS-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774130850)を参考にして資料を作成しました。
この本はRDBMS全般を扱っており、MySQL以外のDBについての記述もあったため、資料作成時にMySQL用に編集したり、当日説明する際に補足することでカバーしました。
※ 資料は、一応Confidentialなもので、公開許可を受けていないため、今のところ非公開です

全体を通して、SQLの解説の後、実際にMySQLを触ってもらう事を繰り返して、資料を進めて行きました。
全部で半日くらいです。

# SQLの基本
* SELECT
    * データを取り出す
    * 列の演算
    * 集合関数
* 絞り込み
* WHERE
* ORDER BY
* HAVING
* サブクエリ
* JOIN
* INSERT
* UPDATE
* DELETE

# MySQLの操作
[MySQL Reference Manuals](http://dev.mysql.com/doc/)を参考にしつつ、日々仕事で運用していて必要だと思った内容を詰め込みました。

* データ定義
    * CREATE/DROP DATABASE
    * CREATE/DROP TABLE
    * CTEATE INDEX
* 権限
    * GRANT
    * REVOKE
* SHOW
    * SHOW GRANTS
    * SHOW PROCESSLIST
    * SHOW VARIABLES
* FLUSH
* ALTER TABLE
* レプリケーション
    * SHOW MASTER STATUS
    * SHOW SLAVE STATUS
    * CHANGE MASTER TO

# やりたかったけどやれなかったこと
## チューニング
重いテーブルをEXPLAIN使って原因を見つつ、クエリ改善をさせたかったのですが、準備時間が取れず、[漢のコンピュータ道](http://nippondanji.blogspot.jp/)の紹介で終わりました。

## テーブル設計
INDEXが効くように、とか、Immutable Data Modelingのあたりを入れたかったのですが、チューニングと同様にできませんでした。

# まとめ
2015年の新人研修の参考にして頂ければ幸いです。
d3.jsで参考にしてきたデータの見せ方とストーリー


## はじめに
かれこれd3.jsつかってから1年近く経ちました。
それほどd3.js力は上がってませんが、d3.jsの出会いで人生レベルで色々変わってきたこの１年だったと思います。

そんなd3.jsは何がすごいって、
テンプレートじゃないからできるインタラクティブな表現力だと思います。
ただ、d3.jsの表現力もただ表示しただけでは効果は半減です。
動かない・ストーリのないグラフだったらエクセルやパワポのグラフでもいいはずです。

エンジニアだとついつい、中身の作りばかりに意識がいくこともあると思うのですが、
データをどう見せるか！これが最も重要だと思います。
そんなデータの見せ方で参考にしてきたものを紹介していきます。

## Four Ways to Slice Obama’s 2013 Budget Proposal

ちょっと古いですが、オバマ政権の2013年度の予算をどう使うかを可視化したものです。

> http://www.nytimes.com/interactive/2012/02/13/us/politics/2013-budget-proposal-graphic.html?_r=0 

### 1ページ目 全体を俯瞰
予算の大きさは全体でどのくらいなのかがこのグラフ１枚でパッとわかります。
さらに昨年度よりも予算を増やした部分が緑、減らした部分が赤となっており、
2012年度との違いもはっきりしてきます。

![スクリーンショット 2014-12-13 23.32.16.png](https://qiita-image-store.s3.amazonaws.com/0/19316/a159b7d4-2689-f669-f8a1-b026d5275d2a.png "スクリーンショット 2014-12-13 23.32.16.png")

### 2ページ目 支出の種類でこの提案での特徴

左側が法律によって決まっている予算、右側が裁量を持って決められる部分の予算になります。2013年度では裁量のある部分で軍事的な予算を2012年度より減らす傾向にあることがわかります。

![スクリーンショット 2014-12-13 23.43.59.png](https://qiita-image-store.s3.amazonaws.com/0/19316/69f63b5b-8822-9a06-bb2a-4d039c895cda.png "スクリーンショット 2014-12-13 23.43.59.png")

### 3ページ目 裁量ある予算の詳細

先ほどの円の大きさと色だけでは、表現としてはわかりづらいため、
縦軸を前年比の増減にし、さらにわかりやすくしています。

![スクリーンショット 2014-12-13 23.50.41.png](https://qiita-image-store.s3.amazonaws.com/0/19316/8596971a-111b-470f-8e55-f490ed0f79d4.png "スクリーンショット 2014-12-13 23.50.41.png")

### 4ページ目 最後に分野別の予算

最後に分野別に予算を細かく表示し、
各分野でどのくらい使っているのか、増減の傾向がわかり、
この予算案の方向性がはっきり見えてきます。
![スクリーンショット 2014-12-13 23.53.10.png](https://qiita-image-store.s3.amazonaws.com/0/19316/9203ba84-bc76-1ddb-1faa-4a3757a97d37.png "スクリーンショット 2014-12-13 23.53.10.png")


## The Facebook Offering: How It Compares
　
> http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html

![スクリーンショット 2014-12-13 23.57.22.png](https://qiita-image-store.s3.amazonaws.com/0/19316/bd0d8cf1-8fae-9ca3-bce2-b83d3bd0cf20.png "スクリーンショット 2014-12-13 23.57.22.png")

## おわりに

うーん。
今回はオバマ政権の記事だけの紹介になってしまいすみません。
前置き書くだけでわりと時間がなくなってしまいました。

Facebookもすごく参考にしています。
公表できるデータでストーリのある可視化やりたいですね〜
SoftLayer ポータル運用のコツ（ユーザー管理編）

本文献は SoftLayer Advent Calendar 2014に投稿してます。
http://qiita.com/advent-calendar/2014/softlayer

SoftLayerのユーザ管理について説明します。
Softlayer運用においては、複数人で環境取り扱う場合が頻繁にあります。
管理者は、その際にメンバーごとのログインIDを発行します。

セキュリティにおいても重要な設定項目ですし、サービス開始時に必ず取り扱う項目かと思います。
**以外に問合せが多いため**、以下取り纏めてみました。
ここでは簡単にSoftLayerのユーザ管理の設定内容について説明します。

※2014年12月13日現在の情報です。
　ご利用になるタイミングでは表示が異なる場合があります。適宜読み替えてご活用ください。

#1. ユーザ管理の目的

システム管理者がポータル機能や、稼働しているサーバー、ストレージ、ネットワークに対して、正しく制限しユーザへ公開する必要があります。
初期のセキュリティ設計、運用設計においても重要な役割と考えます。

#2. 利用シーン
* 特定サーバにのみSSL-VPNで接続できるIDを発行する（SSL-VPN接続は、同時に同一IDでに接続できません。利用するメンバー分のIDを発行をするケースがあります）
* 運用チームにポータル機能（一部）を利用させたい
* 管理者IDとは別に、他のメンバーに管理者権限を付与する
* 決済情報だけを特定の部署に公開する


#3. ユーザ追加設定
 **前提**：ユーザー追加する権限を持っているIDでログインすること
　
**3-1.ユーザー追加**
　・操作はポータルメニュー User-Accountの右上[Add User]よりユーザを追加します。
　　![1.png](https://qiita-image-store.s3.amazonaws.com/0/59647/6b3de767-906b-e6ee-6eef-1bef7073300a.png)


**3-2.Profile**
　・ID情報を入力します。
　　UsernameがログインIDとなります。必須項目をすべて入力します。
　　![2.png](https://qiita-image-store.s3.amazonaws.com/0/59647/66ba15ad-d1a3-01a1-43b5-369bc9ac9566.png)





**3-3.Permission**
　・Permissionは、サポート、デバイス、ネットワーク、セキュリティ、サービス、
　　アカウントの**５つの設定※（以下概要を参照）**があります。
　　簡易的に進めるのであれば、[Quick Permissions]で推奨される項目をチェックするだけです。

　　![2.2.png](https://qiita-image-store.s3.amazonaws.com/0/59647/d0ad70ab-9dd9-779b-c1a2-e5d66669cf27.png)



**3-4.ユーザー登録後に・・・**
　・SSL-VPNやサーバ利用許可する設定、サーバ接続許可設定は必要に応じて設定ください。
　　項目3-1図の[Device Access]、[VPN Access]より機能を有効にします。



**※５つのPermission設定**
　　![8.png](https://qiita-image-store.s3.amazonaws.com/0/59647/1806489b-a3ae-40dc-da6d-5c90240e39bf.png)


#4. まとめ
 SoftLayerのユーザー管理に限らずですが・・・

  * テンポラリで作成したIDは、利用後に削除する
  * 別途管理台帳（DBやワークフロー）なども社内のシステムに組み込むと、なお良い
  * 定期的なパスワード変更を行う
  * よりセキュリティを高めるために２要素認証を活用する
PHP歴8ヶ月の自分がPHPについて考えてみる

この記事は，[PHP Advent Calendar 2014](http://qiita.com/advent-calendar/2014/php) 14日目の記事です．

私は今年大学を卒業し，事業会社に就職した新米PHPerになります．

元々大学時代は，Javascriptをメインに書いており，PHPをほとんど書いたことがない状態で職につきました．
そこで「PHPってこんな言語なんだー」と思うことがあったので，振り返りの意味を込めて，それらをランキング形式で記述していきたいと思います．
(※あくまでも4月〜12月14日までも私の経験が元になっているので，ツッコミ大歓迎です！)
(※他の言語では，こんな感じ！というツッコミもお待ちしています！)

## 第3位 チェック用の関数が多い(empty, isset, is_null)
第3位は，「チェック用の関数が多い」です！

```php
<?php
    $var = 0
    $arr = array();
    $n = null;

    if(isset($var)){
        //true
    }elseif(empty($var)){
        //true
    }elseif(is_null($var)){
        //false
    }

    if(isset($arr)){
        //true
    }elseif(empty($arr)){
        //true
    }elseif(is_null($arr)){
        //false
    }

    if(isset($n)){
        //false
    }elseif(empty($n)){
        //true
    }elseif(is_null($n)){
        //true
    }
```
これらの関数には，始めはすごく混乱しました．
特にempty関数は，trueと判定されるものが多くしっかりとチェックする関数を選ばなければ，予期せぬエラーが発生すると感じました．

## 第2位 スコープ
第2位は，「スコープ」です！
JavaScriptではスコープチェーンにより，意識して変数定義を行っていたんですが，PHPは定義されているコンテキスト内がスコープのため，書き始め頃はコード内のあらゆる場所に変数定義を行ってしまっており，かなりわかりにくいコードを書いてしまっていました．

## 第1位 PHPファイル内にめちゃくちゃHTMLを書き込める
第1位は，「PHPファイル内にめちゃくちゃHTMLを書き込める」です！

PHPは「Hypertext Preprocessor」という名のごとく動的にHTMLデータを生成することによって，動的なウェブページを実現することを主な目的としたプログラミング言語です．(wiki調べ)

当初は，この機能性がすごく便利なものだと思っていたんですが，HTMLの要素が肥大するごとにソースがスパゲティになってしまい，可読性が悪くなってしまいました．(まぁビュー部分にロジックを持ち込むなというはなしですが…)

このPHPの特性は便利な反面，きちんとした形で利用しなければならないと深く感じました．

## 総評
まだ，PHP歴8ヶ月あまりですが今後もPHP力を高めていきたいと思いますので，今後共，PHP界隈のみなさんよろしくお願いします！

## 参考資料
- [PHP:HypertextPreprocessor](http://ja.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor)
- [PHP型の比較表](http://php.net/manual/ja/types.comparisons.php)
第1回 Scala関西勉強会

### はじめに
2014/12/13，本日関西のScala界隈を活性化させたいという@aa7thさんのアツい思いから，第一回Scala関西勉強会が開催されたので，本稿ではその参加報告をしたためる．
以下，セッションのメモ．ひどい乱文なので，ざーっと見る程度でお願いしたい．
私もLT登壇を行った．よい機会を頂き，ありがとうございました．

DoorKeeper:
http://connpass.com/event/10091/

本稿により一人でも次回参加者が増えれば幸いである．

####@aa7thさん：Scala超入門
資料：http://t.co/s7MIJ2s7W6
Scalaの特徴について紹介．

* メリットとデメリット
メリット：コードが短い
デメリット：コンパイルが遅い

* 始め方
  JDKもって
  1. Scalaインストール
  2. Activatorインストール

* 色々リンク
  bit.ly/scala_kb/

* Scalaっぽいコード書くにはまずはコレクション操作
    絞り込みたいときにはfilter，変換したいときはmapとか
    この操作したいときはこれ！というコレクション操作のパターンを知っておくと便利

    val list = Range(1,10).toList
    //奇数だけのリスト生成
    //前0をつけた文字列に変換したリストを生成
    list.filter(_%2!=0)
      .map(n => s"00$n")    
    //結果
    List[String] = List(001, 003, 005, 007, 009)



* パターンマッチ
  if/else if じゃなくて match文を使う
  型でマッチングもできる．String型のときはこの操作とかint型のときはこの操作とか

* nullはあかん
  そういうときは，Option型を使う．
  具体的には →　Some(x)値があるとき Noneをつけて値がない時とする
  get getOrElseで値を取り出す
  パターンマッチで値があるときと無い時の処理を書ける

クソコードでもいいから書く←むっちゃ大事

#### @naoki_wadaさん：パターンマッチングについて 
Slideshare: http://t.co/QfYyB9Q7SW

* 小ネタ
　一ヶ月前にscala2.11で　scala -Dscala.colorでREPLがシンタックスハイライトに！

* 以下でパターン列挙

1.ワイルドカードパターン
  "_"←これがワイルドカード
  Javaのswitchでいうdefault
  引数に(_, _, _）←引数なんでもいいから3つ

2.定数パターン
  Javaと違っていろいろなパターン使える

3.変数パターン
  Somethingelse　動き的にはワイルドカードと同じでもマッチした値を変数に 束縛 する
  * ちょっとおまけ
    先頭が大文字 = 定数
  　　　　小文字 = 変数（ワイルドカード）あり

4. コンストラクタパターン
  case classってなんだ　クラスの定義をするときにcase修飾しをつける
  →newしなくても定義できる

5. シーケンスパターン
  List(0, _, _）→固定数
  List(0, _*)→先頭だけを評価する

6. タプルパターン
  タプル：一個の入れ物に型の違うものを入れれる

7. 型付パターン
  def hoge(x:any) =
    x match{
      case s: String => s.length
      case m: Map[_, _] => m.size
      case _～～～
    }

8. パターンガード

9. シールドクラス
  sealedってつける

10. 変数の束縛


* その他

case class以外で使いたい場合
  抽出子： unapplyってつける

コップ本 26章に詳しく書いてある．読書会もやってる
http://t.co/pja0uFiiiO


#### @hayasshiさん：ScalaDBライブラリ紹介
資料：https://t.co/dmjomvGxsz
コード：https://t.co/q9leRThLuZ
* 今回の環境
  JDK7u72
  Scala 2.11.4
  sbt 0.13.5

* 紹介ライブラリの基準
  DBにh2DBが入っとる
  ソースを修正せずに扱うDBを切り替えられる

* Anorm
  そんなものはない
  play!2.4でslickに．それまではAnorm
  これからってところではもう候補にあがらない

* Slick
  Typesafe社が管理するORMライブラリ
  MySQLやらOracle，Postgreもいける

* Slick導入
   sbtに
    libraryDpencies ++= Seq{
      "com.typesafe.slick" =～～～
    }
    って書く．

* Slick利用準備（ORM定義）
        nullを扱うときはOptionで括る


* Slickその他
      Joda-デフォルトで対応してない
      play!2.4からslickが標準

ScalikeJCBCとかもある．

// 以降ほぼメモなし．
// 話聞くのに必死でメモの余裕がありませんでした

#### @mumoshuさん：play2-memcached　モジュールとか
資料：http://www.slideshare.net/mumoshu/20141213-1scala-play2memcachedsupportsplay24howtocreateplay24module
  play2.4からmoduleで拡張する（2.3までは拡張したければpluginやった）

* 覚えておくこと
  play.api.inject
  play.api.cache.cacheAPIは覚えておく

* cacheAPI: play2のキャッシュが満たすべきインタフェース
  2.3まで set get remove
  2.4から set get remove getOrElse：値があれば取得，なければ値を指定したデフォルト値で更新して返す

* ApplicationLifecycle
  memcachedのリソース解放する子

* inject.Module
  バインディングの集合体

####@plum_shigaのLT
vimでのScala開発環境について．後日，Qiitaにて投稿致します．
playframeworkでPolymerを使ってみる（導入メモ）

<small>なんかWindowsでplayframework を run すると main が見つからないと怒られ、macだと問題なく動く・・・</small>


# Polymerとは
話題のMaterial Designを提供するフロントエンドフレームワークです。
https://www.polymer-project.org/

# 準備

## playframework
`activator new`
でプロジェクトを作成。

## polymer
基本的には
https://www.polymer-project.org/docs/start/getting-the-code.html
に従います。(bowerでやりました)
playframeworkで使用する場合にはpublic配下に全部ぶち込みましょう。

### 配置

![スクリーンショット 2014-12-13 23.27.56.png](https://qiita-image-store.s3.amazonaws.com/0/39243/5cccb3dc-55ea-9c00-88e8-707f210797e2.png)


# 使用方法

main.scala.htmlに以下の通り記述します。

```scala:main.scala.html
<script src="@routes.Assets.at("bower_components/webcomponentsjs/webcomponents.min.js")" type="text/javascript"></script>
<link rel="import" href="@routes.Assets.at("elements/my-element.html")">
```

body部には以下の通り記述。

```scala:main.scala.html
<my-element></my-element>
```

# そうするとこんな感じに表示されます。

![スクリーンショット 2014-12-13 23.35.31.png](https://qiita-image-store.s3.amazonaws.com/0/39243/24d9916c-d24b-45a2-94fb-b7e91e7a5d7c.png)
Swiftとキー値コーディング その２


### 辞書をキー値コーディングでアクセス

NSDictionary、NSMutableDictionaryはキー値コーディングをサポートしていて、`valueForKey`、`setValue`による辞書の要素へのアクセスが可能です。

```swift
var dic : NSMutableDictionary = ["foo":1]
dic.setValue(2, forKey: "bar")
let n = dic.valueForKey("bar") as Int!
```

しかし、Swiftの辞書はキー値コーディングをサポートしません。

```swift
var dic1 = ["foo":1]
let n2 = dic1.valueForKey("foo") as Int!	// エラー
```

キー値コーディングが必要な場合、Swiftの辞書は使用せず、NSDictionary、NSMutableDictionaryを使用する必要があります。

### キーパスによる多段アクセス

Personクラスのインスタンスをメンバーに持つWorkingGroupを定義します。

```swift
class Person : NSObject
{
    var name = ""
}

class WorkingGroup : NSObject
{
    var leader : Person = Person()
}
```

このWorkingGroupのインスタンスから、Person型のプロパティであるleaderのnameプロパティにキー値コーディングでアクセスする場合、次のようになります。

```swift
// 通常のキー値コーデイングによるアクセス
var g1 = WorkingGroup()
var p1 = g1.valueForKey("leader") as Person!
p1.setValue("Jhon Doe", forKeyPath: "name")  // g1.leader.nameに"Jhon Doe"をセット
```

しかしこれでは煩雑なので、キーパスと呼ばれるキー値を「.」で連結した値で入れ子になったオブジェクトにアクセスすることができるようになっています。例えば、leaderプロパティのnameプロパティにアクセスしたい場合、キーパス値は「leader.name」という風になります。

```swift
// キーパスによるアクセス
var g1 = WorkingGroup()
g1.setValue("Jhon Doe", forKeyPath: "leader.name")
let name = g1.valueForKeyPath("leader.name")) as String!
```

Swiftでもキーパスによるアクセスは問題なくサポートされているようです。

### コレクションに対するアクセス

NSArrayやNSSetといったコレクションに対するキー値コーディングはその各々の要素に対するアクセスとなり結果もまたコレクションとなります。例えば、Personクラスの配列であるPersonsに対して、キー値「name」で値を取得すると、配列の要素である各Personオブジェクトのnameプロパティ値の配列が値として返ります。

```swift
class Person : NSObject
{
    var name = ""
    init(name: String)
    {
        self.name = name
    }
}
var persons : NSMutableArray = [Person(name: "Kyusaku Yumeno"), 
                                Person(name: "Mushitaro Oguri")]
// ["Kyusaku Yumeno","Mushitaro Oguri"]が返る
let names = persons.valueForKey("name") as NSArray  

```

コレクションに対する`setVaue`はコレクションの全要素に対するキー値に対応するプロパティへの値のセットとなります。
Personクラスの配列であるPersonsに対して、キー値「name」で値を設定すると、配列の要素であるすべてのPersonオブジェクトのnameプロパティに値を設定します。


```swift
var persons : NSMutableArray = [Person(name: "Kyusaku Yumeno"), 
                                Person(name: "Mushitaro Oguri")]
// personsの保持する二つのPersonオブジェクトのnameプロパティに値"Ranpo Edogawa"が設定される。
persons.setValue("Ranpo Edogawa", forKey: "name") 
```

しかし辞書同様、Swiftの配列はキー値コーデイングをサポートしません。

```swift
var persons : [Person(name: "Kyusaku Yumeno"), 
               Person(name: "Mushitaro Oguri")]
let names = persons.valueForKey("name") as [Person]  // エラーになる!!
 
```

要するに、キー値コーディングの対象となるクラスが配列や辞書を保持する場合、Swiftネイティブな配列や辞書ではなく、Objective-C由来のNSArrayやNSDictionaryを利用しなければいけないということなのかな？
[Unity] 複数の端末の解像度に対応させる2 - GUITexutreの表示を解像度と非依存にする

[前回の記事](http://qiita.com/nutti/items/733f296c5a09b6867baa)では、Unity内のSceneに表示される解像度を固定化する方法を紹介しました。
今回はさらに進んで、GUITextureの表示を解像度と非依存にしてみます。
解像度と非依存にするためには、[前回の記事](http://qiita.com/nutti/items/733f296c5a09b6867baa)で紹介したスクリプトが必要になります。

なおここで紹介しているのは、Unityのバージョンが4.3くらいのときに作成したスクリプトです。
記事を書いている時の最新版（Unity 4.6）では新しいUIが採用され、そちらを使えばもっと楽に解像度非依存の環境で製作できそうです。
ただし、GUITextureを今後も使っていきたい方は参考になるかもしれません。
（ 元記事：http://d.hatena.ne.jp/nuttinutti/20141213 ）

# サンプルスクリプト
GUITextureを用いた場合に、解像度に応じて自動的に位置や拡大率を変更してくれるサンプルを以下に示します。

```lang:Fixed_GUI_Layout.js
#pragma strict

var aspectRatioCtrl : Fixed_Aspect_Ratio = null;    // 解像度固定スクリプト
var x : float = 0.0f;                               // 表示位置（X座標）
var y : float = 0.0f;                               // 表示位置（Y座標）
var width : float = 1.0f;                           // 横幅
var height : float = 1.0f;                          // 縦幅

function Update()
{
    var texture : GUITexture;
    
    texture = GetComponent(GUITexture);
    
    // GUITextureと同じGameObjectに本コンポーネントが存在している必要がある
    if (!texture)   { return; }

    // 解像度固定スクリプトにより制御された解像度
    if (aspectRatioCtrl) {
        var rect : Rect;
        rect = aspectRatioCtrl.camRect;
        texture.pixelInset.x = (x * rect.width) * Screen.width;
        texture.pixelInset.y = (y * rect.height) * Screen.height;
        texture.pixelInset.width = width * rect.width * Screen.width;
        texture.pixelInset.height = height * rect.height * Screen.height;
    }
    // デフォルトの解像度
    else{
        texture.pixelInset.x = x * Screen.width;
        texture.pixelInset.y = y * Screen.height;
        texture.pixelInset.width = width * Screen.width;
        texture.pixelInset.height = height * Screen.height;
    }
}
```

# パラメータ
サンプルスクリプトでは、以下のパラメータを指定することが出来ます。

|項目名|説明|
|---------------|-----------------------------------------------------------------------------|
|Aspect Ratio Ctrl|解像度固定スクリプト（[前回の記事](http://qiita.com/nutti/items/733f296c5a09b6867baa)で紹介したスクリプトをFixed_Aspect_Ratio.jsとして保存する必要がある）|
|X|表示位置（X座標）|
|Y|表示位置（Y座標）|
|Width|横幅|
|Height|縦幅|

# 使用例
上記サンプルスクリプトを実際にUnityに導入してみます。
静止画なので分かりづらいと思いますが、実際にこのプラグインを導入しUnityのウィンドウの大きさを変更してみると、画像の位置と大きさが画面サイズに応じて変更されることが分かります。
![20141213224809.jpg](https://qiita-image-store.s3.amazonaws.com/0/38888/7bdb65f8-8b5b-2f15-faad-8b27defa155e.jpeg)

# 機能追加版のスクリプト
[前回の記事](http://qiita.com/nutti/items/733f296c5a09b6867baa)にて紹介した機能追加版のスクリプトを利用する場合は、[ここ](https://github.com/nutti/Unity-Utility-Library/blob/master/Cross%20Platform/Cross_Platform_GUI_Controller.js)から機能追加版へ対応したスクリプトをダウンロードして使ってください。
なお、解像度非依存の有効/無効を選ぶためのEnableというパラメータが追加されています。

# 関連記事
 * [\[Unity\] Unityにて複数の端末の解像度に対応させる1 - Sceneに表示される解像度を固定化する](http://qiita.com/nutti/items/733f296c5a09b6867baa)
iOSで画像からQRコードを読み取る

### やりたかったこと
iOS6以上で、画像中にQRコードがあるかどうか判定したかった

### 実現方法
ZBarのiOS向けSDKがあったのでこれで。
http://zbar.sourceforge.net/iphone/
Documents
http://zbar.sourceforge.net/iphone/sdkdoc/

ZBarSDKを導入後、以下のようにしてUIImage中にQRコードが存在するか判定できた。

```
-(BOOL)hasQRCode:(UIImage *)image
{
    ZBarImage *zbarimg = [[ZBarImage alloc] initWithCGImage:image.CGImage];
    ZBarImageScanner *scanner = [[ZBarImageScanner alloc] init];
    BOOL hasqr = [scanner scanImage:zbarimg];
    return hasqr;
}
```

### 精度
Google画像検索で10個くらいQRコードを読んでみたが、一個以外読み取れた。
LINEアプリ上に表示されたQRコードのスクリーンショットでも読み込めたので、画像いっぱいにQRコードが表示されて無くても読み取れる模様。

### ライセンス
SDKのライセンスについては以下を参照してください。(正直詳しいこと適当に言えない)
http://zbar.sourceforge.net/iphone/sdkdoc/licensing.html

### その他にできる操作
* もちろん読み取った文字列も取得できます。
* ZBarReaderControllerを使えばカメラロールでユーザーが選んだ画像に対して読み取りをかけられます。
Vimで改行コード^Mを置換しました

テキストファイルをVimで開いたら、**^M**という改行コードが毎行入っていたので削除したくなりました。

# ^MをVimで置換する
以下の置換コードを使用しました。

```vim:^Mを置換
:% s/^M//g
```
この置換では、^Mという改行コードにポイントがありました。Qiitaのようなウェブサイトで表示すると『^』+『M』のような２文字に見えるのですけど、実際の**^M**は1文字なのがポイントでした。

# ^Mを入力する方法
Vimのコマンドモードで、『Ctrl+V』を押してから、『Ctrl+M』を押すと、改行コードの**^M**を入力することができました(☝ ՞ਊ ՞)
Android Studioをはじめてみる

Android Studioが正式に1.0を迎えたの始めてみることにします。

とりあえず起動して
Configure - Preferencesでの設定をしてみます。

# Preferences

## Theme
Appearance - Theme でDarculaにしておきます。このほうがなんかかっこいいです。

## Editor
Editor - Appearance でShow line numbers にチェックで行番号の表示。
how whitespaces にチェックを入れて空白文字を可視化。

# 新規プロジェクト作成
適当に作成します。作成方法はまだバージョンが変わる度結構変わっているので割愛します。

# Jdk Location
 MacにプリインストールされていたJDKが指定されていたので、Oracleから落として最新にしておきます。
 「/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home」に設定しました。
IE10以降でfuelphpのResponse::redirect()を使うときに気をつけること

IE10以降では、Locationヘッダーを受け取った場合にも、Expireヘッダーなどを元にブラウザがページをキャッシュするようです。（バグorRFCの仕様どおり？）

ApacheなどのWebサーバ側で長めのExpire値を設定しているなど特殊な環境ではHTTPヘッダー を上書きする必要があります。

ただし、fuelphpのResponse::redirect()は、headerの上書きはできないので、\Fuel\Responseクラスのサブクラスをクラス作ってheaderを上書きします。
bootstrapのautoloadでクラスを読み込むようにする事もできます。

また、スタティックメソッドなので、new Response()やController_Application()のbefore()で設定しているheaderとは関係ない点も注意しましょう。


# 参考文献
Response - クラス - FuelPHP ドキュメント
http://fuelphp.jp/docs/1.7/classes/response.html#/method_redirect

FuelPHPでResponse::redirectをする時にハマった’refresh’の挙動(IEのみ)
http://blog.godvalley.me/archives/975

リダイレクト時のステータスコードには何を使えばいいか？
http://www.symmetric.co.jp/blog/archives/123
Postgresqlで他サーバのDBへアクセス

# 1. はじめに
SSDサーバを建てたので，データ量が多いデータをそちらに移し， 
データベース専用のサーバにしようと考え，他サーバからのアクセスの仕方をまとめます．
ついでにRailsの設定もまとめておきます．

# 2. Postgresの設定
postgresはデフォルトではローカルのアクセスしか許可していないため，
外部からの接続も許可するように変更します．

```/etc/postgresql/9.3/main/postgresql.conf
# - Connection Settings -

# listen_addresses = 'localhost'^ ^ # what IP address(es) to listen on;
listen_addresses = '*'^ ^ # what IP address(es) to listen on;
```

続いて，接続を許可する種類について設定を行っていきます．

```/etc/postgresql/9.3/main/pg_hba.conf
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# この行を追加
host    all             all             *.*.*.*/32              trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
```

今回は単一のサーバから許可できれば良いので良くパスも不要であり，
データベースも全てのアクセスを許可しています．

各列の設定項目はこのような形になっています．

| 接続方式  | データベース |   ユーザ  |   IP  | メソッド |
|:--------:|:-----------:|:---------:|:-----:|:--------:|
| local    |    all      |  all      | 指定IP | md5      |
| host     |   指定DB    | 指定ユーザ |        | trust    |
| hostssl  |             |           |        | peer     |
| hostnoss |             |           |        | reject   |
|||||password|

# 3. 接続確認

```irb
require 'pg'
conn = PGconn.connect('IP',PORT, '', '', 'DB', 'USER', '')
```

# ex. Railsの場合
app/modelの中に直接rubyファイルを作成します．

```app/model/foo.rb
class Foo < ActiveRecord::Base
  establish_connection(
    adapter:  'postgresql',
    host:     'IP',
    database: 'DB',
    username: 'USER',
    password: ''
  )
end
```
Sublime Text のキーバインディング覚書(Mac)

| Key Bindings | Action |
|:-----------|------------:|
| super + u           | super + d の取り消し |
| option + ドラッグ    | 矩形選択 |
| super + j           | 行の結合 |
| super + option + V  | 履歴から貼付け |
| ctrl + [N]          | グループ[N]に移動 |
| ctrl + shift + [N]  | ファイルと一緒にグループ[N]に移動 |
| super + g           | 次の検索結果 |
| option + super + g  | Quick Find |
| ctrl + super + g    | Quick Find All |
| super + e           | 選択した文字列を検索 |
| super + shift + e   | 選択した文字列を置換 |
| ctrl + g            | 行ジャンプ          |
| super + r           | Go to Symbol       |

```lang:Project
"folders" : {
   "folder_exclude_patterns" : [ "","",...] // 無視するファイル群
}
```
MySQL5.1から5.6にアップグレードしたらConfluence/JIRA/Stashが動かなくなった件

# 環境

* MacOSX Marvericks
* MySQL 5.6系

# やりたかった事

* Confluence 5.5.1から5.6.5にバージョンアップが行いたかった。
  * その際、Confluence 5.6.5のリリースノートに、MySQL5.1のサポートが終わるとのことだったのでMySQL5.6への移行を行うことになった。

# やった事

1. MySQLのデータダンプ（バックアップ）や、Confluence/JIRA/Stashでのバックアップ
2. MacPortsにてMySQL5.1のアンインストール（serverも）
3. MacPortsにてMySQL5.6のインストール（serverも）
4. Confluenceのパッケージ展開、設定ファイルの設定、規定のサーバーにファイルを配置。
5. MySQLの起動（mysqldの実行）
6. Confluenceの起動（start-confluence.shの実行）

# 発生した問題

* Confluenceが起動しない。（JIRA/Stashも同じく）

# 発生した問題の原因

* MySQLに外部から接続できない。（内部から接続することは可能だった）

# 結論

* MySQLの--skip-networkingがONになっていた。
  * /etc/my.cnfではskip-networkingが無効化（コメントアウト）されていたが、それ以外のmy.cnfがMySQL5.6インストール時に読み込まれてしまい、その設定ファイル内で有効化されていた。
ドットインストールのAtom入門を眺めてみての感想

ドットインストールにAtom入門が出来たようです。

http://dotinstall.com/lessons/basic_atom

ざっと見てみておっ!と思ったことを書いていきます。

## [言語ごとの設定](http://dotinstall.com/lessons/basic_atom/30504)

[9日目に言語ごとに設定を変えるためのパッケージを紹介しました](http://qiita.com/s-shin/items/35b48cf6fe7e2d348558)が、これで良かったのですね。

Settings ViewでPackage絞り込みしてGUIで変えれます。

![untitled_-_Atom.png](https://qiita-image-store.s3.amazonaws.com/0/7118/819000da-cca9-a7f6-4ecc-5d5967a7a8e9.png)

config.csonでも変更可能です。

```cson
'.perl.source':
  'editor':
    'tabLength': 4
```

## [ブックマーク](http://dotinstall.com/lessons/basic_atom/30507)

今まで使ったことありませんでしたが、結構使えそうな気がしてきました。

![bookmark.png](https://qiita-image-store.s3.amazonaws.com/0/7118/e0345372-7be1-91a6-1773-77351fc8630c.png)

キーバインドはちょっと微妙ですね…。

## [検索・置換](http://dotinstall.com/lessons/basic_atom/30506)

執筆現在の最新バージョンは0.158.0なのですが、実はつい最近のバージョン0.153.0（12月5日）にて検索・置換機能のUIの変更がありました。

> ### Notable Changes
>
> * Upgraded package generation templates to remove deprecations
> * Added find all to find and replace via alt-enter
> * Added 'whole word' search to find and replace
> * **Removed Find Previous, and Replace Previous buttons from find and replace**
> * Removed API deprecations from core
> * Removed API deprecations from several packages
> * Fixed several colorization issues in Sass and Less files
> * Markdown inside of block quotes is now highlighted correctly
> * Error notifications are displayed for uncaught errors rather than popping up the dev tools
> * Atom now bundles the language-clojure package
The Atom chocolatey package now uninstalls correctly
>
> https://github.com/atom/atom/releases/tag/v0.153.0

[初日の時点でのキャプチャ](http://qiita.com/s-shin/items/203e0f8c0aa00cfacfc5#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E6%A4%9C%E7%B4%A2%E7%BD%AE%E6%8F%9B-cmdf-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%A8%AA%E6%96%AD%E6%A4%9C%E7%B4%A2%E7%BD%AE%E6%8F%9B-cmdshiftf):

![find.png](https://qiita-image-store.s3.amazonaws.com/0/7118/06f1e521-00dd-b6f6-7b31-beb332125637.png)

ドットインストールでのキャプチャ:

![_06_文字列の検索・置換をしてみよう___Atom入門_-_プログラミングならドットインストール.png](https://qiita-image-store.s3.amazonaws.com/0/7118/6927f8c8-a4af-b5c3-1867-587a514fd346.png)

Find/Replace Next/Prevボタンよく使ってたので個人的に結構びっくりした変更でした。今はこんな感じで対処しています。

* 検索: 検索ワード欄アクティブ状態で `Enter` `Shift+Enter`
* 置換: 置換ワード欄アクティブ状態で `Enter` `Shift+Enter`
* 検索ワード欄、置換ワード欄のアクティブ切り替え `Tab` `Shift+Tab`

## [マルチカーソルと単語選択](http://dotinstall.com/lessons/basic_atom/30508)

SublimeTextで一世を風靡したマルチカーソル。検索・置換の下位互換になるケースが多いので、個人的にあまり使う機会は無いのですが、バッファ内の単語全選択とか面白いですね。

* カーソル追加: Cmd押しながら、カーソル置きたい場所をクリック
* カーソル位置単語インクリメンタル複数選択: `Cmd+d`
* カーソル位置単語全選択: `Ctrl+Cmd+g`

ここらへんのコマンドは、前述の検索・置換機能を提供するFind And Replaceパッケージで定義されているので、キーバインドはそちらで確認できます。

![untitled_-_Atom 2.png](https://qiita-image-store.s3.amazonaws.com/0/7118/d198da14-ab0d-07da-055a-5564bf230bf3.png)
Gruntプロジェクトのビルド時間を短縮するDockerfileの書き方


[株式会社リクルートテクノロジーズ Advent Calendar 2014](http://qiita.com/advent-calendar/2014/recruit-technologies)の13日目の記事です。

## はじめに

あるアプリケーションのリポジトリの中に、静的ファイルを生成するためのGruntプロジェクトを含めています。
このプロジェクトをプレビューするために、リポジトリに`Dockerfile`を入れて、`docker build`時に`grunt`コマンドでビルドしているのですが、`Dockerfile`の書き方によってはちょっと更新するだけでDockerイメージの再作成に非常に時間がかかってイライラすることになります。
無駄な処理を入れないためにはADDの書き方が大事だということを学んだので、そのあたりの話を書きます。

## プロジェクト構成

私の管理しているプロジェクトは、以下のようなディレクトリ構成になっています。

```
my-project
├── Dockerfile
├── grunt-project
│   ├── Gruntfile.js
│   ├── package.json
│   └── source
│       ├── # 省略
# 省略(Gruntプロジェクトの他に、アプリケーションのその他のモジュール郡が配備してある)
```

Gitリポジトリで管理しており、Gruntプロジェクト以外にも、その他独自のモジュール郡をリポジトリのルート以下に配備しています。
静的コンテンツはすべてGruntプロジェクト(上記例では`grunt-project`ディレクトリ内)として管理しています。
また、リモートサーバでのプレビュー環境作成のために、プロジェクトルートに`Dockerfile`が配備してあります。
この`Dockerfile`内にGruntプロジェクトを含む、すべての自作モジュールのビルドを実行する処理を書いています。


### 開発の進め方

このプロジェクトでの開発フローは、以下のようになります。

1. Gruntプロジェクト内のソースを変更する
2. 通常は`grunt-contrib-connect`を使ってローカル環境で画面の確認をする
3. ひと通りGruntプロジェクト内の変更が完了したら、Dockerイメージを再ビルドして、1つのアプリケーションとして全体の動作確認をする

## 最初にやっていたDockerfileの書き方

はじめは何も考えず、以下のように`Dockerfile`を書いていました。

```Dockerfile
ADD grunt-project /tmp/grunt-project
WORKDIR /tmp/grunt-project
# 必要なモジュールをインストール
RUN npm i
# ビルド実行
RUN grunt build
# ビルド後の静的ファイル群を移動
RUN cp -r /tmp/grunt-project/dist /src/static
```

しかし、開発を進めているとこの書き方だと無駄なビルド時間が発生することに気づきました。
Gruntプロジェクトには`package.json`を含めて管理するかと思いますが、実際の開発ではこの`package.json`を変更することはまれです。
にもかかわらず、上記のようにGruntプロジェクト全体をまとめてADDしてしまうと、たとえ`package.json`の更新をしていなかったとしても毎回`npm install`が実行されてしまいます。
これではDockerコンテナのキャッシュをうまく使えているとは言えません。

## まともなDockerfileの書き方

そこで、[Building Efficient Dockerfiles - Node.js - bitJudo](http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/) を参考に以下のように`Dockerfile`を書き直しました。

```Dockerfile
# package.jsonだけを先にADDする
# このようにすることによって、package.jsonが更新されていない場合はnpm installの部分はキャッシュが使われる
ADD grunt-project/package.json /tmp/grunt-project/package.json
WORKDIR /tmp/grunt-project
# 必要なモジュールをインストール
RUN npm i

# Gruntプロジェクトのその他をファイルを、ビルド実行するディレクトリとは別の場所にもう一度ADD
ADD grunt-project /tmp/grunt-project-2
# ファイルを-nで上書きせずにでコピー
RUN cp -nr /tmp/grunt-project-2/* /tmp/grunt-project
# ビルドするために必要なドットファイルなども一緒にコピー
RUN cp -nr /tmp/grunt-project-2/.[^.]* /tmp/grunt-project
# ビルド実行
RUN grunt build
# ビルド後の静的ファイル群を移動
RUN cp -r /tmp/grunt-project/dist /src/static
```

先に`package.json`をADDして、後からGruntプロジェクトのその他のファイルをADDして上書きせずにコピーすることによって、`npm install`のキャッシュが使えるようになりました。

## まとめ

Gruntプロジェクトに限らず、DockerはADDするタイミングをうまく使うことによってキャッシュ機能を活かすことができます。
特にローカル環境でのQA環境作成時には、このようにキャッシュを利用して環境の準備時間を短縮できるのはメリットだと思っています。
GitLab Omnibus package を使う


GitLab Omnibus package を EC2 で動かした際の覚書です。
知らないうちにインストールがとても楽になっていました・・・

**環境**
Ubuntu Server 14.04 LTS - ami-e74b60e6
gitlab_7.5.3-omnibus.5.2.1.ci-1_amd64.deb

**参考**
[GitLab | Omnibus package downloads for GitLab CE](https://about.gitlab.com/downloads/)
[証明書の準備（認証局への署名リクエストを行わず自己署名証明書を使用する場合）](http://www.seil.jp/support/tech/doc/function/certificate/example/certificate_self-sign.html)

# パッケージの入手
GitLab の[ダウンロードページ](https://about.gitlab.com/downloads/)で、OSの種類を選ぶとパッケージの入手／設定方法が表示されます。
今回は「Ubuntu 14.04」を選びます。

![gitlab_ downloads_1.png](https://qiita-image-store.s3.amazonaws.com/0/5179/4f6db140-658e-8abb-b769-9b7ae10495ab.png "gitlab_ downloads_1.png")

![gitlab_ downloads_2.png](https://qiita-image-store.s3.amazonaws.com/0/5179/6aee854c-a942-7c90-f60a-b3db65132718.png "gitlab_ downloads_2.png")

```bash
wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.5.3-omnibus.5.2.1.ci-1_amd64.deb
# sudo apt-get install openssh-server
sudo apt-get install postfix
sudo dpkg -i gitlab_7.5.3-omnibus.5.2.1.ci-1_amd64.deb
```

openssh-server はインストール済みです。
postfix は設定画面が表示されますので「Internet Site」を選びます。


# 設定
HTTPSアクセス可能にします。```sudo vi /etc/gitlab/gitlab.rb```
今回は自己署名証明書（後述）を用意しました。

```ruby:/etc/gitlab/gitlab.rb
external_url "https://foo.bar.baz"

nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/certificate.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/rsa-secret.key"
```

# 自己署名証明書
RSA秘密鍵の作成
署名リクエスト（CSR）の作成
証明書の作成

```sudo mkdir /etc/gitlab/ssl && cd /etc/gitlab/ssl```

```bash
sudo openssl genrsa -out rsa-secret.key 2048
sudo openssl req -new -x509 -days 30 -key rsa-secret.key -out request.csr
sudo openssl x509 -in request.csr -out certificate.crt
```

# 開始

```bash
sudo gitlab-ctl reconfigure
sudo gitlab-ctl status
```
UEFIなGentooをMacに入れるときにハマりそうなこと

## みなさんUEFI生活を満喫していますか

UEFIに移行していないBIOSユーザの方々、UEFIに移行するとこんな世界が待っています！

- ブートローダをアプリを起動する感覚で扱える
- 「ぼくのかんがえたさいきょうのパーティションテーブル」なGUIDパーティションテーブル(GPT)
- EDK2という開発環境でいろいろ遊べる(mrubyをUEFI上で動かしたりとか)

最近のPCはUEFIに対応していると言っても過言ではありません。
特にWindows 8以降なんかは起動がすごく速いらしいので移行しましょう(もそもそんな環境でUEFIじゃない人の方が少ないかな）

「UEFIに移行したらディスクのデータ全部消えるんでしょ？」って言っているあなた、ほとんどの環境ではデータを保持したまま移行できます！
(詳しくはググってみてください)

## Gentoo LinuxでUEFI

Twitterで人気のディストリ(？)Gentoo Linuxですが、UEFIブートで入れようとすると割とハマります。
自分が初めてUEFIブートでGentoo Linuxを入れたのがMacBook Pro (Late 2013)なのが悪いのかもしれませんが、きちんと調べないとこうなります

- ブートしても画面が真っ暗
- 画面は出るけど起動しない
- dmesgに変なエラーが出る
- UEFI対応のカーネルが作れない

こんな症状に遭遇した人のために、主に最近のMacにUEFIブートでGentoo Linuxを入れるときにハマるところと解決方法を書いていきます。
~~UEFIあんまり関係ないのは許してください~~

## ハマったときの症状と解決方法

(※)の付いている問題は、USBメモリからのブートであれば[別途ファイルを追加する](http://forums.gentoo.org/viewtopic-p-7581718.html)などしてUEFIブートでLiveCDを起動させれば問題ないはずです。

### ブートしても真っ暗(※)

解像度が合っていないために起きます。

LiveCDのカーネルオプションに`nomodeset`を付けると解決します。

### 画面は出るけど途中で止まる(※)

おそらくこんな表示であれば、カーネルオプションで解決します。

```
x86: Booting SMP configuration:
.... node  #0, CPUs:      #1
(ここで止まる)
```

これはおそらくMac特有の問題で、LiveCDをUEFIのBIOS互換レイヤー(CSM)で起動させると起こります。
MacのCSMにはバグがあるらしく、複数コアのCPUをうまく扱えないために発生するようです(詳しくは[こちら](https://bugzilla.kernel.org/show_bug.cgi?id=60635))。

この問題はカーネルオプションに`nosmp`を追加することで直ります。
しかし、代償としてSMPを無効にするため1コアのみの認識になってしまいます。

### dmesgに変なエラーが出る、起動に妙に時間がかかる

MacのSSD関連の問題を踏んでいる可能性があります。
ディスク関連のデバイスへのコマンド実行失敗と思えるようなメッセージであればこれです。

カーネルオプションに`libata.force=noncq`を追加することで直ります。
見ればわかると思いますが、このオプションはNCQを無効化するためのものです。

### Xの画面がぶっ壊れる

最近はまずないと思いますが、カーネルに入っているIntel GraphicsのドライバがIris Proに対応していないせいです。

カーネルを更新すると直ります。

### UEFI対応カーネルの設定

カーネルをEFI Shellなどから直接ブート可能にするEFI Stubの設定は使わないとしてもオンにしておくことをおすすめします。
カーネルオプションは埋め込まれて変更できなくなりますが、[rEFInd](http://www.rodsbooks.com/refind/)ではEFI Stubなカーネルに含まれたカーネルオプションを書き換えてブートすることができます。

また、フレームバッファにefifbを使用することが必須になります。他は画面が出ません。
しかし、ネイティブ解像度のみのサポートのため、Retinaディスプレイでは文字の大きさが小さくなってとても読みづらくなります。

### OSX側のおすすめ設定

ディスクユーティリティのデバッグメニューを使うと、非表示パーティションの操作やマウントができます。
以下のコマンドでデバッグメニューをオンにできます。

```console
$ defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true
```

## 参考になりそうなページ

[ArchWikiのMBPのページ](https://wiki.archlinux.org/index.php/MacBookPro11,x)

[Gentoo WikiのUEFIクイックインストールガイド](http://wiki.gentoo.org/wiki/UEFI_Gentoo_Quick_Install_Guide)
Windows7で指定した時刻にコマンドを実行するには


## タスクの登録

```
schtasks /create /tn タスク名 /sd 開始日<yyyy/MM/dd形式> /st 開始時刻<hh:MM:ss形式> /sc once /tr 実行プログラムパス
```

## タスクの削除

```
schtasks /delete /tn タスク名
```


## タスクの登録/メモ帳を起動する場合

```
schtasks /create /tn notepad /sd 12/13/2014 /st 15:32 /sc once /tr notepad
```

## タスクの削除/メモ帳を起動する場合

```
schtasks /delete /tn notepad
```