OmniAICreator/Qiita-1.07M huggingface dataset:
[Swift] Swift Memo

* Default Value

```swift
b = a ?? "empty"
//equals
b = (a == nil ? "empty" : a!)
```
* Dictionary

```swift
var dic1 = [String:Any]()
//equals
var dic2 = Dictionary<String,Any>()
```

* Sort

```swift
var a = [10, 5, 2, 3, 1]

a.sort({x, y in x > y})
a.sort({$0 > $1})
sort(&a, {$0 > $1})
```

* Spilit string

```swift
let array = split(str!) { $0 == " " }
```
c++ builder > フォーム名がおかしな時の対処 > プロジェクトに追加しなおす

```txt:動作確認
C++ Builder XE4
```

Unit1.cppを選択時にオブジェクトインスペクタ > プロパティ > 「フォーム名」が"F"という記載になっていた。
このためか、通常はプロジェクトを開いた時にそのフォームが開くはずが、別のフォームが開くようになっていた。

Unit1.cppをプロジェクトから一度取り除き、追加しなおしたらなおった。
RubyMine と Pow を使うなら Port proxying が便利です


Powを使うと、アプリのディレクトリへのシンボリックリンクを ~/.pow 以下に作っておくだけで、 

- http://myapp.dev/ のようなURLでアプリにアクセスできる
- http://myapp.10.0.1.43.xip.io/ のようなURLで別マシンからもアクセスできる
- Powが自動でアプリを起動や終了をしてくれる

と便利なのですが、RubyMineと組み合わせたときにイマイチなところがあります。

この記事は次のようなことをしたい人向けの情報です。

- RubyMineからアプリを起動/再起動したい
- ログをRubyMineのウインドウに出したい
- RubyMineでアプリをデバッグしたい

# 手順

## RubyMine でアプリが使うポート番号を設定する

1. **Run > Edit Configurations...** で設定ダイアログを開く
2. **Rails > Development: myapp** の **Configuration** タブで **Port** に適当な番号を設定する

他のアプリとかぶらないように設定するだけなので、同時に他のアプリを起動しないなら 3000 のままでもよいですが、変えておいたほうが面倒が少ないです。

## Pow の Port proxying 機能を設定	

```bash
$ rm ~/.pow/myapp # すでにシンボリックリンクがある場合削除する
$ echo 3001 > ~/.pow/myapp # RubyMine で設定したポート番号を設定
```

## 普通に RubyMine でアプリを起動する

メニューからだと **Run > Run** または **Run > Debug** などで起動します。

## myapp.dev をブラウザで開く

powder を使っている場合 `powder open` もできます。


# この方法(Port proxying)の面倒な点
シンボリックリンクを使った方法に比べて面倒な点もあります。

- 自分でアプリを起動/終了しないといけなくなる
- 複数のアプリを同時起動する場合、ポート番号がかぶらないように自分で気をつけないといけない

目的に合わせて使いましょう。

ちなみに powder を使ってるなら `powder list` で Pow を使ってるアプリ一覧とそれらが使っているポートが確認できます。


# 参考資料

