読者です 読者をやめる 読者になる 読者になる

FROM ME TO YOU

oh my bizarre life !!

例外処理のメモ

namespace ConsoleApp1
{

    class MyException: Exception
    {
        public MyException(string msg): base(msg) { }
    }

    class Program
    {
        static void Div(int a, int b)
        {
            try
            {
                if (a == 0 | b == 0)
                {
                    throw new MyException("0除算です");
                }
                Console.WriteLine(a / b);
            }
            catch(MyException e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.ReadLine();
            }  
        }

        static void Main(string[] args)
        {
            Div(10, 0);
        }
    }
}

さくらのスタートアップスクリプトで自分用Mastodonをたててみた

fmty.cloud

今週はじめくらいから一気に火がついたマストドン
さくらがスタートアップスクリプトを提供はじめたとのことで早速試してみました。

cloud-news.sakura.ad.jp

とりあえずサブドメインが使えないのでお名前.comで適当なドメインを取得。

あとはさくらの手順でセットアップ。
とりあえずAPIトークンとDNSまで。

さくらのDNSの設定が終わったらお名前.comの方のここを変更。

f:id:fmty_keita:20170419235619j:plain

DNSが終わったらサーバー構築。メモリ1Gだとビルドでコケるとかいう噂があったのでとりあえず1コア4Gで開始。

30分くらいしたらマストドンにアクセスできました。

簡単。

cronの設定

デイリーバッチの登録が必要らしい
下記でcronを新規登録

crontab -e

下記を記載

RAILS_ENV=production
@daily cd /home/mastodon/live && /home/mastodon/.rbenv/shims/bundle exec rake mastodon:daily > /dev/null

vimの使い方は下記を見ました。

よく使う Vim のコマンドまとめ - Qiita

ちゃんと走ってるのか不安になるのでそのうちログとかみたい。

自分用に変更

今回は自分専用のインスタンスにしたいのでSSLでサーバーにつないでシングルユーザーのコメントアウトを外す。

ファイルパスはこれ(めっちゃ探した)

cd /home/mastodon/live/
vi .env.production

変更箇所はここのコメントアウトを外す。

SINGLE_USER_MODE=true

viの操作もわからなかったのでぐぐりながら作業した。とりあえずこれだけ覚えた。

  • iとescで編集モードとコマンドモードが切り替えできる
  • 上書きはコマンドモードで「:wq」
  • 上書きしないで閉じるのは「:q!」

再起動の仕方がわからないのでさくらのコンパネから再起動しましたw

あとは管理者権限を与えたいんだけど、docker-composeを使わない設定方法がわからない。

現時点ではweb上の情報はだいたいdockerを使ってるので、さくらのスタートアップスクリプト使うと役にたたなくなる。

この辺りの情報がもっと増えるといいなぁ。

管理者になろう

su - mastodon #マストドンユーザーでログイン
cd ./live/bin/
RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=fmty

この前にも色々試したので、どれが正解かわからない。

yum install rubygems #gemがインストールしたかった
gem install rake

アップデート

cd /home/mastodon/live/
git fetch
git checkout -b production refs/tags/vx.x.x

サーバーをリブートせずに適用したい

ハマったところ

  • Linuxわからん!
    viなにそれ美味しいの。設定ファイルどこにあるの。ディレクトリ構造どうなってるの。ってレベルなのでお察しです。
  • マストドンの認証メールが迷惑メールに入っててかなり迷走した
  • サーバーを再構築したら接続エラーになった。
    下が原因だった。一回さくらのDNS設定削除してお名前.comのDNSも初期値に戻して、改めてやったらうまくいった。

※本スクリプトを実行した際に、さくらのクラウドDNSで管理しているゾーンのZone APEXにレコードを追加します。対象のゾーンにレコードが登録されている場合、スクリプトは停止し、セットアップが中断されます。レコードが登録されていない専用のドメインをご用意ください。

ひとりインスタンスを使ってみた感想

「素直にpawooかjpあたりに登録しとけ」です。

ローカルTLは該当インスタンスに属してるユーザーが表示されるので当然自分だけだし、連合TLも「該当インスタンスに属しているユーザーがフォローしているユーザー」が表示されるので、自分のTL・ローカル・連合の3つが全く同じ状態になるという…

マストドンに思うこと

ネルフの災害情報はtwitterにはできないマストドンらしい素晴らしい使い方だと思う。
ドメインでの発信元保証、アカウントをわけて情報の粒度を細かくして必要な情報を必要な人に届ける、重要な情報はアカウントがそれぞれにブースト(RT)することで情報を共有する。

マストドンは個人が使うよりも企業アカウントとの親和性が高そうな印象がありますね。

その他

やっぱりインスタンス毎にアカウント作る面倒なので、インスタンスをフォローするような機能が欲しいです

感謝

某氏→クーポンありがとうございました!

リモートフォローぷりーず

fmty.cloud

継承のサンプル

    // 継承
    // User -> AdminUser

    class User
    {
        public string name;

        public User(string name)
        {
            this.name = name;
        }

        public virtual void SayHi()
        {
            Console.WriteLine($"Hi!{name}");
        }
    }

    class AdminUser : User
    {
        public AdminUser(string name) : base(name)
        {

        }

        public void SayHello()
        {
            Console.WriteLine($"Hello!{name}");
        }

        public override void SayHi()
        {
            Console.WriteLine($"AdminHi!{name}");
        }
            
    }


    class Program
    {
        static void Main(string[] args)
        {
            var tom = new User("tom");
            Console.WriteLine(tom.name);   // tom
            tom.SayHi();
            var Bob = new AdminUser("Bob");
            Console.WriteLine(Bob.name);   // Bob
            Bob.SayHello();
            Bob.SayHi();
        }
    }

コンストラクタ

    class User
    {
        public string name;

        // インスタンス生成時の処理 → コンストラクタ

    
        public User(string name)
        {
            this.name = name;
        }

        // 引数の数で処理分岐 → オーバーロード
        //public User() 
        //{
        //    name = "Nobody";
        //}

        // 引数なしの場合は下のようにも書ける
        public User(): this("Nobody")
        {
            //this.name = name;
        }

        public void SayHi()
        {
            Console.WriteLine(this.name);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            var user = new User();
            Console.WriteLine(user.name);   // me
            user.SayHi();
            user.name = "keita";
            user.SayHi();
        }
    }

引数名を指定できるのは知らなかった

        static void SayHi(string name, int age = 23) // namaeは引数やパラメーターと呼ぶ
        {
            Console.WriteLine ($"Hi! {name}:{age}");
        }

        static void Main(string[] args)
        {
            
            SayHi("tom");       // tom:23
            SayHi("Bob", 30);     // Bob:30
            SayHi(age: 20, name: "stave"); // stave:20

        }

メソッド一文で書けるらしい

ラムダ式とか匿名メソッドとかよくわかってないのでしっかり理解していきたい

        //static string SayHi()
        //{
        //    return("Hi!");
        //}

        static string SayHi() => "Hi!";

        static void Main(string[] args)
        {
            // method
            Console.WriteLine(SayHi());

        }

Visual Studioでのまとめてコメントアウト

Ctrl+Kの次にCtrl+Cでコメント

Ctrl+Kの次にCtrl+Uでコメントアウト