#えむけーろぐ

間違った事を書いていたらやさしく教えてください

大乱闘スマッシュブラザーズ SPECIAL

スマブラSPを買った。

www.smashbros.com

ダウンロード版を予約していたので、12月7日(金)にはプレイできるはずだったのだけど、木曜夜の上京時にSwitchを家に忘れてきたので、千歳に帰ってきた日曜日が初プレイ。みんなより3日遅れの参戦でした。

僕のスマブラ歴は、N64スマブラ→ゲームキューブDX→今回のSPという感じ。間にWii向けのXと、3DS/Wii U向けのやつの2つがあったみたいだけど、その頃にはゲームしなくなってしまっていたので、未経験。

ゲームの基本的な部分は記憶にあるものと変わらないけど、なんかよくわからないXと書かれた丸い何かが浮いていて、殴ると必殺技を使えるようになったり、それを期待して殴ると今度は爆発して吹き飛ばされたりと、謎要素が追加されていた。また、ゲームを進めていくうちにキャラクターが追加されていくのだけど、出てくるキャラが知らないヤツばっかりで誰これってなるのもまた楽しい。

今の所のお気に入りキャラはマリオとこどもリンク。研究室に持っていったらスマブラだけして1日が終わりそうなので、そこは自主規制しておこう……。

内定者イベント

就職先の内定者イベントに行ってきた。

春から一緒に働く2人の同期と顔合わせしたり、会社や事業部についての説明や戦略の説明、どういうことを期待されているかを聞いたり、相互理解セッション、今後取り組みたいことの検討と共有などなど。

とても楽しかった。普段とはまた違う人達と接するのは良い刺激になる。自分があまり気にしない事について深く考えていたり、同じ考えるでも自分とはモノの見方が違ったり。そんなわけで、普段とは違う部分の頭を使ったので、結構疲れた。

あと今日は、どちらかというとあまり喋れない日だった気がする。「今日静かだね?」と何度も言われた。静かでいたというつもりは無いのだけど、熱が入ると話のバトンを持ちっぱなしになってしまう悪いクセがあるという事を指摘されたのが忘れられなくて、その反動であまり喋らなくなったというのはあるかもしれない。たくさん喋れる時もあるので、その辺の発動条件はよくわかっていない。

まぁ何はともあれ、楽しい1日だった。来年の4月からいよいよ社会人なるんだなぁという気持ち。今後も楽しくやっていきたい。

実はこの記事はmktakuyaアドベントカレンダー2018 7日目の記事でした。明日の担当は僕のことが大好きな @rasyosu くんです。

ミスドの店内BGM情報を返すWeb APIを作った

RailsによるWeb API開発、SwaggerによるAPIドキュメンテーション作成の練習として、ミスタードーナツの店内BGM情報を返すAPIを作った。

Misdo BGM API

ミスドの店内BGM

ミスタードーナツの店内で流れているBGMは、USENなんかの音楽番組を流しているのではなく、独自に選曲しているようだ。

月ごとのプレイリストの内容は、以下のWebページから確認することが出来る。

店内BGM情報|ショップ情報|ミスタードーナツ

1時間毎に組まれたプレイリストには、それぞれテーマがある。例えば10時、14時、18時からの時間帯には、「ALL-TIME HITS(1)」という様々な時代のヒット曲のプレイリストが流れていたり、11時、15時、19時には「Now Hit Parade」というタイトルで最新ヒット曲が流れている。

f:id:mktakuyax:20181204130718j:plain

ドーナツを食べながら無限コーヒーを楽しむだけで、懐かしの洋楽から最新ヒット曲まで様々な曲に触れる事ができるのだ。

Web APIにしてみた

ここ最近はバイトや部活等でずっとWeb APIを開発していて、練習用の趣味アプリとしても何かWeb APIや、それと通信するモバイルアプリケーションを作ってみたいなと思っていた。

題材は何が良いかなぁとミスドでドーナツを食べながら思いついたのが、このミスドBGM APIを開発することだ。

仕様

仕様は以下のURLで公開している。

https://misdo-bgm.apps.m6a.jp/v1/docs/

