2022年5月開発状況

Flutter

オーディオプレイヤーを実装しつつ、Flutterを学びました。
オーディオ再生部分には、以下のパッケージを用いました

just_audio 0.9.20

Flutterの公式ドキュメントにある
State management
を読んで、Flutterに適した書き方を学んでいます。
Simple app state management
の章で、状態管理につかう手段として、providerパッケージが推奨されていたので、providerを導入して、サンプルをいじっておりました。
その後、アプリの規模が大きくなるとproviderでは扱いが面倒な問題を解消したriverpodというパッケージが、providerの作者によって開発されていることを知りました。
riverpodを導入して、サンプルの改造をしながら実験しています。

参考にしたページ
Flutterの状態管理手法の選定
【Flutter】 Provider のススメ
【神パッケージ】 Riverpod の使い方【Flutter】

Repete

Flutterでの開発、ある程度まとまった習作ができました。すこしあいだを空けて別のことに取り掛かっても、この習作を見ればやりかたを思い出せるという状態になりました。

ながらく、とりかかれていなかったRepete、Repete Plusのアップデートを再開しました。
ところで、Repeteは、Googleからおかしなトラフィックがあるんじゃないですかと判定されて、3月14日から4月28日まで広告制限されていました。制限が解除されてほっとしていたのですが、5月6日から再び広告が制限されてしまいました。
まったくこころあたりがないのですが、Googleの判定が全てなので、致し方ありません。
アプリの利用数が少ないのでちょっとした変動が、不正クリックと判定されているのだろいうか、と思うぐらいです。
ちょっとした変動で目をつけられることのないように、もっとアプリ利用者を増やしていこうと、思うのでした。

Repete Plus

25日あたりから、Repeteとともにアップデート作業再開。
現行では選曲画面は、アルバムタブなら一覧表示、フォルダタブならルートフォルダが表示されます。これでは、フォルダに100個あるアイテムの、60個目から選びたい場合など、数度のタップとスクロールを行う必要があります。これは面倒。
ということで、前回使用した箇所を開く機能を実装中です。

英語学習

5月は1日平均51分。
横山雅彦/中村佐知子「英語のハノン 初級」Unit 7 – Unit 9。Repeteの原曲再生を使用。
ELSA Speak。1日10分目安。
花本金吾「基礎英作文問題精講」で英作文。1日10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。05/10にPart 3まで終了。Part 1からあらためて開始。
パス単の英検2級。

中国語学習

ほそぼそ続けています。
5月は、1日平均30分。
準1級トレーニングブックの作文。3周目。1日10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。5月19日にx周目完了。これでいったん、準1級トレーニングブックの作文は終了。
HSK5級トレーニングブック[読解・作文問題編]の閲読練習問題を少々。
李軼倫 著『はじめよう中国語音読 中級編』16課〜20課。Repete Plusの原曲再生を使用。
むずかしい。聴いても、意味が取れなくなってきました。18課から、リスニングを繰り返して書き起こしを行い、そのあと、テキストを参照して、できてないところを調査。文意を把握してから、スピーキングの練習に入るようにしました。

リングフィットアドベンチャー、すべての称号を獲得しました!

リングフィットアドベンチャー、2022年5月21日、783日目、「椅子のポーズ界のNo.1アイドル」「リングフィット グランドマスター」を獲得。
すべての称号を獲得しました!
Lv 732, 総活動時間230:11:51、総消費カロリー47202kcal、総走行距離406.75km

これまでのリングフィットアドベンチャー
メイン(1周目)。155日目。2020年8月3日。リングフィットアドベンチャーをクリアした
エクストラ(2周目)。351日目。2021年02月14日。(記事は書いていません)
マスター(3周目)。559日目。リングフィットアドベンチャー3周目クリアしました
634日目。リングフィットアドベンチャー、すべてのワールドをコンプリートしました!

運動メニュー

3周目クリアしたあと、すべてのワールド制覇と図鑑コンプリートを目指しつつ、称号集めにも乗り出しました。

