ぶろぐ

日記です

ITP1_2 Branch on Condition

この本、kindleセールの時に買ってみた。

初歩の本だったみたい。けどスラスラ読み進められて楽しい。
C++のiostreamすげー便利。
ScalaでStdIn.readlineを連発するより簡単に標準入力を取り込めるので、プロコン的な奴で便利な気がした。

長方形の中の円 | プログラミング入門 | Aizu Online Judge

#include<iostream>
using namespace std;

// ITP1_2 Branch on Condition
// D: A Circle in a Rectangle
int main() {
        int W, H, x, y, r;

        cin >> W >> H >> x >> y >> r;

        bool isOver = false;

        // X軸
        if (x - r < 0) isOver = true;
        if (W < x + r) isOver = true;

        // Y軸
        if (y - r < 0) isOver = true;
        if (H < y + r) isOver = true;

        if (!isOver) cout << "Yes" << endl;
        else cout << "No" << endl;

        return 0;
}

カジュアルにlivereload

軽くHTMLをコーディングしたかった。
ライブリロードしたいけどgulp使ったりザ・フロントエンドみたいなことはしたくない…
goemon使ってみよーと思ったら超簡単だった。

goemon -g > goemon.yml
# pathとか修正
vim goemon.yml
echo '<script src="http://localhost:35730/livereload.js"></script>' > index.html
goemon --
open index.html
#ファイルを変更したらライブリロードされる
echo "hello world" >> index.html

はかどる

memcachedコードリーディング(1)

memcachedをコード・リーディングしてみることにした。
まずはgithubからコードを取得し、はじめのコミットに戻りコンパイルしてみるところまで。

# コード取得
git clone git@github.com:memcached/memcached.git
cd memcached

# first commit まで戻る
git reset --hard 32f382b605b4565bddfae5c9d082af3bfd30cf02

# ライブラリインストール
brew install libevent
brew install judy

# -staticオプションはcrt0.oがないyoと怒られるので外す
gcc -g -I. -L. -o memcached-debug memcached.c -levent -lJudy

gcc-2.95でコンパイルされることを前提にしたコードのようで、返り値にintが定義された関数のreturnで0を省略するとコンパイルエラーになってしまう。微修正。

git diff
diff --git a/memcached.c b/memcached.c
index 8ba15e9..d1e9fc2 100644
--- a/memcached.c
+++ b/memcached.c
@@ -758,7 +758,7 @@ int try_read_network(conn *c) {

 int update_event(conn *c, int new_flags) {
     if (c->ev_flags == new_flags)
-        return;
+        return 1;
     if (event_del(&c->event) == -1) return 0;
     event_set(&c->event, c->sfd, new_flags, event_handler, (void *)c);
     c->ev_flags = new_flags;
@@ -1190,6 +1190,6 @@ int main (int argc, char **argv) {
     /* enter the loop */
     event_loop(0);

-    return;
+    return 1;
 }

telnetでつなぐ

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

set hoge 0 0 3
foo
STORED

get hoge
VALUE hoge 0 3
foo
END

stats cachedump 13 1000
ITEM hoge [3 b; 1461908919 s]
END

動いとる^^

無料SSL証明書のLet’s Encryptを使ってみた

nginxでlet's encrypt使ってみました。

# 準備
git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt
./letsencrypt-auto --help

# nginxに設定(letsencryptとやり取りするために使う)
location ^~ /.well-known {
    alias /var/letsencrypt/.well-known;
}

# ディレクトリ作成
mkdir /var/letsencrypt

# 作成
./letsencrypt-auto certonly --webroot --webroot-path /var/letsencrypt -d takuan.me

# 証明書
/etc/letsencrypt/live/takuan.me/fullchain.pem

#秘密鍵
/etc/letsencrypt/live/takuan.me/private.pem

的な感じで。
90日で期限が切れるので、cron等で自動更新させるのが通っぽい。

0 2 1 * * $SCRIPT_PATH/letsencrypt-auto --force-renew certonly --webroot --webroot-path /var/letsencrypt -d takuan.me >> $LOG 2>&1

無料のSSL証明書、便利ですなー。

CentOS 7のFirewall

iptablesに代わってfirewallというのができたらしい。

#設定確認
firewall-cmd --list-all

# httpsを許可(一時的に)
firewall-cmd --add-service=https --zone=public

# httpsを許可(永続的に、再起動しても適用)
firewall-cmd --add-service=https --zone=public --permanent

# httpsを許可(サービスを削除、非許可にする)
firewall-cmd --remove-service=http --zone=public

CodeDeploy + Github + AutoDeployでくっそハマった。

Amazonの英語のチュートリアルをおうだけなんですねどねー
英語読めないわしにはつらい。
所感をメモっとくと・・・

  • EC2にはCodeDeployのAgentをインストールしないと行けない(これは必須みたい)
  • appspec.yml にdeploy script的なものを呼び出す記述をするが、ここでエラーになると原因が追いづらく感じたので小さく作っていったほうがいい(慣れの問題?ログがわかりづらい気がした。Agentのログが出ているのでちゃんと見ればそれで原因は追えそう)
  • GithubAWS CodeDeployが直接連携できる。AccessKeyとか渡すので、連携用にIAM作るのがベター。
  • トリガーにはGitHub Auto-DeploymentとかいうService使う。デフォルトのブランチしかhockできないっぽい。
  • デフォルト以外のブランチでもCodeDeployフックさせるなら適当なCIサービス使わないとダメかなー
  • AWSCodeDeployRole をEC2のiam-roleに紐付ける
  • ログの場所 /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log

github.com

基本amazonのdocument見ればok。なんとなくどこまでやってくれるサービスなのか掴めてなかった。

一瞬hockの方法がわからなかった(Github -> CodeDeployの連携ができることを知らなかった)ので、Webhock -> API Gateway -> Lambda -> CodeDeploy ? とか思ってめんどくせーなーと思ったけどそんなことなかった。

まとめ

  • CodeDeployとGithubを組み合わせて、JenkinsやCI不要で自動デプロイができる。
  • また、AutoScalingグループに対してローリングデプロイみたいなことができるのでこれ便利。