エンドポイント

https://misdo-bgm.apps.m6a.jp/v1

Playlists API

  • GET /playlists - 今月のプレイリスト一覧
  • GET /playlists/1 - プレイリストの詳細
  • GET /playlists/now - 現在放送中のプレイリスト

Songs API

  • GET /songs/now - 現在放送中の曲

現状だとまだまだレスポンスの情報が少なかったり、nullに対する意識が低かったりするけど、今後改善していく。

APIを作っただけで終わりではなく、クライアント側でもっとおもしろい事を出来そうなので試してみているところ。

技術

スクレイピング

BGM情報はPDFで配信されている。PDFは6ページあり、1ページがそのまま1つのプレイリストに対応している。

PDFの解析にはRuby製の pdf-reader というGemを利用している。このGemにPDFを食わせたあとに、テキストを抽出すると一定のルールに従って曲情報が出てくるので、あとは文字列操作を頑張るだけだ。

pdf-reader gemでググると上司の書いた記事が上位に出てきて吹いた。

qiita.com

API開発

APIの開発には、RailsとGrape、Grape::Entityを使用した。仕事で使ってる技術を趣味アプリでも使おうマインド。

RailsとGrape、Grape::EntityによるAPI開発の詳しい手順は先日Qiitaに書いたので自分も何か作ってみようという人は参照してほしい。

qiita.com

Misdo BGM APIでは、上記の記事で行った手順に加えて、APIドキュメントの生成のためgrape-swaggergrape-swagger-entityを利用している。これについても後々Qiitaに書いておきたい。

運用

デプロイ先としてConoHa VPS上に、ConoHa公式のDookuアプリケーションイメージを展開して利用している。

Dokkuとは、自分のサーバ上にHeroku的なモノを作ることが出来るOSSだ。業務として人からお金をもらってマジメに作るアプリケーションならHerokuやAWSを使うけど、趣味レベルなら十分戦える。

詳しくは、さっき書いたアドベントカレンダーの記事をどうぞ。

qiita.com

おわりに

そこそこの量のデータがあり、また止まっても別に困らないけど自分でも欲しいなと思える練習用の題材として、なかなか良いテーマだったと思う。

また、このAPIを作るにあたって、スクレイピングと著作権についても調べてみた。

it-bengosi.com

上の記事を読んだ感じだと、以下の項目を満たす限りは大丈夫そうだ。(法律に関する知識のない自分の解釈なので正確性は保証できず。)

  • 利用規約への同意を経た会員登録・ログイン等をせずに見られるコンテンツで、クローラに対する制限(robots.txtとか)が無いこと。
  • 情報の複製が情報解析目的であること。
  • 取得した情報をそのまま配信するのではなく、自分で分析して再構成したものを提供していること。

今後も楽しく便利な趣味アプリを作っていきたい。

運が悪すぎる問題

通学は高専専用の通学バスを利用したり車を運転していったりするし、バイトはリモートなので家や学校でやってるしで、公共交通機関を利用する機会は月に1回や2回あれば良いくらいだ。そして、これは「気の所為」とか「たまたま」で片付けられる話ではあると思うのだけど、僕が公共交通機関を利用するととにかく災害や悪天候による乱れに巻き込まれる。

f:id:mktakuyax:20181205214329p:plain

これは9月の台風のときの写真

まずは今年の3月に旭川で行われた複雑系マイクロシンポジウム。前日に移動を始めたのだけど、その日がちょうど大雪で大変な事になった。JRの特急券を払い戻して高速バスに1時間くらい並び、なんとかしてたどり着いたけど、二度と冬に遠出はしたくないなと思った。

mk-nikki.hatenablog.jp

さらに、9月の電気学会。1日目の9月5日は、ちょうど台風21号で道内が大変なことになっていた。幸い僕は午後からの学生ポスターセッションに出る予定で、その時間までには間に合う感じで電車が復旧してくれたけど、帰りも何故か電車が死んでいて、2時間くらい都市間バスで立ちっぱなしだった。冬じゃないし遠出でも無いのになんでこんな目に遭わなきゃいけないんだ、と思った。そして、次の日に大地震が来た。