そのさいの運動メニュー。
カスタムモードで回復系7種のフィットスキル。
ゲームジムを4~5回。
バトルジムを3回。
運動時間30分を超えたら終了。
100kcal程度。
プレイ時間は1時間ほど。

すべてのミニゲームでSランクを取得した後は、メニューを変更しました。
カスタムモードで回復系7種のフィットスキル。
ステージ4つ程度。
スムージー60個作成。
100kcalを超えたところで終了。
運動時間30分程度。
プレイ時間は1時間ほど。

終了の目安を運動時間30分超から、100kcal超に変更しました。
ミニゲームを終えてバトルジムだけになると単調に感じたことから、ステージを再び走るようにしました。
バトルは、「すべての運動を 最後までおこなう」設定。一度のプレイで、4ステージ×2で8バトルほど。
フィットスキルは、1000回前後達成ごとに別のものに入れ替えながら進めました。

また、スムージーや素材もできるだけ集めていくと決めました。
全称号獲得までに、スムージーや素材をすべて99個にできるのではないかと思ったのですが、ステージを走り出して素材取得のペースを体感すると、すべて99個というのはとても無理とわかったので、できるだけスムージーを集めるという方針に変更しました。
毎回60個スムージーを作ることにしました。
このさい、ウシロプッシュやバンザイプッシュ、サゲテプッシュでリングコンを押しました。ウデ系の運動はすでに規定回数をクリアしていて、フィットスキルから外していたので、ここで腕の運動を入れることとしました。

回復系7種のフィットスキルのカスタムセットは、規定回数に達するとセットからはずしていき、752日目には、カスタムセットは終了しました。

ドラゴン石像のコアとドラゴン石像のカケラ

当初、素材をすべて99個集めようと考えました。しかし、「ドラゴン石像のカケラ」はもう手に入りません。
「最果ての国」のステージ「スタディオンバリケード」は、巨大ドラゴン石像とのバトルとなっています。
巨大ドラゴン石像を倒すと、お金と「ドラゴン石像のコア」を放出します。
「ドラゴン石像のコア」を99個集めれば、つぎからは「ドラゴン石像のカケラ」を放出したりしないだろうか?と考えました。
毎日3-4回バトル。
数十日続けて99個「ドラゴン石像のコア」を集めました。
どうなるかなと思いつつ、次のバトル。お金のみの放出でした。
「ドラゴン石像のカケラ」が出ることはありませんでした。

スムージー を集める

スムージーを集めるため、ふたたびステージを走るようになりました。
毎回、ごまスムージーを飲んで、素材の入手数を2倍にして開始。
どんな素材が取得できるのかを気にかけながらステージを走ると、新鮮さを感じました。

スムージ集め始めた当初は、すべてのスムージーを99個にするつもりでしたが、やりはじめると無理だと感じたので、「スムージーを飲む」で最初に映し出される画面上のスムージーをできるだけ集めることとしました。

終盤では、ケフィアグレインなど限定されたステージでしか取得できない素材のために、何度も同じステージを走ることとなりました。

ドラゴンドリンク、チカラドリンク、マモリドリンク、スキルドリンクは99個にできませんでした。
ドラゴンドリンク、チカラドリンク、マモリドリンクは、時間をかければ99個取得はできるのですが、スキルドリンクはさらに集められるのかどうかは不明です。

今後

これで、リングフィットアドベンチャーは一区切り。
日々のフィットネスとして、新たな習慣を作りたいと思います。
と思っていたのですが、、全称号獲得までに、新たな習慣、メニューが定まらなかったので、新フィットネスを試行錯誤しつつ、しばらくは、リングフィットアドベンチャーを継続します。

関連

リングフィットアドベンチャー、すべてのミニゲームでSランクを取得しました

スマホの料金プランをahamoに変更しました

ahamo

2022年3月半ばから、Androidスマートフォンの料金プランをドコモの「ahamo」に変更しました。
データ容量20GBまで月2,970円(税込)のプランです。

