2012年12月29日土曜日

コミケ83で Linux Kernel Updates を出します!(31日東X-58b)

コミケが始まりました!告知が遅くなりましたが、Linux Kernel Updates という Linux Kernel について書いた本を出します。

表紙はきのとなおとさんに描いていただきました!

場所は 31日(月) 東X58b 「低級はっかーズ」です。

目次です。

  • What's New in Linux 3.7?
  • TCP Fast Open
  • Load Average の落とし穴
  • Completely Fair Scheduler
最近の Linux の変更点と、スケジューラーの解説をまとめました。 中身のプレビューです。

みなさまのご来場をお待ちしています。

2012年9月2日日曜日

DNSSEC Look-aside Verification を使うべきでない3つの理由

DNSSEC は本来ルートゾーンから順番に証明していき、最後にホストのレコードを確認するという仕組みになっています。ところが、大人の事情で上位ゾーンに鍵を登録できない人のために、DNSSEC Look-aside Verification (DLV, RFC5074) という仕組みがあります。

DLV は、以下のような仕組みで動きます。

  1. example.net をルートゾーンからの連鎖で証明しようとする
  2. どこかで連鎖が止まっている(上位ゾーンに登録されていない)ため、確認できない
  3. example.net.dlv.isc.org をに DLV レコード(DS レコードとほぼ同等)が登録されていないか確認する
  4. 得られた DLV レコードを使って example.net の証明をする

この dlv.isc.org を DLV に使って良いというのは別途設定し、 trust anchor をリゾルバに登録しておきます。

これだけ見ると、一見便利そうなのですが、私は使うべきではないと思います。3つほど理由をあげます。

DLV を有効にすると遅くなる

本来の認証の連鎖が途切れた時に DLV が引かれますので、単純に2倍以上遅くなります。さらに、日本からだと dlv.isc.org の NS が遠くにあるので、かなり待たされます。これは単純にレスポンスの悪化につながります。

グラフは DNSSEC on, DNSSEC on + DLV有効, DNSSEC オフでそれぞれ名前を引いてみた場合の、レスポンスタイムになります(5回平均)。 jprs.jp は DNSSEC の鍵が正しく登録されているドメイン、yuryu.jp はされていないドメインになります。 計測は unbound 1.4.18 を用い、毎回の計測の前にリスタートしてキャッシュをクリアしています。また、実際のクエリタイムに近づけるために、 .jp 及び dlv.isc.org の SOA をクエリして、上位ゾーン情報はキャッシュ済みの状態です。

jprs.jp は上位ゾーンからの連鎖で正しく証明ができるので、 DLV のオンオフにかかわらずクエリタイムは一定です。ところが、 yuryu.jp のように証明できないドメインだと、 DLV のクエリが追加で走るのでとても遅くなります。 DNSSEC の on/off よりも重大なパフォーマンスの低下をもたらします。

DNSSEC がきちんと普及すれば問題ないのですが、DLV は「普及過程のためのworkaround」という位置づけです。ほとんどのドメインが署名されていない現状で、このパフォーマンス低下は許容できません。

鍵更新のポリシーが不透明

ルートゾーンの KSK は定期的に更新される、少なくとも5年に1度は更新されることになっています。また、 IANA によって鍵更新ポリシーや記録がきちんとメンテされています。 DLV のキーはこれと同等の基準では運用されていません。一応ポリシーは書かれてあるんですが、そこには「年1回 KSK 更新します」とあります。ところが実際には 2008年から鍵は更新されていません。

ソフトウェアのサポートが不十分

BIND は DLV の trust anchor も含めて自動更新に対応しています。ところが、 unbound の場合はルートゾーンの trust anchor については自動更新に対応しているものの、 DLV trust anchor は自動更新しません。

もし KSK が更新されたとなると、 trust anchor も含めてアップデートしなければなりませんが、これが人力になってしまいます。放置すると証明できないゾーンが生まれることになります。

そして、別の記事にも書きましたが、リゾルバによって挙動が異なる場合があります。利用者も少ないので、枯れているとは言いがたい状況です。

まとめ

以上3つの理由により、少なくとも現状は DLV を使うのは望ましくないと思います。 ルートゾーンが署名され、多くの ccTLD も署名されつつありますから、無理に DLV を用いて DNSSEC を導入するのではなく、上位ゾーンの対応を待つべきでしょう。

BIND9 で DLV が期待した動きをしない

