Linux のパッケージ管理システムの例

社内勉強会で Dependency hell - Wikipedia を読んでいます。
Linux のパッケージ管理システムの例として挙がっているものに知っているものも知らないものもあったのでメモ。

apt

Chapter 2. Debian package management
Debian のパッケージ管理システム。
dpkg の上のレイヤで、aptitude の下のレイヤだと思います。

YUM

Chapter 14. YUM (Yellowdog Updater Modified) - Red Hat Customer Portal
Redhat のパッケージ管理システム。
RPM の上のレイヤ。

Urpmi

mandriva.com
Mandrivia Linux のパッケージ管理システム。
RPM の上のレイヤ。

ZYpp

Portal:Zypper - openSUSE
OpenSUSE のパッケージ管理システム。
RPM の上のレイヤ。

Portage

http://www.gentoo.org/doc/ja/portage-user.xml
Gentoo Linux のパッケージ管理システム。
ひたすらにビルドする系。

Packman

pacman - ArchWiki
Arch Linux のパッケージ管理システム。

自分用のお題的な何か

自分用。
これだけならn分以内に作れる、ということにしたい。
ネットワーク使うしDB使うしでいいかなって思ったので。

  • 種類
    • Webアプリケーション
  • 内容
    • 個人用オンラインブックマーク
  • 機能
    • ログインできる
      • ログインすると、公開可否を問わず登録済のブックマークを閲覧できる
      • ログインしなくても、公開可として登録済のブックマークを閲覧できる
      • ログインすると、oauth 認証可能な外部サービスを登録できる
      • ログインすると、外部サービスへの投稿履歴を見ることが出来る
    • 外部サービスへの投稿ができる
      • 外部サービスへの投稿はサーバサイドで行う
      • 非同期に行なってもよい
      • 投稿時は、投稿先のサービスと、投稿日時を記録する
    • ブックマークを登録できる
      • URL、タイトル、コメント、イメージ、タグ、公開可否を指定できる
    • ブックマークを編集できる
      • URL、タイトル、コメント、イメージ、タグ、公開可否を編集できる

TDDBC 横浜 Second Season でした

TDD Boot Camp(TDDBC) - TDDBC横浜 Second Season

「二回目だからSecond Season」は分かる人には分かるネタだったけど誰も気づかなかったという残念な事実を聞きました。

というわけで去年に引き続き二回目の TDDBC 横浜でしたので雑感をメモ。

会場

遅刻

  • 面目ねぇ、面目ねぇ

ネットワーク

  • 「今回もか!」と言われてしまいそうですが「去年よりマシなんだよ!」と言い返します

基調講演

  • 川西さん
  • 叙述的っていうんですかね。とても面白かったです

ライブコーディング

  • 見てる人を置いてけぼりにしてしまっていてすみません
  • tomykaira さんのスペックを引き出せずすまぬ…
  • 頭の回転が良くない自分にはちょっくら荷が重かったかも…
    • フィッシュボウルは視界がスクリーンに専有されてたのでよかったですがですが

侘び寂びごと

  • 隠れ個人テーマ
  • せっかくスクリーン空いてたので面白いもの写せばよかった
  • クロージングの時はワークショップ中の写真スライドショーしようと思ってたのに忘れてた

質問コーナーお答え

@RunWith(Enclosed.class)
public class ネストするテストクラスTest {
	public static class ある状況を {
		@Before
		public void 準備します() throws Exception {
		}
		@Test
		public void テストします() throws Exception {
		}
	}
	public static class 別の状況を {
		@Before
		public void 準備します() throws Exception {
		}
		@Test
		public void テストします() throws Exception {
		}
	}
}

Quick JUnit からは実行できない。
JUnit を実行するとこんなダイアログが出る。

外側のテストクラスを選んで実行すると、こんな風に全部実行される。

ただ、テストランナーの都合で、Jenkins での結果収集時に重複カウントの問題があるとのこと。
id:irof さんの日記に何か書いてあった気がするので、きっと見つかるでしょう。

