投稿

12月 16, 2018の投稿を表示しています

週刊不景気ニュース12/16、リストラの話題が多い1週間 - 不景気.com

イメージ
週刊不景気ニュース12/16、リストラの話題が多い1週間 - 不景気.com : 12月10日から16日までに起こった不景気な出来事を総括する「週刊不景気ニュース」。リストラの話題が... 続きを読む

[Boto3 Adv-Cal DAY16]検証した内容をふりかえってみる

イメージ
[Boto3 Adv-Cal DAY16]検証した内容をふりかえってみる : boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。 boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけ […]

Lambda@Edgeを使って画像をリサイズしてみた

イメージ
Lambda@Edgeを使って画像をリサイズしてみた : はじめに おはようございます、加藤です。今回は、AWS公式ブログを参考にLambda@Edgeを使ってクエリパラメータによって自動で画像をリサイズする仕組みを作ってみます。 一度リサイズされた画像は保存され、次回以降のリ […]

ECS on Fargateで動いているプログラムのログをElasticsearch/Kibanaで可視化

イメージ
ECS on Fargateで動いているプログラムのログをElasticsearch/Kibanaで可視化 : 当初の状況 あるサービスでECS on Fargate + Goの運用が始まり、取り急ぎGoが出力したログの運用を以下のようにしていました。 Goが出力したログの流れ awslogsドライバ経由でCloudWatchLogsに保存。 CloudWatchLogsのサブスクリプションを使ってKinesis Firehose経由でS3に保存 (ログの永続保存/コスト考慮的な) 運用を始めて出てきた要望 運用を始めると開発時とは違った形でログを調査することが増えてきて、ログ調査に対する要望が出てきました。 主な要望 CloudWatchLogsやS3上のログを見るのにAWS Console使うのは頻度的に手間/ストレス CloudWatchLogsやS3上のログにgrep的なことをするのにAWS ConsoleやAWS CLIだと調べにくい S3 Selectしてみると1レコードに複数ログ(logEvents部分)が入っているケースがあるので、1レコード1ログで見られるといい S3Selectした結果のサンプル [ { "messageType": "DATA_MESSAGE", "owner": "xxx", "logGroup": "/ecs-task", "logStream": "/ecs-task/xxxxxxx-4c18-4ab5-b1d6-7f8bff82a23d", "subscriptionFilters": [ "/ecs-task" ], "logEvents": [ { "id": "xxxxxxxx",

Props with type Object/Array must use a factory function to return the default value

イメージ
Props with type Object/Array must use a factory function to return the default value : あなたがこの記事を見ているということは、コンソールに以下のワーニングが出ていることでしょう。 WARN [Vue warn]: Invalid default value for prop "XXX": Props with type Object/Array must use a factory function to return the default value. このワーニングはVueコンポーネントの props に関するものです。 「propsのdefaultの値にObjectやArrayを使用したい場合、ファクトリー関数を指定しろ」 という内容のワーニングです。 ワーニングを解消する 以下のようにコードを修正することでワーニングを解消できます。 修正前 props: { obj: { type : Object, require : false, 'default': { count: 0 } // Objectをそのまま指定している }, } 修正後 props: { obj: { type : Object, require : false, 'default': () => ({ count: 0 }) // Objectを生成する関数を指定する }, } なぜ関数を指定する必要があるのか なぜ、ObjectやArrayをデフォルト値としたい場合、関数を指定する必要があるのでしょうか。 ワーニングを無視すると何が起こるか まず、ワーニングを無視した場合に何が起こるのか試してみます。 AppCounter.vue <template> <div class="content"> <span>{{ obj.count }}</span> <button @click=&qu

「人間はJavascriptにいずれ負ける」ことを実感するツールを作った

イメージ
「人間はJavascriptにいずれ負ける」ことを実感するツールを作った : はじめに この記事は、 JavaScript Advent Calendar 2018 の18日目の記事です。 ゲームを作りました これはJavascriptの速さを身をもって体験ができるアプリです。 アプリと言うかゲームですね。 Javascriptよりも早く、ターゲットに到達するのを競うものです。 上の画像でなんとなく雰囲気わかる方もいるかも知れませんが、 緑の円よりも早く、もう一つの円に到達する(マウスオーバーする) ことを繰り返します。 → プレイする 技術的な話 実装には、 D3.js ともはや化石と化しそうな jquery を使用しています。 (といっても、d3の要素はほぼないです) このゲームは主に以下のクラスで動いています。 Targetクラス・・・みんなが追いかける丸 Trackerクラス・・・我々と戦う緑の丸 Navigatorクラス・・・今の現状を教えてくれるヤツ Github - ソースコード Trackerクラス(緑の丸)の動き じつは、この緑の丸は 「ターゲットの位置が何処にあるかわかっていません」 人間と戦うに当たり、イーブンな土台に上げるためにあえてそうしています。 まず、相手との距離をスコア化します。 (近いと減る、遠いと増える、みたいな) Trackerクラス全16方向(東西南北とその間、さらに北北西などの方位も)に試しに動いてみて、 Navigatorクラスに対して「どの方向に動いたやつが一番スコアが良かった?」と聞いて、それで一番スコアの良い(相手との距離が一番縮まる)方向に動きます。 それを定期的に続けることで 「何処にいるかは知らないけど、こっちにいったら近づいてる」 という情報のフィードバックをずっと得ながら移動していきます。 イメージで言うとドラゴンボールに出てくる「ドラゴンレーダー」のような動きでしょうか this.forwardMaster = { // 上段 (北西・北・北東) 7: {x: -1, y: -1}, 8: {x: 0, y: -1},

phina.js で月と地球をつくろう!

イメージ
phina.js で月と地球をつくろう! : この記事は phina.js Advent Calendar の15日目です! 前(12/14) phina.jsで画像を変換して新しく登録する by @YukiYukiVirtual さん はじめに 今年も様々なニュースが取り上げられましたが、皆さんはどんなニュースが印象に残っているでしょうか? 私は小惑星探査機の「はやぶさ2」がついに小惑星のリュウグウに到着し、探査を始めたというニュースが印象に残っています。日本や世界から集められた様々な技術やアイデアが詰め込まれたこの探査機がどのような成果をあげるのか、はやぶさ2の帰還が予定されている2020年が楽しみですね! さて、そんな宇宙に思いを馳せながら、今回は phina.js を使って惑星と衛星のシミュレーションをしてみたいと思います。はやぶさ2も、太陽系内の様々な惑星からの重力を綿密にシミュレーションしてどのようなルートでリュウグウまで行くのか計画を立てていますが、今回はそれに似たようなことをしてみます。 月と地球の基本編 さて、月と地球のシミュレーションと聞いても、いまいち実感がわかない方や、「難しそう...」と思った方も多いのではないでしょうか? でも、心配は不要です。 簡単です。 月と地球の動きのシミュレーションは今年の秋頃に放送されたTV番組の「 【ちちんぷいぷいプログラミング】#6:月と地球の重力をプログラミングしてみる!? 」でとてもわかり易く説明されています。(YouTube で見れます) このTV番組では MoonBlock というやつが使われていますが、あんまり使いやすくないので phina.js で書き直してみました。 コード Demo(RunStant) phina.globalize(); const SCREEN_WIDTH = 960; const SCREEN_HEIGHT = 960; // 万有引力定数 const GRAVITATION = -0.02; phina.define('MainScene', { superClass: 'DisplayScene', init() { this.superIni

CloudWatch Eventsルールはまれに複数回発火することがある

CloudWatch Eventsルールはまれに複数回発火することがある : はじめに 知ってる人には常識なのかもしれませんが、個人的にへぇボタン連発だったので、超小ネタですが恥を忍んで共有します。 経験した事象 CloudWatch Eventsでcron式を用いて定時にルールをトリガーするようにしていたら、ある日ターゲットがほぼ同時に2回実行された。 原因 CloudWatch イベント のトラブルシューティング 1 つのイベントに応じてルールが複数回トリガーされました。 CloudWatch イベントで、ルールのトリガーまたはターゲットへのイベントの提供で何が保証されますか。 まれに、単一のイベントまたはスケジュールされた期間に対して同じルールを複数回トリガーしたり、 特定のトリガーされたルールに対して同じターゲットを複数回起動したりする場合があります。 バッチリ書いてある。。。 おわりに 知っていればなんてことはないのですが、知らなければそんなことは頭になく、単純に利用する分には再現性もないのでテストしていてもスルッと漏れていってしまうタイプの現象でした。 ドキュメントをちゃんと読む。基本的なことをしっかりやりましょう(お前が)。 反省はさておき、分散システムにおいて一貫性と、可用性とかスケーラビリティみたいなことは常にトレードオフであり、AWSはCloudWatch Eventsのようなサービスにおいてこういう仕様を選択したんだなあと興味深く査収した次第です。 クラウドネイティブなアプリケーションにおいてリトライの可能性や冪等性といったことは基本事項としておくことの重要性をあらためてかみしめながらこちらからは以上でございます。

SlackでPublicチャンネルの発言を1箇所に集める方法

イメージ
SlackでPublicチャンネルの発言を1箇所に集める方法 : はじめに 情報ジャンキーなのでチャンネルに投稿があると見ずにはいられません でもチャンネル数が多いと色んなチャンネルを行ったり来たりして大変 なのでtimelineチャンネルを作り全てそこに集めてしまえば良いと思いBotkitでやってみました BotkitをSlackで使う方法は こちらの記事 が参考になるかもしれません SlackBotの設定 OAuth & Permissionsの設定に以下を追加します users:read chat:write:bot chat:write:user(これはいらないかも?) channels:history Event Subscriptionsの設定に以下を追加します message.channels Botkitのコード .envファイルにtimelineチャンネルのIDを設定します チャンネルIDを知るにはslackメッセージを右クリックしてコピーする方法が簡単だと思います Cから始まるやつがチャンネルIDです .env timelineChannelId=Cxxxxxxxxx 3つのイベントに反応するようにします ambient direct_mention mention イベントについてはここに こちら 詳しく書いてあります users.infoとchat.postMessageを使ってtimelineチャンネルに投稿します users.infoの仕様は ここ に書いてあります chat.postMessageの仕様は ここ に書いてあります skills/timeline.js module.exports = function(controller) { controller.on('ambient,direct_mention,mention', function(bot, message) { // ユーザトークンを使っているためボット作成者が参照できるプライベートチャンネルなどの発言も拾ってしまう // そのためchannel(パブリックチャンネル)でない場合は処理を終

Glueの使い方的な㉛(GlueやAthenaで見えるテーブルを制限する)

イメージ
Glueの使い方的な㉛(GlueやAthenaで見えるテーブルを制限する) : Glue リソースポリシーでアクセスコントロール ユーザーAはGlueデータカタログのテーブル1が閲覧操作できるが、ユーザーBはGlueデータカタログのテーブル1を閲覧操作できないなどを実現する。 https://aws.amazon.com/jp/about-aws/whats-new/2018/10/aws-glue-now-supports-resource-based-policies-and-resource-level-permissions-and-for-the-AWS-Glue-Data-Catalog/ 試す 管理者ユーザーは全部操作でき、se2_user31という名前のユーザーは閲覧操作できるテーブルに制限が掛かってることを確認 管理者ユーザーから確認 Glueデータカタログのデータベースが全部見えます Glueデータカタログのテーブルが全部見えます 特定ユーザーに閲覧操作できるテーブルを限定します ユーザー名:se2_user31 対象データベース:se2 対象テーブル:se2の配下すべて Glueの画面から、[設定]をクリックし、"アクセス権限"の箇所にポリシーを書きます。 ポリシーは以下のように、「se2_user31というユーザーが、データカタログのデータベースse2とデータカタログのテーブルのse2配下全部に対して閲覧操作可能」という内容です。 ※se2_user31ユーザーのIAMポリシーにはGlueの設定はなにも入れない { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::xxxxxxxxxxxx:user/se2_user31" }, "Action" : "glue:*

技術者の評価基準は「インパクト」 米Microsoftで働く日本人エンジニアが語る、“楽しく開発”するために必要なこと - Part2 - ログミーTech

イメージ
技術者の評価基準は「インパクト」 米Microsoftで働く日本人エンジニアが語る、“楽しく開発”するために必要なこと - Part2 - ログミーTech : 技術者の評価基準は「インパクト」 米Microsoftで働く日本人エンジニアが語る、“楽しく開発”するために必要なこと - Part2 - ログミーTech 技術者の評価基準は「インパクト」 米Microsoftで働く日本人エンジニアが語る、“楽しく開発”するために必要なこと - Part2 敢えて属人化せよ!エキスパートの集団こそが最強のチーム #2/3 2018年1月11日から13日の3日間、第8回目となるRegional Scrum Gathering® Tokyoが開催されました。スクラムの初心者からエキス...

Windows 10、「更新プログラムのチェック」に要注意 - CIOニュース:CIO Magazine

イメージ
Windows 10、「更新プログラムのチェック」に要注意 - CIOニュース:CIO Magazine : Windows 10、「更新プログラムのチェック」に要注意 - CIOニュース:CIO Magazine Windows 10のユーザーの中には、「Windows Insider Program」に参加して、プレビュー版の新機能を真っ先に試したいと考える、チャレンジ精神旺盛な人もいる。だが、それ以外の皆さんは、日々安定して使えるシステムで十分と思っていることだろう。 そんな皆さんは、Windows 10の「設定」→「更新とセキュリティ」→「Windo...

Apple Pencilではじめる気軽なお絵描き(1)「メモ」を使う

Apple Pencilではじめる気軽なお絵描き(1)「メモ」を使う : ペイント系のアプリは種類が多いし、ツールの機能や使い方がそれぞれ独特で最初はわかりづらかったりしますよね。ここでは定番ペイント系アプリの基本機能と、簡単な使い方をお伝えしたいと思います。

デザイン表現が広がる、Lottieアニメーション - BASE開発チームブログ

イメージ
デザイン表現が広がる、Lottieアニメーション - BASE開発チームブログ : デザイン表現が広がる、Lottieアニメーション - BASE開発チームブログ これは「BASE Advent Calendar」16日目の記事です。 こんにちは、BASEのDesign Groupに所属している吉岡です。 先日BASE BANK株式会社初めてのプロダクトとして即時に資金調達ができる金融サービス「YELL BANK」をリリースしました。個人的にお金にまつわるデザインは初めての経験ということもあり、難しかったのですが...

Ansibleのモジュールを開発してみよう - 赤帽エンジニアブログ

イメージ
Ansibleのモジュールを開発してみよう - 赤帽エンジニアブログ : Ansibleのモジュールを開発してみよう - 赤帽エンジニアブログ この記事は、「赤帽エンジニア Advent Calendar 2018」16日目の記事です。 こんにちは、Ansibleのテクニカルサポートエンジニアをしている、八木澤(@hiyoko_taisa)です。 Ansibleを使う上で「こんなモジュールがあったらいいのに」「このモジュールにこんな機能があればいいのに」と思うことはありませんか? Ansibleで...

社内SQL勉強会を開催しました - dely engineering blog

イメージ
社内SQL勉強会を開催しました - dely engineering blog : 社内SQL勉強会を開催しました - dely engineering blog こんにちは、検索エンジニアのsakura (@818uuu) です。 先日、営業さん向けにSQL勉強会を行いました。開催してみて難しかったことや得た知見などを紹介します。 この記事はdely Advent Calendar 2018の14日目の記事です Adventar : dely Advent Calendar 2018 - Adventar Qiita : dely Advent Calendar 2018 - Qiita 13...

「Raspberry Pi」を使ったクラスタ--5台連結から大規模750台構成まで - ZDNet Japan

イメージ
「Raspberry Pi」を使ったクラスタ--5台連結から大規模750台構成まで - ZDNet Japan : 「Raspberry Pi」を使ったクラスタ--5台連結から大規模750台構成まで - ZDNet Japan 35ドルの「Raspberry Pi」は強力なコンピューティング性能を決して備えてはいないが、近年、同小型ボードを何台もつないで性能を活用する愛好家が出始めている。 Piクラスタには、5台連結した小規模のものから750台連結の大規模なものまでさまざまなタイプが存在する。 さらにいろいろなタイプを知りたければ、ここにあ...

案外よくできているMySQLというアプリケーション - Speaker Deck

イメージ
案外よくできているMySQLというアプリケーション - Speaker Deck : 案外よくできているMySQLというアプリケーション - Speaker Deck All slide content and descriptions are owned by their creators.

複雑なドメインに泥臭く立ち向かう - Speaker Deck

イメージ
複雑なドメインに泥臭く立ち向かう - Speaker Deck : 複雑なドメインに泥臭く立ち向かう - Speaker Deck 2018/12/15 JJUG CCC 2018 Fall での登壇資料です。 #jjug_ccc #ccc_e4