大人の事情で最近 DNSSEC にはまってます。 unbound も BIND も、新し目のバージョンは標準対応しているし、標準で有効になっているのですが、どうも BIND で DLV を使おうとすると、うまく動きませんでした。

環境は以下のとおりです。

  • Ubuntu 12.04 LTS, kernel 3.2.0-29 amd64
  • Unbound 1.4.18
  • BIND 9.9.1-P2
  • OpenSSL 1.0.1

DNSSEC には、自分の上位ゾーンが署名に対応していない場合に備えて、 DLV(DNS Look-aside Verification )という仕組みがあります。おおまかに言うと、本来はルートゾーンから順繰りにたどっていってドメインの認証をするのですが、その代わりに ドメイン名.dlv.isc.org を問い合わせて、 DS レコードの代わりに DLV レコードを引っ張ってきてドメインの認証をします。これが BIND9 でうまく動きません。

テストには DNS-OARC から提供されているテストレコード を使用しました。

まず unbound 1.4.18 での想定通りの動きです。

~/bind/9.9.1 $ bin/dig -p 1418 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 1418 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58334
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; ANSWER SECTION:
a.nsec.dlvtest.dns-oarc.net. 917 IN     TXT     "A is for AXFR"
a.nsec.dlvtest.dns-oarc.net. 917 IN     RRSIG   TXT 5 5 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. c4CXn8ejvaiexLq5FuQv6bFrfRlUGF//2jew7rGqICUZAj0lEdLkxu6Y H47SrIjYIb0xwzO2QMnVcLKAvVfuozQ8bq/mgn0x7RHQ32Bh0ZS55scw Wxji8iCHxcr5rzxtkMcAZzjx28A/ir+jKizfF8RCEv3MtPqd7+Y71YCk 0Jw=

;; Query time: 0 msec
;; SERVER: 127.0.0.1#1418(127.0.0.1)
;; WHEN: Sun Sep  2 00:39:06 2012
;; MSG SIZE  rcvd: 267

きちんと引けてますね。 flags に "ad" が入っていれば DNSSEC により認証ができたという意味です。

さて次は BIND9 です。

~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21002
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; Query time: 1690 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:38:28 2012
;; MSG SIZE  rcvd: 56

待たされた挙句 SERVFAIL になってしまいました。ところが、 BIND を再起動した上で次の手順を踏むと、引けるようになります。

  1. 一つ上のゾーンについて ANY で DNSKEY を取ってくる
  2. 目的のゾーンについてクエリを投げる
~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec nsec.dlvtest.dns-oarc.net any

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec nsec.dlvtest.dns-oarc.net any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45581
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;nsec.dlvtest.dns-oarc.net.     IN      ANY

;; ANSWER SECTION:
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   DNSKEY 5 4 3600 20310611060557 20110616060557 23716 nsec.dlvtest.dns-oarc.net. EIBG75iE6v53oOOI1PfWvrvMi0qHYigxrtJMTdMdFUHzZrh71+hZSM88 ILw6UUvotyb9YUH1opjB4iA9Ks8ZBqaSn+AwzbP6pNfMRFiNVlYoLBLq y6cERjpb/6jUr/dxGq/57VThi8BYjiHF1aYv3vgSLhCvfvI2tvnfgxlN YeL286GDojf9bSaQrrHOcWdqivTibiBarxNrAfxHGE3MIpX1eZUGsXL4 aHrMv7n7juy86mfm+lZg7y4JfT32IADygbdTWQQYF8P7TYzPZof38D6s cYnvYCx+m770Uj9Z3z7eTHkk5AgvTDcorNVp/xPFPqGaJ9iwReMoeE9N wngNtA==
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   DNSKEY 5 4 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. UiNDgsQdHdb2Tni4d6ebGajNwmxTFk+6gvil9M4/stimqOnL2RQqX6Kb IASX+8z4AzYVQFsb7OCyGugmsBc5ukjTR4at2j3sp6Xjk4r7J5DMAADY ZHTgBua2AOySy/DdVTfTdRK4YbQcHLggw3Nr8r64daD14SFUAL2nGOSk cNM=
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  257 3 5 AwEAAejxNtUB1RBO7DZP1NtC2V46LWt5r2XM5ykywFYmeG6LCmn6oafG 27djNKFyCHWAmNmZXaQXg60YAGT8XQdMrmvidPCQqrB7w2ZO0w/rEqVp 74KT46yuTKGBOUFJ4nWLw77mvxG4v8HEhvZUyYspLvBSt/qi72S66SP2 njyymaQbZAT0ZP4NsjO6L8UugDwGJuRdd1qXyOLf9blogviFjdFe7Y8a TV071VCSj7/iTg0sqPlZvy5kZB1Sz+yE/xrvqDA7WIMDpr5nahWPbAzm NigLZFy1+PKF4U4ZTp3t9+kPqWpSBE0NpfaGY79b96JRMRHtGM/+TqWj 79jRZyUE1oU=
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  256 3 5 AwEAAfGatB0iI+BHO7JStuOFATy2iRyVDnmdCsdDTgtINKtcIqKWbw7w xjQ3dXhUSrjVVfEHJIScxiyjBJ0u1mG4FhY0zGusenn5R6RuhTAjZ/Ow wvp+1X1orWdwUVncYS3a+sGfyr4XBbFQSSB0HLSZxzskPbNQ1NR8fX2L iy8V89Zv
nsec.dlvtest.dns-oarc.net. 3600 IN      DNSKEY  256 3 5 AwEAAamEbJrkD6whOxQH7y+JhH5AH5kwjXfG43p9SJ/j0d+58tcK2cuQ 4rpXGD0KybG8rte7F0ja0Dlv9PFhL2UqKrdtk43ZLwZjAnotcTODqDog D8EHEOTwt2LMy9FGTf40IgoUQfG3PxcJsAkNOswqw41vu5Te4mzzDhrh AQWRldL5

