めも書き:formatについて

0:はじめに

別に慈善事業でこのブログは動いているわけではありません。私(と船井)のためだけに刻印され続けている記憶貯蔵庫です。
正直、formatでできることなんて無限にある(誇張表現)ので、何度も使おうと思って忘れて調べたことだけ追記してゆくつもりです。それゆえに私以外このページを求めることはないでしょう。

はい、というわけでformatについて。

1:ゼロ埋めをしたい。

よく、ファイル名に使う20220215のような年月日の文字列を作りたい。けどstrにしてすべて足し算したら「2022215」のように一桁の日付が含まれているとうまくいかない。

import datetime
now = datetime.datetime.utcnow() + datetime.timedelta(hours=9)
dateinfo = "{:0=4}".format(now.year)+"{:0=2}".format(now.month)+"{:0=2}".format(now.day)
'20220215'

こうする。

2:小数点を指定桁数まで表示したい。

実際に使うときは多分全部桁数揃えるんじゃないですかね?

print('{:.8f}'.format(2.718281828459))
print('{:.7f}'.format(0.207879576350))
print('{:.9f}'.format(2.302585092994))
print('{:.1f}'.format(3.141592653589))
2.71828183
0.2078796
2.302585093
3.1

-1:必要になったら追加します

更新サボっていましたけれど、私はげんきです。

Amesiorineの将来を考える会、会長の271108です。この前、進捗ダメです。とツイートしたところ、Amesiorineにふぁぼという形で圧を掛けられたのでうっすら考えてた構想をメモにしていました。
と、同時につい先ほどエミィにやらせる仕事として思いついたことがあったので実装のためのメモを残します。
ええ、271108の開発形式はメテオフォール型開発と呼ばれる開発形式です。

何をやりたい?(2/14くらいまでには実装したい。)

Amesiorineに早急に追加したい機能です。どんなお仕事か。BeTSCAEの食料を集めるお仕事。

  1. TLを見る
  2. とりあえずその見たツイートはpickleかなんかで持っとく
  3. BeTSCAEのtokenizeの返り値、UKW_checkerを基に(読みが不明な単語があるとTrueを返すはず)ふるいにかける
  4. 読めないやつは捨てる
  5. 読めたやつは保存する
  • なお、それの関連で現在取得しているget_FL()関連はget_TF()関連と再びファイル分ける必要がある
  • 同様に、現状毎日(1/13から息をしていないけど)自動でBeTSCAEにエサやりしているのを止める

何ができそう?

  • 最終的にBeTSCAEに現状保存してあるやつと組み合わせてそのうち何かに使えそうなものにできそう。
  • 目標形の中心コンテンツのおおもとになりそう。
  • ところでBeTSCAEだけ1/13から息していないんですけどなんでですか?
  • エミィが息してない可能性はあるけど、一緒に動いている別の子は死んでないからよく分からない。調べといて。

Amesiorineの目標形

Amesiorineには私のTwitterブラウズを中心としたお手伝いをしてほしい気持ちになってる。
というわけで、見ておきたいアカウントリストを投げ込むとツイートをある程度覚えておいてくれるものを作りたい。
それに伴って、「RTas271108」、「RTas別名義」位の機能を用意しておきたい。これは簡単そうなので気にしなくていい。Twitter同様、もう一回押すとRTを消せる機能があると便利かもね。
なお、271108は残念ながら脳をコンピューターに繋ぐことすらできない愚鈍な存在である。そのため、Twitterブラウズをするということは271108が見るための画面を用意しなくてはならない。別に他所から見ようというつもりはないのだからlocalでも構わないがHTMLとかjsとかなんか使っていい感じのサイトを作る必要がある。
現在のツイッターのように「遡ると面白いやべーやつ」「公式垢」「絵師さん」のようにリストを作ってそれ毎にツイートを収集したい。
必要なボタンは「リストの切り替え」「次のツイート」「前のツイート」「RTas271108」「RTas別名義」「ツイートの読み上げ」
応用系は「ツイートの優先度をつけること」「ツイートの読み上げ」だが、これは難しそうなので完成してからじっくりでいいでしょう。なお、「ツイートの読み上げ」はエーアイが今年中にA.I.VOICEのapiを出すようなことを言っていたようなそうでもなかったような気がするのでその発表を聞いてから考える。別に自分で合成音声作ってもいいけど綺麗な合成音声作るのは難しいからね。

