タグ

programmingに関するpipeheadのブックマーク (1,626)

  • Pythonのオブジェクトとクラスのビジュアルガイド – 全てがオブジェクトであるということ | POSTD

    Python開発者が大好きな言葉があります。それは”全てはオブジェクトである”です。実際、私自身もPythonのクラスを教えているときに何度も口にしています。多くの人が何度も聞いた言葉かもしれないのですが、私が言う度に生徒は賛同の相槌をしてくれます。結局のところ、Javaにおいて全ては(対象がそうでない場合を除いて)オブジェクトであり、.NETにおいても全てはオブジェクトであると、よく言われています。 しかしPythonにおいて全てがオブジェクトであると言う時、(私の生徒は驚いていましたが)「 全て 」にはクラスも含まれているのです。これはとても筋が通っていて、オブジェクトシステム全体が理解しやすくなります。しかしそれでも、広い視野で物事を見ることは難しいのです。 今回のブログ記事では、Pythonのオブジェクト間のつながりをざっと見ていきたいと思います。そして”全てはオブジェクトである”

    Pythonのオブジェクトとクラスのビジュアルガイド – 全てがオブジェクトであるということ | POSTD
    pipehead
    pipehead 2015/11/24
    /* https://blog.lerner.co.il/pythons-objects-and-classes-a-visual-guide/ の和訳 */ > 「全て」にはクラスも含まれているのです。
  • ホスト(host)とホスト名(hostname)の違い - ttanimichi's blog

    pipehead
    pipehead 2015/11/15
    > ホストはポート番号も含むけどホスト名はポート番号を含まない、で良さそう。
  • ソートアルゴリズム高速化への道 - kivantium活動日記

    先日、アルゴリズムの授業でソートのアルゴリズムをいくつか習いました。ソートアルゴリズムの名前と原理くらいは聞いたことがありましたが、実装したことはなかったのでいい機会だと思い実装してみることにしてみました。ただ実装するだけでは面白くないので高速化の限界に挑戦してみたいと思います。 計測用プログラム 今回の計測では、ランダム値が入った配列のソートを100回行い、平均時間を各アルゴリズムに競わせるというシンプルなルールにしました。プログラムは以下の通りです。 C++11で入ったメルセンヌ・ツイスタなどの機能を使っているので、ビルド時には-std=c++11を指定する必要があります。 実験に使用したパソコンのCPUはCore i3-3227U@1.90GHz、コンパイラはgcc version 4.8.4で最適化オプションには-O3を指定しました。 #include <iostream> #in

    ソートアルゴリズム高速化への道 - kivantium活動日記
    pipehead
    pipehead 2015/11/03
    バブルソート, 挿入ソート, マージソート, ヒープソート, クイックソート
  • Q. なぜ’x’ in (‘x’,)が’x’ == ‘x’より速い? | POSTD

    >>> timeit.timeit("'x' in ('x',)")0.04869917374131205>>> timeit.timeit("'x' == 'x'")0.06144205736110564 >>> timeit.timeit("'x' in ('x', 'y')")0.04866674801541748>>> timeit.timeit("'x' == 'x' or 'x' == 'y'")0.06565782838087131>>> timeit.timeit("'x' in ('y', 'x')")0.08975995576448526>>> timeit.timeit("'x' == 'y' or 'x' == 'y'")0.12992391047427532

    Q. なぜ’x’ in (‘x’,)が’x’ == ‘x’より速い? | POSTD
    pipehead
    pipehead 2015/10/22
    /* http://stackoverflow.com/questions/28885132/why-is-x-in-x-faster-than-x-x の和訳 */ > a in (b, )のほうが速くなるのはa is bの場合に限られる
  • Python: コマンドラインパーサの Click が便利すぎた - CUBE SUGAR CONTAINER

    Python のコマンドラインパーサといえば、標準ライブラリに組み込まれている argparse が基。 蛇足になるけど、バージョン 2.7 以前で使われていた optparse は将来的に廃止予定なので新たに使うことは避けた方が良い。 そして、今回紹介する Python のサードパーティ製コマンドラインパーサ Click は、既存のパッケージと比較すると最小限のコードで美しくコマンドラインインターフェースを実装できるように作られている。 どれくらい楽になるかといえば、もう argparse を使っている場合じゃないな、と思えるレベル。 Welcome to Click — Click Documentation (8.0.x) もくじ もくじ Click をインストールする 基的な使い方 コマンドを定義する オプションを追加する 引数を追加する サブコマンドを作る オプションについて

    Python: コマンドラインパーサの Click が便利すぎた - CUBE SUGAR CONTAINER
  • JavaScriptのコメントは不要か? | POSTD

    コード中にコメントを書くべきでしょうか? 是が非でも避けるべきでしょうか? それとも控えめに書けばいいでしょうか? 開発者たちはそれぞれ、ソフトウェアを開発する際にどのように、そしてどんな時にコメントを書くかについて、独自の考え方を持っています。この記事では私の意見を述べますが、これが誰にも当てはまるというわけではありません。 なお、関数型プログラミングまたはオブジェクト指向プログラミングの原則に則ってJavaScriptで書かれたソフトウェアに絞った上で、私の意見を述べることにします。 コメントと保守性 この記事では、保守性のあるコードを書く場合について考えます。つまり、以下のようなコードです。 簡単に理解できる 簡単に拡張できる 簡単にデバッグできる 簡単にテストできる 保守性のあるコードには、大量のコメントが必要でしょうか? 明確に書かれたコードであるならば、大量のコメントは不要だと

    JavaScriptのコメントは不要か? | POSTD
  • 末尾再帰による最適化 - Qiita

    はじめに ES6 (EcmaScript 6)を試そうと、Babelのドキュメントを読んでいたところ、末尾呼び出し(Tail Call)の最適化をしていることにびっくり。公式リリース(2015年6月)から3ヶ月あまり経ってはいますが、ES6が末尾呼び出し最適化を仕様としてサポートしていることをようやく知りました。 現状で末尾呼び出し最適化をサポートしているブラウザはなく(ブラウザやaltJSなどのES6互換表を参照)、唯一、ES6からES5へのトランスパイラであるBabelのみが部分的(直接的な末尾再帰のみ)ではありながらサポートしているようですね。 今回の記事では、来たるES6時代(いまさらの感はありますが)に備えて、末尾再帰とその最適化について簡単に解説した上で、Babelを利用して実際にJavaScriptでの末尾再帰の最適化を実験してみたいと思います。 ざっくり概要 再帰関数 は関

    末尾再帰による最適化 - Qiita
    pipehead
    pipehead 2015/10/04
    多重再帰, 相互再帰
  • やり直しC言語:配列はファーストクラスではなかった

    C言語を久しぶりに触ってやっと理解できたのが、配列は第一級オブジェクト(ファーストクラスオブジェクト) ではない 、ということです。 第一級オブジェクト - Wikipedia 第一級オブジェクト Wikipediaによると、第一級オブジェクトと呼ばれるものは以下の様な特徴を持つそうな。 無名のリテラルとして表現可能である。 変数に格納可能である。 データ構造に格納可能である。 それ自体が独自に存在できる(名前とは独立している)。 他のものとの等値性の比較が可能である。 プロシージャや関数のパラメータとして渡すことができる。 プロシージャや関数の戻り値として返すことができる。 ... C言語だと、int(1, 2)やchar('a', 'b')、floatやboolなどがこれに相当します。また、任意の型へのポインタも、同じ性質を持っています。 私はC言語を真面目に勉強する前にJavaScr

    やり直しC言語:配列はファーストクラスではなかった
  • ガード節(ガード, Guard) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    ガード節(ガード, Guard) - Qiita
  • [翻訳] PEP 0484 -- 型ヒント (Type Hints) - Qiita

    これらのアノテーションは実行時に普通の __annotations__ 属性として参照できる一方で、 実行時には型チェックを行いません 。その代わり、この提案は独立したオフライン型チェッカーの存在を仮定しています。ユーザーはそのような型チェッカーを使って自主的にソースコードを検査できます。基的にこういった型チェッカーは非常に強力なリンター (linter) として機能します。(もちろん似たようなチェッカーを使って個々のユーザー向けに契約による設計 (Design By Contract) の強制や JIT 最適化を実行時に行うこともできるはずですが、そういったツールはまだ実用レベルにはなっていません。) この提案は mypy [mypy] に強く触発されています。例えば、"整数型のシーケンス" の型は Sequence[int] のように記述します。角括弧を使うことで言語に新しい構文を追

    [翻訳] PEP 0484 -- 型ヒント (Type Hints) - Qiita
  • やり直しC言語:複雑な宣言の読み方

    C言語は宣言文が非常に読みにくいことで有名で、後発のGo言語はこれを批判して宣言の構文を変えています。私もずっと読むのが苦手だったのですが、私の頭が悪いのではなく、C言語の仕様がヘン、ということらしい。 今まで飽きるほどこの手の解説は書かれてきてるわけですが、自分なりにまとめないと覚えた気がしないので、あえてまとめておきます。ここに書いてある内容は、「C言語ポインタ完全制覇」に詳しく書いてあります。 型の派生 C言語では、int, char, floatなどの基型から、配列やポインタを派生していくことができます。対象を並べたものが配列で、対象を指し示すのがポインタです。 配列やポインタからも配列やポインタを派生できるので、派生パターンは無限に存在します。 int int の配列 int の配列 の配列 ... int へのポインタ int へのポインタ へのポインタ ... int への

    やり直しC言語:複雑な宣言の読み方
    pipehead
    pipehead 2015/09/22
    [], *, ()
  • うまくクラス名を付けるための参考情報 - Qiita

    クラス名には、多くの場合"名詞"を用います。メソッド名の場合は動詞や助動詞を用いて命名しましたが、クラス名は何かしらの責務を持つモノとして捉えるため、名詞を用いることになります。 一方、インタフェースの宣言をする場合、そのインタフェースの名前に"形容詞"を用いることがあります(例:Iterable、Closeable等)。形容詞を用いることで、クラスの持つ性質を説明的に見ることができるようになります(Iterableな配列のList実装 -> ArrayList等)。 この記事は、どのような名詞や形容詞がクラス名やインタフェース名として用いることが出来るかを一覧し、できるだけクラスやインタフェースの役目を端的に表せるようなリファレンスとして活用できるものを目指していきたいと思います。 自分自身がクライアントアプリケーションのバックグラウンドを持っている為、多分にそこで用いる命名方法が含まれ

    うまくクラス名を付けるための参考情報 - Qiita
  • クロージャ再考 - Qiita

    はじめに 中級以上のJavaScriptプログラマを目指す上で、避けては通れない壁の一つは クロージャ(Closure) だと思います。「関数の外側で定義された変数を持つ関数の実行時オブジェクトです」とさらっと説明されることが多いですが、シンプルなだけに理解したつもりになって実は使いどころが分からないってことになりがちです。きちんと自分のものにするには基から丁寧に理解しないとダメですねってことで、今回はクロージャについてその背景から調べてみたいと思います。 歴史と語源 まずは歴史から振り返ってみたいと思います。Wikipediaによるクロージャの解説では、以下のような説明があります。 クロージャの概念は、1960年代にラムダ計算の機械的な実行モデルを構築するために生み出され、1970年に 静的スコープ と 第一級関数 をサポートするPALプログラミング言語で最初に実装された。1964年、

    クロージャ再考 - Qiita
    pipehead
    pipehead 2015/09/14
    束縛変数, 自由変数, 環境, 第一級関数, 高階関数, レキシカルスコープ (静的スコープ), ダイナミックスコープ, アクティベーションレコード (スタックフレーム), コールスタック, FUNARG 問題, クロージャ, モジュールパターン
  • Python3.5の新機能 - Qiita

    はじめに 開発ロードマップ(PEP-478)によると正式リリースが9/13(おそらくUS時間)に予定されているPython 3.5。追加のリリース候補(rc4)が9/9にリリースされたこともあり、多少遅れる可能性もあるが、おそらくは一週間以内にでることであろう。ということで、Python3.5の変更点の日語まとめ + 一言コメントをしてみた。元ネタはこちらの冒頭にある "Summary - Release Highlights"。 なお、Python3.5を試すには、最新のリリース候補をここからダウンロードすればよい。あるいはpyenvを使っている人はpyenv installで簡単に導入できるが、pyenvの最新版v20150901ではrc2までしかサポートされていないのでそれで我慢するか、pyenvをHEADから取ってくる必要がある。homebrewを使っている場合はこんな感じ。 P

    Python3.5の新機能 - Qiita
  • プログラミングでよく使う英単語のまとめ【随時更新】

    対になる言葉 comment out / uncomment コメントにする、コメントを解除する。 comment out は into a comment の意味。 comment だけならコメントする、評するの意味になる。 add / remove 追加する、削除する。 リストなどに値を入れる場合などにも使われる。 特に、末尾に追加する場合は append、先頭に追加する場合は prepend を使う。 Add A to B で、A を B に加える。 Remove A from B で、B から A を取り除く。 start / stop 開始する、止める。名詞だと開始、停止。 静止状態から動き出す感じが start。 途中からでも使える。 バーコードや通信の符号で StartCode / StopCode という使い方をする。 begin / end 始める、終わる。 start

    プログラミングでよく使う英単語のまとめ【随時更新】
  • C++ volatile調査。局所的な最適化阻止 - Qiita

    今回の目的 例えば 他のデバイスが非同期でフラグを変えるのを待つ場合に コンパイラの最適化によって、望んだ処理が消える可能性がある その場合に volatileを使うが、そのあたりを調査します 問題コード まず簡単な例。flagが初期値0で、0以外の値に変わると worker!! と出力し、終了する。 別スレッドで 5秒後にflag=1 に設定するので5秒後に終了するはずのプログラム (下記に理由を書きますが 来はスレッドの同期にvolatileを使うのは間違いで、処理系によっては正しく動作できません。今回はそのあたりは無視しています) # include <iostream> # include <thread> int flag = 0; void worker() { while( flag == 0){ } std::cout << "worker!! \n"; } auto m

    C++ volatile調査。局所的な最適化阻止 - Qiita
    pipehead
    pipehead 2015/09/08
    > あくまでvolatileで同期出来るのは、シングルスレッドでの処理 I/Oのwait 程度だと思います
  • Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER

    この記事の目指すところ 現在 Python はバージョン 2.x 系と 3.x 系という、一部に互換性のないふたつのメジャーバージョンが併用されている。 その上で、この記事にはふたつの目的がある。 ひとつ目は、2.x 系と 3.x 系の違いについてまとめること。 現状、それぞれのバージョン毎の違いはまとまっているところが少ない。 自分用に、このページだけ見ればひと通り分かる!っていうものがほしかった。 ふたつ目は、2.x 系と 3.x 系の違いを吸収するソースコードの書き方についてまとめること。 こちらも Web 上にナレッジがあまりまとまっていない。 これについては今 python-future というパッケージがアツい。 尚、サポートするバージョンは以下の通り。 2.x 系: 2.6 と 2.7 3.x 系: 3.3 と 3.4 題に入る前に、最近の Python 事情についてまとめ

    Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER
  • リフレクションとは - IT用語辞典 e-Words

    リフレクションとは、反射、反照、反響、内省、熟考、思想、徴候、映像、非難などの意味を持つ英単語IT分野では、コンピュータプログラムが実行時に自身の内部構造の参照や書き換えを行う技術などをこのように呼ぶ。 プログラミングにおけるリフレクション プログラミングの分野で、プログラムの実行時にプログラムの構造や構成要素(クラス、メソッド、関数など)についての情報を取得したり、プログラムの動作を動的に変更したりすることをリフレクションという。 例えば、実行時にあるオブジェクトのクラス名を文字列データとして取得して動作に反映させたり、文字列変数に格納されたメソッド名を用いてオブジェクトのメソッドを呼び出したりする機能のことを指す。 言語や処理系によってはコンパイル時にプログラムの構造を反映した処理を行うことができる場合もある。その場合、コンパイル時のリフレクションを「静的リフレクション」(stati

    リフレクションとは - IT用語辞典 e-Words
  • Pythonにおけるプロファイリング ― コードの高速化のために | POSTD

    ここHumanGeo社ではPythonを使うことが多く、それは極上の楽しみでもあります。美しく機能的なコードを短時間で記述するのにPythonはうってつけで、私個人にとっても一押しの言語です。仕事に限らずプライベートでも使っています。そんな素晴らしいPythonですが、欠点がないわけではありません。それはあまりにも遅いことです。幸いPythonには、コードをプロファイリングするための優れたツールがいくつかあるので、コードの美しさと速さを共存させることができます。 HumanGeoで働き出した頃、実行に長時間を要すプログラムのボトルネックを探り、何とかしてそれを速くさせるという仕事を担当しました。その内容は、 cProfile や PyCallGraph ( ソース )、はたまたPyPy(高速なPython用代替インタプリタ)などの各種ツールを使って、プログラムを最適化するためのベストな方法

    Pythonにおけるプロファイリング ― コードの高速化のために | POSTD
    pipehead
    pipehead 2015/08/20
    http://blog.thehumangeo.com/2015/07/28/profiling-in-python/ の和訳; cProfile, PyCallGraph; ボトルネック解消の手引き
  • RubyとPythonにおけるガベージコレクションの視覚化 | POSTD

    稿は、ブダペストで開かれたイベント「 RuPy 」で、Pat Shaughnessyが披露したプレゼンの内容をまとめたものです。 プレゼンの映像はここ から視聴できます。 稿は当初、 同氏の個人ブログ に投稿されましたが、同氏の了承を得て、Codeshipに再掲載します。 このイベントは「RubyPython」に関するカンファレンスなので、RubyPythonでは、ガベージコレクション(以下「GC」)の動作がどう違うのかを比較すると面白いだろうと私は思いました。 ただしその題に入る前に、そもそもなぜ、GCを取り上げるのかについてお話しします。正直言って、すごく魅力的な、わくわくするテーマではないですよね? 皆さんの中でGCと聞いて、心がときめいた方はいらっしゃいますか? [実はこのカンファレンス出席者の中で、ここで手を挙げた人は数名いました!] Rubyコミュニティで最近、Rub

    RubyとPythonにおけるガベージコレクションの視覚化 | POSTD
    pipehead
    pipehead 2015/08/05
    https://blog.codeship.com/visualizing-garbage-collection-ruby-python/ の和訳; Ruby: マークアンドスイープ; Python: 参照カウント