mainichi.jp

で、今回の内定者イベントだ。金曜日の午後からの日程なので、午前中の飛行機で行けば十分間に合う予定だったのだけど……このとおり。早めに教えてくれたので木曜夜の便に振替したけれど、行けたはいいが帰れない、なんてことにもなりかねない。 

f:id:mktakuyax:20181205213355p:plain

本当に運が悪すぎる。そういや先日のうみさま飲みの時もすごい事になっていた気がするな。今年に入ってから、公共交通機関を利用したタイミングはほとんどこういうのにぶち当たってるかもしれない。冗談抜きで。別に怒ってもしかたがないので怒ってるわけでも、ましてや鉄道会社や運行会社に怒ってるわけでもなく、ただただ愚痴を書き連ねてアドベントカレンダーのネタにしようというだけなのだけど、どうしてこうも運が悪いのか。

とりあえず、こんな事を言っていても仕方がないし、内定者イベントはめちゃくちゃ楽しみなので、行けない・帰れないなんてことにならないことを祈りつつ、やっていこうと思います。

慣れについて

さっき久々に父に会って*1、彼が使っているiPhone 7 Plusのアレコレをしていたのだけど、iPhone Xの画面に慣れた目で見ると「え、iPhone X対応してないのこのアプリ」みたいな気持ちになってしまった。

初めてiPhone Xを触った時は、「え、なにこれ、気持ち悪い。」という印象だったのに、慣れというのはこわいものだ。

振り返ってみると、Twitterのふぁぼがいいねになったのも、iPhoneからイヤホンジャックが消えたのも、MacBook Air 2013からMacBook Pro 2016にしたらキーボードがパタパタになって変なバーがついたのも、全部慣れて(諦めて?)受け入れてしまっている。変わった時は、「なんだこれ!前のヤツ返せ!」って思っていたのに、今となっては、逆に古い方をもううまく使えないレベルになっている。

こんな感じの話は、rebuild.fmのEP185でnaanさんが語っていたなぁと思い出すなどした火曜日の夜であった。

http://rebuild.fm/185/#t=00:14:59

*1:複雑な事情とかではなく、単に最近道内外のいろいろなところで仕事をしている。時によって群馬だったり仙台だったり埼玉だったり砂川だったりするのでいちいち覚えていない。

iOSで使うブラウザをChromeからSafariにした

今までiOSデバイスでは、macOSと同様にChromeを使っていたのだけど、Chromeをやめて標準のSafariを使うことにした。

理由はいろいろあるが、一番の理由はChromeから記事をShare Extensionを用いてシェアする時に、リンクしか渡してくれない事だ。

Webブラウザで今見ている記事をTwitterにシェアしたいとしよう。Safariだとこうなる。

f:id:mktakuyax:20181130134956j:image

一方Chromeだとこうなってしまう。

f:id:mktakuyax:20181130135014j:image

OGPタグ等のデータが適切に設定されているWebサイトなら、URLを貼っただけでTwitterがいい感じに解釈してリンクを使ってくれるが、そうでないWebサイトだと、単なるURLのみシェアする事になって、わかりにくい。

f:id:mktakuyax:20181202183137j:image

他にも、これはGoogleではなくiOSの問題だが、Safariならワンタップで開けるものをChromeだとわざわざ長押しして開かなきゃいけなかったり、Safari以外ではまだPWAが使えなかったりとか、いろいろある。なんだかんだ言って、デフォルトが最強なのだ。

Safariに乗り換えて3日くらい経つけど、今の所不便していないので、このままいっちゃおうと思う。なお、MacではふつうにChromeをデフォルトブラウザにしている。

mktakuyaアドベントカレンダーをやります

憧れの自分アドベントカレンダーを、今年はやってみようかなと思っています。

adventar.org

今日は苫小牧高専アドベントカレンダーの記事を書いてたら力尽きたので、明日から本気出します。

基本的には自分一人で書いていこうと思っていますが、すでに何人か登録してもらっているように、なにか書きたい事があればぜひ書いていただければと思います。

目指せ完走!