Posts Tagged ‘fac2010’

    はてなブックマーク - PostgreSQL IN句での複数条件指定
    このエントリーをはてなブックマークに追加

    もういくつも寝ないでお正月です!

    Fusic Advent Calender5回目、最多出場回数を獲得することになりました安元です。
    まだ確認してませんが、年末ジャンボが当たっているはずなので、
    当たったあかつきには来年は車を買いたいと思います!!

    基本的なIN句の利用方法

    SQLでIN句を使用したことはありますか?
    一致させたい条件をカンマ区切りで並べるだけで簡単便利に利用できますね。

    福問い合わせを利用する場合は以下のようになります

    IN句での複数条件指定

    さて、このIN句で複数条件指定できたら便利だと思いませんか?

    日本語で条件を表現すると基本的なINの条件は
    「安元 もしくは 納富 もしくは 浜崎 もしくは 渡辺」となりますね。

    複数条件が指定できるということは
    「安元で男 もしくは 納富で女 もしくは 浜崎で男 もしくは 渡辺で女」
    こんな条件指定ができるのです。

    ではSQLを見てみましょう。
    今回は副問い合わせでの書き方から

    簡単ですね!

    指定したいカラムをカンマ区切りで括弧でくくるだけです。
    副問い合わせの返り値も複数カラムがかえってくるように変更しています。

    注意点は、
    条件となるカラムの並び順と、帰ってくるカラムの並び順をそろえることです。

    では、副問い合わせではなく、値指定の場合はどうなるでしょうか?
    以下のようなSQLになります。

    見れば納得な感じかと思いますが、
    知らないと意外とかけないSQLです。

    利用することは少ないかもしれませんが、
    場合によっては2回に分けなきゃかけないSQLを1つにまとめることもできますので
    覚えておくときっと何かの役に立ちますよ!

    さて、12/1から始まり経営陣まで巻き込みました
    Fusic Advent Calender2010も、この投稿をもって本当にお開き!
    続きはまた来年のお楽しみ!(笑点 5代目円楽風に)

    Fusic技術者はじめ経営陣・営業・事務ともども
    来年も一丸となってがんばって参りますのでよろしくお願いいたします。

      はてなブックマーク - 公開鍵暗号のちょっとした誤解
      このエントリーをはてなブックマークに追加

      初めまして。Fusicで副社長をしている浜崎です。

      社内全体が「副社長も書けよ」な雰囲気になり、なんとなく書くことになりました。

      納富と同様、とても長いこと技術から離れているので、さて何を書こうかと悩んだわけですが、少しさかのぼって、学生時代の社会インフラに関する研究の一環として取り組んでいた「暗号」について話したいと思います。当時に暗号を専門とする先生から得た知識なのですが、公開鍵暗号に関して、誤解されて広まっている情報についてです。

      公開鍵暗号とは?

      さて本題に入る前に、公開鍵暗号とはなんやねん?ということについて書いておきます。

      そもそも暗号というのは、ある情報を秘匿的にやりとりするための手段なのですが、公開鍵暗号もその手段の1つです。公開鍵暗号は、暗号化のために用いる「公開鍵」と復号化のために用いる「秘密鍵」という異なる別の鍵を用いることで成り立つ暗号方式のことです。これは1976年にデフィーとヘルマンによって発表されました。

      それまで暗号といえば、共通鍵暗号という方式が主流でした。これは、暗号化と復号化に同じ「共通鍵」を用いることで成り立つ暗号方式です。例えばお互い秘匿情報をやりとりする場合は、事前に「共通鍵」を共有しておき、その鍵で暗号化・復号化を行うことで秘匿情報のやりとりを成り立たせています。この概念は一般社会でも広く応用されている考え方で、例えば野球やバレーボールにおけるブロックサインなんかも広義ではその枠組みに入るんではないかと思います。

      ただ、この共通鍵暗号には問題がありました。それは前述した、事前に「共通鍵」を共有しておくことをどうやってするか?という配送問題です。共通鍵が漏れてしまった場合、それで暗号化されたものを第三者が復号化出来てしまうわけですから、当然共通鍵そのものも秘密にやりとりしなければなりません。じゃあまたそれを秘密に通信するために別の鍵を作って、またそれを秘密に・・なんてことをしてても一向に解決はしないわけです。また、例えば100人の人と別個に秘匿通信をする場合、管理すべき共通鍵は100通りとなり、それも煩雑です。

      そのような問題を解決したのが公開鍵暗号です。これは鍵の配送問題や管理の煩雑さを解決する手段としてとても有効なものです。フローは以下の通りです。

      1. 情報の受信者(以下A)は、暗号化用の鍵(公開鍵、以下P)と復号化用の鍵(秘密鍵、以下S)を作成する。

      2. 続いてAは、Pのみを広く公開する。SはA自身が厳重に管理する。

      3. Aに対して秘密の情報を送りたい送信者(以下B)は、公開されているPを用いて、情報を暗号化してAに送信する。

      4. 暗号化された情報を受け取ったAは、Sを用いて復号化する。

      この方法を用いることで、AさんはPを広く公開すればよいだけなので、配送問題がクリアされます。

      この公開鍵暗号には、ElGamal暗号や楕円曲線暗号等いくつかの方式がありますが、最もメジャーな方式は、1977年、つまり公開鍵暗号が発表された翌年に、Rivest、Shamir、Adlemanにより発表されたRSA暗号でしょう。これは素因数分解の困難さを利用したものなのですが、SSL通信等で用いられている方式です。ただこのRSA暗号が、本日の標題である誤解を引き起こしている要因になっているのです。

      公開鍵暗号の誤解

      その誤解は以下のようなものです。

      秘密鍵Sで暗号化したものは公開鍵Pで復号化できる

      これってよくよく考えると暗号化の意味がない(だって誰でも復号できるんで)わけなんですが、この記述がなされたものが多く出回っているのは事実です。例えば日本ベリサインの公開鍵暗号について解説したページでも同様の記載が見受けられます。

      このような誤解を招いた理由は、前述した公開鍵暗号方式の1つであるRSA暗号がそのような性質を持つためなのです。つまり、秘密鍵Sで暗号化したものを公開鍵Pで復号化する対称性の性質を持っているんですね。公開鍵暗号を代表する最もメジャーな方式がそのような性質を持つため、公開鍵暗号自体がそのような性質を持つと勘違いしてしまっているということです。実際に他の方式ではそのような性質を持たないものもありますんで、公開鍵暗号の定義としては問題ありかなと思います。

      とまぁ、つらつら書きましたが、私は暗号の専門外なのでうかつなことが書けないなぁ〜と思いながら最後まで来てしまいました。でも昔学んでいたことをほじくり返してみるのもいいですね。よい機会でした。では、みなさん、よいお年を!

      { 2010.12.29 }

      自然対数の底

        はてなブックマーク - 自然対数の底
        このエントリーをはてなブックマークに追加

        社内全体が「社長も書けよ」的な雰囲気になり、渋々書くことになりました。

        生まれて初めてのブログを書く納富です。初体験です。

        さて、いざ書こうとしたのですが、まず長いこと開発に関わっておらず、本ブログのタイトルである「Developers’」に合致しないわけです。
        社長としての何かを書いても「技術的でない」と怒られるでしょうし。。。

        そこでいろいろと考えた訳ですが、当社では「書籍発表」というものがあり、数ヶ月に一回順番が回ってきます。30分の持ち時間で、何かしらの書籍をみんなの前でプレゼンをする訳ですが、私が少し前に行った確率の話でもしたいと思います。
        当然ながら、プログラマーにとって「確率(Probability)」は非常に重要なスキルです。

        さて、本題

        皆さん、ここで質問です。感覚的に回答してください。

        ある洗濯機を1日に1回使います。この洗濯機、10回に1回の割合で故障します(故障確率:10%)。この洗濯機をあなたが毎日使うとした場合、いつ壊れるだろうと予想しますか?

        なんとなく、10日後くらいに壊れるかな、と考える人は多いのではないでしょうか?
        しかし実際のところを計算してみると、9日後までに故障する確率は、約61%となります。
        計算式は、

        1/10+1/10*9/10+1/10*(9/10)^2+・・・+1/10*(9/10)^8

        それでは、問題を一般化して、

        故障確率1/Nの機械を毎日使い、N日より前に故障する確率は?

        数式は、

        1/N+1/N*(N-1)/N+1/N*{(N-1)/N}^2+・・・+1/N*(N-1/N)^(N-2)

        となります。
        Nを大きくしていくとどうなるかというと、次の値に近づいていきます。
        0.63212 0559 …  (約63.2%)。

        自然対数の底

        この「0.63212 0559 …」ですが、次のように表されます。
        1.71828 18284 59045 23536 …/ 2.71828 18284 59045 23536 …
        この分母の数字、e」で表される自然対数の底です。

        y=e^x において、何度微分してもそのままという、不思議な数字です。

        要は、N日より前に故障する確率は、Nを大きくしていくと、e-1/e に収束します。

        感覚のズレ

        後半の方は、少し脱線しましたが、この確率における感覚的なズレは意外と使えるかもしれません。

        例えば、確率1%で当たるルーレットがあり、ずっと回すと69回目において当選確率が50%を超えます。
        1%というと、まー当たらないだろうと考えがちですが、何度もやっていると思ったよりも早い段階で当たる確率が50%を超えるのです。
        これに似た例でよく言われることとしては、ある組織の人数が23人を超えると、その中に同じ誕生日の人がいる確率は50%を超えます。
        23人というと意外と少ないと感じるのではないでしょうか。

        最後に

        会社で年間購読している雑誌NEWTONから目から鱗な話を。
        100万光年先の星というと、光の速さで100万年かかると思っている方がおられると思います。
        しかし、実際はそうではありません。距離が光速(30万km/秒)の100万年倍というだけであり、もしも光速に近い速度で進むことができるならが、空間の縮みや時間の遅れが発生するので、もっと早く着きます。
        仮に光速の99.999999%の速度で進むことができるなら、100年で約71万光年進むことができます。よって、140年くらいで到着するわけです。
        まー、そんな速度は無理なわけですが。。。
        ~~~~~~~~~~~~~~~~~~~~~~~

        もう2度と書くことはないと思いますが、みなさま、よいお年を。
        年内いっぱい続くようです。