[ Flask ] リクエスト処理をマルチスレッドで対応する

デフォルトの app.run() ではシングルスレッドでリクエスト処理を行うため、同時に複数リクエストを投げると処理に時間がかかります。その場合は
app.run(threaded=True)

でマルチスレッドで起動させるとマルチスレッドでリクエスト処理が行われます。

[ Cognito ] 認証メールの内容をカスタマイズする

Cognito でユーザー登録やパスワードリセット等の認証が必要になるAPIを呼び出した場合、認証メールが送信されるのですが AWS のコンソールからだとメッセージ内容を柔軟にカスタマイズすることができません。 Lambda 関数を使用すると,柔軟にカスタマイズすることができます。

AWSのサービス一覧 ▶ Lambda ▶ Create Function を選択して Node.js 6.10 のメール内容をカスタマイズする Lambda 関数を作成します。

exports.handler = (event, context, callback) => {
  if (event.userPoolId) {
    if (event.triggerSource) {
      let func = getEmailMessageByEvent(event);
      event = func(event);
    }
  }
  context.done(null, event);
};

let getEmailMessageByEvent = (event) => {
  let func;
  switch (event.triggerSource) {
    case 'CustomMessage_SignUp':
      func = getSignupMessage;
      break;
    case 'CustomMessage_ForgotPassword':
      func = getForgotPasswordMessage;
      break;
    case 'CustomMessage_UpdateUserAttribute':
      func = getCustomUpdateMessage;
      break;
    case 'CustomMessage_ResendCode':
      func = getResendCodeMessage;
      break;
    default:
      func = getDefaultMessage;
      break;
  }
  return func;
};


let getCustomUpdateMessage = (event) => {
  event.response.emailSubject = '【ユーザー情報の変更】認証コード';
  const msg = `認証コードは ${event.request.codeParameter} です`;
  event.response.emailMessage = msg;
  return event;
};

let getResendCodeMessage = (event) => {
  event.response.emailSubject = '【再送】認証コード';
  const msg = `認証コードは ${event.request.codeParameter} です`;
  event.response.emailMessage = msg;
  return event;
};

let getDefaultMessage = (event) => {
  return event;
};

let getSignupMessage = (event) => {
  event.response.emailSubject = '【新規登録】認証コード';
  const msg = `認証コードは ${event.request.codeParameter} です`;
  event.response.emailMessage = msg;
  return event;
};


let getForgotPasswordMessage = (event) => {
  event.response.emailSubject = '【パスワードリセット】認証コード';
  const msg = `認証コードは ${event.request.codeParameter} です`;
  event.response.emailMessage = msg;
  return event;
};

event.triggerSource で CustomMessage の種類が取得できるのでそれに応じて メールの内容を変更しています。event.response.emailSubject がメールの件名、event.reponse.emailResponse がメールの内容です。

最後に、AWSのサービス一覧 ▶ Cognito ▶ User Pools ▶ General settings ▶Triggers ▶ Custom Message に先程作成した Lambda関数 , sendVerificationCode を選択します。
これでメール内容のカスタマイズは完了です!

[ Vue ] Vue インスタンス内であればどこでも呼べるメソッドを実装

下記は任意の Vue インスタンス, vm に対して vm.$spinner で Spinner プロパティにアクセスできる例です。

const Spinner = {
  show(){
    // show spinner
  }
  hide(){
    // hide spinner
  }
}

class CustomPlugin {
  static instantiateProperties(opts){
    return {
      $spinner: {
        get(){
          return Spinner;
        }
      }
    };
  }

  static register(){
    Object.defineProperties(Vue.prototype,this.instantiateProperties({}))
  }
}

export default CustomPlugin;

[ Swift ] Protocol を使って異なるクラスの同じメソッドを呼ぶ

protocol Vehicle {
    func start()
}

class Car: Vehicle {
    func start() {
        print("car > start")
    }
}
class Train: Vehicle {
    func start() {
        print("train > start")
    }
}

let car = Car()
let train = Train()
let vehicles:[Vehicle] = [car,train]
for obj in vehicles {
    obj.start() 
}


Extension を使って Protocol を拡張する事もできる。

extension Vehicle {
    func stop() {
        print("vehicle > stop")
    }
}

gettextを使って.vueファイルの特定の文字列からpoファイル,jsonファイルを書き出す

.vue ファイル内において__()でくくられた文字列を po,json ファイルに書き出す手順をメモ。
例えば hello world を書き出したい場合は __(“hello world”) と宣言します。 なお、gettext はインストールしているものとします。

vue/po/messages.po を作成

$ find . -iname "*.vue" | xargs xgettext --keyword=__ --from-code=utf-8 --output-dir='vue/po'

messages.po をもとに日本語の vue/po/ja.po ,英語の vue/po/en.po ファイルを作成

msginit --locale=ja  --no-translator --input=vue/po/messages.po --o vue/po/ja.po;
msginit  --locale=en --no-translator --input=vue/po/messages.po --o vue/po/en.po;
en.po,ja.po ファイルがすでに存在している場合は msginit ではなく msgmerge を呼んでください。
msgmerge  --output=vue/po/en.po  vue/po/en.po vue/po/messages.po --sort-by-file;
msgmerge  --output=vue/po/ja.po  vue/po/ja.po vue/po/messages.po --sort-by-file;

en.po,ja.po ファイルを json形式でエクスポートする

pojsonをインストールします。
sudo npm install pojson -g 
あとは以下のコマンドを実行してください。
pojson -e utf-8 vue/po/en.po > vue/json/en.json
pojson -e utf-8 vue/po/ja.po > vue/json/ja.json

以上で.vue ファイルの特定の文字列から po,json ファイルを書き出す作業は完了です。