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

  • 週末にいちばん多く使われるプログラミング言語は? | POSTD

    (編注:2020/10/01、いただいたフィードバックをもとに記事を修正いたしました。) 私は週末のほとんどを家族と過ごし、読書を楽しみ、それから、現在関っているオープンソースプロジェクトの作業に時間を割いています。そのプロジェクトはここStack Overflowで従事している仕事と重なっていますが、全く同じというわけではありません。多くの開発者はサイドプロジェクトに取り組むことで修練を積んだり、キャリアを発展させたり(あるいは単に遊んだり!)しています。Stack Overflowではプロフェッショナルから趣味の人まで向けに、あらゆるタイプのテクノロジをサポートします。いつ作業をしていても、質問に答えられるようにしているのです。では、平日と比べて週末にはどんなプログラミング言語についての問い合わせが多いでしょうか。 Kaggleで公開されている StackLite dataset を使

  • どれだけ速く文字列からスペースを削除できるのか | POSTD

    時によってプログラマは文字列から不要な文字を取り除きたい場合があります。例えば、テキストの一部からすべての行の末尾文字を削除したいとします。 その時、全スペース(‘ ‘)や改行コード(‘\n’および‘\r’)を削除する問題を考えてみましょう。 効率的に実行するにはどのような方法がいいのでしょうか。 size_t despace(char * bytes, size_t howmany) { size_t pos = 0; for(size_t i = 0; i < howmany; i++) { char c = bytes[i]; if (c == '\r' || c == '\n' || c == ' ') { continue; } bytes[pos++] = c; } return pos; } 上記のコードはUTF-8でエンコードされた文字列で動作します。UTF-8がASCII

    どれだけ速く文字列からスペースを削除できるのか | POSTD
  • 型クラスはインターフェースとどう違うのか | POSTD

    (注:2017/02/27、いただいたフィードバックを元に翻訳を修正いたしました。) Haskellの型クラスは、Haskellを学び始めたばかりの多くの人にとっては難しい概念です。たいていの言語はこれを表すことが全くできませんし、それに近い概念も持っていません。多くのオブジェクト指向型の言語にとっては、利用可能なものの中では Interface が最も近い言語要素でしょう。Rubyの modules は似たような役割を持っています。しかし、この概念は両方とも、名前の多重定義と一種のポリモーフィズムをアドレスするので、型クラスが提供するパワーの一部を欠いています。 この記事は、型クラスに興味を持っている人向けです。Haskellや関数型プログラミングの予備知識は必要ありません。JavaやC言語のような静的な型付き言語に慣れていれば、役に立つでしょう。 型クラスについての概要/要約 型クラス

    nakeddiver
    nakeddiver 2017/02/22
    むじー
  • Python 3を使うべきでない場合(なんてない) | POSTD

    数日前、著名なライターで開発者でもあるZed Shawが “The Case Against Python 3”(Python3を使うべきでない場合) というブログ記事を書きました。私はZedの功績にとても敬意を払っているし、彼の( Learn Python the Hard Way )というの手法は、 私の に非常に似ているので、私はいつも、 私の講座 を受講しようとしている人には予習するときに彼のを読むように伝え、講座を修了した後に練習を積みたい人には復習するときに読むように伝えています。 ですから、今回のPython 3に関するZedの記事が私には賛同できないものだったことは、とても残念でした。 説明しましょう。私の仕事の90%は、さまざまな大企業でのPython講師としての仕事です。幅広い背景に対応して、クラスは「プログラム未経験者のためのPython」や「Python入門」

    Python 3を使うべきでない場合(なんてない) | POSTD
  • 技術的負債の返済 – レガシーコードをリファクタリングで救うには | プログラミング | POSTD

    レガシーコードをうまく手なずけて、もう一歩成熟させるにはどうすればいいのでしょう?この投稿では、大規模なレガシーウェブアプリケーションと格闘してきた私が学んだことを紹介します。レガシーコードをうまく手なずけて 、もう一歩成熟させるにはどうすればいいのでしょう?この投稿では、大規模なレガシーウェブアプリケーションと格闘してきた私が学んだことを紹介します。 レガシーコードはリファクタリングで救出可能 耳寄りなお知らせがあります! リスたちは毎年何千もの木を植えてくれています 。まあ自分たちが隠したドングリのありかを忘れてしまった結果ですけどね。そしてもうひとつ。 あなたのプロジェクトも救出できる のです。 ボスから任されたプロジェクトが どんなに醜い泥まみれのレガシーコードだったとしても 、そこには 必ず 道があります。道は曲がりくねっていて、木陰にはモンスターが待ち構えていることでしょう。

    技術的負債の返済 – レガシーコードをリファクタリングで救うには | プログラミング | POSTD
    nakeddiver
    nakeddiver 2017/01/08
    “すべてのコードを行単位で隅から隅までテストしようとするのはコスト的に難しいでしょうし、そもそもそんな必要もありません。理屈のうえでは、システムのあらゆる側面について正しいことが確信できればすばらしい
  • プログラマとしてのキャリアを脅かす反復運動過多損傷の痛みをどう解消したか | POSTD

    タイピング時に痛みを感じつつ、プログラマとして働き続けるのは非常に辛いことでしょう。音声認識という代替手段はあっても、やはりタイピングとは勝手が違います。新しい仕事を始めてすぐに手首と腕の痛みがぶり返した時、私は恐怖感すら覚えました。 私は過去に2度、こうした状況に陥ったことがあります。その時は痛みが消えるまで結局何年もの間、プログラミングなしの生活を余儀なくされました。そのため、またプログラマとしてのキャリアが脅かされるのでは、と不安に感じていました。 そんなある日、仕事場へと自転車をこいでいる最中に、私は何が起きているのかに気付いたのです。そして自らの理論を検証する手段を思い付き、それを実行に移すと、痛みは消え去りました。同じ対策を何年か前にも講じていれば、きっと痛みは解消していたはずです。しかし実際は、プログラミングができたはずの数年間を、嫌々プロダクト・マネジャとして働いて過ごして

    プログラマとしてのキャリアを脅かす反復運動過多損傷の痛みをどう解消したか | POSTD
  • くだらないAPIなんていらないよ – 2016年のウェブスクレイピング事情 | POSTD

    ソーシャルメディアのAPIとそのレート制限は、あまり気分のよいものではありません。特にInstagram。あんな制限つきAPIを欲しがる人がいったいどこにいるんでしょうね? 最近のサイトは、スクレイピングやデータマイニングの試みを阻止するのがうまくなってきました。AngelListはPhantomJSすら検出してしまいます(今のところ、他のサイトでそこまでの例は見ていません)。でも、ブラウザ経由での正確なアクションを自動化できたとしたら、サイト側はそれをブロックできるでしょうか? 並行性を考えたり、さんざん苦労して用意した結果として得られるものを考えたりすると、Seleniumなんて最悪です。あれは、私たちが「スクレイピング」と聞いて思い浮かべるようなことをするためには作られていません。しかし、賢く作り込まれた今どきのサイトを相手にして、インターネットからデータを掘り当てるための信頼できる

    くだらないAPIなんていらないよ – 2016年のウェブスクレイピング事情 | POSTD
    nakeddiver
    nakeddiver 2016/12/03
    “こんなふうにところどころでランダムな待ち時間を入れておくと、人間らしくなって安全です。 ”
  • MITライセンスを1行1行読んでいく | POSTD

    全てのプログラマが理解すべき171語の文章 MITライセンス は、最も有名なオープンソースソフトウェアのライセンスです。この記事では、その内容を一行一行読んでいきます。 ライセンスを読む オープンソースソフトウェアを利用しているものの、これまでライセンス全文(原文:171語)を読む機会がなかった方は、大した量ではないので、今すぐ読んでください。あなたにとってライセンスが身近なものでないなら尚更です。理解できない箇所などがあれば、その部分は心に留めておき、明確にするようにしてください。これから背景や解説とともに、全文を分割して順番に紹介していきますが、大事なことは全容を頭に入れておくことです。 MITライセンス(MIT) Copyright (c) \<年> \<著作権保持者> ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)のコピーを入手する全ての人に対し、それらに関する無償の

    MITライセンスを1行1行読んでいく | POSTD
  • 何でもSSHでやってしまいませんか? | POSTD

    私はかつて、 ssh-chat というプログラムを書きました。 ssh http://t.co/E7Ilc0B0BC pic.twitter.com/CqYBR1WYO4 — Andrey ???? Petrov (@shazow) December 13, 2014 アイデアは単純なもので、ターミナルを開いてこのようにタイプするだけのことです。 $ ssh chat.shazow.net たいていの人はこの後に続けてlsコマンドをタイプするのでしょうが、ちょっと待って。よく見てください。そこにあるのはシェルではなく、なんとチャットルームですよ! 詳しいことはわからないけど、何かすごいことが起こっているようですね。 SSHはユーザー名を認識する sshでサーバーに接続するときに、sshクライアントはいくつかの環境変数をサーバーへの入力として渡します。その中のひとつが環境変数$USERです。

    何でもSSHでやってしまいませんか? | POSTD
  • try { return } finally {} | POSTD

    class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa(); System.out.println(y); } } 上の質問に回答する前に、次の問題には答えられるでしょうか? try ブロック内に return 文がある場合、 finally ブロックは return の実行時に処理されるのでしょうか。 finally が実行されるなら、いかにして return と finally の両方の実行が実現するのでしょうか。 もし答えが分からなければ、どうぞこのまま読み進め

    try { return } finally {} | POSTD
  • CSSになり損ねた言語たち | POSTD

    TeXMicrosoft Word、あるいはその他の汎用的なテキスト処理環境では簡単に実現できるような見た目に自分の文書を似せようと頑張る(文字どおり)無数の人たちに対して、 “悪いけど、うまくいかないよ” と繰り返し言い続けるのは、実際のところ、この1年間、私にとっては継続的な楽しみだった。- Marc Andreessen 1994年 Tim Berners-LeeによってHTMLが発表された1991年には、ページのスタイルを設定する方法はありませんでした。HTMLタグがどのように処理されるかはブラウザ次第で、多くの場合、ユーザの恣意的な入力が大きく影響しました。そうした事情から、ページがどのようなスタイルで処理されるかを”提案”するような標準的な方法を求める声が上がるようになりました。 しかし、CSSが導入されるのは5年先で、完全に実用化されるには10年の歳月を待たねばなりません。

    CSSになり損ねた言語たち | POSTD
  • 情報理論を視覚的に理解する (2/4) | POSTD

    コードワードの範囲 コードの長さが1ビットなら使用できるコードは0と1の2つ、長さが2ビットなら00、01、10、11の計4つです。つまり1ビット増えるごとに、使用できるコードの数は2倍になります。 では、コードワードによって長さが異なる可変長コードの場合はどうなるでしょうか。3ビット長のコードワードが8つという単純なケースだけでなく、2ビット長のコードワードが2つと3ビット長のコードワードが4つなど、より複雑な組み合わせも考えられます。このような長さの異なるコードワードをいくつ使用できるかは、何を基に決まるのでしょうか。 前述のとおり、Bobは各単語をコードワードに置き換えて、それらを連結することで、メッセージをエンコードされた文字列に変換しています。 注釈: エンコードされた文字列 コードワード 元のシンボル 可変長コードを作成する際は、少々厄介な問題があるため注意が必要です。具体的に

    情報理論を視覚的に理解する (2/4) | POSTD
  • 情報理論を視覚的に理解する (1/4) : | POSTD

    世界を考察する新しい方法を手に入れたときの感覚が大好きです。特に好きなのは、いずれ具体的なコンセプトに形を変えるボンヤリとした考えがあるときです。情報理論は、その最たる例です。 情報理論は、多くの物事を説明するための正確な言葉を与えてくれます。自分はどのくらい理解できていないのか?質問Aの答えを知ることが、質問Bを答えるのにどのくらい役立つのか?ある種の信念が他の信念とどの程度似ているのか?こういうことに対し、若くて未熟なころから自分なりの考えがありましたが、情報理論に出会って正確で強固な考えとしてはっきりと固まりました。その考えは、桁外れの、例えばデータの圧縮から量子物理学や機械学習、さらにはその間に広がる数多くの分野に応用が利くものです。 残念なことに、情報理論は少々威嚇的に見えてしまうのですが、そう断定すべき根拠は全くないと思います。実際、情報理論の多くの重要な概念は完全に視覚的に説

    情報理論を視覚的に理解する (1/4) : | POSTD
  • そのJavaScriptの関数は本当に純粋関数? | POSTD

    (2016/12/11、いただいたフィードバックをもとに翻訳を修正いたしました。) JavaScriptにおいて”純粋関数”とはどういう意味でしょうか? 一般的なプログラムの用語では、純粋性というのは”参照透過性”として知られています。カッコよく言うと、「 式や関数の呼び出しをその結果と置き換えたとしても、プログラムの振る舞いが決して変わらない 」こと、また別の言い方をするなら、「 同じ入力値を渡すたび、決まって同じ出力値が得られる 」ということです。 これなら直感的に理解できそうに聞こえますし、 x => x * 10 などの関数は純粋に見えます。これに数字の 3 を引数として渡したら必ず、出力値として 30 が得られますからね。では、ある関数が純粋で別の関数が純粋でないと、どうしたら分かるのでしょう? コードを読むだけで十分でしょうか? 一般的にどう思われているかを見てみましょう。昨日

    そのJavaScriptの関数は本当に純粋関数? | POSTD
  • Bluebirdの高速化を可能にする、3つのJavaScriptパフォーマンスの基礎 | POSTD

    最近Reaktorが掲載した『 Promises made by a Reaktor developer had an impact on the industry article 』で約束した、Bluebird promiseライブラリの製作者であるプログラマのPetka Antonovからの知見です。 Bluebirdは広く使用されているJavaScript用のpromiseライブラリで、同じような機能が実装されているにも関わらず、他のpromiseよりも100倍速いという理由から最初に知られるようになったのは2013年でした。Bluebirdが高速な理由はライブラリ全体にJavaScriptの最適化の基礎を一貫して適応しているからです。この記事ではBluebirdの最適化に使用する3つの重要な基礎について詳細に説明します。 1. 関数オブジェクトの割り当てを最小限に抑える オブジェク

    Bluebirdの高速化を可能にする、3つのJavaScriptパフォーマンスの基礎 | POSTD
  • Pythonに咬まれるな : 注意すべきセキュリティリスクのリスト | POSTD

    Pythonは、習得が容易で、より大きく複雑なアプリケーションの開発にすぐに適用していけることから、コンピューティング環境に広く普及し、勢いを強めています。ただ、あまりに明瞭で親しみやすい言語なので、ソフトウェアエンジニアやシステムアドミニストレータが警戒を解いてしまい、セキュリティに重大な影響を及ぼすコーディングミスを誘発する可能性はあるかもしれません。主に、初めてPythonを使う人を対象とするこの記事では、この言語のセキュリティ関連のクセに触れます。ベテラン開発者にとってもその特異性を意識するきっかけになればと思います。 入力関数 Python 2に多数存在するビルトイン関数の中で、 input はセキュリティの面で完全に難点です。この関数をひとたび呼び出すと、標準入力から読み込んだものが即座にPythonコードとして評価されます。 $ python2 >>> input() dir

    Pythonに咬まれるな : 注意すべきセキュリティリスクのリスト | POSTD
  • GitHubのコード検索 : プログラマにとっての宝の山 | POSTD

    新しい言語やフレームワークを学ぶことは、時には苦闘になることがあります。従来のアプローチは、概念を説明し簡単な例を提供するドキュメントを読むことです。それで十分な場合もありますが、ドキュメントに高度な例や実際のプロジェクトでの使い方が書かれていない場合も多々あります。 ドキュメントに記載されていない問題に出くわすと、大抵の人はStack Overflowで解決策を探します(またはソースコードを丹念に調べます)。しかし、「使っているフレームワークが登場してから十分に期間が経っておらず、思い浮かぶ質問全てにStack Overflowが答えてくれない」ということもありえます。 今まで問題にはまって、こう考えたことはありませんか? 「誰かが既にこの問題を解決しているはずだ!では、なぜこの問題に対する答えがStack Overflowにないのだろうか?」 そのとおりです。恐らく誰かは既にそれを解決

    GitHubのコード検索 : プログラマにとっての宝の山 | POSTD
  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
  • Pythonの内部構造::PyObject ― CPythonの実装から内部に迫る | POSTD

    こんにちは、皆さん。 Python言語の実装に深く踏み込む前に、Pythonの主要な概念を知っておく必要があります。それは非常にシンプルで、 全てがオブジェクトだ ということです。このことは、Pythonの内部構造を学習する際の最初のステップであり、この旅の入り口でもあります。 今回の主なテーマは、Pythonのオブジェクトが実装レベルでどのように扱われているかを理解することです。私たちは、 Python 2.7.8 のCPythonの実装について話をしていきます。 Pythonのソースをダウンロードし、解凍することを想定しているので、ソースコードへの参照は全て、ルートフォルダからの相対的な参照になります。 PyObjectとPyVarObject Pythonでは全てがオブジェクトです。Pythonで使われている以下のものは文字通り、全て C の PyObject です。 関数 スライス

    Pythonの内部構造::PyObject ― CPythonの実装から内部に迫る | POSTD
  • AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD

    (2016/7/7、いただいたフィードバックを元に記事を修正いたしました。) JavaScript、特にNode.jsといえば、 コールバック地獄 がよく連想されます ^(1) 。たくさんの非同期I/Oを扱うコードを書いたことがある方には、おそらく以下のようなパターンはおなじみでしょう。 export default function getLikes () { getUsers((err, users) => { if (err) return fn(err); filterUsersWithFriends((err, usersWithFriends) => { if (err) return fn(err); getUsersLikes(usersWithFriends, (err, likes) => { if (err) return fn (err); fn(null, lik

    AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD