MastodonをDB永続化忘れて起動したけど最小限の犠牲で済ませた

要はdocker psとdocker cp

hoge@ubuntu16:~/tmp/bk$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                              NAMES
5b96312a6b26        mastodon_web         "bundle exec rails..."   About an hour ago   Up About an hour    0.0.0.0:3000->3000/tcp, 4000/tcp   mastodon_web_1
960bb0ec5396        mastodon_streaming   "npm run start"          28 hours ago        Up About an hour    3000/tcp, 0.0.0.0:4000->4000/tcp   mastodon_streaming_1
e5436243c18a        mastodon_sidekiq     "bundle exec sidek..."   28 hours ago        Up About an hour    3000/tcp, 4000/tcp                 mastodon_sidekiq_1
69e8481531c6        redis:alpine         "docker-entrypoint..."   28 hours ago        Up About an hour    6379/tcp                           mastodon_redis_1
8c5100e9fec4        postgres:alpine      "docker-entrypoint..."   28 hours ago        Up About an hour    5432/tcp                           mastodon_db_1
hoge@ubuntu16:~/tmp/bk$ docker cp mastodon_db_1:/var/lib/postgresql/data ./data

あとはdockr rm dbとかしてやればdocker-compose.ymlの設定が反映される

  db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - /path/to/postgres/data:/var/lib/postgresql/data

最小限の犠牲(3トゥートぐらい)ですんだ。
泥臭いですね!

Mastodonのインストール

  • Docker初挑戦
  • 動的IPなのでMydnsでドメイン取得
  • nginxではなくApacheで。NameBaseVirtualHost
  • rvm、nvm
  • let's encrypt

いろいろ四苦八苦してサービス提供開始できました。Dockerがむずい。

mastdn.lovesaemi.daemon.asia
是非きてください。

インストールは公式と
github.com
このqiitaでなんとかなる
CentOSUbuntuの読み替え必要だけど基本同じ
qiita.com
MyDnsは
dotnsf.blog.jp
rvm、nvmはググって。

最初はサブディレクトリ運用出来ないかで四苦八苦した7時間ぐらい→無理と判断
ドメイン取ってすんなり3時間ぐらいで色々成功。
SparkPostがよくわからなくて辛かったよ。

本当は適切なドメインをお金だして買うべきなんだろうけど無料に固執した。
構築はとても楽しくて没頭しました。

サインアップして盛り上がって欲しいな。

値渡しと参照渡し

値渡しだとコピーされるので値は変更されない。
参照渡しだと中身を変更できる。
ただし、参照型のオブジェクトだと常に参照渡しの模様。
あえて参照渡しをする意味も無い気がします。

<?php
$str = "hoge";

// 値渡し
function mod($str){
    $str .= "fuga";
}

// 参照渡し
function modref(&$str){
    $str .= "hoge";
}

mod($str);

echo $str . "\n"; // => hoge

modref($str);

echo $str . "\n"; // => hogehoge

// ただし、参照型だと常に参照渡し
$obj = new stdClass();
$obj->x = "10\n";

echo $obj->x; // => 10

function mod2($obj){
    $obj->x = "20\n";
}
mod2($obj);
echo $obj->x; // => 20

参照渡しについては下記によくまとまってる。
qiita.com

JavaScriptのカスタムイベントとプロトタイプベースのオブジェクト指向(継承は知らん)

JavaScriptのカスタムイベントとプロトタイプベースのオブジェクト指向(継承
は知らん)

<html lang="ja">
  <head>
    <meta charset="utf-8">
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
  </head>
  <body>
    <div id="d1" style="background-color:red;height:100px">
      ターゲット1(生JavaScript)
    </div>
    <div id="d2" style="background-color:yellow;height:100px">
      発生源1(生JavaScript)
    </div>
    <div id="d3" style="background-color:green;height:100px">
      ターゲット2(jQuery)
    </div>
    <div id="d4" style="background-color:lightblue;100px;height:100px">
      発生源2(jQuery)
    </div>

    <script>
      // イベント
      // 生JavaScript
      var d1 = document.getElementById("d1");

      d1.addEventListener("myevent",function(){
         alert("myevent fired");
      });

      var d2 = document.getElementById("d2");
      d2.addEventListener("click",function(){
        var event = document.createEvent("HTMLEvents");
        event.initEvent("myevent",true,true);
        d1.dispatchEvent(event);
      });
      // イベント
      // jQuery
      $("#d3").on("my-ev",function(){ alert("my-ev fired"); });
      $("#d4").on("click",function(){
        $("#d3").trigger("my-ev");
      });

      // プロトタイプベースのオブジェクト指向(継承とか知らん)
      var Hoge = function(){};
      Hoge.prototype.bar = function(){ console.log(this.x); };
      Hoge.prototype.x = 999;
      var obj1 = new Hoge();
      obj1.x = 10;
      var obj2 = new Hoge();
      obj2.x = 20;
      var obj3 = new Hoge();
      obj1.bar();
      obj2.bar();
      obj3.bar();
    </script>
  </body>
</html>

RubyとJavaで同じようなプログラムを書いたけど結局どちらが正解なのかわからん

RubyJavaで同じようなプログラムを書いたけれど一長一短。
Rubyはまぁ、あとからメンテする人がいないので実戦投入できないけれど。
テストで流れを確認するにはRubyの表現力はいい感じだけどJava(Eclipse)の補完も捨てがたい。
今回はRubyのヒアドキュメントが良いのよね。