2011年12月29日木曜日

直方体の重なり

ソニーの2013年の入社試験のプログラムコンテンストの練習問題をといてみました。
http://www.sony.co.jp/SonyInfo/Jobs/newgrads/sus/go_for_it.html
 重なる条件より、重ならない条件を考えたほうが楽なので、まず一次元で重ならない判定関数を作って試験をして、それを三次元に拡張しています。また、始点と終点を含めるか含めないかでテストケースも異なるのですが、とりあえずは始点は含める、終点は含めないでパターンで作成しています。

---------

#include <stdio.h>

class Cube{
    public:

    Cube(int xx,int yy,int zz,int ww,int hh,int dd);
    virtual ~Cube();

    static bool kasanaranai(int x0,int w0,int x1,int w1);
    bool kasanaru1d(Cube& cc);
    bool kasanaru(Cube& cc);

    private:
    int x,y,z,w,h,d;
};

Cube::Cube(int xx,int yy,int zz,int ww,int hh,int dd){
    x=xx;y=yy;z=zz;
    w=ww;h=hh;d=dd;
}


Cube::~Cube(){
}


bool Cube::kasanaranai(int x0,int w0,int x1,int w1){
    //printf("kita %d %d %d %x\n",x0,w0,x1,w1);
    if(x0+w0<=x1 || x1+w1<=x0)return true;
    return false;
}

bool Cube::kasanaru1d(Cube& cc){
    return !kasanaranai(x,w,cc.x,cc.w);
}

bool Cube::kasanaru(Cube& cc){
    return (!kasanaranai(x,w,cc.x,cc.w)) && (!kasanaranai(y,h,cc.y,cc.h)) && (!kasanaranai(z,d,cc.z,cc.d));
}


main(){
    Cube c0(0,0,0,2,2,2);
    Cube c1(2,2,2,2,2,2);
    Cube c2(-2,-2,-2,2,2,2);
    Cube c3(-2,-2,-2,3,3,3);
    Cube c4(-2,-2,-2,20,20,20);
    Cube c5(-2,-2,-2,20,20,2);
    Cube c6(-2,-2,-2,20,20,3);
    Cube c7(-2,-2,-2,2,20,20);
    Cube c8(-2,-2,-2,3,20,20);
    Cube c9(-2,-2,-2,20,2,20);
    Cube ca(-2,-2,-2,20,3,20);
    printf("t1\n");
    printf("%s\n",c0.kasanaru1d(c1)?"kasanaRU!!":"kasanaraNAI");
    printf("t2\n");
    printf("%s\n",c0.kasanaru1d(c2)?"kasanaRU!!":"kasanaraNAI");
    printf("t3\n");
    printf("%s\n",c0.kasanaru1d(c3)?"kasanaRU!!":"kasanaraNAI");
    printf("t4\n");
    printf("%s\n",c0.kasanaru1d(c4)?"kasanaRU!!":"kasanaraNAI");

    printf("t5\n");
    printf("%s\n",c0.kasanaru(c1)?"kasanaRU!!":"kasanaraNAI");
    printf("t6\n");
    printf("%s\n",c0.kasanaru(c2)?"kasanaRU!!":"kasanaraNAI");
    printf("t7\n");
    printf("%s\n",c0.kasanaru(c3)?"kasanaRU!!":"kasanaraNAI");
    printf("t8\n");
    printf("%s\n",c0.kasanaru(c4)?"kasanaRU!!":"kasanaraNAI");
    printf("t9\n");
    printf("%s\n",c0.kasanaru(c5)?"kasanaRU!!":"kasanaraNAI");
    printf("ta\n");
    printf("%s\n",c0.kasanaru(c6)?"kasanaRU!!":"kasanaraNAI");
    printf("tb\n");
    printf("%s\n",c0.kasanaru(c7)?"kasanaRU!!":"kasanaraNAI");
    printf("tc\n");
    printf("%s\n",c0.kasanaru(c8)?"kasanaRU!!":"kasanaraNAI");
    printf("td\n");
    printf("%s\n",c0.kasanaru(c9)?"kasanaRU!!":"kasanaraNAI");
    printf("te\n");
    printf("%s\n",c0.kasanaru(ca)?"kasanaRU!!":"kasanaraNAI");
}