懇親会

  • Jenkins が便利なせいでみんな Jenkins に夢中になり仕事が増えている
  • TA はただ歩き回るのが好きな人です
  • おっぱいネタとか下品です
  • 横浜賞を新設しました
    • こちらの本(index at XUnitPatterns.com)をプレゼント
    • 10人くらいいたのにじゃんけん1ターンで一人勝ちとかすげぇ
  • 皆で後片付け

後日

スタッフによる反省会(慰労会)があるそうです。

bundle install で SSL verify error

雑学。いずれ埋もれるメモ。

budle init してできる Gemfile には次の記述がある。

source "https://rubygems.org"

この状態で bundle install すると、SSL の検証が失敗してしまう。

$ bundle install --path .bundle
Fetching gem metadata from https://rubygems.org/........

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/gems/builder-3.0.0.gem)
An error occured while installing builder (3.0.0), and Bundler cannot continue. Make sure that `gem install builder -v '3.0.0'` succeeds before bundling.

ググれば山ほど出てくるのが「エラーになったけど http に替えたらいいよ」という事例。

原因とか経緯を知るには github の issue を読んでから、大本営発表を読むことなんでしょうか。

2012年8月現在においてこんなエラーに出くわしてるのは環境が古いから、という感じ。

  1. Ruby 本体のバージョンが古い(1.9.3p193以前)
  2. rubygems のバージョンが古い(1.8.24以前)
  3. OpenSSL のバージョンが古い(1.0.1以前)

それぞれアップデートしましょうね、という結論らしい。

Windows では Resque 動かなかった

gem install はできてしまったので動くのかなと思ったんだけど。
もっとアピールしてもいいじゃないかと思ったり、分からないくらい抽象度が高いのかとも思ったり。

D:\dev>resque-web
[2012-08-26 23:43:59 +0900] Running with Windows Settings
[2012-08-26 23:43:59 +0900] Starting 'resque-web'...
[2012-08-26 23:43:59 +0900] trying port 5678...
d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/vegas-0.1.11/lib/vegas/runner.rb:197:in
`daemon': daemon() function is unimplemented on this machine (NotImplementedError)
        from d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/vegas-0.1.11/lib/vegas/runner.rb:197:in `daemonize!'
        from d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/vegas-0.1.11/lib/vegas/runner.rb:112:in `start'
        from d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/vegas-0.1.11/lib/vegas/runner.rb:77:in `initialize'
        from d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/resque-1.22.0/bin/resque-web:13:in `new'
        from d:/dev/Ruby193/lib/ruby/gems/1.9.1/gems/resque-1.22.0/bin/resque-web:13:in `<top (required)>'
        from d:/dev/Ruby193/bin/resque-web:23:in `load'
        from d:/dev/Ruby193/bin/resque-web:23:in `<main>'

windows にはプロセスを daemon 化する API なかったっけ…
ShellExecute するとかないわーって感じだけど。

第85回 JavaEE 読書会に参加してきました


第85回 JavaEE 読書会に参加してきました。
Enterprise Integration Patternsという本の読書会です。

進め方

  • 全体をざっくり
  • 詳細を議論
    • 詳細議論までいけると better

トピック

JBoss ESB (SwitchYard)のデモ

解説
  • JBoss は高速化しています!
    • 並列化が効いてます
  • quickstart にいろいろはいってます
    • camel-jms-binding をデモします
    • シンプルなパイプ・フィルターパターンの例です
  • switchyard.xml
    • ESB の設定を書くところ
    • EIP でいうルーティングなどは Apache Camel に移譲してます
  • Queue からコンポーネントに渡す、という定義になっている
    • コンポーネントを実装している Bean の method binding はどうやっている?
      • Bean にメソッドが1つしか無ければそれが適用されるが、2つ以上あるなら設定が必要
      • 型安全とか考えないのが ESB なので ClassCastException が出たり
      • 静的チェックが出来ないので runtime でのテストが重要
  • デプロイ
    • build すると META-INF/switchyard.xml に置いた jar ができる
    • deploy ディレクトリに置けばロードされる
    • switchyard の管理 UI から確認できる
図解するとこんな感じ(ホワイトボードに描いてもらったらこうなりました)