;; Query time: 1578 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:37:11 2012
;; MSG SIZE  rcvd: 1124

~/bind/9.9.1 $ bin/dig -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt

; <<>> DiG 9.9.1-P2 <<>> -p 9912 @localhost +dnssec a.nsec.dlvtest.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25080
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;a.nsec.dlvtest.dns-oarc.net.   IN      TXT

;; ANSWER SECTION:
a.nsec.dlvtest.dns-oarc.net. 3600 IN    TXT     "A is for AXFR"
a.nsec.dlvtest.dns-oarc.net. 3600 IN    RRSIG   TXT 5 5 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. c4CXn8ejvaiexLq5FuQv6bFrfRlUGF//2jew7rGqICUZAj0lEdLkxu6Y H47SrIjYIb0xwzO2QMnVcLKAvVfuozQ8bq/mgn0x7RHQ32Bh0ZS55scw Wxji8iCHxcr5rzxtkMcAZzjx28A/ir+jKizfF8RCEv3MtPqd7+Y71YCk 0Jw=

;; AUTHORITY SECTION:
nsec.dlvtest.dns-oarc.net. 3600 IN      NS      ns.dns-oarc.net.
nsec.dlvtest.dns-oarc.net. 3600 IN      NS      sns-pb.isc.org.
nsec.dlvtest.dns-oarc.net. 3600 IN      RRSIG   NS 5 4 3600 20310611060557 20110616060557 54345 nsec.dlvtest.dns-oarc.net. E0FInFhHCmZ/C6jh8+QZ0HP5V4GYXBLvEbSiCYTVJgsvRXIbBdzAG4MN jUgMFnrSjyCKOGSelrD4whnbOExD6MdtY0Vwq6xMt1XIpjRc6JoG8ja6 DL5qwlqb5NtRQCV2Z2FDT6QuXtyr6ODh7amj+YSWCOW5cS25DYmBcsnC 2UU=

;; ADDITIONAL SECTION:
ns.dns-oarc.net.        172791  IN      A       149.20.58.65

;; Query time: 118 msec
;; SERVER: 127.0.0.1#9912(127.0.0.1)
;; WHEN: Sun Sep  2 00:37:18 2012
;; MSG SIZE  rcvd: 513

"ad" も立っていて、正常に認証できていると示されています。ログはこんな感じです。

client 127.0.0.1#39784 (a.nsec.dlvtest.dns-oarc.net): query: a.nsec.dlvtest.dns-oarc.net IN TXT +ED (127.0.0.1)
validating @0x7f8a5802a9c0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a5802a9c0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a58042860: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
error (no valid RRSIG) resolving 'a.nsec.dlvtest.dns-oarc.net/DS/IN': 192.5.4.1#53
  validating @0x7f8a60056310: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60056310: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: nsec.dlvtest.dns-oarc.net SOA: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
  validating @0x7f8a60054670: a.nsec.dlvtest.dns-oarc.net NSEC: no valid signature found
