ゴールデンウィークにTwitchでゲーム配信を始めた話|古いMacBook Pro・PS4・OBSで配信環境を作ってみた

Image
古いMacBook ProでもTwitch配信はできる?PS4・Switch2用にOBS配信環境を作ってみた ゴールデンウィークで時間があったので、以前から少し興味があったTwitchでのゲーム配信を始めてみました。 アカウントは うえはら000 。 主にストリートファイター6や、趣味で遊んでいるゲームを配信しながら、だらだら話すようなスタイルで配信しています。 この記事では、実際にTwitch配信を始めるまでに用意した機材、古いMacBook Proで配信してみた感想、配信を始めて分かったことをまとめます。 これから「家庭用ゲーム機で配信を始めてみたい」「古いMacでも配信できるのか知りたい」という人の参考になれば嬉しいです。 配信を始めたきっかけ もともと格闘ゲームは好きで、ストリートファイター4シリーズをそれなりに遊んでいました。 スーパーストリートファイターIV AE Ver.2012の頃は、家庭用でやり込みつつ、休みの日に新宿のタイトーステーションにも遊びに行っていました。 当時は、AE時代と比べて大幅に弱体化された後のユンを使っていて、一瞬だけグランドマスターに到達したことがあります。 とはいえ、グランドマスターだった期間は本当に一瞬で、実際にはマスター上位からグランドマスターに届くか届かないかくらいの位置にいることが多かったです。 ちなみに、強かった頃のユンはほとんど触っていません。スパ4AEの頃はまだライトゲーマーで、フェイロンを使っていました。 その後、Ver.2012でユン・ヤンが大きく弱体化されたのですが、対戦しているうちに「弱くなったとはいえ、まだかなり強くないか?」と思うようになり、試しに使い始めました。 使ってみると思った以上に自分に合っていたので、そのまま使い続けて、最終的にグランドマスターに届くところまでやり込みました。 その後、ウルトラストリートファイターIVが発表され、ユンに有利なシステム(赤セビ)やキャラ自体の強化も追加されました。ユンは再び強キャラの一角に戻ったのですが、当時は大学受験の時期と重なってしまい、ほとんどプレイできませんでした。 受験が終わった後も、大学生活や社会人生活がそれなりに忙しく、気づけばストリートファイターからはかなり離れていました。 他のゲームはちょくちょく遊んでいたものの、ストリートファイターを本格的...

Pythonで学ぶスタック

スタック

について改めて使い道を模索してみたのでメモ。

スタックについて

底のある箱の中に積み木を積んでいくイメージ。
いわゆるLIFO(last in first out)、最後に入れたものを最初に取り出す、というデータ構造。

要素を取り出す時の操作をpop、要素を入れる時の操作をpushという。

スタックを連結リスト、もしくは配列で実装した場合のpop、pushの操作はO(1)の計算量となります。

Pythonでのスタック利用例

Pythonでの表記法と注意点

他の言語と同様に、PythonでもStackが組み込み関数として用意されています。

ここで注意すべきなのは上記で用意したPythonでリストを用いてスタックを表す場合にはpushではなく、appendを使う点です。

スタックとして使う場合は以下のように要素の出し入れを行います。

>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

他にもスタックには様々な使い道があります。

連結リストの要素を逆転させる

def reverse_linked_list(head):
    nodes = []
    while head:
        nodes.append(head.data)
        head = head.next

逆ポーランド記法の計算

def evaluate_rpn(expression):
    inter_results = []
    delimiter = ','
    operators = {
        '+':lambda y, x: x + y,'-':lambda y,x:x-y,
        '*':lambda y,x:x*y,'/':lambda y,x:x //y
    }
    
    for token in expression.split(delimiter):
        if token in operators:
            inter_results.append(operators[token](inter_results.pop(),inter_results.pop()))
        else:
            inter_results.append(int(token))
    return inter_results[-1]


expression = "3,4,+,2,*,1,+"
evaluate_rpn(expression)
# 15

ディレクトリ構造の短縮化

def shortest_path(path):
    if not path:
        raise ValueError("パスが与えられていません")
        
    path_names = []
    if path[0] == '/':
        path_names.append("/")
    for token in (token for token in path.split("/") if token not in ['.','']):
        if token == '..':
            if not path_names or path_names[-1] == '..':
                path_names.append(token)
            else:
                if path_names[-1] == '/':
                    raise ValueError("パスエラー")
        else:
            path_names.append(token)
            
    result = '/'.join(path_names)
    return result[result.startswith('//'):]


path = "/usr/lib/../appication/../bin/"
shortest_path(path)
# '/usr/lib/appication/bin'        

この様に様々な用途に使えます。
同様にキューについてもその内書く予定です。

Comments

Popular posts from this blog

【OSLog】How to log a Swift project

Principles of UX/UI Designでこんなことを学んでいるよ 第一週 User-centerd design①

Swiftで使うQueueのテンプレート