パッケージマネージャマネージャ

世の中にパッケージマネージャがたくさんあるけどそれぞれ微妙にコマンド違ってイライラするのでラッパー作りたい

  • 利用可能なパッケージを探す場合
# homebrew
brew search hoge
# rubygem
gem list -r hoge
gem list --remote hoge

gem search -r ってのもあるな...

  • インストール済みのパッケージ一覧
# homebrew
brew list
# rubygem
gem list
gem list --local
# cabal
cabal list --installed


同じパッケージマネージャでもバージョンによってちょっと違うとか
gemのアップデートには気をつけて : Verboseモードでいこう

# gem 1.3
sudo gem update --system
# gem 1.4 or later
sudo gem install rubygems-update
sudo update_rubygems

こういうのもハマる

仕様

brew のスタイルで他のパッケージマネージャをたたけるようにする

  • 書式
    • pmwrap [package manager] [subcommand]

例えば

metapm yum list 
 --> yum list installed [hoge]
metapm yum update
 --> yum update yum

こんな感じで、brew のコマンド知っていれば他のパッケージマネージャのコマンド調べなくても良いようにしたい
好き嫌いあるので、最終的には自分の普段使ってるパッケージマネージャとおんなじコマンドセットを選択できるようにする。無理ぽ

まぁひとまずこんな感じ

  • 使えるコマンド
    • パッケージのインストール:install
    • パッケージのアンインストール:remove
    • 利用可能なパッケージを探す:search
    • インストール済みのパッケージを表示:list
    • パッケージマネージャ自体のアップデート:update
    • インストール済みのパッケージをアップグレードする:upgrade
操作 brew yum apt
install brew install hoge yum install hoge apt-get install hoge
uninstall brew remove hoge yum remove hoge apt-get remove hoge
package を探す brew search hoge yum search hoge apt-cache search hoge
インストール済み package を表示 brew list hoge yum list installed hoge dpkg -l hoge
package manager のアップデート brew update yum update yum apt-get install update-manager-core
package のアップデート brew upgrade hoge yum update hoge apt-get update hoge

問題点

  • 他のパッケージマネージャにないコマンドの扱い
    • ないって教えて上げるくらいしかできない...
  • 全部サブコマンドならよいのだけど、そうじゃないとstyleとして使うのは難しい
    • apt とか
      • インストールは apt-get install
      • 一覧は dpkg -l
  • option を複数同時に指定したときの変換がややこしい
  • メンテがめんどくさい

結論:チートシートつくって満足するべき

LWP::UserAgentでクライアント証明書を指定する

こないだハマったのでメモ。

クライアント証明書がによる認証を行うサーバにLWP::UserAgentでアクセスしたかったのだが、パット調べてもわからなかった。結局perldocをちゃんと読めって言う話なんだけど・・・

まずCPANを見る

「cert」とかでページ内検索するとssl_optsというメソッドを発見。
ここに載ってるオプションは三つで

  • verify_hostname
  • SSL_ca_file
  • SSL_ca_path

どれもクライアント証明書指定のためのオプションではない。
ネットでけっこうな時間調べていても見つからない。。

その前にもっとちゃんと読むべき

LWP::UserAgentのperldoc(というか上のCPAN)を見返したら、

Other options can be set and are processed directly by the SSL Socket implementation in use.

他のオプションは使ってるSSL実装をみてね、って。

うん。

なるほど書いてあった。

  • SSL_cert_file

このオプションでクライアント証明書を指定するらしい。

このときは以下の感じでアクセスできた。

my $ua = LWP::UserAgent->new;

$ua->ssl_opts(
    verify_hostname => 0,
    SSL_cert_file => 'certs/client-cert.pem',
    SSL_key_file  => 'certs/client-key.pem',
);

my $res = $ua->get($uri);

こんな感じ。ドキュメントはちゃんとよく読みませう。。

perlわかんない

以下の場合にエラーになるのなんででしょうか

#!/usr/bin/env perl
use strict;
use warnings;

my $a = [1];   # $a は arrayref
$a->[0] = 999; # ok.

sub hoge {
    return \@_;
}

my $b = hoge(1); # $b も arrayref
$b->[0] = 999; # Modification of a read-only value attempted <- なぜ?

$aも$bもarrayrefです。
$aは代入可能ですが、$bは「定数を変更するな」といわれて代入不可能になります。
どういうことか、と思って調べていたら、以下のようなエントリを発見


perlでは関数引数は基本的に参照渡し」


な、なんだってー
参照渡しということは

sub fuga {
    $_[0] = 999;
}

fuga(1); # Modification of a read-only value attempted

なるほどエラーになりました
参照渡しであるならば上のは納得です

1 = 999;

がエラーになるのと同じと考えられます。
じゃ、関数内部の@_は何者なのだろう?普通の配列のように扱えているけど、
配列とは別物ということなのでしょうか(少なくとも挙動は違う)


ちゃんとperlsubを読んでみよう。。。

株式会社はてなに入社しました!

株式会社はてなに入社しました!

3月で前職を退職して、4月から株式会社はてなで働く事になりました。
金曜日に初期研修を終えて一息つくことができたので今回の転職について少しまとめようかとおもいます。

きっかけ

あ、ありのまま起こったことを話すぜ「俺は、はてブホッテントリを毎日眺めていたら、いつのまにかはてなスタッフになっていた」何を言っているのか(ry

f:id:hatz48:20120423023751j:plain

前職はいわゆるSIerで、社内の開発支援を行う部署に所属していました。大学の修士課程でソフトウェア工学を学んでいたこともあり、ソフトウェア開発を効率化する仕事に意義は感じていたのですが、もっと多くの人を楽しませるサービス開発をしたいという気持ちから、(勝手ながら)転職を考えるようになりました。


転職するのはそれなりにエネルギーを使いますし、どうせなら自分が面白いと思うサービスの開発がしたいと思っていました。そんなおりに(たぶん2011年の夏頃)はてながWebエンジニアの積極採用を行っていることを知り*1それなら受けてみようと思ったのがきっかけです。新卒と違って落ちてもショックを受けるだけで済むのでダメ元でした。
ただ、正直なところ採用してもらえるとは思っていなかったので、内定したあとの退職->引っ越し->入社->研修という流れはとても大変でした。ポルナレフじゃないですが、気がついたら京都にいた、という感じです。

はてなという会社

はてなという会社について何か書こうとも思うのですが、はてなの職場環境についてはかなり情報がオープンになっているので今更書くこともないかなーとか思います。
インターンの方のエントリとかが雰囲気が伝わりやすいんじゃないかと。

とりあえず美味しいオフィスランチとフリードリンク、無限うまい棒のおかげで太りそうです。なんとかしてください。

SIerからWeb業界への転職

きっかけのところで既に理由とか書いてしまいましたが、SIerからWeb業界に転職したことについてもう少し詳しく書こうと思います。


・・・と思ったのですが、眠くなってしまったのでまた別のエントリで書くことにします。

今感じていること

はてなに入って二週間ほどが経ち、自分の力不足をひしひしと感じています。
まわりが自分よりできる人ばかりという状況は、辛くもありますが同時にとても恵まれた環境だと思います。かなり焦りがあるのですが、まずは自分のできることから着実に、力をつけていきたいと思います。

はてなのサービスをより良くしていけるようがんばりますので、これからよろしくお願いします。f:id:hatz48:20120423024423j:plain

*1:今もやってる