error (no valid RRSIG) resolving 'a.nsec.dlvtest.dns-oarc.net/DS/IN': 149.20.58.65#53
error (no valid DS) resolving 'a.nsec.dlvtest.dns-oarc.net/TXT/IN': 149.20.58.65#53
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: no valid signature found
validating @0x7f8a580337d0: a.nsec.dlvtest.dns-oarc.net TXT: bad cache hit (a.nsec.dlvtest.dns-oarc.net/DS)
error (broken trust chain) resolving 'a.nsec.dlvtest.dns-oarc.net/TXT/IN': 192.5.4.1#53

もう一つのレコード、 a.nsec3.dlvtest.dns-oarc.net は両方とも正常に引くことができます。

BIND の設定ファイルには

    dnssec-enable yes;
    dnssec-validation auto;
    dnssec-lookaside auto;

と書いてあります。

正直お手上げです... BIND の挙動がおかしいように思えるんですが、どうなんでしょう。検索してもよくわかりませんでした。

冬コミ申し込みました!

冬コミに申し込みました! サークル名は「低級はっかーズ」です。 Low Level Hackers と読みます。

Linux Kernel のちょっといい話を本にできたらと思ってます。がんばるよ! 内容の予定ですが

  • 最近(3.0以降?)のカーネルの変更点まとめ(ChangeLog や KernelNewbies から、目立つ変更点をまとめてみます)
  • チューニングネタ... 主に sysctl のパラメータの設定について解説したいです。特に TCP/IP 周りについて

結構マニアックな話として、 Linux 3.4 で追加された X32 ABI(64bit モードなんだけどポインタ32bit) や、3.2 で追加された TCP Proportional Rate Reduction (Google が開発した新しい TCP の再送アルゴリズム)のベンチマークや解説を入れようと思います。

予定は未定ですが、がんばります! blog にも一部書いていければいいなぁと思います。よろしくお願いします。

2012年6月18日月曜日

古いLet's Note で高い解像度を使う方法

はじめに

古い Let's Note (に限らないかもしれませんが) は、公式には限られた解像度しかサポートしておらず、大きなディスプレイをつないでも高解像度は生かせません。 個人的に WUXGA 映したいという要求があったので試行錯誤した結果、映すことに成功しました。 VGA なので限界はあるし、実際ちらつくんですが、ハックとして有用だったのでまとめてみました。

CF-W5/Windows XP SP3/Panasonic標準ドライバで確認しています。

注意

保証外の手順なので、機械を壊す可能性があります。また、レジストリに値を書き込むので、最悪OSが起動しなくなります。 at your own risk でお願いします。

必要なツール

DTDCaluclator と MonInfo をインストールします。

手順

MonInfo でディスプレイの EDID を取ってきます。クリップボードにコピペします。

DTD Calculator を起動して、コピペします。




1920x1200 は BIOS レベルで禁止されているようで、そのままでは使えません。そこで、微妙に小さな解像度にすることによって、ブラックリストを回避します。
そこで、Calculation タブで H Active Pixels に 1919 と入力して、 1919x1200 の解像度にします。そして、信号のタイミングを合わせるために、 Horizontal Blanking Interval を +1 します。

Registry Hack のタブから Write DTDs to Registry として設定を保存し、再起動します。
あとは通常通り画面のプロパティを開くと、カスタマイズした解像度が使用できます。




参考

2012年6月11日月曜日

フレッツ光ネクストと IPv6

日本は取り残されてしまっちゃいましたが、World IPv6 Launch なんてイベントもあって、そろそろ IPv6 の普及が見えてきたのかな、なんていう感じです。

さて、フレッツ光ネクストで IPv6 を使うには大きく分けて「PPPoE IPv6」と「IPoE IPv6」の2種類があります。

PPPoE IPv6 は、普通の PPPoE 接続のインターネットを IPv6 に対応させたものです。なんか PPPoE  2セッションも張る必要があるのかなという気はしますが、ともかくこれで IPv6 通信ができます。ただし、利用には PPPoE IPv6 対応のルーターが必要で、新たに購入する必要があります。フレッツ光ネクスト(NGN) IPv6 PPPoEに対応したルータ一覧 によくまとまっていますが、これがまた種類がありません。実質的に NTT が売ってる MA-100 や DS-RA10 を買うことになりそうです。 あんまりイケてません。

