タグ

2013年4月15日のブックマーク (109件)

  • Jenkinsチュートリアル初級編 | Knowledge Note

    継続的インテグレーション(CI:Continuous Integration)を強力にサポートするツール 「Jenkins」 の機能や操作方法について解説していきます。今回は導入から簡単なジョブを実行するまでの初級編です。 はじめに 記事 「Jenkinsチュートリアル」 では、継続的インテグレーション(CI:Continuous Integration)を強力にサポートするツール 「Jenkins」 の機能や、特に操作方法に焦点を当てて、その使用方法について解説していきます。 今回の初級編では、Jenkins に全く触れたことのない方向けに Jenkins を入手する所から、ジョブの作成、実行、結果の確認までを、一通り紹介します。Jenkins の基礎・基となる必要最低限の使い方の説明に留めるため、応用や、より高度な活用方法については中級編以降をお待ち下さい。 Jenkinsについて

    Jenkinsチュートリアル初級編 | Knowledge Note
  • kyon_mm AdventCalendar (2012/12/01 00:00〜)

    12/1 Git + Jenkins + Groovyのインストール(自動化できればする)12/2 Git + Jenkins + Groovyの連携112/3 Git + Jenkins + Groovyの連携212/4 Git + Jenkins + Groovyの連携312/5 Ant,Maven,Gradleの自動ビルド12/6 AndroidプロジェクトのCIパターン12/7 Jenkinsトラブルシューティング12/8 Gitトラブルシューティング12/9 Groovyトラブルシューティング12/10  Continuous Commitとはなにか12/11 Continuous Commitの実例12/12 Continuous Commitの応用12/13 Continuous Commitの注意12/14 Veracityを訪ねて三千里 第一話12/15 Veracity

    kyon_mm AdventCalendar (2012/12/01 00:00〜)
  • Amazonは1時間に最大1000回もデプロイする。クラウドネイティブなデプロイとはどういうものか? AWS re:Invent基調講演(Day2 AM)

    Amazonは1時間に最大1000回もデプロイする。クラウドネイティブなデプロイとはどういうものか? AWS re:Invent基調講演(Day2 AM) クラウドによってリソースの制約から解放され、サーバやネットワークを含む冗長性までプログラミング可能になった新しい世界では、どのような考えによってソフトウェアを構築すべきなのか。 Amazon.com CTOのWerner Vogels氏は、Amazon Web Servicesが先週ラスベガスで開催したイベント「AWS re:Invent」2日目午前中の基調講演で、新しい時代のアーキテクチャとはどういうものなのか、聴衆に向けてたっぷりと解説しました。 (記事は「AmazonクラウドのCTO「クラウドネイティブなアーキテクチャには4つの戒律がある」。AWS re:Invent基調講演(Day2 AM)」の続きです。 戒律その2「リジリエ

    Amazonは1時間に最大1000回もデプロイする。クラウドネイティブなデプロイとはどういうものか? AWS re:Invent基調講演(Day2 AM)
  • 複数の Jenkins と Travis のビルドの失敗が最速で分かる Stoplight を Heroku にデプロイ - suer のブログ

    複数のビルドサーバを一つのUIで確認できるStoplight - cynipeと読む を見て「これだっ!」と、この前まで隣だった人が叫んでいたので Heroku にデプロイしてみました。 iPad で表示したままにしておいて、チームのメンバが見えるところにおいておくと XFD っぽくていい感じです。 前提 以下が準備済みである必要があります。 Git がインストールされている Heroku にアカウントをもっている Heroku コマンドがインストールされている Heroku のアカウントに公開鍵が登録されている 手順 1. stoplight を clone する $ git clone git://github.com/customink/stoplight.git $ cd stoplight 2. ログ出力パスの変更 Heroku は tmp/ ディレクトリ以外のファイル書き込みを

    複数の Jenkins と Travis のビルドの失敗が最速で分かる Stoplight を Heroku にデプロイ - suer のブログ
  • CentOS6へJasmineによるCI環境を作る(1) | それなりブログ

    yum install ruby yum install ruby-libs yum install ruby-devel yum install ruby-rdoc yum install ruby-ri yum install rubygems yum install java-1.7.0-openjdk yum install java-1.7.0-openjdk-devel yum install xorg-x11-server-Xvfb yum install firefox yum groupupdate 'X Window System' RubyはJasmineをGem版で入れるために必要 JavaはSeleniumサーバのために必要 Xvfb / firefox / X Window System は、仮想バッファを介してFirefoxでアクセスするために必要 ※ いくつ

  • 開発チームの改善効果を定量データでアピール!

    開発チームの改善効果を定量データでアピール!:今日からできる“CMMI流”開発効率改善術(4)(1/2 ページ) ソフトウェアの測定は一般的に難しく、活用度も低いと言われる。どのように難しいのだろうか。それを明らかにするとともに、CMMIの考え方を適用した定量的なプロセス改善について解説する。 ソフトウェアの世界に定量的な評価は必要か 今回から2回にわたりCMMI(Capability Maturity Model Integration、能力成熟度モデル統合)の考え方を使った定量的なプロセス改善について説明します。 残念ながら、定量的な改善についてソフトウェアの世界ではあまり良い評判を聞きません。皆さんのプロジェクトでは、「この数字、自分にとっては用がないのだけど、何のために報告しているのだろうか」「バグ密度の水準って、いつも実際の数字の範囲とずれているのだけど、参考になるのだろうか」な

    開発チームの改善効果を定量データでアピール!
  • VagrantとchefとjenkinsでローカルCIサーバーを作成する~リベンジ編~ - nigoblog

    以前VagrantとchefとjenkinsでローカルCIサーバを立てることに挑戦したのですが、あえなく途中で挫折...!! そんなわけで今回はリベンジ編ということで書いていきます。 cookbookの用意 Vagrantfileの編集 Apacheの設定 jenkinsの起動 以上の流れで書いていきます。 cookbookの用意 このリンクheavywater/chef-jenkins · GitHubからcloneしてきます。 具体的には git clone git@github.com:heavywater/chef-jenkins.gitこれでOK! 次はVagrantとchefで簡単お手軽ローカル環境構築 - nigoblogでインストールしたcookbookからapache2とjavaを引っ張ってきてコピー jenkinsはjavaが必要です。現在cookbookはこんな感じ。

    VagrantとchefとjenkinsでローカルCIサーバーを作成する~リベンジ編~ - nigoblog
  • mocha+testling-ciでブラウザテストを自動化する - Qiita

    { "testling": { "browsers": { "ie": [ 6, 7, 8, 9, 10 ], "ff": [ 12, 13, 14, 15, 16, 17 ], "chrome": [ 20, 21, 22, 23 ], "opera": [ 10, 11, 12 ], "safari": [ 5.1 ] }, "harness" : "mocha", "files": "test/*.coffee" }, "devDependencies": { "chai": "*", "mocha": "*", "coffee-script": "*" } } githubプロジェクトページでwebhookを設定 プロジェクトページ > settingボタンをクリック > サイドバーからservice hooks > WebHook URLに http://git.testlin

    mocha+testling-ciでブラウザテストを自動化する - Qiita
  • 継続的インテグレーションを始めるための基礎知識

    継続的インテグレーションを始めるための基礎知識:グリーはいかにしてJenkinsを導入したのか(1)(1/2 ページ) 連載では、グリーのサービス開発において導入している継続的インテグレーション(Continuous Integration、以下、CI)と、CIツールであるJenkinsの導入について3回に分けて説明します。Jenkinsのインストールといった“手順”よりも、CI導入の“モチベーション”や“進め方のポイント”を中心に説明します。 グリーの開発と継続的インテグレーション SNSやソーシャルゲームなどを運営するグリーでは、数百名の技術者が日々さまざまな機能やサービスを開発し、リリースしています。このような規模、リリース頻度での開発を支えるには数多くの工夫や仕組みが必要です。この中でも最も大きな仕組みの1つにCIが挙げられます。 グリーでは、開発にCIを格的に導入し始めたのは

    継続的インテグレーションを始めるための基礎知識
  • testem + mocha on Travis-CI - ブラウザでのテストを自動化する - 四角革命前夜

    Travis-CIでブラウザのテストできないのかなー、できないよなーと思いつつ、いろいろ探してみたら出来るような事を知り、今ホット(なのかな?)なtestemを使う事でmochaでのテストも実行できるらしい!という事を知ったので試してみました。 準備 package.jsonの記述を変更します。 package.json "scripts": { "pretest": "./node_modules/.bin/bower install", "test": "./node_modules/.bin/mocha && ./node_modules/.bin/testem ci" }, "devDependencies": { "bower": "~0.8", "chai": "~1.5", "mocha": "~1.8", "testem": "~0.2" } testemが必要なのでtes

    testem + mocha on Travis-CI - ブラウザでのテストを自動化する - 四角革命前夜
  • drone.ioで継続的インテグレーション — そこはかとなく書くよん。 ドキュメント

    drone.ioで継続的インテグレーション¶ 継続的インテグレーション(CI)といえば、github + Travis CI が有名ですが、Travis CIはgithubしか使えませ ん。 ということで、bitbucket他が使えて自由度が高くてしかも安い、という Drone.io をご紹介します。 特長¶ 簡単に言うと、drone.ioは以下の特長があります。 github, bitbucket, Google Codeと連携可能 build scriptで柔軟なbuild 環境変数を設定できるため、AWS_SECRET_KEYなども設定可能 Dart, go, Groovyなども含む多彩な言語に対応 Herokuやdotcloudにdeployまで対応。sshも使えちゃう publicなら完全無料。privateリポジトリも$5から では、もう少し深く解説していきます。 github

  • Ubuntu上でXvfbを使ってJavaScriptのユニットテストをChromeとFirefoxで実行する - Webtech Walker

    JavaScriptのユニットテストをJenkinsとかでCIしたいとき、PhantomJSで実行するのもいいけどやっぱりChromeとかFirefoxみたいな実際のブラウザでテストしたい。でも環境作るのめんどくさいよなーと思ってたけどXvfbを使うとChromeとかFirefoxが動くのでLinux版のChromeとFirefoxだけだとわりと簡単に環境つくれた。 Xvfbというのは画面入出力をシミュレートするやつでデスクトップ環境を用意しなくてもChromeとかFirefoxとかが動かせるやつ。 OSはUbuntsの12.04(precise64)で試した。 まずXvfbを入れる。 $ sudo apt-get install xvfb 次にFirefoxを入れる。これもすぐ入る。 $ sudo apt-get install firefox Chromeは一手間必要だけどわりとすぐ入

    Ubuntu上でXvfbを使ってJavaScriptのユニットテストをChromeとFirefoxで実行する - Webtech Walker
  • 第5回Jenkins勉強会に行って来ました #jenkinsstudy #jenkins - プログラマでありたい

    昨日、第5回Jenkins勉強会に行って来ました。初めて行ったのですが、規模も大きく内容も盛り沢山でかなり勉強になりました。今までJenkinsは余りコアな使い方をしていないので、しばらく勉強してレベルアップしたいと思います。発表は全部で3つで、コアな話あり、自動化に対する考え方あり、ネタありとバランスがとれていて素晴らしかったです。関西でこんなに層の厚い発表会が聞けるというのは、素晴らしいですね。 Jenkinsプラグイン開発的な何か matuyujiさん Jenkinsのプラグインを作る為の最初の一歩の解説です。話を聞いていたら、割と簡単にプラグインを作れるような感じがして来ました。AWS連携で幾つか作りたいのがあるので、試しに挑戦してみたいと思いました。 Jenkins plugin memo from Kiyotaka Oku 執事にたけぼうきを持たせよう matuyujiさん J

    第5回Jenkins勉強会に行って来ました #jenkinsstudy #jenkins - プログラマでありたい
  • AWSのIPの再利用間隔が短い為に起こる問題。

    IPの再利用間隔が短すぎるために、発生するセキュリティリスク。 IPが変わって、来送られるべきでないホストcookieも送出してしまう。 関連) クラウド時代はDNS Pinningが落とし穴になる 続きを読む

    AWSのIPの再利用間隔が短い為に起こる問題。
  • UIだけでもデザインできる理由

    UI(ユーザーインターフェイス)は、いつの頃からか魅力的な視覚要素が含まれた GUI として語られるほうが多くなりました。これはある種、デザインを装飾としてのみ捕われてしまう状況と似ているところがあります。 では、ユーザーインターフェイスとは一体何なのか。スケッチしてみました。 昔からあるデスクトップでも、Google Glass のような未知のデバイスでも、人とコンピュータの関わりは必ずといっていいほど発生します。 人が何かをインプットすることで、コンピュータは処理したデータをアウトプットして人に伝えます。ユーザーインタフェイスとは、人のインプットを助長したり、コンピュータが処理したデータを人が理解できるようにアウトプットする役割を果たします。つまり、人が操作するコンピュータとの関わりを円滑なものにするのがユーザーインターフェイスの基礎と捉えることができます。UI を HCI (Huma

    UIだけでもデザインできる理由
  • node.jsのいろいろなモジュール29 – RailsライクなMVCフレームワーク「sails」 | DevelopersIO

    sailsフレームワーク nodeにはこれでもかというくらい新しいフレームワークがでてきてます。 そして、フレームワークの中でもruby on railsみたいなフレームワークがたくさんあります。 以前、compoundjs(railwayjs)というフレームワークを紹介しましたが、 このsailsというフレームワークも、この系統のフレームワークで、scaffoldやモデルのgenerate機能を持っています。 また、Railsとは違い、JSON APIが組み込まれているのが特徴です。 sailsの組み込みコマンドでモデルを作成すると、そのもモデルに対するJSON形式のCRUD用URLが使えるようになります。 今回はセットアップからサンプルアプリ作成を試してみましょう。 環境構築方法 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.7.5 Node.js : v0

    node.jsのいろいろなモジュール29 – RailsライクなMVCフレームワーク「sails」 | DevelopersIO
  • オープンソースのWebアプリ開発向けコードエディター「Brackets」Sprint 23が公開

  • クラスメソッド採用サイト

    私たちの特徴 自分たちのやりたいことが お客様の価値に繋がっていく。 クラスメソッドはそんな会社です。 私たちは2004年の創業以来、ずっと変わらずお客様と新しいビジネスを創りだすこと、これまでにない新しい価値を提供することを使命としてきました。

    クラスメソッド採用サイト
  • 先生怒らないからリュウミンは手を挙げなさい - 帰ってきた💫Unicode刑事〔デカ〕リターンズ

    IVSファンの皆さん、こんにちは。 いえ、ぜんぜんファンとかじゃないですから。 『Unicode IVS/IVD入門』(田丸健三郎、小林龍生)の目玉と言えるのが、表2-7の「Windows 8におけるJIS X 0208:1990字形と異体字セレクター」だよね。 そうなんですか? Microsoftの人が執筆しているIVSなんだから、焦点は当然Windows 8のIVS対応。皆さんそこが知りたいわけでしょ? なるほど。 そこで、この表2-7に突っ込んでみよう、と。 やっぱり突っ込むんだ……。 表のタイトルは大切だから、しっかり頭に入れておくといいぞ。「Windows 8におけるJIS X 0208:1990字形と異体字セレクター」だ。 はいはい。Windows 8ではIVSをどのように駆使して「Vistaで変更される以前のMS明朝のグリフ」を表示するのか……ってことですね。 でさ、「字形

    先生怒らないからリュウミンは手を挙げなさい - 帰ってきた💫Unicode刑事〔デカ〕リターンズ
  • Amazon LinuxとZabbixで始める運用監視 - GeekFactory

    Amazon LinuxとZabbixで始める監視サーバ - GeekFactoryのリメイクです。Amazon Linux 2011.09に合わせて書き直しました。 必要なもの Amazon EC2 Instance Amazon Linux 2011.09 Amazon Linux 2011.09からFedora EPEL(Extra Packages for Enterprise Linux)が使えるようになったため、Zabbixのインストールがとても簡単になりました。 sudo yum install --enablerepo=epel \ zabbix \ zabbix-agent \ zabbix-server \ zabbix-server-mysql \ zabbix-web \ zabbix-web-mysql はい、終わりです。EPELが気に入った方は /etc/yum

    Amazon LinuxとZabbixで始める運用監視 - GeekFactory
  • Windows上のApache httpdでドメイン認証を使う - GeekFactory

    mod_auth_sspiを使うとドメインアカウントによる認証が可能です。例えば、Active Directory環境にあるSubversionリポジトリの認証をシングルサインオン化できたりします。 使い方はとても簡単です。 ドメインに参加済みとします。 Apache httpdをインストール済みとします。 http://sourceforge.net/projects/mod-auth-sspi/ からアーカイブを入手します。 アーカイブに含まれる mod_auth_sspi.so をApache httpdのモジュールディレクトリにコピーします。 設定ファイルに以下を追加し、Apache httpdを再起動します。 # サイト全体にWindows認証を適用する # (最小限の設定です) <Location /> AuthType SSPI SSPIAuth On SSPIAuthori

    Windows上のApache httpdでドメイン認証を使う - GeekFactory
  • オフラインキャッシュでどこでもWeb開発 - GeekFactory

    javascript, html5Google Libraries API等からライブラリを読み込んでいる場合、オフラインの開発環境でスクリプトが動かなくて困ることがあります。そんな時はブラウザのオフラインキャッシュが便利です。HTML5のApplication Cachesを使うとオフラインキャッシュを制御できます。Application Cachesは来、Webサービスをオフラインで提供するのための仕組みですが、オフラインで開発するための仕組みとしても使えます。Application Cachesは以下のようにして使います。マニフェストファイルにキャッシュしたいリソースのURLを書く。マニフェストファイルのContent-Typeを text/cache-manifest に設定する。Webページのhtml要素にマニフェストファイルを指定する。Webページでマニフェストファイルを指定

  • 第5回TFSUGに参加しました - GeekFactory

    4月13日 第5回 TFSUG:ウォーターフォールからアジャイル、リーンへ #tfsug(東京都) に参加しました。Evernoteのメモを貼り付けておきますので、参考になれば幸いです。書いたらまずいとかおかしい部分がありましたら教えてください。 @SHIBAO800 さんの後半は流れが速すぎてメモが取れなかったので、認定スクラムマスターからみっちり教育を受けて出直しますね。。 4/13 (金) 19:00-20:45 日マイクロソフト品川社 TFS de アジャイルを書いたわけ @libaty さん 開発支援のお仕事 とある開発案件 自社パッケージ開発 流れないウォーターフォール ステイクホルダーの複雑な関係 Scrum 1スプリント2週間、1リリース4スプリントで計画 プラクティス(検討中含む) にこにこカレンダー KPT かんばん ペルソナ インセプションデッキ TDD ペア作業

    第5回TFSUGに参加しました - GeekFactory
  • インフラ寄りのお仕事のススメ - Geek Not Found

    SIerみんな大好きはてなブックマーク - ござ先輩ノートにサーバ構築のブクマが増えてきました。そろそろサーバ構築のエントリが出現するかもしれませんね!ふと、3月に書いたエントリを思い出しました。アプリケーション層のエンジニアが性能や信頼性の観点でシステムを俯瞰できると、今まで気づかなかった問題が見えてくると思います。Webサービスでもそれは変わらないと思います。どんなWebサービスを提供するにしても、プログラミング以外に知っておくべきことはあります。http://d.hatena.ne.jp/int128/20090314/1237005803逆もまたしかりです。アプリの存在を無視したインフラエンジニア当にタチが悪いです。彼らはアプリの実装が悪いと言ってすぐに仕様変更を言い出します。おっと、話が逸れた。インフラエンジニアはアプリケーションエンジニアに比べて圧倒的に有利な点があります。

  • URI Template JSを使って簡単にURIを組み立てる - GeekFactory

    JavaScriptでURIを組み立てる時、文字列の連結で頑張ったりしてませんか? var detail = 1; var products = ['iphone5', 'nexus7']; products.forEach(function (product) { $.get('/products/' + product + '?detail=' + detail).done(/* ... */); }); RFC6570 の実装である URI Template JS を使うと、簡単にURIを組み立てることができます。 使い方 Webアプリでの使い方を説明します。 まず、URI Template JS にある uritemplate.js を読み込みます。 <script src="/js/uritemplate.js"></script> UriTemplate.parse() でテン

    URI Template JSを使って簡単にURIを組み立てる - GeekFactory
  • Gradle タスクの直列実行を Collection.inject() で書いてみる - GeekFactory

    非同期処理の直列実行を Array.reduce() で書いてみる - GeekFactory と同じことを Gradle (Groovy) でやってみます。 Gradle で複数のタスクの依存関係を定義するケースを考えます。Task.dependsOn を使って複数のタスクを指定した場合、タスクの順序は保証されません。例えば、下記のように3つのタスクに対して依存関係を定義してみます。 task somethingA << { println 'A' } task somethingC << { println 'C' } task somethingB << { println 'B' } task something { dependsOn somethingA, somethingC, somethingB } something タスクを実行すると下記のようになります。depend

    Gradle タスクの直列実行を Collection.inject() で書いてみる - GeekFactory
  • gradle-ssh-plugin-0.1.0を公開します - GeekFactory

    GradleでSSHを使う際に便利なプラグインを作ったので公開します。複数のサーバでコマンドを実行したりファイルを転送したりするのを簡潔に記述できます。 https://github.com/int128/gradle-ssh-plugin 現在のバージョンは最小限の機能しか実装していませんが、今後は様々なケースに柔軟に対応できるように開発していくつもりです。 gradle-ssh-pluginの使用例 apply plugin: 'ssh' remotes { web01 { host = '192.168.1.101' user = 'jenkins' identity = file('config/identity.key') } } task reloadMasterServer(type: SshTask) { session(remotes.web01) { execute '

    gradle-ssh-plugin-0.1.0を公開します - GeekFactory
  • http://d.hatena.ne.jp/int128/20080516/1210954390

  • CSV形式の試験データからSeleniumテストケースを生成 - GeekFactory

    Selenium IDEを使うと画面試験を自動化できて便利です。特にSelenium IDEはFirefoxのアドオンになっており、かなり機動性が高いと言えます。ちょっとした画面試験にはもってこいです。 ただ、Selenium IDEには弱点もあります。値だけ変えて同じシナリオを繰り返し使いたいとき、値を一つ一つ書き換える必要があります。Aを入力したとき、Bを入力したとき、...というテストケースを自動生成できれば便利と思い、Selenium Table Generatorを作ってみました。 Selenium IDE テストケース作成支援ツール - Selenium Table Generator シナリオの作成 Selenium IDEを起動してシナリオを作成します。シナリオとは例えば、 テキストボックスにtestdataを入力し、検索ボタンを押す。遷移先のページのテキストボックスにte

    CSV形式の試験データからSeleniumテストケースを生成 - GeekFactory
  • 第10回 TFSUG に参加しました - GeekFactory

    7月13日 第10回 TFSUG:ざっくりわかるScrum and Team Foundation Server #tfsug(東京都) 19:00-21:00 日マイクロソフト品川社 「ざっくりわかる SCRUM AND TEAM FOUNDATION SERVER」 講師は @ryuzee さんです。スライドに書いてないトークを中心にメモしたので公開します。後でスライドも公開されるそうです。 アジャイルの適用領域 ビジネスが速くなった! 新しいことにチャレンジする必要が出てきた! 不確実性に対応する ウォーターフォールの適用領域 対象のドメインが変化しない やったことのある領域 アジャイルの考え方 スコープとリソースを総量規制する。 優先順位は状況によって変わる。 優先度はアンチパターン。優先順位にする。 無駄なものを作ってはいけない。 頻繁に確認と調整を行うので、無駄なものを作ら

    第10回 TFSUG に参加しました - GeekFactory
  • GradleでAPT (Annotation Processing Tool) を使う - GeekFactory

    GradleでAPTを使うにはAntのaptタスクを利用します。slim3-genをどうやって組み込むか小一時間悩んだので残しておきます。 やり方は色々あると思います。私は以下の方針でやってみました。 新しいソースセット(apt)を定義します。 APTコンパイルタスク(compileAptJava)を定義します。 タスクの入力はプロダクトコード(sourceSets.main.java.srcDirs) タスクの出力はAPT出力(sourceSets.apt.output.resourcesDir) ant.aptではプリプロセスだけでコンパイルは実行しません。APT出力はプロダクトコードのコンパイルタスクでコンパイルします*1。 プロダクトコードにAPT出力を追加します。 プロダクトコードのコンパイルタスク(compileJava)にはAPTコンパイルタスク(compileAptJava

    GradleでAPT (Annotation Processing Tool) を使う - GeekFactory
  • GeekFactory[B!]新着記事・評価 - はてなブックマーク

    キーボードショートカット一覧 j次のブックマーク k前のブックマーク lあとで読む eコメント一覧を開く oページを開く ✕

  • 今やれることをやる、後で困らないことは後でやる - GeekFactory

    見積もり工数は、あくまでも個人的にざっくりベース(SI用語)で出した数字なので、ズレがあるわけで。事前にタスクを割り振る場合は見積もり時間を基準にする必要があると思うけど、見積もりのズレや個々人の状態によってかなりブレるのが普通で、途中でタスクの振り直しが発生する。絶対に。ということで、全体を事前に決めず、「今からどれをやろうか」を決めながら進めるようにした。 http://d.hatena.ne.jp/katzchang/20090924/p1 SIで不毛なのは完全なスケジュールの作成だと思います。不確定な要件から引いたスケジュールで「計画と実績の乖離」とか言われてもなぁ、というのは同感。 いま私が持ってるチームも同じような進め方をしていますが、インフラまわり*1を担当していることが大きな違いです。基的にアプリ開発チームからの要望や苦情で50%以上の工数を使い切ってしまうので、「今やれ

    今やれることをやる、後で困らないことは後でやる - GeekFactory
  • Amazon LinuxとZabbixで始める監視サーバ - GeekFactory

    クラウドから自宅サーバを監視するのがマイブームです。ここではAmazon EC2にZabbixをインストールする方法を紹介します。 前提条件 EC2上でLinuxインスタンスを起動します。今回は Micro instance, Amazon Linux x86_64 を使用しました。以下が正常に動作するようにしておいてください。 Apache httpd PHP MySQL server EC2と自宅サーバの間はVPNトンネルを張るようにしてください。OpenVPNがおすすめです。また、アラートメールを送信できるよう、sendmailやPostfixの設定を済ませておいてください。 インストール準備 Zabbixのインストールではいくつかの依存パッケージが必要になりますが、ほとんどはyumでインストールできます。例外として、iksemelはAmazon Linuxに用意されていないため、Z

    Amazon LinuxとZabbixで始める監視サーバ - GeekFactory
  • 第4回TFSUG: とある案件におけるTFS運用事例 - GeekFactory

    2月20日 第4回 TFSUG:TFS導入の両輪(開発と運用) #tfsug(東京都) でお話しさせて頂きました。昨年ブログに書いた内容を中心に、構成管理や継続的インテグレーションの基的な内容をご説明しました。 遅くなりましたが、スライドを載せておきます。品川のMS社ビルは綺麗でした。座席もゆったりしてるし。まさか自分がスクリーンの前に立つとは思ってもいませんでした。このような機会を頂きましてありがとうございました。 speakerdeck.com ※スライドの一部を加筆修正しています。ご了承ください。 他力願ですみませんが、会場で質問した内容をタイムラインから引用しておきます。@yukio_saitoh さんありがとうございます! 2012年2月20日 - 19:16 ここで場内質問。 シェアポで情報共有なさってる方 → 皆無。。。  #tfsug 2012年2月20日 - 19:

    第4回TFSUG: とある案件におけるTFS運用事例 - GeekFactory
  • Apache CXFでRESTサービスをさくさく作る - GeekFactory

    Apache CXF で REST サービスをさくさく作ってみます。 自分で用意するもの。 Java 6 Eclipse Indigo m2e (Maven integration for Eclipse) Maven が用意してくれるもの。 Apache CXF Spring JUnit Apache Tomcat 新しいプロジェクトを作る [New]-[Project...]-[Maven Project] で Archetype に cxf-jaxrs-service を選びます。すると、 Apache CXF ベースの新しいプロジェクトが生成されます。 とりあえず実行してみる 生成されたプロジェクトはすぐに実行可能です。私の環境では POM エディタでエラーが出ていましたが、Maven は問題なく動きました。 プロジェクトの [Debug As]-[Maven build...]

    Apache CXFでRESTサービスをさくさく作る - GeekFactory
  • ソフトウェアメトリクスによる品質分析の実案件への適用 - GeekFactory

    ソフトウェアの品質を分析する指標の1つにソフトウェアメトリクスがあります。現在、実案件の品質分析に適用しているのですが、開発者へのヒアリング内容とメトリクスの傾向が合致していて、非常に面白いです。 ソフトウェアのメトリクスとは、ソフトウェアを計測する方法およびその尺度のことを意味します。(中略)メトリクスを計測し、複雑過ぎるロジックや洗練されないパッケージ構成を見直すことで、バグが少なく保守性が高いソースコードを維持できるようになります。 (中略) メトリクスを用いると、特に以下の品質にかかわる問題を検出し、信頼性と保守性を高めることができます。 複雑なソースコードにはバグが潜在する可能性が高くなる 複雑なソースコードは読みづらく、テストもしにくくなる 複雑なクラス構造は理解するのが困難で、拡張性にも乏しくなる http://www.atmarkit.co.jp/fjava/rensai3

    ソフトウェアメトリクスによる品質分析の実案件への適用 - GeekFactory
  • システム開発においてその場で確認しながら進められることの重要性 - GeekFactory

    受託開発という一品モノを作るプロセスは質的に非効率であり、その非効率性をどうやって改善するかを議論したい、というのが昨日のエントリの主張です。外注 vs 内製というワイドショーはナンセンス。タイトルの付け方がかなり恣意的だったかもしれませんね :-) ITシステムの要件や仕様を伝達するには文字や図面では不十分で、口頭による説明を要することが質的な原因ではないかと思います。この原因を解決するには、文字や図面で表現するのを頑張る、もしくは発注側と受託側を(物理的にも組織的にも)近づけるという方法があるでしょう。 受託開発が抱える質的な非効率性に関する考察 - GeekFactory 一品モノを作るプロセスでは、人間の学習コストが無視できないほど大きくなります。すべてをドキュメント化して、ドキュメントを渡せばモノが出てくるような、工場のようなやり方では破綻しますよ。 興味深いご意見を頂きま

    システム開発においてその場で確認しながら進められることの重要性 - GeekFactory
  • 非同期処理の直列実行を Array.reduce() で書いてみる - GeekFactory

    jQuery 1.5から Deferred Object がサポートされて、AJAXのレスポンスは Deferred API を通じて受け取れるようになりました。例えば、下記のように $.post() の結果は .done() もしくは .fail() で受け取れます。 $.post('/reserve', {product: 'iPhone5'}).done(function () { console.info('iPhone5を予約しますた'); }).fail(function () { console.info('iPhone5を予約できなかった><'); }); これにより、複数のAJAXリクエストをすべて受信してから処理といった制約条件が書きやすくなりました。 var task1 = $.post('/reserve/1').done(); var task2 = $.post

    非同期処理の直列実行を Array.reduce() で書いてみる - GeekFactory
  • Windows上のJenkinsでドメイン認証を使う - GeekFactory

    Active Directory環境にあるJenkinsをドメイン認証(統合Windows認証)でシングルサインオン化する方法について説明します。 ここでのシングルサインオンは、ドメインアカウントでWindowsにログオンしていて、WebブラウザでJenkinsを開くと自動的にログイン済み状態になることを指します。シングルサインオンによって利用者の負担や共用アカウントの危険性を軽減できます。 前提 下記の環境で確認しています。 Windows Server 2008 R2 Apache httpd 2.2.22 (64bit) Oracle JDK 7u6 (64bit) Apache Tomcat 7.0.29 (Windows service installer) Jenkins 1.477 Active Directoryドメインに参加していること。 Apache httpdの設定

    Windows上のJenkinsでドメイン認証を使う - GeekFactory
  • 自分で手を動かさずに方式を決めること - GeekFactory

    ここ数日、自宅サーバの仮想化方式を決めるためにkqemu, Xen, Linux-VServer, jailやらを試していました。Webで評価記事がたくさんありますが、正直なところどれも実際に使ってみないとわからんなと思います。 自分で手を動かさずに方式を決められるか? サービスを作っていく上でどの技術(方式)を採用するか分かれ道があります。早い話が、Windows ServerにするかLinuxにするか、Javaにするか.NETにするか。方式を決めるには、必要な条件を洗い出し、どれがどう優れているかを評価します。 グラスと煎茶碗 ここに面白い喩えがあります。 方式としてどちらが優れているのかを、わかっていない人に説明するのって大変だよね。説明しないことはないけど手間はかかるし、そもそもなんでそんな上司が以下略。 例えば、グラスと煎茶碗、どちらも飲み物を給仕することは出来る。では、コーラを

    自分で手を動かさずに方式を決めること - GeekFactory
  • ソフトウェア工業化と職人化が待ち受ける世界 - GeekFactory

    生産性が 30 倍違うのであれば、バカプログラマー 30 人を雇うより、スーパープログラマー 1 人にサポートスタッフ 5 人つけたほうが安くていいものができるだろう。Ruby の開発でいえば、まつもとさんやささだ先生にサポートスタッフ (あるいは秘書とか内弟子とか) をつけて、極力彼らが雑用をせずに Ruby 開発に専念できるような環境を整えるべきではなかったか。 http://d.hatena.ne.jp/kwatch/20090204/1233769288 基に立ち返って、ソフトウェア工学の目的とはなんだろう。それは「ソフトウェア開発が産業として安定成立する事」だろう。そこでこれを、大目的とする。 では、さらに考えて「産業として安定成立」するにはどうしたらいいだろうか。 大目的を成立させる為の、最低限の条件として考えられるのが、 ・条件1:成果物の品質安定 ・条件2:関連人材の安定

    ソフトウェア工業化と職人化が待ち受ける世界 - GeekFactory
  • オブジェクト指向設計とRDBの狭間で - Geek Not Found

    ソフトウェア開発SIerで作られる業務アプリケーションでは、オブジェクト指向設計ではなくRDBベースの設計が主流です。一方で、オープンソースのアプリケーションでは積極的にオブジェクト指向設計を取り入れているものは少なくありません。このギャップは一体何でしょうか。データベースへの依存度が高いアプリケーションは、オブジェクト指向設計を適用するのが難しいように思います。オブジェクト指向設計の前身はER設計なのでどちらも考え方は共通していますが、データアクセスの方法がまったく異なります。オブジェクトに対する操作をSQLに置き換えようとすれば、オブジェクトの性質に矛盾するのは明白です。それゆえ、データベースへの依存度が高いアプリケーションはRDBのデータアクセス方法に影響されてしまいます。今時のプログラマにはオブジェクト指向は必須、常識、みたいな言説はよく聞きます。しかし、煽りでもなんでもなく、実の

  • Seleniumで繰り返し作業を効率化する - GeekFactory

    Seleniumといえばソフトウェア開発を連想する人が多いと思いますが、日常の繰り返し作業を効率化するツールとしても活用できます。毎週の会議室予約などのWebブラウザから単調な操作を繰り返す作業は、Seleniumでまとめて処理しましょう。 ここでは、リンク切れになったWebページをGoogleの検索結果から一括削除する方法をご紹介します。 (1)操作の記録 Googleの検索結果からリンクを削除するにはこのページでURLを申請します。申請が承認されるとリンクが削除されます。リンク先が404 Not Foundを返さない場合は承認が却下されます。たくさんのリンクを削除するには、下の画面でURLを入力する作業を繰り返さなければなりません。 まずは、1回の申請操作を記録しておきます。メニューの[ツール]→[Selenium IDE]でSeleniumを起動します。起動時には右上の赤いボタンが押

    Seleniumで繰り返し作業を効率化する - GeekFactory
  • 物理マシンを仮想マシンに移行する手順のまとめ - GeekFactory

    Linux KVM(Kernel-based Virtual Machine)の物理マシンを仮想マシンに移行する手順をまとめました。すでにある物理マシンを仮想マシンに移行する場合を考えます。仮想マシンを実行するための環境はハイパーバイザと呼びます。 ディストリビューションに依存しますが、基的にはカーネルを取り替えるだけで動きます。 カーネル KVMを実現するには下記の2つが必要です。ディストリビューションによっては標準で用意されています。 ハイパーバイザカーネル ゲストカーネル 両者はハイパーバイザの/bootに入れておくとよいです。KVMの起動時にカーネルを指定できるので、仮想マシンにカーネルイメージが入っていなくても大丈夫です。 kvm -kernel /boot/kvm.current/vmlinuz -append root=/dev/vda ちなみに、ハイパーバイザカーネルは下

    物理マシンを仮想マシンに移行する手順のまとめ - GeekFactory
  • TCPカーネルパラメータによる障害復旧時間の短縮 - GeekFactory

    クラスタ構成のサーバでは、障害発生後にクライアントがすぐに復旧しない場合があります。サーバ側がフェイルオーバした後にクライアント側が再接続するまでの時間を短くする方法を紹介します。 クライアントからサーバに接続するとソケットはESTABLISHEDになります。もしESTABLISHEDになったソケットで正しくパケットが送信されなかった場合、OSは再送を試みます。再送に失敗してソケットをクローズするまでの時間はOSの設定によります。 OSがTCP接続の異常を検知してからクローズするまでの時間を短くするには3つの方法があります。 パケットの再送回数を少なくする。 TCPレイヤでKeep Aliveパケットを送信する。この方法はTCP Keep Aliveに対応しているアプリのみ可能。 アプリケーションレイヤでKeep Aliveパケットを送信する。この方法はNullパケットを投げる等に対応して

    TCPカーネルパラメータによる障害復旧時間の短縮 - GeekFactory
  • GeekFactory[B!]新着記事・評価 - はてなブックマーク

    キーボードショートカット一覧 j次のブックマーク k前のブックマーク lあとで読む eコメント一覧を開く oページを開く ✕

  • 手順どおりにやるだけでソフトウェアを製造できるようになるのか? - GeekFactory

    ユーザー企業がイノベーション・エンジンとして動くようなそんな仕組みが絶対必要になると思う。(中略)僕が考えられるオプションとしては「内製回帰」か「人材サービス前提からSaaS型の業務アプリ開発への転換」の2つかな。 http://d.hatena.ne.jp/gothedistance/20080529/1212033139 しばらくid:gothedistanceの記事をチェックしていなかったのですが、私の先日の記事は二番煎じだったようです。素晴らしい考察です。脱帽。 もう少し引用させてもらいます。 個人に依存して良いことは限られています。業務システムには運用があって、いくら開発時に「超生産性高い技術者」が颯爽と現れ短期間でカットオーバーできたとしても、もうその技術者は戻ってこないわけで。それ、誰が面倒見るのよ、と。 http://d.hatena.ne.jp/gothedistance

    手順どおりにやるだけでソフトウェアを製造できるようになるのか? - GeekFactory
  • Kingfile Driven Developmentと継続的デリバリー - GeekFactory

    KDD(Kingfile Driven Development)は、キングファイルと大量の紙をコミュニケーション手段とする開発手法である。日のSI業界で広く導入されており、デファクトスタンダードとなっている。キングファイルの重厚感はエグゼクティブを中心に好印象を与えることが多く、顧客満足度の向上に貢献している。「顧客が最も欲しいのは重厚なキングファイルである(キリッ」と結論付けている調査レポートもある。 キングジム キングファイルSD A4S 青 1470アオ 出版社/メーカー: キングジムメディア: オフィス用品 クリック: 2回この商品を含むブログを見る もはや常識となっているKDDであるが、近年のシステム開発の複雑化や短期化に伴い、キングファイルの出荷(デリバリー)に要する時間が問題視されるようになってきた。多くのプロジェクトではプロジェクトもしくは工程の最終段階にキングファイルを

    Kingfile Driven Developmentと継続的デリバリー - GeekFactory
  • How to install Apache Tomcat 7.0 on Linux - GeekFactory

    公式ドキュメントに従って Apache Tomcat 7.0 をインストールしてみました。 前提条件 Scientific Linux 6.3 x86_64 Oracle JDK 7u7 x86_64 Apache Tomcat 7.0.30 gcc, make などのビルドツールが必要です。 実行ユーザ 実行ユーザを作成します。ここでは tomcat:tomcat とします。 sudo useradd -d /var/lib/tomcat -s /sbin/nologin -r tomcat id tomcat sudo mkdir -p /var/lib/tomcat sudo chown -R tomcat:tomcat /var/lib/tomcat ls -l /var/lib/tomcat Directory structure アーカイブを展開します。ここでは /opt/to

    How to install Apache Tomcat 7.0 on Linux - GeekFactory
  • ロードバランサの内側でApache Tomcatを使うときに気を付けること - GeekFactory

    多くのWebサービスでは、ロードバランサやApache httpdでアプリケーションサーバとの通信を中継しています。冗長化とアプリケーションレイヤの隠蔽が目的です。このような環境でApache Tomcatを使う場合、開発環境との違いに気を付ける必要があります。 例えば、下記の構成を考えます。 ロードバランサ(LB) → Webサーバ → APサーバ https://www.example.com/ http://10.0.0.15/ ajp://172.16.0.31/ まず最初に、LBより内側で発信元のIPアドレス(ソースIP)を取得できるよう設定すべきです。これがないと内側でログが取れません。大抵はデフォルトでアドレス変換しない設定になっていると思いますが、LBの内側IPアドレスに変換する設定もあるので注意が必要です。 Apache httpdのmod_proxy_ajpを使う場合、

    ロードバランサの内側でApache Tomcatを使うときに気を付けること - GeekFactory
  • 公開SSHサーバの安全性を高める5つの設計 - GeekFactory

    出先からサーバをメンテナンスするには、SSHサーバをインターネットに公開する必要があります。SSHはデフォルトではIDとパスワードだけでログインできてしまうため、狙われやすい侵入経路の一つです。 ここではSSHサーバの安全性を高める設計を挙げてみます。 公開するポートを22番から変更する。 他サーバから独立したネットワーク(DMZ)にSSHサーバを配置する。 SSHサーバの表裏にファイアウォールを設置し、裏側を通って他サーバにログインする。 ログインシェルをchroot-jailで実行し、可能なことを制限する。 認証ログを監視する。 定期的にセキュリティアップデートを適用すること、推測されにくいIDやパスワードを使うことは言うまでもありません。地道な運用作業は重要です。 VMにおける実現方式 自宅サーバのようにスペースや静音性に制約がある環境では、独立したサーバを設置するのは困難です。また

    公開SSHサーバの安全性を高める5つの設計 - GeekFactory
  • Webサーバ勉強会で発表しました - GeekFactory

    Webサーバ勉強会に参加しました。 speakerdeck.com 渋谷マークシティにあるきれいなオフィスにお邪魔しました。夜景がきれいでした。懇親会楽しかったです! 皆様ありがとうございました。

    Webサーバ勉強会で発表しました - GeekFactory
  • nginxでLDAP認証を使う - GeekFactory

    Webアプリや共有フォルダなどの認証を必要とする場面が増えてくると、ユーザ管理のコストが無視できなくなります。Active DirectoryやLDAPでIDを統合すると、運用者はユーザ管理が楽になり、利用者はシングルサインオンで快適になります。たとえ自分しか使わない環境であっても、一括でパスワード変更できたり、簡単に認証を設定できるメリットは大きいでしょう。多くのアプリがLDAP認証に対応しています。 この記事ではnginxLDAP認証を使う方法を説明します。.htpasswdによる認証とは異なり、IDとパスワードはWebサーバでは管理しません。LDAPサーバのリポジトリで管理します。 今回は以下のミドルウェアを使いました。 Amazon Linux 2011.9 OpenLDAP 2.4.23 nginx 1.0.12 nginx-auth-ldap LDAPを準備する OpenLD

    nginxでLDAP認証を使う - GeekFactory
  • 90年代と21世紀の越えられない壁 - GeekFactory

    実質的な仕様承認者となることが多いであろう30代後半の人は、1990年代のクライアントサーバの経験で生きている。業務トランザクションやGUIの考え方は、VBに代表されるクライアントプログラムがベースになっている。業務データが入力されてからコミットされるまでプログラムは動いているし、画面の操作はイベントでやってくる。 これに対して、Webを当たり前のように使っている人たちはステートレスな世界に慣れているし、画面の操作はページ遷移を伴うことを前提にしている。HTMLで書かれたページに対してMouseOverだの再描画だの言っても噛み合わない。両者の間には越えられない壁が存在する。 まとめると、世代の違う人がレビューすると前提が違いすぎて話が噛み合わないケースがある。そんなことを感じた今日この頃。企業内システムはまるで時計が止まった世界にあるようだ。

    90年代と21世紀の越えられない壁 - GeekFactory
  • Rhinoを使って簡単に本番環境の挙動を確認する - GeekFactory

    開発環境ではうまく動くのになぜか番環境で動かないとか、番環境での挙動が分からんといったとき、いちいち番環境にテストコードをデプロイして確認するのは面倒ではありませんか?Rhinoを利用して動的にコードを実行するツールを使うと、番環境での挙動を簡単に確認できます。 基的な仕組みは、WebページからPOSTされたJavaScriptをRhinoで実行するだけです。 import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; // リクエストを処理する部分 String js = param("js"); Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); String

    Rhinoを使って簡単に本番環境の挙動を確認する - GeekFactory
  • GeekFactory[B!]新着記事・評価 - はてなブックマーク

    キーボードショートカット一覧 j次のブックマーク k前のブックマーク lあとで読む eコメント一覧を開く oページを開く ✕

  • Gradleのマルチプロジェクト構成を運用してみた - GeekFactory

    Gradleでマルチプロジェクト構成を運用してみて、気付いた点を書いてみます。 以下の環境で確認しています。 JDK 1.7 Eclipse 4.2 Subversive, SVNKit 1.7 Gradle IDE 3.0 Jenkins マルチプロジェクト構成については下記が参考になります。 第7章 Javaクイックスタート 第56章 マルチプロジェクトのビルド Log In - Codehaus 必要性 マルチプロジェクト構成は複数のコンポーネントや成果物を扱う必要がある場合に使います。いくつものEclipseプロジェクトをいじったりビルドスクリプトを整備するのはかなり面倒なので、可能な限りシングルプロジェクト構成をおすすめします。Gradleにはソースセットという概念があるので、うまく使い分けるとよいと思います。 コンポーネントをマルチプロジェクトで分離するかソースセットで分離する

    Gradleのマルチプロジェクト構成を運用してみた - GeekFactory
  • タスクチェーンのフレームワーク - GeekFactory

    App Engineでは実行時間に制限があるため、長時間にわたる処理を行う場合は複数のタスクに分割する必要があります。この手法は一般にタスクチェーンと呼ばれています(たぶん)。 タスクチェーンを抽象化してフレームワークにできるか考えてみました。 タスクチェーンを実現するには、タスク間のデータの受け渡し、タスクの一意性保証を実装する必要があります。 Driver タスクチェーンを開始するためのサーブレットです。Driverを経由せず、Webブラウザやcronからタスクチェーンを開始することも可能です。 Task タスクチェーンにおけるタスクを抽象化したものです。 Taskは入力として Map を受け取り、出力として次のTaskに Map を渡します。 public interface Task { /** * Process of the task. * @param input data

    タスクチェーンのフレームワーク - GeekFactory
  • 47,000件のbatch putを16秒で処理 - GeekFactory

    以前に 大量のエンティティを処理するデザインパターン - GeekFactory を紹介しましたが、シングルスレッドのバッチ処理なのでスループットが頭打ちになる問題がありました。コンカレントに処理する方法を思いついたので実装してみました。 シングルスレッドではこんな流れでした。 S3QueryResultListでn件のエンティティを取得する。 エンティティをバッチ処理する。 t秒以内であれば上記を繰り返す。 次のタスクにカーソルを渡す。 ここで、エンティティを取得するタスク(Splitter)とエンティティをバッチ処理するタスク(Mapper)を分けてみます。 Splitterタスク S3QueryResultListでn件のエンティティを取得する。 エンティティをmemcacheに入れて*1、Mapperタスクに渡す。 t秒以内であれば上記を繰り返す。 Mapperタスク memcac

    47,000件のbatch putを16秒で処理 - GeekFactory
  • 受託開発のコスト意識 - GeekFactory

    システム開発では、開発を担当する会社と運用を担当する会社は異なることが多く、場合によってはユーザ企業内でも部門が違ったりします。一般に、開発コストをケチると運用コストは増加する傾向にあります。例えば、リファクタリングによりソースコードの保守性を高めると開発コストはかさみますが、保守コストは下がります(下がることが期待される)。冗長化により耐障害性を高めると運用コストは下がりますが、構築コストはかさみます。 保証すべきことを明文化したものが要件定義書やSLAですが、どこまでリファクタリングすればよいか、どこまで冗長化すればよいかといった微妙なさじ加減は、最後は現場の判断になっていると思います。エンジニアはここまでやるべきという心を持って仕事しているところはいつも感心します。日人は真面目なのでしょうね。 ところが、プロジェクト炎上したり工数削減圧力が高くなったりすると、現場の判断はすぐに逆

    受託開発のコスト意識 - GeekFactory
  • 仕様書やプログラムを書く大変さ - GeekFactory

    大御所のブログを引用するのはおそれ多いのですが、それでも元請けの視点で書きたいことがあります。 例えば、誰が書いても同じコードにするために、プログラム設計書(内部設計書)を今、書かせているとしたら、そんな無駄なものはやめたほうがいいと思う。 プログラム設計書は、自然言語で書きます。プログラムは、プログラミング言語で書きます。どっちの言語が、プログラムを書くのに適しているかといえば、誰が考えても、プログラミング言語ですよね。 http://d.hatena.ne.jp/higayasuo/20080414/1208155494 プログラム設計書を作るのは「誰が書いても同じコードにするため」だけでなく、元請けがレビューするためでもあります。元請けがプログラミング言語を読めないので、日語に落としてレビューします。コードを書いてからプログラム設計書を作ることもあります。 プログラムをいきなりかけ

    仕様書やプログラムを書く大変さ - GeekFactory
  • プログラミングを自動化できないたった一つの理由 - GeekFactory

    自動車産業を始めとする製造業では高度な自動化が行われているが、ソフトウェア開発は未だ自動化が行われていない。数年前から、SIerの興味は建設業から製造業に移っている。 ソフトウェア開発という「家内制手工業」をせめて「工場制手工業」へ発展させ、ゆくゆくは「機械制大工業」に進化させようという試みの多くも、同様の誤解がベースになっているわけで、「ソフトウェア開発」を「モノ作り」と見なす誤解は、広く蔓延してしまっているのかもしれない。 http://blog.gcd.org/archives/50603640.html 実に広く蔓延している。ホント失望したよ。 自然言語で記述された要件を仕様に落とし込む作業は、人でなければ不可能である。仕様を記述する行為そのものがプログラミングであり、概念を構造化して言語に書き出すことがプログラミングだ。多くの(偉い)人が勘違いしているが、自然言語をプログラミング

    プログラミングを自動化できないたった一つの理由 - GeekFactory
  • Selenium Generator - GeekFactory

    以前に作ったものをリメイクしてみました。Selenium IDEで作成したシナリオを繰り返し、バリエーションテストのテストケースを生成するツールです。 Selenium Generator - http://lab.hidetake.org/selenium-table/ 3年前に書いたコードはprototype.jsを利用していましたが、今回はjQueryに移行しました。jQueryベースの方が読みやすい気がします。これがまた3年経ったら技術的負債に化けてるかもw

    Selenium Generator - GeekFactory
  • 他ライブラリに依存せずにXML設定ファイルを読み込む方法 - GeekFactory

    ライブラリをパッケージして配布する時、なるべく依存するjarを減らしたいことがあります。Mavenを使えば何ともないのですが、敷居を下げる意味では「1つのjarだけ入れれば動きます」が望ましいと思います。*1 Commons DigesterやJAXBを使うと、XML設定ファイルの読み込みが飛躍的に簡単になります。一方で、ライブラリを配布する時は同梱するか注意書きを加える必要があります。そこで、他ライブラリに依存せずJREだけでXMLを読み込む方法を考えてみました。 Java 5から標準になったXPathを使うと、XMLから任意のノードを簡単に取り出すことが可能です。XPathクラスをそのまま使うと記述量が増えるので、XPathをラップするクラスを用意します。 package org.hidetake.util.xml; import java.io.IOException; import

    他ライブラリに依存せずにXML設定ファイルを読み込む方法 - GeekFactory
  • GitLabで始めるプライベートリポジトリのある生活 - GeekFactory

    どこでもいつでもGitと一緒。 GitLabはオープンソースのGitHubクローンで、Amazon EC2やさくらVPSなどにプライベートリポジトリを立てて使えます。 プライベートリポジトリのある生活はかなり快適です。非公開のコードや各サーバのetc-filesなどをプライベートリポジトリに入れておき、GitHubのようなWeb UIで管理できるのは便利です。Eclipseの場合は公開リポジトリとプライベートリポジトリを組み合わせて使うと便利です。 GitLabのインストールはちょっと手間がかかります。 The installation consists of 6 steps: Install packages / dependencies Install ruby Install gitolite Install and configure Gitlab. Start the web f

    GitLabで始めるプライベートリポジトリのある生活 - GeekFactory
  • jQueryのクロスドメインAJAXをIEに対応させる - GeekFactory

    XMLHttpRequest Level 2 に対応しているWebブラウザは、(ある条件下で)異なるドメインにAJAXリクエストを投げることが可能です。jQueryでは以下のように書けます。 $.ajax({ context: this, type: 'POST', url: 'http://www.example.com/hoge', /* 異なるドメイン */ data: something, dataType: 'json', success: function (v) { alert(v); } }); ただし、このコードは Chrome, Safari, Firefox 3.5+ でのみ動きます。IE 8+ で動かすには XMLHttpRequest の代わりに XDomainRequest を使う必要があります。jQueryは今のところ XDomainRequest に対応して

    jQueryのクロスドメインAJAXをIEに対応させる - GeekFactory
  • SSHとHTTPSでアクセスできるGitサーバの設計と構築 - GeekFactory

    (追記) この記事は公開から時間が経っており、内容が古くなっています。 稿では、すでにプライベートなWebサーバを運用している人向けにGitサーバの構築方法を説明します。ひと手間をかけるだけでGitサーバを構成できます。Webサーバがない人はGitHubでプライベートリポジトリを作った方が早くて安くて旨いかもしれません。 要件 以下の要件を考えてみます。 SSHでGitリポジトリにアクセスしたい。 HTTPSでGitリポジトリにアクセスしたい。 Webブラウザでリポジトリを閲覧したい。 Gitリポジトリには機密性の高い情報を格納する可能性がある。 具体的には、 git clone git@git.example.com:/something.git とか、 git clone https://myname@git.example.com/something.git とかしたいです。 Gi

    SSHとHTTPSでアクセスできるGitサーバの設計と構築 - GeekFactory
  • AppEngineで大量のエンティティを処理するパターン - GeekFactory

    App Engine上で大量のエンティティを処理するパターンをまとめてみました。 Concurrent Pattern 対象のエンティティをシャードに分割し、それぞれを並列に処理するパターンです。シャーディングを行うSplitterとエンティティを処理するMapperが並行して動きます。SplitterとMapperは独立したタスクであるため、memcacheを介してエンティティを受け渡します。 このパターンの利点は、エンティティの処理内容に関係なく一定のスループットを確保できることにあります。Mapperでどんなに長い処理を行ってもSplitterは淡々とシャーディングを続けるため、スループットに影響はありません。 Mapperの処理結果をmemcacheに突っ込み、別のタスクで集約することで、MapReduceのような処理も可能かなと思います。 Serialized Pattern 対

    AppEngineで大量のエンティティを処理するパターン - GeekFactory
  • Team Foundation Serverの運用事例と雑感 - GeekFactory

    ある案件でTeam Foundation Server(TFS)を使った時の雑感をまとめてみました。昨日のワンクリックデプロイ勉強会にインスパイヤされて書きました。参考になりましたら幸いです。アンチパターンも含まれていますので反面教師にして頂ければと思います。ああ恥ずかしい。 プロジェクトの性質 6ヶ月で要件定義から試験までやってリリース。開発チームは最大8名で年度末に解散。 R&D的な取り組みなので要件はほとんど見えておらず、最初の1ヶ月でプロトタイプを提供して当にやりたいことを検討した。(これ以上は割愛) アジャイルではない。一括請負契約のウォーターフォール。 顧客にはリッチクライアントアプリを提供した。 開発環境 サーバ Windows Server 2008 R2 Visual Studio Team Foundation Server 2010 短時間でCI環境を構築できるメリ

    Team Foundation Serverの運用事例と雑感 - GeekFactory
  • Eclipse + Gitで公開リポジトリとプライベートリポジトリを使い分ける - GeekFactory

    Eclipseのプロジェクトgithubなどで公開するとき、非公開にしたいファイルが出てくると思います。非公開にしたいファイルを別のリポジトリに分けて管理する方法を説明します。 .gitignoreに書く .gitignoreファイルにフォルダやファイルを書くと、リポジトリ管理の対象から除外されます。EGitからは、フォルダやファイルを右クリック→ [Team] → [Ignore] で.gitignoreに追加できます。 パスワードが書いてあるファイルなどは.gitignoreで除外するとよいでしょう。 Linked Resourcesを利用する .gitignoreに書くとリポジトリ管理の対象から除外されてしまいます。まったくバージョン管理しないのではなく、プライベートリポジトリに入れて管理したいものもあるでしょう。その場合は別のプロジェクトを作成し、新たにリポジトリを作成します。

    Eclipse + Gitで公開リポジトリとプライベートリポジトリを使い分ける - GeekFactory
  • プログラム設計書の良い部分と悪い部分 - GeekFactory

    設計書の定義は、おおよそ開発標準や慣例で決まっています。逆に言うと、設計書名やその中身を書くと社名がバレるかもしれません。だからみんな書きたがらないのでは。中でもプログラム設計書はベンダによる違いが大きく、結果的に技術力の差となることが多いです。 前回のエントリでは、プログラム設計書のすべてが不要と言っているわけではありません。 プログラム設計書には、良い部分もあります。内部設計では表現できない設計思想が書いてあるので、変更容易性が向上します。例えば、クラス図からは具体的にどんなデータを扱って処理しているのか読み取れます。そもそもの話ですがインタフェースが決まらないと分業ができませんので、他所と共有するメソッドは設計書に落ちている必要があります。小規模だと細かいメソッド名まで決めない場合もあるし、逆にprivateメソッドまで決めてから実装する場合もあります。 ただ、言語レベルの記述方法ま

    プログラム設計書の良い部分と悪い部分 - GeekFactory
  • 大量のエンティティを処理するデザインパターン - GeekFactory

    データストアにある大量のエンティティを処理したい場合、クエリ結果を複数のタスクに分散して処理する必要があります。クエリ結果のカーソルを次のタスクに引き継ぐパターンをテンプレート化してみました。 基的な流れはこんな感じ。 タスクが実行される。 件数制限付きのクエリを実行する。 abstract query() 結果リストを処理する。 abstract run(List) タスク実行経過時間が6秒以内*1の場合は2に戻る。 すべてのエンティティを処理済みの場合は終了する。 結果リストのカーソルをパラメータに保存し、次のタスクをenqueueする。 使い方はこんな感じ。 QueryTask をextendsする。 query() にクエリを書く。 protected S3QueryResultList<Hoge> query() throws Exception { return Datast

    大量のエンティティを処理するデザインパターン - GeekFactory
  • バリデーション、読み込み中表示、通知メッセージ機能を備えたAjaxフォームの実装 - GeekFactory

    Webアプリでは、フォームに入力された値をチェックしてAjaxでサーバに送信するパターンがよく使われます。ここでは、下記のプラグインを組み合わせてAjaxフォームを実装する方法を紹介します。 jQuery Form Plugin - Ajaxフォーム jQuery Validation Plugin - 入力チェック jQuery Loading Plugin - 読み込み中表示 jGrowl Plugin - 通知メッセージ表示 まず、Webページにフォームを用意します。 <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="http:/

    バリデーション、読み込み中表示、通知メッセージ機能を備えたAjaxフォームの実装 - GeekFactory
  • 夢見るSIerと虚構 - GeekFactory

    たまには実情を書いてみる。愚痴大会なので読み飛ばしてくだしあ。 SIer の経営方針としては、「どんなカタチにせよ、生産性を高めるのである」という方向に行くと思います。生産性を高める要因は2つしかなくて、「開発プロセスの改善」と「ソフト生成の自動化」です。要するにワンタッチでポンでシステムが出来ればすげぇじゃんっていう発想。でも、そもそも要件定義が終わると全部終わるので、どうにかして改善されたプロセスを最大限に働かせるアジャイル的プロセスへの移行は不可避だと思う。 http://d.hatena.ne.jp/gothedistance/20090723/1248331426 「開発プロセスの改善」はどこのSIerでも施策に挙げていると思いますが、成果を上げているところはあるのですかねぇ。要件定義と開発はまったく別の仕事だから、両者で改善方法はまったく異なるはず。まずは後者のウォーターフォー

    夢見るSIerと虚構 - GeekFactory
  • 直営社員にプログラミング能力が必要なたった一つの理由 - GeekFactory

    大きなSIerでは社員はプロジェクト管理だけを行い、実作業の大半を外部に委託するところがほとんどです。直営比率が低いところは管理作業しか行わないため、入社してから設計書もプログラムも書いたことがない人は割といます。感覚的には、直営比率が1/3を超えるプロジェクトは社員が自ら現場で作業することが可能で、若手社員にも実作業を経験する場が与えられる気がします。 大きなSIerの小さなプロジェクトはたいてい同じ構造をしていて、ソフトウェア開発自体を丸ごと外注していることが多いです。一括請負契約ですね。この場合、委託元と委託先の責任境界は明確で、委託業務に社員が深く関わることはあり得ません。それでコストが増えたら喧嘩になります。残念ながら、このような構造では社員がソフトウェア開発の実作業を経験することは不可能です。 私は、直営社員もコーディングやテストを自ら行える能力が必要と考えます。その理由は、現

    直営社員にプログラミング能力が必要なたった一つの理由 - GeekFactory
  • プログラミングを単純労働と捉える3つの理由 - GeekFactory

    int128殿の会社では、 >プログラミングは誰でもできる、頭を使わない作業 と思う方が多くいるのかしら? http://d.hatena.ne.jp/int128/20080414/1208181589 うちに限らず、多くの大企業SIerではプログラミングを単純労働と捉えています。その理由は3つあります。 (1)プログラミングは業務をプログラムに落とし込む単純労働 SIの開発手法(の考え方)は30年前から進化していません。業務をプログラムに落とし込む作業は誰がどうやっても同じようになるという思想に基づいています。現在のように高品質なフレームワークやライブラリが溢れる時代では、いかにそれらを組み合わせて作るかが効率化の鍵になります。組織のトップが進化した設計思想を理解しようとしないのは問題です。 30年前の設計思想であれば、プログラミングは業務をプログラムに落とし込む単純労働です。 (2)

    プログラミングを単純労働と捉える3つの理由 - GeekFactory
  • サーバとL2スイッチの接続を冗長化する設計の基本 - GeekFactory

    インフラを設計する上で冗長化による信頼性向上は避けて通れない道です。サーバとL2スイッチの接続を冗長化する設計については意外と情報が少ないのでまとめてみました。変なこと書いてたらご指摘ください。 インフラ設計の基は単一障害点(SPOF)を取り除くことです。構成要素のうち1つが故障してもサービスを維持できるように設計します。構成要素は以下のものが挙げられます: CPU マザーボード メモリ ローカルディスク 電源 FC-HBA NIC LANケーブル L2スイッチ ・・・ ただし、これらすべての故障に備えようとすると費用対効果が割に合わないので、ローカルディスクから下を冗長化する構成が一般的と思います。絶対に止まってはいけないサービスは別ですけどね。 冗長化の種類 サーバを冗長化するにはクラスタを組みます。クラスタはActive-ActiveとActive-Standby(HA)の二種類に

    サーバとL2スイッチの接続を冗長化する設計の基本 - GeekFactory
  • dnsmasqで始めるプライベートDNSサーバ - GeekFactory

    ローカルネットワークのホスト名とIPアドレスの対応はDNSサーバで管理すると便利です。IPアドレスを覚えたりhostsをメンテナンスするのは大変です。でもbindって難しそうだし、メンテナンスに手間がかかるし、という方にはdnsmasqがおすすめです。 dnsmasqは軽量なDNSサーバとDHCPサーバです。/etc/hostsを管理する延長でDNSサーバを管理できます。この記事ではDNSサーバに焦点を当てて説明します。 ローカルネットワークにDNSを立てる まず、以下の場合を考えてみます。 ホスト名とIPアドレスの対応を一元管理したい。 ローカルネットワークのホストには xxx.laputa.example.com を付与する。 FQDNでなくてもアクセス可能にしたい。 例えば、192.168.2.3 が muska.laputa.example.com という名前だとすると、 ping

    dnsmasqで始めるプライベートDNSサーバ - GeekFactory
  • パフォーマンステスト自動化の取り組み - GeekFactory

    このところ、Webアプリやバッチのパフォーマンステストを自動化するために四苦八苦してるので書いてみます。 パフォーマンステストは泥臭い作業です。毎回似たような感じで待ち時間の長い単調作業と、ボトルネックを解析して実装やミドルウェア設定を見直すような神経を使う作業が入り混じって疲れます。このうち前者を自動化してしまえば、質的な部分に力を注げるだけでなく、夜間や休日を活用して多くのバリエーションを試すことができます。 パフォーマンステストの流れはWebアプリとバッチで以下のように整理できると思います。 Webアプリ デプロイメント クライアントサイド(負荷生成側)で必要なデータセットの準備 サーバサイドで必要なデータセットの準備 アプリケーションの設定 負荷生成 クライアントサイドのログ収集 サーバサイドのログ収集 分析 バッチ デプロイメント サーバサイドで必要なデータセットの準備 アプリ

    パフォーマンステスト自動化の取り組み - GeekFactory
  • Apache TomcatとHTTPクッキーにまつわる騒動 - GeekFactory

    Apache Tomcat 5.5.26(6.0.16も同じ)で、HTTPクッキーの取り扱いについて大きな仕様変更が行われました。ここでは仕様変更の内容と影響範囲を考察します。 HTTPクッキー 簡単に復習しましょう。WebブラウザがWebサーバから以下のHTTPヘッダを受信したとき、Webブラウザは test というクッキーを記憶します。 Set-Cookie: test=nullpo; Expires=Wed, 08-Oct-2008 14:03:16 GMT; Path=/クッキーは NAME=VALUE という形で表現されます。連想配列と同じ。 NAME VALUE test nullpo 一度クッキーを受信すると、ブラウザは当該URLにアクセスする度に、以下のHTTPヘッダを送信するようになります。 Cookie: test=nullpoこのように、クッキーはWebサーバがブラウ

    Apache TomcatとHTTPクッキーにまつわる騒動 - GeekFactory
  • SAStruts+Maven2+Subversionで開発を始めるまでの10ステップ - GeekFactory

    まずEclipse, Apache Tomcat, Subversiveを入れましょう。 sa-struts-tutorialを入手する プロジェクトのお手を入手します。zipを解凍したら、Eclipseにプロジェクトをインポートします。 Super Agile Strutsチュートリアル sa-struts-tutorial-1.0.x.zip http://sastruts.seasar.org/download.html m2eclipse Plugin EclipseからMaven2を使うためのプラグインを入れます。 下記のアップデートサイトからプラグインをダウンロードします。 http://m2eclipse.codehaus.org/update/ http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn11/eclipseplg

    SAStruts+Maven2+Subversionで開発を始めるまでの10ステップ - GeekFactory
  • JenkinsとApache Ivyで開発からデプロイまでを管理する - GeekFactory

    Eclipse, Jenkins, Apache Ivyを使ったプロジェクトにおける開発からデプロイまでの流れを図に描いてみました。 図では書き表せないことがありますね。テスト実行時のクラスパスは実行時ライブラリを含むとか、図で描くとカオスになります。GUIツールでビルド設計するのは意外と難しいのかもしれません。 ビルド設計する上で考えたことを書き出しておきます。何かアドバイスがあったら教えていただけると嬉しいです。 開発環境 WindowsでEclipseを使う。 Eclipseのプロジェクト構成で適切なビルドパスを設定する。 依存ライブラリはApache IvyDEプラグインで管理する。 依存ライブラリはMavenリポジトリから取得する。リポジトリ候補にはビルドサーバ上のキャッシュを含める*1。 他プロジェクトへの参照はEclipseのProject Referenceを設定する。 ク

    JenkinsとApache Ivyで開発からデプロイまでを管理する - GeekFactory
  • 受託開発が抱える本質的な非効率性に関する考察 - GeekFactory

    受託開発が抱える質的な非効率性について考えました。ここで挙げたことはどの開発プロセスでも発生しうる問題と思います。 外注のオーバーヘッド 契約に係るコスト。 限られた場所や時間で質疑応答を行うことによる損失 情報の伝達コストは「機会」により決まる。拠点の違い、限られた時間、組織の壁により機会は減り、伝達コストは高くなる。 打合せや質問票を中心に質疑応答を行うため、情報の伝達コストが高くなる。 発注側の縦割り部門、受託側の下請け構造により、情報の伝達コストが高くなる。 決定に要する時間が長くなる。 開発者が業務プロセスを学習するコスト 前提として、どんな要件でも学習コストは必ず発生する。 過去に学習した知識を再利用できるとは限らない。受託側に業務スペシャリストが存在するとは限らない。 発注側から業務に関する説明を受ける機会(=教育)が十分にないため、極めて非効率な学習にならざるを得ない。

    受託開発が抱える本質的な非効率性に関する考察 - GeekFactory
  • 今日から始めるサーバ構築の省力化 - GeekFactory

    SSHクライアントたくさん並べてペーストしまくるのが許されるのは小学生までだよね と言ってみたかっただけです。こんにちは。 Capistranoでサーバ構築を省力化する方法を紹介します。サーバ構築の自動化といえばChefやPuppetが有名ですが、CapistranoはサーバにSSH接続さえできれば利用できるメリットがあります。データセンタに持ち込むノートPCにCapistranoを仕込んでおけば便利なツールになるし、短期間に検証用のサーバを構築する場合も有用なツールになるでしょう。Capistranoはデプロイツールとして使われることが多いですが、サーバ構築にも有用です。 CapistranoはRubyで書かれたツールで、複数のサーバにSSH接続してコマンドを実行できます。同様のツールとしてexpectがありますが、CapistranoのスクリプトはRubyの内部DSLなので書きやすく拡

    今日から始めるサーバ構築の省力化 - GeekFactory
  • motionの動体検知イベントをfluentd + Zabbixで監視する - GeekFactory

    動体検知アプリケーションmotionのログをZabbixで監視してみました。参考になりましたら嬉しいです。 基的な考え方 motionのイベントが発生するとログファイルにJSONを書き出します。そのログファイルをfluentdで監視し、Zabbixに通知します。具体的には、ログファイルをtailしたものをforwardし、fluentd-plugin-zabbix で通知します。 fluentdを使わなくても、zabbix-senderを実行してZabbixに通知する方法もあります。稿の方法は以下のメリットがあります。 ホスト間の転送やZabbixへの通知はfluentdがやってくれる。複雑なシェルスクリプトを書く必要がない。 fluentdが再送処理をやってくれる。ネットワークが不安定な場合やダウンタイムの再送処理を自分で作り込む必要がない。 motionが不安定にならない。(イベン

    motionの動体検知イベントをfluentd + Zabbixで監視する - GeekFactory
  • 自宅サーバのインフラ設計書を公開します - @int128

    自宅サーバのインフラ設計書を公開します。 Design paper of the home server(抜粋) 昨夜にTwitterで公開したら予想外に反響があったので、ちゃんとエントリに残すことにしました。クラックされるおそれがあるので、細かい部分は公開できないことをご了承ください。 内容はこんな感じ。 要件概要 機器仕様 ネットワーク設計 ソフトウェアスタック設計 共通基盤設計 サーバ詳細設計 上記にバックアップ設計や運用管理まわり*1を加えれば、インフラの設計書はだいたいこんな感じではないかと思います。 インフラの要件定義は難しい 一方で、インフラの要件定義は十分に標準化が進んでおらず、会社やチームによって文化がかなり違います。特に受託開発(SI)の場合は、お客様の中にインフラに詳しい人がいなくて調整に苦労することも多いと思います。費用と可用性のトレードオフの部分はなかなか伝わりづ

    自宅サーバのインフラ設計書を公開します - @int128
  • GradleでMaven Central Repositoryに成果物をリリースする - GeekFactory

    Gradleでビルドした成果物をMaven Central Repositoryにリリースする方法を説明します。 成果物の公開にあたってはSonatype OSSRHで申請が必要です。こちらのイケメンな記事が大変参考になります。こちらの記事ではMavenを使っていますが、稿ではGradleを使います。 PGP鍵を確認する 成果物の署名に使うPGP鍵を確認します。まだ作成していない場合は先ほどの記事やSonatypeの公式ドキュメントを参考にしてください。gpgコマンドはbrew installでインストールできます。 $ gpg --list-keys /Users/hidetake/.gnupg/pubring.gpg ---------------------------------- pub 4096R/1234ABCD 2012-12-14 uid ikemen <ikemen@

    GradleでMaven Central Repositoryに成果物をリリースする - GeekFactory
  • JAWS-UG Hokuriku (金沢) 第5回勉強会に参加してきました - yoshidashingo

    cloudpackエバンジェリストの吉田真吾(@yoshidashingo)です。 2013.4.13 JAWS-UG Hokuriku (金沢) 第5回勉強会に参加してきました。 お昼に小松空港に着いてから、堀内さん、相羽さん、北陸コアメンバーのみなさんとべにきた「世界一美味しいカレー、チャンカレ」。実はうちの二人の子どもが産まれた産院から歩いて来られる距離にあり、出産のときにいつも昼ご飯にべに来ていたゆかりのあるお店でした。 AWS アップデート アマゾンデータサービスジャパン 堀内さん 今週、ネット解禁に向けた公職選挙法改正案が衆議院で可決され、参議院での可決待ちとなったニュースがありました。堀内さんからは、この分野で日より10年以上先行していると言われるアメリカでの事例「Obama for America(オバマの大統領再選運動)」で利用されたAWSのシステムについて、まず説

    JAWS-UG Hokuriku (金沢) 第5回勉強会に参加してきました - yoshidashingo
  • GitHubのようなtextareaの補完機能を実装する - カーソル位置の取得 - Qiita

    続編 JavaScript - Qiitaのtextarea自動補完がOSSになりました GitHubのコメントでは@と入力するとカーソルの下に入力補完が出現する。さらっとやっているが、実はこれが結構難しい。なぜ難しいのかというと、JavaScriptではカーソルが何文字目にいるかは分かるが、 カーソルのXY座標を取得するAPIが存在しない からだ。カーソル位置が分からなければ、適切な位置に補完候補を表示することができない。では一体どうすればいいのか? 今回Qiitaではコメント欄でのメンションの補完機能を実装した。稿では前述の問題を解決するために用いたテクニックを解説する。 ちなみにこのメンション補完機能はチーム用プライベートQiitaである「Qiita:Team」でも勿論使える。現在絶賛無料トライアル実施中なので、興味を持たれた方はそちらも使ってみて欲しい。 要約 textarea内

    GitHubのようなtextareaの補完機能を実装する - カーソル位置の取得 - Qiita
  • Varnishでテストコードを書こう! | GREE Engineering

    はじめまして、サーバ基盤チームの田中祥平(@xcir)です。 最近入社しまして、チームではいわなちゃんと呼ばれています。よろしくお願いします。 入社してからGREEの配信システムをVarnish Cache(以下Varnish)に置き換える仕事をしていたのですが、少し前に問題なく山を超えました。 そこで今回利用したVarnishの特にテスト機能について紹介しようと思います。 なお、今回の説明に利用するVersionは3.0.3です。 Varnishとは VCLというドメイン固有言語をもち、キャッシュもできる高速リバースプロキシです。 if文が書けるので柔軟に記述しやすいという特徴があります。 たとえば/admin/以下に許可したIP以外からのアクセスは弾くと言ったことは以下のように記述できます。

    Varnishでテストコードを書こう! | GREE Engineering
  • 要素内容に依存する幅の指定について

    要素内容に依存する幅の指定についてのメモです。 これらは「CSS basic box model(草案)」に記載されており、MDNのページに分かりやすく説明されています。 来、これらは幅だけでなく高さの指定にも使えるようなのですが、まだ実装されていませんので確認できません。 2013年4月現在、幅の指定として使えるブラウザはFirefoxとGoogle Chromeです。Safariでは動くんですかね。最新版ないから分かりません。 available or fill-available包含ブロックから該当要素のマージン、ボーダー、パディングのサイズを引いた幅。 現在、Firefoxは-moz-available、Chromeは-webkit-fill-availableで動作します。max-contentややこしい計算式があるんですが、とりあえずは該当要素が取りうる最大の幅として覚えてお

    要素内容に依存する幅の指定について
  • 097 RR Book Club: Patterns of Enterprise Application Architecture with Martin Fowler

    Podcast: Play in new window | Download (Duration: 1:42:15 — 93.6MB) Panel Martin Fowler (twitter martinfowler.com) Avdi Grimm (twitter github blog book) Josh Susser (twitter github blog) Katrina Owen (twitter github blog) James Edward Gray (twitter github blog) Discussion 01:31The Rails View by John Athayde and Bruce Williams: Read along with us! We will be discussing the book with John and Bruce

  • Javaで指定したファイルを全部zipに圧縮するメソッド - きしだのHatena

    なんか便利メソッドできた。圧縮するファイルにディレクトリ指定しちゃだめ。 /** * ファイルをまとめて圧縮する * @param filename 保存ファイル名 * @param base 圧縮するファイルのベースパス * @param paths 圧縮するファイルの名前 * @throws IOException */ public static void zip(String filename, String base, String... paths) throws IOException{ try(ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(filename))) { for(String path : paths){ zos.putNextEntry(new ZipEntry(path)); P

    Javaで指定したファイルを全部zipに圧縮するメソッド - きしだのHatena
  • UXの効果が数字でわかる!5つのUX KPI : DeNA Creator(クリエイター) Blog

    プログラミング教育や社員の健康をサポートする「CHO室」の取り組みなど、DeNAのCSRに関する情報を発信するブログ

    UXの効果が数字でわかる!5つのUX KPI : DeNA Creator(クリエイター) Blog
  • Millaで呼吸をするようにgithubでperl モジュールを開発しcpanにアップする - Debuginfo

    Module::Setupを使ってモジュール書くぞ、と思ってた矢先に CPAN モジュールの開発についての最近の風潮という@tokuhirom氏のブログのエントリを読みました^^;; minillaでもよかったのですが、全体像がわからなかったので今回は@miyagawaさんの秀逸なscreencastを参考にmillaを使ってみることにしました。 Milla, a Dist::Zilla profile that doesn’t suck (screencast) 基的にscreencastそのままやればいいのです。 依存関係が沢山あって時間がかかるのでscreencastを見てる裏でcpanm Dist::Millaを走らせましょう $ cpanm Dist::Milla githubにpushするためにApp::phを使います。(Rubyistの人はhubも使えるようです。) $ c

    Millaで呼吸をするようにgithubでperl モジュールを開発しcpanにアップする - Debuginfo
  • Basic Design Note

    CLOSED This site has been closed. 当ブログは2022年12月30日をもって閉鎖しました。 開設から10年間、ご覧いただきありがとうございました。

    Basic Design Note
  • Chef を始める #1 – 概要、Chef Server を EC2 上にインストール、Workstation の設定まで | DevelopersIO

    Knife コマンドで、Cookbook や Recipeを 操作したり、Chef Server に支持をしたりする環境です。 Node Chef Server が管理するマシンです。 Chef Server で管理している Cookbook や Recipe 情報を Node 上の Chef Client が取得して、そのタスクを実行します。 今回の構成イメージに置き換えると、以下のような感じ。 今回は、Chef Server のインストールから Workstation の設定までやっていきます。 Chef Server のインストール 事前準備 OSは、Amazon Linux を選択。(small インスタンス以上がいいです。理由は後述。) セキュリティグループで、ssh、http、https を開放します。 最新バージョンは、11.0.6 なのでこれをインストールします。 http

  • フラットで綺麗なUIライブラリFlatUIのモバイルテーマ「FlatUI」:phpspot開発日誌

    ququplay/jquery-mobile-flat-ui-theme GitHub フラットで綺麗なUIライブラリFlatUIのモバイルテーマ「FlatUI」。 jQueryモバイルのテーマとして利用できます。なんというシンプルで美しいUIなんだろうと思ってしまいました。 デフォルトのjQueryモバイルテーマは見飽きたという方は試してみても良さそう UIはこうしてライブラリがどんどん出てくる、という中で、WEBエンジニアとして出来ることを今後考えなくてはいけないな、と思いますね 関連エントリ スマホの入力が超楽になりそうなjQueryモバイル用のオートコンプリートプラグイン GoogleAnalyticsの結果をjQueryMobileでモバイル端末で表示するサンプル モバイルブラウザでの高速クリックを実現するjQueryプラグイン「jQuery Fastbutton」

  • 今週のGrails 2013-14

    この記事の内容は、Burt氏による"This Week in Grails"を、意訳した内容です。誤訳等有りましたら@tyama宛てに(DMで)優しく報告ください。 元記事:This Week in Grails (2013-14)。 SpringSourceはVMwareからEMCの関連会社Pivotalへ移動しました。 このことがGrails, Groovyと Springに与える影響と今後については、 Adrian Colyer氏のブログポストを参照してください。 Groovyチームの広範囲にわたるインタビューが、ZeroTurnaroundに掲載されています。興味深い情報が満載です。 Happy Birthday to Grails!! 0.1のリリースは今から7年前ですね。 Burt氏がGrailsNettyを統合した新プラグインについてのブログをポストしました。 来の利点

  • 今日から業務で使える17の運用系Linuxツール、そして円環の理

    運用系ツールのつもりが、新人さんに伝えたい「円環の理」資料になってしまいました。 “qpstudy 2013.04”の @zembutsu LT 発表資料です 『qpstudy3周年記念LT大会 〜新人さん、業界にようこそ!〜 with ビール』 http://www.zusaar.com/event/613004� 共有したかった事 ・2013年、這い寄る混沌・ガラケーは衰退しました ・基コマンドの連携は必須 ・時系列リソース監視が鍵 ・仲間達と協力する心も大切Read less

    今日から業務で使える17の運用系Linuxツール、そして円環の理
  • データベースのデータを信用してはいけないか?

    ネットを見ていたら「問題集 : PHP技術者認定・初級」というのを見つけました。 【セキュリティ対策】 セキュリティ対策について、正しいものを1つ次の記述の中から選択せよ。 入力のフィルタリングのみ行う。出力のエスケープのみ行う。少なくとも、入力のフィルタリングと出力のエスケープを行う。データベースのデータは信頼してよい。ITトレメ PHP技術者認定・初級 - @IT自分戦略研究所より引用 過去問なのか練習用の想定問題なのかわかりませんが、「問題提供: PHP技術者認定機構」とあります。 PHPアプリケーションの問題ですから、Webアプリケーションセキュリティの問題ですね。茫漠とした問題文ですが、実は正答を得るのは難しくありません。選択肢から技術的な中味を抜いてみると下記になります。 ○○のみ行う。○○のみ行う。少なくとも、□□を行う。○○は信頼してよい。このように並べてみると、○○の選択

    データベースのデータを信用してはいけないか?
  • Perl を学ぶとき、真っ先に覚えたいモジュール

    春ですね! 新年度ですね! Perl 書くことになってしまいましたか! 奇遇ですね! sigil が意味わかりませんか! 特殊変数がググれませんか! リファレンスが謎ですか! 1; の存在が不明ですか! オブジェクト指向が難しいですか! むしろオブジェクトじゃないコードの方がゆるくて大変ですか! XS が読めませんか! ええ、XS は僕もあんまり読めません>< さて、この春から Perl を学ぶことになった人も多いかと思いますが、なにはなくともこれまず覚えたら後が楽になるんじゃないかというモジュールを、いくつか紹介したいと思います! (まあ、自分の初期を思い返すと、この辺はやく知っておきたかったなあというリストです) Data::Dumper, YAML 変数(リファレンス)やオブジェクト(blessされたリファレンス)をダンプする用途では、Data::Dumper が一番メジャーのような

    Perl を学ぶとき、真っ先に覚えたいモジュール
  • レスポンシブWebデザインとアクセシビリティ

    2013年4月14日 著 先週の金曜日、勤務先にてCSUN2013 参加報告セミナーが開催され、自分も講師の一人として登壇しました。セミナーで紹介し終えるまで言及するのを避けていた、というわけでもないけれど、今更ながらレスポンシブWebデザインにおけるアクセシビリティ面での注意点について覚え書きしておきます。その注意点は、CSUN 2013の初日に参加したResponsive Design and Accessibility Workshopで聞いた話や、3日間あったセッション聴講期間の初日に聞いたAccessibility Through Responsive Designというセッションで伺った話が元ネタです。ちなみに、レスポンシブにデザインしさえすればアクセシブルだと言える訳ではない、という話ではありません(それはそれで重要な事実ですが)。 Webは、さまざまな人々がさまざまなアクセ

    レスポンシブWebデザインとアクセシビリティ
  • 野良ビルドから見たGentoo

    OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image

    野良ビルドから見たGentoo
  • 今日から使える22のタイムマネージメント方法

    Liberato 自然素材をアップサイクルしたサステナブルなシューズブランド「Liberato(... 詳細を見る

    今日から使える22のタイムマネージメント方法
  • サービス終了のお知らせ - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

  • 「null」をフラグとして使うのは、やめた方がいい - 地平線に行く

    null をフラグとして使うのは、やめた方がいいと思います。 null は、ただ変数が初期化されていないことを表しているだけです。 この意味以外で、null を使わない方がいいと思います。 null をフラグとして使う 「null をフラグとして使う」というのは、「null なら xxxx」というように、null が何らかの意味を持って使われていることを指します。 例えば、下記のコードでは「null はゲストユーザを指すフラグ」として使われています。 /** * ユーザ用のヘッダを作る処理 */ public String createHeader(User user){ (…中略…) String name; if(user != null){ name = user.getName(); }else{ name = "Guest"; // null ならゲストユーザ } 問題点 これの

    「null」をフラグとして使うのは、やめた方がいい - 地平線に行く
  • インテル、無償のHTML5アプリ開発環境「Intel XDK」を公開。iOS/Android/Kindleなどクロスプラットフォーム対応

    インテル、無償のHTML5アプリ開発環境「Intel XDK」を公開。iOS/Android/Kindleなどクロスプラットフォーム対応 インテルは、先週4月10日から11日かけて中国北京で開催された「Intel Developers Forum Beijing 2013」(IDF Beijing 2013)において、クロスプラットフォームに対応したHTML5アプリケーションの開発ツール「Intel XDK」を発表しました。 Intel XDKはブラウザ上で動作するHTML5アプリケーション開発ツール(ChromeブラウザとJavaのインストールが必要)。HTML/CSS/JavaScriptで開発したアプリケーションを、PhoneGap機能でビルドし、iOS/Android/Kindle/Facebookなどのアプリケーションが開発できます。開発したアプリケーションは、各アプリストアで販

    インテル、無償のHTML5アプリ開発環境「Intel XDK」を公開。iOS/Android/Kindleなどクロスプラットフォーム対応