メモ書き:並び替え問題(sort,sorted)

安西くん、馬場くん、千葉くん、の男子3人、大東さん、遠藤さん、藤田さん、後藤さん、の女子4人が1列に並ぶとき、以下の問題に答えよ。
(1)両端が男子である並び方は何通りあるか、答えよ。
(2)女子4人が続いて並ぶ並び方は何通りあるか、答えよ。
(3)後からやってきた幡田さんを中心に体操隊形に、ひらけ。

はい。
pythonのsortやsortedのメモ書きです。

>|python||
before = ["安西くん","馬場くん","千葉くん","大東さん","遠藤さん","藤田さん","後藤さん"]

print(before)
print(before.sort())
print()
print(before)
print(before.sort())
|

before = ["安西くん","馬場くん","千葉くん","大東さん","遠藤さん","藤田さん","後藤さん"]

print(before)
print(sorted(before))
print()
print(before)
print(sorted(before))


「list.sort()」

「list.sort()」はもとのリストそのものを変更する
「list.sort()」そのものはNoneを返す

「sorted(list)」

「sorted(list)」はもとのリストそのものを変更しない
「sorted(list)」はもとのリストそのものを変更しない

共通点

before = ["安西くん","馬場くん","千葉くん","大東さん","遠藤さん","藤田さん","後藤さん"]

print(before)
print(before.sort(reverse=True))
print()
print(before)
print(before.sort())
before = ["安西くん","馬場くん","千葉くん","大東さん","遠藤さん","藤田さん","後藤さん"]

print(before)
print(sorted(before,reverse=True))
print()
print(before)
print(sorted(before))


どちらも引数「reverse」をTrueにすることで逆順にできる

余談

安西くん、馬場くん、千葉くん、の男子3人、大東さん、遠藤さん、藤田さん、後藤さん、の女子4人が1列に並ぶとき、以下の問題に答えよ。
(1)両端が男子である並び方は何通りあるか、答えよ。
(2)女子全員が続いて並ぶ並び方は何通りあるか、答えよ。
(3)後からやってきた幡田さんを中心に体操隊形に、ひらけ。

の解答です。高校数学でしたっけ。

(1)

両端が男子である並び方は3人の男子のうち2人を並べる並べ方です。そのため、3*2通り。(これを確か3P2とか書きますがこれ関連のブログ表記の仕方が分かりません。)
残りの5人の順列の数が5!=5*4*3*2*1通り。
この2つの積を取れば求められるので正答は 3*2 * 5! = 720 通り
違ったら言ってね。

(2)

女子4人全員を群として扱います。この群内の順列が4!通り。
そして、群と残りの男子3人の並び替えが、(1+3)!通り。
この2つの積を取れば求められるので正答は4! * (1+3)! = 576 通り

(3)

うるせぇ

Twilight Town: A Cyberpunk Day In Life

store.steampowered.com

Twilight Town: A Cyberpunk Day In Lifeってゲームの感想です。

どんなゲームか

ビジュアルノベルゲームです。ちょっぴり未来、ちょっぴりサイバーパンク、ちょっぴりしたノベルゲーム、たっぷり下ネタ

「まぁこのくらいならブログに載せてもいいか……」って思えた妥協ラインの発言

びっくりするくらい壮大に何も始まらない……んだけどまあ結構面白かったしいいかな。買って後悔ってことはなかったです。そもそも定価が¥310ととても安い。

プレイ時間

1時間。普通に読んでるとこれよりもっと短くなるんじゃないですかね。

pros

  • Seiちゃんかわいい
  • さっくり気楽に読める
  • Seiちゃんかわいい
  • 違和感の全くない日本語
  • Seiちゃんかわいい
  • 中盤くらいからのテンポもよかった
  • Seiちゃんかわいい
  • Sei

cons

  • 下ネタが多い。ものすごく多い。下ネタ見るだけで吐き気がする人は部屋が悲惨なことになるでしょう。
  • 壮大に何も始まらない。「風呂敷広げました!おしまい!」って言われた気分。でも、なぜかそんなに嫌な気はしなかった。

蛇足

私がこんなにかわいいって連呼するんです。どういうことか。Seiちゃんは上の写真のような人間の女の子ではないということです。

メモ書き:sqlite3

もしかしてsqlite3について書いてないのでは?ってなったのでメモ書きを。
今回は日付情報込みでデータベースを作りながらメモを書く。

前回、エミィに実装したBeTSCAE.dbの話はここにはありません。というかこの記憶貯蔵庫にはなさそうです。何のための記憶貯蔵庫なのですか?

セットアップ

