2020年 5月 の投稿一覧

[Quora] Macでおすすめの動画編集ソフトは?

Quora回答シリーズです。

質問

Macで使えるお勧め動画編集ソフト教えて下さい Mac初心者です。目的はビデオ編集です。 有償でもかまいませんので、ソフトを教えて下さい。 出来れば、日本語対応でユーザーが多いソフトをお願いします
https://qr.ae/pNy6MP

ちょっとした作業だったらiMovieで十分なんですよね。最近はFinalCutProx使ってますが切り貼りだけならiMovieが楽かもしれないw

続きを読む

[Quora] サーバ2台構成の場合、PHPのセッションの保存先はどうすれば良いの?

Quora回答シリーズです。

質問

Webサーバー2台でPHPのセッションを使いたいのですが、2台が共通で参照できる領域がありません。DBは負荷の懸念があるので避けたいのですが他に何か方法はありませんか?
https://qr.ae/pNy6h8

回答には書きませんでしたが、以下のようなことも念頭に置いて考える感じですかね。

  1. サーバが落ちた時にセッションに保存したデータが消えても良いか
  2. トランザクションに対応する必要があるか
  3. DB上のデータと連係する必要があるか

あとPHPは最初からmemcahedにセッション情報を保存する機能が付いているのでこれを使うのも手ですかねぇ。

続きを読む

[AWS] Serverless FrameworkでRESTfulAPIを作成する (DynamoDB編)

今回はServerless FrameworkでRESTfulAPIを介しDynamoDBを触ります。

プロジェクトの設定ファイルであるserverless.ymlにCloud Formationの書式でいろいろ定義できるのでテーブルの作成やIAM周りの設定もすべて一元管理できます。テキストファイルでほとんどが完結するのほんと最高ですね。
続きを読む

[AWS] Serverless FrameworkでRESTfulAPIを作成する (外部サーバと通信編)

Lambdaから外部のサーバとHTTPによる通信を行ってみます。

とは言っても特別な制約はありませんので基本的に自由行うことができますが、実行時間によって課金される点に注意が必要です。相手方のサーバからレスポンスが中々返って来ないとその時間分だけ課金されます。またVPCの中にLambdaを置いて実行する場合はインターネットゲートウェイなどの設定が必要になります。

では行ってみましょう。
続きを読む

[Quora] GitHubでスターをもらったら自慢したくならないの?

Quora回答シリーズです。

質問

同僚のプログラマーで目立つ存在でもない人のGitHubを見つけたところ、スター100以上のEmacs Packageを開発していました。私なら自慢したくなるものの、プログラマーは爪を隠すのでしょうか?
https://qr.ae/pNyMyU