それまで、1GB超えると1000円料金がかかるプランだったので、外ではここぞというときにしかインターネットに接続しない生活を送っていました。

ahamoにすると、データ容量20GBまでは、固定ということで、感覚が変わりました。
外で、YouTubeを見たり音楽をかけたりして、「あら、まだまだ容量ある」というのに驚き。

こういったプランの契約者はすでにかなりいて、外でインターネットに常時接続、常時通信しているとなれば、スマホの使い方も相当変わるなあと、想いに耽りました。

テザリング

その後、スマホの通信回線を使って、外部機器をインターネットに繋ぐ機能「テザリング」を使い出しました。

Wi-Fiテザリングは簡単にできて、あっさりと、外でMacをインターネットにつなぐことができました。Android StudioでのFlutter開発では、頻繁にネットからダウンロードする必要がありますが、そういったスタイルでも、実行可能。
野っ原や川べりで、Mac使うことができる。びっくりしました。

月末

その後、YouTubeなど見たり、Macで開発したり。3月は動画を見るときは、恐る恐るでしたが、4月は、気楽に開くようになりました。
そうしたら。
4月は月半ばで10GBを超える事態となりました。
20GBというのは、とてつもない容量だと思ったものでしたが、やはりデータ通信量には、注意しなければならないのでした。
思いをあらためて、むやみに動画を見たりするのは控えつつ、川べりでAndroid Studioを開いたりしております。

最近、BOOK WALKERで電子書籍を購入しています

最近、といいますか、今年(2022年)にはいってからBOOK WALKERでも電子書籍を購入するようになりました。

KADOKAWA直営電子書籍サイト BOOK☆WALKER│無料試し読みあり

2021年の11月22日から11月30日の期間、KADOKAWAの80年代以降の社史である『KADOKAWAのメディアミックス全史 サブカルチャーの創造と発展』がBOOK WALKERで無料配信されました。
『KADOKAWAのメディアミックス全史 サブカルチャーの創造と発展』は、もともとKADOKAWAグループの従業員に配布されたものでした。Twitterなどで評判になっており、読みたいものだと思っていたところ、BOOK WALKERで配信されるということでした。
『KADOKAWAのメディアミックス全史 サブカルチャーの創造と発展』電子版を11月30日まで無料配信中

読みたい本がそこで配信されたということで、BOOK WALKERに登録。

以降、BOOK WALKERでも電子書籍を購入するようになりました。

特に、2022年の正月のセールでは、ずいぶんと書籍を購入しました。
講談社のまとめ買い50%オフセールとBOOK WALKERのコイン50%還元が組み合わさって、ずいぶん求めやすい価格になっていました。
読んでみたいと思っていた『興亡の世界史』や元号(年号)を調べていたときにちょこちょこ読んでいた『天皇の歴史』をまとめ買いしました。

アプリの使い勝手も良い感じです。
とはいえ、下端にならぶ5つのタブ「ストア」「読み放題」「本棚」「マイブック」「設定」のうち、ほぼ「マイブック」タブのみを利用しています。
そこで、「読んだ順」にならべた本を、何冊か少しずつ読んでいくという使い方で読んでいます。

2022年4月開発状況

Repete Plus

4月は、Repete Plus、Repeteとも開発が進んでおりません。
Flutter、Chrome extensionに時間を費やしました。
(3月とほぼ同じ状況となっております)

Repete

3/14からAdMobが広告表示が制限され、ほぼ停止となっておりました。
4月になってもその状態はつづいていました。ひと月たった15日ごろには解除されるのではと思っていましたが、制限は継続。
4月28日になって、広告表示制限が解除されました。
ほっとしました。

Chrome extension

先月から作成していたChrome extensionが完成しました。
「まず、テキスト全体をぼかし、選択したテキストは明瞭に表示される」拡張機能です。
名前は、「Clear Text in Fog」としました。

Clear Text in Fog – Chrome Web Store

解説ページ