2011年12月24日土曜日

アンパンマンなかよしコンサート

クリスマスやお正月が近いので日本のおもちゃについて。

メーカーで物を作っていて思うのですが、最近のおもちゃって中国製が多いので、コストの問題でなんか完成度が低いものが多いのですが、久しぶりに完成度の高いおもちゃを見ました。

それがこの「アンパンマンなかよしコンサート」という幼児向けのピアノ。
 昔は「アンパンマンわくわくコンサート」だったらしく、さらに初期のころは「ピヨピヨコンサート」というものだったらしいです。




 森 俊憲さんという方がデザインをされているようです。
http://carnival2009.blog66.fc2.com/category22-3.html#entry165
http://carnival2009.blog66.fc2.com/category22-3.html#entry184
http://carnival2009.blog66.fc2.com/category22-3.html#entry166

生産はもちろん中国なのですが日本でデザインをやっているようです。

音の出るおもちゃって基本的に音が良くないといけないと思うのですが、これはきちんとしたスピーカーの音がする。さらに、音の高さ、曲の調、など基本的に全部あっている。鍵盤をおした感覚が良い。塗装がきちんときれいにされている。色がきちんとしている。指をはさまないようになっている。なめても良いようになっている。落としても平気になっている。大きくなっても長い間楽しめるようになっている。・・・

などどれも基本的なことなのですが、これらのことを全部完璧にやっているおもちゃってなかなかないんですよね。とくに電子的な機構が入っているおもちゃって、電気的な部分にお金がかかるのでこういう部分がおろそかになるのですが、これはかなり完成度が高い。

また、物って目的がはっきりしていないといけないし、創造的でないといけないし、楽しくないといけないと思うのですが、これらもはっきりしてます。芸術の域に達している。

唯一の不満は、アンパンマンだけに本体がパンの色をしていないといけないと思うのですが、理由がたって色を変えたそうなのです。

 こういういいおもちゃがたくさん世の中に受け入れられると良いですね。

2011年12月23日金曜日

PDドライブを使う

15年くらい前に使われていた、SCSI接続のPDドライブ。同じ時期にMOドライブとかZIPドライブとかもあったのですが、これをWindows7のパソコンにつなげてみました。


いつものようにUSBに変換して接続します。
用意するものはSCSI-USB変換機 。

この変換機はOSの標準ドライバーを使うので、特にドライバーとかを入れる必要なく 、ケーブルをパソコンに接続するだけでPDが使えます。


Windows7のパソコンにPDドライブを接続して無事にPDディスクのフォーマット、読み込み、書き込みができました。
昔Windows3.1でこのドライブを使っていたときは、CD-ROMドライブとしても使ました。しかし、USB接続にすると、CD-ROMドライブとしては認識されないようで、CDをいれても何も起こりません。
 まあ、これはいいか。



2011年12月22日木曜日

グーグルとかマイクロソフトとかの入社試験

よーめー日記には技術的なことしか書かないと決めているのでたまにしか日記を書きません。
僕の日記の更新スピードと、Facebookが外部の日記のインポートをサポートしなくなるスピードを比べると、Facebookが古い機能をサポートしなくなるスピードのほうがはるかに早いです。
僕の日記がいつまでもFaceBookに繁栄されず、くっそーと思ったので、しばらくは一週間に一度くらい技術的な日記を書いてやる。

グーグルとかマイクロソフトとかの入社試験の問題が難問奇問のかなりユニークな問題なのは昔から有名な話ですが、昔からどのような人たちがどのような考えや目的で作っているのかとても気になっていました。
日本企業だったらこんな問題をつくっても採用部の上司がたぶん良い問題かどうかも判断できないし、絶対に実現しないと思っていたので、それに立ち会うこともないだろうと思っていました。
ですが、とある企業のユニークな入社問題の作成に偶然立ち会うことができました。

どんな人が作っているのか、それは、一言でいうとぼくの予想通り、やはり変な人が作っていました。
あらゆることに超こだわりを持っている変な人が変な問題をつくってるんですね。
どんな目的なのか、それは企業や世界を変えていけるような人材を採用することのようです。

