一から勉強させてください( ̄ω ̄;)

最下級エンジニアが日々の学びをアウトプットしていくだけのブログです。

Golang + echoなREST APIサーバで、テスト実行時に自動でAPIドキュメントを生成できるようにする

最近、Golang (+echo) でREST APIサーバを開発する機会があったのですが、テストを書いたらAPIドキュメントを自動生成するような仕組みを作るために試行錯誤したのでメモです。 方針 APIドキュメントの生成にはtest2docを利用 テストを実行するとAPI Bluepri…

GolangでEnumをフィールドに持つstructをいい感じにjsonエンコード / デコードする

最近、GolangでEnumをフィールドに持つstructをいい感じにjsonエンコード / デコードしたい衝動に駆られた事があったので、その時のメモです。 普通にjson.Marshalする 例えば、以下のような Userのstructを定義したとする。 type UserRole int const ( _ Us…

Railsでパンくずリストを実装するためにbreadcrumbs_on_railsを使ってみた

最近、Railsアプリでパンくずリストをいい感じに実装するために、breadcrumbs_on_railsというGemを使用してみました。 すでにネット上に使ってみた的な記事はちらほら見受けられましたが、自分なりにどのように使ったかなどを書いておきたいと思います。 bre…

Grape + Rails4.2のAPI開発でエンドポイントとエンティティのテストについて考える

最近、Grape + Rails (v4.2.6)でRESTなAPIを開発する機会があったのですが、今回はその開発の中で悩んだ、「Grapeのエンドポイントとエンティティのテスト」について書きたいと思います。 前提としてGrapeののエンティティは grape-entity、テストフレームワ…

RubyでネストしたHashをflatな1次元のHashに変換する

{ :foo => "bar", :hello => { :world => "Hello World", :bro => "What's up dude?", }, :a => { :b => { :c => "d" } } } みたいなネストしたHashがあったとして、これを { :foo => "bar", :"hello.world" => "Hello World", :"hello.bro" => "What's up d…

シーケンシャルスキャンとインデックススキャンを意識して生きていきたい

最近RailsでツラいクエリをRDBに投げまくって失敗してしまったのでメモ。 例えばusersテーブルがあって、一部のAwesomeなユーザーだけにawesomeがtrueで割り当てられている(基本false)とする。そしてawesomeカラムにはインデックスが貼られているとする。 …

Golangで画像をアップロードして表示するだけのアプリをつくってみた

完全に出遅れた感満載だけど、最近Golangの勉強を始めました。 ちょうど昔、node.jsの勉強で画像をアップロードして表示するだけのアプリをつくったことがあったので、今回はそれのGolang版をつくってみました。 成果物はこちら。 初期表示 とりあえず/にア…

Swiftで抽象クラスを実装する

Swiftではprotocolがサポートされていて、protocol extensionもできるようになりましたが、抽象クラスは2015年11月現在サポートされていません。 僕は抽象クラスがほしいなーって思うときがたまにあって、例えばtypealiasを使用しているprotocolを何かの変数…

RxSwiftを使ってGitHubのおすすめユーザーを表示するアプリをつくってみた

ひさしぶりの投稿です。。気づけばiOSの開発を始めて半年近く経ち、ようやく半人前になってきたかもしれません。 ドラクエで言うとちょうどスライムナイトが敵で出現しはじめるぐらいの段階でしょうか。どうでもいいですね。 さて最近は流行りのリアクティブ…

iPhoneアプリ開発初心者がSwift + CoreDataでシンプルなTODOアプリをつくってみた

(2015/11/7追記)Swift2.0に対応しつつ、リネームやリファクタリングなど修正を加えたものをGitHubにあげております。この記事内で説明している通りに実装しても動作しないと思うので、もしよろしければGitHubのコードも参考にしてみてください。 僕は普段、…

Chromeのコンソール上でXPathのテストをする

最近、仕事でWebスクレイピングの機能を実装する機会があってXPathを使う必要に駆られました。そこでChromeでXPathが正しく機能しているかテストする便利な技があったことを知ったのでメモです。 $xを使用する Chromeのコンソールから、$xを使えばOK。 たと…

Rubyでクロージャを書いてみる

以前、クロージャについてという記事を書きました。 このときはJavaScriptでクロージャってどうやって書くの的な話だったのですが、今回はRubyでどうやって書くの的なことを書きたいと思います。 Procを使う RubyにはProcオブジェクトがあるので、こいつを利…

procとlambdaの挙動の違い

RubyのProcオブジェクトはKernel#proc(またはProc#new)で作るパターンとKernel#lambdaで作るパターンがありますが、それらは地味に結構挙動が違っていたりします。 そこで今回はこのKernel#procとKernel#lambda でつくった時のProcオブジェクトの挙動の違…

Rubyのcase文はwhen節に渡すオブジェクトによって振る舞いが異なる

今回はRubyのcase文についてです。 Rubyのcase文はどのように値を比較するか Rubyのcase文ではcase節に比較対象となる値を、when節にcase節の値と比較する値を記述します。 んで、when節の値をレシーバとして、===メソッドによって比較が行われ、最初に真と…

Rubyのメソッド探索についてまとめてみた

今回はパーフェクトRubyで「Rubyのメソッド探索」について学んだのでそのメモです。 オブジェクトに対してメソッド呼び出しが行われる際、どのようにメソッドが呼び出されているのか、書いてみたいと思います。 自身のメソッドを呼び出した時 class BaseClas…

Rubyのインスタンス変数、クラス変数、クラスインスタンス変数

Rubyのクラスには インスタンス変数 クラス変数 クラスインスタンス変数 があって何かとややこしい。。 特にクラス変数とクラスインスタンス変数の違いについてはいまいち理解しきれていなかったので、今回は頭の整理もかねてメモです。 それぞれの特徴につ…

Railsでfakerのバージョンを上げたらspecが壊滅したけど設定で乗り越えたメモ

最近、Railsプロジェクト内で使用しているfakerのバージョンを最新(v1.4.3)に上げたら、今まで通っていたspecが壊滅したので、その際のメモです。 状況把握 こちらの記事に記述されているものと全く同じ状況に陥ったと思われます。 プロジェクト内のlocaleは…

git-new-workdirを導入してGitのブランチを複数同時に扱えるようにした

Git

今、僕の仕事環境では「エンジニアそれぞれが作業用ブランチを切って開発を進め、Githubにpull-reqを出してレビューもらって、それが通ったらマージされる」、といったよくありがちなフローで開発を進めています。 で、今までは自分が開発をしている最中に同…

bundle openでgemのディレクトリを手軽にエディタから確認できる

gemのソースって今まで基本Githubから確認していたのですが、実はエディタから手軽に確認できる方法がありました。地味に知らなかったです… こちらの記事を参考にさせていただきました。 エディタの設定 環境変数EDITORにあらかじめどのエディタを開くのか設…

Rails4 + devise + paranoiaで論理削除を考慮したユーザーバリデーションを実現する

Railsでユーザー登録、認証機能を実装する際、deviseを使用することはわりと一般的かと思います。 またユーザーの論理削除を実現するためのgemとしてはparanoiaが有名かと思います。(Rails3時代によく使われていたacts_as_paranoidをよりシンプルにしたやつ…

Rubyのビット演算子、論理演算子について

Rubyの論理演算子、ビット演算子についてメモ。 論理演算子 一番よく使うやつ。 Rubyの論理積、論理和ってtrue、falseじゃなくてオペランドのどちらかを返す。短絡評価。(片方を評価して結果がわかったら、もう片方を評価せずに結果を返す) 論理積はどちら…

サブネットマスクについて自分用メモ

サブネットマスクについて、いまいちな理解だったので参考サイトで読んだ内容をメモしておく。 ついでにIPアドレスまわりについても書いてみます。 IPアドレス 10進数表記で172.16.0.0のように表される、インターネット上でコンピュータ1台1台に割り振られた…

PowとtunnelsでRailsのローカル開発環境にSSL導入

仕事でRailsアプリのローカル開発環境にSSL導入したのでメモ。 powの導入 powはRackアプリケーション用のサーバー。仮想的なドメイン名を割り当ててアクセスできるようにしてくれるぽい。 githubのreadmeをみて導入。 $ curl get.pow.cx | sh $ cd ~/.pow $ …

Railsのbefore_validationで文字列の先頭、末尾にある全角スペースを取り除く

Strip#stripを使うだけでは半角スペースとか改行文字しか取り除けないので、before_validation時に全角スペースを取り除く方法を考える。 ちなみにRubyは2.1.2、Railsは4.1.0を前提に書いてます。 auto_strip_attributesの導入 auto_strip_attributesというg…

Rails4.1プロジェクトにteaspoon入れたらエラー出たので調査した

Rails4.1のプロジェクトでJavaScriptのテストをするためにteaspoonを入れたらうまく動かなかったので調査。 Rails4.0で入れたときは問題なかったのに…ツラい。 準備 まずはGemfileに記述して group :development, :test do #ここにrspec関連とか書いてる。 #…

Travis CI導入メモ

CI

Travis CIを導入した際の手順をメモがてら書きます。 設定ファイルを書く Railsプロジェクト(DBはpostgreSQL)で使用したのでその前提で。 プロジェクトのリポジトリに.travis.ymlを追加して以下のように書きました。 language: ruby rvm: - 2.1.0 bundler_…

Homebrewで特定バージョンのformulaに切り替える方法

Homebrewで古いバージョンのimagemagickを入れる必要に迫られたのでメモです。 現状確認 まずbrew updateをしてhomebrewをアップデートして、現状確認。 $ brew update $ brew versions imagemagick imagemagick: stable 6.8.9-1 (bottled), HEAD http://www…

WiMAXを使用していて、ホスト名解決できない問題にハマってる人に捧ぐ

僕は最近WiMAXルーター「AtermWM3800R」を購入しまして、おかげ様で家でも外でもインターネットを楽しむことができているのですが、ひとつだけ悩みがあります。 WiMAXで陥った問題 その悩みとは 頻繁にホスト名解決ができなくなる というものです。 どこかの…

浮動小数点数について本気出して考えてみた

(2016/12/30 追記)コメントでご指摘頂いた箇所に関して修正しました。 この前たまたまこちらの記事を見つけて、浮動小数点数について全然理解してないなって思ったので勉強してみました。 前提 コンピュータの中に保存されているデータはすべて0と1の集ま…

GitHubのユーザー名を変更してみた

この前GitHubのユーザー名を変更したので、メモがてら書いておきます。 自分は以下の懸念事項があって今までなかなか行動に移せていなかったのですが、今回無事に変更できたので似たような心配をしている人の参考になれば幸いです。 今まで作成したGitHubの…

Varant, chef, Underscoresを使ったWordPress爆速開発について

僕がはじめてWordPressを触ったのは2年前… 当時はMAMPを使ったローカル開発環境で開発して、FTPで本番にアップ、、なんてやり方で作業をしていました。 MAMPが起動しなくなって気が狂いそうになったり、適当に作られた独自テーマがカオスすぎて発狂したり、…

backbone-on-railsを使ってTodosを作り直してみた

あけましておめでとうございます。 新年一発目はbackbone.jsのサンプルとして有名なTodosをサーバーサイドにRailsをつかって作り直してみたいと思います! 以前、backbone.jsのサンプルTodosの動作を追ってみたという記事でも動作を簡単に見たのですが、この…

CoffeeScriptでJavaScriptの継承を書き直してみた

以前、JavaScriptの継承についてという記事を書いたのですが、最近Rubyやらなんやらをいじっている影響でCoffeeScriptで書き直したい欲求が出てきました(゚∀゚)というわけで今回はCoffeeScriptでオブジェクトの継承を書いてみますよー。 ちなみにcoffee→jsのコ…

Raspberry piをディスプレイ無しでセットアップしてみた(続き)

今回の記事は前回のセットアップの続きになります。 前回、 ssh pi@raspberry piのIPアドレス でSSHログインに無事成功したので、今回は簡単に初期設定をしてみました。 1, raspi-configまずはログインしたらraspi-configしろよ、みたいなメッセージがでてた…

Raspberry piをディスプレイ無しでセットアップしてみた

普段、仕事でフロントエンド関連のことばっかりやっているので、家ではちゃんとサーバーサイド関連のことも勉強しようと思い、Raspberry piを購入。(してから半年ぐらい放置してましたが、、) 今回はそのセットアップ時のメモ書きを残しておきたいと思いま…

JavaScriptでクラスっぽいコードを書く方法

今回はJavaScriptでクラスっぽいコードを書く方法について考察したいと思います。参考にさせていただいたのは、JavaScriptで関数の多重定義を行う方法の時と同様、ジョンレシグ氏の本を参考にさせていただきました!神っ!! 早速サンプルコードを。こんな感…

github pagesでつくったアプリを公開してみた

Git

今回はgithubとgithub pagesをつかってアプリを公開したときのことを書きたいと思います。 こちらをそのまま参考にさせて頂きました。 http://qiita.com/ukyo/items/f37e9a185955a713fab9 今回やったこととしては、 1, githubにソースをpushする(とりあえず…

JavaScriptで関数の多重定義を行う方法

今回はJavaScriptで関数の多重定義を行う方法について書きます。 まず関数の多重定義というのは、何を引数に渡すか(引数の数、型など)によって異なる動作を行う関数を定義する方法です。例えばjQueryのcssメソッドとか良い例だとおもうんですが、 $(select…

jQuery.DeferredとかjQuery.whenの使い方について

今回はjQuery.Deferredとかそれに関連するjQuery.whenとかのことをざっくり書こうと思います。 まずざっくりとDeferredについて。 Deferredオブジェクトはunresolved, resolved, rejectedのいずれかの状態をもつオブジェクトです。デフォルト値はunresoleved…

JavaScriptでオブジェクトのプロパティを列挙する方法

今回はJavaScriptでオブジェクトのプロパティを列挙する方法について書きたいと思います。 オブジェクトのプロパティを列挙する方法って地味に結構あるんですよね。ただ、それぞれの手法に特徴(ていうか制限?)があって、例えば「プロトタイプがもっている…

JavaScriptで関数に自分専用のプロパティを定義する方法

(2013/9/30追記)ここで書いた方法には「バグのあるコードや悪意のあるコードがカウンタを初期化したり、整数ではない値に設定したりすると整数値を返せなくなってしまう」という欠点もあるという記述が載っておりました。やはり、無難にクロージャを使って…

jQueryのバージョン確認方法について

今回は簡単な記事ですが、jQueryのバージョンをさくっと確認する方法を書きたいと思います。 jQueryのソース(今回みたのは2.0.3)をざっと見ると、以下のようになってます。 ちなみにめちゃめちゃ省略してます。 (function(window, undefined){ var rootjQu…

JavaScriptの継承について

先日ひさしぶりにJavaScript The Good Partsの「継承」の章を読み返したので、今回はそのアウトプットとして記事を書きたいと思います。 まず章の冒頭にこのようなことが書いてあります。 クラスを利用する言語では、オブジェクトはクラスのインスタンスであ…

CSS3で簡単なアニメーションつくってみた

CSS

今回はCSS3のtransitionとanimationを使って簡単なアニメーションをつくってみました。サンプルはこんな感じです。transition使用 http://jsfiddle.net/danimal141/j5LAs/3/embedded/result/ animation使用 http://jsfiddle.net/danimal141/75mjG/3/embedde…

RequireJSつかってみた

今回はJavaScriptのモジュール管理ライブラリのRequireJSをつかってみました。JavaScriptにはモジュールを管理する機能がないので、大規模プロジェクトなどで、JSファイルを分割した場合、その依存関係が心配になります。でもこのRequireJSを使えば、依存関…

jasmineつかってみた

今回はJavaScriptのテストフレームワークjasmineをつかってみたときのことを書きたいと思います。 近年、テストを先に書いてから実装を行う「テスト駆動開発(TDD: Test Driven Development )」というものが注目されておりましたが、最近はそのさらに進化版…

jsPerfつかってみた

先日、JavaScriptのコードスニペットに対してベンチマークをとることができる「jsPerf」というサービスをつかってみました。 今回はそのときの備忘録的メモを書きたいと思います。 サイトはこちら↓http://jsperf.com/ それでは早速順番に進んでいきたいと思…

GruntでjQueryをカスタムビルドしてみた

今回はjQueryのカスタムビルドに挑戦してみました。 これができれば余計な機能を省いた軽いjQueryを使えるようになるのでパフォーマンスの向上も期待できるはず!! ひとまず参考にしたのはhttps://github.com/jquery/jqueryのREADMEです。 ここに一連の流れ…

GruntでCSS、JSの圧縮をしてみた

今回は普段、地味に鬱陶しいCSSやJSの圧縮処理をGruntを使ってやってみたときのことを書きたいと思います。まずGruntとはなんぞやということですが、、Gruntとはファイルのコピーや削除、JSやCSSの圧縮やgzip化、画像の圧縮、Sprite化などを自動化してくれる…

RubyとSQLiteを使って、郵便番号検索アプリをつくってみた

今回はRubyとSQLiteを使って、郵便番号から住所を検索できるアプリケーションを作ってみました。 ソースはすべてここに置いてあります。 https://github.com/danimal141/search_zipcode やりたいことは非常にシンプルで「郵便番号から該当する住所を検索する…