OmniAICreator/Qiita-1.07M huggingface dataset:
For positive triplet (n,x,y), n/(x*y)==n/x/y even in integer division

For positive triplet (n,x,y), `n/(x*y)==n/x/y` even in integer division.
_This should be useful to avoid overflow._
Let's prove this below.

----

if n.divmod(xy) is (a,b), n can be represented as:

```
n=axy+b (0<=b<xy)
```

On the other hand, if n.divmod(x) is (c,d) and c.divmod(y) is (e,f), n can be represented as:

```
n=cx+d (0<=d<x)
c=ey+f (0<=f<y)
n=x(ey+f)+d=exy+xf+d
```

Now suppose d is x-1 and f is y-1. Then `xf+d` becomes `x(y-1)+x-1=xy-1 (<xy)`.
This means `0<=xf+d<xy` and `a(==n/(x*y))==e(==n/x/y)` has been proved.
Also, in `n/(x*y)`, x and y are exchangable. So `n/x/y == n/y/x`. (Q.E.D.)

検索用：自然数の3つ組(n,x,y)に対して`n/(x*y)==n/x/y`は整数除算でも常に成立しますので、オーバーフローを避けるのに役立つでしょう。

## 170513

Actually this lemma is used for icbrt (integer cubic-root) used in http://qiita.com/cielavenir/items/2a685d3080862f2c2c47 .

## 180127

For fear, I confirmed small case...

```
#!/usr/bin/ruby
(1..10000).each{|n|
	(1..100).each{|x|
		(1..100).each{|y|
			r0=n/(x*y)
			r1=n/x/y
			r2=n/y/x
			if r0!=r1 || r1!=r2
				raise [n,x,y].join(',')
			end
		}
	}
}
```

https://qiita.com/cielavenir/items/d419b448d1c65eae2868 is another example where this lemma is useful.
DjangoでNoReverseMatchが発生したときに最初に確認すること

#NoReverseMatch

<img width="932" alt="スクリーンショット 2017-05-11 11.43.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/71585/779fe0c6-eb1d-1afa-f91e-53132cdfbd68.png">

未だにやってしまうチョボミスが発生した場合。


#原因は概ねURLディスパッチャ
```myapp/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^', views.myapp_index, name='myapp_index'),
]
```

対策としては当然コードの追加。

```myapp/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^', views.myapp_index, name='myapp_index'),
    url(r'^delete/', views.data_delete, name='data_delete'),
]
```

テンプレート内に挿入するこういうやりかた

```html
{% url 'myapp:data_delete' %}
```

'namespace:name'

のルールになっているので、not a valid view function or pattern name.が出た場合は、urls.pyを見直してみようという話でした。
SBクラウドのAlibabaクラウドで、Cloudinit(ユーザデータ)を使ってみた

#概要

 以前から気になっていたAlibabaクラウドの仮想サーバ(ECS)触ってみました。Alibabaクラウドと言えば、中国でシェアNo1とか、海外展開(特にアジア)に強いとか言われていますが、その使い勝手含め、Cloudinitを使った「ECSインスタンス購入と同時にサーバ構築」をやってみました。

 今回は、試しにWebサーバとFTPサーバの自動構築をやってみましたが、この機能を応用すれば、購入時や毎起動時に、定型的な設定ができますので、色々と使えそうですね。

#インスタンス購入時のユーザデータ設定

 Alibabaクラウドにログインしてインスタンスの購入と進めてみます。
（今回はトライアルキャンペーン中ということで、クーポンを使ってタダで購入です。(*´ー｀*) ）
 リージョンやOSなどを指定して、ユーザデータの設定をします。
<img width="371" alt="スクリーンショット 2017-05-11 10.54.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/178237/d93becfb-88e5-3141-199b-12e64fba7d89.png"><img width="386" alt="スクリーンショット 2017-05-11 10.54.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/178237/bd72a4c8-b589-56c5-9845-5ca92355fc19.png">

#実行するコマンド

 今回は、以下のコマンドをユーザデータに設定してみました。
`#cloud-config
runcmd:
- yum -y install httpd
- chkconfig httpd on
- service httpd start
- yum -y install vsftpd
- chkconfig vsftpd on
- service vsftpd start`
3行目以降の設定コマンドは、行頭に「- 」を入れます。
ユーザデータを設定した後は、インスタンスを購入して、インスタンスの起動を待ちます。
(大体１〜２分)

#ユーザデータの設定結果の確認
 インスタンスが起動しましたら、早速、購入したインスタンスにログインして、無事インストールされているか確認してみます。
 service status 。。。ＯＫ
 chkconfig。。。ＯＫ
 ログも一通り確認しましたが、設定したコマンドは全て正常に実行されていました。ヾ(´∇｀)ノﾞ

 一通り操作した感想ですが、ECSコンソール操作、マニュアル等だいぶ使いやすく、ほとんど直感的に操作できました。早い、安い、シンプルでイイ感じです。p(^^)q

 サーバのインストールだけでなく、複数サーバに同じ設定をする場合や、起動時にセキュリティ設定を完了させておく場合など、シンプルな設定の割に用途は色々ありそうです。
 皆さんもぜひお試しください。
そもそもどうしてHTMLに装飾書いたらダメなの？～webの歴史を添えて～

2017/5/16 HTMLのなりたちについて修正追記しました！コメント頂きましてありがとうございます！

#CSSについてwikipedia先生がおっしゃっていた。
>Cascading Style Sheets（CSS、カスケーディング・スタイル・シート、カスケード・スタイル・シート）とは、HTML や XML の要素をどのように修飾（表示）するかを指示する、W3Cによる仕様の一つ。文書の構造と体裁を分離させるという理念を実現する為に提唱されたスタイルシートの、具体的な仕様の一つ。

文書と体裁を分離させようということはわかったけれども、そもそもなぜ分けなければならなくなったのか…。
どうやらHTMLの歴史に関係してるようです。

#HTMLの前身？SGMLってなんだ？
1986年、**Standard Generalized Markup Language（SGML）**と呼ばれる言語がISOから出版されました。
**SGML**とは、**文書を長期保管するためのマークアップ言語**です。

1980年代、文書を長期保管するために電子文書化の取り組みが始まりました。
しかし、当時はワープロソフトのバージョンアップや、ソフト自体の開発が中止されたときに**データが読めなくなってしまう**ことがありました。
そこで**プレーンテキスト**のみを用いて**タグ**を使うことで、**文書をどんな環境でも閲覧できる**ようにしたのが**SGML**でした。

軍艦や軍用機の高度化により溢れかえったマニュアルの保管・管理のためにSGMLが採用されたり、日本でも厚生省への新薬申請のデータ形式としてSGMLを採用していたそうです。


#HTMLの生まれた目的
##World Wide Web(WWW)のはじまり
ところ変わって、今度はヨーロッパ。**web**のはじまりの話です。
**web**の生みの親は、イギリス人の**ティム・バーナーズ=リー博士。**
スイスに**CERN(セルン)**という素粒子に関する物理学的な研究機関がありました。
ティム博士は当時コンピュータ技術者としてCERNに在籍していました。
そこで、**研究情報やデータ閲覧をスムーズに出来ないか？**という話が上がり、開発されたのが**論文閲覧システム World Wide Web**。**web**の始まりでした。

##webの誕生日とリンク機能
1991年8月6日、世界で最初のwebサイトが公開されました。
この時にティム博士が発表し、最も注目されたのが**Hyper Text（ハイパーテキスト）**という仕組み。
今では当たり前になっている、**リンク機能。**
リンク機能を持つ文書のことを**ハイパーテキスト**と呼びました。

ティム博士は、誰でもこれらの文書をwebサイトとして作れるように、**SGML**を元にwebページを記述する言語、**Hyper Text Markup Language (HTML)**を開発しました。

#HTMLは文書構造を示すためのもの
**HTML**は**研究情報やデータ閲覧をスムーズにするための言語**でした。
さらに元を辿ると、**SGML**という**マニュアル文章を長期保管するための言語**が前身となっていました。
HTML3.2で見た目や装飾に関する要素や属性が追加されましたが、そもそもHTMLが生まれた目的は**「文書構造を示す」ためのもの。**
しかし、せっかく出来るなら見た目もキレイにしてみたいものですよね。
そこで見た目や装飾を定義する手段として生まれたのが、**スタイルシート**。**CSS（Cascading Style Sheets）**が生まれたというわけでした。

**本来のHTMLの目的と違う**ことが、**装飾を推奨されていない理由**だったんですね。
CSSが出来る前にHTMLに書いていた時代の名残なのだと思います。
HTML5ではCSSで指定出来る属性はほぼ廃止になっています。
Rails複数レコードのInsert方法を比較する - 通常, トランザクション, バルク

Railsでのバルクインザートは、`activerecord-import`を使う。

