ちゃっす。 ユニファのインフラ鈴木です。
久しぶりのブログです。
花粉がすごいらしいですね!!
最近鼻水とか出ますけど、私は花粉症ではないので関係ないでしょうね…うん
前回に引き続きNLBの事をブログに書こうと思います。
あ、NLBはなんぞやというかたは、公式のブログをどうぞ
NLBの何を書くかというと、複数のAZで複数のターゲットグループが設定されていた場合に、1つのターゲットグループが単一AZの利用になっていた場合どういう挙動になるのかなと言うものです。
では確認していきます。
ちゃっす。 ユニファのインフラ鈴木です。
久しぶりのブログです。
花粉がすごいらしいですね!!
最近鼻水とか出ますけど、私は花粉症ではないので関係ないでしょうね…うん
前回に引き続きNLBの事をブログに書こうと思います。
あ、NLBはなんぞやというかたは、公式のブログをどうぞ
NLBの何を書くかというと、複数のAZで複数のターゲットグループが設定されていた場合に、1つのターゲットグループが単一AZの利用になっていた場合どういう挙動になるのかなと言うものです。
では確認していきます。
ユニファのiOSエンジニアのしだです。
try! Swift 2018 が 3/1, 3/2 ベルサール新宿グランドでありました。
try! Swift 初参加です!
今回は参加者・スタッフ合わせて800名ということだったので規模が大きいです。
他のカンファレンスだと、複数のセクション・ルームがあって聴きたいトークに移動したり、1つのトークが終わると休憩があるけれど、
try! Swift はセクションが1つだけなので移動がなく、複数のトークが続いたあと休憩になるので個人的に楽でよかったです。
また1つの発表の内容が濃くて、clang module、AST、SIL、SwiftNIO、Kitura、CoreML、Charles、AR、Kotlin、vDSP、Sourcery ... キーワードだけ上げても切りがないです。
続きを読むみなさん、こんにちは。エンジニアの田渕です。 インフルエンザが猛威を奮った冬でしたが、みなさまご無事だったでしょうか? 一番流行っている時期にはユニファ社内でも毎週のように、社員や社員のご家族がインフルエンザになって……という話を聞いていました。 幸い、私は今年かかることもなく今日まで来たので、このまま逃げ切りたいと思っています……。
さて、ユニファが提供するサービスの中にはSORACOM Air SIMを利用しているものがあります。 全体通信量が少なく、速さを必要としないけれど、いつもネットワークに繋がっていたい……!と言う悩みを解決してくれたSIMです。 SIMの状況を確認したり、設定を変更したりするコンソール画面も用意されており、エンジニアではない方でも操作が可能なのですが、日々の運用をしていく上では画面から設定できること以上の諸々を行いたくなってきます。
ということで、本日はSIMの監視設定を画面からではなく、コマンドで行っていきたいと思います。
クライアントに関する公式ページはこちら。
コードの公開もされており、詳細な導入手順等はそちらに記載されています。 Macの方は公式の手順に従いインストールでOK。 ちなみに、この記事時点でのクライアントバージョンは「SORACOM API client v0.2.8」です。
インストール後、早速コマンドを叩いてみると、説明が出てきます。
$ soracom A command line tool to invoke SORACOM API Usage: soracom [command] Available Commands: auth API アクセスの認証を行い、API キーと API トークンを発行します。 bills 課金に関する情報を確認したりファイルへのエクスポートを行います。 completion bash 用の補完 (completion) スクリプトを生成します。 configure コマンド実行環境(プロファイル)の設定や表示を行います。 (以下略)
日本語……(感涙)
次に、上記ページに記載してある「How to use」に従ってセットアップしていきます。 セットアップ方法はいくつかありますが、今回はあらかじめコンソール画面にて発行しておいたAuthKeyIdとAuthKeyを利用します。
$soracom configure --- SORACOM CLI セットアップ --- /Users/(ユーザー名)/.soracom ディレクトリがなければ作成し、そこにファイル 'default.json' を作成します。 カバレッジタイプを選択してください。 1. Global 2. Japan 選択してください (1-2) > 2 認証方法を選択してください。 1. AuthKeyId と AuthKey を入力する(推奨) 2. オペレーターのメールアドレスとパスワードを入力する 3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード) 選択してください (1-3) > 1 authKeyId: (発行したAuthKeyId) authKey: (発行したAuthKey)
実は簡単なSIMの監視をするだけであれば、コンソール画面から設定出来る内容で十分です。ですが、実際に色々と仕事で利用すると、事細かに設定したくなります。 例えば、「この人がこういう操作したら通知が欲しい」とか「自社のシステムに作業履歴保存しておきたい」とか。。そういう時に利用出来るのがイベントハンドラー機能です。
今回はイベントハンドラー機能を利用し、「あるユーザーによってSIMの速度変更が行われた際の通知をメールで飛ばす」をやってみます。
コンソール画面から設定出来る各種監視も内部的にはこのAPIを利用しているとのこと。 上記公式ページに各種設定のサンプルがありますので、環境さえあれば、コマンドを利用して比較的手軽に試すことが出来ます。
イベントハンドラーの設定は、各種設定を記載したjsonファイルを用意し、そのファイルをコマンドに引き渡す形で行います。
{ "targetOperatorId": "(対象のユーザーのオペレータID)", "name": "SpeedClass", "description": "速度変更通知のテスト", "ruleConfig": { "type": "SubscriberSpeedClassAttributeRule", "properties": { "inactiveTimeoutDateConst": "IMMEDIATELY" } }, "status": "active", "actionConfigList": [ { "properties": { "executionDateTimeConst": "IMMEDIATELY", "message": "SIMの速度が変更されました", "title": "通知:SIMの速度が変更されました", "to": "(送信したいメールアドレス)" }, "type": "SendMailAction" } ] }
これをsoracom event-handlers create --body @{JSONファイルのパス}
という形で実行します。
実行後の結果がこちら。
{ "actionConfigList": [ { "properties": { "executionDateTimeConst": "IMMEDIATELY", "message": "SIMの速度が変更されました", "title": "通知:SIMの速度が変更されました", "to": "(送信したいメールアドレス)" }, "type": "SendMailAction" } ], "description": "速度変更通知のテスト", "handlerId": "(生成されたイベントハンドラーのID)", "name": "SpeedClass", "ruleConfig": { "properties": { "inactiveTimeoutDateConst": "IMMEDIATELY" }, "type": "SubscriberSpeedClassAttributeRule" }, "status": "active", "targetDeviceId": null, "targetGroupId": null, "targetImsi": null, "targetOperatorId": "(対象のユーザーのオペレータID)", "targetTag": null }
どうやら無事に設定されたようなので、動作確認してみましょう。 コンソール画面上から一つのSIMの速度を変更してみます。 すると、すぐにメールが届きました!
ちょっとこのメールだと、何がどう変更されたのかわかんないな……ということで、内容を変えてみます。
先ほどはイベントハンドラーの作成でしたが、今度はもう作成されているものを変更します。
同じく、jsonの設定ファイルを作成し、
soracom event-handlers update --body @{JSONファイルのパス} --handler-id (↑で作成したイベントハンドラーのID)
で変更が可能です。
配信するメールのメッセージには、あらかじめ決められた変数を埋め込むことが出来ます。 今回は、「どのSIMが、どう変更されたか」がわかるように、SIMを特定するIMSIと変更前の速度、変更後の速度をメールの文面に入れます。
{ "targetOperatorId": "(対象のユーザーのオペレータID)", "name": "SpeedClass", "description": "速度変更通知のテスト", "ruleConfig": { "type": "SubscriberSpeedClassAttributeRule", "properties": { "inactiveTimeoutDateConst": "IMMEDIATELY" } }, "status": "active", "actionConfigList": [ { "properties": { "executionDateTimeConst": "IMMEDIATELY", "message": "SIMの速度が変更されました。 ${imsi}:${oldSpeedClass} → ${newSpeedClass}", "title": "通知:SIMの速度が変更されました", "to": "(送信したいメールアドレス)" }, "type": "SendMailAction" } ] }
先ほどと同じく、コンソール画面から変更を行ってみます。 無事、欲しい情報の入ったメッセージが送られてきました。
今回は、クライアントを利用してSORACOM Air SIMの監視設定をしてみました。 既に似た題材でブログを書かれている方もいらっしゃいましたが、日々拡張されていることもあって細かな部分が変わっていたり、少し用途が違ったりしたので、改めて自分の備忘の意味も込め、書かせて頂いた次第です。 登場当初から言われておりましたが、イベントハンドラーはAWSのLambdaとの連携やAPIを叩くことも出来るなど機能は多彩。 公式サンプルにもある通り設定次第ではSIM操作の履歴を内部的に持つことも出来、色々と使い道がありそうです。
今後も弊社サービスがより使いやすくなるよう、色々なことを試して行こうと思います。
皆様こんにちは。ユニファの赤沼です。最近はすっかり IoT ブームで、もともとハードウェア開発の経験がない方でも電子工作に興味を持たれている方は多いのではないでしょうか。今回は電子工作を行う時に便利なサービスを一つ紹介したいと思います。
電子工作をする時に、特にもともとソフトウェア開発をされていた方が感じる課題には例えば下記のようなものがあるのではないでしょうか。
実際に電子回路を組んでみないと設計が正しいのか、ちゃんと動くのかがわからない
ちゃんと動かなかった時にどこに問題があるのかがわかりづらい
回路のつなぎ方を間違えるとパーツが壊れたり発火したりする可能性がある
ソフトウェアの開発であればターミナル上でコードを書いて少しずつ動かして確認することができますし、デバッグも print デバッグや デバッグツールでデバッグポイントを設定してステップ実行したりすることが可能です。それにコードが間違っていたとしても普通はPCが壊れたり燃えたりすることはありません。この辺りのことは電子工作を始める時にとっつきにくさの原因となる部分ではないでしょうか。
上記のような課題を解決するための一助となるサービスとして、今回は Tinkercad というサービスをご紹介します。
サービス名に cad
と入っている通り CAD ツールなので 3D モデルの作成などが行えるのですが、電子回路の設計や動作のシミュレーションも行うことができます。
それでは Tinkercad で電子回路を作成してみます。初めて使う時にはアカウント登録が必要ですので、右上の サインアップ
ボタンからアカウント登録を行なってください。アカウント登録手順については特に難しいことはないと思いますので、詳細は割愛します。
サインアップしてサインインするとダッシュボード的な画面になります。デフォルトでは 3D モデルの作成を行うための画面になっていますので、左のメニューから Circuits
を選択します。
初めて使う場合は Create new Circuit
ボタンをクリックして新しい回路の作成を開始します。
すると画面右に電子工作パーツが並んだ回路作成画面が表示されますので、この画面でパーツを配置して回路を作成します。
ではまずはシンプルに、ブレッドボードに LED とコイン型電池を配線して LED を点灯させる回路を作成してみます。右側のパーツリストから該当のパーツを選択して左ペインに配置します。パーツによって様々なパラメータを設定することができ、例えば抵抗であれば何Ωの抵抗かを設定できます。今回は抵抗値は 330Ω にしています。また、左上のメニューでパーツを回転させることもできます。回路が作成できたら、右上の Start Simulation
をクリックしてみます。
すると回路のシミュレーションが始まり、LED が点灯します。
さらにテスターもパーツに用意されていますので、配置することで動作時の電圧なども見ることができます。
では次に抵抗を削除して、電池と LED のアノードを直接接続してシミュレーションを実行してみます。すると LED が点灯しますが、 i
マークが表示されました。
LED にマウスオーバーしてみると、下記のようなメッセージが吹き出しで表示されます。
現在の電流が 61.9 mA で、推奨の最大電流は 20.0 mA なので、 LED の寿命が短くなる可能性があります、という感じの注意が表示されています。
ではさらに極端な例として、コイン型電池を 9V 電池に変更してシミュレーションを実行してみます。すると今度は LED にクラッシュしたようなマークが表示されました。
また LED にマウスオーバーしてみると、今度は下記のようなメッセージになっています。絶対最大定格が 120mA の LED に対して 915mA の電流が流れてしまっているため、 LED が壊れてしまったということになります。
Tinkercad では単純な電子パーツの回路だけでなく、 Arduino で動作するコードのシミュレーションも行うことができます。先ほどの回路の電池の部分を Aruduino に置き換えて下記のような回路を構成し、右上の Code
ボタンをクリックします。
すると Arduino で動かすコードを編集するためのブロックエディタが表示されます。今回はテキストでコードを編集するために、プルダウンリストから Text
を選択します。
エディタがテキスト編集用に変わり、デフォルトでLチカのコードが用意されています。
Start Simulation
をクリックすると、下記の動画のように実際のコードの動作を確認することができます。
さらにエディタにブレークポイントを設定し、ステップ実行でデバッグすることも可能です。
回路図を作るところまでであれば Fritzing が有名ですが、電子回路や Arduino のコードのシミュレーションやデバッグまでできてしまうという点で Tinkercad はかなり便利だと思います。これでしたら実際のパーツが手元になくてもとりあえず回路を作って動かしてみることができますし、パーツの破損や発火も気にすることなく試せます。まずは Tinkercad で回路を構成してみて、問題なさそうであれば実際のパーツで回路を組んでみるという順でやると、手戻りが少なく、効率的にプロトタイピングができると思いますので、お試しいただければと思います。
ハイ、ドーモ!QAの山岸です。 最近、社内ではわたしたちQAチーム以外でも受け入れテストが行われたりしており自身の再認識の意味も踏まえてQAってどんなことしているの?評価検証ってなに?みたいなものをまとめてみようと思います。
QAとは Quality Assurance の略称です。 顧客に信頼性を与えることを目的とし、そのために求められる品質を満たしているかどうかを検査・保証することです。
企業によっては評価や評価/検証、品質管理などいろいろな呼び方で呼ばれています。
国際規格としてはISO9000シリーズがあります。
これのなかにあるISO/IEC 9126という品質特性をもとにソフトウェアや商品が品質管理が適正にされているよね?ということを見ています。
品質特性
左側の大項目は主な特性で右側は副特性と呼ばれています。
特性だけ挙げられてもわからないと思うので、左側の特性をかんたんにまとめます。
◆機能性
ソフトウェアが目的に対して正確に動作、機能するか
◆信頼性
特定の状況下(高負荷とか)でソフトウェアがどの程度機能するか
◆使用性
使用者が利用するにあたって理解、習得、利用が円滑に行えるか
◆効率性
使用する環境下で適切な性能が発揮するか
◆保守性
修正のしやすさのこと
利用時の品質特性モデル(ISO/IEC 9126-4)としては下記があります。
かんたんに言うとユーザビリティみたいなものです。
有効性 (effectiveness)
生産性 (productivity)
安全性 (safety)
満足性 (satisfaction)
大まかにはこのような感じです。
これをもとにテスト(試験、検査)を行い、品質を保証していきます。
ちなみにですが、テスト技法の資格もあります。
http://jstqb.jp/index.htmljstqb.jp
テスト技法やテストまでの流れに関しては呼び方や方法がとても多いのでまた別の機会に紹介したいと思います。
以上になります。ありがとうございました。
こんにちは、システム開発部のちょうです。今回は自分が最近の開発でもっとやりやすい方法でCSVやExcelを作成することについて話したいと思います。
まずCSVから。Ruby標準のライブラリにすでにcsvというCSVを取り扱うライブラリがあります。でもCSVを作成する際に、ヘッダーと内容は別々で出力します。
CSV.generate do |csv| csv << ["column1", "column2", "column3"] items.each do |it| line = [] line << it.foo line << it.bar line << it.baz csv << line end end
ここに、サービスの開発をしていくにつれ、列が増える可能性があります。すると、修正する箇所が2つあります。一つはヘッダーのところ、もう一つはループのところです。列の数がすくないならまだいいですが、列が10個以上、20個に増えたらデータの漏れや順番の間違いは発生しやすいです。 そもそも列と内容の出力は一緒にすればいいのではと自分が考えました。実際、こんなコードを書きました。
続きを読むこんにちは、Webエンジニアの本間です。
昨年も予定通り12月25日に Ruby 2.5 がリリースされましたね。
個人的に嬉しいのは、ブロックパラメーターを経由したメソッド呼び出しが3倍早くなった改善です。
def foo(a, &b)
のようなメソッド定義はブロックを受け取ることが明示されていて好きなのですが、今回の改修でこのような書き方をやりやすくなったなぁと思っております。
さて今回は、弊社サービスの「写真サービス るくみー」と「Googleフォト」が連携できないか?という調査を兼ねて、RailsアプリケーションからGoogleフォトに写真をアップロードしてみようと思います。
続きを読む