2016年9月5日月曜日

Yahoo! JAPANの黒帯インターンシップに参加した.

黒帯インターンシップのクラウドインフラストラクチャーコースに参加してきました.
インターンシップ - 採用情報 - ヤフー株式会社

期間は5日間でOpenStackや仮想インフラ基盤などについて取り組んできました.

Yahoo! JAPAN社員と食べた昼飯や私が新たに知ったことを情弱ポイントとして紹介していきます.
NDAのため写真はありません.

1日目

オフィスのロビーに到着すると, すでに10人ほどのインターン参加者が待機していました.
結構多いなと思いましたが, そのうち5人がインフラコースでした.
待機室に案内され自己紹介や書類の記入, インターンの説明をされました.

自己紹介を聞くに学部生は僕だけで他は院生の方だけでした.

実際の作業

OpenStackで立てたインスタンスにChefでOpenStackを導入した.

1on1などした(任意の社員とふたりで話すなどした)
インフラに興味がある学生は少ないとか

昼飯

地下街にある中華料理屋の
週替りランチの牛肉野菜炒めでした.
人の金で食う飯はうまいかったです.

今日の情弱ポイント

ssh-agent
sshでログインした先に特定の秘密鍵を持ってける機能
詳しくはssh-agentの使い方 - Qiita

sshログイン時のメッセージを変え方を知った.
/etc/motdをいじると出る.
ちなみにログイン時にメッセージを変える方法は
/etc/issueをいじる.

最後にMacをぶっ壊して1日目は終了です.
なんかMac糞じゃねって, 勢い良く叫んでたらログインできなくなりました.
やっぱりMacは糞

Tips

事前に作業端末をWindowsかMac Bookかを選べる.
Mac Bookだと英字配列か日本語配列かを選べます.
ちなみに僕は英字配列にしました.

2日目

データセンター見学しました.
データセンター内部に入るための静脈認証とカードーキーの登録をした.
網鋼板の階段などがありロマン感じる内観だった.
あと警備員さんがいらっしゃいませと言ってて草生えた.


聞いた話

黒帯曰く, 特定のベンダーのサーバーを買うわけではなく, その時期に最も良いとされるサーバーを仕入れるらしい.

無事故933日の文字が貼ってあった.
panduitのラックが使われていた.
アメリカは60Uとかのラックがあるとか.
ヤフオクとかで44Uのラックを見たが60Uとか家に入らないなと思いました.

コアルーターはCFP100Gbpsで1台1億するとか

日本は電気代の関係で1ラックあたりの電力が少ない

ヤフーのケーブル配色ルール

グリーン
マネジメント用

オレンジ
1Gbpsイーサネット


マスターのコアスイッチ

黄色
スタンバイのコアスイッチ

ブルー
10Gbpsイーサネット

黄色はシングルモードなんで曲げると死ぬ
オレンジは曲げても大丈夫らしい

やったこと

実際にラックサーバーの設置
マウンティング体験のためにわざわざ外してくれたらしい
hddは湿度で壊れやすくなるらしい
詳しくはヤフーテックブログに載ってるとか


昼飯

日替わり弁当
チキンと梅、米等最初見た時, 魚フライかと思ったが鳥フライだった

今日の情弱ポイント
高速道路系や新幹線系に這わせた回線があると知った.

DPDKの話を聞いていたらSPDKというのもあると知った.
ストレージ用のDPDKみたいなものだとか.

Tips

テプラ
今まで一体何に使うんだシールオタク用か?と思っていたが大量のサーバーのラベリングなどに使うと確かに便利そうだと感じた.
僕もテプラ買うか

3日目

壊れたMacがなくなりLet's noteのWindowsマシンが支給されました.
ここに来てMacよりWindowsの方が糞だと理解した.
OpenStackの講義を受け, 各コンポーネントの仕組みなどを学びました.
それらをもとに自由課題の選定をした.

昼飯

hootersで日替わりランチのハンバーグとかを食べました.
hootersに来る人は女性の方と目を見て話せないような人が多いらしいです.
ちなみに僕としては全く面白く無かったです.
飯はうまいかった.

今日の情弱ポイント

glibcのmallocはクソ遅い
tcmalloc
vmとかには向かない
ioの足を引っ張る
jemalloc
vm用途向きらしい

4日目