IPoE IPv6 は、フレッツ網で使っている IPv6 を、フレッツ網の外につながるようにした物です。 IPoE って、 Ether は普通 IP 通すので、変な名前に思いますが... それはともかく。こっちだと、「IPv6 ブリッジ」機能が付いている多くの家庭用ルーターで動作します。ただし、ISP は結構限られていて、場合によっては乗り換えが必要です。大手だと IIJmio とか BIGLOBE、 @nifty あたりでしょうか。 フレッツのページから検索できます

どちらも一長一短ですが、機器の更新が要らないし、PPP のオーバーヘッドがないことを考えると IPoE のほうがよさそうです。ただ、 IPoE のほうは NGN の技術的な限界で、 NGN と ISP を接続する「Virtual Network Enabler」と呼ばれる事業者が3社しかなく、このへんの将来性に難がありそうです。IPv6 IPoE VNE数増加が公表される、その他 というニュースもあるので、もうちょっとましになりそうですけど。

私は現在 so-net を使っていて、 PPPoE IPv6 には対応しているけど IPoE IPv6 には非対応、さらに PPPoE 対応ルーターも持っていないので、ルーターかISPのどちらかを変更しないといけません。 これを機に IIJ なんかに変えてみようかなぁと思ったりしますが、月2000円は高いなぁと思ったり... 難しいですね。

2012年6月1日金曜日

新卒で就活をする方にやってほしいたったひとつのこと

昨日の退職エントリは予想以上の反響で、書いた本人ちょっとびっくりしています。

結果として私も就活に"失敗"したことになるので、少ない経験ですが何かの役にと思って書きました。今日はもうちょっと前向きな話です。

新卒で就活をする方にやってほしいたったひとつのこと

インターンシップに行きましょう。

私が新卒で就活をしていた時にやらなくて、一番後悔したのがインターンシップです。

理系の研究室の学生だと、教授の反応が芳しくなかったり(「そんなことしなくても推薦するよ」「研究が学生の本分」)、学会発表や論文執筆が忙しかったり、進学と迷っていたりとなかなかインターンシップに行くモチベーションがないと思います。ですが、そこを押して、ぜひインターンシップに行って欲しいと思います。

インターンシップに行くと良いことがたくさんあります。
  • 採用選考時に考慮してもらえる(ところもある)
  • 社外秘の内情がよくわかる
  • 実際の業務に触れられる
  • 仕事中の社員の顔が見れる
私がもしインターンシップに行っていれば、ソフトウェア開発手法のミスマッチなんかは結構防げたかなと思いました。

あと、「残業どれぐらい?」とか「休みは取れるの?」みたいな、すごく気になるけどなかなか説明会では本当のところが見えない疑問に関しても、インターンシップにいけば実際のところがわかります。説明会では取り繕うことができても、インターンシップ生がいる間だけ残業を減らすなんてことはできないからです。

それから、ソフトウェア開発の現場に関しては
  • パソコンのスペック
  • ディスプレイの大きさ
  • 机や椅子の使い心地
  • ソース管理の有無
  • バグ管理の手法
などを観察することによって、その会社がソフトウェア開発をどう捉えているのか少し感じ取れるのではないでしょうか。

どんな会社にインターンに行く?

一番行きたい会社のインターンに行きましょう!選択の余地なしです。就活の本番と違うので、親の目とか気にせず行きやすいと思います。

心のなかでは本当に興味があっても、「安定してないんじゃないの?」「聞いたことない」「外資の日本支社なんて、使いっ走りさせられるだけ」みたいな、周囲の声に惑わされて応募しない会社、中にはありませんか?そういうところこそ、インターンシップで答えを見つけるのにピッタリです。


インターンシップに行ったことのない私ですし、インターンシップに行ったからといって今回のミスマッチが防げたとは限りませんが、もし一つだけ挙げるとしたらこれかな、と思います。

インターンシップ、おすすめです。

2012年5月31日木曜日

パナソニックを退社しました


5月31日で、2年とちょっと働いたパナソニックを退社しました。最初半年ぐらいは研修だったので、実質1年半ぐらいで辞めたことになります。

辞めた理由はシンプルで、私はソフトウェアの開発がしたかったのですが、実際にはソフトウェアの開発が出来なかったこと。それから、社内の雰囲気が合わなかったことです。

もし今就活中、または来年就活の方で製造業を志望されているソフトウェアエンジニアの方がいたら参考になるかもしれませんので、少しだけ書いてみます。

ただ、大きな会社なので、部署によっては全然雰囲気が違うようで、楽しく仕事をしているところもあるようです。たまたま、私が合わなかっただけです。実際離職率は低めです。

