どうも、だーやまんです。
当ブログでは、だーやまんの戯言や、プログラミングの話、あとDiscord Bot「喋太郎」の案内なんかもやってます。 どうぞ、ごゆるりとお過ごしください。
nonbiriyanonikki.hatenablog.com
Twitter: @gamerkohei
どうも、だーやまんです。
当ブログでは、だーやまんの戯言や、プログラミングの話、あとDiscord Bot「喋太郎」の案内なんかもやってます。 どうぞ、ごゆるりとお過ごしください。
nonbiriyanonikki.hatenablog.com
Twitter: @gamerkohei
こんにちは、だーやまんです。
この度は遊戯王チャンピオンシップシリーズジャパン東京2024(以下YCSJ)に初参加しましたので参加レポートをお届けしたいと思います。
今回のYCSJの参加者はなんと約7400人で、トレーディングカードゲームトーナメントの最多対戦人数としてギネス世界記録になりました。
1日で全日程を行える人数ではないので、4/28、4/29の2Day開催となったわけです。Day1では8回戦まで行い、7勝すればDay2の決勝トーナメントに参加できます。
いままで一度も当選しなかった念願のYCSJということで、お祭りに行くぐらいの気持ちだったのですね。
そんな僕のYCSJは前日の27日から始まります。
前入りする予定だったので荷物をまとめて出発。一旦、友達とカラオケでデュエルの練習をした後、ホテルに向かう段取りです。
そんなカラオケでの出来事
「あれ、組んできたデッキがない。」
そう、あろうことか大会で使う予定のデッキを忘れてきてしまったのです。ポンコツか?
そんなときに、一緒に参加するあめだまくんが「俺のデッキ貸そうか?」と提案してくれました。僕が使う予定だった天盃龍は彼に組んでもらったものだったので、同じレシピのデッキを持っていたわけです。
そんなわけで、天盃あめだまレンタルを握ってYCSJに参戦することとなりました。勝てねぇだろこんなやつ。
僕、あめだまくんを含む5人のいつメンで東京ビッグサイトに乗り込みました。朝ごはんは会場外にあるタリーズでパン二個とドーナツを食べました。
そんな食いしん坊かつ忘れん坊のこの日の戦績は下記のとおりです。
デッキ名 | 先後 | 勝敗 |
---|---|---|
魔術師 | 後 | ○ |
メメント | 後 | ○ |
スネークアイ | 後 | ○ |
天盃 | 後 | ○ |
60ライロ | 後 | ○ |
R-ACE | 後 | ○ |
白き森 | 後 | ○ |
60ヴォルカニックGS | 後 | × |
デッキ忘れて、あめくんからデッキ借りたら7-1しました https://t.co/LQvh0gwmOf
— だーやまん (@Dahjaman) April 28, 2024
ほんまになんでだよ
— あめ (@amedamayp) April 28, 2024
練習してなさすぎて知らないカードばかりだったのですが
雀荘にこもれば怖くありません。
手札もずっと強かったので強そうなカードに誘発を投げ、やばそうな置物には一滴をバケツでひっかけてました。
とはいえYCSJ初参戦、普段のCSは2回戦落ちがザラのモブです。4回戦あたりから緊張でメンタルが壊れかけてました。一緒に参加したアズリールくんが共に勝ち上がっていたので、1戦ごとにグータッチ👊してお互いに鼓舞してました。これには本当に救われてました🙏
アズリールくんも7-1で見事、ファイナリストに残ったので、その日の晩は祝賀会でした🍖
ここからは決勝トーナメント。2回勝ってbest64に残ると、上位賞として売ると数十万円ほどのお値段がつくステンレス製の遊戯王カード(以下、ガンドラ)がもらえます。
\本日開幕‼️/
— 【公式】遊戯王OCG (@YuGiOh_OCG_INFO) April 27, 2024
◤#YCSJ 𝐓𝐎𝐊𝐘𝐎 𝟐𝟎𝟐𝟒
遊⭐️戯⭐️王 デュエリストフェスティバル
𝟒.𝟐𝟖 𝐒𝐮𝐧 - 𝟐𝟗 𝐌𝐨𝐧◢#YCSJ 決勝トーナメント出場者
1位~64位に贈られる
「破壊竜ガンドラ」スペシャルカード
(ステンレス製)をご紹介‼️
✅HPhttps://t.co/jyV9VWUjS8 pic.twitter.com/4O0e88kRtY
ここまできたらなんとしてでも欲しい。
待機していると、1回戦は不戦勝があり得るとアナウンスがありました。
めちゃめちゃ大事な組み合わせ発表です。
不戦勝
写真の通り、前日の戦績が良かったアズリールくんともども不戦勝でした。
残すところ後1勝でガンドラです。
60インフェルノイド
じゃんけん勝ち後攻、スタンバイでGを投げて通りました。
ここから相手はリリスをしっかり構えて、隣の芝刈り。
落ち強くないですか。黒山羊だけはダメだと鬼の形相でDDクロウ。
ターンがこっちに渡って、スタンバイロルバで狂宴。
デカトロンは許しちゃいかんと、リリスもおまけで一滴。とおる。
雀荘建てる。白出す。開門サーチまで通る。中出る。
バトル、發出る、バイデント出す、蘇生効果に墓穴打たれる、チェーンシンクロ
宴で出てきた悪魔たちが縦になったので殴って勝ち✌️
2回戦勝ちぃ!!!!!!!
— だーやまん (@Dahjaman) April 29, 2024
ガンドラげっとおおおおおおおおおお!!!!!
さすがにあめだまくんと過去一デカいハイタッチ✋
best4までは景品が変わらないし気楽なものかな、と考えて次の対戦発表を待っていたところ運営に呼び出されました。
あああーーーー!!!!配信卓引いたんやけど
— だーやまん (@Dahjaman) April 29, 2024
𝕃𝕀𝕍𝔼
— 【公式】遊戯王OCG (@YuGiOh_OCG_INFO) April 29, 2024
◤#YCSJ 𝐓𝐎𝐊𝐘𝐎 𝟐𝟎𝟐𝟒
遊☆戯☆王 デュエリストフェスティバル
𝟒.𝟐𝟗 𝐌𝐨𝐧◢
✨決勝トーナメント✨
ミズシマナナミ選手
🆚
ヤマダコウヘイ選手
デュエルスタート‼️
🎦ご視聴ページはこちらhttps://t.co/byMbSvehWB pic.twitter.com/bfK67gBaob
はい、3回戦以降は対戦する一組がランダムに選ばれ、対戦の様子が本名と顔つきでYouTubeで大公開されます。デジタルタトゥーすぎる
キマイラ
この試合は非常に危うく、後攻をとれたものの展開札の線が非常に細かったです。相手が手札に何かしらの妨害を持っていたら負けだったとおもいます。
"今日の僕は全部が通る"と借り物のデッキを信じて強気に攻めたところ、展開が全部通って勝利しました。ちなみに、配信中にいただいた解説・コメントにお返事すると
開門は元禄サーチのがよくない?
チュンドラ出せば何とかなるやろって思ってた。
Gを意識した最小限の召喚
トランセンド出して安心したすぎてファドラの蘇生効果忘れてた。
キマイラの名称変更効果をうまく打ち消している
そんな効果あったの!?
フケ飛ばして攻撃しろ
いつか身を滅ぼすからそういうコメントしない方がいいですよ。
対面の選手は対戦前に気軽に話しかけてくださり、極度の緊張からは救われました。あまりに普段と異なる環境でしたが、楽しんで対戦できたこと、この場を借りてお礼申し上げます。ありがとうございました。
そんなこんなで勝利しベスト32残留。ここまできたらどんどん勝ち上がりたいところです。
メタビート
という感じで、初めてのYCSJはbest32という大戦果を収めて幕を閉じました。
結論: 豪運
あめだまくんに足向けて寝られん。
天盃あめだまレンタルの構築に関しては、あめだまくんにブログを書かせるのでそっちを読んでください。
【追記】
↓出ました
amedama426.hatenablog.com
さて、デッキ返さないと...
前日に天盃のレクチャーをしてくれた
せるなさん @serna_619
ういういさん @Darjeeling_0115
ゆきちゃんさん @kitikitisimo3
一緒に参加してくれたいつメン
アズリール @tamuduel
あめだま @amedamayp
でんでん @Attondel1115
R2D2 @ranko_lover
カニ食べたい。どうも、だーやまんです。
これは、SLP KBIT Advent Calendar 2019 - Adventarの15日目の記事です。
Text To Speech APIを利用する際、API側で読み仮名が正しく認識されないことがある。造語などに関しては、いうまでもなく。そのような時、どのようにして送信した文字列を思い通りに読んでもらうか、という処理をPythonで行った場合を紹介する。
以下の通りに読んで欲しい文字列があるとする。ここでは、鉤括弧や句読点等は読み飛ばされるものとする。
文字列: 僕の禁断の過負荷 『却本作り』!! 読み: ぼくのはじまりのまいなす、ぶっくめーかー
( めだかボックス第11巻 p25 )
この場合、正しくない読み仮名と造語が入り混じった文になっている。まずはこれらの辞書を作成する
u_dict = { '禁断':'はじまり', '過負荷':'まいなす', '却本作り':'ブックメーカー' }
あとは、元の文字列に対して、辞書の登録数だけ一致する部分を変換するだけである。辞書に対して、 items()
を使うことでキーと値のペアのタプルのリストを取得できる。あとは置換してやるだけである。
read_text = ' 僕の禁断の過負荷 『却本作り』!!' for word, read in u_dict.items(): read_text = read_text.replace(word, read) print(read_text)
結果
僕のはじまりのまいなす 『ぶっくめーかー』!!
これで思い通りに変換ができた。これがとりあえずの実装になる。
以上の実装で、以下のような辞書と文字列の時、どうなるだろうか。
u_dict = {'蜂':'びー', 'びー':'ハエ'} read_text = 'ぶんぶんぶん、蜂がとぶ。びーは蠅である。'
for文の1巡目で文中の「蜂」が「びー」に変換され、2巡目で「びー」が「ハエ」に変換される。その結果、
ぶんぶんぶん、ハエがとぶ。ハエは蠅である。
になる。
変換された読み仮名がさらに変換されるのは問題である。自分の思わぬ文字列に変換される恐れがあるし、文字列爆発による攻撃も可能になる。
文字列爆発の例
u_dict = { 'a':'bbb', 'b':'ccc'} read_text = 'aaa'
変換結果
ccccccccccccccccccccccccccc
悪意のある文字列を登録された場合、文字列は指数関数的に伸ばすことが可能になるので、メモリへの攻撃が可能になる。
str型の組み込み関数、 format()
を用いる。一度、文字列の変換該当部分を{}と変換先の文字列の引数番号にする。そうすることで二重の変換を防ぐことができる。コードを見てみよう。
u_dict = {'蜂':'びー', 'びー':'ハエ'} read_text = 'ぶんぶんぶん、蜂がとぶ。びーは蠅である。' print(read_text) read_list = [] # あとでまとめて変換するときの読み仮名リスト for i, one_dic in enumerate(u_dict.items()): # one_dicは単語と読みのタプル。添字はそれぞれ0と1。 read_text = read_text.replace(one_dic[0], '{'+str(i)+'}') read_list.append(one_dic[1]) # 変換が発生した順に読みがなリストに追加 print(read_text) read_text = read_text.format(*read_list) #読み仮名リストを引数にとる print(read_text)
実行結果
ぶんぶんぶん、蜂がとぶ。びーは蠅である。 ぶんぶんぶん、{0}がとぶ。{1}は蠅である。 ぶんぶんぶん、びーがとぶ。ハエは蠅である。
いい感じに変換されました。
辞書の登録順に変換されてしまうので、優先度等の重みつけはできていない。辞書型を使うのではなく、新しくクラスを定義することで可能になるかな〜。私が運用している喋太郎でも、今回紹介した方法を用いている。誰かの参考になれば幸い。
さっぶ。どうも、だーやまんです。
この記事は、本番環境でやらかしちゃった人 Advent Calendar 2019 - Qiitaの11日目の記事です。
これは、中途半端な知識でサービスを運用していた結果、タイトル通りの大失敗をしてしまったお話です。個人開発での出来事なので、業務で起きたことかと胃薬を握られていた方はご安心ください。
語るのもすごい恥ずかしいレベルですが、戒めのために晒しておきます。
Hello. You may be surprised to see this message, but it was your bad security practices that allowed us to steal your database. If you want to restore your data, and continue using it, send 0.075000 Bitcoin to [おそらくBitCoinのウォレットアドレス] and go to the page using tor browser [謎のURL]. In return, you will get the copy we have of your database. You can download the tor browser on the official website https://www.torproject.org/download/ | [おそらくBitCoinのウォレットアドレス] | [謎のURL]
(意訳)(悪意マシマシ)
「おっすwwwww驚いた?wwwwガバガバセキュリティのおかげでwwwwデータ盗めたわwwww返して欲しかったらwwwウェwwwここにビットコインwwww振り込みよろwwwww」
やられた
とりあえず現在進行形で踏み台にされている可能性があるので、必要と思われるログや設定ファイルをまとめてメインPCに保存(それも安全なのかっていう)。その後、DBサーバをシャットダウン。 自分だけではログの読み方もいまいちわからなかったため、詳しい友人や、先輩に調査のお願いをした。
まず、postgresの設定をどのようになっていたのか
今思うと素敵な設定してますね。玄関の鍵を閉めないタイプか?
それでは、設定ファイル(pg_hba.conf)の接続可能ホストを確認してみよう。(IPアドレスは架空のもの)
# TYPE DATABASE USER ADDRESS METHOD [省略] host all all 184.14.25.76/0 md5 host all all 184.14.133.122/0 md5
サブネットマスクが0になってるね。これはIPアドレスの仕組みをよく理解しておらず、なんとなくググってこのような設定を見つけたので真似した結果。(「IPアドレス 一つ 指定」みたいな検索をした気がする)
追記
サブネットマスクが0であることの何がまずいか。
IPアドレスをどのような値にしたところで、 0.0.0.0
、つまりな任意のIPアドレスという意味になる。上記の設定の場合、接続ホストを制限するどころか、あらゆるホストの接続を許可したことになる。自宅が公共施設になってしまった。
この話がよくわからないという人は、サービスの公開をする前にネットワークを勉強しような。だーやまんの二の舞になるぞ。
ガバガバのガバ。ログとかめっちゃ攻撃された足跡あった。
どうもこの隙を突いて、任意のコマンドを実行、悪意のあるスクリプトをダウンロード・実行させられたらしい。ログファイルにダウンロードの痕跡と、見覚えのないファイルが/var/lib/pgsql/11/data/
以下に存在していた。
mackerelから不自然なアラートが起きたときにもすぐに対応せずに放置したのもBadポイント。
そもそも上記の事項は大学の講義で履修した内容であるので、いかに適当に単位をとってきたかが伺える結果。そら留年するわ。
さくらのVPSは無料でローカルネットワークを組めると知らなかったので、サーバ同士の通信がグローバルIPアドレスを用いて行われていた。
メールアドレスなど、直接的に個人と結びつくような情報は保存していない(できない)ため、流出しなかった。ユーザネームやユーザ辞書に個人情報が書かれていた場合はどうしようもない...。
さもなくば、信用を失う上に友人から一生煽られることになります。
サブネットマスクを間違えただけなのに・・・
— ヒデホヒ (@eakonnsamui) 2019年11月12日
主演:だーやまん 来年春 公開
だーやまん/0はなぁ
— ヒデホヒ (@eakonnsamui) 2019年11月14日
早速、いくつか反応をいただけたので補足いたします。
そうですね。postgresユーザがデフォルトパスワードのままmd5になってました。書くの忘れてました...(今は変更してます)
使ってますよ〜。被害にあった時はssh用のポート(こっちは変更していた)と、5432ポートをインターネットに向けて開いてました。
記事中に追記しました。
あれ〜、じゃあ自分で「postgres」にしたのかしら。DBのownerは複雑なやつにしてたから割とまじで大馬鹿案件...?
ほんまです。就職してからじゃあ洒落にならないことになってました。
*1:Discordでは1つのコミュニティをサーバと表記するが、混乱を防ぐためにここではギルドと表記
9月に入りましたがひたすら暑くて溶けてます。どうも、だーやまんです。
ドメインを取得して、当ブログのURLが変わったのでお知らせします。
になりました。旧URLからでもリダイレクトされるのでブクマの再登録は大丈夫だとは思いますが、気になる方は再登録をお願いします〜。
それと、過去記事を大幅に消しちゃいました。お気に入りの記事があったら、ごめんなさいね〜。
でわでわ、今後とも当ブログをよろしくお願いいたします。