自由課題の実装
僕の自由課題は114514コアのインスタンスを立てることにしました.
vcpuが40コア, メモリ384GBの仮想環境を提供してもらいました.
OpenStackでvcpuを114514コアに指定してspawnさせたが起動しなかった.
qemuとかその辺読み進めて行くと, どうもseabiosのAPIC上限に触れるため255コア以上の立ち上げができないらしいです.
結果的に成功したのですが詳しい事は別の記事にまとめます.
今度はseabiosではなくovmfでも114514コアインスタンス挑戦しようと思う.

昼食

初日の中華屋に行って野菜湯麺食べました.
拉麺と湯麺は何が違うのだろうか.

情弱ポイント

bogomipsを知った.
bogomipsは低めのデバイスドライバとかに利用されてるらしい.
なんかlpjオプションにdmesgのlpj値いれとけば立ち上がるときに毎回lpj計測しないで済むのでbootが早くなるらしい.
実際僕のマシンで試したら起動速度が0.5秒早くなったのでオススメです.

Tips

トイレについて
トイレの紙はシングルでした。
トイレの個室はたいてい7,8割埋まってました.

帰りに二郎食って帰りました。
せっかくなので.二郎rcを載せときます.
cat .二郎rc
ニンニクマシマシ
ヤサイフツウ
アブラヌキ
カラメ

5日目

コンビニで買ったブレスケアが飲み込めなかったので、自販機で水を買いながらの出勤.
二郎を食ったことを隣のインターン生に告げて作業スタートしました。
発表資料作って発表しました.
NDAの審査中らしいので貰えたらslide shareとかにあげときます.

昼飯

海鮮屋でマグロ丼食べました.
わさびが辛くて泣いた.
まぐろうまい.

夜飯

打ち上げではピッツァ屋行きました.
ピッツァ窯ある本格的なピッツァ屋だったので、ピッツァ出て来るのおそみありましたが美味しかったです。
ピッツァ窯欲しくなりました。
なんか野菜につけるソースクソうまかった。

まとめ

データセンター行けて楽しい, 黒帯とお話し放題です.
黒帯インターンはオヌヌメです.

2014年11月24日月曜日

rootでmozcを動かす

rootでmozcが動かない事が判明したので、常時rootの情弱である筆者は無理やり動かすpatchを書いた。

https://github.com/otakuto/mozc-1.13.1651.102-asroot.patch

と言ってもgeteuid()とgetuid()を削除しただけの簡単なお仕事でした。
一応Gentoo用である。
そういえばvlcもrootでは動かなかったがバイナリエディタでなんとかなった記憶がある。

Usage:
mkdir -p /etc/portage/patches/app-i18n
cd /etc/portage/patches/app-i18n
git clone https://github.com/otakuto/mozc-1.13.1651.102-asroot.patch
mv mozc-1.13.1651.102-asroot.patch mozc-1.13.1651.102
emerge -av mozc

mozc-1.13.1651.102しか対応してないので~amd64しよう。

2014年9月3日水曜日

GentooでArduinoを使う

GentooでArduino IDEを落としてきて使おうと思ったら
avrdude:error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or directory
とか出てきてArduinoに書き込めなかったので
emerge avrdude
してやって
ln -s /usr/bin/avrdude arduino-1.0.5/hardware/tools/avrdude
ln -s /usr/bin/avrdude arduino-1.0.5/hardware/tools/avrdude64
でシンボリックリンク貼ってやったら動いた

2014年3月8日土曜日

C#でのreadonlyの罠

C#での定数はconst定数とreadonly定数の2種類がある。
const定数では参照型を代入することができないがreadonly定数ではできる。
またconst定数はリテラルとして扱われるが、readonly定数は普通の変数として扱われる。

readonly定数は完全にconstantな訳でなく、フィールドやプロパティの
書き換えは行えてしまう。

class A
{
    public int a;
    public int b
    {
        get;
        set;
    }
}

class B
{
    public static readonly A a = new A();
    public void test()
    {
        //コンパイルエラーにならない
        a.a = 3;
        a.b = 4;
    }
}
C++は比較的まともなconstオブジェクトを作れるので、その点ではC#より優れていると言える。

またreadonly定数は普通の変数として扱われる。そのためランタイムに初期化を行うので、readonly定数の初期化に初期化されていないreadonly定数を使うとバグが発生する。
class A
{
    //Cが初期化される前にBが初期化されてしまうためにBが3になる
    public static readonly int B = C + 3;
    public static readonly int C = 4;
}

C#erには常識かもしれないがC#初心者の私は引っかかってしまった。