今年の抱負

毎年、元旦には一年の計を立てることにしています。

その時に気をつけているのは、 

  1. シンプルで覚えやすい、
  2. 達成できたかできないか判定できる目標を、
  3. ひとつだけ立てる

ことです。

まず、一年の計を立てても一年後に忘れてしまっていたら達成のしようがないわけで、覚えやすいのはとても重要です。つぎに、「今年は健康にきをつける」みたいな目標は達成できたかどうか判定ができないので目標として追えません。「今年は昇進する」「今年は体重マイナス3キロ」など達成できたかできないかすぐにわかるものにしないといけません。最後に、色々と欲張って立ててみたくなりますけど人間そんなに器用に立ち回れないので、一年にひとつずつしっかり目標が達成できれば良しとしています。

最初にこの方針で立てた目標は、「今年はマネージャーになる」でした。マネージャーを通り越していきなり開発部長になってしまいどたばたしたのですが、、まあ達成したのかな。去年の目標は「cybozu.comリリース」。これはきっちり達成できました。

今年は家族孝行にしようと思います。「毎月一度、子供を行ったことのない場所に連れていく」。

過去最高に難しそうです。 

IPアドレスから国を引いてみる

IPアドレスから国や地域を調べる Web API は色々ありますね。
手元にIPアドレスから国を引くデータベースが欲しくなったので作ってみたのですが、
こんなのでいいのかどうか自信がないので公開してみます。

☆元データ

hostip.info で公開しているデータがあるよと某氏に教えてもらったのでまず試してみました。あるにはあるんですが、データベースに重複するエントリーがあったり(同じサブネットで国や地域が違うとか)、致命的だったのはサイボウズ本社のIPが別の国になっていたりとかで諦めました。

で、国レベルでいいなら RIR (地域インターネットレジストリ) から公開されている delegation 情報で十分じゃないかなと考えて、そちらをダウンロードしてみました。例えば APNIC ならここにあります。

☆データベース設計

IPアドレスはサブネット単位で管理されているので、IPアドレス全部を逆引きできるようにする必要はありません。B-tree なデータベースであれば対象となるIPアドレスより小さい最近接アドレスの国情報を調べればOK。SQLでいうとこんな感じ。

CREATE TABLE IF NOT EXISTS ip2country (
  ip INT UNSIGNED PRIMARY KEY,
  country CHAR(2) NOT NULL
);

ip カラムにはMySQL なら INET_ATON 関数で数値に変換したアドレスを入れます。1レコードにつきこれなら 4 + 2 = 6 バイトですね。

☆コンパクション

実際のサブネット割り当てを眺めると、US や JP には相当な範囲で連続して割り当てられています。上記のデータベース設計では連続する同じ国のレコードは一番小さなサブネットひとつあれば済みます。

というわけで、delegation 情報から抜き出したサブネットのアドレスをソートして、同じ国コードが連続するときは一番小さなサブネットしか出力しないことにすると、データベースのサイズを小さくできます。SQLのファイルサイズで 1MB 強にできました。

☆完成

というわけで、できたのでひとつ調べてみます。前述の hostip.info のダウンロードサイトのひとつ、ドイツのサイトを試してみました。

$ nslookup hostip.consolut.com
Name:   hostip.consolut.com
Address: 188.40.49.10

mysql> select INET_NTOA(ip), country FROM ip2country WHERE ip < INET_ATON("188.40.49.10") ORDER BY ip DESC LIMIT 1;
+---------------+---------+
| INET_NTOA(ip) | country |
+---------------+---------+
| 188.40.0.0    | DE      |
+---------------+---------+
1 row in set (0.00 sec)

うまく引けたようです。

☆ソース

delegation 情報を処理するスクリプト貼っとこうかと思ったんですが、はてなブログにファイルを貼る方法がわかりませんので、省略。まあごく簡単なものなのでお察しくださいということで。

作るのに1~2時間程度だったんですが、簡単すぎたのでもっとまともなデータソースを使わないと精度でないんじゃないかと不安です。突っ込みあれば @ymmt2005 までお願いします。

考える技術

昔サイボウズ社内で書いたブログの公開、第2弾です。

--
【お盆特別企画】


ロジカルシンキングとかクリティカルシンキングとか、横文字にするとありがたがられるかも知れない、つまるところ考えるということについて考えてみる。

論理的思考能力という言葉を近年よく聞くようになった。論理的であることが必要な場面は確かにあって、ことコンピューターを扱う仕事をしていれば必要不可欠ではある。最近の流行はこのあたりだろうか。

さてはて。これらの内容はまさに論理的で立派である。付け加えることは論理的にはない。

ので、非論理的に、論理的思考能力ということについて付け加えてみたい。まあ身も蓋もない言及かもしれないのだけれど。

1.論理を瞬時に構築はできない
  堅固な論理の土台は、より基礎的な論理である。これの意味するところは、つまり誰も一瞬じゃ論理的に考えるなんてできませんよ、ということだ。

  日頃から、いろいろな情報・経験を振り返り、整理しておく。この習慣を通して基礎的な論理を持っていればこそ、新たな論理を展開できる。

