サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
mgi.hatenablog.com
ruby で言うと url = "https://www.google.co.jp/" $1 if url =~ /https:\/\/(.*)\// #=> "www.google.co.jp" みたいなことをしたい。 elisp だと以下のように書く。 (setq url "https://www.google.co.jp/") (string-match "https:\\/\\/\\(.*\\)\\/" url) (match-string 1 url) #=> "www.google.co.jp" string-match 第一引数に正規表現、第二引数にチェックしたい文字列 マッチに失敗したら nil が返る match-string 第一引数にマッチした箇所、第二引数に文字列 最後にマッチを行った部分の抽出を行う。 例の中の match-string の引数「1」は $1 と同
イントロ Headless Chrome で system test を書いていたら、猛烈にハマったので記録を残しておく。 ハマりすぎて Capybara のコードを殆ど読んでしまったので、 読んだ内容を抜粋してまとめてみました。 若干冗長なのはお許し下さい。 環境 rails (5.1.4) capybara (2.17.0) site_prism (2.9) やりたいこと Rails 5.1.4 で system test を使い、spec を書きたい 折角なので Headless Chrome を使いたい 諸事情で PC 用とスマホ用で画面が違うので、それぞれテストしたい PC/スマホ判定は、 UserAgent で行う イメージとしては、以下のような感じでテストを書いている RSpec.describe 'Inquiries', type: :system do describe
イントロ 気が向いたので Google Chrome Extension を作成してみたくなった。 そこで最低限 webpack を使って、開発環境を整備できる環境を作ってみた。 色々調べてみて、一先ずこんなところに落ち着いた、というメモを残します。 似たようなのあるやろ はい。あります。 HaNdTriX/generator-chrome-extension-kickstart samuelsimoes/chrome-extension-webpack-boilerplate jhen0409/react-chrome-extension-boilerplate EmailThis/extension-boilerplate 方針 この記事では webpack を使って Google Chrome Extension を作り始められるところをまとめている。 というのも、既存のを参考にしな
イントロ 小さいプロジェクトで capistrano を使っていると、最初は問題ないものの、気づいたらサービスが成長してサーバーが増えてきて、デプロイに時間がかかってくる、という話はよくある(?)と思う。 デプロイに時間がかかると色々とストレスで、所謂 pull 型 deploy を検討したくなってくる。 今の pull 型 deploy ってどんなものがあるのだろう、という疑問から色々調べてみて、最終的には capistrano-net_storage を採用することにした。 capistrano-net_storage を使ってみて、 pull 型 deploy の恩恵を受けられている 移行も問題なく行われた 数ヶ月運用した限りでは、大きな問題は出てない ということで、ここまでの知見をまとめてみた。 前提 小規模 ~ 中規模なサービスです 色々と古臭い事情により、Docker 化までた
イントロ ちょっと昔に 「みんなのGo言語」が良かったので、自分のためだけのCLIツールを作ってみた - えいのうにっき を読んで、なんとなく何か作りたい気分になっていた。 Go 言語の知識が皆無の状態から 自作 CLI 作ったので、その時のメモをまとめてみました。 効率が良いとは思いませんが、こういう学習パスを通ればものは作れるぞ、という一例として参考になれば。 まず最初に読む Go 言語で CLI 作るときの知見 「Go」 で「CLI」というと、過去に良い記事があったような記憶があったので、 探し出して、読み直してみた。 どちらもすごい良い記事で、更に気分が高まる。 Go言語によるCLIツール開発とUNIX哲学について - ゆううきブログ コマンドラインツールを作るときに参考にしている資料 | SOTA package を探す Go で CLI 支援パッケージ絶対あるやろ、と思ったらや
イントロ お仕事用 Mac が Mac book pro に変わってしまった。 環境構築をやるのも久々だったのだけれども、dotfiles のボリュームが増えたのと、実はコード化出来ていない部分が多かったりして、かなり面倒だった。 ちゃんともう一度やり直そう、と思って選んだのが MItamae ansible は活用例が多いっぽいけど、yaml だと表現力が気になる(食わず嫌い) Itamae は良さそうだけど、gem をインストールすることで、環境汚すのはちょっと嫌だ。ruby に依存するし。 となると chef も同様 puppet は思った以上にデカかった boxen はへんじをしない。ただのしかばねのようだ go で環境構築したら、Mac 以外の環境構築も楽になるのでは説を思いつく itamae-go を発見 そういえば mruby の Itamae ってなかったっけ Itamae
イントロ 職業柄、自分のフィーリングとマッチしているというのもあるのだと思うけど、esa.io を一年運用していて全く困らないし、本当に助かってる。 しかし一点だけ、esa.io というより、OSX の esa.io クライアントに不満があった。 それは kotori というクライアントを使っていたのだけど、「リンクをクリックするとクライアント内で画面遷移し、二度と戻れない」という凶悪な仕様だ。 kotori で書いた記事の中でリンクをクリックするの図はこちらです。 これが超辛い。 esa.io では Qiita みたいなリアルタイムプレビュー機能がついていて、右側で markdown の変換結果が見れる。 ところが記事書いている途中にうっかりリンクをクリックしたらもうゲームオーバーで、編集画面には二度と戻れない。 じゃあどうするかというと kotori を強制終了してやり直すしかない。
イントロ 最近 AWS Lamdba を仕事で触っています。 serverless やら Apex なり色々あるわけですが、沢山ありすぎてよくわかりません。 今までは Apex の手軽さに甘えていましたが、そろそろ serverless が本気を出してきたという噂を聞き、serverless を使い始めています。 どうせ serverless を使うなら、もう全部使い倒してやろうということで、babel も意識高く使っていきたいわけです。 この記事では serverless + babel を使うところまでをまとめました。 環境 serverless@1.1.0 serverless-webpack@1.0.0-rc.2 webpack@1.13.3 serverless まずは雛形作成 # template 指定は必須 # `sls` は `serverless` コマンドの alias
イントロ 例外処理を書くことはよくやっているのだけれど、その時の主軸となる考え方について、今までなんとなくで行っていた部分が多かった。 毎回考えるポイントは例えば以下のような疑問。 どこのレイヤーで、どこまで例外処理を行えばよいのだろうか? どの例外をキャッチし、どの例外を伝搬させればよいだろうか? 前提条件をチェックし、失敗した場合、例外を出したほうがよいか、nil, false を返すほうがよいか? 例外をどういう単位でラップさせるのが良いだろうか? 例外をチェインし過ぎると却って煩雑になる気がする。どうすれば良いのだろうか。 しかし、この辺りの話って、API の設計だったり、仕様の影響もあるので、都度対応が異なってしまうもの。 したがって抽象化して理解することが難しく感じた。 とてもよく使ってるし、とても大事な事なことなのに。 そんな今更な事で悩んでいた時に、Effective Ja
イントロ rails5 の主要機能は色々と知られている通りだけど、業務に投入するとなると、やっぱり互換性だったり、細かいコードの違いが気になるもの。 今回 authlogic を使ったログイン機能を雑に作ったので、その限られた狭い範囲であるものの、ハマったところや違いをまとめてみた。 なんで authlogic ? 昔業務で使ってたから。そしてまた使うかもしれない。 なお devise は初心者の頃使って見事に爆死し、それ以降使ってない。 そこそこ古く、歴史ある gem rails5 でも使えるかどうか確かめたかった binarylogic/authlogic_example は 7 年前の化石となっている。 シンプルな機能だけを提供してくれている だから好き。 (ただし、中身はかなり癖のある実装) 昔のおさらい。復習を兼ねて。 環境 rails (5.0.0.rc2) authlogic
イントロ webpack dev server 見ればだいたい書いてある。 webpack は少し触らないと忘れてしまうので、メモしておく。 それと何故か webpack の公式 Document は読みづらい(私だけ?)というのも理由の一つ。 webpack-dev-server って? 開発用の web サーバー。Express で作られてる。 おおまかに2つのことができる Hot Module Replacement module を変更したら変更を検知して読み込み直す Automatic Refresh react とかで、component を変更したら、自動で reload する これだけできれば、わざわざ変更のたびにサーバーを再起動しなおさなくて済むので、とりあえずの開発には困らなくなる。 導入 まずは npm install $ npm i --save-dev webpa
イントロ 最近、職場の後輩に将棋で負けたことをきっかけに、将棋がマイブーム。 apery って? 将棋プログラムの一種。2014 年の世界大会で優勝したとかなんとか。 一部界隈では、あの ponanza 先生をも凌ぐとかなんとか言われている?らしく、とにかくすごく強いソフト。 Apery - Wikipedia で、そんな世界大会で優勝した将棋エンジンが github 公開されているのを知ったので、compile してみました。 HiraokaTakuya/apery そのままやると... すさまじい警告が出て、失敗する $ make 24 warnings generated. g++ -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fopenmp -march=native -o ../obj/common.o
イントロ VPC 周りの知識が曖昧なままここまで来てしまったので、整理する。 なんとなく知っていた用語や単語について、一般的な概要、及び AWS ではどういう特徴をもっているか、を大雑把にまとめたもの。 VPC 概要 Virtual Private Cloud の略。Vrtial Private Cloud とは、クラウド環境に構築された仮想的なプライベートネットワークのこと。 VPC 自体が 1 つの IP アドレスを持っていて、VPC は沢山の private ip を持っている。 そんなインターネット上のでっかい領域を指す。 AWSでは VPC は CIDR = x.x.x.x/16 ~ x.x.x.x/28 の間で作成可能 デフォルトの VPC というものが存在する CIDR は一度作成したら変更不可 後からレンジを変えられないので注意 VPC 削除のタイミングで、関連のAWS リ
現象 babelify 7.0.2 browserify 12.0.1 react 0.14.1 var React = require('react'); var Container = React.createClass({ render: function() { <div>test</div> } }); React.render( <Container />, document.getElementById('container') ); % browserify -t babelify src/app.jsx -o build/bundle.js SyntaxError: /Users/horowitz/dev/poochie/src/app.jsx: Unexpected token (9:2) 7 | 8 | React.render( > 9 | <Container /
イントロ 例えばAPI サーバーを作るときに「この URL にアクセスする時は、常に json でアクセスしてほしい」みたいな事を実現したい。 それを実現する具体的な方法としては namespace :api, format: 'json' と routes を書けばいいと思ってました。 (デフォルトの format が json になるので) ただ それ以外の format を渡した時にどう動くか 似たような事ができる実装とどう違うのか がよくわかってなかったので、その時にした実験をもう一度やってみたメモ。 パターン1 class Api::AccountsController < ApplicationController def index @accounts = Account.all respond_to do |format| format.html { render } fo
イントロ collectiveidea/delayed_job なんとなく使ってきて、なんとなくわかってるつもりの delayed_job について、改めてまとめてみたもの。 休日暇だったのでソースコード読んでみたり、step 実行したりして、何処に何が書いてあるかをざっくりとまとめたものです。 環境 rails (4.2.1) delayed_job (4.0.6) delayed_job_active_record (4.0.3) daemons (1.2.3) 導入 Gemfile gem "delayed_job_active_record" ActiveJob ActiveJob のバックエンドとして、delayed_job を指定する config.active_job.queue_adapter = :delayed_job command rails generate de
イントロ みんな大好き pry の話 何回も binding.pry が呼ばれる環境下で、毎回 exit を入力するのめんどいよね、という話。 サンプル class Test def aaa binding.pry 'aaa' end end describe '#aaa' do it '1' do expect(test.new.aaa).to eq('1') end it '2' do expect(test.new.aaa).to eq('2') end end この場合 binding.pry は 2 回、処理を停止する。 4: def aaa => 5: binding.pry 6: 'aaa' 7: end exit 叩く。 4: def aaa => 5: binding.pry 6: 'aaa' 7: end もう一回 exit 叩く。 あるあるですね。 こういう時、一回で
イントロ rails のモデルは自動で id というカラムを作ってくれますが、これは常に INT 型。 BIGINT 型にしようとしたら、結構ハマったのでメモする。 使っている database はmysql です。 (postgresql だとこの罠は回避できるのだろうか?) tl;dr 普通に頑張ると... db:migrate と db:setup の実行結果が異なる migration ファイルの内容が、schema.rb に(一部)反映されないため db:migrate と db:setup の実行結果が異なると、 db:rollback ができなくなるので、辛くなりそう。 db:migrate か db:setup どちらかを使わない、という運用方式もある だが、面倒くさいので、そういうことを意識したくない 解決方法は 2 つ format_schema = :sql kami
イントロ よく設定ファイルで見るクラスを簡単に作れる module ActiveSupport::Configurable の紹介 使い方は、rails/configurable.rb at master · rails/rails のコメント文を読んだほうが早い。 よくあるやつ 具体例を幾つか紹介。 引数が違ったり、ブロック引数有り/無しだったり、メソッド名が違う等の差はあれど、どれも似ている vagrant Vagrantfile を拝借 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos7" config.vm.network "private_network", ip: "192.168.33.10" .... end rails config/environments/dev
イントロ 仕事で EMR を触っていて知見が溜まってきた気がするので、output していきます。 今後記事を連載する予定。 この記事では EMR にまつわる巨大な背景を説明します。 個別に検索すればもっと詳しいページはゴマンとあります。 ただそれらが EMR とどう関係しているのか、というのはあまり見かけなかったので書いてみました。 あ、コード一行も出てきません。 目次 EMR って何? 全体像 構成 EMR を起動するとどうなる? 気になる一回あたりの料金は... EMR の長所短所 長所 短所 仕事で使った時 Hadoop って何? 構成 HDFS Hadoop ツール層 EMR って何? Amazon Elastic MapReduce の略称 公式サイト AWSの内部で Hadoop を動かせる環境を提供してくれるサービスのこと 全体像 こんな感じ 出典元: What is Am
これは何か 好きな generator を作る話。ここで述べる generator とは rails generator hoge のような rails generate コマンドのこと。 知識整理のために書いてみる 雛形作成 rails には generator を生成する generator があって、以下の様なコマンドを叩けば良い。 rails generate generator <generator名> 試しに test という generator を作ってみる。 % rails generate generator test create lib/generators/test create lib/generators/test/test_generator.rb create lib/generators/test/USAGE create lib/generators/t
イントロ CircleCI からテストが通ったら capistrano 使って deploy させたい。 けど、対象サーバーは IP 制限がかかっている。CircleCI の IP なんてコロコロ変わるし、どうしたらいいんや... って話。 これができると、PR を github ボタンでマージしたら、自動(当然テストも通した後)で deploy されるので、非常に嬉しい。 方針 before deploy awscli を使い security group の inbound に自分自身の ip を付与 CircleCI の内部から IP address を割り出して、コマンドラインで一時的にinboud に追加させる deploy コマンド(bundle exec cap deploy)を実行 after deploy awscli を使い security group から ip を
イントロ 訳あってリモートで自宅の mac に ssh 接続したいなーと思ったことがあり、調べてみたことがある。 どうやらMacに外部からアクセス出来るようにする方法 - rcmdnk's blog の設定を行えば、可能になるそうだ。 試したら本当にできてしまった。 じゃあこの設定を on にしたら、sshd が立ち上がる、ということなのかな?と思って見てみると % ps aux | grep sshd xxxx 30523 0.0 0.0 2432768 536 s003 R+ 12:02PM 0:00.00 grep --color=auto sshd って言われた。あれ?立ち上がってない。 じゃあどうしてログインできるのだろう? と思って調べてみた記録です。 実験 試しに自分自身に ssh でログインしてみる % ps aux | grep sshd xxxx 30388 0.0 0
イントロ 最初理解するのが難しかったけど、理解できた気がするので書いてみるメモ。 お題は Enumerator と Generator について。 新しさ皆無の n番煎じです。 Generator class Generator 最初に言ってしまうと、ruby 1.8 限定のクラスで、Generator は each メソッドを使えるようにする クラスです。(ざっくり言うと) 後で出てくる Enumerator と同じようなことをしてくれます。 まぁ今更 ruby 1.8.7 を使う人はいないとは思うんですけど、敢えて書いてみました。 どんな自作クラスを作っても、Generator を使えば each を使えるようになるので、そこからはやりたい放題だよね的なシロモノです。 使ってみる NewString クラスを作ってみます。 NewString.new.generate.each とする
結論 定数に class クラスのオブジェクトを代入すると、(ruby で一般的な) class として扱われる module or class の配下にネストして class を作る場合、その class が持つ定数として定義する class.new する際に引数として、class クラスのオブジェクトを渡すと、引数で渡されたクラスで継承されたクラスが生成される。 メソッドも作りたい場合はブロックで記述する 主な使いどころとしては、文字列で与えたクラス名で、クラスを新たに作成するとき。 実演 何言ってるのかわからないので確かめてみる クラスを作る 結論1: 定数にclassクラスのオブジェクトを代入すると、(ruby で一般的な) class として扱われる module#const_set メソッドを使う 第一引数に定数名、第二引数にセットしたいオブジェクトを渡す self.class
イントロ chef で環境構築したはいいものの、ruby の install は意外と手間だったりします。 できれば rbenv のようなものを使って、色々な ruby のバージョンを試せる方がいいですよね。 ところが肝心の rbenv を install するレシピの自作は結構シンドい。 そんなあなたのために。 必要なもの berkshelf knife-solo(chef) vagrant 手順 1. Berksfile を書く site :opscode cookbook 'ruby_build' cookbook 'rbenv', github: "fnichol/chef-rbenv" rbenv の cookbook は必ず fnichol/chef-rbenv を指定。 2. nodes(attribute) ファイルを書く { "run_list": [ "ruby_bui
イントロ これに気づかなくて結構ハマった。 症状 berkshelf を使って、cookbook を install するとき、bundler 風に以下のように path を変えた。 berks install --path vendor/cookbooks すると cookbook が見つからないと怒られ始めた。 ================================================================================ Recipe Compile Error ================================================================================ Chef::Exceptions::RecipeNotFound -------------------------
イントロ 意外とキーボード操作系の記事って少ないんですよね。 ブラウザって絶対なくならないものだし、ゴリゴリと特化させた各人のスタイルがあっていいと思います。 公開すると誰かが「こういうの試してみよう」とか思う人がいるわけで。 emacs や vim などの editor だけでなく、ブラウザにもこういう文化がもっとほしいですなぁと常々感じてました。 そんなこと言う私は全然特化してないんですが、言い出しっぺの法則というわけで、「キーボード操作」に絞った自分のブラウザ設定を晒してみます。 (記事の最後に設定ファイル書いてます) 何を使ってるの? vichrome MigemoFindInPage あ、使ってるブラウザは chrome です。 どういう風に使ってるの? よく使うのは以下の操作です。 詳しくは設定ファイルを見てください。 キーバインド割り当ては変更することは、いくらでも可能です。
イントロ タイトルの通り。今までは面倒臭がって全部レシピを書いていたけれど、Berkshelf 使えば、その手間すら省けると聞いたので使ってみました。 ところで Berkshelf は何も考えないと vagrant-berkshelf という Vagrant のプラグインを経由して berkshelf 使おうとします。 何も考えず使ってうまくいけば問題ないのですけれど、問題が起きた場合、何が原因かを判断するのが若干面倒かなぁと個人的には思ってました。 エラーが出たらプラグインが悪いかもしれないし、gem が悪いかもしれないし、もしかしたら相性が悪いのかもしれない。 どうせ chef + berkshelf 使うのなら、chef と vagrant を切り離して考えて、Berkshelf は chef をより良く快適に使うためのもの、という役割が分担されてたほうが、問題の切り分けがやりやすい
次のページ
このページを最初にブックマークしてみませんか?
『scramble cadenza』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く