- バルクインザートについて [8000万レコードをInsertする](http://nekopuni.holy.jp/2014/03/mysqlpython8000%E4%B8%87%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92insert%E3%81%99%E3%82%8B/)
- gem [activerecord-import](https://github.com/zdennis/activerecord-import)


```ruby
require 'benchmark'

Benchmark.bm(10) do |r|
  r.report 'nomal' do
    users = User.limit(1000)
    users.each do |user|
      UserSomething.create(user_id: user.id, something_id: 9)
    end
  end
  r.report 'transaction' do
    users = User.limit(1000)
    ActiveRecord::Base.transaction do
      users.each do |user|
        UserSomething.create(user_id: user.id, something_id: 10)
      end
    end
  end
  r.report 'bulk' do
    user_somethings = []
    users = User.limit(1000)
    users.each do |user|
      user_somethings << UserSomething.new(user_id: user.id, something_id: 11)
    end
    UserSomething.import user_somethings
  end
end
```

だいぶ早い。

```bash
                 user     system      total        real
nomal        1.820000   0.090000   1.910000 (  3.077426)
transaction  1.250000   0.040000   1.290000 (  1.403902)
bulk         0.500000   0.000000   0.500000 (  0.512674)
```
Unity2017.1　新機能触ってみる

# 概要
Unity2017.1の新機能で触りやすい機能からさわっていく

# 詳細
- .Net4.6対応

<img width="427" alt="スクリーンショット 2017-05-11 10.51.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/178684/376bbf8b-5ce7-3b91-ba24-deb9575bd22d.png">

BuildSettings > Configuration > Scripting Runtime Versionから変更
Android, iOSで項目確認
.Net4.6でできることは以下を確認
http://qiita.com/nskydiving/items/2ff8285acb72c4e59caf

- Scriptだけのビルド
BuildSettings > DevelopmentBuildにチェックを入れてからScript Only Buildにチェック

<img width="355" alt="スクリーンショット 2017-05-11 10.57.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/178684/72b0d025-35b7-a11b-222c-ca2cc352f5be.png">


- Consoleに出力するログ変更
ConsoleView > ConnectedPlayerから変更、接続したAndroidのログとか観れる様子

<img width="342" alt="スクリーンショット 2017-05-11 10.57.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/178684/01f6538f-d2e4-9334-a99f-944e96ea9b39.png">

- ProfilerにUI項目追加
Window > Profilerを表示して、下の方に追加されてる

<img width="1070" alt="スクリーンショット 2017-05-11 11.01.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/178684/2276f665-e404-d804-1652-98b8b815f758.png">

# 今後
TimeLineとかSpriteMaskとかも触っていきたい

# 参考
http://tsubakit1.hateblo.jp/entry/2017/04/13/012948#NET-46%E5%AF%BE%E5%BF%9C
[備忘録]Rails Engineでparallel_testsを使う


## parallel_testsとは
[parallel_tests](https://github.com/grosser/parallel_tests)はテストを並列化して、実行を高速化するツールです。デフォルトでは、CPUのコアの数だけ並列化してくれます。

## Rails Engine対応
Rails Engineの場合は、Readme通りにやっても上手く動きません。そこで、`Rakefile`に`require 'parallel_tests/tasks'`を
追加すると動くようになります。

## 参考
https://github.com/grosser/parallel_tests/issues/538

## 余談
もしVMを使っているのであれば、CPUの割当を2つ以上の設定にする必要があります。この設定ができてなくてハマりました。。。
CakePHP3でカスタムバリデーションを実装する


## ディレクトリとファイルの作成

Modelディレクトリの配下に`Validation`ディレクトリを作成し、その中にバリデーションを定義するファイルを作成する。

今回はCustomValidation.phpとする。

![Kobito.5yjOIf.png](https://qiita-image-store.s3.amazonaws.com/0/92630/46a82b67-0210-9428-2b08-2ce7309abead.png "Kobito.5yjOIf.png")


## カスタムバリデーションの定義

今回は例として緯度の書式をチェックする関数を実装する。

```php
<?php
namespace App\Model\Validation;
use Cake\Validation\Validation;

class CustomValidation extends Validation {
  /**
   * 緯度
   * @param string $value
   * @return bool
   */
	public static function isValidLatitude($value) {
		return (bool) preg_match('/^[0-9]+\.[0-9]+$/', $value);
  	}

}
```


## カスタムバリデーションの使用方法

使用するModelのTableファイルで上記のカスタムバリデーションを呼び出す。

```php
<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class SampleTable extends Table
{

    /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator)
    {
        $validator->provider('Custom', 'App\Model\Validation\CustomValidation');
        
        $validator
            ->requirePresence('latitude', 'create')
            ->notEmpty('latitude', "入力されていません")
            ->add('latitude', 'latitudeRule', [
                'rule' => ['isValidLatitude'],
                'provider' => 'Custom',
                'message' => "書式に誤りがあります",
                ]);

```


この１文で`Custom`というキーで使用することができる。

```php
	$validator->provider('Custom', 'App\Model\Validation\CustomValidation');
```

latitudeという項目について、カスタムバリデーションとして定義したisValidLatitude関数でチェックする。（２つ目の引数のlatitudeRuleは任意の文字列）

```php
            ->add('latitude', 'latitudeRule', [
                'rule' => ['isValidLatitude'],
                'provider' => 'Custom',
                'message' => "書式に誤りがあります",
                ]);
```
Railstutorial 4版　覚書 第９章

理解しずらかったので、テスト以外の追加コードをまとめた。
もう一周するとき、もっと深ぼりする。
実際には、テストもやっています。

追記変更　#

#Remember me 機能

```app/models/user.rb
  attr_accessor :remember_token


  def User.new_token  #ランダムなトークンを返す
    SecureRandom.urlsafe_base64
  end

  def remember  # 永続セッションのためにユーザーをデータベースに記憶する
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end

  def authenticated?(remember_token)  # 渡されたトークンがダイジェストと一致したらtrueを返す
    
    return false if remember_digest.nil?  # authenticated?を更新して、ダイジェストが存在しない場合に対応
BCrypt::Password.new(remember_digest).is_password?(remember_token)
  end

  def forget  # ユーザーのログイン情報を破棄する
    update_attribute(:remember_digest, nil)
  end
```


```app/controllers/sessions_controller.rb
.
.
def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      remember user  # ログインしてユーザーを保持する
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

  def destroy
    log_out if logged_in?  # ログイン中の場合のみログアウトする
    redirect_to root_url
  end

```

```app/helpers/sessions_helper.rb
  def remember(user)# ユーザーを永続的セッションに記憶する
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end

  def current_user  # 記憶トークンcookieに対応するユーザーを返す
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

  def forget(user)   # 永続的セッションを破棄する
    user.forget
    cookies.delete(:user_id)
    cookies.delete(:remember_token)
  end

  def log_out
    forget(current_user)  # 現在のユーザーをログアウトする
    session.delete(:user_id)
    @current_user = nil
  end
```

#[Remember me] チェックボックス

```app/views/sessions/new.html.erb
  .
  .
  .
      <%= f.label :remember_me, class: "checkbox inline" do %>
        <%= f.check_box :remember_me %>
        <span>Remember me on this computer</span>
      <% end %>

```

```app/controllers/sessions_controller.rb
.
.
def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      remember user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)  # チェックボックスの送信結果を処理する
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end
```

#テスト重要

空でテスト書くのはまだまだ。
二年前の大学院の授業では、Rubyのコミッターの方が、minitestを押していたので、取り敢えずマスターしたい。
テストで重要なことは、webを使う時に、userがやってしまうことを洗い出すことだとわかった。

良い手法：　raiseを使う
Configurationによってinfo.plistを書き換えてATSの有効/無効を切り替える

## 背景と実現したい内容

背景として次のような開発環境になっています。

* 開発環境のサーバがATS要件(TLS 1.1)を満たしていない
* 担当者ごとに開発サーバが異なりWebAPI/WebViewのURLが異なる

このような環境で開発を行っており、担当者ごとのURLをATSの除外リストとしてinfo.plistに記載することが現実的ではなかったため、開発アプリでのみATSを無効にする事にしました。

## 前提

### 実行環境

* macOS Sierra 10.12.4
* Xcode 8.3.2
* Swift 3.1
* Deployment Target 9.0

### Configuration

本記事は以下のConfigurationがあるアプリを前提に記載します。

* Debug-Development
* Debug-Staging
* Debug-Production
* Release-Development
* Release-Staging
* Release-Production

## 実現方法

### info.plist

`info.plist`に`NSAppTransportSecurity`を追加していない状態にしておきます。


### Preprocess Info.plist file

`Build Settings` > `Pakaging` > `Preprocess Info.plist file` を `YES` にします。

### Run Script

* `Build Phases`に`Run Script`を追加します。
* Scriptは以下です。注意点等はコメントに書いています。

```
# plutilでdictの中の値を更新する方法が不明だったので、remove and insertで対応しました。
plutil="/usr/bin/plutil"
infoPlistFileDestination="${TEMP_DIR}/Preprocessed-Info.plist"

# 前回の状態が残るようで一度 remove する必要があります。
$plutil -remove 'NSAppTransportSecurity' $infoPlistFileDestination

if [[ ${CONFIGURATION} != *"Production"* ]]; then
$plutil -insert 'NSAppTransportSecurity' -xml '<dict><key>NSAllowsArbitraryLoads</key><true/></dict>' $infoPlistFileDestination
fi
```

## 参考にしたページ

以下のページを参考に実装させて頂きました。

* [http://www.tokoro.me/2014/05/19/xcode-versioning/](http://www.tokoro.me/2014/05/19/xcode-versioning/)
* [http://nerd0geek1.hatenablog.com/entry/2016/01/13/200000](http://nerd0geek1.hatenablog.com/entry/2016/01/13/200000)

## さいごに

今回はこの方法で実現できました。  

ただ、後から見返すと、`Preprocess Info.plist file`はConfiguration毎にYES/NOを設定できるので`Preprocessed-Info.plist`の有るなしで制御しても良いかもです。

また、Scriptのところで`NSAppTransportSecurity`を置き換えてしまっているのが微妙です。
この方法だと、一部ATS無効なURLを設定する場合にこのScriptを更新する必要があります。

本当は`NSAllowsArbitraryLoads`の値を変えたかったのですが、`plutil`を使ってdictの中の値を更新する方法がわからず今回の方法にしました
Fatal error in launcher: Unable to create process using '"'を何とかする

Windows環境のPythonのpipでエラーが出る人向け
```
C:\>pip
Fatal error in launcher: Unable to create process using '"'
```
これが出たときは大体PATHが汚くなってます。
複数バージョンのPythonを何も使わずに入れると発生する模様。
#解決方法
##とりあえず動かす
```
C:\>python -m pip
```
で動きますが、問題は解決してません。
##PATHの修正
複数バージョンのPythonにPATHが通っていないか確認しましょう。
特に、Python3とかPython2とかAnacondaとか入れてる人は要注意。
Polymer スタイルモジュールを読み込む際の注意点

スタイルモジュール(`<style include="xxx">`)を使用する際の注意点です。

## 問題
複数のスタイルモジュールを読み込んだ場合、モジュール間で競合するスタイル情報があると後に指定したモジュールのスタイルが適用されます。

例えば、`<style include="style-module-x style-module-y style-module-z">`でモジュール間で競合するスタイルがあると、x=>y=>zの順に適用されます。

つまり、モジュールを読み込む順番によって意図しないスタイルが適用されてしまう可能性があります。

## 対策
スタイルモジュールを定義する際はセレクタの抽象度に注意し、読み込むときも抽象性の高いモジュールから順番に読み込むようにします。(例：アプリケーションのテーマ=>フォームの共通スタイル=>ボタン)
Ubuntu 16.04 LTSに Go 1.8をインストール

Ubuntu 16.04 に Golang 1.8 をインストールする方法をメモ。
非公式のリポジトリを追加する必要あり。

```shell-session
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go
```
ハッキングされたWordpressから難読化されたコードを見つけた件

とあるお知り合いからGoogle検索からホームページにアクセスすると、真っ白で何も表示されないというご相談を頂来ました。
調査の結果、ハッキングされたようで謎のコードが埋まっていました、発見するまでの流れを紹介します。

#　環境
- Wordpress バージョン WordPress 4.1.17
- 一般的なレンタルサーバ
- ftp接続（ssh/sftpはたぶん使っていない）
- wpのパスワードはランダムでした（fail2banも搭載済み）

# 詳細な事象

- googleの検索結果からサイトにアクセスすると真っ白なページ
  - 私の環境だと再現しないことがある
  - 再現した場合は、レスポンスが空、ステータスは200
- URL直打ちでアクセスすると表示される
  - どうやら、検索結果から流入したときのみらしい

## 原因の特定

相談頂いた時間がちょうど深夜で、アクセス数も少なかったためそのまま対応させてもらえることになりました。
（※ちょうどそのときは私の環境でも再現していた）
アクセス元によって挙動が変わるようなので、Wordpressのエントリーポイント

```
wp/index.php
```

の先頭に、リファラーを確認できるよう

```php
<!--<?php echo 'Referer is '.$_SERVER['HTTP_REFERER'] ?>-->
```

と、記載してみた。
正常に動作するようであれば、少なくとも 　*Referer is XXXXX* と表示されるはず・・・
しかし依然として真っ白なページで、ページソース確認でも、確認できませんでした。

wordpressの仕組み上、少なくともwp/index.phpは実行されるはずで、URL直アクセスする場合は
想定通り、*Referer is XXXXX*と表示されることを確認しました。

上記の結果からおそらく、index.phpを経由していないと仮定し、これより上の処理を確認しました。
この判断がビンゴで、.htaccess内に悪意のあるコードが埋まっていました。

## .htaccessの中身

通常のwordpressに存在しない、下記の内容が追加されていました。

```apache
RewriteRule ^google(.*)\.html$ /wordpress/wp-admin/network/tpl/wp-og3.php?gg=$1 [L] 
RewriteCond %{HTTP_USER_AGENT} (bot|google|yahoo|aol|bing|crawl|aspseek|icio|robot|spider|nutch|slurp|msnbot) [NC] 
RewriteCond %{REQUEST_FILENAME} !(wp-og3.php|xsl|css|jpg|gif|js)$ [NC] 
RewriteRule ^(.*)$ /wordpress/wp-admin/network/tpl/wp-og3.php [L] 
RewriteCond %{HTTP_REFERER} (google|aol|yahoo|msn|search|bing|seznam|Seznam) [NC] 
RewriteCond %{HTTP:Accept-Language} ^ja.*$ [NC] 
RewriteCond %{REQUEST_FILENAME} !(wp-og3.php|xsl|css|jpg|gif|js)$ [NC] 
RewriteRule ^(.*)$ /wordpress/wp-admin/network/tpl/wp-og3.php [L]
```

通常のwordpress用のhtaccessには記載されない内容です。
処理内容は簡単に下記の通りです。

- googleなんとかhtmlだった場合の wp-og3.php にリダイレクトする
  - おそらく、googleの GSuiteなどのドメイン認証を詐取するための設定です
  - GSuiteの乗っ取りが行われる・・・？
  - GSuiteの組織を勝手に作られる・・・？
- 検索サーチBOTからのアクセスの場合、wp-og3.phpにリダイレクトする
- 検索サイトからのアクセスで、言語が日本語の人は、wp-og3.phpにリダイレクトする 
  - 再現しなかった時は、英語設定クライアントだった

また、この内容から、攻撃のエントリーポイントは

```
/wordpress/wp-admin/network/tpl/wp-og3.php
```

に存在することが分かりました。ファイルを開いてみると、そこには難読化されたコードが存在していました。
一端、ここまでで攻撃を受けたこと、とりあえず.htaccessを修正すれば、報告された事象は解消することが分かったため
報告を上げ、対応を終了しました。

当日、解読することが出来たので、後日、難読化の仕組みになっているのか別記事を掲載します


# あとがき
報告があった、事象については修正し、正常に稼働するようにしたが、おそらく他にもウィルスが埋まっているはずなので
サイトの閉鎖、ウィルスの除去、再構築などを行うべきです。
先方にも、閉鎖推奨と伝えましたが、理解を得られず、現状維持となりました :joy: 



# 追記


はてブやTwitterで、古いWP、脆弱性が残っているWPだとのご指摘を頂いています。

## バージョンについて（やや理解と解説に不安）

問題がありましたWPのバージョン4.1.17については、リリース日が2017年4月20日となっており、同日リリースされている
最新版（4.7.4）のバックポートを当てた状態（だと思う）で、ノーメンテ状態ではなくある程度メンテはされていた状態と推察しています。
（※バックポートは非公式な提供なので突然なくなることもあるので、最新のバージョンを維持できる体制を整えるのが一番です）

参考　[WordPress の EOSL についての簡単なまとめ](http://qiita.com/kameid/items/e43aba0e173d7746dbe1)


いつの時点でハッキングされたかは確認していないのですが（ファイルのタイムスタンプを覚えておけば良かった）
4月20以前の場合は、WPの脆弱性を利用されていて
4月20日以降の場合は、テーマかプラグイン、またはFTPアカウント乗っ取りの可能性が高いのではないかと考えています。

## 脆弱性が残ってる件について
 
ご指摘の通り、脆弱性またはサーバへのアクセス権が、攻撃者の手中にある状態です。
いつ再発してもおかしくない状態ではあります。今すぐにでも対策を打つべきですが
残念ながら、大人の都合で対応が終了しました。
私がもっと交渉がうまければ良かったのですが・・・。
証明書(.cer)が入らない場合OS再起動で治った

* [証明書をインストールしようとしたのですが、エラーとなりインストールできない](https://social.technet.microsoft.com/Forums/ja-JP/a2a794df-db39-40d2-bbe5-9d8fc312bee3?forum=w8itpro)

>  【エラーメッセージ】
> 内部エラーが発生しました。ユーザー　プロファイルにアクセスできないか、インポートしている秘密キーはシステムにインストールされていない暗号化サービス　プロバイダーが必要である可能性があります。

> 　２．証明書（*.cer）をダブルクリックし、「証明書のインストール」→「保存場所 : 現在のユーザ(C)」→参照ボタンより「[信頼されたルート証明機関]」を選択しインストールをしようとすると、上記のエラーメッセージが出力された。


自分もこの問題に遭遇した。

OS再起動で解決した。
seq コマンド

#シェルスクリプトで指定回数ループ処理

seq 10とやると、1から10まで出力してくれる。

seq 2 10とすると2から10まで出力してくれる。


これを使うと、for文で、1～10までのループとかが簡単に実行出来る。

---------------------------
for i in `seq 1 10`; do
    echo "${i}個目の出力"
done    

--------------------------------

とすると、

1個目の出力
2個目の出力
3個目の出力
4個目の出力
5個目の出力
6個目の出力
7個目の出力
8個目の出力
9個目の出力
10個目の出力
と出てくれる
windowsでChromeを使う方必見！ アプリケーション化

Chromeを使うようになってアプリケーション化という機能が便利だったので共有
知ってるよ！って方は読み飛ばしてください

## 読んでほしい人
　- windowsユーザ
　- ChromeでGmail、Box等のアプリを常に使う人
　- **Chromeで常用するページが多くて、タブ管理が大変な人**
　- いちいちよく使う機能を開きなおすの面倒

## 背景
    1)転職してOutLook⇒Gmailを使うことに
    2)カレンダーもOutLook⇒Googleカレンダー
    3)ファイル管理がファイルサーバー⇒Box
    ⇒全部Chromeなので、最低3タブが開きっぱなし
    　そこに調べものするとタブが多くてパンクする


## やること
    2つだけ

#### 1)アプリケーション化したい、Gメールとかのページを開く
    　⇒設定ボタン(縦に点が3つ並んだやつ ※57.0.2987.133)をクリック
    　⇒「その他のツール」⇒「デスクトップに追加」
    　　※「ウィンドウとして開く」のチェックは外さない

#### 2)windowsのスタートアッププログラムに登録する
    　以下にデスクトップに追加したショートカットを移動する
    　C:\Users\{ユーザー名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

これで、PC起動時にGメールとかGカレンダーが立ち上がるように。
使い勝手はOutLookのようなアプリと同じです。

（おわり）
【FileMaker】FileMaker 16 新機能のカードはどこで作れる？

先日はFileMaker 16のラインナップの新発売でしたね。
早速、新機能である「カード」のサンプルで確認をしてみました。

「カード」、ナンノコッチャと思っていましたが、結局は、新しいウィンドウをモーダルウィンドウのように手前に表示することで、ユーザに有効なウィンドウを明示できます。

では、どこで設定すればそんなウィンドウが表示されるのか？
やり方は、通常のウィンドウを表示する動きと同じです。

# フォーム形式レイアウト by フォーム形式のカードウィンドウ

今回の例では、ボタンに新規ウィンドウを表示する動きで説明します。
まずはデフォルトの設定のままの場合です。
フォーム形式のレイアウト上に、同じレイアウト（フォーム形式）をカードウィンドウで表示します。

ボタン処理で新規ウィンドウを作成する際に、ウィンドウスタイルとして、「カード」が追加されています。
<img width="1058" alt="filemaker16car0.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/b6e3c9f2-ef14-1271-9d85-09cd19f61665.png">
この「カード」を選択します。

サイズを指定せずに表示すると、現在表示しているウィンドウの幅に合わせてくれます。
<img width="1047" alt="filemaker16card10.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/6b13fe3f-e8aa-a397-910f-2f467e0715f2.png">
バックのウィンドウが影になるので、どのウィンドウが開いているかがわかりやすいですね。



# リスト形式のレイアウト by リスト形式のカードウィンドウ

では、リスト形式のレイアウトに、同じレイアウトのカードウィンドウを表示するボタンを設置した場合はどうなるでしょうか？
<img width="1072" alt="filemaker16card7.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/7ee44137-51da-1b42-ec0c-4c71afc0654a.png">

デフォルトの設定のままで、綺麗に表示できています。
<img width="980" alt="filemaker16card8.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/c671c954-abdf-d84d-d8fb-604a92121ad4.png">


#フォーム形式のレイアウト by リスト形式のカードウィンドウ

フォーム形式のレイアウトに、リスト表示をするカードウィンドウを表示したいなど、違うレイアウト形式で表示したいケースが実際には多いのではないでしょうか。

まずは、ウィンドウのサイズをデフォルトのままの場合です。
<img width="1545" alt="filemaker16card1.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/45651264-53ea-da63-d9fe-577e8b4bb8ed.png">

一行文のみ。。。
<img width="1043" alt="filemaker16card2.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/419bf819-611e-8a88-6091-a64a4496a638.png">
カードウィンドウに表示するのはリスト形式のレイアウトなのに、1件分しか表示されていません。
データは、複数件あるので、リストとして表示させるには、やはり高さを指定しないといけないですね。

おおよそのサイズで高さを指定してみました。
<img width="518" alt="filemaker16card4.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/3c9a9da6-c013-bbcc-727c-c678ab683cf6.png">

では、表示してみます。
<img width="1057" alt="filemaker16card3.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/073a8e48-5410-1aab-0c08-24492d3e4c8a.png">
複数件分の高さが確保されましたね。

さらにレコード数を多くしてみます。
<img width="532" alt="filemaker16card5.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/7ad07deb-8090-297c-702b-5ca614323572.png">

カードウィンドウでは、スクロールバーが表示されますね。
<img width="1055" alt="filemaker16card6.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/b8d8f488-380b-49f7-e6f1-3947559aca03.png">


「カード」ウィンドウのいいところは、ウィンドウを強調することで、ユーザに「今やっている作業に集中させる」ところです。
画一的なウィンドウが複数表示されている状態よりも、わかりやすいです。

気をつけないといけないのは、リスト表示する際は、サイズ（高さ）を意識するということでしょうか。

ちなみに、他のウィンドウは別の位置にマウスなどで動かせますが、カードウィンドウは動かせませんし、カードウィンドウを閉じない限り、後ろのレイアウトにも移動できません。
使い方を間違うと、後ろの画面と並列で入力できなくなって思わぬクレームになるので、注意が必要です。

ただ、カードウィンドウは、web入力でポップアップで出るものと同じような感じですので、ユーザの使い勝手はweb入力に慣れていると、そんなに違和感はないかもしれないですね。
Windows 10 > ディスクの空き容量がほとんどなくなる症状の対処 > 大型Update後にも注意

```txt:動作環境
Windows 10 Pro (64bit) Creators Update適用済
```

### 症状

Cドライブのフォルダ全部のプロパティ表示 (隠しフォルダを含む) : 25GB

エクスプローラーでの「デバイスとドライブ」における、Cドライブの使用容量: 90GB

大きな差がある。

この問題はCreators Update適用前の状態から存在していた。

### インデックスファイル

http://office-qa.com/win/win183.htm
を参考にWindows Searchのインデックスファイルを確認すると、Windows.edbファイル一つが37GBになっていた。

Windows Searchを無効にし、Windows.edbファイルを削除した。

## 別対応
(2017/05/12 追記)

Windows Searchを停止することによる他の問題の可能性が以下で指摘されています。
https://www.billionwallet.com/goods/windows10/win10_disable-index.html

上記のリンクを参考に、Windows Searchを有効にしたままで「インデックスを作成する対象」を何もない状態にして、様子を見ています。

(追記 2017/05/15)
**こちらの対応ではHDDの空き容量がほとんどなくなる症状が再発した**

### 大型Update後の注意
(追記: 2017/11/15)

Windows 10 Fall Creators Update (バージョン 1709)適用後、Windows Searchが無効から有効に変わっていた。
それにより、HDDの容量を食い尽くす症状が再発するようになった。

大型Update後には設定変更を再度しないといけないかもしれない。
macOS sierraでpython機械学習勉強環境を構築する

## 環境
OS sierra
HomeBrewインストール済み

## やったこと


### python3とパッケージのインストール
[この記事](http://qiita.com/spyc/items/73d1295f8b3dde3b49ca)に従ってpython3.6.1(2017/05/11時点では最新のため)とpipをインストール

pipでは下記のパッケージを導入

```
pip install numpy #行列取扱用
pip install scipy #なんかよく聞くから入れておいたあとで調べよう
pip install scikit-learn #機械学習用
pip install matplotlib #グラフ出力用
```
### pycharmでデバッグの設定
pycharm は[公式サイト](https://www.jetbrains.com/pycharm/download/#section=mac)からダウンロードしインストールしておく。
community editionなら無料だけど十分

preferenceメニュー内のProject Interpreterで「pyenvでインストールしたpython3.6.1のパス」っぽい選択肢ができているのでそれを選択しApplyボタンを押す
<img width="1007" alt="Preferences.png" src="https://qiita-image-store.s3.amazonaws.com/0/71579/4621284b-909e-850d-d739-3fe1bf54c678.png">

あとはブレークポイントを設置して、右上の虫ボタンを押せばデバッグ可能
<img width="330" alt="cp_ai_club_test_py_-_study_python_-____dev_study_python_.png" src="https://qiita-image-store.s3.amazonaws.com/0/71579/067ec35a-d4e3-789f-3789-8ad221ad114c.png">
Windows 10 Creators Update > link > Disk 100% usage対応

```txt:動作環境
Windows 10 Pro (64bit) Creators Update適用済
```

http://www.drivethelife.com/windows-10/windows-10-100-disk-usage-windows-10-creators-update.html

Creators Updateを適用してからDisk 100% usageの症状が発生するPCがある。

以下のリンク先情報で対応できるかどうか。
http://www.drivethelife.com/windows-10/windows-10-100-disk-usage-windows-10-creators-update.html
gvmでGoをインストールする時はバイナリからがオススメ

# gvmとは

https://github.com/moovweb/gvm
Goのバージョン管理ツール。
nodeでいうnodebrewやnvmみたいなものです。
ubuntuでaptでGoをインストールすると少し古いバージョンのものが入るので、バージョンを指定してインストールしたい時に便利です。

# インストール

## 環境

Ubuntu 16.04LTS

## 依存ライブラリ

`sudo apt install curl git mercurial make binutils bison gcc build-essential`

## gvmのインストール

`bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)`

# 使い方

```
Usage: gvm install [version] [options]
    -s,  --source=SOURCE      Install Go from specified source.
    -n,  --name=NAME          Override the default name for this version.
    -pb, --with-protobuf      Install Go protocol buffers.
    -b,  --with-build-tools   Install package build tools.
    -B,  --binary             Only install from binary.
         --prefer-binary      Attempt a binary install, falling back to source.
    -h,  --help               Display this message.
```

## ソースからインストール

`gvm install go1.4`

### 注意点

バージョン1.5以上をインストールする際には、Goの1.4が必要になります。

以下、1.5以上のインストール方法（公式より）

```
gvm install go1.4 -B
gvm use 1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.5
```

## バイナリからインストール

上記の方法でソースからインストールする場合、1.4のインストールやスペックの低いPCだとコンパイルに時間がかかったりと色々と面倒なので、バイナリからインストールします。

`gvm install go1.8 -B`

`-B` のオプションを付けるだけです。
Windows 10 Creators Update > コントロールパネルを開く > Win + Pause | Backspaceキー

```txt:動作環境
Windows 10 Pro (64bit) Creators Update適用済
```

Creators Updateを適用してから、スタートメニューの右クリックで「コントロールパネル」の選択がなくなった。
さようなら「コントロールパネル」。

ショートカットキーでは以下の組合わせでコントロールパネルが開くようだ。

1. Win + Pause
2. Backspaceキー

参考: https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414507124


Windows 10 Creators Update以降は、基本的には「設定」を使えということだろうか。
Visual Studio / WPF > コントロール > Image > 画像が見えない > Resourceとしてファイルを追加する | Ctrl+vでファイルを追加する

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

10 RadioButton、Picker、Image和ProgressBar控件
https://www.youtube.com/watch?v=sDRsJCd_BOA&t=363s&list=WL&index=30

### 10:00あたり

Imageコントロールを使った例。
Sourceに画像ファイルを指定するようだ。

エクスプローラの画像をキャプチャして、使ってみた。

```xml:xaml
// 中略 //
        <Image Source="work.png" HorizontalAlignment="Left" Height="149" Margin="57,79,0,0" VerticalAlignment="Top" Width="184"/>
// 中略 //
```

デザイナ上では画像が見えている。
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8cb9522f-abbe-9bdf-ccee-4fe8100fea67.png)

実行すると画像が見えない。
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/de13e3ca-be9b-93da-65bb-037e083caf62.png)

jpg画像でも見えない。

### Resourceとして追加する

参考: [Windows GUIプログラミング入門8 画像、ボタン > Image](http://qiita.com/Kosen-amai/items/c06f4c89f636b781795a#-image)

上記を参考に「リソースの追加」としてwork.pngを追加しました。
ImageのSourceにwork.pngを指定すると見えるようになりました。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/173d69f5-6e18-adea-ed7f-82dc908403f1.png)

### Ctrl+vで追加する
(追記 2017/05/12)

YouTubeの10:55あたりで画像ファイルをCtrl+cした後に、ソリューションエクスプローラのプロジェクト内において、Ctrl+vしているようだ。
こうすることでも、画像ファイルをリソースに追加できるようだ。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3e88b6a7-51b0-2b70-bd08-68f4309e9009.png)

実行例
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3d386090-8f6e-d582-8e0b-aaee74b71047.png)

こちらの方法にて、imgというフォルダを作り、その下に画像ファイルを置く例も紹介されている。
Visual Studio / WPF > difference > DateTime.Today | DateTime.Now > 時刻があるかどうか

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

10 RadioButton、Picker、Image和ProgressBar控件
https://www.youtube.com/watch?v=sDRsJCd_BOA&t=363s&list=WL&index=30

### 9:15あたり
`DateTime.Today`と`DateTime.Now`の違いを紹介している。

DateTime.Today
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/0cd2ecb3-dd1b-4c62-5a13-198704184448.png)

DateTime.Now
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3f1e64b7-5bb0-386c-1b37-0df2451e9ead.png)
Visual Studio / WPF > 10 RadioButton、Picker、Image和ProgressBar控件 > DateTime? dl = DP_deadline.SelectedDate; | DateTime.Today | DateTime.Now | DateTime.UtcNow | DateTime.Now.ToShotDateString(); | DateTime.Now.ToShortTimeString()

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

10 RadioButton、Picker、Image和ProgressBar控件
https://www.youtube.com/watch?v=sDRsJCd_BOA&t=363s&list=WL&index=30

### 5:49あたり
DatePickerを使って、DateTime型変数に代入している。
初期状態はnullになるため、DateTime型はNullableとしている。

以下のように試してみた。

```MainWinxow.xaml.cs
//省略//
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DateTime? dl = DP_deadline.SelectedDate;
            if (dl == null)
            {
                MessageBox.Show("Not selected");
            } else
            {
                MessageBox.Show(dl.ToString());
            }
        }
//省略//
```

未選択
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/ae513666-04d1-6744-8286-2020cd476f4d.png)

選択後
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6de7f850-f27c-9865-e659-c9bba88812b6.png)