音声と本文の両方が提供されているWebサイトでの使用を想定しています。本文テキストをぼかしておいて、ぼかした本文をたどりながらリスニング。聴き取れない箇所が、ぼかしのまま残ることで、実際には聞き取れていない箇所がわかるのではないか?と考えました。

作っている最中に、Chrome extensionはiPhone/iPadやAndroid機などモバイルでのChromeでは対応していないことを知りました。Chrome extensionなら、小ネタをさらっと作成してタブレットで試せると考えていたので、がっかりしました。

今回のChrome extension、試作は1週間ほどでできましたが、その後、調整するところが色々と出てきて、4月なかばまでかかりました。

完成したので、Chrome web storeに登録。
2度のリジェクトを経て、登録されました。

Clear Text in Fog – Chrome Web Store

リジェクト1度目は、プライバシーポリシーのページへのリンクがおかしい、というもの。
ごめんなさい。間違えていました。
修正して再提出。
リジェクト2度目。

Spam and Placement in the Store

Functionality: Do not post an extension with a single purpose of installing or launching another app, theme, webpage, or extension. Extensions with broken functionality – such as dead sites or non-functioning features – are not allowed.

Spamという文字が目に入ってショック。機能が壊れていると判断されたのでしょうか。
機能説明の文章を修正して、再提出。

すると、今度はなにごともなく、審査をパスして、Chrome Web Storeに並びました。

Flutter

今回のChrome extensionで作成した機能は、もともとFlutterで実装しようと思っていました。
Flutterに慣れるにあたって、ちょうど手頃な題材だと考えていたのです。

しかし、Chrome extensionで作ってみたところ、これ良い!という高揚がなかったので、Flutterでの作成は、いったんとりやめです。
Chrome extensionでは、モバイル機で利用できなかったので、元々の構想にあった「指やペンでなぞる」という要素を試せていないので、この要素を実装したら、また手応えがあるやもしれません。が、いまはとりやめます。

オーディオプレイヤーを実装することにしました。
Flutter packageを調べると、以下の3つが人気を集めていました。

just_audio 0.9.20
audioplayers 0.20.1
flutter_sound 9.2.10

exampleを試してみて、just_audioで進めていくことに決定。
just_audioのプレイヤー部分のソースコードを見ると、iOS部分ではAVQueuePlayer、Android部分ではSimpleExoPlayerを使用しています。
FlutterはWebでも利用できる、最近ではWindowsでも利用できると目にしました。しかし、こうしてpackageを見ると、それぞれに対応した処理を用意しなければならないというのを目の当たりにしました。packageが各プラットフォームに追随するのは、とてつもなく大変なのではなかろうか、と思いました。

英語学習

4月は1日平均60分。
横山雅彦/中村佐知子「英語のハノン 初級」Unit 5 – Unit 6。Repeteの原曲再生を使用。
ELSA Speak。1日10分目安。
花本金吾「基礎英作文問題精講」で英作文。1日10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。
パス単の英検2級。

中国語学習

ほそぼそ続けています。
4月は、1日平均31分。
準1級トレーニングブックの作文。2周目。1日10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。4月16日に2周目完了。以降3周目。
李軼倫 著『はじめよう中国語音読 中級編』12課〜15課。Repete Plusの原曲再生を使用。



2022年3月開発状況

Repete Plus

アップデート(version 9.7.2) – ボリュームスライダーの幅をすこし広くしました

3月は、Repete Plus、Repeteともほとんど開発を進めていません。
Flutter、Chrome extensionに時間を費やしました。

Repete

3/14からAdMobが広告表示をほぼ停止。
その数日前?に、Repeteの広告を押してしまったため、開発者による不正行為と見做されたのかもしれません。ピンポイントで気になる広告だったので、つい押してしまったのです。

Flutter

Udemy

Udemyの講座、完了。
The Complete 2021 Flutter Development Bootcamp with Dart