上のには画像ブラウズも含まれている。なので、画像を保存したい。けれども、画像を保存するとき、どこから持ってきたのか分からないのは「好みの絵だ~^^」って気持ち悪い笑いをするときに私が困る。そのため、「画像を保存」「その画像ファイルにいつどこでダウンロードしたのかの情報付与」をしてほしい。

ここまで書いてよく分かったが、ファイルに書き込んだり読み込んだりする回数が他の子たちとは信じられないくらいに違うことになるはず。なのでAmesiorineにはもうじきお古になってしまいそうな私のメインPCを用意してあげてもいいかもしれない。ということは、BeTSCAEはAmesiorineのものになるのかな。

MMDAgentとかと組み合わせると面白そうだよね。地獄を見るのは私だけどさ。

メモ書き:PIL

使うときにまた書き足します。
正直どう整理すればいいのか見当がつかない。完全に箇条書きのようなメモです。

from PIL import Image, ImageDraw, ImageFont
W = 1920
H = 1080
im = Image.new("RGB", (W, H), (0, 0, 0))
draw = ImageDraw.Draw(im)

#線を引く
draw.line((始点W, 始点H, 終点W, 終点H), fill=(赤,緑,青), width=線の太さ)

#長方形
draw.rectangle((始点W, 始点H, 終点W, 終点H), fill=(赤,緑,青)

#文字を書き込むA
font = ImageFont.truetype('TTFフォントのパス.ttf', フォントサイズ)
draw.multiline_text((左上を始点としたW, 左上を始点としたH), '文字を書き込む', fill=(赤,緑,青), font=font)

#文字を書き込むB
font = ImageFont.truetype('TTFフォントのパス.ttf', フォントサイズ)
draw.text((左上を始点としたW, 左上を始点としたH), "文字を書き込む", fill=(赤,緑,青), font=font)

#テキスト領域サイズの取得
font = ImageFont.truetype('TTFフォントのパス.ttf', フォントサイズ)
size = draw.textsize("文字を書き込む", font=font)
###なお、PIL.ImageDraw.textlength()などもある。
  • 基本的に(横軸,縦軸)だった気がする。上のコードのWはwidth,Hはheightを基に横軸、縦軸を指しているつもり。
  • 赤緑青もRGBの0~255のアレ
  • Image.new()で新規作成
  • 線を引く・長方形・文字の書込みについては上のコード見て察して


今後追記するかもしれないこと

  • draw = ImageDraw.Draw()でなんか編集可能にする的な(?)
  • multiline_textとtextの違いに関して詳しいこと書いといて
  • PIL.ImageDraw.textbox()

メモ書き:pytorch

インストール

は~い、今日はPyTorch入れまぁす。
わざわざブログに残しているのは将来的に私が「pytorchってどうやって入れるんだっけ????」とか言い出すからです。


まずここにアクセスします。
pytorch.org

自分にあった環境を選んでください。
私はpip使っているのでpipで。

CUDAのバージョンを確認してください。
CMD使って「nvcc -V」で確認できましゅ。
10.1です。

選択肢にないんだが?????????????????????????????
pytorch.org
過去のバージョン見て適当に探してください。


見つけた(、もしくはRun this Commandに出てきた)コマンドを実行します。



おわり

その他

GPU使ってるか確認するやつ

torch.cuda.is_available()

FalseならGPU使ってない

メモ書き:正規表現とか(re)

以前にこんな感じのやつ書こうと思ったのに消した気がするので書き直しましゅ

正規表現についてはGoogle先生に聞いてください、できたら後でまとめておいてください。それから冷たい水をください、できたら愛してください。
それよりもreについてもう少しまとめてください。この記事は完成してません。使うときに増やしておいてね。マッチオブジェクトについて詳しく書いておいて下さいどうせ私は忘れるので。

  • そもそも正規表現って何?
  • 表現
    • 数字
    • 任意の一文字
    • 繰り返し
      • 0回以上の繰り返し
      • 1回以上の繰り返し
      • m〜n回の繰り返し
    • ( )
    • というかこのサイト見たほうが早い
  • re.何某()と使い方
    • match
    • search
    • finditer
    • findall
    • sub
    • 絵文字を消すやつ
    • 後で書いておいてくださいシリーズ

そもそも正規表現って何?

  • 文字のパターンのものを持ってきたいときに使われるもの。
  • 複数の文字列を、通常文字列リテラルとメタ文字を用いた一つの形式で表現することができる

基本的に正規表現は最長一致するようになっている。最短一致させたいときは注意すること。

表現

数字

[0-9]

任意の一文字

.

繰り返し

0回以上の繰り返し
*
1回以上の繰り返し
+
m〜n回の繰り返し
{m,n}

( )

( )で括るとカッコ内をひとまとまりとして認識してくれる。
例えば

Tit for T(aa)*t!

と入力すると、

Tit for Taaaat!
Tit for Taaaaaaaat!
Tit for Tt!

が該当する。要するに、aaのまとまりが0回以上発生していれば該当する。

Tit for Tat!

は該当しない……はず。したらごめんなさい。

というかこのサイト見たほうが早い

murashun.jp

re.何某()と使い方

match

文字列の先頭がマッチするかチェックする。マッチするならマッチオブジェクトが返ってくる。

import re
s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.match(r"「.+?」", s)
print(c)
<_sre.SRE_Match object; span=(0, 5), match='「死の雨」'>

先頭だけなので先頭にないものだとこうなる。

import re
import re
s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.match(r"リリィ", s)
print(c)
None

先頭じゃなくてもOK。ただし、1つしか検索できない。

finditer

「いやいや、1つだけじゃなくて全部知りたいんだわ。」って時に使うやつ

findall

こっちの方が雑に手軽に使えるのでこっちを使っちゃってることが多い。いいのか悪いのかは分からない。マッチオブジェクトは返ってこない。

 s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.findall(r"「.+?」", s)
print(c)
['「死の雨」', '「果ての国」']

sub

置換。削除にも使える。

s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.sub(r"「.+?」","", s)
print(c)
によって滅びた王国を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。

countを使うことで最大置換回数を指定できる。

絵文字を消すやつ

参考元:
freeheroblog.com

def emoji_finder(text):
    import re
    emoji_pattern = re.compile("["
        u"\U0001F600-\U0001F64F"
        u"\U0001F300-\U0001F5FF"
        u"\U0001F680-\U0001F6FF"
        u"\U0001F1E0-\U0001F1FF"
        u"\U00002500-\U00002BEF"
        u"\U00002702-\U000027B0"
        u"\U00002702-\U000027B0"
        # u"\U000024C2-\U0001F251" # 日本語
        u"\U0001f926-\U0001f937"
        u"\U00010000-\U0010ffff"
        u"\u2640-\u2642"
        u"\u2600-\u2B55"
        u"\u200d"
        u"\u23cf"
        u"\u23e9"
        u"\u231a"
        u"\ufe0f"  # dingbats
        u"\u3030"
                    "]+", re.UNICODE)
    if re.findall(emoji_pattern, text):
        return True
    else:
        return False
続きを読む

メモ書き以下:AWS S3のメモのつもり

そのうちAWS触るかもしれないのでかる~~~~~くメモを。気が向いたらもっと書き足すしもしかしたらS3以外もメモとらなきゃいけないかもしれない。

S3に接続

import boto3
s3 = boto3.resource('s3')

ダウンロード

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(バケット名)
bucket.download_file(DLするファイル名, DLしたファイルをなんて名前で保存するかのファイル名)

または

import boto3
s3 = boto3.resource('s3')
s3.meta.client.download_file(DLするファイル名, バケット名, DLしたファイルをなんて名前で保存するかのファイル名)

アップロード

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(バケット名)
bucket.upload_file(アップするファイル名, 何て名前でアップするかのファイル名)

または

import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file(アップロードするファイル名, バケット名, 保存するファイル名)

bucket.nameを使うことでバケット内の各オブジェクト情報を表示させられる

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(バケット名)
bucket.name

完全机上空論の人形メモ

-1:前書き

真面目に攻略する気になったけど真面目に攻略しようと思うと理論上最強を作りたくなってしまうので。
前回
略称については諸説あるが、人形制作画面の左側から「ランサー(またはアステル)」「シノブシ(またはアサシン)」「シアスタ」「メイジ」「ゴリアテ」「デモリ」「ピアフォ(またはタンク)」「アーチャー」と私が勝手に呼んでいる。シアスタは多分公式。

0:前提

  1. 別にどうでもいいといえばそれはそうなんだけれど、せっかくなので同一の見た目の人形が存在しないようにしたい!
  2. 見た目がかわいいほうが気分がいいので基本的に女性型だけで編成したい!
  3. ただし、シアトリカルスターとゴシックコッペリアは例外とする。かわいいので。
  4. つまり、女性型各ファセット7*4+中性型(ゴシックコッペリア)1*4+男性型(シアトリカルスター)1*4=36。理論上可能か知らないけどアタッカー3、サポート5をフルで埋められないらしい。

以上。あ、そうそう、別にショタコンではない。

育成に関する大前提

  • スキルはファセット固有スキル含めて12個獲得可能。

1:どんな人形が欲しかったんだっけ?っていうメモ

ドナム防御陣形が好きなので前衛2、後衛2、スイッチ可能が1(その場のノリと勢いで前進陣形に変えられる)

1-A:後衛

マージナルメイズだらけのカヴン。ドナムしか使う気がない。全員に「ドナムマスター」「ドナム力自慢」「ドナム効率化論」があればもうそれで・・・・全部メイジを経由すればどうにかなるよね。
まあDP尽きたらマッドラプターとか出せばいいんじゃない?知らんけど。
アタッカー:マージナルメイズ3
サポート:マッドラプター2・シアトリカルスター3

1-B:前衛

前衛ごちゃまぜセット。正直ドナムを使う気はそんなにないので何でもいい。デモンリーパーの存在が面白いので好き・・・だが、お世辞にも使いやすいとは言えないのでこっちは4人準備する必要がある。
アタッカー:デモンリーパー・ゴシックコッペリア2・ピアフォートレス
サポート:↑の余り

1-C:前後衛

もうその場の雰囲気で変えるやつなのでどうとでもなる。というか多分アステルナイトとシノブシの置き場。
前衛:余った人形たち。デモンリーパーが好きなのでデモリだらけになりそう。
万能:アステルナイト・マージナルメイズ・両手に槍を持ったシノブシ
後衛:マッドラプター・両手に弓を持ったシノブシ

1-D:前衛

まずはタンクカヴン。ピアフォートレス3の編成で良いかなぁって気持ち。
アタッカー:ピアフォートレス3
サポート:ゴシックコッペリア

1-E:後衛

シアスタ中心。ぶっちゃけシアスタ3でよくない???回復とかがメインなので速度重視。
アタッカー:シアトリカルスター3
サポート:シアトリカルスター2

2:で、じゃあ私はこれからどう強化すればいいの?

優先度順に書いているつもり。

2-1:D用フルタンクピアフォートレス

そもそも攻撃しないので火力がなくてもいい。ぶっちゃけピアフォが死ぬこともそうそうなかったというかピアフォが死ぬときもう他全員死んでるのでランサー固有の不屈の精神も無理に入れなくていいかも。

2-1-1 ゴシックコッペリア→マージナルメイズ→マッドラプター→ピアフォートレス
  1. 硬化術
  2. 全治癒術
  3. ドエムマスター
  4. やわらかボディ
  5. ドナム効率化論
  6. スピード自慢
  7. 速攻術
  8. 籠城盾
  9. 守るの心
  10. 亀甲の構え
  11. 鉄壁
  12. フィジカル自慢

変なのが混ざってるけどわざとです。

2-1-2 ゴシックコッペリア→マージナルメイズ→デモンリーパー→ピアフォートレス
  1. ドエムマスター
  2. やわらかボディ
  3. 焔撃耐性強化術
  4. 受け流し
  5. 硬化術
  6. 全治癒術
  7. 籠城盾
  8. 守るの心
  9. 亀甲の構え
  10. 鉄壁
  11. 大鉄壁
  12. フィジカル自慢
2-1-3 マージナルメイズ→マッドラプター→ゴシックコッペリア→ピアフォートレス

この人形には両手に戦術甲を持ってもらうので本当にフルヘルスになることはない予定。

  1. ドエムマスター
  2. 焔撃耐性強化術
  3. スピード自慢
  4. 速攻術
  5. 泥撃耐性強化術
  6. 硬化術
  7. 全治癒術
  8. 籠城盾
  9. 守るの心
  10. 亀甲の構え
  11. 斬撃耐性強化術
  12. フィジカル自慢

2-2:A用こてこてマージナルメイズ

ぶっちゃけドナムマスターさえあればなんでもいい。なんでもいいけど要。あとはそれっぽいメイジ用意しておけば。
サポートはできる限り2-4-1のマージナルメイズ→シアトリカルスターでいい。

2-2-1 デモンリーパー→マッドラプター→マージナルメイズ
  1. 見切り
  2. 瞬速
  3. 受け流し
  4. スピード自慢
  5. 速攻術
  6. ドナムマスター
  7. 深淵治癒術
  8. ドナム効率化論
  9. 深淵耐性強化術
  10. ドナム力自慢
  11. ドエムマスター
  12. やわらかボディ
2-2-2 アステルナイト→シノブシ→マージナルメイズ
  1. 不屈の精神
  2. 影隠れ
  3. 影術
  4. 蝕台術師範
  5. 月蝕
  6. ドナムマスター
  7. 深淵治癒術
  8. ドナム効率化論
  9. 深淵耐性強化術
  10. ドナム力自慢
  11. ドエムマスター
  12. やわらかボディ

2-3:B用

あとはそれっぽくゴシックコッペリア用意しておけば。
2-3-2:防御したり殴ったりするタイプのピアフォ。

2-3-1 ゴシックコッペリア→シノブシ→マッドラプター→シアトリカルスター→デモンリーパー
  1. 黒切斬
  2. ぶん回しの剛腕
  3. スピード自慢
  4. アヴォイダンス
  5. 器用さ自慢
  6. 影術
  7. 反ドナム思想
  8. 星嵐鎌術師範?演者の意地? → S+になるなら演者の意地で
  9. ドラキュリア
  10. 見切り
  11. 雄心勃勃たる構え
  12. 星嵐舞踏

多分コイツが一番作るのしんどいと思う

2-3-2 シアトリカルスター→ゴシックコッペリア→ピアフォートレス
  1. スキキライスキ
  2. 反ドナム思想
  3. 力タメ
  4. 硬化術
  5. 気功術
  6. 全治癒術
  7. 鉄壁
  8. メガバッシュ
  9. フィジカル自慢
  10. 亀甲の構え
  11. 守るの心
  12. 籠城盾
2-3-3 ピアフォートレス→デモンリーパー→ゴシックコッペリア
  1. 守るの心
  2. 籠城盾
  3. 亀甲の構え
  4. フィジカル自慢
  5. ウィッカーマン
  6. ドラキュリア
  7. 硬化術
  8. 力タメ
  9. 鈍槌術師範
  10. 全治癒術
  11. ぶん回しの剛腕
  12. 黒切斬

2-4:E用シアトリカルスターの群れ

余裕があれば2-4-2、余裕がなければ2-4-1

2-4-1 マージナルメイズ→シアトリカルスター
  1. ドナムマスター
  2. ドナム効率化論
  3. 深淵耐性強化術
  4. ドナム力自慢
  5. スキキライスキ
  6. 癒演舞の鐘
  7. 幻覚治癒術
  8. 詛呪の鐘
  9. 霧撃耐性強化術
  10. 美体自慢
  11. 反撃の狼煙
  12. 見切りの運勢・反ドナム思想
2-4-2 マッドラプター→マージナルメイズ→シアトリカルスター
  1. スピード自慢
  2. アヴォイダンス
  3. ドナムマスター
  4. ドナム効率化論
  5. 深淵耐性強化術
  6. ドナム力自慢
  7. スキキライスキ
  8. 癒演舞の鐘
  9. 詛呪の鐘
  10. 美体自慢
  11. 反撃の狼煙
  12. 見切りの運勢・反ドナム思想

2-5:C用両手に〇〇を持ったシノブシ

役に立つかは知らないけど面白そうなので作りたい。
両手に弓をもったシノブシ2-5-1
両手に槍をもったシノブシ2-5-2

2-5-1 マッドラプターアステルナイト→シノブシ
  1. アヴォイダンス
  2. 百花ノ狙撃手
  3. ステルス
  4. 百花弓術師範
  5. スピード自慢
  6. 薄氷の見切り
  7. 花の乱れ矢
  8. 不屈の精神
  9. 呪い返し
  10. 影隠れ
  11. 影術
  12. 二刀一流
2-5-2 マッドラプターアステルナイト→シノブシ
  1. アヴォイダンス
  2. ステルス
  3. スピード自慢
  4. 薄氷の見切り
  5. 不屈の精神
  6. 古塔乱
  7. 古塔槍術師範
  8. 刃落とし
  9. 呪い返し
  10. 影隠れ
  11. 影術
  12. 二刀一流

3:最後にひとこと

ここまでやる必要あるんか?