Mastodonにプルリクしてみました。

辛い。
でもやる価値があるとおもうんだよ。
コミッターに載れたらめっちゃ嬉しいやん!

機能は簡単なもので、間違えてavatar消してしまったときにavatarを再取得するって言うrake task。

  • 手元の環境のrubocopが上手く動いていなくてそこで怒られる。
  • ループをnextで飛ばせと怒られる。

→辛い。
でも、たしかに言われたことやるとループの深さも浅くなって見通し良くなった。
これは力がつくね。rubocopは手元の環境をもうちょっときちんとしてそこでつまづきたくないね。
ともかくMastadonから目が離せない今日このごろ。

ていうかブランチ切らないでmasterで作業していたことにプルリクしてから気づく有様。
ちょっと無様だねー

どうか本家に取り込まれますように。お願い!

github.com

Mastodonのアップデートv1.2へ(追記あり ほぼ無停止更新)(docker system prune -a追記)

dockerのデプロイ、アップデートの方法がごっそり消えとる(キレ気味)
サンクス@nukosu@pao.moeさん
Main README developer documentation · Issue #1830 · tootsuite/mastodon · GitHub
短絡的。documentの方を整備してから変更してよ。あんまり英語読みきれてないけどお前のshouldとか知らん。
仕方がないので
README.mdを掘る
github.com
docker-compose.ymlとか編集しているので退避しないとだめね~
以下、流したコマンド

git stash save
git pull
git describe --tags `git rev-list --tags --max-count=1`
# versionを確認
git checkout -b v1.2 $(git describe --tags `git rev-list --tags --max-count=1`)
git checkout -b v1.3.1 refs/tags/v1.3.1 #こっちが良いかも #追記 2017/04/28
git stash list
git stash list -p
git stash show stash@{0}
git stash apply stash@{0}
docker-compose stop
docker-compose build
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails assets:precompile
docker-compose up -d
#追記
git stash drop stash@{0}

以上です。
次はdb/redisもバックアップすべきですねー。

2017/4/29 追記 1.3.1

2017/6/24 追記 1.4.6

1.3.1への更新がありました。
あれから考えたのですが、Linuxはプロセスを立ち上げる際に必要なファイルを別領域にコピーして使うので、起動しながらapacheをビルド、とかできるわけです。で、ビルド後restartして最新へ、とかできる。dockerも同じなはずで、今回は、バックアップ取ってから起動しながらdocker-composeのbuildをためしてみました。行けました。
以下、流したコマンド。スクリプトにして一気に行ける感じがでてきました。

2017/6/24 追記 1.4.6

docker system prune -aを追記します。いらないイメージ消しておきましょ。

git stash save
git pull
git checkout -b local$(git describe --tags `git rev-list --tags --max-count=1`) $(git describe --tags `git rev-list --tags --max-count=1`)
git stash apply stash@{0}
docker-compose build
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails assets:precompile
docker-compose stop && docker-compose up -d
git stash drop stash@{0}
docker system prune -a

基本ほぼ無停止で行けました。

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がよくわからなくて辛かったよ。

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

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

Unity5の教科書 8章

おわりー。
レベルデザインはあまりふみこまないようにした。
もっといろいろできるのだろうけど。
とりまUnity触れまーす、初心者でーすぐらいには行けたかと。
Unity WebGL Player | AppleCatch


github.com

次はDeepLearningかなー

値渡しと参照渡し

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

<?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