### 7:28あたり

`DateTime.Today`という値をDatePickerのSelectedDateに代入している。

他にも`DateTime.Now`と`DateTime.UtcNow`というのが見つかった。

### 8:20あたり
`DateTime.Now`に対してメソッド`ToShotDateString()`というのが見えた。
他にも`ToShortTimeString()`というのもあるようだ。

ToShotDateString()
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/951161ab-0027-06cd-51fa-6fa3d6e1587a.png)

ToShortTimeString()
![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/55b943a6-e587-5f1a-db26-68b87196682f.png)
【小ネタ】RPGの基本ステータスの変数名を決めた

# 調査

まず調査。主に英語版と日本語版を展開しているゲーム。
ざっくり調べたので抜けや誤りはお許し下さい。

||HP的な|MP的な|ちから|かしこさ|すばやさ|たいりょく|うんのよさ|その他|
|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|D&D|HP|-|Strength|知力:Intelligence/判断力:Wisdom|Dexterity|Constitution|-|魅力:Charisma, 防御:Armor Class|
|Wizardry|HP|MP|STRENGTH|I.Q.|AGILITY|VITALITY|LUCK|信仰心: PIETY|
|Ultima1|HP|-|Strength|Intelligence/Wisdom|Agility|Stamina|-|Charisma|
|Ultima Online|HP|Mana|STR|INT|DEX|Stamina|LUCK||
|Dragon Warrier|HP|MP|Strength|Wisdom|Agility|(Vitality)|Luck|(みのまもり: Resilience)|
|FF1|HP|MP|STR|INT|AGL|STA|LCK|ACC: 命中 EVA: 回避|
|FF6|HP|MP|Vigor(リメイクだとStrength?)|-|Speed|Stamina|Luck|かいひ: Evasion|
|FF7|HP|MP|Strength|-|Dexterity|Vitality|Luck|せいしん: Spirit|
|Fire Emblem|HP|MP|Str|(技:Skill)|Spd|-|Luck|防: Def 魔防: Res|
|Persona|HP|SP|STR|(技:TEC)|AGI|VIT|LUC||
|Persona4|HP|SP|St|-|Ag|En|Lu|(魔: Ma)|
|Tactics Ogre|HP|MP|STR|INT|AGI|VIT|LUK|精神: MEN, 器用: DEX|
|Chrono Trigger|HP|MP|PWR.|-|SPD.|STAM.|-|めいちゅう: HIT, かいひ: EV.|
|Dark Soul3|HP|FP|筋力:Strength/強靭度:Poise|理力:Intelligence/技量:Dexterity/集中力:Attunement|-|持久力:Vitality/スタミナ:Stamina/生命力:Vigor/|Luck|信仰:Faith|
|Fightng Fantasy|(Stamina)|-|-|(技術点:Skill)|-|Stamina|Luck||