一つのファイルに一連の処理を長めに記述するところから開始して、まとめられるところはまとめて別のファイルへ移動、ひとつひとつのファイルは簡潔なものにしていく、というリファクタリングの過程をステップバイステップで示しながら進めていくところ、とても参考になりました。

講座動画初出時から時間が経過して、Flutterのアップデートが進んだので、講座とは記述の仕方が変わっているところがかなり出てきています。
後半、Web APIとの連携などWebサービスとの連携では、Webサービス側の連携の仕方が変更されているので、Webサービス側のドキュメントをよく読み込む必要があります。

Firebaseとの連携

Get to know Firebase for Flutter
Google提供のチュートリアル。
Flutter+Firebaseで、チャットサービスを作成。
あっさりチャットが実現できて、おののきました。

Flutter公式サイト

Flutter documentation
Flutterの公式サイトのドキュメンテーション。
とても充実しており、しかも、情報がまとまっていて探しやすい!

Chrome extension

Flutterに少しなじみができました。
ここで作成しようと考えたのが、「テキストもしくは画像をぼかしておき、指やペンでなぞった箇所がぼかしが解除されてはっきり表示される」アプリです。
曇ったガラスを拭くとそこだけ見通せるイメージです。

中検2級を勉強していたとき。リスニング問題。2分ぐらいの文章を聞いて、その後の5つの質問で正しい答えを選択する、というものがありました。
解答ページには、本文とその後の質問が記されています。リスニングの際にはなんと言っているのかわからない問題も、解答にある本文テキストを見ると、容易に内容が理解できます。特に中国語は漢字で記されているものですから、内容が掴みやすいです。それで、わかった気になってしまい、復習がおざなりになっていました。
そこで、解答の本文テキストをぼかしておいて、ぼかした本文をたどりながらリスニングすれば、実際には聞き取れていない箇所がわかるのではないか?と考えました。
iPadでCLIP STUDIO PAINTを使って実験。
ぼかしをペンで拭き取って文字が見える様に面白みがありました。
聞き取れていない箇所が多数あるのに気づけました。

しかし、リスニング問題の勉強では、最終的には、本文後の質問を聞いて「書き取り」を行うという形をとりました。(本文全ての書き取りは大変すぎてやりませんでした)
「書き取り」は気力を消耗しますが、勉強になります。

「ぼかしておいてペンで解除」アプリの構想は、良さもあったけど、ひとまず置いておこうという位置にありました。

Flutterチュートリアル中。少し慣れた段階でアプリを作っていくなら、「ぼかしておいてペンで解除」アプリが良いのでは、と考えました。
チュートリアルを一通り終えて、作る段になって、「ぼかしておいてペンで解除」アプリ、Chrome extensionで作れるのでは、と思い至りました。
ささっと作って、iPadのChromeなどでVOAのサイトなどで、使ってみると良いのでは、と考えました。(その後、作成中に、Chrome extensionはiPhone/iPadやAndroid機などモバイルでのChromeでは対応していないことを知りました)

Extensions – Chrome Developers
の解説を読みながら、開発開始。

開発者向けのウェブ技術 | MDN
でDOM操作、javascriptを調べながら開発。
そのほか、なにかあればググってさまざまなWebサイトの助けを借りて作成。

英語学習

3月は1日平均55分。
横山雅彦/中村佐知子「英語のハノン 初級」Unit3-5。
ELSA Speak。1日10分目安。theの発音が改善。
花本金吾「基礎英作文問題精講」で英作文。1日10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。
パス単の英検2級。

中国語学習

ほそぼそ続けています。
3月は、1日平均39分。
準1級トレーニングブックの作文。1日、新規2問、前日までの直近の問題4問で14日に作文85題1周目終了。15日からは2周目、10問ずつ、ただし間違えた問題は次の日に繰り越しでの10問。
李軼倫 著『はじめよう中国語音読 中級編』8課〜12課。


「Repete Plus」をアップデート(version 9.7.2) – ボリュームスライダーの幅をすこし広くしました