後述しますがこの回答が高評価もPVも自己ベストとなりましたw どうして……(;´∀`)
続きを読む

[Quora] AWSを使った受託開発はクライアントにAWSアカウントを作ってもらうべき?

Quora回答シリーズです。

質問

AWS (EC2) を使った受託開発は、納品時にインスタンスを移管することができないので、開発開始時にクライアントにAWSアカウントを作ってもらう必要がありますか?
https://qr.ae/pNyMrE

この質問には以下の参考URLが添えられていたのですが、移管できること自体を理解されているのかよく分からなかったので、一般的なお話をしました。

続きを読む

[Quora] プログラマーはフリーランスを目指すべき?

Quora回答シリーズです。

質問

これからの時代、プログラマーはフリーランスを目指すべきですか?
https://qr.ae/pNyMvz

「会社員」という仕組みはは先人が苦労して積み上げてきた物なので実は多大なメリットがあったりします。そのメリットを捨てるだけの勝算があるのかというお話をしてみました。私も今はフリーでやってますが、早期リタイアしなければ目安として年金が支給される65歳まで続けるかどうかは正直疑問があったりしますw

続きを読む

[Linux] bashで超簡易的な改ざん検知を行いSlackに投げる

小ネタが続いてますが、今回も小ネタですw
Webサイトの改ざん検知を手軽にパパッと行いたい場合、単純にcurlなどで取得したファイルをdiffで比較するだけでも実現できます。

というわけで以下がコード。ここでは最終的にSlackに通知しています。

#!/bin/bash

#
# 簡易的な改ざん検知からのSlack投稿
#

# 対象ページ
TARGET_URL='https://blog.katsubemakito.net/'

# 投稿先のSlack URL
WEB_HOOK_URL='https://hooks.slack.com/services/xxxxxxxx/xxxxxxxx/xxxxxxxxxxxxxxxxxx'

# 保存先ディレクトリ
STORE_DIR='/home/katsube/'


#-----------------------------------
# 最新のHTMLを取得
#-----------------------------------
cd $STORE_DIR
curl -s $TARGET_URL -o current.html

if [ $? -ne 0 ]; then
  echo "Can not get TARGET_URL: $TARGET_URL" >&2
  exit 1
fi

#-----------------------------------
# 前回のファイルと比較する
#-----------------------------------
if [ -f ./prev1.html ]; then
  result=`diff prev1.html current.html`

  if [ -z ${result} ]; then
    text="変化はありません"
  else
    text="<!channel> 変化がありました"
  fi


  # Slackに投げる
  curl -X POST --data-urlencode "payload={\"text\": \"${text}\"}" $WEB_HOOK_URL

  if [ $? -ne 0 ]; then
    echo "Can not post Slack, diff is ${result}" >&2
    exit 1
  fi
fi

#-----------------------------------
# 今回取得したファイルの名称変更
#-----------------------------------
# 1世代残す
if [ -f ./prev1.html ]; then
  mv prev1.html prev2.html
fi
mv current.html prev1.html

非常に簡易的な物ですので、実際に利用する場合は要件に応じてカスタマイズしてください。
続きを読む

[Node.js] JSONをCSV形式でファイルに書き込む – csv-writer

小ネタです。
csv-writerモジュールを使うとJSON的なデータをCSV形式でかんたんに保存することができます。

// CSVにしたいデータ(オブジェクト)
const data = [
  {id:1, title:"吾輩は猫である", view:123},
  {id:2, title:"坊っちゃん",     view:456},
  {id:3, title:"こころ",        view:789}
];

// 準備
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',       // 保存する先のパス(すでにファイルがある場合は上書き保存)
  header: ['id', 'title', 'view']  // 出力する項目(ここにない項目はスキップされる)
});

// 書き込み
csvWriter.writeRecords(data)
  .then(() => {
    console.log('done');
  });

次のようなファイルが生成されます。

$ cat /var/tmp/data.csv
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789

続きを読む

[JavaScript] 既存のオブジェクトにメソッドを追加する

小ネタです。
JavaScriptのグローバルオブジェクトには様々なメソッドが最初から用意されています。例えば文字列を扱うStringには、検索置換するreplace()や一部を取り出すslice()などです。ここに自分で用意したオレオレなメソッドを追加することができます。

結論から言うとprototypeで宣言するだけ。以下の例では文字列中のホワイトスペースをすべて削除する、連続するスペースを1つにまとめてくれるメソッドを追加しています。

/**
 * めっちゃtrimするメソッド
 */
String.prototype.trim2 = function(){
  return(
    this
        .trim()                     // 両端のスペースを削除
        .replace(/\r|\n|\t/g, "")   // 改行とタブを削除
        .replace(/\s{2,}/, " ")     // 複数のスペースを1つにまとめる
  );
}

実際に文字列の後ろにチェーンして利用できるようになります。

" foo   bar ".trim2()  // "foo bar"

なお、利用する箇所よりも前にprototypeで定義しないとエラーとなるのでご注意を。またアロー関数式だとthisの意味が変わってくるのでご注意ください。

続きを読む