サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
tech-blog.tsukaby.com
TL;DR Amazon Linux2ではなくUbuntuを使う instance typeをgeneral1.smallからgeneral1.largeに変えてみる Imageのversionを例えばAmazon Linux 4系から3系に下げる そもそも抜本的な解決にならないのでGitHub Actionsなど別のサービスに乗り換える 背景と問題 仕事でAWSを利用しており、Docker containerのビルドやデプロイにAWS CodeBuildを利用しています。 https://aws.amazon.com/jp/codebuild/ 最近ではGitHub Actionsが増えてきており、そちらの方が良い気もします。 極力AWSに統一しておいた方が見通しやメンテナンス性、Image転送のネットワークの近さなど色々と有利だと思いCodeBuildを採用したのですが、どうにもビルド
Ruby(Rails)界隈ではおそらくJobの実行基盤のデファクトはSidekiqです。SidekiqはRuby(Rails)とは異なるプロセスで動かすソフトウェアで、何らかのバックグラウンドの処理を担当するものです。 おそらく大抵の場合はRailsと共に使われると思いますが、Rails無しでも使うことはできます。ここではSidekiqの特徴や優れている点、使い方について解説します。 Sidekiqのアーキテクチャ https://github.com/mperham/sidekiq シンプルで効率的なRubyのためのバックグランドプロセッシングです。 何らかの処理を並列で動かしたい、HTTP Requestを受け付けるRailsのプロセスでI/O Waitを発生させたくないので、重い処理をJobにする、cronのように何かの処理を定期的に実行したい、というようなシーンで利用します。 使う
データ容量は、pull、push、パブリッシュの各オペレーションのメッセージ データと属性データのみを使用して計算されます。計算に含まれるのは、1 リクエストあたり(1 メッセージあたりではなく)1 KB 以上のデータです。 引用:料金 https://cloud.google.com/pubsub/pricing?hl=ja 最後の一文は意図がよくわかりませんが、ようするにデータを入れる時も取る時も課金されるようですね。Kinesisは(PUTペイロードユニットは無視するとして)Shard単位での課金なので、このあたりはだいぶ違いますね。 Kinesisと比較した場合のPub/Subの料金 (Kinesisの最大22倍) Kinesisは1shardで1MB/sec publishできる性能があります。毎秒常に1MBのデータをpublishし、毎秒常に1MBのデータをsubscribeす
今回はMySQLに接続する方法についてです。 MySQLへ接続するときはCUIからmysqlコマンドで接続したり、MySQL WorkbenchなどのGUIツールを使って接続していると思います。 開発時などであればそれで良いですが、実際にリリースされた本番環境やステージング環境のMySQLに接続しようとすると、単純に接続できないかと思います。FWによってMySQLのポートに到達できなかったり、到達できてもMySQLの設定で接続できなかったり・・・。 そこで今回はsshを経由することでMySQLに接続する方法をまとめてみました。 mysqlコマンドで接続する方法 MySQL workbenchで接続する方法 Sequelで接続する方法 Intellij IDEA Database tool 前提知識 どの方法もSSHトンネル(SSHポートフォワード)という技術を使います。これはMySQLやD
Google Container Engine (GKE, Kubernetes) を使ってサービスを外部公開する こんにちは、@s_tsukaです。 今回はGKEを触ってみました。Kubernetesは以前にちょこっと触ってPod立てたくらいで知識が止まってます。 実際にGKE, Kubernetesを使うとなるとこれを使って何らかの仕事をさせたいわけで、特にWebアプリ、Webサービスの場合外部に公開する必要が出てきます。今回はその外部公開まわりを中心に試していきます。 今回はnginxを立てて、それを独自ドメインでアクセスできるようにするのが目標です。 こちらのサイトを参考にさせていただきました。正直やってることはほぼ同じなので、こちらのサイトを見たほうがいいかもしれません。 GKEでコンテナ作成/管理しよう! Kubernetesクラスタを立てる gcloud container
こんにちは、@s_tsukaです。 今回はAvroのシリアライザの話です。 こちらの記事ではAvroのsbtプラグインを使って、entityクラスを自動生成する方法を紹介しました。 Avroは単なるスキーマではなく、シリアライズ・デシリアライズのシステムでもあります。むしろシリアライズこそが本命の機能であると言って良いでしょう。そこが非常に強力です。 今回はそのシリアライズまわりについて触れていきます。 Avro公式のJavaライブラリでシリアライズ AvroをJavaで利用する場合は、公式のライブラリおよびDocumentが利用できます。 http://avro.apache.org/docs/current/gettingstartedjava.html MavenやSBTで <dependency> <groupId>org.apache.avro</groupId> <artifa
AWS LambdaのIAM Role設定のメモです。 AWS LambdaのFunctionを作ってAWS SDK Javaから利用しようとしたときの話です。 開発時はAdminまたはPowerに類するAWSアカウントで開発をするので良いと思いますが、いざ本番環境でAWS LambdaをコールするJavaプログラムを動かすとなると話は変わってきます。 場合によると思いますが、そのプログラムを動くマシンや、そのマシンが利用するAWSアカウントが制限されたユーザ(ロール)だったりする場合に少し困ります。たいていそういうケースで初めてLambdaを使う開発をした場合はLambdaのFunctionをコールする権限が設定されていないのではないでしょうか? 自分はそうでした・・・。というわけでその設定に少し手間取ったのでメモしておきます。 設定方法 と言ってもそれほど難しい話では無いです。 IAM
ScalaにはtoSetやtoListなどのコレクション変換関数が用意されていますが、これを使うよりはbreakOutを使った方が若干速いよ、という話です。 #rpscalaで@xuwei_kさんに教えて頂きました。 toSetやtoListの使い方 まずはおさらいです。 val tmp = Seq(1, 2, 3) tmp.toSet tmp.toList tmp.toVector tmpみたいなコレクションがあるとき、toXXXXという関数で色々な型に変換できます。 今回対象とする問題 コレクションにはmapとか色々関数が用意されていますが、mapを呼び出した後でコレクションの型を変換する、というシーンが良くあるかと思います。 val tmp = (0 until 3).map(_ + 1).toSet みたいな感じで。 mapが一旦終わった段階でコレクションが構築されて、その後で別の
こんにちは、@s_tsukaです。 今回はHomebrewとMySQLを利用するときに、Macの複数ユーザに対応する方法について書いてゆきます。 前提と問題 Homebrewを利用してMySQLをインストールすることができ、一部の開発者のみなさんはそうしていることかと思います。 このとき、Macユーザが1つだけであれば問題はないのですが、複数ユーザを用意している場合は問題が起こります。 HomebrewもそれでインストールしたMySQLも1ユーザを想定して作られているので、権限の問題でうまく動きません。 対策:権限を変える 権限だけの問題なので、ディレクトリとファイルの権限を変えてしまえばOKです。 まずはHomebrew sudo chgrp -R admin /usr/local sudo chmod -R g+w /usr/local sudo chgrp -R admin /Lib
今回はScalaの構造的部分型(structual subtyping)の話です。 構造的部分型を使うと、いちいちインタフェースであるtraitやclassを用意しなくて良いため、便利です。ですが、構造的部分型はコンパイルするとリフレクションに置き換えられるため、性能面では若干心配です。 今回は性能を検証してみようと思います。結論から言うと構造的部分型を利用するとメソッド呼び出しにかかるコストが41倍も増えてしまいます。(つまり沢山呼ばれる部分に使うと辛い) 構造的部分型のサンプル まずはおさらいと例です。構造的部分型はこんな感じですね。 import scala.language.reflectiveCalls object Main { def main(args: Array[String]): Unit = { val obj = new { def findAll():List[
こんにちは、@s_tsukaです。 先日ご紹介しましたAmazon API Gatewayの記事はいかがでしたでしょうか。 Lambda連携で学ぶAmazon API Gateway解説! 上記の記事ではAPI Gatewayの最低限の使い方について触れただけでした。今回の記事ではもう少しAmazon API Gatewayの世界に踏み込んで、より広範囲の機能に触れていきたいと思います。 キャッシュ設定 キャッシュの設定を行うには以下のようにステージごとに設定します。Saveボタンを押しても暫くはキャッシュ作成中状態なので、作成完了まで暫くお待ちください。そのうちステータスがAVAILABLEになります。 キャッシュの設定を行うと追加料金が発生します。 詳細は以下を参照してください。 https://aws.amazon.com/jp/api-gateway/pricing/ 今回は0.5
MyBatis Generatorを使うと、MyBatisを利用する時に必要な煩雑な作業(SQL記述、XML作成、Entityクラス作成など)を自動化してくれます。 このMyBatis Generatorですが、デフォルトで****Exampleというクラスまで作成されるようになっています。少し使ってみると、「ああ、and条件とかを表すためのクラスなのね」と分かるのですが、情報不足で詳しいことが分かりません。 勿論公式にExample Class Usage Notesという情報はありますが、英語だし・・・というわけで使い方を調査・解説します。 テーブル まずは検証用に適当なテーブルとビューを作成します。 /* Create Tables */ -- 生産者 CREATE TABLE PRODUCER ( PRODUCER_ID BIGINT UNSIGNED NOT NULL, PROD
こんにちは、@s_tsukaです。今回は珍しくJavaScriptネタでいこうと思います。 自分のJS力はそれほど高くないですし、ブラウザやW3Cの仕様に詳しくないですが、scriptタグはハマりポイントだと思うので、書いておきます。(といっても今回のは一般的ではないです) 今回は生のJSを扱います。(最近はAngularや、Reactが流行っていますが、未だに生JSのニーズもあるんですよ) 結論から言うと、単一scriptタグならappendChild、複雑なタグならdocument.write + iframeです。 scriptタグ このページにたどり着いた読者には説明不要かと思いますが・・・ scriptタグをHTMLファイル上に記述し、ブラウザに読み込ませると、そのscriptが起動します。例えばこんな感じで。 <html> <head> <script> alert(1); <
このblogは2015/6現在、Wordpressで書いています。 画像表示はWordpressのメディア機能を使っています。この機能を使うとWordpressが動いてるサーバ内のwp-contents/uploadsディレクトリ内に画像を保存し、その画像を記事内表示できるようになります。 今回はこの画像をサーバ内ではなく、AWS S3に保存しようという記事です。後半は移行作業の話が出てくるので少し玄人向け(SQLへの理解が必要)です。 S3へ保存する理由 多分ほとんどの場合、S3へ保存しないでも良いと思います。普通にサーバ内保存で事足ります。ただ、以下のようなケースでは必要になってくるかと思います。 Wordpressが動くサーバを複数台で構成(+LB)していて、どれか1台にだけ画像ファイルが保存されると困るケース Wordpressをdocker containerとして動かし、Imm
こんにちは、@s_tsukaです。 今回はAmazon API Gateway各種機能、使い方、Lambda連携もろもろを学んで行きます。 Amazon API Gatewayとは AWSのサービスの一つでその名の通りAPIのGatewayです。通常であれば何らかのFWや言語を使ってAPIを開発すると思います。例えばNode、Spring3、Play2、Spray、Go、Java、Scala、etc。これらにキャッシュやルーティングを変えるためにApacheやNginxの皮を被せることがあるかと思いますが、この皮の超強力なものがAPI Gatewayだと思ってもらえれば良いです。 機能の概要については公式のTOPページが参考になると思います。 https://aws.amazon.com/jp/api-gateway/ Amazon Lambdaとは AWSのサービスの一つで、コードを実行
New Relicは以前はもっと安かったようなのですが、どうなんでしょう。Datadogとmackerelはほぼ同じのようですね。 実は最大メトリクス数とか機能とか細かい違いは沢山あるんですが、mackerelもNew Relicも詳しく無いのでそこは省略します。 とりあえず使うDatadog(導入手順) Datadogは非常に簡単に使うことができます。 まずはここからsign inしてログインします。 https://app.datadoghq.com/account/login 次にIntegrations -> Agentページを開きます。 最後にDatadog agentを入れたい(監視したい)環境を選んで、指示通りのコマンドを叩くだけです。例えばMacマシンを監視する場合はこんな感じのコマンドが表示されているはずです。 DD_API_KEY=あなたのKEY bash -c "$(
こんにちは、@s_tsukaです。 今回はMySQLを使って開発をするときに、本番DB(ステージングDB)のデータをローカルDBへ持ってくる話です。(半)自動で行えるスクリプトも用意したので、良かったら使ってください。 概要 shell script用意する mysqldump使う 多分portforward必要でしょうし、それ使う スクリプト 概要で大体察しが付く人もいるかと思うので、あれこれ解説する前に早速スクリプトを貼っておきますね。 #!/bin/bash # Settings db_sync_id=${RANDOM} dump_file=dump_${db_sync_id}.sql db_src_host=instancename.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com db_src_port=3306 db_user=root d
自分の経験に基づいてOptionを扱う様々な方法を書いてみます。 Scala初心者の人は参考になるかも?(筆者は執筆時点でScala歴半年程度です。なので初心者向け) サンプルコードとして「str変数の中身または”なし”という文字列を画面上に出力する」ということを考えてみます。 ※一部のコードは”なし”という文字列は出力しません。 Level 0 「Optionの存在を知らない」 JavaプログラマがScalaを始めてすぐにやるかもしれません。ちなみに自分は見たことあります。初めてJavaコードをScalaに移植したときに書いたこともあります。 object Main extends App { val str = null if (str != null) { println(str) } else { println("なし") } } Level 1 「Optionの存在を知るが、ま
最近浮動小数点数演算に起因する調査を行う機会があったので、復習しました。 浮動小数点数(Javaで言うとfloatとかdouble)を使って演算するときは丸め誤差によって意図した値にならないことがあります。これが発生するケースや対策について書いてみました。 しっかり書こうと思ったけど、当然ながらこれについて書いている記事は他にも色々あるし、自分自身他のblogで書いたことがあったので、結構省略していきます。 ちなみに以下のサイトとか分かりやすくて良いですよ。 [Java] 小数点の計算をやるからといってすぐにfloatやdoubleを使ってはいけない 現象 package com.tsukaby.calc; public class App { public static void main(String[] args) { System.out.println(0.7 + 0.2 + 0
こんにちは、@s_tsukaです。 今回はWordPressをdocker containerとして構築して、Immutableにする話です。 もともとこのblogはとあるサーバ(VPS)上に普通にインストールして動かしていたのですが、サーバ移転することになって、折角だからdockerにしようとしたときの話です。 WordPressをdockerで動かす意味 別に普通に他のサーバ上にWordPressなりPHPなりMySQLなりをインストールして動かしても良いのですが、dockerでやっておけば、いつでもどこでも簡単に移行できるようになります。 とあるVPSだろうが、オンプレ(自宅)のサーバだろうが、Google、Amazonのインスタンス上だろうが、dockerさえインストールされていれば動かすことができます。 WordPressをdockerで構築する為に必要なもの 以下の物をDock
最近Webアプリケーションのフロントエンドの知識が足りていない!と思いJavaScriptを意識して触るようにしてきました。 基本的な文法や簡単なAPIは押さえたり、Angularでアプリ作ってみたりして、徐々に身に付いてきたかなーと思っています。ですが、未だに初心者の域を出ないかな・・・と。 そんな訳で優秀で信頼できる後輩に「何か良い本とか知らない?」と聞いてみたところGood Partsを教えてもらいました。 [tmkm-amazon]4873113911[/tmkm-amazon] 古い本なのでそこだけ微妙らしいですが、良い本みたいです。 この本、Good Partsと言うよりはBad Partsの方が合っている気がしています。なぜかというと、基本方針が「JavaScriptは良い機能もあるけど、悪い機能が多いので、悪い部分は使わないようにしよう!」というものだからです。 何はともあ
もうこれだけでBad smellしかしませんね。検索とか考えると頭が痛いです。重複考慮した更新や削除とかも同じくきついですね。 従属テーブル作って対応しましょう。 8. メタデータトリブル(メタデータ大増殖) 全く同じテーブルなのに年や月で分かれていたり、同じような列が連続しているやつです。 CREATE TABLE LOG_2013 ( ... ); CREATE TABLE LOG_2014 ( ... ); CREATE TABLE LOG_2015 ( ... ); データが多すぎるから分けた、というケースが多いと思います。古いデータは使わないし、かといってテーブル1つにするとクエリが遅くなるし、みたいな。 上記のようなケースならOKだし、実際そういう経験はありますが。LOG_2014テーブルの2014/12/31のデータが間違ってたので、UPDATEして2015年のデータにしよう
こんにちは@s_tsukaです。今回はSkinny-ORMについてです。最近Skinnyまわりを触っているのでまずはORMについてまとめてみます。 Skinny-ORMとは Skinny-ORMは単体利用可能なSkinny FrameworkのORM機能です。作者はScalikejdbcとSkinnyのownerでもある@seratch_jaさんです。 http://skinny-framework.org/documentation/orm.html Skinny-ORMはその名の通りORMなので、まあ要するにDBとのDaoとかMapperです。Scalikejdbcをラップして作られています。 Skinny-ORMは何が良いのか 人によって異なると思いますが、多分Skinny-ORMはJOINが簡単な点が最も良い点かと思います。 ScalikejdbcだとJOINしたい場合、以下のペー
Macにtd-agent(fluentd)をインストール(homebrewは2014/9現在、もう使えない) td-agent(fluentd)をMacにインストールしよう!と思ったとき、大半の人はhomebrewを使おうと思うのでは無いでしょうか。ですが、2014年9月現在、homebrewではインストールできません。 今回はhomebrew無しでtd-agentをインストールする方法についてです。ちなみにtd-agentはfluentd+Rubyのパッケージという感じの物です。fluentdのオールインワンパッケージ的な感じです。 homebrewではインストールできない 2014/9現在、homebrewではインストールできなくなっています。 ここ(http://d.hatena.ne.jp/katsyoshi/20130419/1366363964)などを見るとできそうに見えるので
ScalaのListとJavaのListの使い方とかについてのメモです。 scala.List scala.Listはイミュータブルです。Javaのようにaddしたりはできません。 addしたいのであれば以下のように再生成する必要があります。 package com.tsukaby.scala.sample object Main { def main(args: Array[String]) { var scalaList: List[Int] = List(1, 2, 3) scalaList = scalaList ::: List(4) for (value <- scalaList) { println(f"value=$value%d") } } } :::はリストを連結して新しいリストを返却します。 scala.collection.mutable.ListBuffer Ja
今回は認証のパスワードをハッシュ化する部分についての話です。 パスワードのハッシュ化をもしSHA256などのハッシュ関数でハッシュ化しているのであれば、できればBCryptに乗り換えた方が良いよ、というのが今回の話です。 詳細はここが参考になります。 ようするにSHAは高速を考えて作られたので、パスワードのハッシュ関数向きではない、と。高速に実行できてしまうとそれだけレインボーテーブルの作成が容易になる、ということですからセキュアじゃないですね。 ただ、それでもBCryptとかを使えばストレッチングがいらないよ、という訳ではないようです。あくまで従来通り考え方はハッシュ関数+ソルト+ストレッチングです。 ただ、BCryptの実装であるjBCryptを使うとかなり扱いが楽になるのではないかと思います。どのように楽になるか書いてきます。 jBCryptの使い方 Scalaでも使えますが、今回は
現在仕事でWebアプリを開発しております。アーキテクトを任せて頂けたので色々好きな技術を使って構築しています。 アプリをデプロイするためにDockerとDockerHubを使っているので、今日はこれらについて触れて行きます。 前提 業務アプリ 合計利用者300名 同時利用者10名 アーキテクチャ 自社のDC上でWebアプリ用仮想マシンが動いている 上記のマシン上でDockerが動いている 開発したアプリは自社のGitHub Enterpriseへcommit, push JenkinsのJobを走らせてGitHub Enterpriseからコードをclone, compile compileが成功したらJenkinsがdocker build, docker pushでDockerHubにバイナリをupload 好きなタイミングで別のJenkins Jobを動かしてdocker pull,
AngularJSには便利なフィルタという機能が存在します。特定のルールによって値をフォーマットしたり、絞り込んだりしてくれます。今日はそのフィルタの中でもfilterというフィルタ(filterフィルタ)の話をします。 filter一覧、まとめ AngularJSはデフォルトでいくつかのフィルタを持っています。 Filter components in ng filter, currency, numberなどいろいろありますが、currencyなんかわかりやすいと思います。与えた値に$をつけてくれるフィルタですね。 フィルタの説明は以下のサイトなんかが良いと思います。 AngularJS 地味だけど知っておきたい filter 機能 - Can I do web? 独自のフィルタを作るなら以下のサイトが参考になります。 AngularJSでカスタムfilterを書いてみよう - Ang
次のページ
このページを最初にブックマークしてみませんか?
『tsukaby blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く