- Powのドキュメントの [Port Proxying](http://pow.cx/manual.html#section_2.1.4) の部分
udp > チェックサム > チェックサムが異なっていればパケットは破棄される

http://www.atmarkit.co.jp/ait/articles/0310/09/news001_3.html

> 受信したUDPパケットのチェックサムを計算して、結果がUDPヘッダ中のチェックサムと異なっていれば、エラーが生じたものとして、パケットは破棄される（破棄されても、送信元に再送を要求したりはしない）。

UDPで100バイト程度の通信をする場合、データ化けをどうするのがいいかわからなかった。

上記をみたところ、中途半端にデータ化けしたものを相手が受信することはなさそうなので、データ自体にbccやチェックサムはつけなくてよさそうだ。
Windows プリンタスプールを削除する

どうしても削除ができない印刷スプールが発生した場合の対処

## 参考

* [WindowsのDNSキャッシュ消去 - インテグレイテッドシステムズ](http://www.i-sys.biz/Support/Windows/winprint.html)

## 手順

```bash:サービス停止
net stop "Print Spooler"
```

* `C:\Windows\System32\spool\PRINTERS\` に移動してファイルを全部削除。

```bash:サービス開始
net start "Print Spooler"
```
エラー　￥12288は不正な文字です

##問題
javaで「Hello World！」と表示させたいが、エラー「￥12288は不正な文字です」が出る


```
public class Main { 
  public static void main(String[] args){
   　System.out.println("Hello World");
  }
}
```
##解決
「全角の空白スペースが入ってるよ」というエラー

2、3行目の冒頭を半角スペースにして解消
Windows 10 アップデート メモ


## Windows 10 アップデートの順番待ちを飛ばす

Windows Updateの履歴に「Windows 10 へのアップグレード」が 80240020 で失敗している人は準備が完了している人です。ただ、順番待ち状態で、しばらく日数が経たないとアップデートは始まりません。

順番待ちを飛ばす方法が下記のアンサーに書いてあります。

https://answers.microsoft.com/en-us/windows/forum/windows_10-windows_install/windows-update-installation-failure-80240020/d695e827-9774-4e10-8972-df8d51a7bb51?auth=1

1. Locate the registry key:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\OSUpgrade]
2. It should exist, but if not, create it.
3. Create a new DWORD (32-bit) Value with Name = "AllowOSUpgrade” (without the quotes), and set the Value = 0x00000001.

【適当な和訳】

1. 下記レジストリキーを開きます:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\OSUpgrade]
2. 上記レジストリキーは存在するはずですが、無ければ作成してください。
3. 新たに "AllowOSUpgrade” (クオートは付けない)という名前の DWORD (32-bit) 値を作成し、値に 0x00000001 をセットします。


上記対応後、**コントロールパネル**の Windows Update で更新の確認を行うと、Windows 10 へのアップグレードが現れるようになります。あとはウィザードに従って、アップデートするだけです。

なお、「C:\Windows\SoftwareDistribution\Download」のファイルを全て削除する方法が巷で流れていますが、これは正規の方法ではないようです。

## 削除されるアプリがある

私の環境ではノートン先生が削除されました。どうやら、そのままアップデートに対応していないウィルス対策ソフト系は削除するようです。再度最新版をインストールすれば問題ありません。

## その他、気付いた点

1. 1回目のログインはローカルログインにする必要があります。Microsfot アカウントに紐付けている人は、ローカルでログインできることも確認しておいてください。
2. リモートデスクトップに使う証明書が再作成されます。
3. アップグレードはだいたい1時間でした。SSDでこれなので、遅い人はもっと遅いと思います。
4. 日本語IMEを Dvorak に設定するレジストリは上書きされてました。

あとは特に問題ないようです。メインじゃないので、あまりこっていないというのもあるかもしれませんけど。
OPアンプ > 位相余裕 > ゲイン0dBになる周波数での位相が180度に対して何度余裕があるか

引用: トランジスタ技術 SPECIAL for フレッシャーズ No.104 OPアンプIC活用ノート

> OPアンプの発振しにくさは、ゲイン1倍の周波数で位相遅れが-180°よりどれだけ小さいか(<font color=red>位相余裕</font>)によって評価できます。

<hr>

http://www.tij.co.jp/analog/jp/docs/analogsplash.tsp?contentId=66098

> ゲインが 0dB になる周波数での位相遅れが 180 度に対して何度の余裕があるかを<font color=red>位相余裕</font>、位相が 180 度遅れた時のゲインが－何 dB あるかを<font color=red>ゲイン余裕</font>、と規定して系の安定性の指標としています。

> 電源回路では位相余裕が 45 度以上、ゲイン余裕が 20ｄB 以上(6ｄB 以上で良いという理論もある)あれば、安定した電源であるといわれています。

<hr>
c++11 > typedefの代わりにusingが使えます

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

```cpp
typedef std::shared_ptr<Particle> ParticlePtr;
```

> C++11ではtypedefの代わりにusingが使えます。

```cpp
using ParticlePtr = std::shared_ptr<Particle>;
```

<hr>
http://qiita.com/Linda_pp/items/44a67c64c14cba00eef1

> また，using のほうはテンプレート化することができます．

```cpp
template<class Value>
using dict = std::map<std::string, Value>;
```
>これは typedef に対して非常に大きな利点です．
c++ > 継承 / 委譲 > 継承の場合、基底クラス変更時の影響が大きい

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> 継承の関係では親子でないと再利用できませんが、委譲の関係であれば他人からでも再利用できます。継承の関係は、基底クラスを変更すると派生クラスにも影響を与えます。多数の派生クラスを持った、基底クラスの変更は影響範囲が広いためリスクをともないます。

<hr>
http://codezine.jp/article/detail/3710

> そのオブジェクトの持つ構造に関して知る/触れる必要が無く、機能のみを再利用したいといった場合に、委譲を使用します。

> 図3. 継承と委譲の再利用の対象の違い
> - クラスの世界: 構造を共有することで実装を再利用
> - オブジェクトの世界: インタフェースを介して実装を再利用

<hr>
c++ > switch文のポリモーフィズムによる置き換え

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> switch文のほとんどが、ポリモーフィズムによる分岐に置き換えられます。

```cpp
class State {
public:
  virtual ~State() {}
  virtual void update(float deltaTime) = 0;
  ...
};
```

```cpp
class RunState : public State {
public:
  virtual void update(float deltaTime) override;
  ...
};

class JumpState : public State {
public:
  virtual void update(float deltaTime) override;
  ...
};
...
```

```cpp
class Player {
  ...
  void update(float deltaTime) {
    currentState_->update(deltaTime);
  }
private:
  State* currentState_;
  ...
};
```

>扱う状態が少ないときや、各状態の処理が単純な場合には、switch文で対応した方が単純になることもあります。
技術英語 > uneditable / untagged / deselect (NOT unselect)

https://unity3d.com/learn/tutorials/modules/beginner/ui/ui-canvas?playlist=17111

1:20分ころ

> And the entire Rect transform component is uneditable.

「これは変更することができません。」という字幕付き。

ちなみに、worldのスペルが時々warldになっていたりするので字幕は結構あやしそう。

<hr>
un...で思い出したのは:1
untagged (タグづけなし)

<hr>
un...で思い出したのは2
~~unselect (選択解除)~~

youtubeのコーディングtutorialを見ていると unselect を使っているのや deselect を使っているのを聞く。

http://english.stackexchange.com/questions/18465/unselect-or-deselect
を見ると
> Dictionaries (Merriam-Webster and New Oxford American Dictionary) have <font color=red>deselect</font> but not unselect. The NOAD defines deselect as “turn off (a selected feature) on a list of options on a computer menu”, which is what you want.

>Unselected, on the other hand, is used to qualify something that has not been selected, not something that was selected and isn't anymore.

上記を見ていると、ある選抜に選択されなかった人(has not been selected)などにはunselectedを使うようだ。
一度選択した後に解除するなどの場合は deselectのようだ。

ソフトでのチェックボックスの選択解除ではunselectでなくdeselectを使うのが正しそう。
Azure CLI 01.インストール、サブスクリプションへのログイン

# これは何？
Azure CLIでAzure上のサービス/インスタンス群を構成管理する
これは引き継ぎ資料のベースとして書くドキュメント。

Management APIまわり中心に書く
基本的にAzure Resource Managerモードを使うので、アカウントベースの認証を使う

# Install

## CentOS 7

```
$ sudo yum install epel-release
$ sudo yum install nodejs npm
$ node -v
$ npm -v

$ sudo npm install azure-cli -g
$ azure help
```

# Login

Azure CLIをARMモードで使うため、共同管理者アカウントでログインします。

```
$ azure login
Username: xxxxx@xxxxx.xxx
Password: ************

$ azure account list
info:    Executing command account list
data:    Name      Id                                    Tenant Id                             Current
data:    --------  ------------------------------------  ------------------------------------  -------
data:    plan  <<Subscription-Id>>  <<Tenant Id>>  true
info:    account list command OK


Current = trueになっているものが、現在ログイン中のアカウント
```


- Username / Password

　　CLIで操作したい対象サブスクリプションの共同管理者(Co-adminitrator)の
　　Username / Password。
　　サービス管理者(Service adminitrator)ではダメ。

　　共同管理者は、ポータルの下記から作成できます。
　　　　設定 > 管理者

　　


# 参考
[Azure CLI のインストール](https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli-install/)
[Azure コマンド ライン インターフェイス (Azure CLI) からの Azure サブスクリプションへの接続](https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli-connect/)
Deviseのconfirmable - 確認メールのリンクをクリックしたら即サインインする

![Screenshot 2015-08-02 15.53.07.png](https://qiita-image-store.s3.amazonaws.com/0/82804/400f0587-6da3-d791-94f1-83f0d2897a5e.png)

#前提

Deviseで認証するRailsアプリで[Userモデルに`confirmable`モジュール](https://github.com/plataformatec/devise/wiki/How-To:-Add-:confirmable-to-Users)が実装されている。

#やりたいこと

ユーザーが確認メールにあるリンクをクリックしたら即サインインできるようにしたい。

#やりかた

`ConfirmationsController#show`をオバーライドする。
サインインさせたいタイミングで`sign_in(resource)`を呼ぶ。

```rb:/app/controllers/confirmations_controller.rb
# Override
class ConfirmationsController < Devise::ConfirmationsController
  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])
    yield resource if block_given?

    if resource.errors.empty?
      set_flash_message(:notice, :confirmed) if is_flashing_format?

      sign_in(resource) # この一行を加えるのみ

      respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
    else
      respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render :new }
    end
  end
end
```

deviseネームスペース外に存在する`confirmations_controller.rb`についてDeviseに知らせるため、devise_forに登録する。

```rb:/config/routes.rb
Rails.application.routes.draw do
  # ...

  devise_for :users, controllers: { confirmations: 'confirmations' }

  # ...
end
```

#潜在的危険性

ユーザーが新規登録時に間違ったemailアドレスを記入した場合、たまたまそのemailを受け取った第三者にアカウントを乗っ取られてします可能性がある。

#参考文献

- http://stackoverflow.com/questions/18655334/avoid-sign-in-after-confirmation-link-click-using-devise-gem/20961042#20961042
- http://www.rubydoc.info/github/plataformatec/devise/
CSSで困ったこと


#CSSで困ったときに確認すること

##・[IE]CSSをレンダリングしないことがある(途中までレンダリングしているパターンも有)…
> Internet Explorer 6 to 9.（IE6から9）
> 
> A sheet may contain up to 4095 rules（1スタイルシートにルールは4095まで）
> A sheet may @import up to 31 sheets（1スタイルシートに > @importは31個まで）
> @import nesting supports up to 4 levels deep（@importの入れ子は4階層まで）
> 
> Internet Explorer 10
> 
> A sheet may contain up to 65534 rules（1スタイルシートにルールは65534 まで）
> A document may use up to 4095 stylesheets（1ドキュメントにスタイルシートは4095個まで）
> @import nesting is limited to 4095 levels (due to the 4095 stylesheet limit)（@importの入れ子は4095階層まで）

参考: https://www.softel.co.jp/blogs/tech/archives/3045

###■調査結果、対応方法
- IE9以前は、 **ルールが4095より多くあった場合は、それ以前のCSSも全て読み込まない。**
- IE10以降は、 **65534ルールまでレンダリング。それ以降はレンダリングしない。**
- DevelopperToolでバージョンを変更した場合も、**完全にエミュレートしてくれない(IE8でも4095ルール以降も読んでしまうので注意)。**
- **セレクタの数ではなく、ルールの数による**ので注意する。

---

##・[IE]Fontを指定した場合、上下の高さがずれてしまうことがある

問題点としては、CSSで天地揃えにしても若干上に寄ってしまう。
line-heightや、paddingや、table-cellを使ったスタイルでも問題あり。
※IE8〜11まで問題有り。

![スクリーンショット 2015-07-30 17.22.22.png](https://qiita-image-store.s3.amazonaws.com/0/37670/84aaf598-0a04-bbe0-d57f-2ad98b5e8203.png "スクリーンショット 2015-07-30 17.22.22.png")


###■調査結果、対応方法
フォントは同じでも、IEでは読み方が違う。
※別途要調査だが、下部に何か隙間を空けてしまう。例としては、遊ゴシックなどで確認できる。
問題がなさそうなフォントをつかう。



##・[IE]oddを使った場合、beforeのwidthが%指定できない問題

要調査
※条件は調査できていないが、IE10まで問題確認済み。




##・[IE]object-fitが〜IE11(現時点)で使えない

object-fitは、IEで使えないのでJSでどうにかする。

http://codepen.io/anon/pen/vmQeQm

```ie.css
.custom-object-fit {
  height: 100px;
  position: relative;
  background-size: cover;
  background-position: center center;
  .featured-image {
    opacity: 0;
  }
}
```

```ie.js
var userAgent, ieReg, ie;
userAgent = window.navigator.userAgent;
ieReg = /msie|Trident.*rv[ :]*11\./gi;
ie = ieReg.test(userAgent);


if(true) {
  $(".img-container").each(function () {
    var $container = $(this),
        imgUrl = $container.find("img").prop("src");
    if (imgUrl) {
      $container.css("backgroundImage", 'url(' + imgUrl + ')').addClass("custom-object-fit");
    }
  });
}
```
Spring Bootでセッションクッキーの名前を変える

セッションクッキーとは、JavaのwebappでデフォルトだとJSESSIONIDってなってるやつ。
以下のように、ServletContextInitializerを返す`@Bean`を定義すれば良い。`eiryu.session`と言う名前に変えている。
単なる設定なので、Spring Frameworkでも同じように変更出来ると思われる。
プロパティで出来るかと思って色々漁ってみたが、見つからなかった。

```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import org.springframework.context.annotation.Bean;


@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public ServletContextInitializer servletContextInitializer() {
        return servletContext -> servletContext.getSessionCookieConfig().setName("eiryu.session");
    }

}
```

### 使い道

セキュリティ対策。
JSESSIONIDだと一発でJavaのwebappとバレる。PHPSESSIDとかにしてPHP webappと見せかけるとかも考えられる。
尚、Spring MVCはコントローラのRequestMappingの定義を`/list`とかにしていれば`/list.php`のリクエストも受け付けることが出来るので偽装は簡単。`/list/`とか書くとダメ。

デフォルト厨なので、本当はあんまりカスタムしない方が好きなのだが、セキュリティはいかにデフォルトから離れた定義にしてあるかが重要だと思うので、割りと大事かもしれん。

あとは、webapp作る上での遊び心かな。。


### 参考

- http://stackoverflow.com/questions/25918556/spring-boot-configure-custom-jsessionid-for-embedded-server
- http://eiryu.hatenablog.com/entry/20130120/1358651987
Ruby 風な静的言語 Crystal の開発環境を crenv で簡単に構築する

# Crystal とは?
Crystal は Ruby 風なシンタックスな、型推論をベースとした静的言語です。
組み込み型や、標準ライブラリを Ruby にかなり似せており、Ruby を書いたことがある人にはかなり馴染みやすい言語です。

詳しくは、公式サイトや他の方の記事、私の作ったプレゼンをご覧ください。

- [Crystal](http://crystal-lang.org/) (公式サイト)
- [Crystal 入門](http://qiita.com/rosylilly/items/377562cf934f4e1379c8) (Qiita 記事)
- [Crystal - Ruby 風シンタックスな静的言語の紹介 -](https://speakerdeck.com/pine613/crystal-ruby-feng-sintatukusunajing-de-yan-yu-falseshao-jie-1) (日本語のプレゼン)

# crenv とは?
[crenv](https://github.com/pine613/crenv) は Crystal のバージョンマネージャーです。複数のバージョンの Crystal を共存させ、簡単に切り替えを行うことができます。[rbenv](https://github.com/sstephenson/rbenv) という Ruby 用をフォークしたツールであり、基本的な使い方は `rbenv` と同じです。

# インストール方法
現在 [crenv](https://github.com/pine613/crenv) は Mac OS X と Linux に対応しています。

## anyenv を使った方法
[anyenv](https://github.com/riywo/anyenv) を使っている人は、`anyenv` を使って一つのコマンドで導入できます。

```
$ anyenv install crenv
```

### anyenv が古い場合
`anyenv` が古くてコケた場合は、先に `anyenv` を更新してから、試してください。

```
$ cd ~/.anyenv
$ git pull origin master
$ exec $SHELL -l
```

## 通常の方法
インストールには Git を使います。

```
$ git clone https://github.com/pine613/crenv ~/.crenv
$ git clone https://github.com/pine613/crystal-build.git ~/.crenv/plugins/crystal-build
```

インストール後、お使いのシェル (bash, zsh, etc ...) に対して設定を追加してください。

```
export PATH="$HOME/.crenv/bin:$PATH"
eval "$(crenv init -)"
```

シェルを再起動すれば、`crenv` が使えるようになっています。

```
$ exec $SHELL -l
$ crenv --version
crenv 0.1.1
```

# 使い方
## `$ crenv install -l`
インストール可能なバージョンを列挙します。`$ rbenv install -l` と同じ挙動です。

```shell-session
$ crenv install -l
Available versions:
  0.5.0
  0.5.1
  0.5.2
  0.5.3
  0.5.4
  0.5.5
  0.5.6
  0.5.7
  0.5.8
  0.5.9
  0.5.10
  0.6.0
  0.6.1
  0.7.0
  0.7.1
  0.7.2
  0.7.3
  0.7.4
  0.7.5
```

## `$ crenv install <version>`
特定のバージョンの Crystal をインストールします。`$ rbenv install <version>` と違い、こちらのコマンドはコンパイル済みバイナリのインストールのみに対応しています。

```
$ crenv install 0.7.5
resolve: crystal-0.7.5-linux-x64
resolve by Remote Cache: found
fetch: https://github.com/manastech/crystal/releases/download/0.7.5/crystal-0.7.5-1-linux-x86_64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   411    0   411    0     0    565      0 --:--:-- --:--:-- --:--:--   565
100 10.3M  100 10.3M    0     0  1678k      0  0:00:06  0:00:06 --:--:-- 2368k
Install successful
```

## `$ crenv versions`
インストールされている Crystal のバージョンを一覧表示します。`$ rbenv versions` と同じ挙動です。

```
$ crenv versions
  0.7.5
```

## `$ crenv global <version>`
Crystal グローバルなバージョンを指定します。プロジェクトごとに固有のバージョンが指定されている場合、そちらが優先されます。ここで指定するバージョンは、先に `$ crenv install <version>` でインストールしておいてください。

`$ rbenv global <version>` と同じ挙動です。

```
$ crenv global 0.7.5
```

## `$ crenv local <version>`
プロジェクトローカルな Crystal のバージョンを指定します。ここで指定するバージョンは、先に `$ crenv install <version>` でインストールしておいてください。設定したバージョンは `.crystal-version` ファイルに保存されます。

`$ crenv local <version>` と同じ挙動です。

# まとめ
`crenv` を使うと、Crystal のインストールや複数バージョンの切り替えが簡単にできます。`crenv` で楽しい Crystal ライフを!

# 関連記事

- [crystal langことはじめ](http://masasuzu.hatenadiary.jp/entry/2015/08/02/213454)
Vagrant + CentOS 7でsambaをインストールする

## 環境
Windows 7
CentOS Linux release 7.1.1503 (Core)
Samba 4.1.12
Vagrantのネットワークはpublic_network

```Vagrantfile
config.vm.network "public_network"
```

## sambaのドキュメント

[samba 4.1の設定ファイルのドキュメント](http://www.samba.gr.jp/project/translation/4.1/htmldocs/manpages/smb.conf.5.html)

## 手順

sambaをインストール

```
yum install samba
```

設定

```
cd /etc/samba
vi smb.conf
```
```
[global]
    map archive = no

    # 文字コード設定 CentOS
    unix charset = UTF-8

    # 文字コード設定 Win
    dos charset = CP932

    # Windowsのワークグループ名と合わせる
    workgroup = WORKGROUP

    # アクセスを許可するネットワーク。デフォルトでは全許可だから書かなくてもいい？
    hosts allow = 192.168.127.

    map to guest = Bad User

# /home/vagrantを誰でも読み書きできるようにする
[Vagrant Home]
    path = /home/vagrant
    writable = yes
    force user = vagrant
    force group = vagrant
    guest ok = yes
    guest only = yes
```

サービス起動

```
systemctl start smb
systemctl start nmb
systemctl enable smb
systemctl enable nmb
```

SELinuxが無効になっていることを確認

```
getenforce
```

ファイアーウォールを無効にする

```
systemctl stop firewalld
systemctl disable firewalld
```

Windowsからアクセスして確認する。

## sambaのログ

`/var/log/samba/log.smbd`にある。
コマンドライン上のファイル操作で事故らないために



カレントディレクトリにある全ての画像ファイルを親ディレクトリに移動する時に事件は起こりました。

* やらかしたコマンド

```bash:
$ sudo mv /* ../
```

* やりたかったコマンド

```bash:
$ sudo mv ./* ../
```

結果はご想像にお任せしますが、まさかこんなことになるとは思いませんでした。
唯一の救いは、この事件はサーバ移行中の作業で、やらかしたのが移行先のサーバの方だっということです。
そんなこともあり、最近ではmvコマンドを打つ時はかなり慎重にっています。もちろんrmコマンドなども。

##mvする対象が確認不足が原因だったのではないか？

###問題点

* 操作する対象がカレントディレクトリ以外を指定してしまった
* 操作する対象が可視化されていなかった


例えば

```bash:
$ sudo mv /bin /root /sbin /usr /var ../
```

などと表示されていたら絶対にEnterを押さないですよね？


###改善策
* 操作する対象はカレントディレクトリを指定する
* 操作する対象のファイルやディレクトリを全てコマンドラインに表示する


例えば、
カレントディレクトリにあるpictreu1.png ~ picture10.pngの10ファイルを移動したいときは

```bash:
$ mv /*.png ../
```

ではなく

```bash:
$ mv picture1.png picture2.png picture3.png picture4.png picture5.png　picture6.png　picture7.png　picture8.png　picture9.png　picture10.png ../
```
と表示されるようにする。

##pecoで操作対象を選択する

pecoについてはこちらを参考にしてください。

*  [peco/peco](https://github.com/peco/peco#demo)


####aliasの設定

```bash:
function peco-files() {
    local files="$(ls -a | peco | tr '\n' ' ')"
    if [ -n "$LBUFFER" ]; then
        BUFFER="$LBUFFER$files"
    fi
    CURSOR=$#BUFFER
}
zle -N peco-files
# ctrl + fで起動
bindkey '^f' peco-files

```

####アクションの定義とキーマップ

```json:~/.peco/.config.json
{
    "Action": {
        "selectAllAndFinish": [
            "peco.SelectAll",
            "peco.Finish"
        ]
    },
    "Keymap": {
        "C-a": "selectAllAndFinish"
    }
}
```

これで mvを入力した後に、pecoで選択すればコマンドライン上に全てのファイルが表示されます。そして移動先のフォルダを指定して実行します。
もちろんmv以外のコマンド使えます。


##謝辞
最後まで読んでいただき、まことにありがとうございます。
Chainerでtied weightなAutoencoderを作った

#概要

* 今のところChainerで**tied weight**なAutoencoderを作りたい場合、簡単に作る方法がありません
* なので再利用可能な形で作ってみました
* GPUも対応しています
* Qiita初投稿です。よろしくお願いします
* **Chainer1.3.1**に対応しました

#方針

* Autoencoderの変換・再構成までをまるまる`chainer.function.Function`の派生クラスに落としこむ

#コード

[こちら](https://gist.github.com/hatoo/cd3804620b13aad11ad1#file-autoencoder-py)に上げました
`Autoencoder`クラスをインポートして使用してください

#こまかいこと

* 中間層の活性化関数は変更可能ですがデフォルトでシグモイド関数です
* 中間層のdropoutは行いません
* 再構成した結果は活性化関数を適用してない状態で返します

#簡単な使い方

chainerのFunctionなので`chainer.functions.Linear`などと同じように使用します。`n_input`が入力のサイズ, `n_hidden`が中間層のサイズです

```
model = chainer.Functionset(ae1=Autoencoder(n_input, n_hidden),
                            ..)
```

呼び出すと再構成した結果が帰ってきます。再構成した結果に活性化関数は適用されていません。

```
y = model.ae1(x)
```
ロスをこんな感じに定義すれば、入力と出力が一致するように学習できます

```
loss = chainer.functions.mean_squared_error(y, x)
```

学習し終わったら`hidden`を呼ぶと中間層の出力を得られます(活性化関数も適用されています)。入力の型は`chainer.Variable`です

```
h = model.ae1.hidden(x)
```

#ちゃんと実装できているか？

##theanoで同じことをして結果を比較する

* ちゃんと実装できているか心配なので(特にbackward)、同じものをchainer(今回実装したAutoencoderを使用)とtheanoで計算して結果を比較します
* theanoは自動で微分してくれるので比較対象として使えそうです

##やること

* 各実装で同じ初期パラメータで同じデータセットをAutoencoderで学習していき、結果を比較します。
* 同じ計算をしているので結果も同じになるはずです。
* 比較するのは`chainer(cpuで計算)`,`chainer(gpuで計算)`,`theano`の３つです。

##コード

[こちら](https://gist.github.com/hatoo/cd3804620b13aad11ad1#file-test_autoencoder-py)に上げました。python2.7です
そのまま実行してください

**追記 1.3.1**
自分の環境

* Windows 10
* Theano 0.7.0
* CUDA 7.0
* Chainer 1.3.1

で、このコードを動かすと終了時にエラーが出てきます。どうやらTheanoとChainer1.3.1を一緒に使用するとエラーが出てくるようです。ですが、Chainerだけを使う場合は大丈夫なので、自分は今のところ放置しています。

##結果

データセット`[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]`を学習してみました
中間層のサイズは`5`です

```
.
.
epoch  1000
y_cpu [[ 0.21298632  0.29139116  0.38235438]
 [ 0.2916162   0.41254863  0.52147532]]
loss_cpu 0.00891023594886
hidden_cpu [[ 0.48791173  0.60213435  0.48187184  0.52815247  0.45188218]
 [ 0.47335175  0.73995906  0.45421988  0.53906572  0.40177849]]

y_gpu [[ 0.21298626  0.29139113  0.38235441]
 [ 0.29161614  0.41254857  0.52147532]]
loss_gpu 0.00891023781151
hidden_gpu [[ 0.48791173  0.60213435  0.48187184  0.52815241  0.45188218]
 [ 0.47335175  0.73995906  0.45421988  0.53906572  0.40177849]]

y_theano [[ 0.21298596  0.29139113  0.38235551]
 [ 0.29161561  0.4125483   0.52147633]]
loss_theano 0.00891025736928
hidden_theano [[ 0.48791176  0.60213423  0.4818719   0.52815264  0.45188224]
 [ 0.47335178  0.73995888  0.45421994  0.53906602  0.40177864]]
```

見にくいですが `y, loss, hidden` がそれぞれ、`再構成した結果, mean squared error, 中間層の出力` です

それぞれ一致しているので正しく実装できていそうです
Ruby Procについて学ぶ

Ruby力の基礎固めとして、Procについて学んだことをまとめます。

## Procクラスとは
> ブロックとして記述された手続きを運ぶためのクラス | たのしいRuby P415

### 作り方と実行の仕方

```rb
# 1
hello_1 = Proc.new do |name|
  puts "Hello, #{name}" # 最後に評価される式の値が戻り値
end

# 2
hello_2 = proc do |name|
  puts "Hello, #{name}" # 最後に評価される式の値が戻り値
end

hello_1.call("bob")
hello_2.call("cathy")
```

メソッド定義でできることならだいたいできる
- |*配列|での不定引数の受け取り
- デフォルト引数
- キーワード引数
など

### lambda
Proc.newやprocで作成したProcオブジェクトよりメソッドの動きに近い動きをする

主な違いは2つある。
#### 1 引数の数のチェック
```rb
proc = lambda do |a, b, c|
  p [a, b, c]
end
proc.call(1, 2)
=> ArgumentError: wrong number of arguments (2 for 3)
```
#### 2 returnの抜ける範囲

```rb
def foo
  f = Proc.new { return :foo }
  f.call
  return
end

def foo2
  f = proc { return :foo2 }
  f.call
  return
end

def bar
  f = lambda { return :bar }
  f.call
  return
end

def h
  yield
end

def hoge
  h{ return :hoge }
  nil
end

p foo()
#=> :foo
p foo2()
#=> :foo2
p bar()
#=> nil
p hoge()
#=> :hoge
```

http://docs.ruby-lang.org/ja/2.1.0/class/Proc.html

```
            return                     next                     break
Proc.new    メソッドを抜ける            手続きオブジェクトを抜ける  例外が発生する
proc        メソッドを抜ける            手続きオブジェクトを抜ける  例外が発生する
lambda      手続きオブジェクトを抜ける   手続きオブジェクトを抜ける  手続きオブジェクトを抜ける
イテレータ   メソッドを抜ける            手続きオブジェクトを抜ける  メソッドを抜ける
```

### to_proc
メソッドにブロックを指定する際に「&オブジェクト」の形式で渡すと
オブジェクト.to_procが自動的に呼ばれる
シンボル.to_procはシンボルと同名のメソッドを呼ぶprocオブジェクトを作成する

```rb
["42", "39", "56"].map{ |i| i.to_i }
↓
["42", "39", "56"].map(&:to_i)
```

## Procクラスの特徴
### クロージャ
手続きと同時に変数などの環境を保持する手続きオブジェクトのこと

```rb
def counter
  c = 0
  Proc.new do
    c += 1
  end
end

c1 = counter
p c1.call => 1
p c1.call => 2
p c1.call => 3

c2 = counter
p c2.call => 1
p c2.call => 2

p c1.call => 4
```
## Procクラスのインスタンスメソッド

### Procオブジェクトを実行する
```rb
prc = Proc.new{|a, b| a + b}
prc.call(1, 2)
prc[3, 4]
prc.yield(1, 2)
prc.(3, 4)
prc === [9, 10]
```
procオブジェクトでfizzbuzz

```rb

fizz = proc{|n| n % 3 == 0 }
buzz = proc{|n| n % 5 == 0 }
fizzbuzz = proc{|n| n % 3 == 0 && n % 5 == 0}
(1..100).each do |i|
  case i
  when fizzbuzz then puts "Fizz Buzz #{i}"
  when fizz then puts "Fizz #{i}"
  when buzz then puts "Buzz #{i}"
  else puts i
  end
end
```

### そのほか
```rb
prc.arity # ブロック変数の数
prc.parameters # ブロック変数の詳細
prc.lambda? # lambdaで定義されたかどうか
prc.source_location # procが定義されたソースコードの位置 (ソースファイルと行番号)
```

# 参考
- たのしいRuby
  - http://www.amazon.co.jp/dp/4797372273
- to_proc (Symbol)
  - http://ref.xaio.jp/ruby/classes/symbol/to_proc
Ruby ブロックについて学ぶ

Ruby力の基礎固めとして、ブロックについて学んだことをまとめます。

## ブロックとは
> メソッド呼び出しの際に引数と一緒に渡すことのできる処理のかたまり | たのしいRuby P199

### ブロックつきメソッド呼び出しの例
```rb
[1, 2, 3, 4, 5].each do |i| # do ~ end は { ~ } でもOK
   puts i ** 2
end
=> 1
   4
   9
   16
   25
```

## ブロックの使い方
代表的な使い方が以下の3つです。
- 繰り返し
- 処理の隠蔽
- 処理の一部の差し替え

### 繰り返し
```rb
# 例)hash
sum = 0
outcome = {'join' => 1000, "shopping" => 1000, 'food' => 4000}
outcome.each do |item, price|
  sum += price
end
puts sum
=> 6000

# 例)file読込
file = File.open('sample.txt')
file.each_line do |line|
  print line
end
=> aaa
   bbb
   ccc
   ddd
file.close
```

### 処理を隠す
```rb
# 例)自動的にファイルが閉じられる
file = File.open('sample.txt') do |file|
  file.each_line do |line|
    print line
  end
end
=> aaa
   bbb
   ccc
   ddd
```

### 計算の一部の差し替え

```rb
# Array#sortの場合

a = [3, 4, 5, 2, 6, 1, 7]

# ブロックなし
sorted = a.sort
=> [1, 2, 3, 4, 5, 6, 7]

# デフォルトの処理と同じ
sorted = a.sort do |a, b|
  a <=> b
end
=> [1, 2, 3, 4, 5, 6, 7]

# リバース
sorted = a.sort do |a, b|
  b <=> a
end
=> [7, 6, 5, 4, 3, 2, 1]


str_a = ["udon", "yakisoba", "somen", "ra---men"]

# 文字数順
sorted = str_a.sort do |a, b|
  a.length <=> b.length
end
=> ["udon", "somen", "yakisoba", "ra---men"]
```

## ブロックつきメソッドの作り方
### ブロックの処理 → 合計値を算出するメソッドの例
```rb

def total(from, to)
  result = 0
  from.upto(to) do |num|
    if block_given?
      result += yield(num)
    else
      result += num
    end
  end
  return result
end

p total(1, 10)
=> 55
p total(1, 10){|num| num ** 2}
=> 385
```
### ブロック変数とyieldの引数の関係
ブロック変数とyieldの引数の数はあわなくてもエラーにはならない

```rb

# ブロック変数がyield引数より多い場合
def block_args
  yield()
end
block_args do |a|
  p [a]
end
=> nil

# ブロック変数がyield引数より少ない場合
def block_arg
  yield(1,2,3)
end
block_arg do |a|
  p a
end
=> 1

# ブロック変数を*aで受け取る場合
def block_arg
  yield(1,2,3)
end
block_arg do | *a |
  p a
end
=> [1, 2, 3]
```

### ブロックのオブジェクト化
Procを使う。ブロックを別メソッドに引き渡すことが可能になる

```rb
# Proc変数を使用する例
def total2(from, to, &block) # &引数名にすると与えられたブロックはProcオブジェクト化される
  result = 0
  from.upto(to) do |num|
    if block                # 判定式も変更
      result += block.call(num) # block.callで呼び出し
    else
      result += num
    end
  end
  return result
end
```

## ローカル変数とブロック変数
主な特徴は2つ
- ローカル変数はブロック内でも共有
- ブロック変数は外側とは切り離されている


# 参考
- たのしいRuby
  - http://www.amazon.co.jp/dp/4797372273
- [Ruby] ブロックとProcをちゃんと理解する
  - http://qiita.com/kidach1/items/15cfee9ec66804c3afd2
- Rubyの動かないコード（初級編）ブロックとクロージャの性質
  - http://d.hatena.ne.jp/language_and_engineering/20101118/p1
CentOS7にOpenstack kiloをインストールしてみる

=====

以下の記事とほぼ同じです

CentOS7にOpenStack(JUNO)をインストールする
http://qiita.com/tnaoto/items/f9d11400ba92d15e1a39

NetworkManagerを無効にしておかないとインストール時に怒られるようになりました
また、systemdによる影響で、ovsとnetworkの起動順を制御するのは
前の記事の通りです

前の記事のネットワークの設定が若干怪しかったので
kiloで動いている設定だけ書いておきます

```
[root@mx130 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
NAME=br-ex
BOOTPROTO=none
NM_CONTROLLED=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=no
DEVICETYPE=ovs
TYPE=OVSBridge
```

```
[root@mx130 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp3s5
UUID=XX-XX-XX-XX
HWADDR=XX:XX:XX:XX:XX:XX
NAME=enp3s5
DEVICE=enp3s5
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
```

br-exのonbooをnoにして、物理デバイスの起動に引っ張られて起動するように設定しておくのがポイント

そいえば、cinderのバックエンドがLVMなんですが、ボリューム消すときにzero消去すると遅いので
無効にしてたんですが、kiloになってからはその設定が効いてない気がしています
ログイン時のshellを変更する

新規ユーザーを作り、そのユーザーでログインするとshが立ち上がってしまってbashコマンドを毎回入力しなければならずとても不便だった時の解決方法。

##解決法
```
/etc/passwd
```
を開くと、
```root:x:0:0:root:/root:/bin/bash```
このような物がユーザー毎にあるので、変更したいユーザーの最後の項目に変更したいshellのパスにしてログインし直す。 
自分の場合は何も指定されてない状態だったので、
```/bin/bash```
とする事でログイン時からbashにする事ができた。

##追記
コメントいただきました。
```chsh -s /bin/bash```
chshコマンドを使っての変更の方がファイルを誤って破壊する事がないので安心です。
PC必要ソフト　メモ

# 今後PCを変更しても慌てないようにメモ

## インストールソフト一覧

* google chrome
* mozilla firefox
* sublime text3
* UltraVnc
* FastStone Cpture 5.3
* Gow
* Start Menu 8
* PuTTY 0.60 ごった煮版
* Google ime
* NoEditor
* SAI
* wacom tablet
* Node.js
* Epson
* WinSCP
* vagrant
* virtual box
* ConEmu 150513.x86
* git
* android studio
* genymotion version 2.4.0
* java
* tortoisegit
* skype
* nexus font
* pcsx2
* tera term
* wavepad
* Explzh for windows
* adobe
* サクラエディタ
* TeamViewer
* avast
* cclear
ctags を Swift に対応させる

ATOM で Swift をいい感じに開発するため、オートコンプリート用とシンボルジャンプ用に Swift の tags ファイルを生成できるようにしたのでメモ。

# .ctags ファイルを編集する
デフォルトで ctags は Swift に対応しておらず、また、いい感じのパーサを見つけることができなっかたので、自分でパーサを作成する必要があります。
[がっつりパーサを作り込む方法](http://ctags.sourceforge.net/EXTENDING.html)もあるようですが、
そこまでちゃんと生成する必要はなかったので、今回はオプションファイルで対応させることにしました。

手順
1.~/.ctags ファイルに以下を追加する

```ctags:~/.ctags
--langdef=Swift 
--langmap=Swift:+.swift 
--regex-swift=/(var|let)[ \t]+([^:=]+).*$/\2/,variable/ 
--regex-swift=/func[ \t]+([^\(\)]+)\([^\(\)]*\)/\1/,function/ 
--regex-swift=/class[ \t]+([^:\{]+).*$/\1/,class/ 
--regex-swift=/protocol[ \t]+([^:\{]+).*$/\1/,protocol/
```

2.対象のリポジトリで`ctags -R *`を実行する

以上です。
 
これでクラスや変数は一通り出力されているのではないでしょうか。

# 参考
- [How to Add Support for a New Language to Exuberant Ctags](http://ctags.sourceforge.net/EXTENDING.html)
- [ctagsをObjective-Cに対応させる](http://xoyip.hatenablog.com/entry/2014/03/28/194605)
- [ctagsを使っているなら.ctagsは必ず記述しよう](http://blog.naberon.jp/post/2010/09/27/ctags_setting/)
ftpサーバー(ftpd)比較

Debian でFTPサーバーを立てようと思ったけど、イマイチ定番が分からない。
[それっぽい記事](https://systembash.com/evaluating-ftp-servers-proftpd-vs-pureftpd-vs-vsftpd/)を見つけたが、更新日時が2012年で不安だったので、改めて調べてみた。

# 結論

2015年の今になっても、上記記事で言われているとおり、

* 拡張性・高機能性を求めるなら、 proftpd
* とにもかくにもセキュリティなら、 pure-ftpd
* 大量のデータをさばきたいなら、 vsftpd

って感じのようだ。


# おまけ。　調べたパッケージ全部。

## GOOD

### proftpd
[ProFTPD](http://www.proftpd.org/) [wikipedia](https://ja.wikipedia.org/wiki/ProFTPD)

モジュール志向な FTP/SFTP/[FTPS](https://ja.wikipedia.org/wiki/FTPS) サーバー
アパッチ風な記述の単一の設定ファイルで設定可能。
アップデートはもはや頻繁ではないようだが、最新のアップデートは年内だし、アクティブなプロジェクトの様子。

[日本語の解説資料](http://www.aconus.com/~oyaji/ftp/proftpd.htm)がある。

ライセンスはGPL


### pure-ftpd
[Pure-FTPd](https://www.pureftpd.org/)
セキュリティファースト、が標語のようだ。
root権限を一切使わず、ビルトインの[chroot](https://ja.wikipedia.org/wiki/Chroot)エミュレーションと仮想アカウント
(システムにユーザーを追加しなくてよい)で動作する。
平文でのパスワード/コマンド転送を回避したければ、OpenSSLによってFTPSもサポートしている。
長々したコンフィグファイルを読んで、書き換えなくても、基本的にはそまま動くので、初心者向け、だとか。
Windowsでは使えないが、いろんなシステムで動く。

[日本語の解説資料](http://seesaawiki.jp/w/matenrow/d/PureFTPd%A4%CE%C6%B3%C6%FE)がある。

ライセンスはBSD。


### vsftpd
[Very Secure FTP Daemon](https://security.appspot.com/vsftpd.html)

セキュアで超高速で安定したFTPサーバーのようだ。
機能的には他よりは少ないのだろうか？
1日あたり、1500ユーザーの並列アクセスに対して、2.6TBの転送量を稼げるようだ。
機能自慢はあんまりなさそうだが、それはパフォーマンスとのトレードオフということかもしれない。

RHEL / CentOS でのデフォルトの選択肢なようで、情報が多い。

ライセンスはGPL


## 微妙？

### ftp
netkit ftp server
探してもイマイチ情報が出てこない。
[Netkit](http://www.hcs.harvard.edu/~dholland/computers/netkit.html) っていう古くからあるパッケージの中の一つのようだが。


### heimdal-servers
[Heimdal](http://www.h5l.org/) は、
MIT [Kerberos](https://ja.wikipedia.org/wiki/%E3%82%B1%E3%83%AB%E3%83%99%E3%83%AD%E3%82%B9%E8%AA%8D%E8%A8%BC) 認証の上で、
サービスを提供するプロジェクトで、このパッケージはそのサーバー側をまとめたもののようだ。
ftp, pop3, rsh, telnet とかが提供されるっぽい。

### inetutils-ftpd
GNU network utilities [Inetutils](http://www.gnu.org/software/inetutils/)の一環として提供されるfptd。

### krb5-ftpd
[Kerberos](https://ja.wikipedia.org/wiki/%E3%82%B1%E3%83%AB%E3%83%99%E3%83%AD%E3%82%B9%E8%AA%8D%E8%A8%BC)対応のFTPサーバー。
MIT によるリファレンス実装のようだ。

### muddleftpd

[Muddleftpd](http://www.nongnu.org/muddleftpd/)
割と実用志向っぽいFTPサーバー。
rootでも非rootでも動くように設計されてる云々。
このパッケージではSMBとMySQLとMUD認証が使える、とある。
しかし更新日が2002年だし、公式サイトのDownloadが機能していない...


### owftpd
FTPD for 1-Wire network

[1-Wireネットワーク](https://ja.wikipedia.org/wiki/1-Wire)というのがあるらしい。
特殊用途か。


### pyftpd
Python で書かれたftpd
root 不要


### twoftpd
[twoftpd](http://untroubled.org/twoftpd/)
セキュアでシンプルで高効率なFTPサーバー
認証用フロントエンドと、ファイル転送用バックエンドの二つに分離されているから、twoftpdらしい。
いまいちドキュメントが見つからないので難易度高そう。

[日本語の解説資料](http://rokufc2.blog.shinobi.jp/ubuntu-linux-/ubuntu9.0.4%20ffftp%E3%81%A7%E3%82%82%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8Bftp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%A7%8B%E7%AF%89#more)

ライセンスはGPL


### wzdftpd
[wzdftpd](https://www.wzdftpd.net/)

rootでも非rootでも動く、IPv6 / SSL / マルチスレッド対応のFTPサーバー
最新のFTPのRFC拡張を実装していて、SITEコマンドで、オンラインで全設定が行える。
色々高機能そう。

2013年から更新がない。活動停止したプロジェクトだろうか？

ライセンスはGPL



## 紛らわしいけど無関係のモノ

### atftpd
Advanced TFTP server

[TFTP](https://ja.wikipedia.org/wiki/Trivial_File_Transfer_Protocol)はFTPとは違うプロトコルのようだ...

### tftpd
TFTPクライアントだから関係なし。


# ひとりごと

最初`aptitude search ftpd`とかやってたけど、
`aptitude show ftp-server`したら、ftpd の一覧みたいなのが出てきたので、
最初からこちらをあたれば、TFTPとか違うのにあたらずに済んだと思う。
ニューラルネットをpythonで11行で書いたものをrubyで書きなおしてみた。

A Neural Network in 11 lines of Python
http://iamtrask.github.io/2015/07/12/basic-python-network/

ニューラルネットをpythonで11行で書いたもの。

これをrubyで書いてみた

```ruby
require 'matrix'
x = Matrix[[0,0,1],[0,1,1],[1,0,1],[1,1,1]]
y = Matrix[[0,1,1,0]].t
syn0 = Matrix[*3.times.map{|i| 4.times.map{|j| rand * 2 - 1}}]
syn1 = Matrix[*4.times.map{|i| 1.times.map{|j| rand * 2 - 1}}]
60000.times do |i|
  l1 = Matrix[*(x * syn0).to_a.map{|w| w.map{|v| 1 / (1 + Math.exp(-v))}}]
  l2 = Matrix[*(l1 * syn1).to_a.map{|w| w.map{|v| 1 / (1 + Math.exp(-v))}}]
  l2_delta = Matrix[*y.to_a.zip(l2.to_a).map{|y, l2| y.zip(l2).map{|y, l2| (y - l2) * (l2 * (1 - l2))}}]
  l1_delta = Matrix[*(l2_delta * syn1.t).to_a.zip(l1.to_a).map{|v, l1| v.zip(l1).map{|v, l1| v * (l1 * (1 - l1))}}]
  syn1 += l1.t * l2_delta
  syn0 += x.t * l1_delta
end
```

require と end の分が増えて13行。
上では出力などを省いているので、
動作確認用のコードは以下のとおり。

```ruby
require 'matrix'

srand 10

x = Matrix[[0,0,1],[0,1,1],[1,0,1],[1,1,1]]
y = Matrix[[0,1,1,0]].t
syn0 = Matrix[*3.times.map{|i| 4.times.map{|j| rand * 2 - 1}}]
syn1 = Matrix[*4.times.map{|i| 1.times.map{|j| rand * 2 - 1}}]

l1 = nil
l2 = nil

60000.times do |i|
  l1 = Matrix[*(x * syn0).to_a.map{|w| w.map{|v| 1 / (1 + Math.exp(-v))}}]
  l2 = Matrix[*(l1 * syn1).to_a.map{|w| w.map{|v| 1 / (1 + Math.exp(-v))}}]
  l2_delta = Matrix[*y.to_a.zip(l2.to_a).map{|y, l2| y.zip(l2).map{|y, l2| (y - l2) * (l2 * (1 - l2))}}]
  l1_delta = Matrix[*(l2_delta * syn1.t).to_a.zip(l1.to_a).map{|v, l1| v.zip(l1).map{|v, l1| v * (l1 * (1 - l1))}}]
  syn1 += l1.t * l2_delta
  syn0 += x.t * l1_delta

end

puts "input #{x}"
puts "teach #{y}"
puts "trained #{l2}"
```

全般として map を使った記述が多くなっている。
zip を使っている場所は ruby の matrix に要素単位の乗算を見つけられなかったので
こんなかんじになってしまっている。
よりすっきりした書き方や、パフォーマンスの良さそうな書き方となると他の行列計算向けのライブラリを使ったほうがいいのかもしれない。

- [nmatrix](https://github.com/sciruby/nmatrix)

nmatrix だと要素単位の乗算があるようではある。

## 追記

```rb
require 'matrix'

srand 10

x = Matrix[[0,0,1],[0,1,1],[1,0,1],[1,1,1]]
y = Matrix[[0,1,1,0]].t
syn0 = Matrix.build(3, 4){rand -1.0..1.0}
syn1 = Matrix.build(4, 1){rand -1.0..1.0}

l1 = nil
l2 = nil

60000.times do |i|
  l1 = (x * syn0).map{|v| 1 / (1 + Math.exp(-v))}
  l2 = (l1 * syn1).map{|v| 1 / (1 + Math.exp(-v))}
  l2_delta = Matrix.build(y.row_size, y.column_size){|*i| (y[*i] - l2[*i]) * (l2[*i] * (1 - l2[*i]))}
  l1_delta = (l2_delta * syn1.t).tap{|m| break Matrix.build(m.row_size, m.column_size){|*i| m[*i] * l1[*i] * (1 - l1[*i])}}
  syn1 += l1.t * l2_delta
  syn0 += x.t * l1_delta
end

puts "input #{x}"
puts "teach #{y}"
puts "trained #{l2}"
```

コメントで頂いた内容をもとに書きなおしてみました。
全体的にはより整理された書き方になりました。
l1_delta についてはかえって長くなってしまっていますが
処理内容としては整理されたかなと思います。
Elixirで試しに何か書いてみる(その4) - Taskを使って簡単にする

[**Elixirで試しに何か書いてみる(その3) - Elixirのアプリケーション**](http://qiita.com/HirofumiTamori/items/06ab8e85c25f118f8e72)でアプリの形にしたんですが、肝心のプロセス起動と結果の取得を「手探りの状態で」書いたままにしていました。

naoya@githubさんが[**Elixir のプロセスを使ってフェイルセーフなアプリケーションを作る ─ 失敗は恐れず泥水にダイブ**](http://qiita.com/naoya@github/items/ad18b49e9ed56a72cab6)の[おまけ](http://qiita.com/naoya@github/items/ad18b49e9ed56a72cab6#%E3%81%8A%E3%81%BE%E3%81%91-task-%E3%81%AE-asyncawait-%E3%81%A7%E4%B8%A6%E8%A1%8C%E5%87%A6%E7%90%86)のところで[**Task**](http://elixir-lang.org/docs/master/elixir/Task.html)を使ってプロセスの並行処理を簡単に記述する方法を書いてくださったので取り入れてみました。

2015.8.29追記：Timexを最新にするとDate.localの仕様が変わっていて時刻の変換ができないことがわかったので(thanks shibacowさん)、GitHub上のコードを修正しました。

更に続く
[**Elixirで試しに何か書いてみる(その5) - 失敗したらやり直す**](http://qiita.com/HirofumiTamori/items/dde5d95765c68f2fef3e)

-----

### 変えたところ ###

もともと、**VercheckEx.main/1**の中でプロセスを**spawn_link/1**で個別に起動しPIDを配列に入れて、それぞれのPIDに対して引数をsendし、**VercheckEx.receiver**で結果を受信していた…あーややこしい…ところを以下のようにEnum.mapとパイプ演算子でまとめちゃいました。

前のバージョン

```ex
  def main(args) do
    urls = [ #{ URL, type, index}
      {"https://github.com/jquery/jquery/releases", :type1},
# (...長いので略)
      {"https://github.com/takscape/elixir-array/releases", :type2},
    ]

    # Spawn processes upto the number of URLs
    fetchers = for _ <- 0..length(urls), do: spawn_link fn -> VercheckEx.fetch_content() end

    Enum.with_index(urls)|>Enum.each( fn(x) ->
      {{u,t},i} = x
      send Enum.at(fetchers,i), {self, u, t, i}
    end)

    result_list = []
    VercheckEx.receiver(result_list, length(urls))

  end
```

変更後

```ex

  def main(args) do
    urls = [ #{ URL, type, index}
      {"https://github.com/jquery/jquery/releases", :type1},
# (...長いので略)
      {"https://github.com/takscape/elixir-array/releases", :type2},
    ]

    urls
    |> Enum.with_index
    |> Enum.map(&(Task.async(fn -> fetch_content(&1) end)))
    |> Enum.map(&(Task.await/1))
    |> Enum.sort(fn(a,b) ->
      {:ok, {_, _, _, i1}} = a
      {:ok, {_, _, _, i2}} = b
      i1 < i2
    end
    )
    |> Enum.map(&put_a_formatted_line/1)

  end
```

あとはもともと引数を変に組み立てなおしていたところを「ありのままで」使うようにした、とか結果が帰ってきてからソートする部分を追加した、などがありますが、全体として
* プロセス起動のための部分が**Enum.map/2**と**Task.async/1**で書けた
* PIDを明示的に管理する必要がなくなった
* 結果を受け取る**VercheckEx.receiver**がいらなくなった
などかなりすっきりしました。

全体のソースは[github](https://github.com/HirofumiTamori/vercheckex)にあります。

### まとめ ###

やっぱり「用意されているものをちゃんと使う」ことは大事ですね。[前回のスクリプトをアプリケーションにする方法](http://qiita.com/HirofumiTamori/items/06ab8e85c25f118f8e72)もそうでしたが**Elixir**の場合、探してみるとほんとにいろいろうまい仕組みが用意されているので早く「試しに何か書いてみた」の段階から前に進みたいものだなあと思いました。
ビルドのたびにSourcekit service crashe と出て困った

ビルドするたびにSourcekit service crashed と出て怒られて非常に困った。
解決策をいろいろとぐぐったら DerivedDataフォルダを消せばいいと出てきた。

参考：
http://qiita.com/kumabook/items/9115043bae855397d359
http://stackoverflow.com/questions/27083848/xcode-source-kit-will-not-stop-crashing-with-swift

・・・消してもダメでしたorz

ソースコードを見なおして見たら以下の部分がアカンみたいでした

```swift
class HogeNode : SKSpriteNode{

    func HogeNode(named:s) -> HogeNode {
        
    }
    
}

```

どうもクラス名と同じ名のメソッドを作るとダメみたい・・・？
まぁこんなコードを書きたかったわけではないので、別にいいのですが・・・
もうちょっとわかりやすいエラーを吐いてくれと思ったゆとりプログラマーでした。。。

## 環境
Xcode 6.2
Rubyで定数を扱う場合はfreezeするべき

## Rubyにおける定数は意図せず書き換えられることがある
以下のような場合、警告すら出ずに定数が書き換えられてしまう。

```rb
PERMIT_ID = ['0001', '0002', '1234']
PERMIT_ID.reject! { |id| id == '1234' }
p PERMIT_ID
# => ["0001", "0002"]
```

Rubyにおける定数は不変の値というより、グローバル変数に近い。
また、Rubyでは先頭が大文字になっている識別子のことを定数としていることから、クラス名であるStringやArrayなども定数として扱っている。
そう考えると、クラスはメソッドを追加したり等いつでも書き換えられるミュータブルなオブジェクトなので、定数が参照するオブジェクトもミュータブルにする必要がある。
よって上記のコードはRuby的に正しい挙動なので警告は出されない。
とはいえ、定数を定義するときは一般的にはイミュータブルな値を定義したいときがほとんどなので、そういった場合はfreezeを使う。

## イミュータブルな定数を定義したいときはfreezeを使う

```rb
PERMIT_ID = ['0001', '0002', '1234']
PERMIT_ID.freeze
PERMIT_ID.reject! { |id| id == '1234' }
# => RuntimeError: can't modify frozen Array

p PERMIT_ID
# => ["0001", "0002", "1234"]
```
Rubyでは、定数等のオブジェクトに対して意図しない書き換えを防ぐために`Object#freeze`というものが用意されている。
ドキュメントによると、以下のようなことが書かれている。

>オブジェクトを凍結（内容の変更を禁止）します。
凍結されたオブジェクトの変更は 例外 RuntimeError を発生させます。 いったん凍結されたオブジェクトを元に戻す方法はありません。
凍結されるのはオブジェクトであり、変数ではありません。代入などで変数の指すオブジェクトが変化してしまうことは freeze では防げません。 freeze が防ぐのは、 '破壊的な操作' と呼ばれるもの一般です。変数への参照自体を凍結したい 場合は、グローバル変数なら Kernel.#trace_var が使えます。
>> 引用元: [instance method Object#freeze (Ruby 2.2.0)](http://docs.ruby-lang.org/ja/2.2.0/method/Object/i/freeze.html)

## コレクションの場合、要素もfreezeするべき

```rb
PERMIT_ID = ['0001', '0002', '1234'].freeze
PERMIT_ID.map!{|id| id << 'hogefuga'}
# => RuntimeError: can't modify frozen Array
PERMIT_ID.push('9999')
# => RuntimeError: can't modify frozen Array
PERMIT_ID.pop
# => RuntimeError: can't modify frozen Array

PERMIT_ID.map{|id| id << 'hogefuga'}
p PERMIT_ID
# => ["0001hogefuga", "0002hogefuga", "1234hogefuga"]
```
ドキュメントにもあるが、freeze が防ぐのは、'破壊的な操作'であり、定数の指すオブジェクトが変化してしまうことは防げない。
この場合、定数の指す配列(オブジェクト)の要素が書き換わってしまった。
これを防ぐには要素もfreezeする必要がある。

```rb
PERMIT_ID = ['0001', '0002', '1234'].map(&:freeze).freeze
PERMIT_ID.map{|id| id << 'hogefuga'}
# => RuntimeError: can't modify frozen String
p PERMIT_ID
# => ["0001", "0002", "1234"]
```

ここで挙げた例は配列だが、Hashの場合も同様である。

## 再代入も不可にさせたい場合、moduleをfreezeする

```rb
PERMIT_ID = ['0001', '0002', '1234'].map(&:freeze).freeze
p PERMIT_ID
# => ["0001", "0002", "1234"]
PERMIT_ID = 'hogefuga'
# => warning: already initialized constant PERMIT_ID
# => warning: previous definition of PERMIT_ID was here
p PERMIT_ID
# => "hogefuga"
```
Rubyにおける定数は、再代入時に警告を出してくれるがエラーにはしてくれない。
そもそも定数を書き換えるコードなんて書くなという話だが、そういったコードは開発者が意図せずに紛れ込ませてしまい、レビュアーも気づかない場合がある。
そこで、再代入すらエラーにさせたい場合は、名前空間を切ってmoduleをfreezeしてしまえば良い。

```rb
module MyConstant
  PERMIT_ID = ['0001', '0002', '1234'].map(&:freeze).freeze
end
MyConstant.freeze
MyConstant::PERMIT_ID = 'hogefuga'
# => RuntimeError: can't modify frozen Module
```

## 参考資料
* Effective Ruby: 項目4 定数がミュータブルなことに注意しよう
iOSでParse.comを使うときに調べたこと


***
#### Q.生成されるObjectIDはアプリ内を通して全てユニークなのか？
A.ユニークである。

>https://www.parse.com/questions/are-all-object-ids-unique-in-an-app-across-all-tables
>>Yes, object ids should be unique across all class

***
#### Q.PFObjectをローカルに保存したい時どうすればいいの？
A.Cache Queryを使う。

>https://www.parse.com/questions/how-can-i-save-pfobject-data-to-disk
>>PFObject does not implement the NSCoding protocol, but you can cache queries to disk in order to access this data while offline.

***

#### Q.PFObjectをCache Query使わずにローカルに保存したいんだけど?
A.Parse-NSCodingを使う。
※CocoaPodsで入れると古いバージョンのParseSDKが入るので注意
[PFUser enableRevocableSessionInBackground] が使えなくなって気がついた。
>https://github.com/eladb/Parse-NSCoding

***
UITextViewのURLリンクの色をカスタマイズする方法


・編集不可にする。
・リンクとして認識させる
・色の指定(デフォルトは青)

```Objective-C:Cbjective-C

// 編集不可にする
textView.editable = false

// textViewのtextにURLの文字列があればリンクとして認識する
textView.dataDetectorTypes = UIDataDetectorTypeLink;

// リンクの色を指定する
textView.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor]};
```
```Swift:Swift

// 編集不可にする
textView.editable = false

// textViewのtextにURLの文字列があればリンクとして認識する
textView.dataDetectorTypes = .Link
        
// リンクの色を指定する
textView.linkTextAttributes = [NSForegroundColorAttributeName:UIColor.blueColor()]
```
UIScrollViewとUIImageViewで画像を拡大、縮小できるようにする。


##　できあがるもの
[![Gyazo](http://i.gyazo.com/f67afb4668f5cb3115469a71e9ed9a28.gif)](http://gyazo.com/f67afb4668f5cb3115469a71e9ed9a28)

「写真」のプレビュー表示です。(ほんとにこれだけ。)

### 作り方

1. Storyboard or xibでviewにuiscrollview,uiimageviewをのせます。
2. uiscrollviewのContentmodeを`Center`にします。(←これが一番大事)Constrainsを適当に決めます。
3. uiimageviewのConstrainsにCenterX,Yを追加します。scrollviewとの位置関係も適当に決めます。
こんなかんじ↓
![Screen Shot 2015-08-02 at 20.48.13.png](https://qiita-image-store.s3.amazonaws.com/0/68925/1a7b9640-47dd-847d-25cd-4eaa58355b66.png "Screen Shot 2015-08-02 at 20.48.13.png")


4. viewControllerはこんなかんじ↓

```
import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool) {
        scrollView.delegate = self
        scrollView.maximumZoomScale = 8.0
        scrollView.minimumZoomScale = 1.0
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }

}
```

5.完成です。
Reactのそれなりの開発環境をつくったときのメモ


Reactを始めようと思ったので、それなりの開発環境をつくってみた。
フロントエンドのちゃんとした環境を作るのは初めてなのでメモしておく。
プロジェクトのフォルダ構成はこんな感じ。

```
project
├── build
├── dest
│   ├── app.js
│   └── app.min.js
├── node_modules
├── package.json
├── src
│   └── app.jsx
└── index.html
```


## npmでパッケージをインストール

```
# package.jsonを作成
$ npm init
$ npm install --save-dev browserify reactify react uglify-js watch
```

## package.jsonの設定(jsxのビルド設定)

npm initコマンドで作成した、package.jsonの設定。
browserifyのtransformでreactifyを指定して、Reactのソースを変換している。

``` package.json
{
  "name": "project",
  "version": "1.0.0",
  "description": "",
  "devDependencies": {
    "browserify": "^11.0.1",
    "react": "^0.13.3",
    "reactify": "^1.1.1",
    "watch": "^0.16.0"
  },
  "scripts": {
      "build": "browserify --debug src/app.jsx > dest/app.js",
      "build-dist": "NODE_ENV=production browserify src/app.jsx | uglifyjs -m > dest/app.min.js"
  },
  "browserify": {
    "transform": [ "reactify" ]
  }
}
```

src配下のapp.jsxをビルドするとき。


```
# dest配下にビルドされた、app.jsが生成される。
$ npm run build
```

production用とかでビルドするとき。
[browserify + npmでReactを使う場合はNODE_ENVを設定するとよい]
(http://qiita.com/hokaccha/items/474d011473eeba8dd416)らしい。

```
# best配下に圧縮された状態の、app.min.jsが生成される。
$ npm run build-dist
```


ビルドされたjsファイルをhtmlに指定してあげればブラウザ上で動くようになる。

``` index.html
<html>
  <meta content="text/html" charset="UTF-8">
  <head>
    <script src="fb.me/react-0.13.3.js"></script>
  </head>
  <body>
    <div id="app-container"></div>
    <script src="dest/app.js"></script>
  </body>
</html>
```

## ファイルを監視して、変更された際に自動でビルドが走るようにする。
gulpとかgruntとか使おうと思ったが、大したことやりたいわけではないので、とりあえずnpmのwatchで乗り過ごそうと思う(いっぱいあってよくわからんくなってしまった)。
[ビルドツールまとめ。Gruntとかgulpとか (フロント寄り)](http://qiita.com/cognitom/items/db88babebeb869a4a198)
[Grunt/Gulpで憔悴したおっさんの話](http://t32k.me/mol/log/npm-run-script/)

package.jsonのスクリプトにwatchの記述を追加する。

``` package.json
...
"scripts": {
...
    "watch": "watch 'npm run build && npm run build-dist' src"
  },
...
```

以下のコマンドを実行するとsrc配下のファイルの変更を監視して、変更があったらビルドを実行してくれる。

```
# src配下の監視を実行
$ npm run watch
```
unity > sphereが飛び跳ねるようにする

```txt:動作確認
Unity 5.1.2 on MacOS X
```

sphereが飛び跳ねるようにする。

http://unity3d.com/learn/tutorials/modules/beginner/physics/assignments/bouncing-ball


1. Assetsに Physics Material フォルダを作成する
2. Physics Materialフォルダににて Create -> Physics Mateiralする (名前をBouncyとする)
3. Bouncyの BouncinessやBounce Combineなどを調整する
4. BouncyをSphere > Sphere Collier > Material に関連づける

これでsphereがplaneに接触した後に飛び跳ねるようになる。

![Untitled_-_150802_lineRenderer_-_WebGL__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/1ee10298-3f28-6929-ef01-a387dce53b23.jpeg)