2.憶えてなきゃだめ
  考えるってのは、材料が必要なのだ。なんの情報もない状態で人が考えることなんて、眠い・腹減った・眠い・腹減った・暇・腹減った・俺なにやってんだっけ・眠い・暇・暇、そんなもんだ。

  目の前にあることについて考えることはまあ誰でもできるのだが、それだとものごとの繋がりが分からない。ものごとの繋がりを理解するには、いろいろなものごとを「憶えて」なければだめなのだ。


というわけで、「日頃から考える」「いろいろなことを憶えておく」ことが、様々なテクニック以前に必要だと主張したい。


ま、そんなことを馬鹿正直に本に書いても、売れないんだろうけどね。。。

英語が書けない人のための、英語を書く方法

昔、サイボウズ社内のブログで公開して人気があったのをいくつか公開します。
まずは、英語が書けない人のための 書き方講座。

----

「英語なんて読むのも大変だし、書くのはもっと大変」という方、たくさんいるんじゃないでしょうか。 

私もなかなか英語は苦手で、苦労してきました。今でも苦手は苦手ですが、読まなきゃいけなければ読めるし、書かなきゃいけなければ書ける、くらいにはなりました。 

というわけで、英文をなんとか書けるメソッドをご紹介します。自己流ですし、これで「ばりばり」書けるメソッドというわけではないですが、やんなきゃいけない時には役に立つかなと。 

■読めなくても書ける 

正確に言うと、「(難しい英文を)読めなくても(簡単な英文なら)書ける」。英語を読むのが苦手でも、書けます。大丈夫。書ける文章を書けばいいのです。 

と、当たり前のようですが、実は書ける文章を書くというのが最初の難関だったりします。なぜなら、えてして「日本語で書いた文章を翻訳」しようとするから。 

■日本語を翻訳しない 

日本人は日本語が得意です。難しい言い回しも日本語であればすいすいでてきます。当然の結果として、それを英語で表現するのはとても難しくなってしまいます。 

英語を書くときは、小学生の作文をするくらいの気持ちで、自分の使える英語表現だけで表現しようとするのがまず大事です。目安は、一文8ワード以内の表現くらいから始めると良いかと。 

ちなみにこれは英語を話す際にも同様に使えるテクニックです。 

■文法はちゃんと勉強する 

英語の文法自体は、大して覚える数はありません。小説を書くのでもなければ、基本的な文法で十分でしょう。技術文書を書くような場合であれば、仮定法さえほとんど使わないと思います。 

でも、文法を知らないと、ちゃんとした文章にはなりません。"All your base are belong to us." みたいなことになっちゃうわけです。 
http://ja.wikipedia.org/wiki/All_your_base_are_belong_to_us 

■文例集をぱくる 

メールを書くとか、決まり切った表現は多いです。そういう文章であれば文例集でかなりの用が足ります。Webにもいろいろありますが、質が高いものはあまりみないので、いい本があれば手元に置いておくといいでしょう。 

■電子辞書を使う 

いくら短文とはいえ、表現したいがことばが分からないときはやはり辞書を引くことになります。辞書を引くのが面倒でやらないと、伝えたいことを省くことになってしまいます。 

で、その辞書ですが、当然ながら紙の辞書では面倒で引かなくなってしまうでしょう。お勧めはやはり電子辞書。私はカシオの EX-word DATAPLUS2 (XD-GT9300)を愛用しています。 
http://casio.jp/exword/former/XD-GT9300/ 

現行機種だとここら辺でしょうか。 
http://casio.jp/exword/products/XD-SP9500/ 

■辞書をうまく使う 

辞書があっても、うまく使えないと適切な表現を書けません。和英辞書を使えばOK、かというと、実際にはへんな英語になってしまうことが多いでしょう。これまで色々な和英辞書をみてきましたが、作文に使えるような和英辞書にはお目にかかったことがありません。 

これは前の項と同じ理由で、日本人が思いつく多彩な表現が和英辞書に収まりきらず、単純な用法しか書かれていないからです。なので、私の辞書の引き方はこんな感じです。 

1.和英を引く 
2.近い意味を見つける 
3.シソーラス(類語辞書)を引いて類似表現をさらにみる 
4.英和辞書で確認する(しってる言葉なら省略) 
5.コロケーション(活用?)辞書を引いて正しい使い方をみる 

これだけ書くと手間に思えるのですが、電子辞書ならものの数秒で引けます。コロケーション辞典は耳慣れない方もいるかもしれませんが、単語の文脈中での使い方(前置詞だったり形容詞だったり動詞だったり)を調べる辞書のことです。自然な英文を書くには必須の辞書です。 

まとめると、「コロケーション辞典の付いている電子辞書を使う」のがお勧めです。 

■以上 

自己流でしたが、こんな風にしてきましたってことで。他にもいい方法あれば教えてください。