App Engineerの開発ノート

AWS、Flutterや開発活動に役立つツール作りなど

AWS入門~誤って課金してしまわないよう気を付ける

f:id:Simoroid:20210901010233p:plain

 

 

アカウント作成して僅か半月で誤って課金する結果となってしまったので、
自戒をこめて、課金状況の確認手順です。

◇現在の課金額を知る
AWS マネジメントコンソール(ログイン後のトップページ)から
"マイ請求ダッシュボード"をクリック
⇒ページ遷移後、現在の利用料が分かります、またページ下部に各サービスの利用状況が分かります。

f:id:Simoroid:20210820001215p:plain

f:id:Simoroid:20210820001219p:plain

f:id:Simoroid:20210820001211p:plain


今回はEC2を誤って2つ起動していた為、EC2の無料枠750時間を超えてしまったことが課金の原因でした。。
不要なインスタンスは切っておきましょう。。
※1つのインスタンスのみを起動していれば24h * 31日 = 744時間で無料枠は超えません。

◇アラートを設定しておく
左側に表示された"請求設定"をクリック。
"無料利用枠の使用アラートを受信する"にチェックを入れます。

f:id:Simoroid:20210820001312p:plain

f:id:Simoroid:20210820001317p:plain

 

無料枠超えそうなタイミングでメールが来ます。
f:id:Simoroid:20210820001321p:plain

ここまで 読んで頂きありがとうございました。 よければフォローお願いします!

AWS入門~とりあえずWebアプリケーションが公開されるまで

f:id:Simoroid:20210818013157p:plain
AWSを勉強したい・導入したいという場合の
とりあえず最初のWebアプリが公開されるまでの手順です。
所要時間は最速だと20分くらいです。

◇アカウント作成
まずは下記でアカウントを作成します。
https://aws.amazon.com/jp/try-cloud/

個人情報として住所や携帯電話番号、
クレジットカードを差し出す必要があります。
ただし利用に必ずお金が掛かるという訳ではありません。
無料でどこまで使用できるかという情報は下記のサイトにて公開されています。
AWS クラウド無料利用枠 | AWS

あとは住所が英語表記で記載しなければなりませんので、下記のサイトなどを利用すれば楽です。
https://kimini.jp/

◇EC2を起動
AWS マネジメントコンソール(ログイン後のトップページ)から
"仮想マシンの起動"をクリック
基本的には"無料利用枠の対象"の記載がある項目を選択して次へと設定を進めていけば問題無いかと思います。
※本格的にサービスを立ち上げる際は目的に応じたインスタンスタイプの選定が必要です。
f:id:Simoroid:20210818004831p:plainf:id:Simoroid:20210818004835p:plain

◇Elastic Beanstalkを起動
前段と同様にAWS マネジメントコンソールから
"ウェブアプリケーションの構築"をクリック。
任意のアプリケーション名、プラットフォーム情報を入れて、
アプリケーションコードを"サンプルアプリケーション"に設定して、
「アプリケーションの作成」をクリック。
f:id:Simoroid:20210819003013p:plainf:id:Simoroid:20210819003009p:plain

ちなみにEC2などの環境のお金が掛かるため、
Elastic Beanstalk自体にはお金が掛からないようです。
https://aws.amazon.com/jp/elasticbeanstalk/pricing/

その後、Elastic Beanstalk -> アプリケーションから
URLをクリックします。
f:id:Simoroid:20210819003309p:plain
無事にサーバーにアプリが公開されていることが確認できます。
f:id:Simoroid:20210818013400p:plain
以上でAWSを始めてとりあえずアプリを公開になります。
これ以降は独自のアプリ開発やサーバーレスコンピューティングに触れていきたいと思います。
まだAWSの1000分の1も機能を利用してませんが、これだけで何かやった気になる笑

ここまで 読んで頂きありがとうございました。
よければフォローお願いします!

Android Studio で git を使う ~ある時点のバージョンに戻す~

f:id:Simoroid:20210527011101p:plain
Androidアプリ開発で障害調査や開発が上手くいかず、ソースコードを一旦Gitのあるバージョンに戻したい。
そう思った時のAndroid Studioでの操作方法の紹介です。

◇手順

1.対象ファイル右クリック→Git->show history
f:id:Simoroid:20210527011424p:plain
2. Historyタブで戻したいコミットの行を右クリック→Show in Git Log
⇒Logタブが表示される
f:id:Simoroid:20210527011521p:plain
3. Logタブで戻したいコミットの行を右クリック→Checkout Revision
f:id:Simoroid:20210527011707p:plain

上記手順で指定したリビジョンにソースコードの状態を戻すことができます。

ここまで 読んで頂きありがとうございました。
よければフォローお願いします!

【Python】はてなブログの注目記事の一覧を抽出する

f:id:Simoroid:20210510013203p:plain
はてなブログの注目記事の一覧をスクレイピングするプログラムをPythonで実装してみます。
f:id:Simoroid:20210510013544p:plain
Pythonスクレイピングするための環境準備は下記に記載しています。
ikodatech.com

◇処理の流れは
1.はてなブログのトップページへのリンクを変数定義
2.ヘッドレスブラウザ(GUI表示無しのブラウザ)にページを読み込む
3.「注目」の領域をクラス名で検索し、html形式の情報を取得
4.複数存在するh3タグを全て取得することですべての注目記事のタイトルとリンクを取得
5.ブラウザオブジェクトの後始末

#!/usr/bin/env python3

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import selenium
from bs4 import BeautifulSoup

# はてなブログのトップページへのリンクを変数定義
TARGET_URL = "https://hatenablog.com/"