# まとめ

## HP的な
だいたいHit PointだがHealth PointやHeart Pointの略の場合もあり。
とりあえず元祖のD&Dから引き継がれるhpが安定のよう。
(D&DではHP0以下の値で気絶状態と即死状態がある)

## MP的な
Magic Point、Magic Power, Magical Power, Mana Point
ゲームによって様々。とりあえずmp。

## ちから
筋力を表すstrengthが一般的。

## かしこさ
知性を表すintelligence。
次点で実践的な判断力のwisdom。
かしこさのパラメータをもたないゲームでは代わりに器用さでdexterity, 技量のskill, 技巧さのtechniqueなど。

## すばやさ
敏捷さのagility, 速度のspeedあたりを好みで。


## たいりょく
生命力的な意味のvitality。持久力的なstaminaあたり。

## うんのよさ
luck. 三文字のときはLUK, LCK, LUC

## その他

|英語|意味|
|:--|:--|
|accuracy|命中|
|evasion|回避|
|charisma|魅力|
|resilience|回復力(弾力のイメージ)|
|faith|信仰心(神や宗教への意味合い)|
|piety|信仰心(献身的な意味合い)|
|spirit|精神力(魂、霊的な意味合い)|
|mind|精神力(意思、思考的な意味合い)|
|mentality|精神力({肉体と逆の意味で}心を表すような意味合い)|