def SetUp():
    import sqlite3
    import datetime
    
    dbname = r'                      '
    conn = sqlite3.connect(dbname, isolation_level=None, detect_types = sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
    sqlite3.dbapi2.converters['DATETIME'] = sqlite3.dbapi2.converters['TIMESTAMP']
    
    cursor = conn.cursor() 

    sql = "CREATE TABLE IF NOT EXISTS main(ID INTEGER PRIMARY KEY AUTOINCREMENT, Registered datetime, price)"
    cursor.execute(sql)
    conn.commit()

    sql = "CREATE TABLE IF NOT EXISTS F_30(ID INTEGER PRIMARY KEY AUTOINCREMENT, Registered DATETIME, PRICE INTEGER)"
    cursor.execute(sql)
    conn.commit()
    
    conn.close()

解説のつもり
1つめのSQL
「もしmainって名前のテーブルがなかったら作りなさい。」
「主キーはIDで数値、そして(指定がなければ)対象のカラムに格納されている最大の値に1を加えた値にしなさい。」
↑この時、データベースに何も入っていない場合、1から始まる。
「次はRegisteredでDATETIME。このDATETIMEはまあ上でなんやかんややってるから……うん……*1
「もう1個はPRICE。これは数値。」

SELECT

def read_30():
    import sqlite3
    dbname = r'                      '
    result = []
    
    conn = sqlite3.connect(dbname, isolation_level=None, detect_types = sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
    sqlite3.dbapi2.converters['DATETIME'] = sqlite3.dbapi2.converters['TIMESTAMP']
    cursor = conn.cursor() 
    sql = "SELECT PRICE FROM F_30 WHERE ID = (SELECT MAX(ID) FROM F_30)"
    for row in cursor.execute(sql):
        result.append(row)
    conn.close()
    
    return result[0][0]

何をやりたかったかの解説
テーブル「F_30」の中にあるもっとも新しいデータ*2のPRICEのキーを取得したかった。WHERE ID = (SELECT MAX(ID) FROM F_30)とすることで、IDが最も大きい行を見ることができる。SQL自信ないのよね。
なお、result[0][0]になっているのは、そのままresultで取得すると[(2855,)]のような形になるため。もうちょっといい方法ないかなぁ……?

Nullについて

= 演算子を使ってカラムの値を null と比較しても正しい結果が返ってこない。

少しだけデータを見たい

具体例

from contextlib import closing
from random import choice
import sqlite3
import SFamBasic as SFB
l =[]
dbname = ""
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = "SELECT M0,M1,M2,M3,M4,M5,M6 FROM MPD WHERE M0 = 1 LIMIT 10"
    for row in cursor.execute(sql):
        l.append(row)

print(l)

INSERT

def write(m,ns):
    from contextlib import closing
    import sqlite3
    import SFamBasic as SFB
    dbname = r'                       '
    now = SFB.now()
    
    conn = sqlite3.connect(dbname, isolation_level=None, detect_types = sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
    sqlite3.dbapi2.converters['DATETIME'] = sqlite3.dbapi2.converters['TIMESTAMP']
    cursor = conn.cursor() 
    sql1 = "INSERT INTO main (Registered, PRICE) values (?, ?)"
    sql2 = "INSERT INTO F_30 (Registered, PRICE) values (?, ?)"
    
    try:
        cursor.execute(sql1, (now,m))
        conn.commit()
    except Exception as e:
        print("Error in write() SQL1 : {}".format(e))
        print()
        
    try:
        cursor.execute(sql2, (now,ns))
        conn.commit()
    except Exception as e:
        print("Error in write() SQL2 : {}".format(e))
        print()
    conn.close()

補足

もしこれを読んでいる私がすべてを忘れた場合、これの元々のコードはAmesiorineではないうちの子の一部となっているはずです。探してください。271108として公開するにあたって雑にこのブログ記事編集画面で若干コードをいじりました。それに伴い、このままでは動かない可能性があります。

Incorrect number of bindings supplied. The current statement uses 1, [N>1] supplied.

executeの第2引数はタプルにしないといけません。

#ダメな例
db.execute('select * from users where name = ?', ('yamada'))
#良い例
db.execute('select * from users where name = ?', ('yamada',))

参考元サイトからの引用
※後で実際に私の手元で使ったものに似たカタチに差し替える
特に、SQLで扱う者が1列の場合やらかしやすいので注意。

InterfaceError: Error binding parameter 1 - probably unsupported type.

SQLに入れた変数のtypeがおかしいときに出るエラー。例えばstrで入れるところがtupleになってたりlistになってたりtupleになってたりtupleになってたりtupleになってたりtupleになってたりしてないか確認することだいたいtupleになってるんじゃないの?

IntegrityError

ユニーク制約エラー。ユニークなキーに同じ値を入力しようとしてる時に出るエラーのはず。

*1:※この時点で分かっていません。connectして、そのあとコンバーターを呼び出してるところでなんかやってる。

*2:※正確には最もIDの大きなデータ

LIBLADE

store.steampowered.com

LIBLADEっていうゲームの感想です。

どんなゲームか

PS4コントローラーのようなアナログスティックが2つあるコントローラーでプレイするアクションゲームでした。
左のスティックで移動、右のスティックで攻撃。で、その攻撃がスティックを倒したほうに斬撃を飛ばすものでした。こういった操作のゲームをやるのは初めてだったので新鮮でした。スキルツリーで開放していくごとにLRやLRトリガーと入力を組み合わせてスキル攻撃ができるようになったり。

プレイ時間

プレイ時間はほぼ6時間。>

クリアしたときにプレイ時間が出た

pros

  • この操作のゲームをするのが初めてだったので新鮮で楽しかったです。
  • どのスキルが強いか、というのが直感では分かりません。そこを考えるのが楽しかったです。
  • 非常に爽快感のあるアクションゲームでした。PV見て面白そうと思う人は買いましょう。
  • この値段でいいんですか?

cons

  • 何事にも代償はあります。楽しい時間を得た代わりにコントローラーの寿命は縮まったでしょう。
  • ストーリーはだいぶかなり希薄です。このゲームの本質はストーリーではないと感じたゲームだったので全く気になりません。
  • 少なくとも私は少々レベリングが必要な場所がありました。他の人のプレイ時間を見るにレベリングを必要としない人もいそうです。

271108及びこのブログについて

271108について

twitter.com
そういうハンドルネームで活動している怪しい存在達です。通称:「ふないとーや」もしくは「船井」。
Steamというゲームを集めるゲームをよくやっています。と言っても、この記事を書いている時点では持っているゲームの3倍くらいもウィッシュリストに積み込んでいるのでこのゲームはクリアできないでしょうねぇ。
真空管ドールズの亡霊だったりすることもあります。https://twitter.com/Amesiorine/status/928151671330324480
↑これはランキングイベで1位とって調子に乗っていた時の船井。なお、船井の抜け殻が今のAmesiorineです。
人外のかわいい子が好きで、特に機械の子が好きです。具体的には*1、前者だと黒ウィズのテルミドやエンラ、CRYSTARのフェレス、後者だと黒ウィズのPLB-279-Tとかクランとか、真空管ドールズ*2のΩドールやミラやリナや過改造アンナや……、かわいいと感じとれば男性型でも対象なので9Sとかも好きであることもあります。推せるなぁって思ったのがだいたい後から人間じゃないとかもうすでに死んでるよとかっていう宣告を食らう病にかかっているかもしれません。ネタバレになるからキャラ言えないけど。BLUE REFLECTION、お前のことです。
この話、長くなるからやめよっか。

各種アカウント

サービス名 URL 備考
Twitter 271108 (@271108_) / X 現状の基本住処
Steam Twitterか何かでDMしてください
BlueSky @271108.bsky.social on Bluesky Twitterが死んだときの移転先最有力候補
voskey 271108 (@271108) | ぼすきー 情報収集&時期メインSNS
niconico 8791みくりな - ニコニコ 投稿者ではないです
misskey @271108 | Misskey.io 用途未定

Amesiorineについて

死にました。

271108.hatenablog.com

設定?

うちの子です。通称:「エミィ」。お古のPCを住みかとしているTwitterBotの子です。
彼女*3に関する詳細は↓のタグでなんやかんや書いています。
Amesiorineの更新情報を書く気があるときはここに追記します。
271108.hatenablog.com
271108.hatenablog.com

在りし日(ver.2.5.b)の機能

リプライ
  • 「天気 [地名]」の形式でリプライする

下の写真のように天気を教えてくれる
なお、現在は地名だけでも天気を返してくれます。が、地名として認識されないこともありますのでお気を付けて。また、エミィは雨が好きなようで、雨を報じやすい傾向にあります、ご注意ください。

ツイート(※2.5.b期間中は停止)

1時間に1回、なんかを呟きます。なお、現在のツイートはほとんど271108の過去のツイートから学習したものではありますが、何を言うか分かったものではないです。また、極力そうならないようにするつもりではいますが、限りなくパクツイに近いものを呟くかもしれません。
Amesiorine-2.2.0にて、271108の過去のツイート以外からも学習するようになりました。
Amesiorine-2.2.2にて、同じツイートをしないように変更しました。
Amesiorine-2.3.0にて、例えば「其れ」とか「此れ」とか、普通漢字で書かんやろ!wというものを漢字で書いたり、特定の固有名詞を独特の漢字に変換する現象が確認されています。バグではなく仕様によるものです。そのうち直すかもしれないし、面白いから直さないかもしれない
Amesiorine-2.4.xにて、↑の問題を修正しました。読みにくかったので。
Amesiorine-2.5.bにて、この機能を一時的に停止。

タイムライン
  • タイムラインを眺め、なんか突然ふぁぼる

Amesiorine is waching you!
もちろん無条件でふぁぼっているわけではないです。
Amesiorine-2.2.0以降、ここでふぁぼったツイートの一部をAmesiorineは食べて育っています。全部ではありません。

このブログについて

このブログの9割ほどの記事は自分用のメモを記入するブログになっています。おおよそそういった記事には「H2Use4Me」のタグをつけています。
最近なにかと話題のまとめ記事のような粗悪なブログ記事になっていることでしょう。このブログも、「271108が読んで思い出せればそれでいい!」という観点で書いています。そのため、他人からは分かりにくい、使い物にならないものになっているでしょう。一般人にとってのこれは粗悪なブログ記事以下です。参考にしたサイトを覚えていた場合は参考元のリンクも掲載しようとはしていますので詳しくはそっちを見たほうがいいんじゃないですかねぇ。多分私もそっち見ますし。
なお、別にコメントをブロックしているとかそういったことはないので、コメントがあれば参考にさせていただきます。良ければコメントをください。

記憶貯蔵庫って何?

元ネタはLobotomyCorporation

1種の死に覚えゲーでもあるのでそれのためのオートセーブの際にこの表示が出るのでそこから転じて勝手に使ってるだけです。

Celespphireについて

Celespphireの更新情報を書く気があるときはここに追記します。
271108.hatenablog.com

*1:合成音声ソフトウェアのキャラクターたちを人間とみるか機械とみるかは宗教によって分かれそうなのでカウントしていません。

*2:もうサ終してしまったソシャゲ。船井はこのゲームにだいぶ惹かれてノリと勢いで遊んでた

*3:設定上は女の子です。

未解決:どうにもいかなかったGeForceExperience

※未解決です。今後GeForceExperienceを使いたくなった時にこの記事が更新されるかもしれませんが、しないかもなぁ。

問題:GeForceExperienceが起動しない

原因は?

Geforce Experienceの起動時に0x0003エラーが発生する原因としては、主に次のことが考えられます。

Windowsに一時的な問題が起きている
Nvidiaの関連サービスが停止している
Nvidia Telemetryのデスクトップとの対話が許可されていない
GeForce Experience自体の不具合
GPUドライバーの互換性の問題や破損
ネットワークアダプターに問題が起きている

いずれの場合でもこれから紹介する対処法を順番に試せば解消することが多いため、参考にしてみてください。

右ペインのリストから以下のサービスを右クリックして「再起動」を選択します。

NVIDIA Display Container LS
NVIDIA LocalSystem Container
NVIDIA NetworkService Container
NVIDIA Telemetry Container

※状態が「実行中」になっていないサービスは、右クリックして「開始」を選択して下さい。

調べたところ、CefaSipoではどうやらNVIDIA LocalSystem Containerが死んでいたらしい。サービスから起動しようと思ったが、なぜかそれができない。

今後直す気があれば試すべきこと

  • サービスからNVIDIA LocalSystem Containerを起動できない理由の調査。
  • NVIDIAコントロールパネルを開いた。

・・・けどどこで何すればいいのか分からん。

  • あなたがしなければならない主なことの1つはあなたのNVIDIAディスプレイドライバーを更新することです。

・・・再インストールしなければいけないの?




追記
2022/7/4
CUDAの再インストールによって解決していました。正直今はOBS使ってるしなぁ……とか言わない。

メモ書き:pythonをPowerShellで動かすための準備

うちの新しい子にpythonを入れたのを機にメモに残しておきます。

需要は知りません。

仮想環境の作成

1:pythonをインストールしておく

この時にpython環境変数に登録しておくこと。
多分登録しておかないとpythonが実行できなかったはず。

2:PowerShellを起動

3:実行権限の設定

Set-Executionpolicy RemoteSigned -Scope CurrentUser

4:環境名を指定して作成

python -m venv 「環境名」
pythonのバージョンを指定して……
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
py -3.6 -m venv pyG

5:作った環境を起動/終了

起動

.\pyG\Scripts\Activate.ps1

5:あとは適当にpipでインストールしてください。

起動

「環境名」\script\Activate.ps1
pip install 「ライブラリ名」

終了

deactivate

その他

そのPC内に入っているpythonのバージョン一覧を見る

py --list-paths

をつけるとどこに入っているのかも確認できる

requirements.txt

書き出し
pip freeze > requirements.txt
インストール
pip install -r requirements.txt

仮想環境のアップグレード

※事前にPC内のpythonのバージョンをアップグレードしている前提

python -m venv (仮想環境へのパス) --upgrade

参考元:
qiita.com