# ヘッドレスブラウザ(GUI表示無しのブラウザ)にページを読み込む
options = Options()
options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=options)
browser.get(TARGET_URL)

# 「注目」の領域をクラス名で検索し、html形式の情報を取得
html = browser.execute_script("return document.getElementsByClassName('serviceTop-recommend')[0].outerHTML")
soup = BeautifulSoup(html,"html.parser")

# 複数存在するh3タグを全て取得することですべての注目記事のタイトルとリンクを取得
article_list = soup.find_all("h3")
for article in article_list :
     print(article.a.get_text() + ":" + article.a["href"])

# ブラウザオブジェクトの後始末
browser.quit()

下記のように記事のタイトルとリンクが一覧で抽出できました!
f:id:Simoroid:20210508093404p:plain

よんで頂きありがとうございます。
良ければフォローお願いします!

【Python】Webページの情報抽出するためにスクレイピングする

f:id:Simoroid:20210508094731p:plain
スクレイピングとはWebページに対して、DOM形式の情報を取得し、
ある特定の文字列をのみを抜き出したり、画像だけをダウンロードしたり、
情報の解析を行うことです。
今回はPythonでの実装方法に関してご紹介します!

なお、スクレイピングの過剰利用はアクセス先のサイトに対しての迷惑となったり違法となるケースがあるので気を付けてください。
https://topcourt-law.com/internet_security/scraping-illegal#i-10
https://qiita.com/n_oshiumi/items/b4efd1f40ec0a1b77376

◇ドライバーのダウンロード
chromeを開いてurlに「chrome://version/」を入力し、ブラウザバージョンの確認。
f:id:Simoroid:20210510011948p:plain
ドライバーをダウンロード、確認したブラウザバージョンと照合してサポートされているものを選択します。
https://sites.google.com/a/chromium.org/chromedriver/downloads
f:id:Simoroid:20210510012019p:plain

ダウンロードしたドライバー(chromedriver.exe)はpyファイルと同じフォルダに格納、
もしくは環境変数のPATHにドライバーのパスを定義しておくのでも良い。

スクレイピングに向けてのライブラリをインストールしておく。

pip install selenium
pip install beautifulsoup4

anacondaを使用している場合は

conda install selenium
conda install beautifulsoup4

◇とりあえずスクレイピングしてみる。
googleの検索ページからgoogleロゴを取ってきてみる。
下記のような処理順で実装します。
①ローカルに保存ディレクトリを準備
②imgタグを検索し、該当したhtml形式の情報を取得
③imgタグのsrc属性にアクセスすることで画像へのパスを取得
④スライスでファイル名を取得
⑤ローカルへ転送

#!/usr/bin/env python3

import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import selenium
import urllib.request as req
from bs4 import BeautifulSoup

TARGET_URL = "https://www.google.com/"

# ローカルに保存ディレクトリを準備
result_dir = './save' 
if not os.path.exists(result_dir):
    os.mkdir(result_dir)

options = Options()
options.add_argument('--headless')
article_browser = webdriver.Chrome(chrome_options=options)
article_browser.get(TARGET_URL)

# imgタグを検索し、該当したhtml形式の情報を取得
html = article_browser.execute_script("return document.getElementsByTagName('img')[0].outerHTML")
soup = BeautifulSoup(html,"html.parser")

# imgタグのsrc属性にアクセスすることで画像へのパスを取得
img = soup.find("img")["src"]

# スライスでファイル名を取得
filename = img[img.rfind("/"):]

# ローカルへ転送
req.urlretrieve((TARGET_URL + soup.find("img")["src"]),result_dir + '/' +filename)

article_browser.quit()

下記のように撮れました!
f:id:Simoroid:20210508090123p:plain

よんで頂きありがとうございます。
良ければフォローお願いします!

【Flutter】チップを使って3パターンのアクションを実装する

f:id:Simoroid:20210419234809p:plain

Flutterアプリのチップはリストのフィルタリングやプロフィールの画面などで
ボタンとは違ったデザインでスペースを取らないUIとして便利かと思います。
更にチップに何かしらの処理を実行したい場合もあるかと思います。
今回は3パターンのアクションを実装しました。

 

◇動作イメージ

f:id:Simoroid:20210419013302g:plain


1.チップが押されたら画面遷移する

InputChipを使用して、チップがタップされたら画面遷移を行うようにします。

2.チップが押されたら画面内の処理を行う

InputChipを使用して、チップがタップされたときの処理を実装します。

3.チップのアイコン部分が押されたら画面内の処理を行う

ContainerにTextとIconを組み込み、チップの見た目を模倣します。
アイコン部分のイベントリスナーを実装します。

 

gist0399ce8a237145f1aff75ae931d66acf

この記事がお役に立てていたらうれしいです。

【Flutter】ボトムナビゲーションバーの選択を親のWidgetで検知する

f:id:Simoroid:20210414004927p:plain


画面下部に表示するナビゲーションバーとメインのコンテンツに当たるWidget
ソースを分けたい場合の実装方法となります。

ナビゲーションバーに対してアイコンをタップするなどの操作した結果を親となるWidgetが受け取る仕組みになっています。

◇親となるメインウィジェット

◇参照するナビゲーションバーウィジェット
アイコンのタップを検知して親ウィジェットのイベントを走らせます。
イベントの引数にインデックスを渡すことで、どのアイコンがタップされたかを識別できるようにします。
bottom_navi_bar.dart

◇完成形イメージ
こんな感じになります。

f:id:Simoroid:20210401123914g:plain


この記事がお役に立てていたらうれしいです。