PhobosのBase64

http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/base64.d
BoostライセンスでパフォーマンスもあがりRangeをサポートした新しいのを入れました!templateとaliasやmixinを使って好きなBase64フォーマットが作れて,かつtemplate内で完結するようにしたので,それなりにD言語らしく書けたんじゃないかと勝手に思っている.

P.S.

正直こんなに時間掛かるとは思わなかったし,テストやコメント合わせて1600行にもなるとは思ってなかった.Range怖い…

己のコーディング力に絶望した日

もう少し時間内に思い描いたコードを書けるようになりたいのと,そういや最近文字列処理とかしてなかったなぁと無駄に入力処理で手間取ってしまったという.下のコードは貼るために無駄なimportとか削ったやつです.

Ants

蟻さんが竿の上を歩くという問題.真ん中のやつが一番最小になりそうとか思ってソートしてみるも,「それって偏ってたらおかしくならない?」とアドバイスを貰って修正して何とか書けた.

import std.algorithm, std.stdio, std.conv, std.string;

void main()
{
    auto cn = to!uint(readln().strip);

    foreach (Unused; 0..cn) {
        auto test = readln().strip.split(" ");
        auto l    = to!uint(test[0]);
        auto ants = readln().strip.split(" ");
        auto nums = map!(to!uint)(ants);
        uint min, max, tmp;

        foreach (num; nums) {
            tmp = l - num > num ? l - num : num;
            if (tmp > max)
                max = tmp;
            tmp = l - num < num ? l - num : num;
            if (tmp > min)
                min = tmp;
        }

        writeln(min, " ", max);
    }
}

区間スケジューリング

仕事をなるべくたくさんやれという問題.なんかいくつか解き方が思いついたんだけど,図に書いてみると当てはまらないのが出て来て,とりあえず早く終わる仕事を選んでおけば問題ないかな,と.「それ証明できる?」と聞かれたけど結局出来ず.なんかDPとかマトロイド理論とかが関わっているらしいと後々教えてもらったけどぐぬぬ

import std.algorithm, std.stdio, std.conv, std.string, std.typecons;

alias Tuple!(uint, "start", uint, "end") Job;

void main()
{
    auto cn = to!uint(readln().strip);

    foreach (Unused; 0..cn) {
        uint  answer, end;
        Job[] jobs;

        foreach (Unusedd; 0..to!uint(readln().strip)) {
            auto job = readln().strip.split(" ");
            jobs ~= Job(to!uint(job[0]), to!uint(job[1]));
        }

        sort!q{ a.end < b.end }(jobs);

        foreach (ref job; jobs) {
            if (job.start > end) {
                answer++;
                end = job.end;
            }
        }

        writeln(answer);
    }
}

後もう一問「割り切る数」というのがあって計算量無視すれば解けるんだけど,どう考えてもあれなのでこの辺はもう少し考えたい.

P.S.

色々なテスト入力で試してないのでバグっている可能性あり

D言語のtypedef

D言語にはaliasとtypedefがあって,CやC++のtypedefはaliasとなっています.じゃあtypedefは何かというともっと強いもので,違う型を定義します.

typedef int NewType;

これは一つの売りだったわけですが,もうdeprecatedなものになっています.理由は代替機能がいくつかあったからで,コメントでSHOOさんが書いてるenumやalias thisを使って

struct NewType
{
    int value;
    alias value this;
}

とかやれば同じようにsubtyping出来ちゃうわけです.後なんか色々理由があった気がするけど,それは昔の「typedef消すよ」スレッドを見てください.ということで,今からD言語使う人はtypedefは使わないようにしましょう.A先生に怒られますよ!

Boost勉強会@関西

http://kokucheese.com/event/index/4335/
こんな闇の集会に何故か参加してました!

ust : http://www.ustream.tv/recorded/10361134
スライド : http://www.slideshare.net/repeatedly/goodbye-doost
一番真面目な発表になってしまったので,もう少しネタ要素を入れるべきだったかなと反省.補足説明として,俺はDoostを使ったことはありません.

