コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2025年1月23日 >>> 2025年1月10日
link もっと後

2025年1月23日

首都高バトルSteam版

目次: ゲーム

首都高バトルSteam版を買いました。首都高バトルシリーズは2006年の「首都高バトルX」が出てそれっきりだったので、ほぼ20年ぶりに帰ってきたんですね。


首都高バトル、タイトル画面

私は「首都高バトル0(2001年)」辺りで脱落していたので、20年どころか25年ぶりでした。超懐かしい……。

ゲームシステム

首都高を走っている車やライバル(名前がある奴ら)にパッシングしてケンカを吹っ掛けてレースして、レースに勝てば賞金(?)がもらえます。賞金は車をチューンしたり、車を乗り換えたりするために使います。実に治安が悪い首都高ですね。

と思いきや主人公側からは無限にケンカが売れますが、相手から売ってくることはありません。治安が悪いのは主人公だけだったようです。

走れるコースは、

  • 首都高速都心環状線(C1)
  • 1号羽田線(浜崎橋JCT〜大師JCT)
  • 9号深川線(辰巳JCT〜箱崎JCT)
  • 11号台場線(芝浦JCT〜有明JCT)
  • 湾岸線(辰巳JCT〜大黒JCT)
  • 横羽線(大師JCT〜生麦JCT)
  • 大黒線(生麦JCT〜大黒JCT)

このあたりです。C2はコースにありません。C1の西側や北側にいく路線(池袋線とか)もありません。

序盤の難敵

基本的には道路上に居る車なら全員とバトル可能ですが、負けたくない場合はタクシーとバトルするのはやめましょう。


タクシー


タクシー(拡大)

名無しカーのくせにめちゃくちゃ速くて、序盤に手に入る車ではまずもって勝てません。

アーリーアクセス版

アーリーアクセス版であるせいか、Twitterを見ていると色々バグってる報告がチラホラありますが、普通に遊んでいる分には全く気になりませんでした。

編集者:すずき(2025/02/20 00:27)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年1月11日

Pythonの仮想環境はリネームできない

目次: Python

Pythonの仮想環境(venv)は便利ですが、移動したりリネームすると使えなくなる罠があります。変な仕様ですね。

使えなくなる理由はいくつかありますが、そのうちの1つはvenv/binの下にあるPythonスクリプトのshebangにPythonインタプリターの絶対パスが書かれているからです。なぜこんなことになるのかインストーラ(pip)の実装を軽く調べました。

pipの調べ方

調べ方もメモしておきます。実験用のvenv環境を作成します。

Python仮想環境(venv)を作成
$ python -m venv venv
$ source venv/bin/activate

実験するときはwheelパッケージをinstall/uninstallするのが動作も速いしやりやすいです。wheelでなくともbinの下に実行ファイルをインストールするパッケージであれば何でも良いです。ただし例えばsimplejsonパッケージはbinの下に何もインストールしないので今回の調査には適しません。

wheelパッケージのインストール/アンインストール
(venv) $ pip install wheel
(venv) $ pip uninstall -y wheel

あとはpipパッケージのスクリプトにprint文を入れつつinstall/uninstallを繰り返し、スクリプトのどこで何をしているか調べるだけです。

binの下は絶対パスだらけ

Pythonスクリプトのshebangに絶対パスを書く処理は、pipの下記の部分です。

pipがshebangを生成する処理

# venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py

    def _make_script(self, entry, filenames, options=None):
        post_interp = b''
        if options:
            args = options.get('interpreter_args', [])
            if args:
                args = ' %s' % ' '.join(args)
                post_interp = args.encode('utf-8')
        shebang = self._get_shebang('utf-8', post_interp, options=options)    #★★shebangを得る★★
        script = self._get_script_text(entry).encode('utf-8')
        scriptnames = self.get_script_filenames(entry.name)
        if options and options.get('gui', False):
            ext = 'pyw'
        else:
            ext = 'py'
        self._write_script(scriptnames, shebang, script, filenames, ext)    #★★スクリプトをファイルに書き込む★★

...


    def _get_shebang(self, encoding, post_interp=b'', options=None):
        enquote = True
        if self.executable:
            executable = self.executable
            enquote = False  # assume this will be taken care of
        elif not sysconfig.is_python_build():
            executable = get_executable()    #★★インタプリタ実行パスを得る★★
        elif in_venv():  # pragma: no cover
            executable = os.path.join(sysconfig.get_path('scripts'), 'python%s' % sysconfig.get_config_var('EXE'))
        else:  # pragma: no cover
            if os.name == 'nt':
                # for Python builds from source on Windows, no Python executables with
                # a version suffix are created, so we use python.exe
                executable = os.path.join(sysconfig.get_config_var('BINDIR'),
                                          'python%s' % (sysconfig.get_config_var('EXE')))
            else:
                executable = os.path.join(
                    sysconfig.get_config_var('BINDIR'),
                    'python%s%s' % (sysconfig.get_config_var('VERSION'), sysconfig.get_config_var('EXE')))

...


# venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py

def get_executable():
    # The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as
    # changes to the stub launcher mean that sys.executable always points
    # to the stub on OS X
    #    if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__'
    #                                     in os.environ):
    #        result =  os.environ['__PYVENV_LAUNCHER__']
    #    else:
    #        result = sys.executable
    #    return result
    # Avoid normcasing: see issue #143
    # result = os.path.normcase(sys.executable)
    result = sys.executable    #★★実行中のpythonインタープリタの絶対パスを得る★★
    if not isinstance(result, text_type):
        result = fsdecode(result)
    return result

