かんちゃんの備忘録

プログラミングや言語処理、ゲームなど知的好奇心のための備忘録(個人の感想)です。

スマブラSPのオンラインの入力遅延と付き合う

本記事は、スマブラ Advent Calendar 201920日目の記事です。

スマブラ発売から1年が経ちましたが、全く飽きる気配がなくこの面白いゲームにどれだけ時間を使ってしまうのか、と恐怖を覚えているほどです。

オンライン*1ばかりやっていたのですが、最近は宅オフやオフ会に少しずつ参加するようになり、オフラインとオンラインの両方でプレイするようになりました。

オンラインで遠方の友人と対戦に励むことができるのは、非常に素晴らしいことです。 しかしながらスマブラのオンラインの遅延で一般的に言われている6F(0.1秒)の差は、私にとっては頭を混乱させる要因の一つです。 今回は、具体的にオンラインにどう付き合うのがいいのかを自分が混乱しないためにできる限り考察します*2

2020/05/05追記:オンラインの遅延フレームの正確な測定については、スマブラSPECIAL検証Wikiをご覧ください。検証によると5F遅延のようです。

※オンラインでの遅延フレーム数6Fには検証ソースがないこと、入力可視化による簡易調査は誤差が考えられるため、表現を訂正しました。申し訳ありません。

※ PKファイヤーの話を修正しました。

*1:5体なんとかVIP程度のレベルです。

*2:遅延があるからオンラインを敬遠するというのではなく、オンラインでいかに楽しむかをよく考えるという話です。

続きを読む

朝起きるためにやることやらないこと

夜型人間 Advent Calendar 2019 10日目の記事です。

全員が正確な時計を持ち、カレンダーで予定を分単位で記録でき、いつでも連絡を取ることのできる世の中では、8時集合と言えばそれは08:00(JST/UTC+0900)集合なのです。

ニワトリが泣き出したらだとか、日が昇ったらといったアバウトな時間管理ではありません。

つまり、定められた時刻に移動し出社を勤しむには、朝のある時刻までに起きる必要があります。

今回の記事では、朝起きるために意識してやるやらないとしていることをまとめました*1

*1:実験をしたり論文を読んだりとしっかり根拠づけしたわけではなく、自分がいいと思い込んでやっていることです。

続きを読む

1年ぶりのXonsh

本記事は Xonsh Advent Calendar 2018の16日目の記事です。

昨年の Advent Calendar 以降使っていなかった Xonsh について約1年ぶりに触ります。

ほんと少しでも書いてくれるだけでハッピー。

ということで、よりハッピーになっていただきたいのでほんの少し書きました。

Pythonのモジュールが提供する機能をパイプラインに組み込めれば便利そうだったので、コマンドを作ってみました。

導入

インストール

$ pip install xonsh

起動

$ xonsh

コマンドを作る

~/.xonshrc に関数とそのエイリアスを定義することで、 xonsh が認識します。

def _hoge():
    print("fuga")


aliases["hoge"] = _hoge

aliases が対話型シェル環境からコマンドとして利用できるコマンド群のエイリアスとなります。

関数の引数には、 argsstdin といったコマンドに対する引数や標準入出力などを定義できるようです。

こんなコマンドだと便利?

中央値や最頻値をさくっと出せると便利かもしれないと思い、コマンドを定義してみました。

# ~/.xonshrc
import statistics


def _mean(args, stdin=None, stdout=None):
    print(
        statistics.mean((float(line.strip()) for line in stdin)),
        file=stdout
    )

def _mode(args, stdin=None, stdout=None):
    print(
        statistics.mode((line.strip() for line in stdin)),
        file=stdout
    )


aliases["mean"] = _mean
aliases["mode"] = _mode

上記の関数を試してみます。

$ source ~/.xonshrc
$ seq 10 | sort -r | mean
5.5
$ echo "1\n2\n3\n2" | sort -r | mode
2
$ echo "ほげ\nふが\nほげ" | sort -r | mode
ほげ

複数列に拡張していくのは、引数の管理が大変そうです。 エラー処理も割と大変そうなので、デコレータ作るとボイラープレート減らせるのかな?と思いました。

シンプルに cut コマンドと組み合わせることで、わざわざファイルを確認するためにコードを書かなくても済みそうです。

MeCabの使い方の備忘録

Sansan Advent Calendar 2018 の1日目の記事です。

いつもお世話になっているMeCabについての備忘録です。

