ブックマーク / qiita.com (349)

  • TDDを行った時にぶつかった7つの壁 - Qiita

    はじめに 僕が初めてTDD(テスト駆動開発)に出会ったのは2004か2005年。(どっちか忘れた。) 永和システムマネージメントさんが主催しているオブジェクト倶楽部というイベントで初めて知った。 「こんな方法でプロジェクトを管理することができるんだ!」 とかなり感嘆した記憶がある。 そんなTDDを実際に現場に導入したり、導入している現場を見て感じた事。 結果的に僕がテストコードをほとんど書かなくなったことについての経緯を書いていこうと思う。 TDDを導入すれば品質が上がると盲目的に信じている人や、TDDの導入をしている(しようとしている)現場がTDDについて一歩踏み込んで考えてもらえればと思う。 ※全文を読んで頂ければわかると思いますが、僕はTDDを批判しているわけではありません。コストに見合わない事もあると言うことを伝えるために書いてます。 TDD(テスト駆動開発)とは 平たく言うとビジ

    TDDを行った時にぶつかった7つの壁 - Qiita
    tamu222i
    tamu222i 2016/09/12
  • React.jsでPropやStateを使ってComponent間のやりとりをする - Qiita

    今日はこれまでに紹介したPropやStateを使ったComponent間でやりとりについて書きたいと思います。 親のStateを子のPropとして渡す Componentを設計する時はまずPropとしてI/Fを考えて、そのComponentが管理すべき値で変更されるものをStateとして定義します。 つまりComponent間での親子の関係を意識して、親がStateを持っていて子にPropとして渡すというのが基になります。(子は使うだけで管理しているのは親) var User = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired, id: React.PropTypes.number.isRequired }, render() { return ( <div>{this.props.id}:

    React.jsでPropやStateを使ってComponent間のやりとりをする - Qiita
    tamu222i
    tamu222i 2016/09/02
  • Apacheセキュリティ設定 - Qiita

    概要 Apache の設定について共通化できるセキュリティ設定とその各項目についてまとめた。 設定例 必須設定 cat << _EOF_ > /etc/httpd/conf.d/security.conf # バージョン情報の隠蔽 ServerTokens ProductOnly Header always unset "X-Powered-By" # httpoxy 対策 RequestHeader unset Proxy # クリックジャッキング対策 Header always set X-Frame-Options "SAMEORIGIN" # XSS対策 Header always set X-XSS-Protection "1; mode=block" Header always set X-Content-Type-Options "nosniff" # XST対策 Trace

    Apacheセキュリティ設定 - Qiita
    tamu222i
    tamu222i 2016/09/02
  • 二段階認証(Two-Factor Auth)の実装 - Qiita

    ふと思い立って、GmailにTwo-Facotr Auth(二段階認証/二要素認証)をかけてみました。次にEvernoteにも設定した時に、Google謹製のアプリでEvernote用のワンタイムパスワードを発行できることに疑問を感じました。 ログイン時に「一定時間有効なIDを発行する」のはサーバー上で逐次生成してExpireを設定すれば可能ですが、他社でも共通になる仕組みはどのようになっているのかと思って調べてみたらなかなか面白かったでメモしておきます。 仕組み 実はRFCで規定されているアルゴリズムを使ったオープン実装でした。 http://ja.wikipedia.org/wiki/Google_Authenticator サーバー上で秘密鍵を生成し、ローカルとサーバーに保存する この秘密鍵と時間を元にして30秒間有効なワンタイムパスワードを生成する サーバー上でも同じアルゴリズムを

    二段階認証(Two-Factor Auth)の実装 - Qiita
    tamu222i
    tamu222i 2016/08/02
  • マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita

    先日、マイクロサービスの呼び出し方として、オーケストレーションとコレオグラフィについて書きましたが、同じく4章では、どうHTMLを組み立てるかという問題が提起されています。 ここもやや難解なので、咀嚼を試みます。 課題設定 次のようなECサイトを考えることにします。そして、4つのマイクロサービスを合成して構成します。 商品カタログサービス ショッピングカートサービス ショップサービス リコメンドサービス API合成 無垢な気持ちで設計すると、各々のマイクロサービスがWeb APIのインタフェースをもち、XMLやJSONを返して、ECサイト側で、テンプレートエンジンなどを用いて、HTMLをレンダリングするという方式になるかと思います。 そして、この形式でマイクロサービスを利用するサイト(アプリケーション)が増えていくと次の図のようになります。 これには、次の3つの欠点があるとされています。

    マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita
    tamu222i
    tamu222i 2016/07/26
  • 言語別:パスワード向けの正規表現 - Qiita

    はじめに 「英数記号あり(大文字小文字の区別なし)で、かつ8文字以上」の正規表現 の内容と重複しますが、言語ごとに最適化したものもまとめておきます。但しあまり知らない言語もあるので、誤りなどありましたら指摘お願いします。 留意した点 行 JavaScriptでは、マルチラインモードを指定しない限り ^ $ がそれぞれ先頭と末尾を表す。\A \z はそもそも存在しない。 Rubyでは、デフォルトでマルチラインモードなので、^ $ はそれぞれ行頭と行末にマッチしてしまう。これでは正規表現が意味を為さないので、先頭と末尾にマッチする \A \z を使用する。 PHPではRubyほど深刻ではないが、$ が末尾または改行からの末尾にマッチしてしまうので、改行を含まない \z を使用する。 RubyPHPの \z は、Pythonにおいては \Z に相当する。 パターン修飾子 JavaScript

    言語別:パスワード向けの正規表現 - Qiita
    tamu222i
    tamu222i 2016/06/28
  • Apache JMeterで任意のタイムゾーンの現在時刻文字列変数を設定する - Qiita

    JMeterのBSF Pre Processorでjavascriptを用いてゴリゴリする。 環境 Mac OS/X 10.7.5 JMeter 2.9 // Parameters 第一引数 (変換後 のタイムゾーンオフセット [時]) var tzHoursOffset = args[0]; // Parameters 第二引数 (変換後 のタイムゾーンオフセット [分]) var tzMinutesOffset = args[1]; // 引数のタイムゾーンオフセットをミリ秒単位に変換 var tzOffset = tzHoursOffset*60*60*1000 + tzMinutesOffset*60*1000; var localDate = new Date(); var localOffset = localDate.getTimezoneOffset() * 60000;

    Apache JMeterで任意のタイムゾーンの現在時刻文字列変数を設定する - Qiita
    tamu222i
    tamu222i 2016/06/17
  • 君がOpsでもRubyで書いたライブラリはGemで配ろう - Qiita

    Infrastracture as code流行の副産物として、もうOpsはある程度Rubyでライブラリを書けるようになりました。 折角Rubyでライブラリを書いたなら、安全&ラクに配布するためGemパッケージにしましょう、出来る人には今更でしょうが知らない人は真似してみてね。 ちなみに意外と誤解されてる点、gemにする=Rubygems.orgで公開する、ではありません、してもOKというだけで。 目標 gemファイルを置いて、gemコマンドで自分のライブラリをサーバに導入する。 こんなかんじで。 gem install -l my_libs-0.0.1.gem じゃあやってみましょう。 Gemの雛形をつくろう Gemの作り方は色々あるようですが、私はもっぱらbundlerです。 bundle gemで必要なファイル群を作成します、便利ですね。 $ bundle gem my_libs c

    君がOpsでもRubyで書いたライブラリはGemで配ろう - Qiita
    tamu222i
    tamu222i 2016/05/19
  • td-agentへのfluent-plugin追加に失敗した件+解決策 - Qiita

    事象 fluent-plugin-mysqlを使ってみようと思って、td-agentにインストールしようとしたところ。 # /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mysql # vi /etc/td-agent/td-agent.conf # service td-agent restart Starting td-agent: 2013-02-14 18:14:40 +0900: fluent/supervisor.rb:187:rescue in main_process: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'mysql'. Run 'gem search -rd fluent-plug

    td-agentへのfluent-plugin追加に失敗した件+解決策 - Qiita
    tamu222i
    tamu222i 2016/05/19
  • Java 8 "Optional" ~ これからのnullとの付き合い方 ~ - Qiita

    Java8で新たに追加されたクラスにjava.util.Optionalがあります。 Optionalを使用することで、プログラムの堅牢性を高めたり、煩雑な記述を減らすことが期待されます。 Optionalとは? Optionalは値をラップし、 その値がnullかもしれない ことを表現するクラスです。 使い方 メソッドgetHoge()はnullを返す場合があるとします。 これまでなら次のような感じでnullチェックをしていたと思います。 String hoge = getHoge(); // hogeはnullかも if (hoge != null) { // nullチェック System.out.println(hoge.length()); // hogeがnullじゃないのでlengthメソッドを呼ぶ } nullかもしれない変数hogeのメソッドを呼ぶ場合、事前にnullチェ

    Java 8 "Optional" ~ これからのnullとの付き合い方 ~ - Qiita
    tamu222i
    tamu222i 2016/05/06
  • [Java] hashCode のメモ - Qiita

    目的 Javaで hashCode 関連のメソッドはいくつかのクラスに分散しているので、整理してみます。 各メソッドの詳細な説明はしません。 hashCode の基 ハッシュ値を求める。ハッシュテーブル探索などで使われる(HashMap や HashSet など) equals() とセットで、矛盾なく実装する必要がある equals() が true を返すオブジェクトは、同じハッシュ値であること 違うハッシュ値である場合には、equals() は false を返すこと(対偶) equals() が false を返すオブジェクトが、同じハッシュ値であっても構わない(ハッシュ値の衝突)が、衝突が少ないほうが性能が良い メソッド java.lang.Object#hashCode() インスタンスのハッシュ値を計算する。 独自のクラスを HashMap などのキーに使いたいときには自分

    [Java] hashCode のメモ - Qiita
    tamu222i
    tamu222i 2016/04/28
  • PHP7調査(11)??演算子の新設 - Qiita

    PHP7で2項演算子「??」が新設されます。左オペランドがnull以外の値であればその値を、そうでなければ右オペランドを返すようなものです。

    PHP7調査(11)??演算子の新設 - Qiita
    tamu222i
    tamu222i 2016/04/20
  • SlackクローンのMattermostを使ってみる - 導入、初期設定編- - Qiita

    「大人の事情でSlackとかHipChatは使えない」 って話、やっぱり多いみたいなので。世知辛いですね。 いろいろ試していたのですが長くなったので、とりあえず一回まとめてみました。 需要ありそうでしたら仕事探しのついでに、ちょこちょこ書いたりしていきたいなーと思います。 Mattermostとは MattermostGitHubに対するGitLab、そのSlack版」という説明が一番しっくりくるでしょうか。1 SlackのOSSクローンというだけにとどまらず、"Slack-compatible, not Slack-limited" を目指して、Markdown記法やハッシュタグといった独自機能を取り入れたりもしている、なかなか挑戦的なプロダクトです。 技術的にはGo言語やReactを使ってるというあたりも興味深いですね。 大きく以下の3パターンがあるかと思います。 1. 公式から提

    SlackクローンのMattermostを使ってみる - 導入、初期設定編- - Qiita
    tamu222i
    tamu222i 2016/04/18
  • ls -l をサイズ順にソート。超一瞬版 - Qiita

    環境は Debian wheezy 7.5 ですがLinuxなら大抵問題ないかと。 追記: 最後におまけつきます。「超一瞬版」は「超一瞬で不要ということが分かった版」に変わりました。 (勝手に改行入れてます) $ uname -a Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.5 (wheezy) Release: 7.5 Codename: wheezy $ ls -l | sort -k 5 ...(省略しまして)... -rwxr-xr-x 1 dmiyakawa dmiyakawa 1853

    ls -l をサイズ順にソート。超一瞬版 - Qiita
    tamu222i
    tamu222i 2016/04/11
  • FreeBSD上のruby 2.2.xでgem sqlite3がインストールできなかった - Qiita

    FreeBSDでsqlite3のgemをインストールするには、以下のようにsqlite3のヘッダファイルの位置などを補ってやる必要が従来からあった。 gem install sqlite3 -- --with-sqlite3-lib=/usr/local/lib --with-sqlite3-include=/usr/local/include sqlite3.c:35:20: warning: implicit declaration of function 'RBIGNUM' is invalid in C99 [-Wimplicit-function-declaration] const long len = RBIGNUM_LEN(value); ^ sqlite3.c:33:27: note: expanded from macro 'RBIGNUM_LEN' # define

    FreeBSD上のruby 2.2.xでgem sqlite3がインストールできなかった - Qiita
    tamu222i
    tamu222i 2016/03/18
  • node.jsをyumでインストールする(centos6.5) - Qiita

    Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    node.jsをyumでインストールする(centos6.5) - Qiita
    tamu222i
    tamu222i 2016/03/18
  • 【Hubot】BacklogからHubotを経由してChatworkに課題の操作を通知 - Qiita

    実現したこと Backlogで課題を追加、もしくは更新・削除すると・・・ という形で、リアルタイムでチャットワークに通知が送られます。 こんな感じでBacklogとチャットツールが連携されれば、メールから課題を辿る必要が無くなるので、ますますメールの存在感が減っていくような気がしました。 具体的な設定に関しては、ほとんどこちらを参考にさせていただいてますー。 BacklogでWebhookが追加されたよ!!!Hubot経由でSlackに連携してみた 準備 Backlogプロジェクトを用意 Hubotをサーバにデプロイしておく Chatworkで通知する部屋を用意 Hubot側の設定 適当な名前でスクリプトを作成する backlogUrl = 'https://XXXXX.backlog.jp/' module.exports = (robot) -> robot.router.post

    【Hubot】BacklogからHubotを経由してChatworkに課題の操作を通知 - Qiita
    tamu222i
    tamu222i 2016/03/16
  • vimで文字化けした時の対応 - Qiita

    文字が文字化けした場合 ・vimの文字コードを確認 :set enc? ・ファイルの文字コードを確認 :set fenc? ・エンコードを指定して保存し直す :set fenc=文字コード 設定ファイルを変更 毎回文字コードを変更するのは大変なので vimの設定ファイルに保存しておく。 # vi ~/.vimrc ---- vi追記 ---- set encoding=utf-8 set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8 set fileformats=unix,dos,mac

    vimで文字化けした時の対応 - Qiita
    tamu222i
    tamu222i 2016/03/14
  • Git エラー: warning: remote HEAD refers to nonexistent ref, unable to checkout. - Qiita

    Git エラー: warning: remote HEAD refers to nonexistent ref, unable to checkout.Giterror Gitクローン時のエラーで warning: remote HEAD refers to nonexistent ref, unable to checkout. が出る場合の対処。 今回は、 リモートリポジトリのHEADが指定するブランチがなかったのでその場合の対処 対処1. git branch -aで表示されるブランチをチェックアウトする 対処2. リモートのHEADが指定するブランチを設定する やり方は以下を参照 http://qiita.com/suisuina/items/2d12b0ab8862c43c8f4a

    Git エラー: warning: remote HEAD refers to nonexistent ref, unable to checkout. - Qiita
    tamu222i
    tamu222i 2016/03/04
  • locatorで指定しづらいradio buttonを操作する方法 - Qiita

    <input type="radio" name="fruit" value='apple'> リンゴ <input type="radio" name="fruit" value='orange'> オレンジ <input type="radio" name="fruit" value='strawberry'> イチゴ これをRSpecなどでCapybara使ってどうやって選ぶかなのですが、適切にlabelが指定されていればchooseでいけるものの、上記例のようにlabelが設定されていない場合chooseでは難しそうです。このメソッドは引数にcssxpathを付けつけてくれないようだからです。 そこで、choose自体はCapybara::Node::Elementに対して何かしらの操作をしているだけだろうと予想し、Capybara::Node::Actionsのドキュメントを読

    locatorで指定しづらいradio buttonを操作する方法 - Qiita
    tamu222i
    tamu222i 2016/03/02