うろ覚えの雑感

何でも適当に書いていくブログ

DiscordBOTのはじめの一歩

経緯

とあるテキスト読み上げBOTを使っていたんだけど、不安定がすぎるので、いい加減自分で導入してみるかということを考え中

で、DiscordBOTを調べていると、だいたい以下の環境

って感じなので、導入してみる。

前提

  • Windows10
  • Python3.X (執筆時点で3.8)
  • Windowsの知識(特に開発でよく出てくる環境変数の意味とかがちゃんとわかっている)

参考

このリンクを参照して、導入。とりあえずping pongできれば導入はできていると判断できるので。

Pythonで簡単なDiscord Botの作り方 - Qiita

Discord bot作成チュートリアル - とらの備忘録

【仮】Windows + Discord.pyで発生してるSSL関連のエラーの解決策([SSL: CERTIFICATE_VERIFY_FAILED]) - Qiita

詰まったところのメモ

pythonのdiscordライブラリのインストール

py -3 -m pip install -U discord.py[voice]

テキスト見るだけならvoiceはいらないけど、最終的にやりたいのは読み上げなので、いる。

pythonのインストール確認

PATHまで環境変数に追加されている前提で

py -V

SSL関連のエラーが出た

参考リンクの最後のを参考に証明書をPCにインストールして解決。多分これが1番ハマる

UbuntuのインストールとDockerのインストール

前回swordaq.hatenablog.com

を組み立てたので、今度はOSとしてUbuntuの最新のLTSとDockerのインストールまで。

Ubuntuインストールの準備

使っている現在のマシンにインストールするだけなら簡単なのですが、新規に入れるとなると、ライブUSB等を使う必要があります

以下、Windowsを使っているとして前提で進めます。

rufus.ie

このソフトを使って、UbuntuメディアUSBを作ります。Ubuntu自体は下記で。

www.ubuntulinux.jp

使い方はそれぞれのリンク先を見ればわかるかと思います。

インストール

作成したUSBを刺して起動すれば自動的にUbuntuが起動します。

起動したらInstall Ubuntuをして、後は画面の案内に沿ってやれば終わり。

USBを抜いて、もう一度起動して設定したユーザーでログインできていれば終わり。

設定について

IPアドレス

WifiなのかLAN接続なのかでちょっと変わってきます。

LANケーブルの場合は、ネットワーク接続からプライベートIP固定を。

Wifiの場合は、Wifiで接続しているSSIDからプライベートIP固定をしておきます。

SSH接続

sudo apt-get ssh

で、大体終わり。

別のPCからTeratermなり、SSHで固定したIPアドレスに対して、ログインできれば問題なし。

自分はここまでやって、Deskminiからマウスとキーボード、画面接続は外して置物化しました。

以降の作業は全部SSH接続してターミナルで作業します。

Dockerのインストール

qiita.com

この通りで。

概ね、ここまで問題なし。

DeskMini A300組み立て

開発環境としてUbuntuPCが欲しいと思い、いいものないかなーと考えてたんですが、PCでかいの置く場所ないしなーとか思ってたら、DeskMiniなら空きスペースに置けるサイズじゃないか?ということで、揃えて買ってみた。

TSUKUMOさんで色々見積もりしながら買った構成がこちら。

f:id:swordaq:20200105225829j:plain

TwitterとかYoutubeとかの動画しか見ない人にとっては問題無いレベルのスペックかなーと。

ということで、作った記録。

まず本体サイズ。

f:id:swordaq:20200105225840j:plainf:id:swordaq:20200105225854j:plainf:id:swordaq:20200105225909j:plain

15cmの定規(余白込で16cmないくらい)を横においています左から横、高さ、幅です。

相当省スペースなことがわかるかと思います。

さて、マザーボードを筐体から取り出して、各パーツを取り付けていきます。

f:id:swordaq:20200105225924j:plain

ネジ止めを外してからマザーボードを本体から抜き出したのがこれ。本体にはスライドしやすいようなスリットがついていて、簡単に引き抜けました。

中央にCPUを取り付けた図

f:id:swordaq:20200105225936j:plain

静電気にだけは気をつけながらやって、この上にファンを取り付けます。

