chevron_left

メインカテゴリーを選択しなおす

cancel
arrow_drop_down
  • IntelliJ IDEA の右クリックから Atom でファイルを開けるようにする (ついでに Thunar からも)

    IntelliJ IDEA File > Setting > Appearance & Behavior > Menus and Toolbars に各ポップアップメニューの項目があるので、そこの任意の位置に External tools に登録 (後述) しておいた Atom を配置します。 External tools に登録 File > Setting > Tools > External Tools の [+] ボタンをクリックして登録を行います。コマンドラインから開く時と同じように設定すればそれで動きます。 ただ Open console のチェックをはずす、 Parameters…

  • Terminator (ターミナル拡張) のタイトル部を、ウィンドウごとに任意のものに変更する (bash)

    ターミナルを立ち上げまくっていると上のようなことになってどれがどれだかわからず大変につらい。 このタイトルはプロンプトの変更と同じく PS1 に食わすことで変更できます。プロンプトを生かしたままで変更しなければならないので ~/.bashrc などに関数を定義して一発で変更できるようにします。 set_title () { ORIG=$PS1 TITLE="\e]2;$*\a" PS1=${ORIG}${TITLE} } set_title EC2 Terminator ではフォーカスがあたっているターミナルのタイトルが表示されるので、分割しまくっている場合は Broadcast all など…

  • Amazon Linux で普通に yum install した Nginx の auth_request_module を有効にしたい

    現在の設定をそのままにコンパイルし直すという手を使いました。 nginx -V で現在の configure を得る 1 で得た configure に --with-http_auth_request_module を加える Nginx 同バージョンのソースを得る ./configure が通るまで足りないライブラリを追加する make && make install nginx -s reload $ sudo nginx -V # 略 $ wget https://nginx.org/download/nginx-1.10.3.tar.gz # 移動とか略 $ sudo yum inst…

  • Nginx で print デバッグ

    そもそもきちんとログに出してログを見ろという話ですが、 return を使えばどの変数になにが入っているかを簡易に確認できます。 server { listen 9998; location = /check-header { add_header Content-Type text/plain; # ステータスコードとボディ文字列 return 200 $http_user_uuid; } }

  • 特に夏だからというわけではないが体重を 10 kg 減らしたのでグラフ

    減りました。 2017/3/27 開始の本日までのグラフです。(記録がとんでる部分があるので日数は一致しない) test なぜ? 2017/3/27 に行った人間ドックの最後の説明で空腹時血糖値が境界を超えてアウトだったので「ヤバいマジ糖尿」という雰囲気のことを言われた。 (なお HbA1c は普通で、しかも後日普通の健康診断で普通に血液検査をしたところ、ちょっと高めではあるが境界にも達していない平常値だった。脅しすぎ医者 + ビビりすぎ私) どうやって? 食事を減らした 減らした後の食事はおおむね以下の通り 朝: 魚肉ソーセージ 4 本 朝から昼にかけて: サラダチキン 3 枚 夜: 100…

  • Rails の ActiveRecord での lock! の細かい話

    前プロジェクトでログを眺めていて気づきました。仕組みを考えれば確かにという感じだった。 class User < ApplicationRecord after_initialize -> { logger.info('Instantiate!') } end User.find(1).lock! # User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 # Instantiate! # User Load (0.3ms) SELECT `users`.* FROM `users` WHER…

  • 騒がしい社内で心穏やかに仕事するためのセット

    みなさん、静かな環境で心穏やかにお仕事されていますでしょうか? わたくし、前職は非常におしゃべり好きな人間がおおい職場で、さまざまな会話音声により集中力をそがれておりました。他人のくだらない音声ほど集中力をそぐものはないと思います。 そんなわたくしに心の平穏をもたらした 2 つの道具を紹介させていただきます。 ぶっちゃけた話、耳栓 イヤホンなどで大音量で音楽を流すという手もあるのですが、それはそれで音に集中力を持っていかれるので、やはりここは静寂を求めていきたいところです。 そこで、以下の 2 つを組みあわせることで、比較的安価にあなたの耳に静寂を取り戻すことができます。 イヤーマフ PELT…

  • 3.11

    あの震災から時間が経つうちに、身の回りで人間結構死んだな〜みたいな感慨があった。 (先週ぐらいに震災と人間が紐づく品が出てきたのだった)

  • Ruby on Rails + webpack-dev-server で Development.

    Rails で JavaScript が必要なプライベートプロジェクトでは、ながらく Npm + Watchify + Gulp + Rails を手動起動などしながらすすめていましたが、最近、意を決して Yarn + Webpack + Rails に変更しました。そこで、Rails と JavaScript の接合点も Railsway にのった設定に変えようと思いました。(今までは public/css を直接参照していた) ざっと検索したところ、webpack-dev-server 経由で JavaScript を参照する場合、あらたな helper を用意する方式しか見つけられなかっ…

  • 今年の洗濯回数は 8 回でした。

    一人暮らしももう 20 年に近くなりますが、洗濯機が家にあったことがありません。家に洗濯機がないので、コインランドリーを利用しています。利用料金は洗濯に 1,200 円、乾燥機に 700 円ほどです。 15kgの洗濯物も22kg対応の横ドラムで一発よ— おふくろさま (@o296sm) February 7, 2016 乾燥機は 25 kg対応の大型のものが 700 円で 56 分ほどまわります。本来はそこまでの容量のものを、そこまでの時間回す必要がないのですが、とにかくパリパリにするのが好きなのでまわします。 俺が洗濯機を買わないのは、適切に干すのが苦手で、なおかつ乾燥機でパリパリにするのが…

  • top コマンドで得られる結果をどう見ていけばいいのかわからないので、とりあえず視覚化した

    もともと一つの処理であるとか、一つのメソッドであるとかの処理時間には興味があって、測定などをしていました。ActiveRecord を使うにあたって発行クエリを抑えることにより、本当に早くなるのか確かめたりするのがすきです。 全体的なパフォーマンスを測定し、改善に繋げる知識がない そういう局所的なものは何度もまわして処理時間を取って、という方法でなんとなく測定をできるのですが、Web アプリケーション全体の負荷の把握方法や、運用においてのスローダウンの原因究明などに使える情報などの取得については、ほとんど知識がありません。 ぐぐることにより、各種コマンドで負荷を数値化できることはすぐにわかりま…

  • Go 言語でつくったもののメモリとかをなんとなく見れるようにする

    pprof を用いた詳細な情報を得る方法はさんざん紹介されており、しかしその詳細の情報のどこを見ればいいのかわからないので、とにかく簡単に見れるような施策を打ってみました。 これは社の Slack で動いてるボットの一つの強制停止画面ですが、ボットは継続して動いているので、メモリリークなどが気になるところです。ということで、グラフかつ、前後の増減がスッと把握できるようにしました。(これは短期すぎて役に立たなさそうですが) グラフの描画は雑に C3.js で行っており雑な JavaScript なので特にあらためて何もないのですが、グラフを描画する用のデータ配列に関しては、今後もちゃんと把握して…

  • Go 言語で struct を url.Values に展開した

    現在勉強用に作っているボットでは、Slack の API を使います。勉強用なので、ライブラリを使わず、独自に実装しています。API ではエンドポイント毎にさまざまな要求パラメーターがあって、その引数を自由な形式にすると間違いのもとになるので、専用の struct を用意して間違いが起こらないようにしています。 func (a *API) ChatPostMessages(p ChatPostMessageParameters) (ChatPostMessagesResponse, error) { var r ChatPostMessagesResponse err := a.postAnd…

  • Go 言語でつくったボットを GitHub -> CircleCI -> Bluemix と自動デプロイできるようにした

    Golang でのボット作成では、1 個目は自 PC で動かすことしか考えていませんでしたが、2 個目はきちんとどこかにデプロイすることを目標に作成していましたので、ついでに自動でやれるようにしました。 Heroku では 24 時間稼働のボット用途には不向きだと思われたので、IBM Bluemix にデプロイ先に選びました。Bluemix もデフォルトで Golang をサポートしていますが、ビルトインの buildpack だと Godeps のバージョンをきちんと読んでくれなかったり (これは気のせいかもしれない) したのでgithub にあるものを利用したりして色々とあれでしたが、うま…

  • Slack で動いてるボットの処理が長い場合、フィードバックとしてインジケーターを出すということをやった

    いま golang の練習用に作成しているボットには、URL をわたすと、そのサイトのキャプチャを撮影する機能があります。諸事情からボットのいるマシンとは別の場所、Heroku に設置していますが、起動が遅かったり、キャプチャ自体が遅かったりするので、ちゃんとやっていってるのかわかりません。そこで、ローディングインジケーターを出すことにしました。 できあがり 「こはる」とは社の Slack にいるボットですが、対抗して golang でつくっているのが「ごはる」です。かわいいですね。 アイコンの元ネタには以下を使わせてもらっております。 github.com インジケーター まずインジケーター…

  • Ruby 外から Web アクセスする何か (Capybara とか、cli とか) を RSpec でテストするときのアクセス先をモックする

    mmmpa.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpa.net のテストをこの方法で行いました。 本編 たとえば、Capybara は各種ブラウザを介するアクセスのため、webmock が効かず、別の gem が必要なのは有名です。 https://github.com/oesmith/puffing-billy Capybara でテストする際はこれでいいのですが、Capybara をテストする場合には不便かもしれませんね。 また、バッククォートや Open3 を用いて呼びだすような cli、たとえば sie…

  • siege をラップして多少細かい情報をまとめる gem 書いた。

    github.com Usage たとえば Rails 内でこうやる。 re = SiegeSiege.run( time: 20, concurrent: 4, user_agent: false, urls: [ "http://localhost:3002#{students_path}", "http://localhost:3002#{students_path} POST name=abc", SiegeSiege::URL.new("http://localhost:3002#{students_path}", :post, {name: 'abc'}), ] + Student…

  • Capybara で Chromedriver をつかってモバイルモードでテストする時の Capybara.register_driver とか

    だいたいのサイトは User Agent で切り替えてると思うので、わざわざモバイルモードでテストが必要なのかしらとか思わないでもない (ダブルタップとか、スワイプをテストする?)、が一応メモ。 Capybara に Driver として登録 # chromedriver configuration # chrome の起動オプションが使える http://peter.sh/experiments/chromium-command-line-switches/ # デフォルトではサブのディスプレイに表示してしまうので、ずらしている default_args = %w( --window-pos…

  • RSpec とか Capybara の Example 内で使いたいメソッドをクラス単位でまとめて使いやすくする gem を書いた。

    これ github.com 先週の gem は 80 行ぐらいだったんですが、今回は 40 行です。 なぜ 入社してからこっち、ずっと Vue.js で SPA 制作という業務に従事していましたが、UI 系の宿命で (一部しか) テストがない。 そんななかで、わりと分岐の多い (難しくはない) 実装をすることになって、これは手作業では (変更の都度に) 確認しきれんなということで Capybara に出張ってもらっていました。テスト維持コスト問題というものがあるので、業務リポジトリには入っていない、ローカルでのみ存在する Capybara です。かわいいよ。 そんななかで find や all…

  • 最近 SQL にはまっているので、ついでに Rails というか ActiveRecord で発行された SQL query をカウントする gem を書いた。

    Installation gem 'a_r_q_logger' github.com せつめい ActiveRecord::Base サブクラスのインスタンス生成をできるだけ抑えれば、それだけ処理時間が抑えられるのは自明とされています。 そこで、今は、できるだけ少ない queries に抑えることを目的として SQL の練習をしていますので、すぐわかるようにしました。 その練習を進めていく上で、その 1 query の処理時間が気になっており、SQL のみの処理時間もとれるようにしましたというか、出発点はこっちです。 pry(main)> ARQLogger.log { 3.times { T…

  • npm run scripts で current directory を参照したい。

    環境変数を使います。 $PWD ではダメ npm run foo は常に基準となるディレクトリで実行されるので、たとえば以下の npm run here は、配下のディレクトリに潜っても同じ結果を返します。 "scripts": { "here": "echo $PWD" } これは current directory を考慮せずに node_modules を一定の条件で使えるので、とても便利です。 なので先に設定しておく 便利ですが、 current directory が欲しい場合もありますので、別個に環境変数を設定し、それを参照します。 "scripts": { "here": "ec…

  • 就職できました。

    ところで先日カピバラ神に詣でた時の写真です。これもうあれでしょ、完全に俺のための俺視線。 pic.twitter.com/kDkHs39mlH— おふくろさま (@o296sm) May 18, 2016 前いったときおもくそケツむけてお食事中だったけど時期が悪かったんや。いまこそ就職活動をはじめる時期だという啓示かなんかだろこれわ。— おふくろさま (@o296sm) May 18, 2016 1年間の無職を終えました。 HeartRails ハートレイルズ ザ・ウェブサービス・カンパニー よろしくおねがいします。

  • Capybaraのウェイト時間で足りない場合、さらに待たせる。

    Capybaraはfindなどの要素検索メソッドで、見つかるまである程度の時間待ってくれます。 時間が足りない場合は Capybara.default_max_wait_time = 30 などとすることで時間を増やせます。 all('hoge')[0].clickだとおなじみのundefined method `click' for nil:NilClassで終わる 終わりますので、終わらせないために適当にrescueします。 def re_find(wait = 0.5, count = 20, &block) yield rescue raise if count == 0 sleep …

  • Access-Control-Allow-Originが設定されてないWeb APIを叩くために中継サーバー書いた。

    大げさなタイトルみがありますがただのRailsです。 github.com うすうす実装なのでさがせばあるんでしょうけど、人が書いたもの使いたくない場合ってあるじゃないですか。 起動 $ TARGET=http://you-want-to-ajax.server.com ALLOW=http://your-local-js.server.com rails s つかう あとはhttp://your-local-js.server.comでうごくJavaScriptからhttp://localhost:3000のRailsを叩くだけ。 Ajax側の実装でエンドポイントの根本ドメイン変えられるよう…

  • vue-routerのroutesを全部出すやつ

    だいたい見れる。 log(dig(router)) function digState (state, path = []) { state.nextStates.forEach((nextState) => { if (nextState.handlers) { nextState.handlers.forEach((handler) => path.push(handler)) } if (nextState.charSpec.validChars) { digState(nextState, path) } }) return path } function digNames (name…

  • ActiveAdmin辺りでCircular dependency detected while autoloading constant Fooが出る場合の措置。

    Rails 4.2.7、ActiveAdmin 1.0.0.pre4で発生しました。 普通にやってる分には出ないんですけど、下の記事みたいに外からRails.application.require_environment!すると、models関連でCircular dependency detected while autoloading constant Fooが出ます。 mmmpa.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpa.net 措置 読み込み順序が問題なので、autoload_pathsの先頭にmod…

  • ベーシック認証が必要なサイトにアクセスするテストで、ダイアログをシカトするためにNginxでProxyする。

    Phantomjsじゃ動いてくれないJavaScriptライブラリがありまして(よくある)、Selenium + Firefoxでスクリーンショットおじさんになっています。 nginx.conf 実際はRubyではないのでこのようなコードではないんですけど、概念的にこんな感じです。 server { listen 8080; server_name localhost; location / { proxy_set_header Authorization "Basic #{Base64.encode64 'id:password'}"; proxy_pass https://my-secre…

  • Rails開発でリポジトリには入れたくないんだけどローカルではやっておきたいテストがある場合の取りあつかい

    自明だったり、すごく重かったり、細かすぎるテストたちがいます。 重いテストは短期的にも長期的にもコストになり、細かすぎるテストは実装変更時のコストが必要以上に高く、よくありません。 しかし、たまにやっときたいんですよというテストがありますので、本体に影響がないようにやっていきます。 Railsのディレクトリの外にもう一層つくる 以下のような構成になりました。 - /my_test - /.git - /rails_application # 本体 - /seed # テスト用の - /spec # 自分専用テスト - /models - rails_helper.rb # 自分専用のテストのr…

  • Authlogicに関するメモ

    認証機能再発明するべからずは有名な鉄則ですが、まるで知らないままというのもマズイので実装を読むことでお茶を濁していきたい。 saltやSCryptの運用、persistence_tokenの更新などで比較的安全にいけるのでは。 パスワード salt Authlogic::Random.friendly_token def friendly_token # use base64url as defined by RFC4648 SecureRandom.base64(15).tr('+/=', '').strip.delete("\n") end 暗号化 authlogic/lib/authlo…

  • AWS Lambdaで使う関数をローカルでテストするサーバーを建てる。

    AWS Lambda + AWS Api Gateway + AWS DynamoDBでなにかをつくることにはまっています。 AWS Lambdaで使う関数自体はmochaなどでテストできますが、実際にブラウザから叩くテストをローカルでしたいと思いました。 そこでNode.jsで簡単なサーバーを建てます。 まず、AWS Lambdaはこのような関数です "use strict"; const Workbook = require('./src/workbook').Workbook; const Marker = require('./src/marker').Marker; exports.…

arrow_drop_down

ブログリーダー」を活用して、mmmpaさんをフォローしませんか?

ハンドル名
mmmpaさん
ブログタイトル
ンンンパ
フォロー
ンンンパ

にほんブログ村 カテゴリー一覧

商用