「Repete Plus」をアップデートしました。(version 9.7.1 -> version 9.7.2)

Repete Plusは、語学学習を支援するオーディオプレイヤーです。
無音部分を自動認識し、語学教材をフレーズごとに間隔をあけて再生できます。
フレーズごとに再生・再生不要を設定、再生速度変更、録音機能、テキストメモ機能など多彩な機能で語学学習を助けます。

Download on the App Store

使い方を紹介しているサポートサイトはこちら
Repete Plus – nackpan Blog

変更点

ボリュームスライダーの幅をすこし広くしました

ボリュームスライダーでの音量調整が少しやりやすくなりました。
よろしくおねがいします!

開発者後記

以前から、ボリュームスライダーに気になっている点がありました。
起動時に、音量が最大の場合、ツマミとルートボタンが重なってしまう問題。
そして、スライダーの幅が狭すぎて、音量調整が難しいという問題です。

cab77さんからコメントをきっかけに、いままで気になっていながらもそのままになっていた問題に取り掛かりました。
ツマミとルートボタンが重なる問題は、当初、幅が狭すぎるから起きると思っていましたが、実験してみると、どんな幅でも発生。
あれこれ試したすえ、こちらの記事で書いた方法で問題を解消。

そして、スライダーの幅。
すこしだけ広くしました。
以前は、2~3段階ぐらいの調整でしたが、今回のアップデートで4段階ほどの調整ができるようになりました。

MPVolumeViewのツマミとroute buttonが重なってしまう問題に対処する

iPhone/iPad開発で、Appleが用意しているボリューム調整用のコントロールとして、MPVolumeViewがあります。
オーディオ出力音量を示すスライダーと、オーディオ出力ルートボタンが表示されます。


MPVolumeView | Apple Developer Documentation

Apple Developerのドキュメントによると、MPVolumeViewの親となるUIViewを用意してoutletで結んでおきviewDidLoadに、以下のように記述することで設置できます。

parentView.backgroundColor = .clear
let volumeView = MPVolumeView(frame: parentView.bounds)
parentView.addSubview(volumeView)

ツマミとroute buttonが重なってしまう

しかし、上記の方法で設置すると、iOS 15.3.1現在、アプリ起動時、ボリュームが最大のときにツマミとルートボタンが重なって表示されてしまいます。

また、左端にツマミを移動させると、端まで到達できません。
見目麗しくなく、ルートボタンが押さえにくくなっております。(iPhone/iPadの脇の物理ボタンでボリューム調整できるので、ルートボタンを押さえることはできます)

ツマミとroute buttonが重なってしまう問題に対処する

ツマミとroute buttonが重なる問題にできるだけ簡便に対処したい。
viewWillAppearに移動してみると、ツマミとroute buttonが重なることは無くなりました。

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        parentView.backgroundColor = .clear
        let volumeView = MPVolumeView(frame: parentView.bounds)
        parentView.addSubview(volumeView)
    }

しかし、表示される際に、音量0から最大へとツマミが移動するアニメーションが入りました。

ボリュームスライダーに注目を集めようとはしていないので、アニメーションが入ってしまうと気になります。

ひとまず問題を解消する対処

その後、いろいろと試したところ、起動時にツマミとルートボタンが重なる問題を解消、そしてアニメーションが入らない方法がみつかりました。
ひとまずの対処法。

var volumeView: MPVolumeView?

override func viewDidLoad() {
    super.viewDidLoad()
    
    let vView = MPVolumeView(frame: parentView.bounds)
    parentView.addSubview(vView)
    
    volumeView = vView
    volumeView?.showsVolumeSlider = false
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    volumeView?.showsVolumeSlider = true
}

viewDidLoadでMPVolumeViewを追加。volumeSliderを一旦非表示にして、viewDidAppearでvolumeSliderを表示する、というかたちです。

ひとまず、これで問題は解消しました。
iOSのバージョンが上がった際に、MPVolumeViewの問題が修正されることを祈りつつ、いまのところはこれで対処したいと思います。