そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

Flutterのチュートリアルをやるのとメモ

1日目

この辺までやった。

docs.flutter.dev

docs.flutter.dev

codelabs.developers.google.com

久しぶりにFlutterを触ったらビルドが通らなかったが、Flutterのバージョンを最新にしたら大丈夫だった。

MaterialAppって何者なのというのが疑問だったので、マニュアルで調べてみた。 マテリアルデザインを使って、複数のWidgetをまとめることができるWidgetらしい。 アプリケーションで1つにするのか、画面ごとに1つにするのが良いのかもうちょっと触ってみて考えることにする。

MaterialApp class - material library - Dart API

2日目

ステート周りを理解するが目標。

この辺をやっていく。 docs.flutter.dev

Minecraft Pi EditionをPythonから操作する

最近、Raspberry Piクックブック 第3版を読んでいます。 「レシピ7.20 Minecraft Pi Edition でPythonを使う」で、PythonからMinecraft Pi Editionでブロックを置いたり、チャットを送ったりができるのを試してみました。

ScratchとMinecraftをやっている小学生に次のステップとしてやってもらうと楽しんでもらえそうかなーという感想です。

チャット送る

from mcpi import minecraft, block
mc = minecraft.Minecraft.create()

mc.postToChat("Hello,")

事前にMinecraft Pi Editionを起動しておく必要があります。

ブロックを置く

from mcpi import minecraft, block
mc = minecraft.Minecraft.create()

x, y, z = mc.player.getPos()

for xy in range(1, 50):
    mc.setBlock(x + xy, y + xy, z, block.GOLD_ORE)

ブロックの定数定義はここでされています。 mcpi/block.py at master · martinohanlon/mcpi · GitHub

こちらのAPIチュートリアルには他にもいっぱいサンプルがあるので、いろいろやってみたいと思います。 www.stuffaboutcode.com

参考にしたサイト

github.com

ExecutorServiceを利用して、並列処理を行うサンプル

今やっているアプリケーションの高速化を行うために並列処理を取り入れました。 やっている内容はレポートを作るのですが、APIで取得した100枚以上の画像をレポートに貼り付けるのですが、画像を取得する部分は並列化しています。

サンプルを作ったので、Githubにアップしています。 github.com

冬休みを利用して、解説を書きたいな。

Raspberry piのセットアップ備忘録

いろいろ実験用に使っていたラズパイにMinecraftのサーバーを入れてマルチを遊べるか試そうとしてます。

CUIでセットアップしていく。

キーボードの設定

キーボードはUSBで日本語レイアウトのものを接続した。 デフォルトは英字レイアウトで|などが入力できないので、変更する必要がある。

sudo raspi-configで、コンソールを立ち上げて、international settingでKeyboard settingで変更していく。キーボードは該当のものがなかったので、Microsoftの適当なキーボードを選択して、Japaniseカナレイアウトを選択した。

変更後、再起動で変更が反映された。

WiFiの設定

  1. アクセスポイントの確認。該当のアクセスポイントがスキャンできることを確認
sudo iwlist waln0 scan | grep ESSID
  1. アクセスポイントへの接続設定
sudo ifdown wlan0    // NWインターフェイスを停止しておく
sudo iwconfig wlan0 essid {SSID} key s:{パスフレーズ}
sudo ifup wlan0    // NWインターフェイスを起動

下記で、接続したアクセスポイントのSSIDが表示されればOK

sudo iwconfig wlan0
  1. インターフェイスを再起動して、ifconfigでIPアドレスが取得できていることを確認
sudo ifdown wlan0
sudo ifup wlan0
ifconfig

AWS SNSを使ったEメールの送信

最終的にはAWS SNSを使ってスマホにPush通知を送信する方法を確認したいですが、その前に簡単にEメールを送信すうる手順を確認したいと思います。

Topicの作成

f:id:begirama:20190416113146p:plain

以下の設定ができます。

  • 暗号化
  • アクセスポリシー
  • 配信再試行ポリシー
  • 配信ステータスのログ記録

サブスクリプションの作成

f:id:begirama:20190416113453p:plain

今回はテスト的にEメールを指定して、自分のメールアドレスをエンドポイントに指定してみます。

オプションとして、下記を設定できます。

f:id:begirama:20190416113751p:plain

サブスクリプションの確認

サブスクリプションの欄には保留中のエンドポイントとして先程のメールアドレスがリストされています。

f:id:begirama:20190416114500p:plain

下記のようなメールが対象に届いているのでConfirmします。

f:id:begirama:20190416114308p:plain

トピックへのメッセージの発行

f:id:begirama:20190416114048p:plain f:id:begirama:20190416114116p:plain

DynamoDBの勉強をしています

AWS Lambda + DynamoDBの組み合わせで サーバレスなアプリケーションを作ろうとしています。 DynamoDB をはじめとするNoSQLデータベースをちゃんと使ったことがなかったので今回改めて勉強しようと思います。

こちらのAWSで資料をお勧めしてもらいました。

各種設計に関してはマニュアルのベストプラクティスの章が参考になりそうです。 docs.aws.amazon.com

また、こちらのサイトではモデリングについて、パターン分けして詳しい説明を和訳されていて、参考になりました。

NoSQLデータモデリング技法 · GitHub

AWS Lambdaで必要な外部Jarも含めて一つのJarにする

AWS Lambdaでアプリを作っている時に必要となる外部のクラスが見つからずにjava.lang.NoClassDefFoundErrorが発生するケースがあります。

ビルド時は依存関係は解決できていてコンパイルエラーはでていんですが、これは外部のライブラリがパッケージングの際に含まれていないことが原因でした。

これはビルドツールにMavenを使っている場合はmaven-shade-pluginで解決できます。

マニュアルのIDE なしで Maven を使用した .jar デプロイパッケージの作成 (Java)にも記述があります。

プラグインセクションでは、Apache maven-shade-plugin は、Maven がビルドプロセス中にダウンロードして使用するプラグインです。このプラグインは、デプロイパッケージであるスタンドアロン .jar (.zip ファイル) を作成するために、jar のパッケージ化に使用されます。

stackoverflowでも同様の質問に対して、同じ解決策が出てました。

stackoverflow.com