新アプリ「マイルーレット」をリリース

数日前にAndroidアプリをリリースしました。

このアプリはサイコロを作っていたときに面の数とか内容を自由に変えたいなーと思ったのがきっかけで作り始めた。

文を表示させるならサイコロよりルーレットかなー、ルーレットっていうとディーラーが回すやつとかスロットで回ってるアレみたいな感じかなーと思ったのでどっちもできるようにした。

技術的に難しいことはしなかったけど、ぐるぐる回す処理は演算しながら再描画するよりも設定変更毎に画像化してまわしたほうが負荷が小さかったかもしれない。

 

このアプリで浮き彫りになったのは絶望的な画像センスのなさ。

アイコンはコレだし

myricon

バナーはコレ

myrbanner

まじめに作ってるんだけどね。

どうやってもイイネってなるものを作れそうになかったので妥協した感じがある。

勉強すれば改善できるものなのか、何を勉強すればいいものなのか。

いずれ差し替えよう。いずれ。。

AWSのDynamoDBをAPIでCRUD操作する

概要

DynamoDBをAPIで使えるようにした。

次にAPIを通じてCRUD操作する方法を記録しておく。

基本的に公式ガイドを参照したけどわかりにくかったので他も色々見ながら試行錯誤した。

検索するといろんな情報(古い書き方、非推奨の書き方や別の言語での書き方)が入り混じっていて結構わかりにくかった。

create レコードを新規作成

payload.TableNameで指定したテーブルにpayload.Item内のJSONを新規登録する。

テーブル作成時にプライマリーキーに設定した属性は必須。

それ以外はJSONであれば自由。

また、プライマリーキーの値がすでにあるものであった場合はレコードそのものを上書きする。

read レコード1件取得

payload.TableNameで指定したテーブルにpayload.Keyにプライマリーキーを指定して1レコードを取得する。

 

update レコード1件更新

createで同一プライマリキーを指定したときとは違って、レコードの一部を変更できる。

payload.Keyで指定したレコードの更新を行う。

プライマリキー属性は更新できないので、その場合はdeleteしてcreateしなおす必要がある。

また、AttributeUpdatesで処理を定義することもできるが現在は非推奨とされている。

まずUpdateExpressionに式を記入する。

以下の4つの式が使えるがSET, REMOVEの他は基本使わない。

  • SET – 属性の追加、更新
  • REMOVE – 1 つ以上の属性を項目から削除
  • ADD – 数値とセットデータのみサポートするが、通常はADD ではなく SET が推奨される
  • DELETE – セットデータ(HashSet)からString配列で指定したものを削除

次にExpressionAttributeNamesに属性名を定義。直接UpdateExpressionで指定してもいいが予約語とかぶらないように注意する。

同様にExpressionAttributeValuesに代入する値を定義。

ReturnValuesは以下から選ぶ。

  • ALL_OLD – 更新の発生前に表示されたように、項目全体が返される。
  • ALL_NEW – 更新後に表示されるように、項目全体が返される。
  • UPDATED_OLD – 更新の発生前に表示されたように、更新した値のみが返される。
  • UPDATED_NEW – 更新後に表示されるように、更新した値のみが返される。

 

DELETEは今回の例だと使えないため割愛。

書き方 : DELETE HashSet [“a”,”b”,…]

delete レコード1件削除

プライマリキーを指定してレコードを削除する。

list レコード一覧取得

テーブルを指定してレコード一覧を取得する。

 

HTTP RequestでDynamoDBを操作する

何をするか

外からAPIを叩いてデータをDBに保存してみたかったので試してみた。
プラットフォームはAWSオンリー。
以下のサービスを使って連携をしてみる。

  • API Gateway
  • Lambda
  • DynamoDB

DynamoDBの用意

まずAWSでNoSQL DBサービスのDynamoDBの準備をする。
AWSのサービスはそれぞれテスト機能があるので一番深いところから用意していくとトントン進む気がする。

  1. サービス一覧からDynamoDBを選択する
  2. テーブルの作成ボタンを押す
  3. 好きなテーブル名、プライマリーキーを設定する。今回はtestテーブル、キーをidにした。

以上でDBの準備完了。簡単!

Lambda, APIの作成

LambdaはAWSで用意されているコードの実行サービス。
Java,Nodejs,Pythonコードを実行可能(今回はNodejs)。
なのでここには処理の実行部分を書く。
今後処理の内容を弄るときには基本的にここをでロジックを書く必要がある。
今回やりたいことはBlueprint(色々セットで作ってくれるテンプレートのようなもの)で用意されているのでそれを使う。

  1. サービス一覧からLambdaを選択
  2. Create lambda functionボタンを押す
  3. Select blueprintからmicroservice-http-endpointを選択
  4. Nameは好きな名前を入れる(今回はtestLambda)
  5. RoleでBasic with DynamoDBを選ぶと新規ページが開く
  6. そのまま右下の許可を押す
  7. Roleの選択肢にlambda_dynamoが追加されているの選択(今後は直接これを選ぶ)
  8. 右下のNextボタンを押す
  9. microservice-http-endpointで作成した場合にはそのままAPIが作成できるのでmethodをPOST,SecurityをOpenに変えてNext
  10.  確認画面でOKなら完了

これで準備完了なのでテストしてみる。

Lambdaのテスト機能を使う

Lambdaの左上のTestボタンを押すとeventの中身を直接入力してテストできる。

以下のJSONを入力してテストすると実際にレコードが登録される。

DynamoDBのtestテーブルを見るとレコードが追加されているのが確認できる。

RESTクライアントを使ったテスト

ブラウザの拡張でREST APIテスト用のアドオンがあるのでそれで実際の動作を確かめる。

restclient

URL:APIエンドポイント
Method:POST
Body:

結果

Dynamoのtestテーブルを見ると2つのテストで入れたレコードが確認できる。

dynamo

このままだとURLをたたけば誰でもデータベース操作できてしまうのでLambdaの処理を絞ったり、APIに認証を設定したりする必要がある。

Qiitaのタグ別フォロー数と記事数で技術動向をつかむ

お手軽に技術動向をつかみたい。

気になった分野はさらっと試してみたい。

 

技術屋にとってはすでに英語は必須になっているとはいえ、いちいち英語の仕様書や掲示板を読むのはしんどいので日本語リファレンスの多さは重要だと思う。

 

最近はよくQiitaにお世話になってます。

デモやサンプルを動かす際の注意点なんかも多く記事になっており、何かしら新しく手をつけるときに非常に役立っている。

 

ちょっと思いついたのでQiitaのタグ別フォロワー数、記事数一覧でランキングを作ってみた。

 

Qitta傾向分析

 

最近データを取り始めたので、もう少したまってきたら可視化(グラフ化)してみたい。

 

文字を画像に変換するアプリのアップデート

宣伝

アプリをアップデートしました : 文字画像

アプリの紹介

入力した文字を色、フォント、大きさ、斜字太字を設定して保存することができます。保存した画像は別アプリからも使用することができます。

変更箇所

・デフォルトのフォントサイズを30から100に変更

・背景色を透明のみから選択肢を増やした(白、赤、青、緑、透明から選択)

test

アップデートの理由

以下の問題を解決するため

・他アプリで使おうとすると文字が小さい

・アプリによっては透過画像をうまく表示できず真っ黒なものになることがある