そんななか問題作成者の共通点をみつけました。問題を作っている人は会社に自分のコーヒーメーカーを持っている。
そういえば、とても優秀な僕の後輩が昔会社の金で自分のコーヒーメーカーを買っていました。

まず、コーヒーメーカーを買うことが問題を解くための第一歩だと思った今日でした。

2011年12月20日火曜日

ソニーNEXのレンズをキャノンEOSにつける

カメラのレンズはマウントアダプターを使えば他のメーカのボディーにつけることができます。
しかし、フランジバックの長さが長いボディー用のレンズをフランジバックが短いボディーにはマウントアダプター経由でレンズがつけられるのですが、その逆はマウントアダプターが作れないというか、売られていないのでつけられません。

たとえばキャノンのEOSのレンズはソニーのNEXのカメラにマウントアダプターを介してつなぐことができます。しかし逆にソニーのNEXのレンズはキャノンのEOSのカメラにはつなげられません。

でも本当は作れるんです。無理やり作ってつなげると標準レンズがマクロレンズになりますが、イメージサークルが同じならばきちんと撮影できるはず。マウントアダプターが売られない理由はたとえ作ったとしてもレンズがマクロレンズになってしまうためにただ作らないだけなのです。

そこで、NEXレンズをEOSボディーにつなぐマウントアダプターを作ってみました。
作り方。
まず、NEX用の接写リングとニコン用の接写リングをそれぞれ用意します。
 ソニーのEマウントとニコンのFマウントは内径が同じなので、接写リングのボディー側とレンズ側の口が相互につながります。これでソニーEマウントからニコンFマウントのアダプターができます。
 ニコンFマウントからEOSのEFマウントに変換するアダプターは市販されているので、されにこれをつなげるとソニーEマウントからEOSのEFマウントに変換するアダプターができます。
フランジバックがとても長くなっているのでNEX用の標準レンズをつなぐとマクロレンズになってしまいますが、イメージサークルの大きさはどちらもAPS-Cサイズなのでイメージセンサーの全領域できちんと画が写るはず。うちの赤ん坊が横でこのカメラをペロペロしようと狙っているのでマクロ撮影がゆっくりできませんが、とりあえずきちんと撮れています。真ん中しかピントがあっていないのでもう少し絞りとかを調整しないといけないと思うのですが、それはまたあとでゆっくりやります。

2011年12月12日月曜日

PCカードのCD-ROMドライブをUSB接続にする

最近のノートパソコンはCD-ROMドライブがついていません。
たまにしか使わないのに、買うのももったいないので、昔のノートパソコン用のPCカード接続のCD-ROMドライブをUSB接続に改造してみました。
PCカードは当時はPCMCIAとか呼ばれていたものなのですが、それをUSBで最近のノートパソコンに接続する方法は誰も日記に書いていないので書きます。
まず、昔のPCカード接続のCD-ROMドライブを用意します。
とりあえず今回は家にあった、VAIO用のPCGA-CD51というものを使用します。


次に、ATA用のスリムドライブのケースを用意します。PCカードのCD-ROMドライブは中身はスリムATAのドライブなのです。スリムATA用のケースを買い、中に入っているスリムATA→USB変換基板を取り出します。今回はAmazonで売っている、変換名人というブランドのケースを使用しました。
そして、この取り出した基板をVAIOのCD-ROMドライブに取り付けます。
逆に、VAIOのCD-ROMドライブをスリムATAのケースに取り付けても良いのですが、せっかくVAIOのかっこいいケースがあるので、今回は基板をVAIOのCD-ROMドライブに取り付けます。

 USBと電源の端子の部分が飛び出していてそのままではケースが閉まらないので、ケースの内側をカッターで削り、 USBと電源の端子がケース内に収まるように加工します。

これで蓋をすれば、PCカードのCD-ROMドライブをUSB接続にすることができます。
変換名人のケースを買うと、USB変換基板とともに、USBケーブルと電源ケーブルが付いているので、ケース以外のすべての部品がそのまま使えます。


 最近いろいろな機器の仕組みを勉強したら、いろいろなつながらないものが実は簡単につながることうがわかりました。次はソニーのNEXのレンズをキャノンのEOSのカメラにつないでみようと思います。反対のEOSのレンズをNEXにつなぐのは簡単なんですがね。