# 感想/補足
・(調査した範囲では)基本的には元祖のD&Dからの影響、流れを受けている。
・Attack, Defenceは調査するまでもなく共通で使われていた。
・内面や精神を表す言葉は多いので慎重に決めたほうが良さげ。
・変数を三文字省略で持つとstr, intの時点で挫折する(重要)
Visual Studio / WPF > IDE > 新しいプロジェクト > .NET Frameworkのバージョンを選択する

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

10 RadioButton、Picker、Image和ProgressBar控件
https://www.youtube.com/watch?v=sDRsJCd_BOA&t=363s&list=WL&index=30

4:22あたり
.NET Frameworkのバージョン選択画面があった。

どこにあるか不明であったが、「新しいプロジェクト」のウィンドウで選択が出来るようだ。

自分の環境では2.0から4.6.1までが選択可能になっている。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f44fffe4-56a4-6b08-2f8d-b1dd5326e48a.png)
技術英語 > No blind zone design provides [end-to-end] sensing to eliminate gaps in detection

EZ-SCREEN LS Safety Light Screen
Simple, Rugged Safety Light Curtains: LS Series
https://www.bannerengineering.com/us/en/products/machine-safety/safety-light-curtains/simple-rugged-safety-light-curtains-ls-series.html

> No blind zone design provides **end-to-end** sensing to eliminate gaps in detection