質疑とか
    • AP サーバから Web Service へのリクエストをキューイングするとかに使えるのかなと
    • メッセージのバリデーションとかはクライアントはやらないものですか?
      • クライアント側でもやればいいですし
      • switchyard は宣言的なバリデーションをするとかの仕組みがある
      • ESB 的には検証サービスをルーティングするとかも
    • キューイングサービス自体には検証する責務を置くべきじゃないのかなとか
      • JMS の考え方としてはとりあえず放り込んじゃえ、というものですが、途中に Web サービス挟んだりすることは可能ですね
      • EIP には「DB はデータを置いておく仕組み、キューやチャンネルはコミュニケーションをするための仕組み」とあるので
    • 個人的にはキューの冗長性を確保する仕組みに興味があります
      • 製品によって考え方とか癖とかがあるので面白い
      • 1台構成で超高性能みたいなのよく見るけど耐障害性とかスケールアウトするような仕組みってあまり聞かないですね
    • MOM と ESB どっちがいいのか?

休憩

二章から

Introduction
    • 星取表になってる、わけじゃないけど、できそう
      • X がつかなければいいんじゃないか、みたいな
    • Application Integration Option を選択するふわっとした観点
File Transfer
  • File Transfer はトランザクションが安定してるのがメリット
  • ロックとか削除とか作りこみを自前でやらないといけないのがデメリット
  • MOM を使えば置き換え可能なもの?
    • 必ずしもそうとは言えない。でっかいファイルを渡すとか
  • 大きな問題:開発者が大変
    • なぜ?:別々のシステムから提供されるデータに矛盾があったときどうするかを決めたりしないといけない
  • HULFT を知らないので SIer 失格であるとか何とか
    • 安心感、取っつきやすさ
  • ここでいうファイルって何?リレーションを含めた完全なデータとかそういうもの?
Shared Database
  • index 問題
    • パフォーマンス的に矛盾してしまうということがある
  • スケールしない問題
  • 統合データベースが適してるユースケースはあるのか?
    • RPC で同じデータベースを参照するような統合、というのはあった
  • MDM(Master Data Management) という考え方
    • 6つくらいの戦略的なパターン
    • 優劣ではなく条件に合ったパターンを
  • マスターデータを持たせる、という話になると困ってしまうのだけど、更新データだけを持たせるなどの考え方は無いのかしら
    • 登録、更新といったイベントのインターフェースを設けるというのはありますね
    • それ、MOM で出来るよ
    • アプリケーションに組まれる仕組みとか
  • メッセージングの枠組みでトランザクション情報をまとめて、というような使い方ってあるんですかね
Remote Procedure Invocation
  • 使います?
    • Web サービスも RPC と考えることができますよね。であれば使います。
    • RESTFull じゃなくて REST風
  • 呼び出し元で発生したタイムアウトをサーバ側がキャンセルできるんでしたっけ?
    • クライアントが完了できなかったトランザクションをサーバ側でコミットしてしまう問題
    • 普通はトランザクションを開始するとかの情報を RMI に渡すよね
    • Web サービスにも Ws-Transaction とかありますし
      • なにそれ派、懐かしい派、CORBA でいいじゃん派
      • 某巨大システムで使われていたとかの情報
    • 注文系の Web サービスは取り消しできないのつらい…
Messaging
  • メッセージングの特性に合わせた改修がどんなシステムにも適用できるかというとそうでもなさそう
    • ルーティング
    • 非同期
  • ヘテロジニアスなシステムにおいてメッセージングを導入すること自体が問題になる
  • Web サービスはみなさんよくお使いですよね?
    • Ws-XXX とか面倒くさいのに
  • メッセージングを全面的に採用システムってあるんですかね?
    • 某社の某システムでは独自実装だったり
  • 学習コストとかよりはプロダクト自体が高価だったとかの問題の方が比重が高かったかと
  • アーキテクチャがイメージできない問題
    • 後半読めばヒントが掴めるのかも…
    • 慣れの問題?
  • File Transfer、Shared Database、Remote Procedure Invocation あたりなら「まぁ、やりましょう」で済みそう
    • メッセージングはちゃんとした設計が必要になりそうで敷居が高い感
Chapter2 まとめ