感想は後で書くメソッド!にするとして気になる所メモ.

  • 皆さんスライドはちゃんと自分の番までには作っておきましょう!
  • Red Bull買い占め事件
  • kikairoyaさんはredboltzさんと(ry
  • alohakunさんはエベレストタイガー
  • melponnというIDはnが一つ減るだけで二酸化炭素25%削減を達成することが可能
  • Cryoliteさんってもっと変な人かと思っていました
  • しまぱん先生はしまぱんでぶれいす先生はイケメン
  • C++erはもっと外見はすっぽすっぽ先生っぽくあるべき
  • 次は名古屋 or 北海道?

PFIインターンのまとめ - 大野編 -

このまとめは俺の感想ではなく,同じくインターンに参加した大野君によって書かれました.「なんでこいつ2回書いてんだ?」と誤解なきようお願いします.

インターン採用まで

そもそもPFIインターンを知ったのは過去にPFIインターンで参加していた大倉さんのブログがきっかけでした。就職するならプログラミング関係が良いなと思い,その訓練も兼ねて応募しました。

ほとんどお遊びでしかプログラミングはした事がなかったですが,中学高校時代で関連する部分をありったけアピールして奇跡的に採用されることに。
後から聞いた話では社長の西川さんは数学を専攻していた自分が来る事を相当楽しみにしていたようです。

インターン開始〜前半

2日目でとんでもない所に来てしまった自覚しました。
ホームページのメンバー紹介を見てある程度覚悟していましたが予想を超えていましたし,
他のインターン3人も尖ってました
(言語を使う立場じゃなくて作る立場って・・・,Haskellなんて言語初めて聞いたよ・・・後ろで黙々とタイプする音が聞こえる・・・)。

場違いかと思いましたが,基本的な所から丁寧に教えていただきました。
分からない所があれば社内チャットで聞けばすぐに返答が返って来て,
書いたコードをすぐにレビューしてもらえる環境が整っていたのはありがたかったです。

テーマ決定

今回「既存のサービスに導入できそう」などの理由で
twitterがテーマとなり,その中でも特に何か事件等で議論で盛り上がる事があるのでそれを検出しようとなりました。

PFIセミナー

インターンが中頃に,セミナーを行いました。
(このセミナーはインターン期間以外でも週に1回持ち回りで持ち回りで行うそうですが,
インターンの楽しみの一つでした)
他の3人の個性の中で自分が埋もれていたので,これはチャンスと思い100%数学の話をする事に,以下はその時用いたスライドです。

インターン後半

何をすべきかわからず手が動かなくなる状態になったり,ピントのはずれた作業に時間をかけたりする事が目立ちました。メンターの岡野原さんに助言を頂いて,残り日数と自分のプログラム能力の落としどころを見つけられた用に思います。研究のやり方や仕事の仕方など学べる部分が多かったです。

以下が最終発表のスライドです。
また,当日Ustreamで配信されました。以下のアドレスからその時の配信を見る事が出来ます
PFIのUstreamアカウント

まとめ

ひょんな事からソフトウェアのベンチャー企業にプログラム初心者が紛れ込んだのですが,
非常に刺激的な経験をさせてもらいました。高慢に飛び込んで正解だったと思います。
来年もインターンを行うのではないかと思うので,プログラミング能力を鍛えたい方,チームでプロジェクトに取り組んでみたい方,自然言語処理のエキスパートに会いたい方には是非おすすめします。

ピーFIという会社で行ったRed Bullを2ヶ月間飲み続けるだけの簡単なお仕事を振り返る

タイトル通り2ヶ月間ほど東京でインターンに参加してました.真面目な俺は他の濃過ぎるインターンメンバに比べて影が薄かったため,某バスケ選手のようにすぐ忘れ去られてしまう可能性があるので,ここで記事にしておきます.

申し込み

多分俺が一番最後に申し込みをしたはず.というのも〆切最終日に金曜ロードショーの「踊る大捜査線」を見ながらこんなことを呟いたら@frsyukiからこんなreplyが来た.じゃあ書くかとWebで履歴書のテンプレをダウンロードし自分の過去の業績を探し(そんなのないけど!),必要書類を23:59分に送信した.
履歴書の写真欄が空白なのが寂しかったのでD言語の可愛いくて有名な某マスコットキャラを整形して貼付けたにも関わらず,何事もなかったかのように面接に進んだので,ピーFIはとても懐が広い会社だなと思いました.

面接

俺がT島という海外にいるということで,Skypeでやって頂いた.いくつか面接っぽいことをした後はコーティング.問題はこれで,面接に備えてdmdのtrunkをビルドしてたら標準ライブラリが上手くビルド出来なくて再DLするのも面倒だったので,Rubyでやった.D言語は素晴らしい言語です.
で,何故か通ったのでインターンに参加することとなりました.

やったこと

テーマに関しては「グループ開発の経験などをしてみたい」というようなことを面接でやり取りをしていたので,Sedueの開発に組み込まれました.メンターも開発チームのちくわkzkさんとGodBullnobu_kさんの二人になりました.主にやったのは以下の3つで,非常にやりがいのある仕事でした.

  • Red Bullを最低1日1本は飲む (RedBull Driven Developmentの実践)
  • 毎日地獄のミサワを確認する (最新情報を仕入れることで世の流れに送れないようにする)
  • CTOを弄る (社員さんとの円滑なコミュニケーション)

その他にやったことに関しては9/30に行われた最終発表で述べました.スライドは以下で,動画はUstで録画されているはずです.

最初からSedueを弄るということは無理なので,少しずつタスクの粒度を上げて行くという感じでやりました.実際の所,最終目標の1億件周りをやることが決まったのは中間発表の前くらいでした.途中こんなハプニングもあったので,もう少し自分の力をセーブすべきだったかもしれません(オ
一億件検証が上手く行かなかったのは残念ですが,自分の書いたものが今でもどこかで動いていると思うと,ちょっと感動ものです.

全体の感想

ピーFIは自分にとって非常にやりやすい環境でした.開発環境も勿論のこと,どの社員さんも近くチャットなどを通じていつでも下ネタ様々な話が出来ました.かといってずっとそんな雰囲気な訳でもなく,技術的な話や製品の議論になるとガラッと空気が変わるので,非常にメリハリがあったと思います.自分と現状直接関わりがないことでも,チャットの流れを見ていたり話を聞いてたりすると「ふむふむ」と思うことが多々ありました.技術的に話が出来ることの楽しさは今の研究室では得ることが出来ないので,この辺は本当日々充実してました.
後,かなり就業スタイルが個人に任せられているので,勿論MTGなどは時間は決めて行われるけど,それ以外は結構バラバラだったりして非常に助かりました(朝起きれない訳ではなく,昼からの方が調子いいんです!!).
社内セミナーの自然言語処理などの話で分からない所が結構あったのが悔しいので,この辺はいくつか教えて貰った本で学習しておきたい.

2ヶ月って長いなぁと最初思ってたけど,始まったらあっという間だった(1週間や2週間のインターンはどういうことをやっているのだろうか…).今回インターンに参加して刺激を受けたことで色々考えも変わったので,とりあえず行動を起こす.

最後に

来年もD言語枠があるはずなので(本当?),興味のある人はピーFIのサマーインターンに申し込んだらいいんじゃないかな!


こんな長文書くの久しぶりで非常に疲れたので,けいおん!4巻を読み直して泣きたいと思います.

P.S.

けいおん!勉強会@PFIはいつやるんですかね?

x86勉強会 & カーネル/VM勉強会

http://atnd.org/events/5976
http://atnd.org/events/6796
この二つに参加してました.まぁ細かい所はメモとともに公開してくれる人がいると思うのでそちらに任せます.

感想としては,普通な人の普通な発表が多い普通なイベントでした(「普通」に関してはこちらのWikiを参照).普通に近づくためにもっと精進しないとなぁと感じた勉強会2連発でした.皆さん本当に普通過ぎです.

LTで使ったスライド

で,何故かRedBullに関してLTしました(カーネル/VM勉強会でRedBullの話をするのは多分俺が最初で最後だろう).RedBull時代はもうそこまで来ているので「RedBullが福利厚生にないとかブラック企業乙」と言われないために皆さん頑張りましょう.
いつまで残るか知らないけども映像もあるみたいでここで見れます(IIJ凄い!).後yojiroさんの写真syuu1228の写真もあるのでこちらもどうぞ.

皆さん乙でした.