この記事について
改訂新版[エンジニアのための]データ分析基盤入門<基本編> データ活用を促進する! プラットフォーム&データ品質の考え方 を読んで、自分なりに噛み砕いた内容をアウトプットしています
改訂新版[エンジニアのための]データ分析基盤入門<基本編> データ活用を促進する! プラットフォーム&データ品質の考え方 を読んで、自分なりに噛み砕いた内容をアウトプットしています
つよつよエンジニアを目指して、定期的に公式ドキュメントを読み漁るシリーズ。
今回はFirefoxでおなじみのmozillaから「Web API|MDN」を読んでみました。
プロジェクトの関係でweb開発に触ることになりまして、HTML、CSS、JavaScriptの部分はある程度分かっているつもりなのですが、ブラウザを介してデバイス機能をつかうようなあたりは良く分かっていないので、このページを読もうと思った次第です。
WebAPIというと、ネットを介してリクエストとレスポンスを送受信するものがイメージされると思いますが、ここのページではブラウザAPIを扱っています。
そもそも、クライアントサイド JavaScript での APIは主に2つに分けることができ、
・ブラウザAPI
ブラウザに組み込まれたJSで、デバイスの情報を取得したり命令を出したりできる。
・サードパーティAPI
ブラウザには組み込まれておらず、通信して情報を取得する。
となるそうです。
一般には後者の方を指して、WebAPIと呼んでいるイメージですが、
今回のは前者みたいです。(ならこのページはブラウザAPIと表示すべきでは???)
→詳細はコチラ
ーーー
というわけで、Web API (もといブラウザAPI)のリファレンス一覧を軽く読んでみたので、各項目を簡単に紹介していきます。
初めてのブログです!🌷
※始めに...この記事ちょこっと長めなのと、課金のかなーり表面的な上澄のようなお話なので、その二点、あらかじめご了承ください🙇♀️
早速課金システムのお話を始めていこうと思います🙇♀️
まず、課金システムといっても大きく分けて下記の2パターンの実装方針があります。
課金アイテムがあるスマホアプリを使ったことがある方はなんとなくイメージしやすいかもしれませんが、課金システムは大きく分けて2つの機能を実装する必要があります。
それぞれの概要を簡単に説明するとこんな感じになります。💰
続いて、上記課金アイテムの主な処理は下記のようになります👇
ユーザー購入時:
ユーザー購入時:
更新時:
定期バッチ更新:
この説明から分かるように、サブスクの実装は単純に処理することが多いのと、ユーザーのステータスを保持しておかないといけないのでその点も実装上でややこしくなってくるポイントになります。
都度課金の実装については、おおよそシンプルなものになるので、今回は省略して、これ以降の「課金システム」というのは主にサブスクについてのまとめになります。
ます、サブスクはその仕様によって難易度が天と地ほどの差が出てきます。
サブスクの仕様について、パッと思いつく限りのだと
ここから少しだけ実装面のお話になります。(軽ーくなので、詳細は省きます🙇♀️)
サーバーの構成は実装が少しだけ楽になるものを記載してます!
※AWSを使うと想定した場合で文言使います
このサーバー構成がおすすめの理由としては、
となります。
ここで、私が実装した時のストアから受け取れる、レシート情報とwebhookの通知を少しだけ簡単にまとめます🍋(レシート情報は変更が入る可能性が高いので最新の情報は公式HPを参考にしてくだいさい!)
Apple:
次に、サブスクの更新時にwebhookから送られてくる通知情報を軽く説明します。
Google:
Apple:
通知の種類をざっと簡単に書きましたが、googleとappleそれぞれで10個以上の通知の種類があり、それに対応した実装とテストが必要となるため、これも大変な部分になります...😭
では実装面のお話はこれくらいにして、ここから話を少し変えて、実装を経験して大変だったポイントをまとめていこうと思います!
大変なポイントはまだまだありますが、大きなものであげるとこんな感じでした。
以上が、私が課金システムの実装をして得た知識(ほんの一部)と大変だったポイントのお話でした☺️
今回はフルスクラッチ実装のお話でしたが、フルスクラッチは単純に時間と労力がかかるものなので、既存の課金システムのサービス(もちろん有料)を使える場合は、そちらを使うことも検討してみるといいかもしれません。
最後になりますが、ここまで読んでいただいてありがとうございました!🌷
以前、Unityの公式ドキュメントを通して読んでみて(以前の記事はコチラ)、結構学びがあったので、今回はC#言語そのもののドキュメントを読んでみたいと思います。
実際に読んだのは、こちらページです。
https://learn.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/overview
サイトの構造が分かりにくいのですが、サイドバーの「はじめに」~「C#プログラミングガイド」まで、ざっくりと目を通しました。
ただし、Unityドキュメントで既に読んだことが大部分で、それ以外の部分はUnityではまだ扱えなかったりするので、業務上の収穫は少なめでした。
面白いなと思った部分を下記に共有したいと思います。
1.Delegateの設計ミス
・対象ページ:System.Delegate と delegate キーワード
Delegeteとは、ごく簡単に言うと、関数を保存しておける変数のようなもの(私訳)
C#では関数を1つ保存できるDelegeteと、複数同時に保存できるMulticastDeleteが明確に区別されて設計されていますが、プログラミングの実用上、この2つは曖昧になってきたらしいです。
そこで下記の一言。
この区別は、実際には当初考えていたよりも役に立たないことがわかりました。
これは脆弱性を生んだりするような設計ミスではありませんが、公式ドキュメント上に間違いを認めるような文言が載っている、というのは珍しい感じがして、ちょっと面白くないですか?(私だけ?)
2.パターンマッチング
・対象ページ:パターンマッチング
「あ、これ使いたいかも」と直感的に感じた機能。
※誤解を生みやすい名前ですが、Regex.Match()とは別物です。
公式の例はコードコチラ
if条件がかなり口語的で分かりやすく、nullチェックをしながら数値に変換できる、と凄く使いやすそうな感じがします。
そしてそれを使ったSwitch文がコチラ
めちゃめちゃ見やすくないですか?
いちいちbreak;を書かずに、処理の分岐を羅列できる。
まさにSwitch文の「ブレークスルー」やぁ~(古い)
3.レコード
・対象ページ:レコード
レコードとは、DBのデータのようなものを扱いやすいように、少し機能を加えた特殊なクラスです(私訳)
classの代わりにrecordとし、宣言すると、
それだけで、下記のボイラープレートコードを勝手に実装したクラスが出来上がります。
・Equals()
・GetHashCord()
・すべてのプロパティを引数にしたコンストラクタ
レコードはC#9.0で実装された機能のため、Unity目線では新しい技術です。
C#10で機能追加されてレコード構造体がサポートされたりと、進化を残している部分もあります。
(現在のUnityはC#9.0まで対応)
おはようございます。
最近、SpringBootでwebアプリを作っていて、いい感じになりました。
というわけで、どこか無料のサーバーを借りて公開したいという気持ちになりまして。
いろいろ調べてみたところ、WebサーバもDBも、まとめてAWSにデプロイできたので、この場を借りて紹介したいと思います。
まずは、今回作ったwebアプリを軽く説明します。
入力した文字列から、脳内メーカーの要領でキメラを生み出し、戦わせるという内容。
ユーザー情報や、生まれたキメラの情報はDBに保存しています。
バージョン等は下記の通りです。
次にAWSについて、荒く短く説明します。
(→私は間違えたので料金請求されました。詳しくは後ほど)
Spring側の application.propertiesの設定を変更します。
DBを使っている場合、おそらく下記のようになっていると思います。
(Dockerなどでローカルに建てたDBにアクセスしている想定)
それを下記のように追記します。
意味としては、後に設定するRDSの環境変数を確認し、あればそっちの値を参照するというようなものです。
(ローカル動作の場合には、環境変数が存在しないのでコロン以下のこれまでの定数値を参照できます)
この変更を加えたら、Spring側はjarファイルをビルドしておきます。
インスタンスクラスのデフォルトが「db.t3.small」になっていますが、これには無料枠がありません。無料で済ませたい場合は「db.t3.micro」に必ず変更してください。
ユーザー名・パスワードは、環境変数を通じてSpring側に共有されるので、好きに決めて問題ありません。
spring側のポートは8080がデフォルト、nginxは5000がデフォルトのため、
spring側がデフォルトの場合は、「環境プロパティを追加」を押して、
「名前:PORT、値:8080」を設定します。
Step6は確認なので、問題なければ「送信」をクリック。
環境の構築と立ち上げに少し時間がかかります。
終わり次第、ドメインと表記されたURLからデプロイされたWebアプリにアクセスできます。
DBのテーブル作成などは、Spring側で「spring.jpa.hibernate.ddl-auto」を設定しておけば、自動作成してくれます。事前にローカルで検証してください。
DBを手動で操作する場合は、EC2のインスタンスに接続し、そこを足掛かりにしてRDSのエンドポイントに接続する形になります。(詳細は省きます)
おはようございます。
最近、キメラを召喚して対戦するゲームを作っています。
キメラの画像はコチラの透過pngの素材を使わせていただいているのですが、
どうにも余白が不揃い(全体的に右寄り)で、少し扱いづらい。
(でもメッチャ可愛いし使いたい)
ロジックとしては、
1.画像を読み込む
2.余白を全カットする
3.いい感じに余白をつけなおす
4.出力する
という想定。
調べてみると、ちょうどいい記事を発見。
→【画像処理】OpenCVを使って画像周りの余白削除(トリミング)を自動化してみた!(1)
pythonは3日くらいしか触っていませんが、何となくopenCVをインストールして、ところどころ修正を入れながら、適当な画像で変換開始!

今度はなんだ(# ゚Д゚)!?
どうやら、グレースケール・2値化したときに、やっぱり真っ黒になっている。
現状のコードではダメらしい(知らんけど)
ロジックとしては、地と図で2値化できればいいはずなので、ChatGPTに聞いてみる。
(こういう限定的な用途での実装コードは結構頼れるなぁ)
上記のコードで、いい感じに2値化できるらしい。
というわけで修正したコードを実行。
余白ゼロ、超コンパクト!
いい感じだ( *´艸`)
余白の追加は、cv2.copyMakeBorder()でできるらしいので、
横は中央揃え、縦は下揃えとして適当に計算するコードを追加。
(めんどくさいので全部直書き)
Before
つよつよエンジニアになるには、公式ドキュメントを読むことが大事だと、誰かが言っていた。
というわけで、仕事で主に扱っている『Unity』の公式ドキュメントを通読してみた。
→実際読んだのはコチラ(2021.3)
サイドバーには23の項目があるが、それぞれの項目に深いネストがあり、機械的に計測すると1960のページがあるよう……。
関係ないところは飛ばしつつ、1か月以上かけて流し読みしたので、役立ちそうな部分や面白かった部分を紹介してみます。
読んでいる際の筆者の指向性は以下の3点。
・Unityならではの仕組みを勉強し直す。
・Unityを使ってAndroid+iOSのアプリを作ることを想定(ゲームに限らず)
・個人的に面白いと思ったことは調べてみる。
では、おすすめのページを以下に記していきます。
〇ガベージコレクションのベストプラクティス
〇Unityにおける最適化
if(x < min){ x = min; }if(x > max){ x = max; }
x = Mathf.Clamp(x,min,max);
〇色空間