それから、仕事の方針にはミスマッチはありましたが、部署の皆様には大変お世話になりましたし、私の考えに共感して助けてくださることもありました。特定の方を非難する意図はないことを申し添えておきます。

ソフトウェア開発について

私の部署では、絵に描いたような昔ながらのソフトウェア開発が行われていました。

単価計算は人月とステップ数。仕様書を書く上流工程が重要で、コーディングは単純作業という価値観のもとでの開発です。当然正社員はなかなかコーディングに携わることができませんでした。

また、単純作業とみなされがちなコーディングを効率化しようとするモチベーションが少なかったのか、いくつか作業環境で疑問に思うところもありました。例えば、メモリ 1GB ぐらいの遅いマシンでビルドしている、ディスプレイが17インチ、きちんとしたソース管理がない、などです。PCスペックやディスプレイなどは入社の時期によってはそこそこいいものになるんですが、「壊れるまで使う」のが基本のためなかなか新しくなっていませんでした。

それから、入社してからプログラミングを始めたという方も結構いらっしゃったので、どうしてもサイエンスの面からのアプローチが弱かったと思います。オブジェクト指向を知らない(クラスって何? というような感じ)でコーディングしている方もいらっしゃったし、アーキテクチャ、計算量やアルゴリズムを純粋に議論することが少なかったように感じました。

「仕様書を書いて、たくさんの人間を使ってプログラムを作る」ことが大きな仕事をする、それが付加価値なんだと言っていた方も居たので、私の目指す方向とは決定的に違うなと思いました。

就活とのミスマッチ

パナソニックがグローバルチャレンジャーというキャッチフレーズで採用活動をしていることは、ご存じの方もいるかもしれません。私も海外で仕事をしたいと考えていました。

ところが、入社して2年になりますが一度も海外出張はありませんでした。これも部門によっては最初の研修で海外に行くことがあるようなので、一概には言えないのですが...

海外と全く接点がなかったわけではなく、メールや電話でやり取りをすることもありました。ただ、自分の意志でやり取りをするのではなく、先輩社員が書いたメールの添削、翻訳になってしまうこともあったので少し不満でした。

「グローバル」は以上ですが、「チャレンジャー」のほうにも少しミスマッチがありました。

具体的には書けませんが、改善提案をしたときには「新入社員(または入社2年目)なのに」というリアクションがついてまわりました。中には「話を大きくすると、新入社員が思いつくようなこと何故今までやっていなかったのか」と問題になるのでと却下されたこともありました。

私の話し方に未熟な点があったのも事実ですが、残念でした。

男社会

技術系の会社ではよくあることだと思いますが、ほぼ完全な男社会です。100人ほどの部門でしたが、女性は私を含めても4, 5人でした。

キャリアにどれぐらい影響があったのかはよくわかりませんが、日常的な話で「ん?」ということは多かったです。女性の人物評はまず外見で、「かわいい」「若い」というのがまず言及されていました。飲み会でも「女の子」と呼ばれてしまうし、そういう振る舞いを期待されることもありました。

まあ、男女集まればお互い様なこともあるし、女性側だっておじさんの悪口言ってるものなので、一方的な話になっちゃいますけどね...

また、トランスジェンダーについては戸籍上も変更するならともかく、そうでないなら対応しづらいと言われました。

まとめ

勤務環境としては、休みたくさん取れるし(年間25日付与されますし、完全消化できます)、残業もそんな壊滅的には多くないのでとても良かったのですが、ちょっと違うチャレンジがしたくなったので退職しました。

明日からは違う会社で働きます。今までありがとうございました!明日からよろしくお願いします!

2012年2月1日水曜日

MySQL バックアップスクリプト

MySQL は世界で最も使われている RDBMS の一つですが、問題となるのが定番のバックアップ方法がないということです。 mysqldump を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISAM が混ざっていたりするとそれぞれトランザクションが使えたり使えなかったり、色々とややこしいです。

そこで、データベースごとに --single-transaction を使うか、 --lock-tables を使うか切り替えて、複数のデータベースを一気にダンプする PowerShell スクリプトを書きました。

2012年1月2日月曜日

謹賀新年

新年おめでとうございます。

昨年は転職活動始めてみたものの中途半端になったり、空回りしたりと上手くいかないことも多かったです。今年は飛躍の年にしたいです。

この blog もぼちぼち更新していきますので、今後もどうぞよろしくお願いします。