インストール、辞書、辞書整備、Pythonやシェルでの取り扱いまで、使い方をまとめます。 マニュアル読めば分かるよ!というかたは公式マニュアルが充実しているのでそちらを読むのがいいかと思います。

続きを読む

固定回線(IPoE方式のv6アルファ)を引いた

上京してから1年半ほどWiMAXを利用していたのですが、いろいろと限界を感じたため固定回線を引きました。

高速と言われているIPoE方式にしたのでそのまとめです。

結論としては、快適な回線を得ることができました。

  • 固定回線を引くことにしたきっかけ
  • OCN 光 v6アルファ パッケージにした
  • 開通まで1週間半
  • WiMAXとv6アルファの速度比較
  • 開通して困ったことと対策
  • まとめ

固定回線を引くことにしたきっかけ

箇条書きで挙げてみます。

  • Google DriveDropboxなどストレージへのアップロードが非常に遅い
  • 帯域が細いのか複数台での利用が厳しい(PS4で何かしら更新しているときは別の機器からは利用がほぼできない)
  • 速度やPINGが安定せずゲームが厳しい(スプラトゥーン2にハマったので安定した回線がほしかった)
  • 3日で10GB制限&シークタイム削減のために動画は480pで閲覧していた
続きを読む

サポーターズ勉強会でPythonでのスクレイピングについて登壇しました

10月10日に「Pythonで始めるスクレイピング」というタイトルでサポーターズColabで登壇しました。

発表内容の概要と振り返りを書こうと思います。

発表内容

初心者を対象に、Python言語によるWebクローリングとスクレイピングについて説明とハンズオンを行いました。

前半はスライドを用いた説明です。

導入は、そもそものクローリングとスクレイピングの概念について混同しがちな部分であるため、図を用いて整理しています。 実際にPythonライブラリを用いてページのフェッチとスクレイピングを行う方法として、requestsモジュールやBeautifulsoupなどメジャーなライブラリを紹介しました。

中盤は、Scrapyの概要やヘッドレスブラウザでの描画について述べました。 また、実際にクロールする際のマナーについてもアクセス数や頻度に注意することや、連絡先を明記することなど気をつけることがたくさんあります。

後半はGoogle Colabratoryを使ったハンズオンです。

前半のスライドの内容を実際に動作させることができます。

振り返り

良かった点は、「こんな方にオススメ」という人にしっかり伝わる資料ができたことだと思います。 スクレイピングを始めたいけど一歩目が難しい人の後押しにしっかりなったかと思います。

いまいちだった点は、時間配分です。 後半のハンズオンが非常に駆け足になってしまいました。 スマホで時間を確認すればよかったのですが、PCはスライドショーモードにはなっておらず時計が見えませんでした。 また、会場の時計も見つけることができず時間配分が感覚になってしまいました。 よほど練習した資料であれば何となくでも時間はわかるものですが、今回はそこまで詰め切れていませんでした。

ただ、コメントをかなり丁寧に書いたつもりですので、持ち帰ってじっくり見ていただけるかと思います。

ご参加いただいたみなさまありがとうございました

スクレイピングを始めてみたい人や、機械学習の学習データとしてあれこれしたい人にとってぴったりの勉強会だったかと思います。

会場の準備や勉強会登壇の機会を与えてくださいましたサポーターズCoLabさんには感謝しております。

最後に、ご参加いただいたみなさまありがとうございました。

Gitレポジトリ内でのNameやEmailの設定

一つのGitアカウントで、会社と個人の両方を使っています。 そうした場合に、会社のレポジトリでは会社のEmail、個人のレポジトリでは個人のEmailをコミットログに残しておきたいです。

そのための設定の備忘録です。

localで設定

単純です。 作業対象のGitレポジトリだけに有効なローカルの設定を適用します。

$ cd git_repository
$ git config --local user.name "First Last"
$ git config --local user.email name@domain

上記の設定により、レポジトリルート以下の .git/config ファイルに次の内容が記述されます。

[user]
        email = name@domain
        name = First Last

どうしてlocalで指定するのか

あるディレクトリ以下のレポジトリに対しては、ある設定ファイルを適用するという方法があります。 この場合、設定したことを忘れて影響範囲がよくわからなくなりそうです。

globalに設定するとlocalで指定することを忘れてしまいます。

この2つのパターンから、globalには設定せずに、localで指定するのが良さそうと考えました。

local適用パターンでちょっと運用してみようと思います。