志士は溝壑(こうがく)に在るを忘れず、勇士は其の元(かうべ)を喪うことを忘れず
Advent Calendar 2022 130日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixir を楽しんでいますか
この記事は、2022-06-15(水)開催の「ElixirImp#21:kokura.ex/autoracexキリ番+fukuoka.ex5周年」にて、autoracexの話をする予定でして、その発表資料です。
What's autoracex ?
- Elixirのもくもく会です
- 週2回開催しています
- 2021-01-15に第一回を開催
- 第50回は、2021-10-16
- 第100回は、2022-05-20
- オートレースのよくある一般開催とあわせています(後付けです。
数増し!?) - オートレースの場合は以下の通りです
- 金曜日: 前検日
- 土曜日〜月曜日: 選手宿舎に缶詰で外部との接触は禁止(八百長などの防止)
- テーマ曲はElixirの紫色にちなんで、もちろんセクシャルバイオレットNo.1です
- 桑名正博さんの名曲です
- You make me feel good.
- 発売されたのは1979年です
- その1979年の1月1日は私の誕生日です
- KinKi Kidsの堂本光一さんとは全く同じ日です
- ちょっとしたはずみがあれば私が歌って踊っていたはずです
- 読み方は、「オートレースエックス」と私は読んでいます
- 「オートレースイーエックス」でも他の読み方でもなんでもいいです
-
fukuoka.ex、kokura.exは大先輩、主筋にあたります
- 一門の末席を汚しております
-
elixir.jp Slackの
#autoracex
チャンネルで活動しています- 英語、日本語の併記が望ましいですがどちらか一方だけでもよいです
- 24時間開催にしているので、時差を気にせず参加できます
- 海外(北米、南米)から参加してくださる方もいる、国際色豊かなコミュニティです
- autorace (of course)
- enjoy Elixir
- freedom (anything, anytime, anywhere) ※「いつ何時、誰の挑戦でも受ける」のストロングスタイル
What's autorace ?
- オートバイの競争(公営競技)です
- 日本のみのルール
- 一周500メートルのオーバルコースを6周回
- ハンデ戦(速い選手ほど後ろから走る)
- 公営競技とは、「国が認め、国の定めた法律のもとで運営されている『ギャンブル』のこと!」
- 1レースあたり、8台の競争車で1着を競います
- オートバイにブレーキはありません
- no breakです
- https://autorace.jp/guide/en/
- オートレース場は2022年06月現在、全国に五場あります
- 伊勢崎(群馬県)
- 川口(埼玉県)
- 浜松(静岡県)
- 山陽(山口県)
- 飯塚(福岡県)
- 元SMAPの森且行さんが選手として活躍されています
- いくつかレース映像をご紹介します(ぜひご覧になってください!)
- This is オートレース!
- 10 19 ロッテvs近鉄 実況アナ絶叫 『This is プロ野球!』
connpass API
各種情報の取得ができます。
- グループごとにseries_id(グループID)が割り当てられていますのでこれを指定すると検索しやすいです
- このseries_id(グループID)の値は一度、connpass APIをコールしてみないとわからないです
- autoracexのseries_id(グループID)は、11144です
- ちなみに主筋のfukuoka.ex/kokura.ex/ElixirImp -Elixir Communitiesは、一門みな統一番号でして、5294です
プログラムで書くとこんな感じです。
Mix.install [:req]
keyword = "autoracex"
%{body: body} = Req.get!("https://connpass.com/api/v1/event/?keyword=#{keyword}")
Map.get(body, "events")
|> Enum.find(fn %{"event_url" => event_url} -> String.contains?(event_url, keyword) end)
|> Map.get("series")
|> Map.get("id")
series
-> id
とネストしているところはこんな書き方で取得することもできます。
Map.get(body, "events")
|> Enum.find(fn %{"event_url" => event_url} -> String.contains?(event_url, keyword) end)
|> get_in(["series", "id"])
connpass APIで振り返るautoracex 100回
Livebookで実行してみます。
Dockerを使います。
docker run -p 8080:8080 -p 8081:8081 --pull always livebook/livebook
上記は、公式に書いてあります。
実行すると、http://localhost:8080/?token=bajcxod355oaerqxn65j5dkwv5mkgrir
のようなものが表示されるので、迷わずブラウザでアクセスしてみましょう。
あ、tokenの値は都度かわりますので適宜読み替えてください。
そうすると、Livebookが立ち上がるので、画面右上のNew notebook
ボタンを押してElixirのプログラミングを楽しんでいきます。
Reqのインストール
HTTPクライアントReqをインストールしておきます。
Mix.install [:req]
イベントの取得
まずはこれまで登録したイベントを取得します。
count = 100
series_id = 11144
events = Stream.iterate(1, &(&1 + count))
|> Enum.reduce_while([], fn start, acc ->
Process.sleep(5000)
IO.inspect(start)
%{body: body, status: 200} = Req.get!("https://connpass.com/api/v1/event/?series_id=#{series_id}&count=#{count}&start=#{start}&order=2")
%{"events" => events, "results_available" => results_available} = body
new_acc = acc ++ events
cont_or_halt = if Enum.count(new_acc) < results_available, do: :cont, else: :halt
{cont_or_halt, new_acc}
end)
以降、events
に対してあれこれしてみます。
イベント登録数は?
Enum.count(events)
第一回目の開催は?
events
は、開催日時順に取得しています。
説明が前後しますが、order=2(開催日時順)
の指定です。
直近の開催が先頭にきています。
ですから第一回目を取得するには
events |> Enum.reverse |> Enum.at(0)
と逆順にして先頭を取得するか
events |> Enum.at(-1)
というふうに一番うしろを取得するとすればよいわけです。
2021-01-15が取得できました。
ちなみに、この2021-01-15という日は、私が日本マイクロソフト賞④を受賞した日です
「elixir azure 愛」で検索してください。
YouTube動画がみつかるはずです。
ちなみに一年間は、365日 ÷ 7日/週で、だいたい52週くらいあります。
週1で開催していると年間で50回を達成できます。
週2で開催すると年間100回を達成できます。
キリ番はいつ?
events
|> Enum.find(fn %{"title" => title} -> String.contains?(title, "#50") end)
|> Map.take(["title", "started_at"])
第50回は、2021-10-16でした。
第100回は、2022-05-20でした。
延べ参加者数は?
events
|> Enum.map(fn %{"accepted" => accepted} -> accepted end)
|> Enum.sum()
一番参加者が多かった会は?
events
|> Enum.max_by(fn %{"accepted" => accepted} -> accepted end)
参加者が0人の会は?
events
|> Enum.filter(fn %{"accepted" => accepted} -> accepted == 0 end)
|> Enum.map(& Map.take(&1, ["title", "started_at"]))
そうだ参加者が0人の会はなかったことにしよう!
events
|> Enum.reject(fn %{"accepted" => accepted} -> accepted == 0 end)
|> Enum.all?(fn %{"accepted" => accepted} -> accepted > 0 end)
connpass APIで振り返るautoracex 100回 は、単なる通過点
We are the Alchemists, my friends!!!
autoracexへの参加との明確な因果関係はありませんが、一門からは世界に認められたメンバーを輩出しております
@mnishiguchi さん
Please welcome @MNishiguchiDC to the Nerves core team! He has been contributing to Nerves Project for a long time, and we're thrilled to have him onboard.🎉
— Nerves (@NervesProject) June 9, 2022
初期のころから頻繁に参加してくださっている常連です。
実は共同代表者になっています。
ペンパルです。
@the_haigoさん
お坊さんなので「辻説法」ならぬ「辻参加」をよくされています。
おそらくconnpassには一度も参加登録をされていないのかもしれません。
むしろでそうあってほしい。
これからもautoracexはただ前へ歩みを続けます。
進撃を続けます。
「最後に、これから自分たちは何があっても前を見て、ただ前を見て進みたいと思いますのでみなさん、よろしくお願いいたします。」
志士は溝壑(こうがく)に在るを忘れず、勇士は其の元(かうべ)を喪うことを忘れず
「死ぬときはたとえドブの中でも前のめりに死にたい」
It goes on and on and onです。
まとめ
connpass APIでautoracexを振り返ることを楽しみました。
そして、この記事自体がEnumモジュール、|>(パイプ演算子)、LivebookといったElixirでよく利用されるものを解説した記事となっております。
Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
We are the Alchemists, my friends!!!
Qiita Engineer Festa 2022 2022年6月1日〜7月18日
QiitaEngineerFesta2022 タグと
fukuoka.ex:福岡Elixirコミュのオーガナイゼーション指定
をお忘れなく!
明日2022/06/16(木)は、NervesJP #26 Nerves tips, /bin/sh & nerves_heartでお会いしましょう!
We are the Alchemists, my friends!!! について
- 私は、Queenのにわかファンです
- 映画『ボヘミアンラプソディ』をみてからの筋金入りの、正真正銘のにわかファンです
- We Are The Championsの替え歌です
- 最初は単なる冗談でしたが、いまではそれなりに深い意味が秘められているようにおもう今日このごろです
- 特に「my friends!!!」と呼びかけるところがポイントです
Elixirを私は楽しんでいる。
そしてそのよさをまわりに伝えたいとおもいはじめた。
私がElixirをはじめたばかりのころに憧れた錬金術師たちはQiitaに記事を書いていた。
それまでのQiitaは見るものであったが、自分でも書いてみることにした。
時は経ち、同時期にElixirをはじめた友であり、ライバルである友人たちは世界へと羽ばたいていく。
それを応援したり、自分のことのようにうれしく思う一方で、指をくわえて座しているだけでいいの? という煩悶、忸怩たる思い。
まだまだやれるはずだという根拠の無い自信。
志士は溝壑(こうがく)に在るを忘れず、勇士は其の元(かうべ)を喪うことを忘れず
It goes on and on and onです。
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!