コメントに書いた通り、実行中のPythonインタープリタの絶対パスsys.executableからshebangを生成します。この処理はvenv/bin以下にインストールされるPythonスクリプト全てに適用され、venv/bin以下のスクリプト全てにPythonの絶対パスが書かれるようです。

編集者:すずき(2025/01/13 16:12)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2025年1月23日 >>> 2025年1月10日
link もっと後

管理用メニュー

link 記事を新規作成

<2025>
<<<01>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント5件

  • link 25年2月10日
    すずきさん (02/13 02:03)
    「解読しました。なるほど、exitの引数が...」
  • link 25年2月10日
    hdkさん (02/12 08:06)
    「あ、すみません、比較元に間違いがありまし...」
  • link 25年2月10日
    hdkさん (02/12 08:01)
    「なるほど、最後に%rdiを0にするのはこ...」
  • link 20年6月29日
    すずきさん (02/12 00:12)
    「お役に立ったようであれば幸いです。」
  • link 25年2月7日
    すずきさん (02/12 00:11)
    「なるほど。動きそうなのになんで動かないん...」

最近の記事20件

  • link 21年12月28日
    すずき (02/20 00:28)
    「[ゲーム - まとめリンク] 目次: ゲーム一覧が欲しくなったので作りました。Wizardry(囚われし亡霊の街)敵が強すぎる...」
  • link 25年1月23日
    すずき (02/20 00:27)
    「[首都高バトルSteam版] 目次: ゲーム首都高バトルSteam版を買いました。首都高バトルシリーズは2006年の「首都高バ...」
  • link 25年2月4日
    すずき (02/16 23:34)
    「[次のWindows 11でE480が見捨てられそう] 今使っているノートPC(Lenovo ThinkPad E480)のC...」
  • link 25年1月30日
    すずき (02/16 22:10)
    「[Thunderbirdの消せないツールバー] Thunderbird 115.0(Supernova, 2023/07/11...」
  • link 25年2月3日
    すずき (02/16 18:37)
    「[不思議なChromeの広告] Google ChromeでYahoo!を見ているとたまにChromeの広告が表示されます。C...」
  • link 25年1月27日
    すずき (02/16 16:37)
    「[Ansibleのencrypted variablesをdecryptする] Ansibleのencrypt_stringで...」
  • link 21年5月22日
    すずき (02/12 00:33)
    「[ベンチマーク - まとめリンク] 目次: ベンチマーク一覧が欲しくなったので作りました。最速のyes不安定なyesyesの高...」
  • link 25年2月10日
    すずき (02/12 00:32)
    「[100万回のHello, World! - 補足] 目次: ベンチマーク前回はループ、再帰なし、1000バイト以下で100万...」
  • link 25年2月7日
    すずき (02/10 02:45)
    「[100万回のHello, World! - バイナリサイズを削って遊ぼう、112バイトから104バイトへ] 目次: ベンチマ...」
  • link 25年1月31日
    すずき (02/03 23:21)
    「[Windowsの日本語フォントはみな長生き] GNOME48からフォントが変わるニュースを見ていて、フォントを作成するのが割...」
  • link 22年12月22日
    すずき (01/19 04:20)
    「[x86とARMとRISC-VでCoreMark対決] 目次: RISC-VCoreMarkを以前(2019年7月5日の日記参...」
  • link 24年9月20日
    すずき (01/14 01:32)
    「[Java - まとめリンク] 目次: JavaJavaのGUIライブラリSwingの本を買いましたSwingでウインドウ表示...」
  • link 17年2月12日
    すずき (01/14 01:32)
    「[IntelliJ IDEAのデバッガと巨大なリスト] 目次: JavaIntelliJ IDEAのデバッガは大変使いやすくて...」
  • link 05年3月16日
    すずき (01/14 01:29)
    「[EclipseでJavaを書いてみようかな] 目次: JavaEclipseの使い方がなんとなくわかってきたのでJavaで何...」
  • link 04年4月29日
    すずき (01/14 01:26)
    「[Swingでウインドウ表示] 目次: JavaせっせとJava + Swingに取り組んでいました。ウインドウの中にウインド...」
  • link 15年6月17日
    すずき (01/14 01:22)
    「[IntelliJ IDEA 14の自動インデント] 目次: JavaIntelliJ IDEA 14のエディタにはコードを選...」
  • link 14年12月28日
    すずき (01/14 01:22)
    「[Javaの継承と委譲] 目次: Java今日、初めて 〜Java 7の単一継承でつまづきました。Javaなら継承じゃなくて、...」
  • link 08年2月14日
    すずき (01/14 01:20)
    「[JDKのソースコードは参考になる] 目次: JavaSunのサイトからJDKのソースコードがダウンロードできます。なんとタダ...」
  • link 04年4月26日
    すずき (01/14 01:17)
    「[JavaのGUIライブラリSwingの本を買いました] 目次: Javaやる気があるうちにJavaのSwing関連の本を買い...」
  • link 18年4月10日
    すずき (01/14 01:14)
    「[C++とJavaの外部イテレータ] 目次: Javaイテレータには、C++方式集合の要素を指すJava方式集合の要素の「間」...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 02/20 00:28