意訳 「死角ゼロの設計により、検知するギャップを取り除いた端から端までのセンシングを可能にしている。」

<hr>
電子回路ではRail-to-Railという用語がある。
https://www.maximintegrated.com/jp/app-notes/index.mvp/id/4428

<hr>
http://qiita.com/7of9/items/a1b2dbbd110db13ceb85
> from coast to coast
from generation to generation
from country to country
容量の少ないSSDへのクローン

備忘録。

ありがちな状況だが、たとえば、HDD は500GBだが、SSD は240GBしかない、みたいな状況で、HDD → SSD へ内容をまるごとコピーしたい場合。

次の手順で行う。

1. HDD のパーティション構成を整理して、コピー先の SSD の容量(例:240GB)以内で収まるようにする。
2. sudo dd if=/dev/sda of=/dev/sdc bs=16M (HDD が /dev/sda, SSD が /dev/sdc にあると仮定。最後は /dev/sdc の容量不足エラーで終わるが気にしない）
3. SSD に対して、testdisk コマンドを使って、パーティションテーブルを修復

dd するだけだと、パーティションテーブルが正しくないため、GParted でパーティションテーブルが認識されない。

実際にこれでうまく行ったときは、本当に感動した。
しかし、当たり前の話だが、セクタ単位で物理的にコピーを取ると、本当にディスクのクローンって作れてしまうのね…。
perlで配列の順番をばらばらにする

#意外となかったようでしたので

```perl:test.pl
#!/usr/bin/perl
use strict;

my @list=split(/,/,"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20");

srand;
my %temp;
foreach(@list) {
	$temp{$_}=rand;
}

my @newlist;

foreach(keys %temp) {
	push(@newlist, $_);
}

foreach(@newlist) {
	print "$_\n";
}
```

一度ハッシュのキーに入れてしまうと、ばらばらになるんですよね。

##せっかく乱数を使ってるので
```perl:test.pl
#!/usr/bin/perl
use strict;

my @list=split(/,/,"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20");

srand;
my %temp;
foreach(@list) {
	$temp{$_}=rand*10000;
}

my @newlist;

foreach(sort { $temp{$a} <=> $temp{$b} }keys %temp) {
	push(@newlist, $_);
}

foreach(@newlist) {
	print "$_\n";
}
```
こっちのがばらばらの精度が高いでしょう。
テキストマイニング（メモ用）

テキストマイニングに関するメモ。

大量のテキストデータを自然言語処理によって単語やフレーズに分割
⇒以前は自然言語が十分発達しておらず、分割が困難だった。

以下の3つの機能がある。　
###＜情報の抽出＞
テキストデータからノイズを除去し、マイニングに必要な情報を取り出す
####①形態素解析
　　記録した辞書を用いて単語を形態素ごとに抽出
　　辞書は随時更新する必要がある。

####②同義語
　　同義語辞書の作成・利用により表記のゆらぎを吸収。
　　データを見ながら同義語かどうかを判断。
　ex)評価が「高い」= 評価が「良い」
　　 値段が「高い」≠ 評価が「良い」

####③ワードパターン
　　近傍に出現する形態素を抽出することで、疑問形や否定形、表現のゆれを抽出する。
　ex)「ありますか？」=「あるか？」
　　　⇒動詞　＋　助動詞　＋　記号
　
####④係り受け解析
　　形態素を文節にまとめ、文節間の主述関係や修飾関係を判定。

###＜マイニング＞
抽出された概念の集合から得たい情報に合わせた新しい情報や知見を得る
####・変数間の分析
　　単語の共起性から関連度を計算
####・サンプル間の分析
　　テキストデータを似通ったグループわける。
####・キーワード分析
　　キーワードが使われる文脈を分析
　　⇒トピックモデルに似ている？？
####・多変量解析
　　
###＜解析結果の可視化＞
解析結果の理解や考察の手助けにする
GitHub Pages の date: フィールドをコミット時に書き換える