ファンはA300付属品のものでないと、サイズが入らないです。(CPU備え付けのものだと、でかすぎてダメ。

f:id:swordaq:20200105225949j:plain

ファンをつけて、ケーブルをつけたのがこれ。

で、手前側にメモリを指したら、今度はSSDの取り付け。(メモリつけた写真とりそこねました)

DeskMiniA300はストレージが2個つけれるのがいいですね。今回は1つだけにしていますが、容量足りなくなったらつけようかと。

さて、SSD取り付けは裏面になります。

f:id:swordaq:20200105230003j:plain

軽くねじで止めてSATAケーブルをつけておしまい。

このあと、表面、右側のM.2 Wifiを取り付け。

チップいれて、ケーブルをチップに指すんだけど、これがめっちゃむずい。さす場所が小さいのが要因なんだけど、これもっとうまくいけないんだろうかとは思った。

後はマザーボード電源ケーブルを指し直して、入れてネジ止めしなおして、Wifiアンテナをいれるだけ。

完成したのがこちら。

f:id:swordaq:20200105230016j:plain

めっちゃ小さくてコンパクトでかわいい。

それなのに結構パワフルに動くから言うことないですね。

この後はBIOSで構成が問題なく認識しているかを確認してからUbuntuのインストールをしていきます。

が、このあたりはいかようにでもやり方はあるので割愛。

作業時間的に3時間くらいで、そこまでいけたので満足。

こっから先はDocker上に構築していく形でやっていく予定。

麻雀の話(初心者向け)

この記事は mohikanz #analog-games Advent Calendar 2019 - Adventar の21日目の記事となります。

というツイートを前にしていたのですが、この中の初心者向けについて話していこうかと思います。

麻雀牌の種類

文字でざっくり書くと、すべての牌は4枚ずつ。

数字が1~9まで書かれた数牌が3種類

方角の東西南北が書かれた4種類

三元牌と呼ばれる、白發中の3種類

9*3+4+3の34種類、136枚を使ったゲームになります。

ビジュアルはこんな感じ

麻雀牌の種類について

麻雀の目的

ここでは4人で行う、一番スタンダードな話をします。

最初の持ち点である25000点を4人で奪い合い、トップを目指すゲーム。と言われています。

進行でも詳しくは触れますが、一番スタンダードなルールではそれぞれの親が二周した時点で、ゲームは終了します。その時点でのトップを目指します。

ものすごく簡単に言うと、得点を奪い合ってる1つでも順位を上にするということですね。

山の積み方

昨今では、自動卓がやってくれちゃうんですが、一応。

17枚を2列34枚作る。

ということになります。詳しくは下記をご覧ください。

www.youtube.com

麻雀の進行の仕方

いくつかのステップがあります。まずは書き出してみると

全体

  • 最初の親を決まる。
  • 親が上がる、流局の場合の親のテンパイで親を継続
  • 上記以外で親は反時計回りに持ち回り
  • 2周したら終わり

1局

  • (山を取る場合は)親から4枚ずつを3回。最後に1枚ずつの13枚からスタート
  • 親からスタート。
  • 1枚ツモって1枚切る
  • 山札が残り14枚になるまで繰り返し

大まかな流れはこの感じです。

上がり方

手牌は13枚+1枚というのは上記の流れの中で出てきたかと思います。

麻雀は得点を奪い合うゲームなので、上がる=得点を得るということが必要になりますが、その上がり方です。

上がりを絡むのにメンツと頭という話が必要になります。

メンツは3枚1組のことです。

バラバラではなく、連なりであることが必要です。

つまり、数牌なら

123や234、456、789等です。912ではダメです。

もしくは、111、333等の3枚同じものとなります。

頭というのは、同じものが2枚。

例えば、55とか、東東とかです。

上がりの形は4メンツ、1頭が基本です(頭のことを雀頭(ジャントウ)ともいいます)

4メンツ=3*4+2で14枚となります。

もう1つ。特殊系としては頭が7個という形もあります。

さらにもう1つありますが、これは割愛(超特殊ケースなので)

鳴きを覚える

上がりの形をすべて自分のツモで賄えないケースは多々あると思います。

このとき、他の人が捨てた牌を利用することができるのですが、これを鳴きといいます。

鳴きは3種類。

  • チー
  • ポン
  • カン

チーは直前に切った人からしかできません。

チーは数牌の足りない部分が切られたときにできます。

例えば 手持ちが 35のときに4が切られたとき、等です。

ポンは、誰からでもできます。

ポンは同じ牌を3枚にする動きです。

例えば 手持ちが 白白 のときに白が切られたとき、等です。

カンは同じ牌を4枚にする動きです。

カンは自分の手持ちで4枚のときと、場に出たときに3枚を4枚にする動き、あと自分がポンをした後にもう1枚がある時にできます。

同じ牌を4枚にする動きですが、同じ牌は4枚しかないので、そこそこ出現率は低いです。

点棒の授受の仕方(渡し方、受け取り方)

麻雀は点数の奪い合いなので、点数がどういうときに動くかという話をします。

点数の移動は

の3種類で動きます。

基本的には手渡しはやめましょう。ポロッとこぼれちゃうと、卓の外や自動卓の場合中に入ってしまうことがあり、トラブルの原因になります。

防ぐために、渡す相手の手元に置くのがいいでしょう。受け取る側も手で催促しないのがいいかと思います。

よく出る3役をちゃんと覚える

さて、ここまではほぼ進行関連でした。

いよいよ上がるための話になります。

麻雀は上がるためには役が最低でも1つ必要になりますが、その役の中で麻雀で頻出する3役について説明します。

なぜこの3役なのかというと主に以下の2点です

  • 有効となる牌の数が多い
  • 鳴いても上がれる

というところです。鳴いた場合に無効となる役もあってそこが麻雀の役を覚える上で難しい点になります。

さて、その3役ですが、以下のとおりです。1つ1つ説明していきます。

断么九(タンヤオ

麻雀の牌の中で、数牌かつ2~8のみで構成された役です。

7種類(2~8)*3種類(数牌を持っている種類)*4の84枚が使えます。

役牌

役となる字牌があります。

白發中は無条件で3枚あれば役になります。

東西南北については、以下の条件となります。

  • 親からツモる順番に東南西北と割り当てます。この割あたったところは役牌です。
  • 最初の1周目は東場、2周目を南場といいます。東場のときは東、南場のときは南が無条件で役になります。
  • 上記2つは重複します。

3枚あるだけで役が2つになったりするのはこういうカラクリです。

混一色ホンイツ

以下の条件を満たしたときになります。

同じ種類の数牌+字牌

つまり、数牌の1種類1~9と字牌の7種類=(9+7)*4の64枚が使えます。

終わりに

麻雀は敷居が高いゲームとよく言われます。

これはひとえに覚えることが多すぎることに起因してるかと思います。

なおかつ、教える側も教えないといけないことが多すぎて、結局パンクしちゃうところがあるんだろうと思います。

こういう記事で少しでも麻雀に興味を持ってやりたいと言ってもらえたら嬉しいなと思います。

フリーランスになってから9ヶ月経ったので年を越す前になにか書く

この記事は mohikanz Advent Calendar 2019 - Adventar 17日目の記事(遅刻)です。

1日前は godanさんの WIP 半透明ディスプレイと続・スマートミラー構想 2020 - まぁ、つまらないものですが でした。

モニター壊して液晶取り出してる・・・知らない世界だしゅごい・・・

進捗があったら更新されるようとのことで、続きが楽しみですね!

ということで、本題

4月からフリーランスになるということは この記事(退職してフリーランスの道を取ることにしました - うろ覚えの雑感)で語らせてもらいましたが、その後どうなってるのかという話です。

4月~

とある現場でお仕事をしてます。まぁ、よくある常駐の準委任ってやつなんですが、結構チャレンジングなこともできるようなところでして。

そこで今日に至るまでずっとお仕事受けていますw

仕事的には、システム作ってる案件ですね。新規ではなくリプレースなので、ちょっと趣が違うのと、結構大企業の中にいるので、その中での絡みでスコープが変化したりというところで、地味に大変な部分はありますが、それなりに楽しくやってます。

仕事以外のところ

フリーランス的なことしてると必ず聞かれるのが経費の話です。

実際、フリーランスになってから会った友達とかには結構聞かれたりとかしていて、普通に経費として扱える幅は広くて、でも自分でレシートとか領収書発行したものとか全部管理していて大変ではあるよという話をしています。

自分は経費入力とか売上はすべてfreeeさんを使っていて、定期的に入力作業が発生します。特に月初と給料日周辺でまとめてやってますが、これ本当はもっとこまめにやるべき。面倒臭さがまさるとなかなか手が動かない人間なので、そこが問題。

当初の目標的な部分はできてるのか

まぁ、私生活の方でもいろいろあるので、勉強時間というのが取れてたり取れてなかったりするのですが、プロジェクトを完遂させるお手伝いかつ、いれば安心して終わらせられるような部分についてはまだわからないです。

というのは、まだフリーランスになって1つ目の現場というわけですが、9ヶ月重宝していただいております。その中でバリューを出せているから重宝してもらえてるという自負はあるんですが、前述の通りいろいろな絡みによるスコープ変更というものからは逃げれていないので、結構臨機応変さが求められています。

が、粛々とやることはやって、先日には最初のリリースも終えていて、順調ではあるんじゃないかなと思います。

今後やっていきたいこと

これはもうある程度わかっていて

  • 英語ドキュメントの読むスピードの向上
  • 読書量の向上
  • 自分で公開できるシステム(ツール的な)を作る

数年はフリーランスでいたいという希望があるので、その期間中にやりたいことは増えていくと思いますが、一個一個やっていきたいですね。

終わりに

う~~~~~ん、思ったより中身がないw

会社員のときとあんまり変わっていないんじゃないか説がちょっとあるんじゃないかくらいだけど、明らかに前よりも自由度が上ですね。というところか・・・

後は現場が変わったりしていないので、突出したイベントみたいなものがなく、穏やかに過ごせているのが大きいんだと思います。

さて、明日18日は500こだま伍長さんです。お楽しみに!

麻雀得点計算スプレッドシートを作った話

この記事は mohikanz #analog-games Advent Calendar 2019 - Adventar の14日目の記事となります。

前日は しらぬいさんの 会社でやるのにおすすめのアナログゲーム - しぃぶろぐ。 でした。

自分も前職で後輩くんが主催してたボドゲ会に参加したりしていたんですが、業務後だったので、昼休みにちょっとやるみたいな発送はなかったですね。

しかしながら、昼にやることでいい感じにリフレッシュして午後の仕事へ取り掛かるというのはとてもいいんじゃないかと思いました。

短いゲーム的にはラブレターなんかもおすすめできそうだなと感じました!

さて、今回はmohizの中で、特に麻雀やりてぇ!という話が湧き上がり、でも集計時にしくじることあるよねということで、もうちょい簡単にどうにかならんかね!ということで、作成したスプレッドシートについて話をしていこうと思います。

とは言いつつも、麻雀の知識がないとわからない話ばかりになるのは仕様上仕方がない部分ではありますので、ご容赦を

本体

フリーです。コピーしてお使いください。

壊されてもマスターは別にとってあるので、まぁ、いいでしょう。

mohi麻雀得点シート - Google スプレッドシート

実現したいこと

作るにあたって、以下ができればいいかなという思想でやりました

  • 人数は5人まで
    • 麻雀は4人でやるゲームですが、5人で1人は抜け番という形も結構あるので5人にしました
  • ウマはある程度自由が効くように入力可能に
  • オカも上記同様。
  • 場代は割り勘
  • 入力は最終的な得点だけにして、残りの煩雑な計算(後述)は自動でやってもらう

ということで、実際の仕様をみていきましょう

仕様

基本的な情報を入れるシート

  • 参加者を入力する欄
  • ウマ、オカを入力する欄
  • 場代を入力する欄

まとめるとこんな感じ f:id:swordaq:20191212220738p:plain

レートはお遊び用です。何かに換算できるという話です。1とかにするとテンピンです

参加者5人というのはわかりやすいです。4人のときは「5」とかいてある箇所を削れば後の場代計算を4人にしてくれます。

ウマという制度ですが、4位から1位へ、3位から2位へ払うポイントです。

この画像の場合は

  • 4位から1位へ20ポイント
  • 3以下2位へ10ポイント

を支払うという意味です。いわゆるウマ、ワンツーって言ってるやつですね。ワンスリーの場合、4位から1位へ30ポイント。差し引きで60ポイント分払っているのでトップとラスの差が大きくなります。

オカは基準点です。

ルールにもよりますが、基本的に麻雀のポイントの基準点は30000点となっています。

25000点持ちスタートで30000点以上をまずは目指すことになります。

5000点の差分は4人で20000点。ポイントにすると20点なのですが、この20点がいわゆるトップ賞となります。1位を取った人へのボーナスですね。

レートは(以下略)

場代は、人のお家でやってるときはいいですが、そうではないとき、いわゆる雀荘で卓を借りることになると思いますが、そこで発生する料金のことです。

結果入力シート

f:id:swordaq:20191212221642p:plain

ここはシンプルを保つために、結果の得点のみを入れるシートになります。

抜け番の人は「-1」を入れることで無関係となるようにしています。

場の得点は全体で10万点なので、合計がそれ以外のときはチェックで赤くなるようにしてあります。

シンプルなのはいいことだ

得点シート

終結果を出すシートです

f:id:swordaq:20191212222251p:plain

細かい計算を書いていきます。

まずは五捨六入

四捨五入ではなく五捨六入。なんでこうなっているかの諸説はちょっとわからん。俺はそう教わってこういうものだと思ってしまっている・・・

どういうことかというと、

24600だったら25000として扱い

24500だったら24000として扱います。

ポイント化計算

五捨六入した値ーオカ という計算をし、更に1000で割ります。

オカ30000なら

(28000-30000)/1000=-2

(35000-30000)/1000=5

という具合ですね。

順位得点の加減算

1位~4位までをポイント化したら、順位に応じたウマをつけます。

最初の方に出した、4位から1位へとかのあのポイントです。

トップへトップ賞を加算

最後に、オカから計算したトップ賞を1位の人につけます。

これで計算終わり!

で、これをどう実現するか

長々計算方法を書いてきましたが、じゃあどうやって実現するか。

まずはクラウドでネット環境さえあれば誰にでも見れて共有できるという点からGoogleスプレッドシートを採用しました。

次に、結果さえ入力すれば自動で計算するように、つまりGASはなしで。

ということで、関数で頑張って実現しよう!

だいたいは vlookup で頑張れる

表計算ソフトにはシート参照をうまく使うことで柔軟に行っていけますが、 vllokup関数はその最たる例かなと思います。

基本情報シートのB列C列あたりが順位が確定できれば使えそうですね。

参照情報さえしっかり管理できれば上記の計算はすべて適用ができそうです

使った関数一覧

  • rank
    • 順位算出用
  • round
    • 五捨六入用
  • vllokup
    • 順位の数字をもとにいろいろな計算をするため
  • if
    • 分岐は必須よね
  • isBlank
  • isError
    • 空白やエラーはなるべく自前でキャッチして計算したい

関数組み合わせ

計算式さえわかれば怖くない!ということで、計算式の完成形

=if(isBlank('結果入力'!B2),0,if(rank('結果入力'!B2,'結果入力'!$B2:$F2,0)=1,(C2+D2+E2+F2)*-1 ,if('結果入力'!B2=-1,0,round('結果入力'!B2/10000-0.01,1)*10-('基本情報'!$D$2)/1000+if(isError(vlookup(rank('結果入力'!B2,'結果入力'!$B2:$F2,0),'基本情報'!$B$2:$C$7,2,false)),('基本情報'!$D$2)/1000,vlookup(rank('結果入力'!B2,'結果入力'!$B2:$F2,0),'基本情報'!$B$2:$C$7,2,false)))+if(isBlank('結果入力'!B2),0,if(rank('結果入力'!B2,'結果入力'!$B2:$F2,0)=1,20,0))))

上で書いた計算がすべてここに入ってきます。

順位計算は rank('結果入力'!B2,'結果入力'!$B2:$F2,0)

五捨六入してポイント化は round('結果入力'!B2/10000-0.01,1)*10

ウマの計算は vlookup(rank('結果入力'!B2,'結果入力'!$B2:$F2,0),'基本情報'!$B$2:$C$7,2,false)

トップ賞は if(rank('結果入力'!B2,'結果入力'!$B2:$F2,0)=1,20,0)

後は細かなエラーとか空白を抑制するための分岐で構成されています

レート、チップ、場代の計算は割愛します!

終わりに

後は拡張するなら

  • 半荘10回以上の入力への対応
  • チップが固定値になっているのを基本情報で制御するようにする

くらいですかね。割といじるところが少なくなっていて自分的には満足です。

実は書いてないんですが、トップの人は2~4位の人の合算値にトップ賞を足す形にしています。こまい話なんですが、五捨六入のケースによっては端数が出るというのが1回目に使用した時に判明したので、この形になっています。

このツールで得点計算への煩わしさから開放されるといいなと思います!

2019 やったボドゲ、印象に残ったボドゲ

この記事は mohikanz #analog-games Advent Calendar 2019 - Adventar の1日目の記事です。

mohikanz(モヒカン雑談Slack)のアナログゲームチャンネルとしての最初の記事となります。

まずはこちら。

f:id:swordaq:20191205212836p:plain

はい、わかりませんね!

新年早々  ポプテピピッククソカードゲーム をやっていました。

このカードゲーム、遊○王デュエルマス○ーズ的な感じなんですが、中には発言を強制する上、それ以外を発すると強制脱落とか何考えてるのかわからないカードゲームですw

中が良い人でポプテピピックがわかるなら(第2段も)おすすめですねw

続いてこちら

f:id:swordaq:20191205213151p:plain

宝石の煌き|ボードゲーム通販 です。

ルールがとてもシンプルなのにターン制なので奥が深い。資源には限りがある上に、自分の手元にあるものを再生成する感じが非常に頭を使わせてくれるゲームですね。ネットゲームとしてもできるらしいので、これもおすすめ。

次はこちら

f:id:swordaq:20191205213402p:plain

リベリウム – フリージアエンタープライズ

見たとおり、バランス感覚ゲームです。場所をあんまり選ばずお手軽にできるのが特におすすめできるポイントですね

次はこちら

ガイスター|ボードゲーム通販

1:1の対戦ゲームとして、出来がいいですね。読み合いがちゃんとあるのがいいです

続いてこちら

f:id:swordaq:20191205213735p:plain

ポプテピピッククソカードゲーム2弾 ~最強クソ進化!~

はい!第2段です!その中でカードに乗せたお金が攻撃力になるとかいう最高にゲスなシーンの写真です!!!

どうしようもないねこれは!あ、蒼井翔太くんとかカードになってますw

続いてこちら。

f:id:swordaq:20191205213917p:plain

Twitterでもバズっていた

ソクラテスラ~キメラティック偉人バトル~ | azb.studio | 『ゲームマーケット』公式サイト | 国内最大規模のアナログゲーム・ テーブルゲーム・ボードゲーム イベント です。

もうこの画像がすべてですね!

続いて

f:id:swordaq:20191205214128p:plain

ソレニア | | ANALOG GAME INDEX です。

今年買った中で自分的には1番面白いと思っているのがこのゲームです。

飛行船が移動して昼の世界と夜の世界を航行しながら資材を届けてポイントを稼ぐというゲームなのですが、この移動するというギミックがとても良くできている

1度やると、「おぉ~!」ってなる感じで。

飛行船ゆえ、手持ちに持っておける資源量には限りがあるので、在庫管理+航行ルートの他人との読みがとても熱いゲーム。最初にギミックにおぉ~となり1度プレイしたあと、めちゃくちゃ奥が深いことに気付かされるいいゲームでした

ここからは写真がないゲームです。

侍石 | | ANALOG GAME INDEX

ただの強い磁石をくぼみに置くゲームなのに超面白いw

酔って誰かがやってるところを見ていたいw

次はこちら

「THE GAME(ザ・ゲーム)」~おすすめボードゲーム紹介と初心者向けルール説明No.2~@横浜はまりばカフェ | 横浜のボードゲーム&人狼スペース『はまりばカフェ』

協力型としてとてもおもしろいゲーム。完全制覇するまでやめれないという中毒者も生み出すくらいには面白いですw

そんな感じで今年遊んだボドゲで写真が残ってるものを中心に見ていきました!まだボドゲ会も残ってたりするので、楽しみですね!