AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

Ethereum入門 〜さくさくマイニング体験〜

Pocket

あけましておめでとうございます。POSチームの人見です。

2018年が始まりましたね。
2017年は2月にハンズラボに入社して、ものすごくインプットの多い1年でした。
今年はもっともっとわがままに興味のあることを突き詰めていって、
チャンスがあればハンズラボでサービス開発をしたいと思っています。

 

今年最初のテーマはブロックチェーンです。

今回はEthereum入門ということでプライベートネットを構築、マイニングと送金を試してみたいと思います。

 

Gethのダウンロード

まず、Gethを使ってプライベートネットを構築します。

https://geth.ethereum.org/downloads/
からGethをダウンロードします。

私はGeth 1.7.3 for macOSを使います。

 

Gethの設定

ダウンロードして解凍したgethファイルを「/tools/ethereum/Geth-1.7.3」 ディレクトリにコピーします。(ディレクトリはお好きなところで構いません。)

「/tools/ethereum/Geth-1.7.3」にPATHを通します。

これで準備完了です。

 

プライベートネットの構築

Genesisブロックの作成

「/tools/ethereum/Geth-1.7.3/home/eth_private_net」にgenesis.jsonを作成します。

 

初期化処理

成功すればSuccessfullyとでます。

Gethを起動

「Welcome to the Geth JavaScript console!」と表示されコンソールが起動されます。

 

 

マイニングと送金

次にマイニングと送金を試してみたいと思います。

 

アカウントの作成

まず、アカウントを2つ作成します。

アカウントの確認

マイニングするアカウントの確認

デフォルトではアカウント1になっています。

 マイニング

この状態でしばらく待つと残高が増えていきます。

残高確認

マイニング状態で放置しておくとどんどん残高が増えていきます。

送金

アカウント1からアカウント2に送金してみたいと思います。

 

残高確認

無事送金できていました。めでたし。

 

マイニングの停止

最後にマイニングを停止して終わります。

 

 

以上です。
意外と簡単にできるので、ぜひぜひお試しください。
これからブロックチェーンに使ったアプリケーションを開発していこうと思っています。
2018年も一緒に楽しんでいきましょう!本年もよろしくお願いいたします。

Pocket

【Alexa】非エンジニアにもできる!Alexaスキル開発 〜「StoryLine」編〜

Pocket

追記(2018/4/11)

Storylineが大幅にリニューアルし、日本語にも対応するようになっていました!すごい!
コーディングなしでサクッとAlexaスキルを作成できるサービス「Storyline」を試してみた

下記の当時投稿した情報は古くなってしまっていますのでご注意ください。

2017/12/17時点の情報

こんにちは、9月に入社したAWSチームの松本です。
AmazonEchoが発売して1ヶ月が経ちましたね。
招待メール、届いた方どのくらいいらっしゃいますでしょうか?

Echoに搭載されているAlexaの強みは、なんといってもスキルの数の多さ!
現在登録されているスキルの数は2万を超えており、
その数は今後もどんどん増えていくと思われます。
ハンズラボでもAlexaスキルを開発しました。 → 東急ハンズスキル

・・・

さて、Alexaスキルを開発する際、
そのユーザー体験を向上させるのに重要なポイント、それは…
「会話フロー」 です。

音声による情報のやりとりは、ちょっとした言い回しを変えるだけで
会話としてのスムーズさが劇的に向上することがあります。
そしてそういった言い回しの細やかな設計を行うには、繰り返しの微調整や
エンジニア以外の方の意見をいただくことが重要になるのではないでしょうか。

そんなとき、誰でも簡単に文言の修正ができるツールがあったら素敵!
ということで、先日 ハンズラボ Advent Calendar 2017 の12日目の記事で、
プログラム言語を用いずにAlexaスキルが開発できるツール
「StoryLine」をご紹介させていただきました。(※ただし英語・ドイツ語スキルの開発のみ)