[GitHub Pages](https://pages.github.com/) の更新日をあらわすフィールド date: を、コミット時に書き換える pre-commit hook について[Stack overflow に投稿したスクリプト](https://stackoverflow.com/questions/14978474/how-to-show-the-modification-date-of-a-file-in-jekyll/33721446#33721446)にいくらか反応があったので、こちらにアップしてみます。.git/hooks/pre-commit に置いて使います。

```bash:pre-commit
#!/bin/sh
# Contents of .git/hooks/pre-commit

git diff --cached --name-status | grep "^M" | while read a b; do
  cat $b | sed "/---.*/,/---.*/s/^date:.*$/date: $(date -u "+%Y-%m-%d %T %Z")/" > tmp
  mv tmp $b
  git add $b
done
```

ちなみに、私は date: フィールドは記事作成時にして、更新日は update: フィールドとしています。[最終更新日の表示](https://sekika.github.io/2015/11/18/last-update/)に書きました。

他にも、GitHub Pages 構築に関するいくつかの細々とした記録を[こちら](https://sekika.github.io/tags/jekyll/index.html)に書いています。
[Unity]【チート対策】セキュアな数値のメモリ上での改ざんを防ぐ


# 結論

- XOR演算の特性（数値が反転する）を利用してセキュアな数値をマスクしてメモリ上に保持する
- セキュアな値はマスクされた値とseedをセットでメモリ上に持つ
- セキュアな値をバイナリで書き出す際もこれらをセットで保存する（int,uint,floatを直接書き出さない）
- 平文での保存はギルティ

# 概要
こちらの記事を参考にしています。
[チート対策について考えてみる（メモリ改竄編）
](http://qiita.com/Takezoh/items/991e431436d386b1347f)

- クライアントでのメモリエディタによるメモリの改ざんを防ぐ必要がある
- HPやお金などのセキュアな値をメモリ上で書き換えられると、不正にゲームをプレイされてしまうから
- セキュアな値は暗号化してメモリ上に持ちましょう

# 理論

- 整数値にXOR演算を使うと、seedが同じなら二回演算すると値がもとに戻る

```
0x0010 ^ 0x1234 => 0x1224  (4644)
0x0010 ^ 0x1234 ^ 0x1234 => 0x0010  (16)
```
- これを使って、セッタとゲッタの中で値にxorマスクを施すことによってメモリ上にセキュアな値を保存しなくて良い
- seedを値ごとにランダムに生成することによって、実質的にメモリ上から値を探すのは不可能になる

# 工夫

- 上記の記事では、floatのマスキングにポインタを使っていたが、unsafeを使いたくなかったのでBitConverterを利用してbyte配列に変換して保存することにした。
- チェックサムの計算はしていない。改ざんの検知は簡単だが、改ざんがあったときにどうするのかは完全にアプリケーション依存なので。


# コード
MITライセンスです。何かもっといい方法があればコメントを下さい。
[https://gist.github.com/keroxp/7b6b4ca6a45f4067e9c0079b2a7255b5](https://gist.github.com/keroxp/7b6b4ca6a45f4067e9c0079b2a7255b5)
## 使い方
```csharp
public class Player : MonoBehaviour {
   ISecureValue<uint> hp = SecureValues.UInt();
   ISecureValue<float> score = SecureValues.Float();
   void Awake() {
     hp.Value = 100;
     score.Value = 0;
   }
   public void OnDamaged() {
     hp.Value -= 1;
   }
   public void OnScore(float s) {
     score.Value += s;
   }
}
```
Charlestonのuserslist.xmlの構造定義


いいかげんやっておかないと。

# コンセプト

パースが面倒でアクセス性が悪いxmlでユーザーデータベースを管理している理由は

* テキスト形式であるためクラッシュに強く、壊れたレコード（＝ノード）だけを容易に削除・修正できる
* 試行データーの作成が容易である
* Charleston非実行時にテキストエディターで内容を容易に編集・加工出来る

という3点からです。

欠点は

* ユーザーのレコードの下に各生主の時の振る舞いが列挙されている点が不自然に感じる人も多いはず
* ユーザーのレコードの属性に、自分がリスナーの時の振る舞いが記述されている点も不自然に感じる（以下略）

# 基本形

引用符の例

* [] 必要がある時のみ記述される属性と属性値（値が逆の場合は属性は記述しない)
* {} 属性値が必要で可変なもの


```xml:userslist.xml
<?xml version="1.0" encoding="UTF-8"?>
<root formatversion="4.0">
	<!-- 実名IDのユーザーの例 -->
    <user id="[ユーザーID]" type="id" [comment="sign"] [speech="no"]>
        <handle personality="{生主ID}" [lock="yes"] [known="yes"] [color="#{16進htmlcolor値}"]>{ハンドル名}</handle>
        <note>[{このユーザーについての何か}]</note>
    </user>
	<!-- 匿名(184)ユーザーの例 -->
    <user id="{184ID}" type="184" expire="{yyyy/mm/dd}">
        <handle personality="{生主ID}" [lock="yes"] [known="yes"] [color="#{16進htmlcolor値}"]>{184IDの先頭8文字またはハンドル名}</handle>
        <note>[{このユーザーについての何か}]</note>
    </user>
</root>
```

# 各ノードの属性と子ノードの説明

## `root`ノード

`root`ノードは子に複数の`user`ノードを持つ。

### 属性(attributes)

* `formatversion`属性
	* userslist XML構造体のバージョン。現在4.0

### 子ノード

* `user`ノード
	* 1ユーザー1ノード必要（正確には実名ノードと匿名ノードの2ノード以上の可能性はある)

## `user`ノード

`user`ノードは一人のニコ生IDに対し1ノード（匿名の場合は184ID毎に1ノード）生成され、どの生主の時に会ったかの情報が（`handle`ノードで）追加されていきます。

### 属性(attributes)

* `id`属性
	* 値はコメントサーバーから返されるUserIDです。
	* nicknameがキャッシュされないのは、ユーザーが任意のタイミングで変更可能なので放送へ接続時に毎回ニコ生に接続して取得するためです
* `type`属性
	* 値は実名アカウントの時が`id`、匿名アカウントの時が`184`になり、この属性で実名ユーザーか匿名ユーザーかを区別するために使います

#### ユーザーが生主の時にのみ記述される属性

* `comment`属性（ユーザーが生主の時かつ実名でコメントした時のみ付与される属性です）
	* 値が`yes`の時、このユーザーの放送に実名でコメントします
* `speech`属性（ユーザーが生主の時かつ読み上げが必要な時のみ付与される属性です）
	* 値が`yes`の時、このユーザーの放送を読み上げます

#### ユーザーが匿名の時にのみ記述される属性

* `expire`(`type`=184の時のみ)
	* ニコ生は毎週木曜朝のメンテナンスで184IDがリセットされるため、このノードの有効期限を記述し、当該日時8:00を過ぎた場合当該ノードを削除するための目印

### 子ノード

* `handle`ノード
	* このユーザーのコメントを放送で取得すると参照され、無ければ記述されます
	* 一つの`user`ノードの下に複数の`handle`ノードが記述されていきます
* `note`ノード
	* このユーザーについて、CharlestonのUser Inspectorでメモを記述するためのノードです
	* 内容をコメントビュアーに表示するだけでこの値を元に振るまいが変わることはありません

## `handle`ノード

`handle`ノードはそのユーザーが一人の放送主に対してコメントした際に記述され、ハンドル名、背景色などが記録されていきます。

### 属性(attributes)

* `personality`
	* 値にこのユーザーがコメントをした生主のIDが記述される
	* 別な生主のところでコメントした際は`handle`ノードが別途記述・追加されていく
* `lock`
	* ハンドル、背景色をコメント末尾の@や#コマンドで変更されたくない場合記述する
* `known`
	* Charlestonは初見でもユーザーIDからニックネームを取得するので、うっかり名前を呼ばないようにグレーで名前を表示するためのフラグ
	* ハンドル名を貰ったり、UserInspectorやコンテキストから設定すると名前が100%ブラックに変わる
* `color`
	* 該当ユーザーのコメントに背景色を付けるためのデーター
	* 内容は16進2桁×3（R/G/B)の６ケタのいわゆるhtml color
	* Charleston 0.5からはコメント末尾の#コマンドで背景色を指定可能にする予定

### コンテンツ

コンテンツにはまずユーザー名(nickname)が記述され、UserInspectorでの書き替えやコメント末尾の「@ハンドル名」コマンドによってハンドル名に書き替えられる。ハンドル名に書き替えが行われた際に`known`="yes"アトリビュートが記述される。

## `note`ノード

`note`ノードはCharlestonユーザーに対し、注記を記述し、コメントの際に表示できる様にしたノードである

### コンテンツ

コンテンツにはUserInspectorのメモ欄に記述された内容が表示される
*`note`ノードはコンテンツが記述された時だけ出現しても不具合は無いかも知れない*
if constexprを使うとき、特定条件時にコンパイルを失敗させる

C++は興味深い、でも難しい。タイトルの件について昨日悩み、詳しい人に相談し、解決したので、まとめました。

**（2017/05/12追記）** 同じ話題について、EzoeRyouさんの解説が出ています→ [constexpr ifの落とし穴](https://cpplover.blogspot.jp/2017/05/constexpr-if.html)

## 注意書き
※ C++はお勉強中（数週間程度しか書いたことのない、本当にビギナーです）なので、用語の使い方や意味の説明について、正確/厳密ではない可能性が高いです。
もしどこか間違っていたらごめんなさい（できることなら、コメント欄などでご指摘いただけると嬉しいです）。

## やりたいこと
C++17より導入されるはずのif constexpr文を使うと、テンプレートのインスタンス化時（コンパイル時）に、どの実装を生成するかを簡潔に書けるようになる。

```cpp
template<class T>
int f() {
    if constexpr (std::is_same<T, int>{}) {
        // Tがintの時の実装
        // ...
    } else if constexpr (std::is_same<T, float>{}) {
        // Tがfloatの時の実装
        // ...
    }
}
```

ここで、もし`T`が`int`or`float`でない時はコンパイルを失敗させたいとする。つまり

- `T`に渡せる型は任意ではなく限られており、適切な型によってインスタンス化されていなかったなら、コンパイルエラーにしたい
- コンパイルエラー時には、適切なエラーメッセージを出せると親切

これらの目標を満たす実装方法を調べた。

## あまり良くなさそうな実装
### 上手くいかない
else節に、常に失敗するstatic_assertを置けば良いのではという発想で実装してみた。
一見するとなんとなく動きそうだが、上手くいかない。

```cpp
template<class T>
int f() {
    if constexpr (std::is_same<T, int>{}) {
        // ...
    } else if constexpr (std::is_same<T, float>{}) {
        // ...
    } else {
        static_assert(false, "Bad T!!!!");
    }
}
```
常にコンパイルエラーになってしまう。

### 動くが、やや冗長
if constexprを書き連ねる前にstatic_assertでガードする。

```cpp
template<class T>
int f() {
    static_assert(std::is_same<T, int>{} || std::is_same<T, float>{}, "Bad T!!!!")
    if constexpr (std::is_same<T, int>{}) {
        // ...
    } else if constexpr (std::is_same<T, float>{}) {
        // ...
    }
}
```
この実装は期待通りの振る舞いをしてくれる。

ただしifの条件式がいくつもある場合はstatic_assertが膨れてしまうという問題がある。条件式の記述が実質的に2重になっている点も、DRYという観点から好ましくはない。

## 本筋っぽい実装
C++エキスパートに教わったやり方。まず次のようなエイリアスを定義しておく。

```cpp
template <typename T>
constexpr bool false_v = false;
```

`false_v`を利用すると、`f`は次のように書ける。

```cpp
template<class T>
int f() {
    if constexpr (std::is_same<T, int>{}) {
        // ...
    } else if constexpr (std::is_same<T, float>{}) {
        // ...
    } else {
        static_assert(false_v<T>, "Bad T!!!!");
    }
}
```
意図的に`T`を`false_v`に渡すことが重要らしい。

コンパイル例: https://wandbox.org/permlink/u7x2kxBmYN1zmYEE

## 解釈
上記実装で何が起きているかのおおざっぱな理解。

### static_assertの評価タイミング
テンプレート引数に依存しないstatic_assertは、テンプレートのインスタンス化前にチェックされる。つまり `static_assert(false)` を関数内にそのまま書くのは実質的に

```cpp
template<class T>
int f() {
    static_assert(false);
}
```
こう書いてしまっているのと変わらない。もちろん常にstatic_assertで落ちてしまう。

### static_assertの評価タイミングを期待通りにするには？
今回の例でいうと、`static_assert`の評価を、 **テンプレートのインスタンス化後まで遅延させる** と「そのブロックがインスタンス化された時にのみコンパイルエラーにする」が実現できる。

具体的なやり方としては、`f`のテンプレート引数`T`が決まらないと評価されないような式を、static_assertに入れてやればよい（ので前述の実装になる）。`false_v`が使いもしないテンプレート引数を取るのは、依存関係を作るという意味がある。

## まとめ
if constexpr文はあくまでテンプレートのインスタンス化をコントロールするものであって、ある部分のみコンパイル時に評価する類のものではないらしい。微妙なことをやろうとする場合には若干注意が必要そうだった。

## 参考
- https://github.com/EzoeRyou/cpp17book/blob/master/028-cpp17-core-constexpr-if.md
- [constexpr ifの落とし穴](https://cpplover.blogspot.jp/2017/05/constexpr-if.html)
変数中の~を展開する

```bash
tilde="~"
echo $tilde #展開されない
echo ${tilde/"~"/~} #ホームディレクトリのパスに展開される
```
悩んだのでメモ。
シェルスクリプト弱者なのでもっといい方法あれば教えてください。

##追記
```bash
echo `eval echo $tilde`
```
でよかった
GitHubでtagをつけてsha256ハッシュを取得

* タグを打ってリリース

```
$ cd {レポジトリのディレクトリ}
$ git tag -a {タグ名} -m "記述" ハッシュ
$ git show {タグ名}
$ git push origin --tags
```
* tar.gzファイルをダウンロードしてsha256ハッシュを取得

```
$ wget wget https://github.com/{ユーザ名}/{レポジトリ名}/tarball/{タグ名} 
$ shasum -a 256 {タグ名}.tar.gz 
```

* タグを削除する

```
$ git tag -d {タグ名}
$ git push origin :{タグ名}
```
Ruby で mixin したモジュールを削除する gem をつくった

※この記事は[ここから](http://secret-garden.hatenablog.com/entry/2017/02/27/000027)の転載になります。

Ruby でメタプログラミングをやっているとどうしても『mixin したモジュールを削除したい』という欲求にかられるのでつくりました。

## インストール

```shell
$ gem install unmixer
```

## 使い方

```ruby
require "unmixer"

# Unmixer は refinements を使用してるので using して使用します
using Unmixer

module M1; end
module M2; end
module M3; end

class X
	include M1
	prepend M2
end

p X.ancestors
# => [M2, X, M1, Object, Kernel, BasicObject]

# include したモジュールを削除
X.instance_eval { uninclude M1 }
p X.ancestors
# => [M2, X, Object, Kernel, BasicObject]

# include したモジュール以外は削除できない
X.instance_eval { uninclude M2 }
p X.ancestors
# => [M2, X, Object, Kernel, BasicObject]


# prepend したモジュールを削除
X.instance_eval { unprepend M2 }
p X.ancestors
# => [X, Object, Kernel, BasicObject]


X.extend M3
p X.singleton_class.ancestors
# => [#<Class:X>, M3, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]

# extend したモジュールを削除
X.unextend M3
p X.singleton_class.ancestors
# => [#<Class:X>, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]


# #extend にブロックを渡した場合、ブロック内でのみ mixin される
X.extend M1 do
	# mixin only in block.
	p X.singleton_class.ancestors
	# => [#<Class:X>, M1, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
	p X.singleton_class.ancestors.include? M1
	# => true
end
p X.singleton_class.ancestors
# => [#<Class:X>, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
p X.singleton_class.ancestors.include? M1
# => false
```

元々は [uninclude](https://github.com/rosylilly/uninclude) という gem があったのですが、こちらは比較的新しい Ruby では動作しなかったのでそれを焼き直した形になります。

* [uninclude gem v1.0.0 - 鳩舎](http://rosylilly.hatenablog.com/entry/2013/03/18/052129)

現状は、Ruby 2.1 〜2.4 であれば動作すると思います。  
ただ、実装が結構無理なりなので今後のサポートや意図しない動作が発生する可能性はあります。  
今回初めて Ruby で C拡張のコードを書いたんですが、やはり C言語つらいですね…。  
最初は C 側で全部を実装していたんですが、途中でつらくなったので C 側は最小限の処理のみ実装して結局 Ruby 側でガシガシ実装しました。  
多少不安なところはあるんですが、やはり mixin を削除できる機能はかなり便利です。  
言語仕様側で導入されないかなあ…。
MS-CでVGA(mode12hとmode13h)にビットマップを読み込ませる方法

Microsoft C ver 6.0でPC DOSのパソコンのVGAのMode 12h とMode 13h
にビットマップデータを読み込ませたいのですが、古い環境なので情報が入手できないで困っています。

mode 12h: 640x480 color 16
mode 13h: 320x200 color 256
です。

こちらの調べではDOS/Vの仕様では日本語対応の関係で$DISP.SYSと$FONT.SYSの２つのデバイスドライバが介入していて、BIOSを日本語拡張していると思われます。
この処理の為、DOS/V(日本語モード）とPC DOS(英語モード）ではVGAの扱いが異なっているようなんですが、MS-C ver 6.0で上記のVGAでのBitmapの読み込ませ方法が分かっていません。

DOS/V(日本語)mode及びPC DOS(英語）modeでの上記Screen modeで画像を読ませるコードを教えて下さい。

OSのVersionはDOS/V 2000です。

以上、宜しくお願いします。
SmartyのインストールからHelloWorldまで

PHPのテンプレートエンジンSmartyをインストールして、HelloWorldをブラウザ上に表示するまでの方法を記述します。
Smartyの基本的な使い方は以下の記事を参考にしてください。

[これだけは知っておきたい！Smartyでできること]
(http://qiita.com/sanotyan1202/items/1f49f407f310f2e493ff)


[環境]
Windows10
PHP 5.6.20
Smarty 3.1.30

## 1. Smartyのインストール
Smartyを公式サイトからダウンロードします。  

http://www.smarty.net/docsv2/ja/

ダウンロードしたファイルを解凍したら、php/includes/に配置します。
(includesが存在しなければ作成します。)

```
C:/php/includes/Smarty
```

次にphp.iniのinclude_pathのコメントを外して有効にします。

```:php.ini
include_path = ".;c:¥php¥includes"
```

phpinfo関数で有効になったことを確認できます。

```php:info.php
<?php
phpinfo();
```
ブラウザからアクセスして、include_pathがphp\includesとなっていればOKです。

<img width="790" alt="無題.png" src="https://qiita-image-store.s3.amazonaws.com/0/130099/6cac32b5-fb51-0573-288b-f046936bb2bb.png">

## 2. ディレクトリを構成
実際にSmartyを利用するアプリのディレクトリを構成します。  
必須となるのはSmartyのテンプレートを格納するディレクトリと、テンプレートのコンパイル結果を格納するディレクトリです。
ここではそれぞれtemplates、templates_cとします。

```
プロジェクト名/smarty/templates
プロジェクト名/smarty/templates_c
```

次にドキュメントルートとなるディレクトリを作成します。  
ここではpublicとします。

```
プロジェクト名/public
```

## 3. テンプレートを作成する
templates/にhello.tplファイルを作成します。

```html:templates/hello.tpl
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello World!</title>
  </head>
  <body>
    Hello {$name}!
  </body>
</html>
```
{$name}にPHPファイルから渡されたデータが出力されます。

## 4. phpファイルからテンプレートを呼び出す

Smartyクラスを読み込んでテンプレートに渡したい値などを設定します。
  
```php:public/hello.php
<?php

// Smartyクラスを読み込む
require_once("Smarty/libs/Smarty.class.php");

// Smartyのインスタンスを生成
$smarty = new Smarty();

// テンプレートディレクトリとコンパイルディレクトリを読み込む
$smarty->template_dir = "../smarty/templates/";
$smarty->compile_dir = "../smarty/templates_c/";

// assignメソッドを使ってテンプレートに渡す値を設定
$smarty->assign("name", "World");

// テンプレートを表示する
$smarty->display("hello.tpl");
```

## 5. サーバーを起動する
publicディレクトリでビルトインサーバーを起動してブラウザからアクセスします。

```bash:プロジェクト名/public/
$ php -S localhost:9000
```
サーバーが立ち上がったら、「localhost:9000/hello.php」にアクセスします。