タグ

ブックマーク / masutaka.net (14)

  • golang の並列処理を Ruby と比較しながら学ぶ

    一ヶ月ほど前に社内のインフラ共有会でタイトルの話をしました。記録の ために記事を書いておきます。 Gist に置いてある ので、コードは git clone で取得可能です。 $ git clone https://gist.github.com/c0a4234a5264c89655c40adcf7c27cb2.git Ruby# 例えば Ruby で 30 個の処理をするコードがあったとします。こんな素朴 なコードです。それぞれ 3 秒かかる処理が 30 あるので、とても遅いです。 Thread を使って 5 並列にしました。明らかに速くなりました。 ついでにそれぞれの結果(というほどのものではありませんが)を results に代入し、最後にまとめて表示しました。 results は共有リソースになるので、Thread::Mutex#synchronize でロッ クをかけて安全に書き

  • CircleCI 2.0 をローカルで実行できる circleci コマンドとは何者か

    先日の [2017-04-13-1] で気になったので調べてみました。 初めに結論から。 circleci コマンド(シェルスクリプト。macOS 等で実行可能) └ docker run circleci/picard └ /usr/bin/circleci (https://github.com/circleci/build-agent ) ・circleci コマンドは build-agent というコマンドを Dockerize した シェルスクリプト。 ・build-agent は golang 製のツールで、/usr/bin/circleci としてコン テナ内に存在する。おそらく private repository https://github.com/circleci/build-agent で開発されている。 ・Docker Image は https://hub.do

  • ローカル環境を出来るだけ Dockerize した

    ローカルに nginxmysql が起動していたり、gem install のためだけ に cmake や icu4c を brew install するのは嫌になったので、三連休で 出来るだけ Dockerize しました。仕事の素振りも兼ねています。 nginx# このブログの記事を書く時のプレビューや、雑多な html ファイルの表示 に使っています。 今まで $ brew install nginx して、nginx.conf も別途管理していまし たが、以下のような雑な docker-compose.yml で、雑にマウントするだけ で良くなりました。 version: '3' services: nginx: image: nginx:alpine ports: - 8080:80 volumes: - /Users/masutaka/Sites:/usr/share/n

  • 第18回Elasticsearch勉強会に参加してきた #elasticsearchjp

    第18回elasticsearch勉強会|Meetup 前々回 [2016-06-28-1] に続いて、2 回目の参加です。今回は先週社内勉 強会で発表したばかりだったので、熱量高めでした。いや、むしろ燃え尽 きていたかも…。 自分のブログに Elasticsearch + Vue.js で検索機能を付けたという発表をした|feedforce Engineers’ blog ※ このブログ右上の検索ボックスのお話です What’s new Elastic Stack 5.2# Elastic 社の Jun Ohtani さん Elasticsearch 5.1 ~ Cancel long-running “Search” task by the task management API Elasticsearch 5.2 ~ Index and search numeric and data

  • yaml_vault が AWS での Rails 環境変数つらい問題を解決したと思う

    ※ 弊社 feedforce で毎週行っている、インフラ共有会を元にした記事で す。AWSRails を使っている方を想定していますが、数人規模のチー ムを意識した内容になっています。 こちらの記事で yaml_vault を知ったので、実際に試してみました。 yaml_vault+KMSでRailsアプリのconfig/secrets.ymlを暗号化してgitにコミットして管理する - Qiita 環境変数つらい# SaaS の API Key などの秘匿情報をコードに埋め込まないために、Rails で dotenv を使っている方も多いかと思います。 しかし、README.md にあるように 作者の @bkeepers さんは production での利用は奨励していません。 dotenv was originally created to load configuration

  • ElastiCache for Redis のスケールアップメモ

    先週 AWS ElastiCache for Redis を cache.m3.medium から cache.m4.large にスケールアップしました。今後のためにメモを残して おきます。 背景# cache.m3.medium を Multi-AZ + Replica 1 台構成で運用していた。主な 用途は Rails4 の Session Store サーバとして。 BytesUsedForCache が cache.m3.medium のメモリ 2.78 GiB を超え、 Evictions が発生し始めたため、cache.m4.large にスケールアップした。 タイムライン# メンテナンスウィンドウをセットした AM 3:00 になるとすぐに、当該ク ラスターの Status が modifying になった。 AM 3:07 に Rails から接続できなくなり、Prima

  • 『みんなのGo言語』を読んだ

    [2015-02-11-1] で Go を学んだ私ですが、その後あまり使っていなかったので、情報をアップデートできて良かったです。 特に第1章の開発環境のあたり。goimports の import 自動挿入は良いですね。早速 go get して init.el に以下を設定しました(go-mode.el は導入済み)。 第6章のテストも即戦力になりそうです。 以下は読んでメモった箇所を中心にしたまとめです。 全体を通して感じたこと# Go の文法が多少分かる方向けのだと思います。P.19 にも書いてある「A Tour of Go 」などをやった後に読むと効果的だと思います。 ただ、世間でオススメされている「A Tour of Go」ですが、私はチュートリアルとしては難しいと思います。半分くらいから Go よりアルゴリズムのチュートリアルっぽくなってくるので。 個人的には [2015-0

  • 『オブジェクト指向設計実践ガイド』を読んだ

    当に良いでした。読んで良かった。初心者を中心に中級者にも刺さる だと思います。輪読などして、チームで読むとオブジェクト指向設計の そもそもの話をしなくて良さそうです。 難しい話が易しく説明されており「あ、そうだったのか」と思うことが度々 でした。ボリュームも全9章とコンパクトで、1日1章読むのに丁度よかっ たです。 読んでメモった箇所を中心にまとめていきます。 第2章 単一責任のクラスを設計する# インスタンス変数へのアクセス方法を誤解していました。 P46 変数はそれらを定義しているクラスからでさえも隠蔽しましょう 今まで他のクラスから隠蔽する時は、直接 @hoge などにアクセスしてい ましたが、中からも attr_reader などで隠蔽する必要があるそうです。 「データではなく、振る舞いに依存する」ためだそうです。 メモ化などでこうした手法は使っていたけど、単純な参照も隠蔽す

  • Herokuにberkshelf-apiサーバを立ててみた

    前回[2015-01-09-1] はBerksfileにGitリポジトリを直接書きましたが、レ シピの依存関係の解決ができませんでした。 berkshelf-apiサーバを立てるとその問題が解消されるようなので、 Herokuにberkshelf-apiサーバを立てて検証してみました。 適当なOrganizationを作り $ berks cookbook git . などで作ったcookbookを用意します。gitのtagを振る必要がある点は注意です。 https://github.com/doramichan/git/releases https://github.com/doramichan/hub/releases berksコマンドは $ gem install berkshelf などでインストールできます。 hubレシピはgitレシピに依存させた ため、Berksfileに

  • nginxのアクセスログをFluentd経由でelasticsearchとBigQueryに送り始めた

    masutaka.netnginxアクセスログはmongodbとGrowthForecastに送ってます。 [2013-07-14-1] nginxのアクセスログをFluentd経由でMongoDBに保存してみた [2013-08-15-1] nginxのアクセスログをFluentd経由でGrowthForecastのグラフにしてみた 今回、elasticsearchとBigQueryにも送り始めました。個人での必要性は 全くなく、単にelasticsearchとBigQueryを知っておきたかったからです。 elasticsearch http://kibana.masutaka.net/ からkibana 経由で検索出来るようにしてい ます(要Basic認証)。kibanaは評判が良かったので期待してたんですが、 使いづらいです。学習が必要そうです。。 インストールの概要# elas

  • Wercker + Vagrant + AWS + serverspecでChefのレシピをCIする

    [2014-01-09-1] からmasutaka.netのCIを開始したが、残念ながら masutaka.netに直接serverspecする、なんちゃってCIだった。 masutaka.netにcookしてからPRを出して、WerckerにCIさせていた。 WerckerとAWSを連携させて、テストのたびにサーバをまっさらな状態から 作り、終わったら破棄することが可能になったので、ここに記録しておく。 去年くらいに話題になったこの辺の話。 Vagrant + Chef Solo + serverspec + Jenkins でサーバー構築を CI - naoyaのはてなダイアリー naoya/circleci-serverspec なんで今までやらなかったかというと、cookが一発で通らないレシピになっ ていたから。。気づいてはいたんだけど、番サーバのテストが通りさえ すればよかった

    Wercker + Vagrant + AWS + serverspecでChefのレシピをCIする
  • AWS Summit Tokyo 2014に行ってきた #awssummit

    仕事の都合で、2日目だけ行ってきました。天気は曇りでジメジメ。品川駅からほど近い場所でしたが、歩くには暑い日でした。 全てのセッションの動画や資料はこちらをどうぞ。 AWS Summit Tokyo 2014 開催レポート|AWS オープニング DJ田中氏による派手なオープニング。 Day2 基調講演 ~Deep Dive to Enterprise~ アマゾン データ サービス ジャパンの社長がAWSを紹介。内容としては、アジリティ(機敏性)重要なのでAWS使うと捗るとかの話。 ガリバー、積水化学、ローソンの講演もありました。大企業もどんどんAWSに移行しています。 ニュース - ローソンや日通がAWSへ全面移行、AWS Summitで明らかに:ITpro あと、堀内氏からAWSのマネジメントコンソールが日語化されるとの発表もありました。うーん、使うのかな? 静岡県のGISはなぜAWS

  • 『チーム開発実践入門』はツライ環境で開発している方にオススメ

    第2章のケーススタディにある、以下の様なツライ環境で開発している方にお すすめの一冊です。 ・毎日バグ対応に追われている ・検証用環境がない ・適切なバージョン管理システムを使っていない。もしくはバージョン管理システムを適切に使っていない ・リファクタリングできない、もしくは奨励されていない ・リリース手順が複雑 チームで開発するために必要なノウハウが広く浅く書かれています。手始めに このを読んでから『GitHub実践入門 』や『入門ChefSolo 』に進むと良いので はないでしょうか。 幸いにも私はそれほど当てはまらない職場で働いている(いた)ため、ほぼ既知 の内容でしたが、第6章のデプロイの自動化や第7章のリグレッションテスト は思考を再整理する上で有用でした。 個人的にはSeleniumはいきなり導入するものではなく、Capybaraでカバーでき ないブラウザ依存のテストをするく

  • serverspecでファイルやディレクトリのテストの重複を取り除く

    serverspecでは、このようなテストを書くことが多いと思います。 describe file '/var/www/vhosts' do it { should be_directory } it { should be_owned_by 'root' } it { should be_grouped_into 'www-data' } it { should be_mode 775 } end describe file '/home/masutaka/.ssh/authorized_keys' do it { should be_file } it { should be_owned_by 'masutaka' } it { should be_grouped_into 'masutaka' } it { should be_mode 600 } end テストはDRYにしすぎるべ

  • 1