紹介といってもスキル作成までの流れを淡々と書いた形になったのですが、
せっかく非エンジニアの方にも気軽にお使いいただける、直感的に操作ができるツールなので
もう少しマインドマップ部分の操作方法にも触れて、改めてご紹介したいと思います。

Storyline

https://thestoryline.io/

会話のスタート地点からマインドマップ形式で会話フローを作成していくと
Alexaスキルが出来上がります!

こちら、残念ながら今のところ対応言語が英語とドイツ語しかないですが、
英語は苦手…という方も安心!スマホの読み上げ機能を使って動かしてみることが可能でした!

事前準備

  1. Googleアカウントの用意
  2. Amazonアカウントの用意
  3. AWS開発者アカウントの用意(ASKを始めるところまで設定しておく

手順

Storylineの使い方について公式動画もあります(英語)

「+Create new」から新しい会話フローを作成します。
2.png

「Connect Coggle Mindmap」をクリック。
これで別サービスのCoggleというマインドマップ作成ツールと連携させます。
画面上はStorylineだけで完結しているのでCoggleとStoryLineを行き来する必要はありません。
3.png

「YES, ALLOW ACCESS」をクリック。
4.png

「Fact App」「Quiz Game App」・・・簡単なテンプレートが自動生成されます
「Create from Scratch」・・・自分で一から会話フローを作成します
今回は「Create from Scratch」を選択します。
5.png

AppName(会話フロー名)を決めます。後でApp一覧から名前を変更することも可能です。
7.png

この会話フローの言語を選択します。「英語(US)」「英語(UK)」「英語(インド)」「ドイツ語」から選択可能です。
8.png

そうすると自由に会話フローを生成できる画面になります。
グレーの部分にカーソルを合わせるとプラスボタンが表示されるのでクリックします。
9.png

そうするとブランチが出てきます。
英語スキルなので、適当に英語のセリフを入れてみます。
このとき、記号、図、フォントの太字斜体指定などができますが、Alexaの読み上げに効果をつけられるわけではないのでここでは使用しません。
10.png

入力規則などはこの「Cheatsheet」を見るとだいたいわかります。
例えば行頭を「//」で始めるとユーザーの発話の指定になります。
行頭が「==」で始めるセリフを複数行入力しておくと、Alexaがその中からランダムに1行選択し、セリフを話します。
11.png

ブランチをクリックするとクリックするとブランチのスタイルを選択できます。
ただし、無料プランでできるのは内側の円の中から色を選択するのみで、
外側の円からの色選択、ブランチの太さの指定などは有料プランになります。
ブランチの色を変更するとそのブランチより先の枝の方の色が一斉に変更されます。

ブランチを右クリックするとブランチの追加・削除・コピー・移動、コメント追加ができます。

ここからブラウザテストもできます。
12.png

「Start playing」で会話フローの「Start」の位置から自動再生、
プルダウンから会話フローの開始地点を指定することもできます。
ユーザーの音声入力シーンになるとマイク許可を求められるので承認します。
13.png

会話フローが完成したらAlexaスキルとして展開してみましょう。
「Deproy」をクリックするとAmazonアカウントとAWS開発者アカウントの登録画面になります。このとき、ASKを始めるところまで進めていないとデプロイが実行されないようなので注意してください。
14.png

「Deploy」ボタンの横に緑のチェックマークが表示されたらAlexaスキル作成完了です。
アマゾンアプリ開発者ポータルにスキルが作成されていると思います。
「テスト」を有効にするように促されるので、その他にも一通りスキルの設定をしましょう。

設定のポイントは呼び出し名を下記のように単語で区切った状態で指定することです。
造語だとなかなかうまく反応しません。
複数の言葉を組み合わせたものがいいと思います。

ここでの設定内容は「Deploy」ボタンを押すたびに元に戻るのでどう設定したかメモした方がいいかもしれません。
呼び出し名の調整以外は、設定しなくても実機テストは可能です。

英語版のスキルなので、実機でテストするには「alexa.amazon.com」に登録されているAlexa対応端末が必要です。
この一覧に先ほど作成されたスキルが表示されると思うので有効にします。
※同じ端末を英語スキルを扱う「alexa.amazon.com」と日本語スキルを扱う「alexa.amazon.co.jp」の両方に登録することはできないようです。
登録先を切り替えるとWifi設定からスタートすることにになりますが、有効にしたスキル情報などは切り替え後も保持されます。

StoryLineは、画面右下の「Conversations」から気軽に問い合わせできる点もよかったです。
アカウントを自分で削除することができないため、ここから依頼したのですが、
対応してくれたスタッフは非常に気さくで対応も結構スムーズでした。

以上です。
今回は英語版スキルの開発ツールでしたが、日本語対応のスキル作成ツールも使ってみたいですね!

参考

音声アプリ戦国時代の救世主?プログラミング無しでAlexa Skillが作れる「Storyline」
【祝Alexa日本上陸】とりあえず日本語でスキルを作ってみる
開発中のAlexaスキルを実機テストする方法

Pocket

突撃!隣のキーボード

Pocket

この記事は ハンズラボ Advent Calendar 2017 16日目の記事です。

昨日はr_plusさんのTypeScript, webpack, serverlessでSlackのスラッシュコマンドを実装する
明日はt-hirai777さんです。


こんにちは、17新卒入社の谷津です。普段はハンズクラブ会員を支えるエンジニアの一人として日々精進しています。

最近ネットで以下のような記事をみて触発されたので、これは…乗るしかないこのビッグウェーブに、と思い便乗してみました。

株式会社カヤックさんの記事

株式会社フィードフォースさんの記事

freee株式会社さんの記事

弊社は社用PCに基本的にMacBookを支給されるのですが、元々のキーボードをあえて使わずに外付けのキーボードを使う方々がいます。

そんなハンズラボエンジニアのキーボードの紹介をしていきます。


yshutaro

使っているキーボードは?
東プレの REALFORCE91UG-S です。

JIS派?US派?
JIS派。20年以上JISなので。

このキーボードを選んだ理由は?
いいキーボード欲しいと思って家電量販店で触ってビビッときました。

熱い想いを一言
キートップ変えてみたい。HHKBも欲しくなってきた。Magic Trackpad 2もあればすっきりしそう。自作キーボードも興味あり。沼にはまり中。

いいですね、実際触らせていただいたのですが、押し心地がとても良かったです。
ぜひ自作キーボード沼にもハマってほしいです。

watarukura

使っているキーボードは?
HHKB professional BT(PD-KB620B) です。今週届いたところ。

JIS派?US派?
JIS派。

このキーボードを選んだ理由は?
HHKB Lite2 for Macの打鍵音が気になり始めて。もう少し静かなのがいいかな、と。

熱い想いを一言
HHKB BTは左手、MBPは右手でセパレートキーボードにしています。

私と同じくHHKB Pro BT。しかもデュアルキーボード。購入時に無刻印にしないんですか!?と言いましたが残念ながら断られてしまいました。

yuyj109

使っているキーボードは?
Plum Niz keyboard 75キー 中国製

JIS派?US派?
現在はUSのみ!!
学生時代:US
社会人昔の時代:JIS
現在:US

このキーボードを選んだ理由は?
MacBookProのバタフライキーボードのキーストロークが浅い・指の油が目立ち気になって掃除が大変だったので外部キーボードが欲しかった。

熱い想いを一言
ほこりと油は気にしなくてよくなった。仕事効率アップ?

MBPの指の油問題は私も気になりました。新MBPのキーストロークは2013年あたりのMBPのキーボードに慣れている人だと皆気になっている印象があります。

daikiojm

使っているキーボードは?
HHKB Pro2 Type-S

JIS派?US派?
US派。

このキーボードを選んだ理由は?
見た目と打鍵感(見た目重要)
自宅ではHHKB Pro2だけど、職場では音が気になるかと思ってType-S

熱い想いを一言
インスタで海外のキーボードマニアたちのキーボードを眺めるの楽しい。

HHKB愛用者二人目。職場用と自宅用で分けてるの良いですね。しかも自宅用は無刻印でその上キートップがカスタマイズされているのが非常にアツいです。

qazx7412

使っているキーボードは?
センチュリー BLACKQUEEN ピンク軸(静音赤軸)

JIS派?US派?
別にJISにこだわりがあるわけでは無いがずっとJISだったし、もうJIS以外扱えない身体になってしまった。

このキーボードを選んだ理由は?
macっぽい配列にできてコンパクトな物が欲しくて探していたら見つけて一目惚れした。

熱い想いを一言
見た目で買ったがピンク軸は個人的に大当たりだった 。家では赤軸のMionixWei使ってるけどやはりピンク軸の方が身体に馴染む。

Yuki_BB3

使っているキーボードは?
FILCOの茶軸

JIS派?US派?
JISじゃないとわからない・・・

このキーボードを選んだ理由は?
外付けの角ばったキーボード使ってるとなんか雰囲気醸し出せそうだから。

熱い想いを一言
使ってみて思う、良い。茶軸良いよ茶軸。

雰囲気醸し出すの大事ですよね、業務中テンションとか上がりますし。写真左側のカレンダーもいい味出してます。

misosouplover51

使っているキーボードは?
Mistel Barocco MD600

JIS派?US派?
迷ってます。家ではMac Book Pro 備え付けのJISで、会社は上記US

キーボードを選んだ理由は?
取っ掛かりとしては、分割式を使ってみたかった。
詳細は、私のキーボード・ジャーニーを参照ください。
https://qiita.com/misosouplover51/items/3f135360b0f022392ce3

熱い想いを一言

この沼は深くて広い。

私のキーボード・ジャーニーハンズラボ Advent Calendar 2017 7日目の記事だったのですが、非常に楽しく拝見させていただきました。会社では数少ない分割キーボードを使用している方です。

ansark88

使っているキーボードは?
会社はHHKB Lite2 for Mac(US)
自宅はHHKB Pro2 (JP)

JIS派?US派?
US派。

このキーボードを選んだ理由は?
コンパクト、forMacならF13~F15を押せるから。

熱い想いを一言
軟弱者なので、Fnが2つとカーソルキーがあるUS配列のHHKB Proが欲しい。

またまたきましたHHKBユーザー。人気がありますね。実は上の写真を撮影する前にわざわざキーボードを綺麗にしてくれました。ありがとうございます、愛が伝わりました。

t-sone

使っているキーボードは?
FILCO Majestouch 2 Tenkeyless 赤軸

JIS派?US派?

JIS派。

キーボードを選んだ理由は?
メカニカルキーボード使うの初めてだったため、価格的に無理せず買えて、打鍵感の良いキーボードを実際に店頭で触ってこれに決めました。(本当は青軸が良かったが、周囲の反対を受けて日和りました)
会社のPC変わる度にキーボードも変わるってのが嫌だったので。

熱い想いを一言
ブラインドタッチ上達させたい。

実は、Majestouchの二人に挟まれて仕事しています。メカニカルキーボードの打鍵感もなかなか好きです。

さいごに

自分でもやりました。完全に自作自演です。

mdps513

使っているキーボードは?
HHKB Professional BT US 墨

JIS派?US派?
US派。

このキーボードを選んだ理由は?
HHKBの20周年で

熱い想いを一言
無刻印は気持ち悪いと色々な人に最近罵られますが、そんなことはないと思います。素敵です。

素敵です。

以上です。ご協力いただいた皆様、ありがとうございました。

ENJOY YOUR KEYBOARD LIFE😎

Pocket

Standard Queue から FIFO Queue へ移行した話

Pocket

この記事は ハンズラボ Advent Calendar 2017 13日目の記事です。
こんにちは、最近、社会人1年目が過ぎた村上です。

今回システム的な問題を解決すべく、ECサイトハンズネットの裏側で動いているSQS(Simple Queue Service)のスタンダードキューの一部をFIFOキューへ移行した話を書きたいと思います。
Tokyoリージョンは2017年上旬予定と聞いたのですが、AWSコンソールを見てみると2017/12/15現在、未だリリースされていないようです。オレゴン、オハイオ、バージニア北部、EU(Ireland) のリージョンは利用できます。
細かい説明はAWS公式に任せて、スタンダードキューとFIFOキューの主な違い、移行の経緯やFIFO特有の設定についてお話しできればと思います。

 

スタンダードキューとFIFOキューの主な違い

 
まずは簡単にスタンダードキューとFIFOキューの違いについて触れます。

上記表にあるように順番についてはスタンダードはベストエフォートとあり、まれに順番を守れない事があります。「大量の画像データをある形式に従って変換する」といった処理の順番を気にしない用途には向いていると思います。しかし、今回の改修対象についてですが、順番を誤ってはいけない場所で使われています。詳しくは次節で。

また、メッセージの配信回数なのですが、スタンダードキューはまれに同じメッセージが複数回配信されることがあるので注意が必要です。

 

なぜFIFOに移行したのか

 

ユーザからの不具合報告

一般的なECサイト同様、ハンズネットで注文した後に、注文済みの商品の数量変更やキャンセルができます。それらの操作が注文履歴画面に反映されないという不具合がユーザから報告される事が定期的にあったため調査しました。その結果、SQSのスタンダードキューを使ったデータ連携が怪しく、部分的にFIFOキューへ移行することにしました。

スダンダードキューは順番を守れないことがある

このシステムの注文データの反映方法は2通りあります(なぜ、二通りあるのかは一口では語れないです 汗)。

(1) 注文後、リアルタイムでDynamoDBを更新
(2) テキスト形式のデータが、SQSのスタンダードキューを通ってDynamoDBへ反映(非同期)

[改修後イメージ、スタンダード、FIFOが共存]

 

(2)についてですが、スタンダードキュー内で注文データの順序が守られていないのではないかという懸念がありました。このDynamoDBの注文レコードは上書きされる仕様となっていたため、順序を誤ると古いデータが最新の状態として画面に表示されることになっていました。
以前は注文データは画像上部のスタンダードキューを通っていましたが、今回画像下部のFIFOキューを追加し、問題のあった注文データのみFIFOキューを通るように変更しました。FIFOであれば、キューへ送った順に取り出されるので注文データが順番を誤まる心配がなくなるというわけです。

次節以降ではFIFO特有の設定とについて少し書きます。

【補足】 ハンズネットがユニケージ開発手法で開発され、そこから移行しようとしている(Bash→PHP, ファイル→DB)という特殊な事情もあり、少し複雑なシステムとなっています。いずれは上記の(2)のテキスト形式レコードをDynamoへ反映する処理は無くしたいと考えています。

 

FIFO特有の設定

 
FIFO Queueの作成自体は設定を気にしなければ数秒で終わりますが、導入する際は最低でもメッセージ重複排除IDと、メッセージグループIDについては少し考慮した方が良さそうです。

メッセージ重複排除ID

適宜、公式より説明を拝借します。

メッセージ重複排除ID: 送信されたメッセージの重複排除に使用するトークン。特定のメッセージ重複排除 ID を持つメッセージが正常に送信された場合、同じメッセージ重複排除 ID を持つ送信メッセージは正常に受け付けられますが、5 分間の重複排除間隔の間は配信されません。

 
とAWS公式に書いてありますが、この説明は私にはわかりづらく、もう少し読むと

スタンダード キューとは異なり、FIFO キューでは重複メッセージがありません。FIFO キューを使用すると、重複をキューに送信することを防止できます。5 分間の重複排除間隔内に SendMessage アクションを再試行しても、Amazon SQS ではキューに重複を挿入しません

 
とのことです。要するに、「同一の重複排除IDが設定されたメッセージをキューへ送っても5分間の間は受付けられない」ということのようです。

ちなみに、重複排除IDの設定についてですが、二通り方法があります。
(1) FIFO作成時に設定
(2) sendMessage時にDeduplicateIdを指定

(1)の方が楽だったので、以下のようにFIFO作成時に設定しました。

メッセージグループID

AWS公式より

メッセージグループID: 特定のメッセージグループに属するメッセージを指定するタグ。同じメッセージグループに属するメッセージは、メッセージグループに相対的な厳密な順序で、常に 1 つずつ処理されます (ただし、別のメッセージグループに属するメッセージは、入れ替わって処理される場合があります)。

 
との事です。こちらも少し分かりづらいですが、「グループ内の順序は厳密に守られるが、他のグループのメッセージとは順番が前後する場合がある」と理解しました。
今回はキューに入れた順に取り出されれば良かったので、特にグループは気にせず、以下のようにMessageGroupIdには定値を入れました。

移行後談

 
移行後、半年ほど経ち、その間ハンズメッセというセールも経験しましたが、問題報告はありません。あとは、TokyoリージョンにFIFOがリリースされれば、そちらに移ろうかという所です。

明日は14日目のsho-hitomiさんです。

Pocket

GolangでDynamoDB CLIを書く話

Pocket

gopherくん

こんにちは。クラシマです。
ハンズラボ Advent Calendar 2017 4日目の記事です。

もう随分前になりますが、井上がGolang製のDynamoDB用のCLIを探していたことがありました。

ネットストアのセールに向けて行った負荷対策について/ハンズアラボエンジニアブログ

結局見つからなかったのでNode.jsで井上本人が書き、現在もECサイトの本番環境で使っています。
↓それがこちらのbikkeです。
https://github.com/inouet/bikke

10月末くらいから趣味プロジェクトでGolangを書いていたのですが、
井上の記事を思い出したのでDynamoDB用のCLIを書くことにしました。
できあがったものが↓これです。
https://github.com/watarukura/gody

自分でCLIのツールを書くのは初めてなので三歩進んで二歩下がりながら進めています。
個人的にJSONを手で書くのが苦痛なので、JSONをオプションに使わない、というのがコンセプトです。
まだlist/get/query/scanしかできないので、put/update/deleteができるようになったら本番環境で使えないか検証したいところです。
put/updateのオプションをどうするか、今も悩んでいます。
テストもあまり書けてないですし・・・。
趣味プロジェクトから業務プロジェクトに反映するにはもう少し時間がかかりそうです。

Golang、いいですね!
低レイヤーの知識がないと速いプログラムが書けない、というところも魅力です。
日頃はPHPを書いていて、ポインタやバッファを気にすることはなくて、この辺りの扱いはさっぱりです。
今のところも並行処理的な機能をほぼ使ってないので、速くなる余地が随分残っている気がします。
あとは、JSONの扱いが楽なのがモダンな言語という感じがします。
弊社、ユニケージ開発により大量のBashスクリプトが稼働していますが、JSONの扱いは特に困るところです。
DynamoDBをデータストアの1st Choiceにするプロジェクトはそれなりにあるので、
そこでJSONを経由せずにDynamoDBを扱えるようになると、楽ができる部分は結構増えます。
ECサイト以外でも、ハンズラボ全体で使えるツールになるといいなぁと夢想しています。

AWS LambdaのGolangサポートも発表されましたし、今後ますますGolangを使うシーンが増えそうです。
折よく、開発に使っていたGoLandも販売開始になりました。
PHPStormユーザがGolangを書くならGoLandで決まりですね!

ハンズラボ Advent Calendar 2017 の5日目は、青木さんです。

Golangの学習には以下の書籍とサイトに大変お世話になりました。
この場を借りてお礼申し上げます。

※ アイキャッチのGopherくんの原著作者はRenée Frenchさんです。

Pocket