OmniAICreator/Qiita-1.07M huggingface dataset:
git 覚書

個人で使う場合はこれぐらい覚えていればいいかな。
全体が見通せない規模になってきたら branch も覚える。
ローカルで完結できるのは良い。

workTree -> (add) -> stagingArea -> (commit) -> repository

workTree <- (checkout) <- stagingArea <- (reset) <- repository

workingTree
stagingArea =? index
repository =? HEAD

```
git init

git add <file>
git commit -m 'comment'

git diff
git diff --cached
git diff HEAD

git checkout -- <file> # -- は現在のブランチ名を省略している？
git reset HEAD <file>
```

#参考
http://www.slideshare.net/matsukaz/git-17499005
Google Spreadsheetから定期的にtwitterにつぶやくbotを作る

oAuthConfig クラスが 2015/07/06 で使えなくなりました！　あとでこの記事編集しますが、待てない方は以下を参照して改造してください。
[Migrating from OAuthConfig to the OAuth1 library](https://developers.google.com/apps-script/migration/oauth-config?utm_campaign=oauth-appsscript-315&utm_source=gadbc&utm_medium=blog)


# 以下、動きません (2015/07/06)

掲題の通りです。

基本的に [GAS(Google Apps Script)でお手軽にbotを作る方法。](https://sites.google.com/site/usakoyama/gastotwitterbot)を参照すればOKなんですが、コードがちょっと古く、廃止になったAPIを使っているので、2015年1月時点で警告がでないようにコードを改変しました。

備忘のために載せておきます。

```js
function tweetInitialize() {
  // Setup OAuthServiceConfig
  var oAuthConfig = UrlFetchApp.addOAuthService("twitter");
  oAuthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
  oAuthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
  oAuthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
  var scriptProperties = PropertiesService.getScriptProperties();
  oAuthConfig.setConsumerKey(scriptProperties.getProperty("twitterConsumerKey"));
  oAuthConfig.setConsumerSecret(scriptProperties.getProperty("twitterConsumerSecret"));
}

function twitterPost(text) {
  var options = {
    "oAuthServiceName" : "twitter",
    "oAuthUseToken" : "always",
    "method" : "POST"
  };
  var encodedTweet = encodeURIComponent(text);
  var result = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/update.json?status=" + encodedTweet, options);
  var o  = JSON.parse(result.getContentText());
  Logger.log(o);
  Logger.log(result.getResponseCode());
}

```
Azureに管理証明書をアップロードする

クライアントアプリケーションからAzureを扱う時には**管理証明書**というものを作成し、Azureにアップロードする必要があります。

管理証明書（拡張子は `.cer`）の詳細については下記を参照して下さい。

* [Azure の管理証明書の作成とアップロード](http://msdn.microsoft.com/ja-jp/library/azure/gg551722.aspx)
* [証明書の管理 | Windows Azure のテクニカル ドキュメント ライブラリ](http://msdn.microsoft.com/ja-jp/library/azure/gg981929.aspx)

# 前準備
管理証明書を作成するためにはVisual Studioが必要になるため、下記のリンクからダウンロードし、インストールして下さい。
[Visual Studio Community 2013 - Visual Studio](http://www.microsoft.com/ja-jp/dev/products/community.aspx)

# 管理証明書を作成する
先程インストールしたVisual Studioの開発者コマンドプロンプトを起動します。
開発者コマンドプロンプトは下記のショートカットを使用します。（Visual Studio Community 2013の場合）
`C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\開発者コマンド プロンプト for VS2013`

開発者コマンドプロンプトにて下記のコマンドを入力。

```
makecert -sky exchange -r -n "CN=azure-cert" -pe -a sha1 -len 2048 -ss My "azure-cert.cer"
```

# Azureに管理証明書をアップロードする
Azureのポータルにログインし、[設定]メニューにアクセスします。
[設定]メニューの[管理証明書]を選択し、先程作成した管理証明書ファイルをアップロードします。

![azureportal.jpg](https://qiita-image-store.s3.amazonaws.com/0/1136/d05c5d6e-00d2-4f6b-7fa9-e24507d6edbf.jpeg)
Play2のビューでBigDecimalをいい感じに出力したかった


[BigDecimalのsetScale(int newScale, RoundingMode roundingMode)](https://docs.oracle.com/javase/jp/6/api/java/math/BigDecimal.html#setScale%28int,%20java.math.RoundingMode%29)でいい具合にやりたいと試行錯誤しましたが、0だけ切り捨てるような丸めはありません。
いや、`RoundingMode.UNNECESSARY`渡せばいいんですが、ビューでやったりすると0がついてない場合にArithmeticExceptionで死んでしまいます。

例のごとく検索しましたが、すっきりする解決法が見つかりません。
以下なら期待する結果を得ることはできそうです。[^1]

０を表示させたくない。 － Java Solution － ＠IT
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7653&forum=12

> 次のようなトリミングメソッドを書きます。
> 例外処理に依存したコードなんですが、
> JDC Tech Tipsで紹介されてるのでフォーマルなんでしょう。 

とのことで、以下のコードが紹介されています。

```
static BigDecimal trim(BigDecimal n) {
    try {
        while (true) {
            n = n.setScale(n.scale()-1);
        }
    } catch (ArithmeticException e) {
        // no more trailing zeroes so exit.
    }
    return n;
}
```

そんな、ばかな……。
こんなの頻発するんだから何かありそうなものですけど。

[^1]: TechTipsがデッドリンクになってますが、[BigDecimalで表される数値の書式設定](http://otn.oracle.co.jp/technology/global/jp/sdn/java/private/techtips/1999/tt0826.html#2)が同じ内容と思われます。
プログラマになること#5


###記述する動機
私、とある専門学校でPGを教えています。はや８年。
いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、公開していきたいと思います。全て実例です。個人名は秘密！！

#社会人教育の例
年齢制限無し。国の仕組み。

##講習時間
３時間/day 

##環境
Win７
JavaはEclipse
フロントはOSS
サーバー実機１台

##素直じゃない。
頑張ってる人は素直に聞いてきます。
やってない人程、やってる振り。
そもそも本気じゃないんだ。
やらない理由を延々と述べる。いいよやんなくて。

##結果
３名再就職。
WPFのデータ変換

(これはQiitaに慣れる記事です。)

WPFいいですよねWPF。
みなさんバインディングしてますか！！！

一バインダーとしてバインディング機能の中のデータ変換について焦点を当ててみます。(WPF始めて間もない人向けだと思ってる)

## WPFのデータバインディング
ViewModelとViewを関連付けるデータバインディングの主要部分は `System.Windows.Data` 名前空間にあります。が、C#のコードからは中のクラスを意識することはあまりないと思います。

そんなバインディングですが、バインディングソースとして存在する値を表記を変えてユーザーに伝えたい場合があります。

## その1. StringFormatを使う
文字列を付加するような、複雑さを伴わない変換は手軽に実現できます。
例えば、「コレクションの要素数を表示したい」場合。
この場合、値は`何らかのコレクション.Count`プロパティで取得できますが、そのまま表示されてもユーザーにとっては何を表しているのか分からないでしょう。
BindingBaseクラスに定義してあるStringFormatプロパティに書式を流し込めば、いい感じにしてくれます。

```xml
<TextBlock Text="{Binding Items.Count, StringFormat={}{0} items}"/>
```
出力例: `16 items`
`{0}`はstringクラスのFormatメソッドをお使いの方ならご存知の書式指定項目ですが、`{}`はのちに続く文字列へのエスケープ的役割を担っています。とりあえず文法を無視しそうな部分につけておけばOK(だと思ってる)。

## その2. コンバーターを使う
データソースの値をこねくり回す場合の方法です。
例えば、「ファイルサイズを分かりやすく表示したい」場合。
.NETでのファイル関連は`System.IO.FileInfo`クラスあたりで取得できます。
サイズを示すLengthプロパティはlong型で、バイト数を返します。これをそのままバインディングすると、`16000`なんて味気ない表示になりますね。

```csharp
using System.Windows.Data

namespace BindingTest.Converters
{
  　class FileSizeConverter : IValueConverter
    {
        static readonly string[] Suffix = new string[] { "", "K", "M", "G", "T" };
        static readonly double Unit = 1024;

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (!(value is long)) throw new ArgumentException("long型じゃないよ。", "value");
            double size = (double)((long)value);

            int i;
            for (i = 0; i < Suffix.Length - 1; i++)
            {
                if (size < Unit) break;
                size /= Unit;
            }

            return string.Format("{0:" + (i == 0 ? "0" : "0.0") + "} {1}B", size, Suffix[i]);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

    }
}
```
出力例: `15.6 KB`
一気に複雑になりましたが、

  * `System.Windows.Data`内の`IValueConverter`インターフェースを実装するクラスを作ります。
  * `Convert`メソッドで`データソース->表示データ`へ
  * `ConvertBack`メソッドで`表示データ->データソース`へ変換を行います。
  * 両メソッドとも、引数valueはobject型なので、型判定をして適切な型にキャストしてやります。
  * それぞれ返り値もobject型なので、違う型への変換も可能です。

このクラスでは後者のメソッドは使わないため、バインディング先で`Mode=TwoWay`に設定されるなどして呼ばれた際には例外を投げるようにしてあります。
XAML内で利用する時は、

```xml
<Window xmlns:c="clr-namespace:BindingTest.Converters">
    <!-- ViewModel -->
    <Window.Resources>
        <c:FileSizeConverter x:Key="FileSizeConverter"/>
    </Window.Resources>
    <TextBlock Text="{Binding Length, Converter={StaticResource FileSizeConverter}}"/>
</Window>
```
という感じで、(だいぶ端折った)
コンバーターを利用する際には定義した要素の`x:Key`属性で指定した値を指定します。

以上、Qiitaに慣れるためのデータソース変換記事でした。
これらを駆使したデータ変換で良いWPFライフを！

※ `System.Windows.Controls.BooleanToVisibilityConverter`のように組み込みで用意されているコンバーターもありますので一度調べてみることをおすすめします。


## 参考
http://msdn.microsoft.com/ja-jp/library/system.windows.data(v=vs.110).aspx
https://twitter.com/atst1996/status/527463457398853634
【Swift】シンプルにセグメントを使いたいだけ！初心者が見つけたやり方。

【前作：ICF inputter】
iOS無償版　→　http://bit.ly/iOSICFfree
iOS　→　http://bit.ly/ICFinputteriOS
※Android（無償）もある　→　http://bit.ly/ICFinputAndr
前作、ICF inputterのiOS版をobjective-Cで書き上げた際にセグメント切り替えを使ったのだが、Swiftになってからは書き方が違うと思われる…。
　おそらくは、objective-Cのコードをそのまま突っ込んでチャンポンにしても動くのだろうが、なんだか悔しいのでSwiftで書きたかった。

いろいろ迷った上、いちばんシンプルに考えるなら。
#１．StoryBoardから、紙芝居的にセグメントを用意する。
（パーツをひっぱってきて、セグメントが何個あって、
それぞれなんという名前か？についてStoryBoardの設定で入力しておく）
#２．ViewController.swiftに、ヒモを引っ張ってIBOutletを接続する。


＝
ここからが、<b>自動ではできない部分（IBAction）の書き方。</b>
#<b>３．セグメントのIBActionを書き足す。</b>
<div class="code-frame" data-lang="she'll">
<div class="code-lang"><span class="bold">ViewController.swift</span></div>
<div class="highlight"><pre>
@IBAction func <b>changeKishoSegment</b>(sender: UISegmentedControl) {
        if (sender.selectedSegmentIndex == 0) {
//最初のセグメントが0。セグメント数に合わせて条件分岐を
            println("セグメント0")
        } else if (sender.selectedSegmentIndex == 1) {
            println("セグメント1")
        }
    } 
</pre></div>
</div>

これを書くと先頭に例の「○」ができるので、該当セグメントにヒモづけてあげればOK！
お互いよいSwiftライフを！！

多謝：<a href="http://qiita.com/hanoopy/items/68fc5517d3933397475f" target="_blank">hanoopyさんのページ</a>が大変参考になりました。hanoopyさんありがとうございます！
AppleScriptでかゆいところに手をのばす！

新卒1年目エンジニアの川村です。
普段、Ruby on Railsでひいひい言っている私ですが、今回は普段馴染みのないApple Scriptについて書きたいと思います。

## AppleScriptとはなんぞや？
AppleScriptとは、文字通りアップルが開発したMac OS用のオブジェクト指向のスクリプト言語です。</br>

つまり、AppleScriptとはMac OSや市販のソフトウェアに対し直接命令をし、自動で意図した処理を行ってくれる言語です。

日々行うルーティン作業や、決まりきった作業、環境設定などありましたらAppleScriptでその処理を記述し、ぱぱっとそのスクリプトを実行してしまった方が楽です。

具体的に、AppleScriptでは以下のようなことができます。
・バッチ処理</br>
・アプリケーションのアクションを自動操作</br>
・ファイル変換およびファイル操作</br>
・所定時刻のタスク実行</br>
・データベースと他のアプリケーションの間の情報転送</br>
・複数のアプリケーションのアクションを連結して一連の関連タスクを実行させることにより自動化ワークフローを作成</br>
・Xcodeでのアプリケーション開発にAppleScriptを利用可能</br>

## 開発環境
まず、AppleScriptを使う上でとりわけ何かをダウンロードする必要はありません。基本的に全てはじめから皆さんのMacに必要なツールは揃っています。

### AppleScriptエディタ
AppleScript専用の簡易エディタです。小さなスクリプトであれば、AppleScriptエディタのみでこと足ります。

### Automator
AppleScriptを活用するツールで高度なワークフローを簡単に作り実行できる。

### Xcode
こちらはダウンロードが必要ですね。XcodeでもAppleScriptを使用することが出来ます。本格的なアプリをAppleScriptで作成する場合はXcodeを使ってみると良いと思います。

## 早速書いてみる
まず、AppleScriptの記法の特徴としてすごくリッチです！プログラミングというよりかは中学英語の簡単な英作文を書いている感覚に近いです。

高級言語の分、若干動作が遅いそうです。

というわけで、まずChromeを立ち上げてFacebookにアクセスするスクリプトを書きたいと思います。

    tell application "Google Chrome" #Chromeに声をかける。
      activate #Chromeを起こす。
      open location "http://www.facebook.com/home.php" #ChromeにFBにアクセスして頂く。
    end tell

終りです笑

このスクリプトを以下の形式で保存します。
今回は「アプリケーション」形式で保存しました。

![](https://31.media.tumblr.com/7b75d2be69eb52156dee7bf43f853990/tumblr_inline_nhri04FBJS1smsp17.png)

「アプリケーション」形式で保存すると、以下のようなアプリが作成されます。

![](https://31.media.tumblr.com/9e0eff2c9e61fda111b0649061e96b4d/tumblr_inline_nhri2aztDS1smsp17.png)

このアプリを実行すると、Chromeが立ち上がりFacebookにアクセスします。

## バッチ処理をAppleScriptのみで行う。
今回は、バッチで処理もやってみました。
指定した時間に仕事をサボる誘惑をしてくるアラートがでて、その誘いにのるとYoutubeに飛んでしまうという末恐ろしいアプリです。笑

    on idle #on idle/end idleで囲う事でその処理を常駐させることができます。
      set nowTime to the hours of the (current date) # 現在日時の時間の部分を取得
      if nowTime is 11 then
        display dialog "You need a rest, don` t you?" buttons {"No, I don`t.", "Yes, I do"}
        set tmp to result #クリックのデータを取得
        set btn to button returned of tmp # 取得したクリックデータからユニークの値を取得（今回はボタンの文字列）
        if btn = "Yes, I do." then
          tell application "Google Chrome"
            activate
            open location "https://www.youtube.com"
          end tell
        end if
      else if nowTime is 19 then
        display dialog "You must be tired, aren`t you?" buttons {"No, I`m not.", "Yes, I am"}
        set tmp to result
        set btn to button returned of tmp
        if btn = "Yes, I do." then
          tell application "Google Chrome"
            activate
            open location ""http://www.facebook.com/home.php"
          end tell
        end if
      end if
      return 3600 #1時間ごとに実行
    end idle

1時間ごとにスクリプトが実行され、11時の誘惑に乗るとYoutubeに、19時の誘惑に乗るとFacebookにアクセスします。

1つ、注意点として、コードの修正などをした際に再度実行させたいという場合は、1度スクリプトのプロセスを切ってから実行することをオススメします。でないと、ちゃんと実行されないので。

## まとめ
初めてAppleScriptを触ってみたのですが、とても簡単ですぐ実行もできるので楽しかったです。
まだペーペーのエンジニアに自分がいうのもあれですが、これならあまりプログラミングに馴染みのない方でも簡単にプログラミングを組めると思います。

日々、同じ作業で消耗している方、ぜひAppleScriptで効率化を図ってみてはいかがでしょうか？
homebrewでのpostgresql9.4アップグレードメモ


9.3.0から9.4.0へ

```
psql --version
=> psql (PostgreSQL) 9.3.0
```

```
brew update
brew upgrade postgresql
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
mv /usr/local/var/postgres /usr/local/var/postgres93
initdb /usr/local/var/postgres -E utf8
pg_upgrade \
  -b /usr/local/Cellar/postgresql/9.3.0/bin \
  -B /usr/local/Cellar/postgresql/9.4.0/bin \
  -d /usr/local/var/postgres93 \
  -D /usr/local/var/postgres
cp /usr/local/Cellar/postgresql/9.4.0/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
```

```
psql --version
=> psql (PostgreSQL) 9.4.0
```
OS Xの通知センターに通知する方法

OS X Mountain Lionから実装された通知センターに通知するアプリケーションをSwiftで記述します。

![スライド](https://qiita-image-store.s3.amazonaws.com/0/3862/287e9aa3-bbfc-8106-c96a-3a2dc25a6ce7.jpeg)

AppDelegate.swiftにコードを書き足します。

```swift:AppDelegate.swift
import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate {

	func applicationDidFinishLaunching(aNotification: NSNotification) {
		// Insert code here to initialize your application
		
		NSUserNotificationCenter.defaultUserNotificationCenter().delegate = self
		let notification = NSUserNotification()
		notification.title = "タイトル"
		notification.subtitle = "サブタイトル"
		notification.informativeText = "本文"
		notification.contentImage =  NSImage(named: "blue")
		notification.userInfo = ["title" : "タイトル"]		
		NSUserNotificationCenter.defaultUserNotificationCenter().deliverNotification(notification)
	}

	func applicationWillTerminate(aNotification: NSNotification) {
		// Insert code here to tear down your application
	}
	
	func userNotificationCenter(center: NSUserNotificationCenter, didActivateNotification notification: NSUserNotification) {
		let info = notification.userInfo as [String:String]
		
		println(info["title"]!)
	}
}
```

通知の内容を設定します。
任意の画像を指定することができます。
ここでは用意した青い画像を指定します。

```swift
notification.title = "タイトル"
notification.subtitle = "サブタイトル"
notification.informativeText = "本文"
notification.contentImage =  NSImage(named: "blue")
```

通知する時間を指定できます。
例えば10秒後に通知する場合は、以下のように記述します。

```swift
notification.deliveryDate = NSDate().dateByAddingTimeInterval(10.0)
NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification(notification)
```

通知をクリックしたときに、どの通知がクリックされたか判断するために情報を保持させます。

```swift
notification.userInfo = ["title" : "タイトル"]
```

通知をクリックしたときに、通知に保持させた情報を取り出します。
`NSUserNotificationCenterDelegate`を記述してdelegateを設定します。

通知に保持させた情報の型が[String, String]なので、`notification.userInfo as [String:String]`と記述します。

```swift
func userNotificationCenter(center: NSUserNotificationCenter, didActivateNotification notification: NSUserNotification) {
    let info = notification.userInfo as [String:String]

    println(info["title"]!)
}
```
[Scala] 無限ループ内で break を使わない方法を考える

ポエムではないです。が思考の経過を垂れ流してます。

scala では break 制御構文が使えませんが、無限ループ内で、値を生成してその値をループの外で使いたいなんてことがたまにあります。
今回はシーケンスの中から使われていないユニークな値を探してそれを使うケースで考えます。
ちなみに、ライブラリで提供されている break を利用することはできますが、例外を発生させてそれをキャッチして処理するというのは個人的に好きじゃないので別の方法を考えます。（好みです（＾＾；）

まず単純に考えると、ループの継続を行うかどうかを変数に入れて制御する以下の方法があるかと思います。

```scala
var loop: Boolean = true
var candidate: Int = 0
while(loop) {
  candidate = Random.nextInt()
  if (seq.indexOf(candidate) == -1)
    loop = false
}
```

この場合、loop, candidate がミュータブルになっているのでなんとなくバグが入り込みそうで嫌な感じです。
この var を取り除くために無限ループ部分を関数にして値が見つかり次第 return してしまう方法が思いつきます。 

```scala
def scanUniqValue(seq: Seq[Int]): Int = {
  while(true) {
    val candidate = Random.nextInt()
    if (seq.indexOf(candidate) == -1)
      return candidate
  }
  sys.error("never reach")
}

val x = scanUniqValue(seq)
```

この場合、最後に型を合わせるために、関数の最後にダミーの値を返すか例外を発生させないと型が合わずコンパイルができません。
これもまたなんか気持ち悪いです。。。

次に・・・再帰はパスします・・・ｗ

scala なんだしもうちょっとなんかあるんでないのかと思って試行錯誤した結果、最終的に行き着いた方法がこれ。

```scala
Iterator.continually(Random.nextInt()).find(seq.indexOf(_) == -1).get
```

Iterator.continually で無限に値を生成しつつ、find で一番最初に見つかった値を取得しています。
値の生成部分と検索の部分が明確に分かれてて理解しやすいし個人的にはこれが一番スッキリかなぁ。

他に良い書き方があればコメントください。

以上です。
iOS/swiftでselectorを使った際に引数なしのメソッドを指定しているにもかかわらず":"をつけていて時間を取られたので備忘録


- selectorで指定するメソッドが引数をとる場合
 - コロンが必要

```
override func viewDidLoad() {
	// ...
	UIRefreshControl().addTarget(
		self, 
		action: "引っ張って更新:", //←ここ
		forControlEvents: UIControlEvents.ValueChanged
	)
	// ...
}
func 引っ張って更新(_:AnyObject){
	// ...
}
```

- selectorで指定するメソッドが引数を取らない場合
 - コロンが不要
 - コロンをつけると下記出力が出る
 - *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[hoge.ViewController 引っ張って更新:]: unrecognized selector sent to instance 0x145e187d0'
***

```
override func viewDidLoad() {
	// ...
	UIRefreshControl().addTarget(
		self, 
		action: "引っ張って更新", //←ここ
		forControlEvents: UIControlEvents.ValueChanged
	)
	// ...
}
func 引っ張って更新(){
	// ...
}
```

selectorに初めて触れ、ググっていると「コロンつけるべし」という記述が多かったのでつけていたらそれらは引数ありメソッドを指定していたという。きちんとコロンの意味まで調べないとだめですね。
bower install で bower EMALFORMED Failed to read と言われる解決方法

bower installがうまくできない現象がありました。

# bower install で エラー
bower installできなくて困りました。

```bash:installできません
bower install
bower EMALFORMED    Failed to read /home/vagrant/workspace/hoge-hogege/bower.json

Additional error details:
Unexpected token /
```
# 日本語のコメントを削除した
参考サイトをみたら、文字コードを見なおせみたいなことが書いてあったので、bower.jsonを見てみると、bower.jsonに日本語コメントを書いてありました。

日本語のコメントを削除したら、bower installが成功しました。これはひどい(☝ ՞ਊ ՞)

# 参考
http://stackoverflow.com/questions/24534974/emalformed-failed-to-read-bower-json-unexpected-token
cpanでNet::SSLeay入れようとするとエラーになる

perlのcpanからNet:SSLeayをインストールしようとしたら次のようなエラーになる事があります。

```text
cpan[1]> install Net::SSLeay
Running install for module 'Net::SSLeay'
Running make for M/MI/MIKEM/Net-SSLeay-1.66.tar.gz
…略…
SSLeay.xs:163:25: error: openssl/err.h: No such file or directory
SSLeay.xs:164:27: error: openssl/lhash.h: No such file or directory
SSLeay.xs:165:26: error: openssl/rand.h: No such file or directory
SSLeay.xs:166:28: error: openssl/buffer.h: No such file or directory
SSLeay.xs:167:25: error: openssl/ssl.h: No such file or directory
SSLeay.xs:168:28: error: openssl/pkcs12.h: No such file or directory
SSLeay.xs:169:74: error: openssl/comp.h: No such file or directory
…略…
SSLeay.c:16528: error: expected '{' at end of input
make: *** [SSLeay.o] Error 1
  MIKEM/Net-SSLeay-1.66.tar.gz
  /usr/bin/make -- NOT OK
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible
Failed during this command:
 MIKEM/Net-SSLeay-1.66.tar.gz                 : make NO
```

エラーを見るとOpenSSLのincludeファイルが見つからないということなので、例えばRHEL/CentOS系Linuxではyumでopenssl-develをインストールすればこのエラーは発生しなくなります。

yumを使っておらず、ソースからOpenSSLをインストールしている人は、インストールしたOpenSSLのincludeファイル等を指定してあげる必要があります。
OpenSSLをソースからインストールするとデフォルトでは「/usr/local/ssl」以下にインストールされるので、makepl_argにそのあたりを指定してあげればOKです。

```text
# perl -MCPAN -e shell
cpan[1]> o conf makepl_arg "INSTALLDIRS=site LIBS='-L/usr/local/ssl/lib -lcrypto -lssl' INC=-I/usr/local/ssl/include"
cpan[2]> install Net::SSLeay
CPAN: Storable loaded ok (v2.20)
Going to read '/root/.cpan/Metadata'
  Database was generated on Sat, 10 Jan 2015 04:53:46 GMT
…略…
Installing /usr/local/share/man/man3/Net::SSLeay::Handle.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod
  MIKEM/Net-SSLeay-1.66.tar.gz
  /usr/bin/make install  -- OK
```

ちなみに`o conf commit`しなければmakepl_argに設定した内容は保存されません。
Railsでデータを可逆暗号で保存する

Railsで、ユーザを作って、ユーザのパスワードを可逆暗号で暗号化してから保存します。

## 環境

 * Ubuntu 14.10
 * Ruby 2.1.5
 * Rails 4.2

# ユーザテーブルの作成

ユーザテーブルのカラムは、ユーザー名の `name:string` とパスワードの `password:string` です。

```rb
rails generate scaffold user name:string password:string
```

カラムを空で保存したくないので、マイグレーションファイルを少し書き変えます。

```rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.string :password, null: false

      t.timestamps null: false
    end
  end
end
```

そして、`rake db:migrate` します。

# 検証の追加

ユーザモデルに検証を追加します。
とりあえず、user カラムと password カラムは空でなく、さらにユニークであるという検証を追加しました。
この時、フォームが空だったら uniqueness の検証はスキップするようにしてます。

```rb:user.rb
class User < ActiveRecord::Base
  # userカラムとpasswordカラムは空でなくユニークである
  validates :name, :password,
            presence: true,
            uniqueness: { allow_blank: true }
end
```

# passwordカラムの暗号化

暗号化は、データの保存前におこない
暗号化には、ActiveSupport::MessageEncryptor を利用します。
ちなみに、暗号化には標準添付ライブラリの OpenSSL を使っているので、ライブラリに対応した暗号化方式を `CIPHER` で指定したら好きな暗号化方式を選べます。

モデルを変更

```rb:user.rb
class User < ActiveRecord::Base
  # userカラムとpasswordカラムは空でなくユニークである
  validates :name, :password,
            presence: true,
            uniqueness: { allow_blank: true }

  before_save :encrypt_password
  
  def encrypt_password
    self.password = encrypt(self.password)
  end

  # SECUREは短いとエラーを吐く
  SECURE = 'HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE'
  CIPHER = 'aes-256-cbc'

  # 暗号化
  def encrypt(password)
    crypt = ActiveSupport::MessageEncryptor.new(SECURE, CIPHER)
    crypt.encrypt_and_sign(password)
  end

  # 復号化
  def decrypt(password)
    crypt = ActiveSupport::MessageEncryptor.new(SECURE, CIPHER)
    crypt.decrypt_and_verify(password)
  end
end
```

暗号化する `encrypt` メソッドを定義し、コールバックを使用して、データの保存前に実行するようにしました。
さらに、復号化する `decrypt` メソッドも定義しました。
実際に使用するときは、`SECURE` や `CIPHER` は適切な場所に定数として定義した方がいいです。

これで、パスワードが暗号化されて保存されます。

# 確認

実際に暗号化されているか確認します。

`rails s`でサーバを起動したら、`http://localhost:3000/users/new`にアクセスします。

そしてフォームに値を入力してサブミットしたら、コマンド `rails dbconsole` を実行して `select * from users;`を実行すると、暗号化の確認をすることができます。

# 終わりに

ActiveSupportには、便利なライブラリがたくさんあることを再確認できた。
httpdをソースコードビルドする


# 概要
## これはなに？
- Apache
- http://httpd.apache.org/

## 目標
- httpdがビルドされる

## 実行環境
- CentOS-7.0
- [ソースコードビルドするための環境](http://qiita.com/boscoworks/items/0d442d446436f7d72183)

## 依存パッケージ
- [zlib](http://qiita.com/boscoworks/items/a27a74e5da8adc3c1be8)
- [apr/apr-util](http://qiita.com/boscoworks/items/dbe4eeeec4dd1ad36992)
- [lynx/ncurses](http://qiita.com/boscoworks/items/92ba5aa792f8653c2a1d)
- [pcre](http://qiita.com/boscoworks/items/b57cee97700092a8627e)
- openssl-devel

# 導入手順
## 依存パッケージのインストール
- 上のリンクから依存パッケージをインストールする
- openssl-develは以下の手順でインストールする
```
sudo yum install openssl-devel
```

## tar.gz をダウンロードする
```
wget http://www.us.apache.org/dist//httpd/httpd-2.4.10.tar.gz -P /usr/local/share/downloaded/
```

## tar.gz を解凍する
```
tar -zxvf /usr/local/share/downloaded/httpd-2.4.10.tar.gz -C /usr/local/src/
```


## configure を実行する
```
cd /usr/local/src/httpd-2.4.10/

./configure ¥
--prefix=/usr/local/lib/httpd-2.4.10 ¥
--with-apr=/usr/local/lib/apr-1.5.1 ¥
--with-apr-util=/usr/local/lib/apr-util-1.5.4 ¥
--with-pcre=/usr/local/lib/pcre-8.36 ¥
--enable-cache ¥
--enable-disk-cache ¥
--enable-mem-cache ¥
--enable-logio ¥
--enable-headers ¥
--enable-ssl ¥
--enable-rewrite ¥
--enable-so ¥
--enable-proxy-http
```

## make を実行する
```
make
```

## make install する
```
sudo make install
```

## ディレクトリのシンボリックリンクを作成する
```
sudo ln -s /usr/local/lib/httpd-2.4.10/ /usr/local/httpd
```

# 削除手順
## 導入時に生成したファイルを削除する
```
sudo rm -r /usr/local/share/downloaded/httpd-2.4.10.tar.gz
sudo rm -r /usr/local/src/httpd-2.4.10/
sudo rm -r usr/local/lib/httpd-2.4.10/
sudo rm -r /usr/local/httpd
sudo rm -r /usr/local/etc/ld.so.conf.d/httpd-2.4.10.conf
sudo rm -r /etc/ld.so.conf.d/httpd-2.4.10.conf
```
SINGLE FASTA


perl のワンライナーに関しての、適当な解説 [#1](http://qiita.com/bunzaemon/items/fdb1115ac97fc0955236)/[#2](http://qiita.com/bunzaemon/items/e63947c7e59e0fe4ce3d)/[#3](http://qiita.com/bunzaemon/items/efcb3f20329bc68bb8bc)/#4



## Genbank format から sequence を取り出す
Genbank format ってなんぞ？って人は、[こちら](http://www.bioperl.org/wiki/GenBank_sequence_format)

普通に FASTA 選択しなおしてダウンロードすれば済むが、他人様がお持ちの場合は、バージョン違いとか、余計な地雷を踏む事にもなりかねないので、

```bash:
$ perl -lne 'next if !( /ORIGIN/ .. m{//} ); next if !/\d/ ; s/[\d\s]//g ; printf qq{>%s\n%s\n}, $ARGV, $_ ' GENBANK.txt
```


* `unless` は地雷
* `$ARGV` が気に入らないなら ACCESSION から文字列取ってくるとか、お好きに

アレな作業をしなきゃならん時には、

```bash:
$ bl2seq -i <( 上のコード ) -j SOMETHING.fa -p blastn
```

## consensus の N の位置と長さを知る

ゲノムプロジェクト毎に公表はしているものですが、、、

```bash:
$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ $, = "\t";  print $-[0] + 1, length $1 while $s =~ /(?<!N)(N{1,})(?!N)/ig' consensus.fa
```

大きな N の連続だけを知りたい場合 `(N{1,})` を `(N{1000,})` などと変更する。

本当に正しく算出出来てるのかどうか不安になったなら、

```bash:
$ perl -Mvars='$s' -lne ' next if />/ ; $s .= $_ }{ print substr $s, INDEX, LENGTH' consensus.fa
# INDEX は、posision - 1 
# LENGTH は、長さ
```

などとして、確認すれば良い。

コードゴルフ的には、 `$, = "\t"` だが、 `print join "\t"` の方が普通かな、、、


### 異物混入

もちろん、[これ](http://www.ddbj.nig.ac.jp/sub/ref1-j.html)は承知の上で。

`while $s =~ /(?<!N)(N{1,})(?!N)/ig` を　`while $s =~ /(?<![^ACGTN])([^ACGTN]{1,})(?![^ACGTN])/ig`
とすれば、異物が入ってた場合の、場所と長さを見る事も出来る。

### 制限酵素断片
例えば、HindIII （ 'A/AGCTT' で切れる。）での断片がどの様に表われるか知りたい場合。


```bash:配列そのまま
$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ my @d = split /(?<=A)(?=AGCTT)/, $s ; print for @d' consensus.fa
```

```bash:長さ
$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ my @d = split /(?<=A)(?=AGCTT)/, $s ; print length for @d' consensus.fa
```

うん？ BssHII（ 'G/CGCGC' で切れる。） とかって dry では、正確にはどう切れるんだっけか？

GC の長い繰替えし配列なんて結構あると思うが、、、まあ、 wet だと誤差範囲の一言で済む話だけど。

次回へ。
【超入門】マルチスレッドぉ？そんなの後だよ！あ・と・ま・わ・し！

CPU十分に使ってますか？
Core i7使ってるあなた！そのCPUパワー余らせてませんか？

そのプログラム、もっともっと高速動作させてみませんか？
エンジニアなら誰しもがあこがれるマルチスレッドの高速動作。
そんな「魅惑」あなたも習得しませんか？


マルチスレッドの根本は非同期です。
非同期をマスタすれば、マルチスレッドなんかちっとも難しくありません。
そんな非同期をマスタするためのトレーニング＆実装方法をお伝えします。


AndroidでもiOSでもWinでもMacでも、今はメインスレッド（UIスレッド）という
考え方というのがあります。

つまり、メインスレッドでマウスやキーボード、タッチ動作のイベントに対して
なにかを処理する、イベントドリブン型プログラムな訳です。


一方、プログラム言語は、基本上から下に「順次」「逐一」的に処理する書き方を
します。

それ故、普通にプログラムを書くと、メインスレッドで全部処理するようになってしまい、
CPUがさっぱり活かされません。

ではどうするか！
前述したとおり、マルチスレッドの根本は、非同期です。
じゃぁ、非同期になるよう、実装、トレーニングすれば良いんだ！
ということになります。

そのトレーニング方法は・・・
基本遅延実行にしてしまうことです。

Java（Androidを例にとります）だと

```java:
//Some Activity Start
_handler.post(new Runnable() {
    @Override
    public void run() {

        //do something
        Intent intent = new Intent(MainActivity.this, someClass);
        startActivity(intent);

    }
});
```

Objective-Cだと

```objc:
//各種WebViewのキャッシュクリア
dispatch_async(main_queue, ^{

    NSURLCache *cache = [NSURLCache sharedURLCache];
    [cache removeAllCachedResponses];

});
```

こんな感じ。

とにかく、ある一定のブロック単位で、どんどん、後回しに処理を遅延実行
させてあげるように実装していきます。
メインスレッドにポイポイ処理を放り込んでいくイメージです。
ポイポイ〜〜〜ってね。

これだけ！

基本遅延実行させてあげるように実装するだけで、非同期の処理に頭を
ならしていくわけです。
そうすれば、非同期処理の勘所をつかめるようになり、
あーここは、同期入れてあげないと動かないなー等がわかってくるように
なります。

もうそうなれば、脱入門者！
同期は、mutexなり、同期オブジェクトなりで。
同期に関する記事は、そこら中にあふれていますので、そこは、他の記事に
任せます。

もし、リクエストがあれば、書きます。


ちなみに、上記のように遅延実行をさせてあげるだけで、アプリのレスポンスは
格段に良くなります！
別次元のアプリみたいになりますよ！

非同期の処理になれてしまえばもうこっちのもん！
後はスレッド起動させて処理させてあげるようにしてあげれば、マルチスレッド
プログラミングの完成です！

Let's try!!!
お試しあれ〜！！！
perl のワンライナーの初歩 #3


perl のワンライナーに関しての、適当な解説 [#1](http://qiita.com/bunzaemon/items/fdb1115ac97fc0955236)/[#2](http://qiita.com/bunzaemon/items/e63947c7e59e0fe4ce3d)/#3/#4

##### 頻繁に使う特殊変数など
について書いとくべきか。重複しての説明が増えるけど
当然、[ここ](http://perldoc.jp/docs/perl/5.20.1/perlvar.pod)とか、[ここ](http://perldoc.jp/docs/perl/5.20.1/perlop.pod)とかには目を通すべき

## $ARGV
今開いてるファイル名を収納

ループを抜けても、初期化はされないので

```bash:
$ perl -lne '}{ print $ARGV' SOMETHING.txt
```
などとする事も

## $.
ファイルハンドルのライン番号を表示

```bash:
$ perl -lne 'print $.' SOMETHING.txt
```
すればインクリメントするのが分かる。

* ワンライナーでなくとも `while(<$fh>){ print $. }` 的に出番は多い。
* ワンライナーの、`-n(p)e` で複数ファイルを扱う場合。ファイルハンドルを開き直してない
    * =>　トータルのライン番号を表示する、、、

## eof FILEHANDLE
EOF の判定、[ここ](http://perldoc.jp/func/eof)読め
* ワンライナー `-n(p)e` 的には `eof` で、複数ファイルそれぞれの末尾を判定
* `eof()` の存在は地雷なので忘れる。
* もしくは、明示的に `eof ARGV` などと、、、

と言う事で、上記 `$.` のリセットなどにも使う

```bash:
$ perl -lne 'print join qq{\t}, $ARGV, $. ; $. = 0 if eof' SOME.txt THING.txt
```

## BEGIN{}
最初に処理を行なう特殊ブロック
`-n(p)e` で、どうしてもループ開始前に処理がしたい場合などに使う

## END{}
最後に処理を行なう特殊ブロック
`}{` の方がタイプ数が少ないから、そっちを使ってしまうが、好みの問題

## $,
リストのプリントのセパレータ設定
つうことで数行上のワンライナーは、

```bash:
$ perl -lne 'BEGIN{ $, = qq{\t} } print $ARGV, $. ; $. = 0 if eof' SOME.txt THING.txt
```

こうも書ける

## %
二項演算子としては剰余を返す
ワンライナー的には行における挙動制御の重要な演算子

例えば、4行おきにある一定の形式が繰り返されるファイルがある

```bash:fastqもどき
@名前
ACGTACGTACGTACGT
+
IIIIIIIIIIIIIIII
```

名前の行だけ取り出したければ、

```bash:
$ perl -lne 'print if $. % 4 == 1 ; ' SOMETHING.txt
```

だし、名前と塩基配列を取り出したければ、

```bash:
$ perl -lne 'print if ( $. - 1 ) % 4 <= 1 ; ' SOMETHING.txt
```
だ。

## 三項演算子
[三項演算子](http://perldoc.jp/docs/perl/5.20.1/perlop.pod#Conditional32Operator)は通常のスクリプトで使用するのには、否定的な人も多い
しかし、ワンライナー的には非常に重要になってくる

```bash:
(条件) ? 真の時の値 : 偽の時の値
```

例えば、ファイルハンドルを切り替えたりするのに、一々 `if~else` を書いてはいられない

```bash:
$ perl -lne 'print { ( $. - 1 ) % 4 <= 2 ? *STDOUT : *STDERR } $_' SOMETHING.txt > /dev/null
```

## 範囲演算子
スカラコンテキストでの[範囲演算子](http://perldoc.jp/docs/perl/5.20.1/perlop.pod#Range32Operators)の利用も重要だ

```bash:
条件1 .. 条件2
```

定型文章の切り出しには欠かせない。

例えば前述の 'fastqもどき' 書式の名前から'+' 行まで切り出すのならば、

```bash:
$ perl -lne 'print if /^\@/ .. /^\+/ ' SOMETING.txt
```

* もちろん現実の FASTQ に適用してはならない。
    * qual 列先頭に '@' が（ついでに '+' も）出現する可能性があるから


2行目から5行目を切り出すには、

```bash:
$ perl -lne 'print if 2 .. 5' SOMETING.txt
```

#### 20151015 | 追記

自分で perldoc へのリンクを貼っておきながら、つい最近まで、`E0` の活用をしていなかった事に気付く。

マルチファスタからシーケンスを引っ込ぬくのは、

```
$ perl -lne 'next if ! ( $a = />gi\|STR/ ... />/ ); last if $b and />/; print ; $b = $a' MULTIFASTA 
```

って書いてたけど、

```
$ perl -lne 'next if !($a = />gi\|STR/ ... />/ and $a !~ /E0$/ ); print' MULTIFASTA
```

で良い。


## クォート
ワンライナー中に限らず、視認性やタイプのしやすさから、クォートには別表記が存在する

|表記|別記|
|:--|:--|
|''|q{}|
|""|qq{}|
|``|qx{}|
webで頑張っている元教え子ちゃんにおくるまとめ＃3


#記述の動機
専門学校でPG、Webを教え始めてもう８年。
マイナススタートの２年はあまりに短い。教えきれなかったことが多い。
頑張ってる元教え子ちゃんにむけてまとめているのですが
ついでに、公開しておきます。


#ローカルサーバー
避けられません。
コーダーでも、開発サーバー位は構築できないと辛いです。
以下Winの場合でまとめておきます。

##Xampp,WAMP
Windows上でApache＋MySQL＋PHPの環境を構築。
どちらも、インストールは楽勝だけど、MySqlの文字コード設定がネックになる。


###Xampp
https://www.apachefriends.org/jp/index.html

###WAMP
http://sourceforge.jp/magazine/09/10/19/041219

##仮想環境
###VmwarePlayer
製品が多いので「どれ？」ってなるけど、Playerを選んで下さい。

https://my.vmware.com/jp/web/vmware/downloads

![スクリーンショット 2015-01-10 17.02.11.png](https://qiita-image-store.s3.amazonaws.com/0/33317/7d8add3a-36cc-7d07-948e-cc2669348f88.png "スクリーンショット 2015-01-10 17.02.11.png")

##ディストリ
開発サーバーとしては、RPM系。
RHELの場合は、サーバーエンジニアが全てやってくれる。
というか、コーダーは触ってはいかん。
CentOS6.5です。７はまだ早い。
この記事はまとまっていていいと思います。
http://fa11enprince.hatenablog.com/entry/2014/05/11/041933

##最低限必要となるもの
FTP vsftpd
SSH OPENSSH
apache
Mysql
PHP
どのバージョンが必要になるかは案件ごとに違うだろうし、資料は沢山あります。社内規程もあるだろうから、確認して構築。

##FTPクライアント
Fillezilla
https://filezilla-project.org/download.php?show_all=1

##SSHクライアント
Tera Term
現時点の最新版はこちら
http://sourceforge.jp/projects/ttssh2/releases/62353
PCREをソースコードビルドする


# 概要
## これはなに？
- Perl5 互換の正規表現をC言語で実装したライブラリ
- http://pcre.org/

## 目標
- pcre の共有オブジェクトがシステムに読み込まれる
- pcre の実行ファイルが使用可能になる

## 実行環境
- CentOS-7.0
- [ソースコードビルドするための環境](http://qiita.com/boscoworks/items/0d442d446436f7d72183)

## 依存パッケージ
- なし

# 導入手順
## tar.gz をダウンロードする
```
wget http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz -P /usr/local/share/downloaded/
```

## tar.gz を解凍する
```
tar -zxvf /usr/local/share/downloaded/pcre-8.36.tar.gz -C /usr/local/src/
```


## configure を実行する
```
cd /usr/local/src/pcre-8.36/

./configure --prefix=/usr/local/lib/pcre-8.36
```

## make を実行する
```
make
```

## make install する
```
sudo make install
```

## ディレクトリのシンボリックリンクを作成する
```
sudo ln -s /usr/local/lib/pcre-8.36 /usr/local/pcre
```


## 共有オブジェクトのパスを登録する
```
echo "/usr/local/lib/pcre-8.36/lib" > /usr/local/etc/ld.so.conf.d/pcre-8.36.conf

sudo ln -s /usr/local/etc/ld.so.conf.d/pcre-8.36.conf /etc/ld.so.conf.d/pcre-8.36.conf

sudo ldconfig
```

# 削除手順
## 導入時に生成したファイルを削除する
```
sudo rm -r /usr/local/share/downloaded/pcre-8.36.tar.gz
sudo rm -r /usr/local/src/pcre-8.36/
sudo rm -r usr/local/lib/pcre-8.36/
sudo rm -r /usr/local/pcre
sudo rm -r /usr/local/etc/ld.so.conf.d/pcre-8.36.conf
sudo rm -r /etc/ld.so.conf.d/pcre-8.36.conf
```

## 共有オブジェクトのパスを更新する
```
sudo ldconfig
```
curl で No-IP のIPアドレスを更新する方法

#### 概要

自宅サーバを運用している場合、IPアドレスが動的に変わることがよくあります。
そんなときは無料 Dynamic DNS サービスを使うと常に同じホスト名で動的に変わるIPアドレスを更新することができます。

自分は [No-IP](https://www.noip.com/) を使ってますが、ここはIPアドレスの更新に Web API が提供されています。
IPアドレスの更新方法として DiCE クライアントがよく紹介されていますが、 Web API が提供されているのでクライアントをインストールする必要ありません。curl コマンドで簡単に更新する事が出来ます。

#### 更新方法
```
curl "https://YOUR-USERNAME:YOUR-PASSWORD@dynupdate.no-ip.com/nic/update?hostname=YOUR-HOSTNAME"
```
YOUR-USERNAME, YOUR-PASSWORD, YOUR-HOSTNAME を自分のものに変更してください。

参考 https://www.noip.com/integrate/request


Linux サーバなどの場合は cron と組み合わせると定期的にIPアドレスの更新が出来るようになります。

**注意**
cron に登録する場合、更新頻度が頻繁になると No-IP サーバに対して負荷がかかるようになるので自重しましょう。私は２時間に１回かつ日中帯（外出している時だけ）にしています。

#### cron の例
```
40 8-23/2 * * * curl -s "https://YOUR-USERNAME:YOUR-PASSWORD@dynupdate.no-ip.com/nic/update?hostname=YOUR-HOSTNAME" > /dev/null
```

生のパスワード が crontab に登録されるのが嫌な場合は次のように暗号化できます。

```
% echo -n YOUR-USERNAME:YOUR-PASSWORD | base64 
WU9VUi1VU0VSTkFNRTpZT1VSLVBBU1NXT1JE
#=> この "WU9VUi1VU0VSTkFNRTpZT1VSLVBBU1NXT1JE" をBasic 認証として登録

40 8-23/2 * * * curl -s -H "Authorization: Basic WU9VUi1VU0VSTkFNRTpZT1VSLVBBU1NXT1JE" "https://dynupdate.no-ip.com/nic/update?hostname=YOUR-HOSTNAME" > /dev/null
```
Laravelで…vendor/autoload.php): failed to open stream: No such file or directory というエラーによりデフォルト画面が表示されない解決方法

homestead で homestead up が成功していて、[homesteadでnginxのログを表示](http://qiita.com/pugiemonn/items/44b8bac1fd57688e853b)してエラーを解消したものの、Laravelがautoload.phpが無いというエラー画面を出してきました。

# ファイルが読み込めないというエラー
エラーが出てしまいました。

```bash:autoload.phpが読み込めないとエラー
( ! ) Warning: require(/home/vagrant/workspace/php/Laravel/laravel-homestead/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory
```
画像
<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/e714f2e9-352e-dad0-8352-f54b97efd520.png" width="320" />

# composerをインストールする
ファイルが無いらしいので、composer installすればいいみたいです。

```bash:Laravelを置いてあるディレクトリに移動
cd /home/vagrant/workspace/php/Laravel/laravel-homestead/
```
composer installしました。

```bash:composerをinstall
composer install

# 色々インストールされました
```
コメントいただいたところによると`composer update`でもいいみたいです。

# 再度ブラウザにアクセスすると
Laravelという画面がでました。
<img width="320" src="https://qiita-image-store.s3.amazonaws.com/0/1624/b5bf3e47-3a79-a060-71f5-4869bfa16031.png" />

この後どうしたらいいのやら

# 参考
https://teamtreehouse.com/forum/how-can-i-import-project-files-without-getting-errors
https://twitter.com/sharo0331pc/status/553819024111312896
https://twitter.com/fagai/status/553819095347376128
Retina環境でOpenGLを使う時はViewport設定に気をつけよう！


Mac環境のOpenGLでハマったので、備忘録として書きます。

MacのOpenGL Core Profile環境で、昔（２００７年頃）自作してたFrame Buffer Objectのヘルパライブラリを
引っ張りだして、FBO使ったんですよ。FBO。

そのライブラリ使って、FBOにポリゴン描画したんです。
で、FBOにアタッチしてたテクスチャを、画面をピッタリ覆う四角ポリゴンにはっつけて表示確認したんですね。

そしたら、なんか描画したはずの絵の４分の１の領域しかポリゴンに貼られてないでやんの。

自作ライブラリのバグか？　テクスチャをポリゴンに貼っつける処理でケアレスミスか？
と色々調べたけど、どれも正常。

そこでOpenGL Profilerでテクスチャ画像を見てみると、
レンダリングしたはずの絵の４分の１の部分しか映っていない。

つまり、FBOへのレンダリングの時点で失敗している。

なんでよ！？

小一時間悩んだ結果、もしかして、とおもって

```
GLint originalViewport[4];
glGetIntegerv(GL_VIEWPORT, originalViewport);
```

してみた。そしたら、取れたのは
[0, 0, 1024, 1024]

ちなみに、GLFW（GLUTの代替ライブラリです）のウィンドウに指定したサイズは512, 512なんです。

```
gp_window = glfwCreateWindow(512, 512, "Hello!", NULL, NULL);
```

はっはーん。

Retinaだなｗ

つまり、glfwCreateWindowで指定するサイズは、あくまで論理ピクセルサイズ（適当に今命名、ホントはちゃんとした用語があるはずだけど）
なんですね。Retinaディスプレイでの物理ピクセルサイズは、縦横それぞれ２倍になるので、

実際にウィンドウに描画されるピクセルは1024, 1024なんです。
だから、Viewportも自動的に[0, 0, 1024, 1024]に設定されていた。

でも、私はFBOのテクスチャのサイズを、GLFWに設定した論理ピクセルサイズ512, 512と同じ数値で指定してしまった。

そのテクスチャ（512,512）に対し、Viewport設定[0, 0, 1024, 1024]のままレンダリングしてしまったので、
４分の１の領域しかテクスチャに描かれなかったわけです。

FBOへのレンダリング時のみ、Viewportサイズを[0, 0, 512, 512]にすることで、解決しました。

いや、これちょっとした落とし穴ですねｗ
最速Template EngineのECTは本当に速かった。レスポンスを60倍早くした話【Node.js】


# 爆速テンプレートエンジンECTのご紹介
* [今すぐJadeを最新版にして、selfオプションを有効にすればレスポンスが8倍早くなる（かも）【Node.js】](http://qiita.com/varmil/items/887ff9c5e1f9a6a1e24e) の関連記事です。
* Jadeのsettingを見直すことでそれなりに高速化しますが、ECTを使えばさらに爆速に。

# [ECT](http://ectjs.com/)とは
* **Fastest** JavaScript template engine with embedded **CoffeeScript** syntax
* 公式が下記のベンチマークを出しています。圧倒的...!

```js
Rendering 100000 templates:

ECT
  Escaped   : 2180ms
  Unescaped : 133ms
  Total     : 2313ms

EJS without `with`
  Escaped   : 4526ms
  Unescaped : 485ms
  Total     : 5011ms

Underscore
  Escaped   : 5775ms
  Unescaped : 2486ms
  Total     : 8261ms

EJS
  Escaped   : 6316ms
  Unescaped : 2734ms
  Total     : 9050ms

Jade without `with`
  Escaped   : 8566ms
  Unescaped : 2982ms
  Total     : 11548ms

Jade
  Escaped   : 18330ms
  Unescaped : 12095ms
  Total     : 30425ms
```

* クライアントサイドでも動作します。
* githubの最終更新が 9 Jun 2014 なのが少し気になりましたが、私の場合移植しても問題は発生しませんでした。

# ペロッ...これはCoffeeScript!!
* 本当にcoffeescriptっぽく記述できます。例えば以下

```coffeescript
# 存在確認演算子も後置のifもなんのその
<%= @head.title if @head?.title %>
```

```coffeescript
# 組込み関数だって普通に使えます
<% now = new Date(); strDate = now.getFullYear() + '年' + (now.getMonth() + 1) + '月' + now.getDate() + '日'; %>
<%- strDate %> # 例) 2015年1月10日
```

```coffeescript
# loopは for ~ in で統一（配列だからfor in, ハッシュだからfor of, は無い）
<% for item in @items : %>
  <%= item.name %>
<% end %>
```

* こんな便利な機能も

```coffeescript
# includeするテンプレートにobjectを食わせることが可能。超便利（Partials）
<% include 'hoge.ect', { foo: 'bar', title: 'hello' } %>
```


# 結び
* Jadeを投げ捨ててECTを使ってみては如何でしょうか。

| Jade 1.7.0 | ECT 0.5.9   |
|:----------:|:-----------:|
|   620 ms   |    10 ms    |
はじめてのREXX

入社以来、ホスト基盤エンジニアとして過ごしてきましたが、
REXXって便利だなーと思って、
若手ホスト基盤エンジニアに向けて入門編を書いてみようかと。。。

**お作法**
まずは１行目にコメント行でREXXと記述する必要があります。
ちなみにコメント行は /* コメント */で囲います。

```lang:お作法
/* REXX */
```

**基本**
最初はなんといっても**HelloWorld**でしょうか？
ということでHelloWorldしてみます。
以下の３つの挙動はすべて同じです。


```lang:１．出力文字列を”で囲う。
/* REXX */
SAY "HelloWorld"
```
```lang:２．出力文字列を直書き。
/* REXX */
SAY HelloWorld
```
```lang:３．出力文字列を’で囲う。
/* REXX */
SAY 'HelloWorld'
```

REXXの問題は文字列も変数も出力してしまうところ。よくもわるくも。
例えば、上記２のパターンで
変数：HelloWorldに文字列「こんにちは」が入っていたら、出力は`こんにちは`ですが、
からっぽの場合、`HelloWorld`が出力されてしまうんですね。

柔軟なんですが、型を気にする言語の方からすると
気持ち悪いこと、この上ないのでは？

REXXは最大のメリットはJCLとの相性が抜群なところだと思います。
オープン系の方はシェルが慣れているので、シェルを使いたがりますが、
z/OS上で動く、USSシェルだと制限が多いんです。
難しく感じるかもしれませんが、z版VBAみたいなもんです。

**引数の受け取り方**
引数を渡すときは受け取り時にこんなふうに記述します。
以下の１と２は同じです。

```lang:引数の受け取り方１
Parse Arg 引数名１
```
```lang:引数の受け取り方２
Arg1=Arg(1)
```

複数はこれ

```lang:引数の受け取り方３
Parse Arg 引数名１　引数名２
```
REXXは引数で`AAA BBB`を渡しても、
受け取るREXXが`Parse Arg Arg1`になっていたりすると
Arg1には`AAA BBB`が格納されます。
個人的には実装の際は、REXXに渡すのは複数の値でも「,」で連結して
REXX内部で分割していくほうが好きです。

**文字の分割**
REXXは結構文字列が使いやすいです。
上で説明しているように
Arg1には`AAA BBB`が格納されているとします。
この時、AAA,BBBをそれぞれ変数にいれたいときは以下のように記述します。

```lang:文字の分割
Parse Value Arg1 With Str1" "Str2
```
これでStr1にはAAA,Str2にはBBBが格納されるわけです。
うーん便利。

**終わり方**
これを記述するだけです。

```lang:終了
Exit 0
```
この例では0を記述していますが、ここに記述する数値が呼び出し元に返されます。

とりあえずこんな感じですかね。
テーブル構造とかは別の機会に記述してみようと思います。
iOSで何か作ってみる。その１

Xcodeの使い方。

**1.コメントアウトのショートカット**
Cmd + /

**2.検索、置換**
検索：Cmd + F

置換：Shift + Cmd + F

初心者ゆえにこんなので詰まるのがしんどいorz

2015/01/12追記

**3.ビルド**
Cmd + b

**4.ビルド＋実行**
Cmd + r
1x1透過Gifによる広告のインプレッション計測

1x1透過Gifによるインプレッション計測を行うためのメモ。まず、DNS設定で`b.danshihack.com`をロギング用のサーバーのIPアドレスに飛ぶばすように設定。次にサーバー側で1x1透過Gifを設置して、rooting設定する。

```nginx
server {
    listen      80;
    server_name b.danshihack.com;
    root        /var/www/vhosts/b.danshihack.com;
    index       b;
    charset     utf-8;

    access_log  /var/log/nginx/b.danshihack.com.access.log  main;
    error_log   /var/log/nginx/b.danshihack.com.error.log;
    
}
```

`/var/www/vhosts/b.danshihack.com/b`に1x1透過Gifを置いて完成。画像はここからいただきました。

[空白スペース用☆透過画像](http://homepage2.nifty.com/hiyori-bl/hp/sozai/space/space.html)

例えば、こんな感じのimgタグを埋めればサーバーにログが残ります。

`<img src="//b.danshihack.com/b?ad_type=123&ad_id=456">`
Swift で Either

追記

`@autoclosure` は呼び出すたびに評価されてしまうらしいので、Box<T> を使う形に修正（ yad さん、ご指摘有難うございました）
https://github.com/amo12937/amo.Either/tree/v1.1.0

```
git clone -b v1.1.0 git@github.com:amo12937/amo.Either.git
```

------------------------------------
「2つの型のどちらか」を表すモナドを作った。

https://github.com/amo12937/amo.Either/tree/v1.0.0

# 使い方
- リポジトリをクローン

```
git clone -b v1.0.0 git@github.com:amo12937/amo.Either.git
```

- xcode でビルド
- Products/Either.framework を使いたいプロジェクトへコピー

# 仕様兼テスト
## 2つの型のどちらかを保持できる
```swift:EitherTests.swift
    func test_2つの型のどちらかを保持できる() {
        let n = 1
        let u = Either<Int, String>.Left(n)
        XCTAssertEqual(n, u.left()!)
        XCTAssertTrue(u.right() == nil)
        
        let s = "hoge"
        let v = Either<Int, String>.Right(s)
        XCTAssertTrue(v.left() == nil)
        XCTAssertEqual(s, v.right()!)
    }
```

## coproductは返り値が同じ型の2つの関数からEither型を引数とする関数を返す
```swift:EitherTests.swift
    func test_coproductは返り値が同じ型の2つの関数からEither型を引数とする関数を返す() {
        var f_count = 0
        func f(b: Bool) -> String {
            f_count++
            return "\(b)"
        }
        
        var g_count = 0
        func g(n: Int) -> String {
            g_count++
            return "\(n)"
        }
        
        let u = Either.coproduct(f, g)
        
        let x = Either<Bool, Int>.bind(true)
        let y = Either<Bool, Int>.bind(1)
        
        XCTAssertEqual(0, f_count)
        XCTAssertEqual("true", u(x))
        XCTAssertEqual(1, f_count)
        
        XCTAssertEqual(0, g_count)
        XCTAssertEqual("1", u(y))
        XCTAssertEqual(1, g_count)
    }
```
    
## bindはEitherのconstructorと同じ働きをする
```swift:EitherTests.swift
    func test_bindはEitherのconstructorと同じ働きをする() {
        let n = 1
        let u = Either<Int, String>.bind(n)
        XCTAssertEqual(n, u.left()!)
        XCTAssertTrue(u.right() == nil)
        
        let s = "hoge"
        let v = Either<Int, String>.bind(s)
        XCTAssertTrue(v.left() == nil)
        XCTAssertEqual(s, v.right()!)
    }
```
    
## bindFuncは関数をbindする
```swift:EitherTests.swift
    func test_bindFuncは関数をbindする() {
        let l = ["a", "b", "c"]

        let f = {(a: [String]) -> Int in a.count}
        let u = Either<Int, String>.bindFunc(f)
        XCTAssertEqual(3, u(l).left()!)
        XCTAssertTrue(u(l).right() == nil)
        
        let g = {(a: [String]) -> String in "".join(a)}
        let v = Either<Int, String>.bindFunc(g)
        XCTAssertTrue(v(l).left() == nil)
        XCTAssertEqual("abc", v(l).right()!)
    }
```
homestead up したけどnginxの404画面が出るのでnginxのログを見ました

[homestead upでportを変えろとエラーがでる](http://qiita.com/pugiemonn/items/c5f5dcc8946f78a6f8a8)など色々あったものの、なんとかhomestead upが成功すると、192.168.10.10にアクセスせよとあります。
ということで、http://192.168.10.10/ にアクセスしました。

# nginxで404がでる
nginxから404謎のエラーでわからんマン

<img width="300" src="https://qiita-image-store.s3.amazonaws.com/0/1624/6c8a9555-e303-a662-353b-07fa502eb3c4.png" />

nginxのログを見てみることにします。

# nginxのログを確認する
vagrantにsshでログインします。

```bash:vagrantにsshでアクセス
homestead ssh
```
どうやら/etc/nginx/sites-available/homestead.appというファイルがnginxのhomestead.app設定ファイルみたいです。

```bash:nginxのhomestead.app設定ファイルをみる
sudo vi /etc/nginx/sites-available/homestead.app

略

error_log  /var/log/nginx/homestead.app-error.log error;
```
なるほどです。homesteadのnginxが吐くエラーは、/var/log/nginx/homestead.app-error.log に吐出されるみたいです。

# nginxのログをみる
tailコマンドでhomestead.app-error.logを流しっぱなしにしてエラーの原因を調査します。

```bash:homestead.app-error.logのログを見る
sudo tail -f /var/log/nginx/homestead.app-error.log
```
あとは http://192.168.10.10/ にアクセスして見てみれば原因がわかるかもしれません。
JabbRのソースコード確認 (クライアントサイド)

ASP.NET + SignalRで作成されているチャットアプリであるJabbR( https://jabbr.net/ )のソースコードを確認した。

ソースは [ここ](https://github.com/JabbR/JabbR)から

タイトルにもある通り、クライアントサイドについてのメモを記す。

## *.cshtml

ビューエンジンはRazorを使用。

jQuery.tmpl.js を多用していて正直読む気がしなかった。

ちゃんと見れば理解できるのでしょうが、今回はパス。

## Chat.ui.js

JabbRはUIに関係する処理を一つのuiオブジェクトにまとめている。

また、独自のUI操作イベントを定義し、外部との処理連携もできるように設計されている。

```Chat.ui.js
(function($, window, document, ...){

  //コンポーネント毎のjQueryオブジェクト変数定義
  var $chatArea = null,
    $tabs = null,
    ....;

  //UI操作毎のメソッドをまとめたオブジェクト
  var ui = {
    events : {
      //独自イベント名の定義
      closeRoom: 'jabbr.ui.closeRoom',
      prevMessage: 'jabbr.ui.prevMessage',
      ...
    },
    initialize : function(){
      //UI要素のイベントバインドなど
    },
    run : function(){
      //URLからアクセスした部屋を判断し、UI表示を開始
    },
    setMessage : function(value){
      //メッセージセット
    },
    ...
  };

  window.chat.ui = ui;

})(window.jQuery, window, window.document, ...)
```

## Chat.js

SignalRハブのクライアントメソッド定義や、

UIオブジェクトの各イベントに対応するイベントハンドラーをバインドするなどしている。

イベントハンドラーについて、具体的には、

+ イベントハンドラ内でさらに別のUI操作を行う。

+ UI操作に対応するSignalRサーバーメソッド呼び出しを行う。

のようなことを行っていた。

``` Chat.js
(function ($, connection, window, ui, utility) {

  //変数定義
  var chat = connection.chat, $ui = $(ui), ...

  //ハブのクライアントメソッド
  chat.client.joinRoom = function (room) {...};
  chat.client.logOn = function (rooms, myRooms, userPreferences) {...};
  ...

  //UI操作に対するイベント処理
  $ui.bind(ui.events.fileUploaded, function (ev, uploader) {...};
  $ui.bind(ui.events.sendMessage, function (ev, msg, msgId, isCommand) {
    ...
    //ハブのサーバーメソッド呼び出し
    chat.server.send(clientMessage);
    ...
  };
  ...

})(window.jQuery, window.jQuery.connection, window, window.chat.ui, window.chat.utility);
```
homestead up で The forwarded port to 8000 is already in use on the host machine. と言われる解決方法

Mac+vagrant環境で、vagrantが立ち上がらず、homestead upがうまくいきませんでした(☝ ՞ਊ ՞)

# 前提条件
[Macにbrewでcomposerをインストール済み](http://qiita.com/pugiemonn/items/44b426c9c3475299c18f)で、homesteadをcomposerでインストール済みとします。

```bash:homesteadをインストール
composer global require laravel/homestead:v2.0.7
```
なぜv2.0.7なのは[v2.0.8でエラー](http://qiita.com/pugiemonn/items/c92648b685e03ff1d0f7)が出たからです。

# homestead upでportが使われているとエラー
homestead upをしてvagrantを立ち上げます。

```
homestead up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'laravel/homestead'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'laravel/homestead' is up to date...
==> default: Setting the name of the VM: homestead
Vagrant cannot forward the specified ports on this VM, since they
would collide with some other application that is already listening
on these ports. The forwarded port to 8000 is already in use
on the host machine.

To fix this, modify your current projects Vagrantfile to use another
port. Example, where '1234' would be replaced by a unique host port:

  config.vm.network :forwarded_port, guest: 80, host: 1234

Sometimes, Vagrant will attempt to auto-correct this for you. In this
case, Vagrant was unable to. This is usually because the guest machine
is in a state which doesn't allow modifying port forwarding.
```
portを変えろとあります。

# homestead.rbに書いてあるhostの番号を変更する
Macの~/.composerディレクトリの下にhomesteadディレクトリがありますので、そちらのhomestead.rbを変更しました。

```bash:homestead.rbのhost番号を変更する
vi ~/.composer/vendor/laravel/homestead/scripts/homestead.rb

# 元からあった8000番の記述をコメントに
# config.vm.network "forwarded_port", guest: 80, host: 8000
# 8080番を追加
config.vm.network "forwarded_port", guest: 80, host: 8080
```
homestead.rbにhost8000番の記述があったので、8080（適当）番に変更しました。

homesteadのディレクトリにVagrantfileがあり、こっちの ~/.composer/vendor/laravel/homestead/Vagrantfile にforwarded_portを書いたらいいのかな？と思ったのですが、Vagrantfileに書いてもダメでした＼(^o^)／

# 再度homestead up
再度homestead upを試します。

```bash:homesteadをup
homestead up
```
今度は起動できました。

もっとスマートな方法はないのかしら(☝ ՞ਊ ՞)
emacsの中でmarkdownをpreviewする

# markdownファイルをgripでレンダリングしてemcas-w3mで開く
[![Gyazo](http://i.gyazo.com/81283fabc12f6d8e1f1aa9d57b8efefc.png)](http://gyazo.com/81283fabc12f6d8e1f1aa9d57b8efefc)

emacsでmarkdownを書いて、emacsの中でpreviewする方法。
emacsの中から出たくない人向け。

## 準備
[markdown-mode](http://jblevins.org/projects/markdown-mode/)とか
[emacs-w3m](http://emacs-w3m.namazu.org/index-ja.html)とか
[grip](https://github.com/joeyespo/grip)を入れておきます.

## .emacs
`.emacs`に以下のようなものを追加

```lisp
(require 'w3m)
(require 'markdown-mode)

(defun w3m-browse-url-other-window (url &optional newwin)
  (let ((w3m-pop-up-windows t))
    (if (one-window-p) (split-window))
    (other-window 1)
    (w3m-browse-url url newwin)))

(defun markdown-render-w3m (n)
  (interactive "p")
  (message (buffer-file-name))
  (call-process "/usr/local/bin/grip" nil nil nil
                "--gfm" "--export"
                (buffer-file-name)
                "/tmp/grip.html")
  (w3m-browse-url-other-window "file://tmp/grip.html")
  )
(define-key markdown-mode-map "\C-c \C-c" 'markdown-render-w3m)
```

そうすると`C-c C-c`でemacsの中でmarkdownがpreviewできます.
初心者の俺がIDCFクラウドを借りてみた（2）

ずぶの初心者の俺がIDCFクラウドを借りた備忘録の続きです。
接続してからユーザーを設定するまでです。
ドットインストールの[さくらのVPS入門](http://dotinstall.com/lessons/basic_sakura_vps)を参考に実施した手順を書き留めておきます。

## ユーザー設定
rootしか作ってないので、自分のユーザーを作成します。

まずログインしたらまずOSをアップデートします。
その後にrootのパスワードを変更します。

```
# yum update
# passwd
（パスワードを2回入力）
```

そしてユーザーを作成します。

```
# useradd hdty
# passwd hdty
（パスワードを2回入力）
# usermod -G wheel hdty
# visudo
```

viでsudoの設定画面が立ち上がるので、`/wheel`でwheel文字列を探します。
そして`Allows people in group wheel to run all commands`の下のコメントアウトを外します。
コメントアウトを外したら`:wq`で保存終了します。

その後SSH鍵を生成します。

```
# su hdty
$ cd
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
（保存場所はデフォルトのまま）
パスフレーズを入力します。
$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
```

その後、秘密鍵をテキストファイルとしてローカルに保存します。テキストエディタにコピペするといいらしいです。
（俺はCyberduckでSFTP接続して持ってきました）
保存先はユーザーの.sshフォルダです。

その後はRlogin（Windows）に以下の設定します。

エントリー「IDCFhdty」
ServerAdressには仮想マシンのIPアドレスを入力
SocketPortはSSH用のポート番号を入力
User「hdty」
Password 鍵生成時に入力したパスフレーズ
ターミナル「Kterm」を選択
SSH鍵は今保存した鍵を指定
エンコード「UTF-8」

これでうまく接続できたら、サーバー上の秘密鍵を削除しておきます。
そうしたらrootでログインできなくしておきます。

```
$ su -
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
# vim /etc/ssh/sshd_config
 → PermitRootLogin yesをnoに変更
 → :wqで保存終了
# service sshd restart
```

ポートはポートフォワードで変えたので設定ファイルはいじってません。
PasswordAuthentication は初期的にnoになっているはずです。

これでユーザー設定が終了しました。