タグ

ブックマーク / postd.cc (76)

  • コードの半減期とテセウスの船 | POSTD

    プロジェクトが発展する際は、単純に新しいコードが古いコードの上に追加されているのでしょうか。もしくは、時間をかけて徐々に古いコードが新しいコードに置き換えられているのでしょうか。これを解明するために、手ごわい GitPython プロジェクトの助けを借りて、Gitプロジェクトを分析する 簡単なプログラム を構築してみました。履歴を年ごとに振り返り、 git blame を実行してみようと思ったのです(この処理を多少でも速くすることは簡単ではないと分かりました。しかし、ファイルのキャッシングを便宜的に含ませることや、変更された点を履歴から見つけること、 git diff を使って変更したファイルを無効にすることなどの詳細を、いつかお伝えします)。 頭がさえている時に、 テセウスの船 をダサくもじって、 “テセウスのGit” と名付けました。私は父親になって、ひどいダジャレを作れるようになった

    コードの半減期とテセウスの船 | POSTD
    nomnel
    nomnel 2016/12/28
  • 私のGoogleインターンシップ体験記 | POSTD

    Noogler(Googleの新入社員のこと)キャップ 私のGoogleでのインターンシップは2年後。今から1年。あと6ヶ月。1ヶ月後。来週の月曜日。明日。第1週目に突入。ちょうど1ヶ月目。中間点が終わったところ。来週の木曜が最終日。そして今日が最後の日。私はこの夏、Googleで3ヶ月間、インターンをしました。 ふう。時間が経つのは速いですね。怖いものです。でも、私は満足しています。私のロンドンにおけるGoogleでのエンジニアリングインターンシップは不可能から可能に、遠い現実から近い現実に、そして現実となり、今では過去のものとなりました。私は夏の3ヶ月の間に、一生涯分と言えるほどの経験をしました。この投稿では、それらを思い出しながら、まとめていきたいと思います。 注意: 以下に記載された意見は、全て私自身の意見です。 はじめに まずは事の始まりから。私はどのようにしてGoogleにたど

    私のGoogleインターンシップ体験記 | POSTD
    nomnel
    nomnel 2016/12/21
  • DockerでのNodeアプリ構築で学んだこと | POSTD

    以下に紹介するのは、 Docker を使って node.js 用のWebアプリケーションを開発、およびデプロイする際に、私が四苦八苦しながら学んだ秘訣やコツです。 このチュートリアル記事では、Dockerで socket.ioのチャットサンプル を白紙の状態から番状態へとセットアップしていきます。このプロセスを通じて、そうした秘訣などを簡単に習得していただければ幸いです。特に、以下のような内容について見ていきます。 実際にDockerでNodeアプリケーションを起動する。 すべてをrootとして実行させない(悪いやり方です)。 開発時のテスト-編集-リロードサイクルを短くするため、バインドを使用する。 再構築を高速にするため、 node_modules をコンテナで管理する(これには秘訣があります)。 npm shrinkwrap で、ビルドを反復可能にする。 開発環境と番環境で Do

    DockerでのNodeアプリ構築で学んだこと | POSTD
    nomnel
    nomnel 2016/12/16
  • The Little Printf : 「我々はなぜプログラミングをするのか?」を追う寓話 | POSTD

    この文章は、2015年10月9日にシカゴで開かれたカンファレンス、 CityCode でのプレゼンテーションを書き起こしたものです。同じ内容を ビデオ と印刷向け PDF文書 でも公開しています。 — Chapter 1 私は、コンピューターやテレビゲームが身近になる前に生まれてラッキーでした。友達や兄弟と外に出て遊び、自分自身で遊びを発明するという機会に恵まれたのですから。 小枝を即座に弓や銃や剣や望遠鏡に見立てたりして、自分たちがヒーローになったりもできました。小枝は何にでもなりましたが、ブーメランにはなりませんでした。一度投げた小枝は自分で取りに行かなければならないのでね。 成長する過程のどこかで、やがてそういう風に遊ぶことが恥ずかしくなってきます。他の子供たちが「大人らしく振舞うことが格好いい」と考えているのに、自分だけが松ぼっくりを手榴弾に見立てたり、魔法の力を持っているかのよう

    The Little Printf : 「我々はなぜプログラミングをするのか?」を追う寓話 | POSTD
    nomnel
    nomnel 2016/11/09
  • 機械学習に挑んだ一年間 – 機械学習について一から学び、仕事に活用するまでの道のり | POSTD

    この記事は、去年私が書いた「Machine Learning in a Week(機械学習に挑んだ一週間)」という記事の続編です。その記事では、私が5日間集中的に機械学習を学び、のめり込んでいった経緯について説明しています。 機械学習に挑んだ一週間 一般の人にとって機械学習の分野に足を踏み入れるのは、無謀なことに思えるでしょう。medium.com 私は順調なスタートを切った後も、時間を見つけて勉強を続け、およそ一年後には、仕事機械学習を活用した初プロジェクトを立ち上げることができました。そのプロジェクトでは、さまざまなタイプの機械学習や自然言語処理(NLP)の技術を駆使して、 Xeneta の 潜在顧客の特定 を行っています。 趣味でやっていたことが仕事になって、とても嬉しかったです。 同時に、仕事として機械学習を利用するのは博士号を持つ限られた人だけだ、という思い込みも払拭されました

    機械学習に挑んだ一年間 – 機械学習について一から学び、仕事に活用するまでの道のり | POSTD
    nomnel
    nomnel 2016/10/09
  • Amazonのソフトウェアエンジニア面接 | POSTD

    最近、Amazonエンジニア採用担当者から連絡を受けました。Amazonは、ベルリンオフィスのチームのソフトウェアエンジニアの採用面接をしていたのです。 連絡を受けてから契約書にサインするまでのプロセス全体は、2カ月でした。採用プロセスで経験したことと、私が合格できた理由として思い当たることをお知らせしたいと思います。 この記事で、もし私が何か重要なことに触れ忘れていたら、ぜひコメント欄に書いてください。出来る限りの詳細を回答に書きます。 4月27日:最初の連絡 採用担当者からの連絡は、 LinkedIn 経由でした。ベルリンオフィスのチームのソフトウェアエンジニアを募集しているので、もし興味があれば、最新のレジュメを送って欲しいとのことでした。私は、常にレジュメを最新にしていたので、翌日、Eメールに添付して送りました。 彼女からの返信には、募集しているソフトウェアエンジニアの役割と面接

    Amazonのソフトウェアエンジニア面接 | POSTD
    nomnel
    nomnel 2016/08/25
    “HackerRank”
  • ジョエル・テストは(もはや若干)時代遅れ―今ならこう質問しよう | POSTD

    ジョエル・テストとは、面接時に求人応募者が面接官に聞くものとして広く受け入れられている「12個の役立つ質問」のことです。このテストはJoel Spolsky氏が考案しました。彼のブログは開発者の間では有名で、この12の質問も広く知られていました。そして、スタック・オーバーフロー(創設者の1人がJoel Spolsky氏)によって、さらに普及することになります。スタック・オーバーフローの求人ページでは、求人を出す側の企業向けにこの質問を使ったチェックリストが用意されています。以下がそのジョエル・テストです。 ソース管理の仕組みを導入していますか? 1ステップでビルドを行えますか? ビルドは毎日実行していますか? バグデータベースを持っていますか? 新しいコードを書くまえにバグを修正していますか? 最新スケジュールを常に社内で共有していますか? 仕様書を持っていますか? プログラマは静かな作業

    ジョエル・テストは(もはや若干)時代遅れ―今ならこう質問しよう | POSTD
    nomnel
    nomnel 2016/06/11
  • Haskellで生産性を高める-Pythonからの移行 | POSTD

    (注記:11/30、いただいた翻訳フィードバックを元に記事を修正いたしました。) 最近、Haskellでも生産性の高い作業ができるほどに、この言語を使いこなせるようになりました。定期的にPythonを使いもしますが、今ではWebプロトタイプ作成のほとんどをHaskellで行っています。それで、時間が経ってしまう前に、この言語の学習経験を通じて考えたことなどをまとめたいなと思っています。 データファースト これはどちらかというと動的言語から静的言語への移行に関しての考えなのですが、Haskellのデータ構造は、ほとんどの場合、データ宣言と型シグネチャで提示されるのに対し、Pythonの場合、おおむねコードによって暗黙に定義されます。 Pythonの関数について私が初めて抱いた考えは、「コードに何が書かれているか?」でしたが、Haskellでは、「データはどう見えるか? この関数は___を受け

    Haskellで生産性を高める-Pythonからの移行 | POSTD
    nomnel
    nomnel 2016/06/08
  • Blue. No! Yellow! : プログラミング言語の進歩史と生産性にまつわる問答 | POSTD

    世界初のプログラム内蔵方式コンピュータに搭載された、最初のプログラムを書くのに使われた言語は何だったでしょうか? もちろん、バイナリの機械語です。 なぜですか? えー、当然ながら、シンボリックアセンブラがなかったからです。最初期のプログラムは、バイナリで書かなければなりませんでした。 バイナリの機械語と比較して、アセンブリ言語でプログラムを書くと、どのくらい簡単ですか? ずっと 簡単です。 数字を言ってください。何倍ぐらい簡単ですか? えー、まあ、アセンブラは、あなたの代わりに面倒な事務処理を全てしてくれますからね。つまり、全ての物理アドレスの計算です。全ての物理的な命令を構築するわけです。あなたが範囲外にアドレス指定するなど、物理的に不可能なことをしないよう確認します。そして、簡単にロードできるバイナリの出力を生成します。 それによって、軽減されたワークロードは、 膨大 です。 どのくら

    Blue. No! Yellow! : プログラミング言語の進歩史と生産性にまつわる問答 | POSTD
    nomnel
    nomnel 2016/06/07
  • 効果的なフォームをデザインする:構造、入力、ラベルおよびアクション | POSTD

    画像の出典:form-ux-tips あなたのアプリやサイトを利用する人々にはある一定の目的があります。そしてその目的を達成するために フォームに 記入しなくてはならないことがよくあります。Webやアプリにおいてフォームは、ユーザにとって未だに最も重要な 種類の操作 であるからです。事実、フォームは目的を達成するまでの 過程における最後のステップ と見なされることも多いのです。 フォームは目的達成の手段にすぎません。迅速に混乱なく、ユーザがフォーム入力を完了させられるようにするべきです。 この記事では、ユーザビリティテスト、フィールドテスト、視線計測(アイトラッキング)、そしてユーザからの実際の不満の声に基づく実用的なガイドラインを紹介します。 フォームの構成要素 一般的にフォームは以下の5つの要素から構成されます。 構造 。フィールドの順番、ページの外観、各フィールドとの論理的な関連付け

    効果的なフォームをデザインする:構造、入力、ラベルおよびアクション | POSTD
    nomnel
    nomnel 2016/05/24
  • インプリメンタ、ソルバ、ファインダ : プログラマのキャリアに関する3つの肩書きの提唱 | POSTD

    私がある卒業生と話していたときのことですが、彼が、 自身のキャリアの選択を後悔しているベテランプログラマが書いた記事 について話し始めました。このプログラマは、コーディングに専念するために管理職への昇進を拒否しましたが、その結果、完全にみじめな立場に置かれることになったそうです。彼は、マネジメントのアンチパターンに次ぐアンチパターンについて書いていますが、これにより社内では給料泥棒のような扱いになってしまったようなのです。 そのような悲惨なキャリアについて話を聞くのは憂でした。当に憂な話だったので、それまで非常に熱心なプログラマだった私の生徒の1人まで不機嫌になってしまいました。ですが、誰が彼を責められるでしょうか? 彼が期待に胸を膨らませるはずだった将来のビジョンは、他人の意思決定スキルの乏しさが招いた悲惨な問題でいっぱいになってしまったのです。標準以下の管理職があなたの生活すべて

    インプリメンタ、ソルバ、ファインダ : プログラマのキャリアに関する3つの肩書きの提唱 | POSTD
    nomnel
    nomnel 2016/05/16
  • 週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び | POSTD

    週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び 長文を読む時間のない読者へ: 時間差SQLインジェクションについて最低限の知識がある読者を想定しています。技術用語を読みたくない場合は、結末の重要なアドバイス、学びまでスクロールダウンしてください。 先週、長い週末を過ごすため、故郷であるNagpurを訪れました。私はNagpurのあらゆるものを深く愛していますが、インターネットだけは別です。十分なFUPの光通信やブロードバンドを提供するまともなインターネットサービスプロバイダ(ISP)がないからです。家族は某ローカルISPの1か月2Mbps 50GBのプランで手を打っています。 FUPとは? 多くのISPは、通信量が制限に達すると速度を落とすFair Usage Policyという制度を採用しています。例えばデータ通信量が50

    週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び | POSTD
    nomnel
    nomnel 2016/05/11
  • ソフトウェアのスケーラビリティについてスターバックスが教えてくれること | POSTD

    2004年に Gregor Hohphe が「 スターバックスでは2相コミットを使わない(Starbucks Does Not Use Two-Phase Commit) 」という優れた投稿を発表しました。それを読んでいたら、学生時代にスターバックスでアルバイトをした頃がいきなり関わってきました。何年もの間に次第に分かってきたのは、プログラマでさえ有名なコーヒーショップのチェーンから学べることが思った以上にあるということです。 多くの人はスケーラビリティのあるソフトウェアを作ろうしますが、最初に考えていたよりも非常に難しいことがあります。個々のタスクをこなしているうちに「あらゆるものの重要性は等しく、同じリソースを必要とし、決まった順序で同期的に進行する」と考えてしまう罠に陥ってしまうのです。 実際には、少なくともスケーラビリティのあるシステムでは、当てはまりません。もちろんスターバックス

    ソフトウェアのスケーラビリティについてスターバックスが教えてくれること | POSTD
    nomnel
    nomnel 2016/05/01
  • Let’s EncryptとNginx : セキュアなWebデプロイメントの現状 | POSTD

    最近まで、SSL暗号化通信は「あると好ましい機能」という程度にしか考えられていませんでした。そのため、安全なのはアプリのログインページだけというサービスが数多く存在していました。 しかし、状況は良い方向へと変化しています。現在では暗号化は必須と考えられ、ほとんどの開発者が導入を義務付けています。また、巨大検索エンジンGoogleでは、SSLの導入が検索結果の順位を決定する要因にさえなっています。 しかし、SSLが広範に普及しているにも関わらず、セキュアなWebサービスを構築することは、未だに面倒で、時間がかかり、エラーの原因になりやすいと考えられています。 最近この分野では、 Let’s Encrypt が、SSL証明書をより広く普及させ、Webサイトのセキュリティ維持に係るワークフローを大幅に簡略化しようと取り組んでいます。 強力なWebサーバNginxや、他のハードニング方法と組み合わ

    Let’s EncryptとNginx : セキュアなWebデプロイメントの現状 | POSTD
    nomnel
    nomnel 2016/04/21
  • 他人の書いたコードに挑もう – Part 2 | POSTD

    この記事の前編はこちら: 他人の書いたコードに挑もう – Part 1 慣れる 前にも言ったように、よく知らないプロジェクトのコードを探索する時は、段階を追って進めます。第一段階は、通常、様々なファイルやフォルダを大まかに見ていくことです。何がどこにあって、そのプロジェクトがどんな「モノ」を持っているのかを把握します。それを終えてやっと、自分の見たい特定の「何か」を詳細に見ていくことができるのです。 いろいろなコードを見る Spyderにあると思われる主なトップフォルダは下記のものです。 app_example/ :明らかに何らかのアプリケーション例であり、おそらくメインのコードではない。 conda.recipe/ : Anacondaとのある種のインテグレーションで、Spyderを簡単にインストールできるようにするもの。 continuous_integration/ :自動の単体テス

    他人の書いたコードに挑もう – Part 2 | POSTD
    nomnel
    nomnel 2016/04/12
  • 他人の書いたコードに挑もう – Part 1 | POSTD

    この記事では、他人が書いたコードを扱うための練習法を一から説明します。目標は、 Spyder Python IDE という今まで触ったこともないプロジェクトのコードに任意の変更を加え、途中で行き詰ることなく、目的達成に必要な情報 のみ 習得することです。ここでは、勘や実験的な手段、そしてプロの現場で養った洞察力を武器に問題に対処する方法を学びます。形式ばったレッスンのように、苦痛を感じることはないでしょう。満足感や挫折、葛藤を味わいながらプロジェクトを進め、最終的には(なんとか動く程度の)パッチを完成させ、大規模で不慣れなコードベースに機能を追加します。 プログラミングを学んでいる人は皆、あらゆる種類のプログラムで大量のコードを書いています。それは、問題集に載っているアルゴリズムを実装するにせよ、ウェブサイトの構築やビデオゲームの作成をするにせよ同じです。ところがプロのソフトウェアエンジニ

    他人の書いたコードに挑もう – Part 1 | POSTD
    nomnel
    nomnel 2016/04/12
  • DHHはどのようにRailsのコントローラを書くのか | POSTD

    私たちの救世主DHH™は最近の Full Stack Radioのインタビュー で、 Basecamp の最新版で彼がどのようにRailsのコントローラを書いたかを説明しています。下記は、彼のすばらしい話を書き取ったものです。 これまでに思うようになってきたのは、「RESTの原則に従うには、どのタイミングで新たなコントローラを作るべきかを一度決めたら、ほぼ異例なくその原則を遵守するべきだ」ということです。いつだってその方がうまくいくんです。自分の作ったコントローラの状態を悔やむのは決まって、作ったコントローラの数が少なすぎた時です。多くの処理を任せようとしすぎてしまうんです。 そこでBasecamp 3では、ある程度理にかなったサブリソースがあれば、毎回コントローラを分割していきます。フィルタなどの場合ですね。例えば画面があって、それがある状態になっているとします。もしこれにいくつかのフィ

    DHHはどのようにRailsのコントローラを書くのか | POSTD
    nomnel
    nomnel 2016/03/18
  • 誰もあなたの製品を使いたいと思ってはいない : 製品をデザインするための考え方 | POSTD

    毎朝、デザイナーは目が覚めると、喜んで自分の製品に取りかかります。それがデジタル製品であっても物理的な製品であっても、デザイナーは心の中で、人々が自分の製品を使いたがるようになり、楽しんで使うようになると信じているのです。 それはやや一般論かもしれません。しかし、私たちはデザイナーとして、自然と 自分が取り組んでいる各プロジェクトを最高のものにし 、革新的なものにして、そして何より、違いをもたらしたいと考える傾向があります。 ああ、私の製品は素晴らしい物になるはずだ。機能やオプション、設定が充実している。みんなが毎日その製品を使い、愛用するようになるだろう。 – あるデザイナー ここで少し意外な事実をお教えましょう。人々は製品を使用ことにあまり興味はありません。ユーザがインターフェースを操作したり、つまみを回したり、レバーを引いたり、ボタンをタップしたりするのはすべて時間の無駄です。むしろ

    誰もあなたの製品を使いたいと思ってはいない : 製品をデザインするための考え方 | POSTD
    nomnel
    nomnel 2016/03/15
  • Railsの基本理念 : Railsの生みの親が掲げる8つの原則 | POSTD

    (訳注: 2016/3/2、頂いたフィードバックをもとに記事を修正いたしました。) Ruby on Railsは最近、急激に注目を集めていますが、その原因はほとんど、この言語が斬新なテクノロジーとしてもてはやされたことと、タイミングにあります。技術的な優位性は時間の経過とともに失われますから、タイミングがよかっただけでは、一過性のブームに終わり、このムーブメントの隆盛は長続きしません。従って、「Railsがいかにして、適切な技術としての位置を維持し続けるるだけでなく、影響力とコミュニティを拡大し続けてきたのか」をより多くの人に説明していく必要があります。そして、その維持・拡大を可能にした/していく要因は、物議を醸すことさえあるRailsの基原則にあると考えています。 この基原則はここ10年ほどの間に進化を続けてきましたが、最も強固な柱となっているルールはやはり、公開当初から制定されてい

    Railsの基本理念 : Railsの生みの親が掲げる8つの原則 | POSTD
    nomnel
    nomnel 2016/02/18
  • どうすればPythonをJuliaと同じくらい速く動かせるのか? : 様々なやり方で計算の高速化を図る | POSTD

    どうすればPythonJuliaと同じくらい速く動かせるのか? : 様々なやり方で計算の高速化を図る JuliaPython 科学技術計算には、Pythonなどの言語よりもJuliaを使った方がいいのでしょうか? http://julialang.org/ に載っているベンチマークを見ると、どうしてもそんな風に思ってしまいます。というのも、Pythonなどの高水準言語は、スピード面で大幅に劣っているのです。けれども、これは私が最初に感じた疑問ではありません。私が気になったのは、「Juliaのチームが書いたPythonのベンチマークは、Pythonに最適なものだったのか?」ということです。 こういった多言語の比較について、私の考えを述べましょう。まずベンチマークというのは、実行するタスクによって定義されるものです。よって、そのタスクを実行するための最適なコードを、各言語に精通した人々が最

    どうすればPythonをJuliaと同じくらい速く動かせるのか? : 様々なやり方で計算の高速化を図る | POSTD
    nomnel
    nomnel 2016/02/04