OmniAICreator/Qiita-1.07M huggingface dataset:
pandasでfor文を使う場合の注意

[PythonコードをNumbaで高速化したときのメモ](http://qiita.com/toyolab/items/b5d95bd38b3c7c66b510)
の続きというか、補足です。

pandasは時系列データの処理に便利なのですが、そのままfor文を使うと極端に遅くなります。

````py
import numpy as np
import pandas as pd
dataM1 = pd.read_csv('DAT_ASCII_EURUSD_M1_2015.csv', sep=';',
                     names=('Time','Open','High','Low','Close', ''),
                     index_col='Time', parse_dates=True)

def LWMA(s, ma_period):
    y = pd.Series(0.0, index=s.index)
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += s[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return y

%time MA = LWMA(dataM1['Close'], 10)
````
    Wall time: 3min 10s

データ数が37万個と多いのですが、10サンプルの移動平均で3分かかるのは厳しいです。期間をもっと長くすると、10分以上かかることもあります。（Core i7-6700 3.4GHz）

[前回の記事](http://qiita.com/toyolab/items/b5d95bd38b3c7c66b510)では、arrayに置き換えてNumbaを使って高速化してみましたが、実際、arrayにするだけでも高速になります。

````py
def LWMA1(s, ma_period):
    a = s.values
    y = np.zeros(len(a))
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += a[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return pd.Series(y, index=s.index)

%timeit MA = LWMA1(dataM1['Close'], 10)
````
    1 loop, best of 3: 1.92 s per loop

Numbaを使わなくても、pandasに比べると、100倍くらい速くなっています。

もちろんこの状態だと、Numbaを使うともっと速くなります。

````py
from numba import jit
@jit
def LWMA2(s, ma_period):
    a = s.values
    y = np.zeros(len(a))
    for i in range(len(y)):
        for j in range(ma_period):
            y[i] += a[i-j]*(ma_period-j)
        y[i] /= ma_period*(ma_period+1)/2
    return pd.Series(y, index=s.index)

%timeit MA = LWMA2(dataM1['Close'], 10)
````
    100 loops, best of 3: 5.31 ms per loop

pandasでfor文を使う場合でも、arrayに置き換えられるケース(indexが関係ないケース)であれば、そうすることが賢明です。pandasとうまくつきあうには、ちょっとしたコツが必要なようです。
[JAWS-UG CLI] ElastiCache #2 キャッシュクラスタへのアクセス確認 (Redis編)

ElastiCache上で稼動するRedisにEC2からtelnetでアクセスしてみます。

前提条件
========


EC2インスタンス
---------------

* EC2インスタンス(Amazon Linux)にec2-userユーザでログインできること。





0. 準備
=======




1. 事前作業
===========

## 1.1. EC2インスタンスへのログイン


## 1.2. エンドポイントの指定

```bash:コマンド(EC2インスタンス)
ECACHE_NODE_ENDPOINT=
```

## 1.3. telnetコマンドの確認

この手順ではtelnetコマンドが利用できる必要があります。

```bash:コマンド(EC2インスタンス):
which telnet
```

```text:結果(例):
      /usr/bin/telnet
```

存在しない場合は、インストールしてください。

```bash:コマンド(yumの場合):
sudo yum install telnet -y
```

2. Redisへのアクセス
====================

```bash:コマンド:
telnet ${ECACHE_NODE_ENDPOINT} 6379
```

```text:結果(例):
      Trying 172.31.12.39...
      Connected to test-cluster.xxxxxx.0001.usw2.cache.amazonaws.com.
      Escape character is '^]'.
```

```text:入力:
set a "hello"
```

```text:結果(例):
   +OK
```

```text:入力:
get a
```

```text:結果(例):
   $5
   hello
```

```text:入力:
get b
```

```text:結果(例):
   $-1
```

```text:入力:
quit
```

```text:結果(例):
   +OK
   Connection closed by foreign host.
```


# 3. EC2インスタンスからログアウト

```bash:コマンド:
exit
```

完了
====
ボタンが押されるのをブロックするクラス

ゲームのイントロダクション中とかに、説明中に押されたくないボタンとかがあります。

やりたかったのは、以下の2点。

- 説明中もゲーム側のロジックによってボタンのinteractableが切り替わってしまうことがあるので、Buttonのinteractableをいじらない。
- 説明中もゲーム側のロジックによってボタンの位置やサイズが変わることがあってもブロックし続ける。

実装としては、ButtonBlockerクラスがアルファ0のImageを持ってて、それでボタンをブロックしているだけです。

Update内で、ブロック先のポジションやサイズに追従するようになっています。

厳密に言うとUpdateのタイミングをちゃんと管理しないと、1frame分追従が遅れますが、手抜きでそこは考慮されていません。

```csharp
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ButtonBlocker : MonoBehaviour {
    public RectTransform target = null;

    private RectTransform rectTransform;
    private Image image;

	public void SetTarget( RectTransform rt ) {
        target = rt;
        if( rt != null ) { transform.SetParent( rt.parent ); }
    }

    public bool EnableBlock {
        get { return image.raycastTarget; }
        set { image.raycastTarget = value; }
    }

	void Awake () {
        rectTransform = GetComponent< RectTransform >();
        image = GetComponent< Image >();
        Debug.Assert( rectTransform != null );
        Debug.Assert( image != null );
	}
	
	void Update () {
        if( target != null )
        {
            rectTransform.rect.Set( target.rect.x, target.rect.y, target.rect.width, target.rect.height );
            rectTransform.sizeDelta = target.sizeDelta;
            rectTransform.localScale = target.localScale;
            rectTransform.localRotation = target.localRotation;
            rectTransform.localPosition = target.localPosition;
        }
	}
}
```

EnableBlock プロパティで、ブロックのon/offを切り替えることができます。

使い方は、テキトーにImageコンポーネントを持ったPrehabを作って

```csharp

blocker = Instantiate( buttonBlockerPrehab ).GetComponent< ButtonBlocker >();
RectTransform rect = targetObject.GetComponent< RectTransform >();
blocker.SetTarget( rect );
```

という感じです。
(PayPal) 複数のウェブサイトでそれぞれの自動復帰URLを設定する

PayPalのアカウント設定で自動復帰機能の設定項目があり、その中に自動復帰URLを設定することができます。
アカウントでの自動復帰URLはアカウント範囲のデフォルト復帰URLであり、ボタンのコードで復帰URLを指定していない場合はこのURLにリダイレクトされます。
もしボタンのコードで復帰URLを指定すると、アカウントの復帰URLが上書きされます。

各ボタンで別々の復帰URLを設定する方法はPayPalのインテグレーション方法より違いますので、下記を参考してください：

①アカウントでPayPalボタンを作成し、ウェブサイトに貼り付ける場合。
ボタン作成する際に、ステップ3で「顧客がチェックアウトを完了すると、このURLにリダイレクトされます。」のところで復帰URLを設定できます。

②HTML From形式でパラメータを指定して実装する場合。
HTMLのreturnフィールドで復帰URLを設定してください。
サンプルコード：
``` <input type="hidden" name="return" value="www.xxx.com">```
Returnフィールドの詳細は下記URLを参考してください。
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/

③エクスプレスチェックアウトのAPIを利用して、決済サービスを自分で開発する場合。
SetExpressCheckout APIのRETURNURLフィールドで復帰URLを設定してください。
RETURNURLフィールドの詳細は下記URLを参考してください。
https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
自分のウェブサイトの取引ステータスとPayPalの取引ステータスを同期する方法

マーチャントのウェブサイトの取引ステータスとPayPalの取引ステータスを同期するには、即時支払い通知(IPN)サービスを利用してください。
即時支払い通知(IPN)は、リアルタイムでの購入確認を処理するためのPayPalの決済APIです。IPNを使用して、ソフトウェアのダウンロード、ユーザーログイン、およびその他のPayPal対応のウェブサービスおよび通信を管理できます。IPNを使用すると、お客さまのサーバーに取引詳細を送信することによって、PayPal支払いをいつ受け取っても取引のステータスがいつ変更されても、業務の特定部分を自動的に処理できます。
通常はマーチャントのサイトでプログラム（IPNリスナー）を作成してIPNメッセージを解析して、サイト上の注文ステータス更新やほかの決済後の処理をします。
IPN機能の詳細とIPNリスナー作り方は下記のアドレスをご参考ください：
https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/
IPNリスナーサンプルコード
https://github.com/paypal/ipn-code-samples
IPN変数：
https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPalアカウントで支払いボタンを作成する方法

下記のURLにボタン作成方法が記載されています：
https://www.paypal.jp/jp/contents/support/introduction/web-payment-standard/


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
(PayPal) IPNのポストバックでINVALID検証結果の対応方法

質問:
IPNのポストバックでINVALIDの検証結果が復帰された、何か問題があるのでしょうか

回答:
IPNのポストバックでINVALIDの結果が復帰したら、基本的にポストバックで送られてきたIPNメッセージはPayPalが発送したIPNメッセージと不一致であることを意味しています。
その原因は、エンコーディングが不一致のケースは最も多いです。
マーチャントのサイト上のプログラムのエンコーディングはアカウント上のエンコーディングと不一致であれば、IPN検証結果も不一致になるはずです。

下記の手順でアカウントのエンコーディング設定を確認できます。
[PayPal](www.paypal.com)でログインし、イアカウント->個人設定->販売ツール　で、「PayPalボタンの言語コード化」をクリックする
または、下記URLにアクセスする：
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding
詳細オプション」ボタンをクリックする。
次の画面で表示されているエンコーディングはマーチャントのウェブサイトのエンコーディングと一致しなければなりません。
マーチャントのウェブサイトのエンコーディングはUTF-8が圧倒的に多いので、その画面でUTF-8を選択し、保存してから、IPNポストバックを再確認してみてください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal決済画面でバイヤー(買い手)の電話番号を必須項目に設定する方法

[PayPal](www.paypal.com)でログイン、個人設定->販売ツール->ウェブサイトの設定、「更新」をクリックする、
または下記のURLにアクセスする。
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-website-payments
「連絡先電話番号」の設定項目で、「オン(入力必須項目)」を選択してください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal決済ページの左上でロゴ画像を表示する方法

PayPal決済画面の左上の文字では、ページスタイルを設定することで、文字を画像に変更することができます。
ページスタイルの設定方法は下記でございます：
[PayPal](www.paypal.com)でログインすると、個人設定->販売ツール->支払いページのカスタマイズで更新をクリックします。
または、下記のURLにアクセスしてください：
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-page-styles
ページスタイル画面で登録をクリックして、編集画面で「ロゴ画像の URL」を設定して、保存をクリックしてください。
保存した後、前の画面でこのページスタイルを選択して「メインとして設定」をクリックしてください。

また、ウェブサイトペイメントスタンダードサービスを利用してHTML Formでパラメータを指定する場合、
「cpp_logo_image」パラメータで画像URLを設定しても可能です。
エクスプレスチェックアウトの場合はSetExpressCheckout APIで「LOGOIMG」パラメータを利用してください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
(PayPal)支払いデータ転送（PDT）を有効する方法、IDトークン（identity token）の取得方法。

[paypal](www.paypal.com)でログインして、下記のURLにアクセスする、
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-website-payments
まず「自動復帰」項目で「オン」を選択し、復帰URLを設定してください。
そして、「支払いデータ転送(オプション)」で「オン」を選択して、保存をクリックしてください。
保存した後、更新された画面で黄色の枠、または「支払いデータ転送(オプション)」のところでIDトークンが表示されます。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
(PayPal)決済金額はBuyer自分で入力するように設定する方法

PayPalの今すぐ購入ボタンでは、買い手自分で金額入力することは可能です。
このような今すぐ購入ボタンの作成手順は下記です。
①www.paypal.comでログインし、個人設定＞販売ツール＞PayPalボタン＞更新をクリックする。
　または下記URLにアクセスする：
　https://www.paypal.com/jp/cgi-bin/customerprofileweb?cmd=_button-management
②「保存したボタン」画面の右にある、「新しいボタンの作成」リンクをクリックする。
③「PayPalの支払いボタンを作成する」画面が表示され、ボタンタイプの選択で「今すぐ購入」を選択する。
具体的な作成方法は、今すぐ購入ボタンを作成する際、価格の項で空白のままでボタンを作成してください。
 ![ZeroAmountButton.png](https://qiita-image-store.s3.amazonaws.com/0/124793/0fbd1661-ab92-9ab1-cac0-5e94bc9c58d6.png)

この方法で作成したボタンは、Buyerのほうで金額を記載してもらうことは可能になります。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal Sandboxの使い方、テスト方法

Sandboxでテストするには、まずSandboxのアカウントを作成する必要があります。
下記の手順を参照してSandboxのアカウントを作成してください。
1. PayPal Developerを開き、[Log In]をクリックし、PayPalのアカウントでログインする。
2. ページ上部の[Dashboard]をクリックする。
3. ページの左に、[Sandbox]があり、そのすぐ下の[Accounts]をクリックし、テストアカウント一覧画面が表示される。
4. 青色の[Create Account]ボタンをクリックし、テストアカウント作成画面が表示される。
5. テストアカウント作成画面で、適当な内容を入力し、[Create Account]をクリックすると、テストアカウント一覧画面に戻り、作成されたアカウントが一覧に表示される。
（基本的に、Countryを選択して、Account typeを選択して、EmailとPasswordを指定します、ほかは全部デフォルトでいいです。Emailは仮のアドレスですので、存在しないアドレスでも大丈夫です。）

手順5で、Sellerアカウントを作成する場合、「Account type」で「Business」を選択してください、Buyerアカウントを作成する場合は「Personal」を選択してください。

その後のテスト方法はPayPalの導入方法によって違います。

- アカウントでPayPalボタンを作成し、ウェブサイトに貼り付ける場合。
SandboxのBusinessアカウントで、[Sandboxボタン作成URL](https://www.sandbox.paypal.com/tw/cgi-bin/customerprofileweb?cmd=_button-management)にログインし、本番環境と同じ方法で仮決済ボタンを作成してください。テストを行うときに、SandboxのPersonalアカウントで支払ってください。

- HTML From形式でパラメータを指定して実装する場合。
PayPalボタンのHTML Formの中に、下記修正は必要です：
actionのURLをSandboxのURLに変更し、businessパラメータをSandboxの「Business」アカウントのメールアドレスに変更します。
例：  

```
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="business" value="***@***.com">
```

- サードパーティーショッピングカートをご利用の場合。  
ショッピングカートのPayPal設定のところで、Sandboxに切り替わる設定項目があります、そこでSandboxに切り替えてください。
その後の対応方法はショッピングカートで設定しているPayPalサービスによって違います。
もしウェブサイトペイメントスタンダードを利用している場合、通常はアカウントメールアドレスの設定項目でSandboxの「Business」アカウントのメールアドレスを設定するだけでいいです。
もしエクスプレスチェックアウトを利用している場合は、アカウントのメールアドレスだけではなくて、
下記SandboxのAPI署名の確認方法を参考し、APIユーザー名、APIパスワード、API署名もショッピングカートで設定する必要があります。
SandboxのAPI署名の確認方法：
SandboxアカウントのAPI署名などは、[Sandboxアカウント一覧画面](https://developer.paypal.com/developer/accounts/)で確認できます。確認の箇所は、[Sandboxマニュアル](https://www.paypal.jp/jp/contents/support/introduction/sandbox/#new)で「API credentials」を検索して確認してください。
Sandboxアカウント一覧画面でbusinessのSandboxアカウントをクリックして、Profileリンクをクリックしたら、[API credentials]というタブがあります（Personalアカウントの場合はありません）。こちらのUsername、PasswordとSignatureをもともと本番アカウントのUsername、PasswordとSignatureを置き換えてください。

- エクスプレスチェックアウトのAPIを利用して、決済機能を自分で開発する場合。
上記API署名の確認方法を参考し、SandboxのUsername、PasswordとSignatureをもともと本番アカウントのUsername、PasswordとSignatureを置き換えてください。
後、API呼び出しのEndPoint(呼び出し先URL)も、[こちらのドキュメント](https://developer.paypal.com/docs/classic/api/#pps)を参考して、適当なSandbox Endpointに変更してください。
また、IPN受信プログラムの中に、すべてのURLをSandboxのURLに変更してください。
基本的にはwww.paypal.comから始まるURLはwww.sandbox.paypal.comに変更します。
  
  
PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal APIエラーコード10412について

質問:
「この請求は支払い済みです。詳しい情報については、マーチャントにお問い合わせください。」、10412、Duplicate invoice、Payment has already been made for this InvoiceID、のエラーが発生しているが、どう対応するのか

回答:
このエラーが発生する原因は、マーチャントのウェブサイトからPayPalに渡した「請求書ID」のパラメータは以前の取引の「請求書ID」と重複しています。
「請求書ID」のパラメータは、
ウェブサイトペイメントスタンダードの場合、「invoice」パラメータです、
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/
エクスプレスチェックアウトの場合、SetExpressCheckout APIの「PAYMENTREQUEST_0_INVNUM」パラメータです、
https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/

アカウントのデフォルト設定では「請求書ID」が重複するとエラーになります。

「請求書ID」を重複しても問題ないマーチャントに対して、下記の手順でこの設定を変更することができます。
www.paypal.comでログインして、個人設定->販売ツール->支払い受取りを拒否する　で更新をクリックし、下記の設定項目で「いいえ」を設定して保存してください。

支払いが間違って処理された場合、その支払いの受け取りを拒否する。
支払いの間違いを防ぐために、請求書IDが重複している支払いの受け取りを拒否します。
 はい。請求 ID 別に多重の支払を拒否する。
 いいえ。請求 ID 別に多重の支払を許可する。

また、請求書ID重複についての詳細は下記URLを参考してください。
https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1097&pmv=print&impressions=false&viewlocale=ja_JP


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal取引詳細に配送先住所情報がない原因

PayPal取引詳細に配送先住所情報がない原因は、マーチャントのウェブサイトから送られた下記パラメータが「2」に設定されていません。
ウェブサイトペイメントスタンダードの場合、「no_shipping」パラメータ、https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/
エクスプレスチェックアウトの場合、SetExpressCheckout APIの「NOSHIPPING」パラメータ
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI0J0VU

このパラメータが2以外に設定すると、配送アドレスがなくても決済できるようになります。
配送アドレスがないと決済できないように設定したい場合は、このパラメータを2に設定してください。

また、サードパーティーショッピングカートをご利用の場合は、上記パラメータの設定方法についてはショッピングカートに問い合わせてください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
(PayPal) APIエラーコード10002(Security header is not valid)について

質問:
Security header is not valid 10002のエラーが出ました、何が問題があるでしょうか。

回答:
エラーコード10002はAPI署名などが正しくない場合が出ますので、
下記手順でもう一度APIユーザー名、パスワード、署名を確認し、修正すればエラーが出なくなると思います。

www.paypal.comでログインして、「個人設定>販売ツール>API アクセス」で更新をクリックします。
または、下記URLにアクセスします：
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-api-access
表示されている「APIアクセス」画面で「API署名の表示」リンクをクリックしたら、API署名が表示されます。

また、10002エラーの詳細については下記を参考してくだい。
https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1030&pmv=print&impressions=false&viewlocale=ja_JP

https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1994&pmv=print&impressions=false&viewlocale=ja_JP


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
(PayPal) クレジットカードで決済した後、リダイレクトは自動的に行われない。

質問：
バイヤーがクレジットカード決済方法で決済した後、決済完了画面が表示されるまま、リダイレクトは自動的に行われない。![CCRedirect.jpg](https://qiita-image-store.s3.amazonaws.com/0/124793/f8b97b4a-6284-4712-b3ce-e034baccee89.jpeg)


回答:
PayPalのウェブペイメントスタンダードを利用している、かつ買い手様がクレジットカードで決済する場合では、
決済完了画面で「******のページに戻る」のリンクまたはボタンが表示され、そのリンクをクリックしないとリダイレクトされないのは仕様です。
ただ、そのリンクのテキストを変更することはできます。
HTMLのフォームに、"cbt"というパラメータを設定すれば、そのリンクのテキストをカスタマイズできます。
"cbt"パラメータの詳細は下記ページで"cbt"を検索してください。
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/

ちなみに、ウェブペイメントプラスサービスを利用すれば、バイヤーがクレジットカードで支払った直後にマーチャントのサイトに自動的にリダイレクトすることが可能になります。
ウェブペイメントプラスの場合、取引ごとの手数料以外に、月額手数料があります、具体的には下記のページをご参考ください。
https://www.paypal.jp/jp/contents/service/web-payment-plus/
インテグレーションする前に、下記のリンクを参考して申し込んでください。
https://www.paypal.jp/jp/contents/support/introduction/web-payment-plus/
申し込みは完了したら、インテグレーションにつきましては下記のガイドを参考してください。
https://www.paypalobjects.com/webstatic/ja_JP/developer/docs/pdf/paymentsplus_jp.pdf


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal API情報の取得

PayPal決済方法を設定するため、APIユーザー名、APIパスワード、API署名は入力必要となります
PayPalのAPI情報の取得方法は下記です：
www.paypal.comでログインして、「個人設定>販売ツール>API アクセス」で更新をクリックします。
または、下記URLにアクセスします：
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-api-access
表示されている「APIアクセス」画面で「API署名の表示」リンクをクリックしたら、API署名が表示されます。
もし「API署名の表示」リンクがなければ、「API証明書の請求」があると思いますので、「API証明書の請求」リンクをクリックして、
次の画面で左の「API署名を請求してください。」のチェックボックスをクリックして、「同意して送信」をクリックしてください、
API署名は次の画面で表示されると思います。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal バイヤーに届いた支払い通知メール（レシート）に記載している売り手の電話番号、メールアドレス、ウェブサイトURLなどの変更方法

バイヤーに届いた支払い通知メール（レシート）に記載している売り手情報は、下記の方法で変更できます。
カスタマーサービスのメールアドレスがPayPalサイトにログインして、下記の箇所で変更してください。
個人設定->事業情報->事業情報、更新をクリックします
または、下記のURLにアクセスします：
https://www.paypal.com/cgi-bin/webscr?cmd=_profile-business-info&upgrade.x=1
表示されている画面で各情報を変更して保存してください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal エンコーディング一致しないエラーについて

質問:
PayPalボタンをクリックすると、下記のエラーが表示されます。

データが入力文字セットまたはデフォルトのエンコーディングに一致しません。詳細情報については、マーチャントにお問い合わせください。
Data does not match input character set or default encoding. For more information, please contact the merchant.
正規期間が無効です。購読に関するA3、P3、及びT3パラメータに有効な値を指定する必要があります。
Invalid Regular period. You must specify valid values for the A3, P3 and T3 parameters for a subscription.
![Encoding1.PNG](https://qiita-image-store.s3.amazonaws.com/0/124793/11449308-f9b0-caf4-4b5f-22a4d9c896f8.png)
![Encoding2.jpg](https://qiita-image-store.s3.amazonaws.com/0/124793/ea215ffd-891b-b904-bfe8-29c86bb72942.jpeg)

 
 
回答:
基本的にこのエラーは、マーチャントのウェブサイトのエンコーディングがアカウント上のエンコーディングと違う場合は発生します。
下記の手順でアカウントのエンコーディング設定を確認できます。
①	www.paypal.comでログインし、イアカウント->個人設定->販売ツール　で、「PayPalボタンの言語コード化」をクリックする
または、下記URLにアクセスする：
https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding
②	詳細オプション」ボタンをクリックする。
次の画面で表示されているエンコーディングはマーチャントのウェブサイトのエンコーディングと一致しなければなりません。
マーチャントのウェブサイトのエンコーディングはUTF-8が圧倒的に多いので、
その画面でUTF-8を選択し、保存してから、ボタンの遷移を再確認してみたください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal決済ページの言語の設定方法

PayPal支払画面の表示言語は、PayPalサーバーで各要素を合わせて自動的に判断され、適当な言語を表示しています。
①ブラウザの言語設定。
②ブラウザのCookieに、PayPal関連のCookie。
　（一度ログインしたユーザーでは、そのユーザーの言語設定がCookieに残り、次回ではCookieにより、この言語で表示されます。）
③ExpressCheckoutを使う場合：LOCALECODEパラメータ。Website Payments Standardを使う場合：lcパラメータ。
④配送先国のパラメータ。ExpressCheckoutを使う場合：PAYMENTREQUEST_n_SHIPTOCOUNTRYCODEパラメータ。Website Payments Standardを使う場合：countryパラメータ。

マーチャント側で制御できるのは③です。③のパラメータの詳細は下記のURLを参考してください：
LOCALECODEパラメータ（エクスプレスチェックをご利用の場合）：「LOCALECODE」を検索する
https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/
lcパラメータ（ウェブペイメントスタンダードをご利用の場合）：「lc」を検索する
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI0709B
例えば、日本語表示にしたい場合、上記パラメータが「JP」を指定指定してください、英語表示にしたい場合、上記パラメータが「US」を指定指定してください。

PayPalアカウントでボタンを作成してウェブサイトに貼り付けているマーチャントでは、
lcパラメータを追加する方法はボタン編集ページで、ステップ3の「高度な変数を追加する」のところで、下記のような内容を追加します：
lc=JP

また、サードパーティーのショッピングカートを使用している場合では、ショッピングカートのソースコードを修正して上記のパラメータの値を変更する必要があるかと思います。
修正方法はショッピングカートに問い合わせてください。


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
stylus版レスポンシブ・フォントサイズのmixin

<font color="red">*n*</font>px相当のvwに変換して書き出します。
[codepen](http://codepen.io/pokkur/pen/pbwEYz)

## 使用例

```stylus:main.styl
p
  responsive-font-size(14)
```

は……

```css:css
p {
  font-size: 1.4rem;
}
@media screen and (max-width: 40em) {
  p {
    font-size: 4.375vw;
  }
}
```

のように書き出してくれます。
これは、デフォルトのdesktop幅では、「1.4rem(14px)」、
mobile幅では(ここでは40em未満に設定)、「320px：14px」の比率で表示します。


## mixin

```stylus:_fontsize.styl
html
  font-size 62.5%

get-vw(size, viewport = 320)
	rate = 100 / viewport
	rate * size * 1vw

responsive-font-size(fontsize = 10)
	font-size: (fontsize * .1rem)

	@media screen and (max-width: 40em)
		font-size: get-vw(fontsize)
```


## 参考

- http://codepen.io/Guilh/pen/emrYPJ
- http://qiita.com/katsunory/items/3bede89cee8e2ded8426
Guest Checkout Feature（PayPalアカウントなしでクレジットカードで決済する）について

質問:
PayPal支払い画面で、支払方法を選択する場所に、ある時は、「PayPalアカウントから支払う」と「クレジットカードで支払う」になり、ある時は「PayPalアカウントから支払う」と「PayPalアカウントの作成」になります。その表示が変わる原因を教えて下さい。

回答:
PayPalのウェブサイトペイメントスタンダードまたはエクスプレスチェックアウトを利用する場合、
PayPalの仕様としては、必ずゲストチェックアウト（PayPalアカウントなしにクレジットカード決済）できるわけではございません。
直接クリジットカードで支払うできるかどうかはPayPalサーバーから判定されます、
その決済にリスクがあると判断されたら、詐欺などを防ぐために、強制的アカウント作成が要求される場合があります。
判断結果に影響する要素は、例えば売り手の国、買い手のIPの地域、ブラウザのクッキー、端末の種類、支払いの時間、ほかにもいろいろあります。
ただ、具体的な判断基準はPayPal内部情報、非公开となっています。

PayPalでは、ウェブペイメントプラス(Website Payments Plus)というクレジットカード決済をサポートしているサービスがあります。
ウェブペイメントプラスの場合、取引ごとの手数料以外に、月額手数料があります、具体的には下記のページを参考してください。
https://www.paypal.com/jp/webapps/mpp/webpayment-plus
ウェブサイトペイメントプラスを利用するには、下記のページで利用申請してください。
https://www.paypal.jp/jp/contents/support/introduction/web-payment-plus/
導入ガイド：
https://www.paypalobjects.com/webstatic/ja_JP/developer/docs/pdf/paymentsplus_jp.pdf


PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
Ansible Jinja2 filters 正規表現で変数の文字列を置換、抽出する

## 0.はじめに
Ansible で　動的に取得した変数値などを、replaceやtemplateモジュール、commandモジュールでのsedなどを利用せずに、Jinja2 filtersで正規表現を扱えないか調べたところ`regex_replace`が用意されていました。

## 1.使い方 サンプルプレイブック
以下は変数kb_msu"Windows8.1-KB3140735-x64.msu"を regex_replaceを利用して
  例1）拡張子を**置換**して別の変数として定義
  例2）真ん中の数字のみを**抽出**して別の変数として定義
debugモジュールで出力するサンプルのプレイブック

``` regex_raplace.yml
---
- hosts: localhost
  connection: local
  gather_facts: no
  vars:
    kb_msu: "Windows8.1-KB3140735-x64.msu"
    # 例1）kb_msuの拡張子を.msuから.xmlへ置換
    kb_xml: "{{ kb_msu | regex_replace('.msu','.xml') }}"
    # 例2) kb_msuの'-KB'と'-'との間の数字を抽出
    kb_no:  "{{ kb_msu | regex_replace('^.*-KB(\\d*)-.*msu$','\\1') }}"
  tasks:
    - debug: msg="kb_msu={{ kb_msu }} , kb_xml={{ kb_xml }} , kb_no={{ kb_no }}"
```

## 2.実行結果

```
# ansible-playbook regex_raplace.yml

PLAY [localhost] ***************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "kb_msu=Windows8.1-KB3140735-x64.msu, kb_xml=Windows8.1-KB3140735-x64.xml , kb_no=3140735"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0
```

## 3.参考
公式サイトでのJinja2 filtersの使い方（英語）は[こちら](http://docs.ansible.com/ansible/playbooks_filters.html)。
他にもいろいろと便利なフィルター(Windows関連や正規表現をエスケープしてくれるものなど)
が追加・更新？されていましたので、定期的に覗くと良いかもしれません。

なお、現時点(2016/07/04)では公式サイトには載っていないのですが、
正規表現関連としては`regex_search`や`regex_findall`なども使えるようです。
Version 2.2.0から？でしょうか？(ansible 2.2.0 (devel 394430a61e) last updated 2016/06/28 13:25:07 (GMT +900)では使えました)

以下はAnsible-Webinar用コードの一部
https://github.com/privateip/Ansible-Webinar-Mar2016/blob/master/roles/network_facts/tasks/ios.yaml
【日刊バックスラッシュ】雨後の筍のようなMacキーボード記事まとめ

# 序
これは人とバックスラッシュの終わりなき戦いを描いた叙事詩である。

人とバックスラッシュの諍いが無くなる安息の日は何時やってくるのだろうか。

# バックスラッシュ
- [mac バックスラッシュ ( \ )](/TetsuTaka/items/0bf28668a4d9c514c215)
- [Macでバックスラッシュを入力する](/n-satoru/items/1607be328d0dffaefa76)
- [Macでバックスラッシュを標準で](/bayashi/items/3fc8fc48ae51937104b0)
- [Macにおけるバックスラッシュ（\）の入力方法](/miyohide/items/6cb8967282d4b2db0f61)
- [日本語入力時に\(バックスラッシュ)を入力する方法](/takejune/items/9b6cb4866dcb74550314)
- [JetbrainsのIDEでバックスラッシュがデフォルト入力にならない](/uchiko/items/f7ea7915c3953074b797)
- [【初心者】\（バックスラッシュ）を簡単に入力できる設定](/Cremokoroah/items/70b7efe47f9d3fedd57d)
- [mac > バックスラッシュを片手で入力](/7of9/items/f5ee77dfe977d0e951f5)
- [Mac でのバックスラッシュの入力方法 (画像あり) - Windowsユーザーのために](/Yinaura/items/30896618c438ac2a2e6a)
- [【メモ】Mac(USキーボード)でのバックスラッシュ入力設定](/noriyotcp/items/d2e7e3a199ed82931fcb)
- [MacからWindowsへリモートデスクトップ接続したとき、バックスラッシュを使えるようにする](/KNaito/items/174404ea42470d00c063)
- [[Emacs] MacOSでEmacsを使うときは、バックスラッシュにご注意](/aKenjiKato/items/4ac7d9b100bdce0b8920)
- [Macでいろんな記号を直接入力する方法](/nakaken0629/items/7b388131601dbd9dce89)
- [Macで\と¥の入れ替え](/orange-lion/items/617d1be39942e1604865)
- [Macで\入力めんどくね？](/martini3oz/items/e51911bfa72f172ce16b)
- [Mac で \ と ¥ の入力を快適に](/martini3oz/items/31d98e86911d8016a2be)
- [macのエスケープ文字](/sampleb3/items/8ecc644b5bffcf800150)
- [Mac覚え書き](/_daisuke/items/2dc7870f4fc9754377de)
- [WindowsからMacに乗り換えて"わからない"キー入力をメモ](/kajiemon/items/e6fff57f8bfc84b36680)
- [Macメモ](/k2ymg/items/82a3139f4e3bed6f6b8b)
- [Macの初期設定 手順書](/GENYA/items/bae8eb31f4f895a27942)
- [Mac Book Pro セットアップメモ](/satosystems/items/075c3f4429c7ae374354)
- [Windows使いが手軽に使えるMacの小技](/Chitama/items/c7886016f2cc0ef610d7)
- [windowsでできていたショートカットをmacでもやりたくて調べ回る](/nnmr/items/ba80aacc47a7dafa47b3)
- [WindowsユーザーがMacに乗り換えた時に理解しておくとよい情報](/yuusuke510/items/11cc201c6a2aa8bb42a8)
- [OSXでのバックスラッシュ( \ )の取り扱い](/takuya71/items/eb559fb849b3def70e94)
- [バックスラッシュ「\」の打ち方](/Evazain2/items/2b9e0e92c3e87bce7388)
- [Macでシュッとバックスラッシュを打ちたい](/tomzoh/items/656b463935e6d64d8ea8)
- [IntelliJとかJVMのIDE使いでもKarabinerなしでバックスラッシュを片手入力したい](/tanakahisateru/items/d8a67ad89c07baf8c0da)

# バッククォート
- [バッククォートの出し方](/aion/items/e8508264833ff9b63bff)
- [Macのキーボードで｀（バッククォート）の入力](/shishamo_dev/items/2f51bc232d1a9ae28df6)
WordPress(Welcartも)をさくらサーバーからエックスサーバーにまるごと移転する方法。

さくらのレンタルサーバー　スタンダードを利用してWordPress、Welcartを使用していたんですが、どうも不便な事が多い。
サイト全体をSSL化ができなかったり、WordPressが重かったり…事実「さくらサーバー　遅い」で検索するとそういう情報が結構載ってます。
グーグルのPageSpeed Insightsで評価してみるとサーバーの応答時間が1秒以上掛かってました。

てなことで簡単に移転する方法を自分用にメモのついでに説明します。

#移転作業
##移転元の作業

WordPressの管理画面からツール、バックアップ設定の項目からダウンロードを選択して「バックアップ！」を実行。
SQLのデータがパソコンにダウンロードされます。

さくらサーバーのサーバーコントロールパネルからファイルマネージャを開きます。
ファイルマネージャからWordPressが設置されてるフォルダを選択し、右クリックから「リモートで圧縮」を選択します。
設定項目はそのままで結構なので、「OK」を選択して圧縮します。
できたファイルのURLをメモっておきます。

##移転先の作業
ドメインもそのまま使うと思うので、[エックスサーバー　ドメイン設定](https://www.xserver.ne.jp/manual/man_domain_setting.php)を参考にドメインを追加しておきます。

###データベースの移動
エックスサーバーのサーバーパネルを開きます。

MySQLの設定を選択し、タブのMySQLの追加を選択します。
データベース名、エンコードを適宜設定しMySQLを追加します。
例:データベース名:wordpress エンコード:UTF-8 

タブのMySQLユーザID追加を選択します。
ユーザID、パスワードを適宜設定してユーザを追加します。
例:ユーザID:admin パスワード:root

タブのMySQL一覧を選択します。
データベースのアクセス権所有ユーザにさきほどのユーザを追加します。

サーバーパネルのデータベース、phpMyAdminを開きます。
ユーザーとパスワードを訊かれるので、さっき追加したユーザーのIDとパスワードを入力してログインします。
インポートを開いて、バックアップしたSQLのデータを選択し右下の実行するを選択します。
何もなければ、保存が成功した画面が表示されると思います。

###SSHの設定

さきほど圧縮保存したファイルを移転先に移動させるためにSSH接続できるようにします。
SSH設定を開いて、タブの「公開鍵認証用鍵ペアの生成」を選択します。
適当なパスフレーズを入力して鍵を生成します。この際に入力したパスフレーズは覚えておいてください。
鍵をダウンロードします。


###データの移動
Tera Termなど適当なターミナルソフトをインストールして利用できるようにしておきます。
今回はTera Termを使います。
Tera Termの新しい接続のダイアログにホスト名を入力、TCPポートには10022を入力、「サービス:SSH」を選択します。
パスフレーズの欄には先程のパスフレーズを入力します。
RSA/…鍵を使うを選択し、ダウンロードした秘密鍵を選択します。

ログインに成功したら
`cd (ドメイン名)/public_html`
`wget (圧縮ファイルのURL)`
`unzip (圧縮ファイル名)`
でhttp://hoge.com/(圧縮ファイル名)
でアクセスできるようになります。
もし、WordPress のアドレスを
http://hoge.com
にしたければ、ファイルすべてをpublic_htmlに移動させます。
（詳しいことは「ドキュメントルート」で検索してください。
セキュリティー上良くないとか色々あるみたいですが私にはよくわかりませんでした）

まだこの時点ではWordPressは動作しません。

###wp-configの書き換え
展開したフォルダ内にあるwp-config.phpをvi wp-config.phpで編集するか、ダウンロードして適当なテキストエディタで開いて
以下の欄を適宜設定します。

```php:wp-config.php
// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'admin');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'root');

/** MySQL のホスト名 */
define('DB_HOST', '*****.xserver.jp');

/** データベースのテーブルを作成する際のデータベースのキャラクターセット */
define('DB_CHARSET', 'utf8');

```
ファイルをアップロードして上書き保存すれば完成です。

###DNSサーバーの設定
ドメインのネームサーバーの設定を移転先のネームサーバーに変更します。
今回はエックスサーバーなのでプライマリにns1.xserver.jp、セカンダリにns2.xserver.jpを設定しておきます。
1日くらい経って移転先のWordPressが表示されたら成功です。

どんなサーバーへの移転でも通用すると思います。
まるごと移転するので、テーマやプラグインを一から入れなおす必要が無いので簡単で楽だと思います。
Warning: SplFileInfo::openFile(***/app/tmp/cache/persistent/myapp_cake_core_file_map): failed to open stream: Permission denied inの解決法

```php:core.php
/**
 * Configure the cache used for general framework caching. Path information,
 * object listings, and translation cache files are stored with this configuration.
 */
Cache::config('_cake_core_', array(
	'engine' => $engine,
	'prefix' => $prefix . 'cake_core_',
	'path' => CACHE . 'persistent' . DS,
	'serialize' => ($engine === 'File'),
	'duration' => $duration,
	'mask' => 0666
));

/**
 * Configure the cache for model and datasource caches. This cache configuration
 * is used to store schema descriptions, and table listings in connections.
 */
Cache::config('_cake_model_', array(
	'engine' => $engine,
	'prefix' => $prefix . 'cake_model_',
	'path' => CACHE . 'models' . DS,
	'serialize' => ($engine === 'File'),
	'duration' => $duration,
	'mask' => 0666
));
```

core.phpに以下を追加。
'mask' => 0666


myapp_cake_core_file_mapを削除するとWarningが出なくなる。
Xcodeのbuildは非常に遅くとてもイライラします。

私は個人的にRailsのプロジェクトも担当していますが、Railsで変更をしたら大概の場合ファイルをsaveするだけで変更が反映されるのに対し、iOS開発では一旦ビルドし直さないといけません。しかもそのビルド時間は数分かかり、集中力が途切れ非常に公立の悪さを感じていました。そこでXcodeプロジェクトのビルド時間短縮を試みて様々な方法があることがわかったのでまとめたいと思います。


# 全ての下準備: ビルド時間を計測できるようにする
以下のコマンドを打ってから、Xcodeを再起動するとビルド時間が表示されるようになります。
```
$ defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
```

ちなみに私の環境でとあるプロジェクトのビルド時間は179秒でした。一回のビルドにこれだけ時間がかかっていれば集中力が無くなってしまします。

![Kobito.SsoWyF.png](https://qiita-image-store.s3.amazonaws.com/0/37217/3627f6a7-9c22-0411-753f-f6b261e2fcfe.png "Kobito.SsoWyF.png")


# 処理を並列化する
デフォルトの環境だとXcodeでのビルドは並列処理されないのですが、設定することで並列処理することができます。

## 下準備: MacのCore数を確認する
下記のCore数を確認できます。
```
$ system_profiler SPHardwareDataType
```

![Kobito.J8g1Nj.png](https://qiita-image-store.s3.amazonaws.com/0/37217/170e329a-2270-627b-9b7e-b0d0c5006726.png "Kobito.J8g1Nj.png")

これでCore数は2だということが分かりました。

## 並列数の設定
次に以下のコマンドでコンパイルの同時実行数を2にします

```
$ defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 2
```

すると114秒となり約65秒も短縮できました。
![Kobito.w1BUsf.png](https://qiita-image-store.s3.amazonaws.com/0/37217/5d485fe2-69dc-1e49-7729-a62fc065d0c2.png "Kobito.w1BUsf.png")

ただし、並列タスク数を上げればいいというわけでもないらしく、並列数をこれ以上上げても芳しい結果は得られませんでした。

並列数4
![Kobito.AsWaCr.png](https://qiita-image-store.s3.amazonaws.com/0/37217/924ec967-9ebb-e0ae-2f20-9cbaee838cf8.png "Kobito.AsWaCr.png")

並列数5
![Kobito.2S9UII.png](https://qiita-image-store.s3.amazonaws.com/0/37217/372464ef-2918-2103-78c7-f8237da30dfd.png "Kobito.2S9UII.png")

並列数16
![Kobito.78JOfo.png](https://qiita-image-store.s3.amazonaws.com/0/37217/460a52cf-4edf-5227-84cb-4755bfa03ae5.png "Kobito.78JOfo.png")

結論としてはコア数と同じが良いということですね。

参考: 
http://llcc.hatenablog.com/entry/2016/01/15/235114
http://qiita.com/rizumita/items/913b05d799b3712260f6


# dSYMファイル
Xcode7.1からはデフォルトでこの設定になっているのですが、それ以前からあるプロジェクトではそうなっていません。ここで、その設定をしましょう。・・・・・・


結果
![Failed to upload Kobito.qhxzKr.png: Unknown error]()


参考:
http://fnet-tech.blogspot.jp/2016/05/xcode.html


# CocoaPodsのコンパイルをスキップする
あまり推奨できる方法ではないですがCocoaPodsでダウンロードしたモノはあまり更新するわけではないのでビルドの度にコンパイルするのは効率的ではありません。そこでこの設定です。
・・・・・・・・・・・・・・

# Carthageを導入する
ライブラリ管理にはCarthageもあります。仕組みの違い上Carthageの方が早いので対応しているライブラリはCarthageに移行するのも良いでしょう。

参考: http://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a



# 他に

## コンパイルに時間がかかっているファイルを特定し、改善する
コンパイルに時間がかかっているファイルがあったらそれを改善して早くするというのがあります。
私の場合はこの手法で上手く行く箇所が見つけられませんでしたが、型推論を明示的にすることでコンパイル時間の短縮になることが多いようです。

参考: http://qiita.com/rizumita/items/913b05d799b3712260f6


**他にもあれば教えて下さい。**
Delegateに重複して登録しないようにする

自分用メモ

```	
void RegisterDelegate ()
{
//delegateがNullの時(一つもメソッドが登録されていない場合)はdelegateに登録する
	if (SceneView.onSceneGUIDelegate == null) {
		SceneView.onSceneGUIDelegate += ShowSyncCameraUI;
	} else {
//delegateにすでにメソッドが登録されているときは、登録されているメソッド名を調べて
//登録したいメソッドがすでに追加されていないか確認する
		var invocationList = SceneView.onSceneGUIDelegate.GetInvocationList ();
		bool added = invocationList.Any (invocation => invocation.Method.Name == "ShowSyncCameraUI");

		if (!added) {
			SceneView.onSceneGUIDelegate += ShowSyncCameraUI;
		}
	}

	SceneView.lastActiveSceneView.Repaint ();
}
```
Xcode 7.3.1 で Game プロジェクト

Xcode 7.3.1 で Game プロジェクトを作成したログ

1. File -> New -> Project で iOS の Game テンプレートを選択
![Screen Shot 2016-07-04 at 15.39.07.png](https://qiita-image-store.s3.amazonaws.com/0/131106/2ad97809-8860-3789-111f-9e9ec30bb849.png)

2. Swift を選択
![Screen Shot 2016-07-04 at 15.42.47.png](https://qiita-image-store.s3.amazonaws.com/0/131106/51968813-aabd-6e88-e94a-ee2b4569b073.png)

3. Create Git repository を OFF
![Screen Shot 2016-07-04 at 15.47.20.png](https://qiita-image-store.s3.amazonaws.com/0/131106/2fcce403-ce6e-60db-406f-9aa6a64f353a.png)

4. デフォルト状態
![Screen Shot 2016-07-04 at 15.51.54.png](https://qiita-image-store.s3.amazonaws.com/0/131106/b8a78dc3-3f8d-10ec-20d3-243e8980f6a2.png)

5. iPhone 4s シュミレーターで Run してみたら飛行機が回った
![Screen Shot 2016-07-04 at 15.56.04.png](https://qiita-image-store.s3.amazonaws.com/0/131106/a67827e8-e164-8465-9a3f-356c35102157.png)

6. 以下の手順で iPhone 実機でも同じものが動いた
    1. Team を選んで Fix issue ボタンを押す（ No provisioning profiles found
 警告が消える）
    2. iPhone 実機の設定 -> 一般 -> プロファイルとデバイス管理 -> デベロッパAPP -> 信頼
cakephp3 の Migration で mediumblob を認識させる

ちょっと、はまったので防備録

```php
        $table->addColumn('file_data', 'blob', [
            'default' => null,
            'limit' => 16777215,
            'null' => true,
        ]);
```

limit にサイズを指定するのがポイント
サイズは vendor\robmorgan\phinx\src\Phinx\Db\Adapter\MysqlAdapter.php にある以下の部分

```php
    const BLOB_TINY    = 255;
    const BLOB_SMALL   = 255; /* deprecated, alias of BLOB_TINY */
    const BLOB_REGULAR = 65535;
    const BLOB_MEDIUM  = 16777215;
    const BLOB_LONG    = 4294967295;
```
GitHub と Bitbucket の SSH キー ( 公開鍵 ) を取得するための URL


## URL

### GitHub

```
https://github.com/<username>.keys
```

```
https://api.github.com/users/<username>/keys
```

### BitBucket

```
https://bitbucket.org/api/1.0/users/<username>/ssh-keys
```

## 何に使えるか？

インフラの初期設定で、チーム内メンバーのアカウントを発行する際に公開鍵認証を設定すると思います。 `~/.ssh/authorized_keys` に SSH キー ( 公開鍵 ) を追記することで可能となりますよね。その際に、手作業で設定するのではなく Ansible 等のサーバー構成管理ツールを使って自動化設定したい！と思う方は少なくないはずです。
例えば、Ansible の場合だと下記のような設定になると思います。

```playbook
- authorized_key: user=<username> key=https://github.com/<username>.keys
```

## 参考文献

* [git - What is the public URL for the Github public keys - Stack Overflow](http://stackoverflow.com/questions/16158158/what-is-the-public-url-for-the-github-public-keys "git - What is the public URL for the Github public keys - Stack Overflow")
全文検索サーバー Fess を Docker で動かす


# Fessとは
公式サイト: [http://fess.codelibs.org/ja/](http://fess.codelibs.org/ja/)
Fessとは、Javaで作られた全文検索サーバーです。Github上にApacheライセンスで公開されており、Googleの検索エンジンのようなものを簡単に導入することができます。
また、GUIによる操作で設定を行えるため、管理も容易に行えます。
Docker Hubにリポジトリが公開されているので、Dockerで導入したいと思います。

# 環境
- Ubuntu 16.04 LTS
- Docker version 1.11.2, build b9f10c9
- java version "1.8.0_91"
- Fess 10.1.1

# 導入
Dockerの導入は本筋とはあまり関係ないので省きます。
Fessの導入には、Docker Hubのリポジトリを使うと簡単です。
[https://hub.docker.com/r/codelibs/fess/](https://hub.docker.com/r/codelibs/fess/)
特に理由がなければ、latestを使うのが良いでしょう。

まずは、イメージを落としてきます。

```
$ docker pull codelibs/fess:latest
latest: Pulling from codelibs/fess

a3ed95caeb02: Pull complete 
da71393503ec: Pull complete 
2580f226a6d6: Pull complete 
289e73fee9d8: Pull complete 
944ae0501240: Pull complete 
b59a74100fe8: Pull complete 
a5a701cf3ec4: Pull complete 
Digest: sha256:de6c6c8a69d4d6fe35321c4f2a35563fdcdac014c20ef5c6d1266a70b158bd87
Status: Downloaded newer image for codelibs/fess:latest

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
codelibs/fess       latest              25c9e32b3354        6 days ago          829.2 MB
```

確認してみると、ちゃんとイメージが保存されています。
では次に、Docker HubのREADMEに従って起動してみます。

```
$ docker run -d -p 8080:8080 --name fess codelibs/fess:latest
868cf71fc966e966bf2aa6a84ac58c7173235484f7ce7b1453c1cac74ec6aa5c

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                        NAMES
868cf71fc966        codelibs/fess:latest   "/opt/fess/bin/fess /"   3 seconds ago       Up 2 seconds        9201/tcp, 0.0.0.0:8080->8080/tcp, 9301/tcp   fess
```

fessという名前のコンテナが作成され、起動されたようです。
コンテナ内の8080ポートがホストにフォワーディングされているようなので、起動できているか確認してみます。

```
$ curl -I http://127.0.0.1:8080/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=ACD25ACCACA7FB5BB65A64A1C05BF02C; Path=/; HttpOnly
Pragma: no-cache
Cache-Control: no-cache, no-store
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 04 Jul 2016 06:36:46 GMT
```

ちゃんとアクセスできているようです。

docker pullせず、
`$ docker run -d -p 8080:8080 --name fess codelibs/fess:latest`
だけでも自動的にイメージが落ちてくるので直接起動できます。

# まとめ
Dockerで全文検索サーバーのFessを起動してみました。
Fessの細かい設定等は、上述した公式サイトのドキュメントにあるので割愛します。
また、Kitematicでも使えるようなので、Fess on Docker on Windows | Macもできるみたいです。
CSSのfont-sizeが%とかemとかremとかvwで指定されてると、ビビっちゃう君と僕を救う2分


ーーーーーーーーー 
追記
2020年10/15

この歳になるとこういう記事のアプトプット怖いですね。。
とりあえず周り見てると、こうやってる人多いです

html,body{
    font-size:62.5%;
}
って書いてあげて　そうすると 1.0rem が 10pxになるみたい。

そんで例えば24pxにしたい場合は2.4remって指定してあげるみたい。

以上。
ーーーーーーーーー 


いまだにレスポンシブ怖い、、、、。

なぜなら%とかemとかremのフォントサイズ指定があるから。。。

これらをなんとなくでしてる人。 :japanese_goblin: 

途中で引き継いだ案件とかでpx以外が指定されててビビってしまった

僕とあなたへ捧げます。 :ok_hand: 😭


# 大前提

CSSのフォントサイズ指定方法は次の2つに分類
絶対値（absolute）....16pxって言ったら絶対16px
相対値（relative）....親要素のサイズによって可変

# px指定

みんな大好き安心のpx指定。
16pxって指定したら親のサイズが何であれ、16px。

絶対値（absolute）

Q.pタグのフォントサイズは何pxで表示されますか？

```css:hoge.css
html{
    font-size:100%;
}
p{
    font-size:16px;
}
```

A.16px :innocent: 



# %指定

親要素のサイズの~~%というように可変。

相対値（relative）

Q.divの子要素のpタグのフォントサイズは何pxで表示されますか？

```css:hoge.css
html{
    font-size:100%;
}
div{
    font-size:16px;
}
div > p{
    font-size:50%;
}
```

A.8px :innocent:

divが16pxなので、その50%なので8px


# em指定

パーセントと一緒の考え方。
50パーセントが5割という表記に変わるような感じ

50%は0.5em
100%は1em


Q.divの子要素のpタグのフォントサイズは何pxで表示されますか？

```css:hoge.css
html{
    font-size:100%;
}
div{
    font-size:16px;
}
div > p{
    font-size:0.5em;
}
```

A.8px :innocent:

divが16pxなので、その半分なので8px


# 休憩 大事な豆知識

ブラウザのデフォルトサイズは
100% = 1em = 1rem = 16px = 12pt


# rem指定


emと同じような考え方だが、ルート(html)に対する割合のサイズ

相対値（relative）



Q.divの子要素のpタグのフォントサイズは何pxで表示されますか？

```css:hoge.css
html{
    font-size:100%;
    /* つまり16px */
}
div{
    font-size:2em;
}
div > p{
    font-size:0.5rem;
}
```

A.8px :innocent:

divは32pxだけど、htmlが16pxでその半分なので8px




# ラスボス vw vh指定

(2016/7/5 追記)

おそらく一番ビビってしまうだろう、vw vh指定について、勇気を出して調べてみた。

「ブラウザの幅に応じてフォントサイズを可変に対応する方法は、
メディアクエリーで複数サイズ指定する以外にないのか...？」

その答えがこちらだそうです。

vw・・・viewport width。ビューポートの幅に対する割合。
vh・・・viewport height。ビューポートの高さに対する割合。


ブラウザの横幅全体を「100vw」
10vwは、1/10のサイズ。

画面の横幅が320pxの時に、14pxのフォントサイズで表示したいときは、
14px÷320px=0.04375(4.375%)なので「4.375vw」と記述。
主要に合わせて、後可変。

これは正直心折れたwww 😭
最前線だとスタンダードなのかな？


参考
フォントサイズを「vw・vh」でビューポートの幅にあわせて可変させる
https://skygold.jp/web/2901.html




# おまけ

body { font-size:62.5%; }
よく見るこれは、1emが10pxになるように調整する為らしい。


# 理解を深める参考サイト
[CSS]フォントサイズの指定方法の基礎知識からレスポンシブに適した指定方法までやさしく解説
http://coliss.com/articles/build-websites/operation/css/css-font-sizing-by-ire.html

あなたはどれにする？CSSの文字サイズ指定「px、em、%」
http://blog.karasuneko.com/html-css/font-size-px-em-percent/

フォントのサイズ指定はpx？ em？ 既存の再検討とこれからのテクニック
http://coliss.com/articles/build-websites/operation/css/font-size-with-rem-by-snook-ca.html
minikube start時にError with pre-create checkが出る場合の対処方法

```
$ minikube start
Starting local Kubernetes cluster...
E0704 15:24:21.897743   29675 start.go:68] Error starting host:  Error creating. Error with pre-create check: "VirtualBox is configured with multiple host-only adapters with the same IP \"192.168.99.1\". Please remove one."
```

ifconfigで見てみると、該当IPが割り当てられたvboxnet7が存在した。

```
vboxnet7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
```

vboxnet7を一旦削除してからminikube startすると、成功した。

```
$ VBoxManage hostonlyif remove vboxnet7
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ minikube start

Starting local Kubernetes cluster...
Kubernetes is available at https://192.168.99.100:443.
Kubectl is now configured to use the cluster.
```

## 参考情報

docker-machineでも同様のエラーが出ることがある模様です。対処方法はここで紹介したものと同じ。

[0.6.0 upgrade issue - Error with pre-create check · Issue #3008 · docker/machine](https://github.com/docker/machine/issues/3008)
s3fsのDockerコンテナを使ってS3をEC2にマウントする

## 目的

あるバッチ処理を行うDockerコンテナで生成するCSVファイルをS3と同期したかったので[s3fs](https://github.com/s3fs-fuse/s3fs-fuse)を使うことにしました。コンテナ自体にs3fsを入れてしまうのも一つの方法ですが、役割を分割するためにs3fs用の別コンテナを用意する形にしました。

最初思いついた方法がvolumes_fromオプションでディレクトリを共有する方法だったのですが、s3fsはFUSEファイルシステムをベースにしており、volumes_fromオプションはFUSEのマウントに対応していないためこの方法は断念しました。

Docker Hubで既に存在するイメージを検索してみたところ、以下のイメージが存在し共有マウントを使用する方法が載っていたため、こちらの方法に従ってやってみることにしました。
https://hub.docker.com/r/xueshanf/s3fs/


## 環境


- OS: Amazon Linux AMI release 2016.03
- Docker: 1.11.1
- Docker Compose: 1.7.1

事前にDockerとDocker Composeをインストールしておきます。

```
yum update -y
yum install -y docker
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
service docker start
```

## 手順

### 共有マウントの設定


```
# mkdir /mnt/mydata
# mount --bind /mnt/mydata /mnt/mydata
# mount --make-shared /mnt/mydata
# findmnt -o TARGET,PROPAGATION /mnt/mydata
TARGET      PROPAGATION
/mnt/mydata shared
```

### s3fsの設定

s3fs用のAWSのキー設定のファイルを作成しておきます。

```
# echo "<accessId>:<acessSecrect>" > /root/.s3fs
# chmod 600 /root/.s3fs
```

### docker-compose.ymlの作成

docker-composeの定義を用意します。

```yaml
version: '2'

services:
  app:
    image: busybox
    volumes:
      - /mnt/mydata:/mnt
  s3fs:
    image: xueshanf/s3fs:latest
    environment:
      AWSACCESSKEYID: <accessId>
      AWSSECRETACCESSKEY: <acessSecrect>
    cap_add:
      - MKNOD
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    devices:
      - /dev/fuse
    volumes:
      - /mnt/mydata:/mnt:shared
      - /root/.s3fs:/root/.s3fs
    command: /usr/bin/s3fs -f -o allow_other -o use_cache=/tmp -o passwd_file=/root/.s3fs docker-s3fs-test /mnt/
```


s3fs用のコンテナとapp用のコンテナとなります。

### s3fsコンテナを起動

```
# docker-compose run -d s3fs
```

※共有マウントが有効でないと言われてしまう場合は、一度Docker Daemonを再起動して再度試してみてください


### ホストマシンでS3マウントが有効かどうかを確認

まずはホスト側でS3がマウントされているかどうかを確認してみます。マウントディレクトリでファイルを作成します。

```
# touch /mnt/mydata/hello
```

S3 Bucketの中を確認するとファイルが追加されていることを確認できます。

```
# aws s3 ls s3://docker-s3fs-test
2016-07-04 05:55:59          0 hello
```

### appコンテナ内でS3マウントが有効かどうかを確認

appコンテナを起動して、マウントディレクトリにファイルを追加してみます。

```
# docker-compose run --rm app touch /mnt/world
```

S3にファイルが追加されていることを確認できます。

```
# aws s3 ls s3://docker-s3fs-test
2016-07-04 05:55:59          0 hello
2016-07-04 05:57:56          0 world
```
カスタムセルのリストにRipple Effectをつける

とても簡単。
xmlに`drawSelectorOnTop`を設定するだけ。

```xml
<ListView
    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    >
```
window 10 > windows 7 (vostro1550)からのアップグレード > ノートPC画面に表示されない / 外部モニタ出力はある > BIOS更新で対応

```txt:動作確認
DELL Vostro 1550 + Windows 7 pro
```

Windows10へのアップグレードをしたが、以下の症状が出ている。

- ノートPC自体の画面表示がでない
  - 外部モニタ出力はある

外部モニタ接続していない時もノートPCの画面に表示がない。

1回目のインストール時にうまくいかなかったと思ってWindows 7からクリーンインストールしなおしたが、外部モニタ出力で一応インストールはできていたのかもしれない。

<font color=red>外部モニタがない人は確実に詰む。</font>

以下を見つけた。
http://rokucho.com/aoxp/2016/02/15/dell%E3%80%80vostro1550-windows10%E5%8C%96%E5%A4%B1%E6%95%97/

> 同僚がダメ元で、BiosをUpDateしてみた。
もともとのBios Ver A03をA06にUpdate。
目出度く表示可能になった（＾＾

BIOSは以下。
http://www.dell.com/support/home/jp/ja/jpbsd1/product-support/product/vostro-1550/drivers

BIOS A06を適用したら、確かにノートPCの画面が表示されるようになった。

情報提供者に感謝。
Scalaデビューしたった

## 何を書いているのか
Scalaをちょっと触り始めたので、そのレポートのようなものです。
これからScalaを始めるかもしれない人の参考になれば幸いです。
勉強始めたばかりなので間違っているところがあったらごめんなしあ。

## Scalaの特徴
- スケーラブル
  - 小さいスクリプトから大規模システムまで使える
- オブジェクト指向の機能と関数型言語の機能を統合
- 静的な型付け&強力な型推論
- 高階関数
  - 関数を引数にしたり返り値にしたりする、関数
- 不変コレクション
  - コレクションとはリストとかキューのようなデータの集まりこと
  - 基本、コレクションは一度作成すると変更できない
- 並列処理がやりやすい(らしい)


## 気になったところ
1. オブジェクト指向で書くならJavaに近いかな

2. Javaのライブラリが使える
たいていのJavaのライブラリは

        import org.hoge.fuga
みたいにimportして使えるらしいですヽ(*´∀｀)ノ

3. コンパイルが遅いような気がする
まあちゃんと計測とか比較とかはしていなんですけどね。。

4. 全てのデータ型はオブジェクト、演算子はメソッド
たとえば、

        1 + 2
という式は

        1.+(2)
の省略記法になっています。
1という値のIntクラスのインスタンスの"+"という名前のメソッドを呼び出し、その引数に値が2のIntインスタンスを渡している、ちゅうわけです。

5. staticがない！
クラス内のフィールドやメソッドを静的にする"static"はScalaにはありません。
そのかわりシングルトンオブジェクト(インスタンスが1個しか作られない静的クラスみたいなもん)というものを使うようにします。

6. 何かと短く書ける
関数宣言

        def foo(x:Int, y:Int): Int = {
          return x + y
        }
        def foo(x:Int, y:Int) = x + y
関数リテラル

        val someFunc = (hoge:Int) => { hoge + 3 }: Int
        val someFunc:(Int)=>Int = _ + 3
        val someFunc = (_:Int) + 3
リストの要素に関数を適用

        someList.foreach((str:String) => {println(str)})
        someList.foreach(str => println(str))
        someList.foreach(println)
2つか3つ並べて書いているのが、同じ処理になります。
特にチーム開発の際は読みやすさや記述の一貫性の確保に気を使いそう。。


## 開発するには(Windowsの場合)
1. JDKインストール
2. http://www.scala-lang.org/download/
  - コマンドが打てればいい人 → Scalaのバイナリをダウンロード
  - IDEが欲しい人 → Scala IDEをインストール


## 感想
Scala以前に何の言語を経験しているかによると思いますが、そんなにとっつきが簡単な言語ではないと思います。記法にしても思想にしてもそこそこクセがあります。
でもまあ難解ということはないですし、理解するに従って上手く作られてるなあと思えてきます。
(なお、「初めてのプログラミング言語」にはあまりお勧めしません。)


## 参考にしたよ
[スケーラブルで関数型でオブジェクト指向なScala入門](http://www.atmarkit.co.jp/fjava/index/index_scala.html)
[Scalaメモ(Hishidama's Scala Memo)](http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html)
[Java職人がScalaやって覚えた基本を書いておく - Qiita](http://qiita.com/tag1216/items/5da22863bf70f2e1506f)
テキストファイルを部分的に暗号化する

以前、[テキストを暗号化する](http://qiita.com/ngc224/items/2beaa0e948f3de015a1a)というコマンドを作ったのだけど、使ってたら何を暗号化したのかわからなくなるという致命的な感じになったので、部分的に暗号化できるようにしてみました。

https://github.com/ngc224/txtmsk

### ファイルを作成

暗号化したい箇所を ``<msk>text</msk>`` で囲むと対象になります

```
$ cat my_secret.txt
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
```

### 暗号化する

```
$ txtmsk my_secret.txt
I am a <msk>Zbgw84jBGVjZHQIbVPzSg0ppZBTrYy7HAo+qHsBA6W7hhHGdoL5X5YwJ</msk>
I am a <msk>rdDqE1ZuSNDqPUepWiKaplMiSdpNigJmXRrIThFLfUuPget1ZbtGP6ih</msk>
I am a <msk>j5R6PdSTMdSxaLat0yGCDqkr4aUFJG7ySG4OSYLWAGuYhzSn/B3a8LSM</msk>
I am a <msk>dHOTOL6RFdBtafe5kXeXu8I2xrqGNoJlispJVlwASmhgw6gm/PbL3fkP</msk>
I am a <msk>/GIiMyLU3jfX21w1GtZ1ml3zlmsHztBdJvpfDQPFBL0wTgFyTAKWdeJS</msk>
```

### 復号化する ("-u" オプション)

```
$ txtmsk -u my_secret.msk.txt
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
I am a <msk>false phimosis</msk>
```

### 復号化してタグも消す ("-t" オプション)

```
$ txtmsk -u -t my_secret.msk.txt
I am a false phimosis
I am a false phimosis
I am a false phimosis
I am a false phimosis
I am a false phimosis
```

### キーストア
各OSでkeychain的なものを探してみたんですが、別途ソフトウェアインストールの必要があって断念した。
Linuxでkeyctlっていうシステムコール使ってみたんですが、動く環境が少なかったので外した。
mac以外は結局ファイルベースになった。
現状git-credentialの方法がベストっぽいと思った。
SketchでRadiusを角ごとに指定する

実はSketchでも角ごとにRadiusを変更できます。

Radiusの欄に「左上/右上/右下/左下」の順番で数値を渡してあげます。
![Screen Shot 2016-07-04 at 14.11.14.png](https://qiita-image-store.s3.amazonaws.com/0/96845/7605f7a7-509d-3f5a-ccce-c001ed98a9cc.png)

こんな感じになります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/96845/0bf1277a-50fe-f6a9-bc51-88c44c150f51.png" width=50% style="display:block; margin:0 auto;"></img>