by shigemk2

当面は技術的なことしか書かない

読書ノート

魔法のおなべ 3 製造業的な誤解

他のツールや資本財と同様に、プログラムの価値は2つの価値を持つ。利用価値 それをツールとして使うときの経済価値 販売価値 それを販売できる商品として見たときの価値経済学的に言えば、利用価値は中間財 販売価値は消費財 といえる。 中間財 〜 インフォ…

魔法のおなべ 2 贈与するおたくたちを越えて

伽藍とバザール ブルックスの法則の打破(OSSにおいては人を投入すればするほど質が上がる) ノウアスフィアの開墾 OSSの文化とは、交換経済ではなく贈与文化(ものを与えることで地位の向上を競いあうポトラッチ的なアレ)しかし、贈与文化が発生するのは財に余…

魔法のおなべ 1 魔法と区別がつかない

ウェールズの神話の女神が持ってる、呪文を唱えると無尽蔵に食べ物を産みだす「魔法のおなべ」 多くの人にとってオープンソースコミュニティの成功はありえそうにない魔法の一種に見える。高品質のソフトが「無料(フリー)」で現れてくるなんてのは、続けばす…

魔法のおなべ 0 序論

この論文は、オープンソース現象に生じ発展しつつある、経済学的な地層を分析したものである。 プログラム開発費用の手当につちえ、よく主張されている神話をいくつか論破 オープンソースでの協力体制についてゲーム理論分析を展開 オープンソース開発の資金…

JavaScript Ninjaの極意 6 オブジェクトの実体化

新しいオブジェクトを作成する最も単純な方法 var o = {}; 関数として呼び出す方法とコンストラクタとして呼び出す方法があるよ。 new演算子をコンストラクタ関数に適用することで、新たにアロケートされる オブジェクトが作成される <html> <head> <meta charset="utf-8"> <title>Listing 6.1</title> <script type="text/javascript" src="../scripts/assert.js"></script> </meta></head></html>

JavaScript Ninjaの極意 7 正規表現 まとめ

正規表現は現在のJavaScript開発に浸透している強力なツール 様々な項や演算子が、正規表現のなかで何を意味するか 正規表現をあらかじめコンパイルする方法 正規表現を使って文字列をテストしてパターンをマッチ マッチしたソースもじれつから部分文字列を…

JavaScript Ninjaの極意 7 正規表現のコンパイル

式の複雑さが増すと、正規表現を後で使うために定義(そしてコンパイル)しておくことにより、 顕著な性能の向上が得られるだろう。コンパイルされた正規表現をJavaScriptで作る方法は、 リテラルを使う コンストラクタを使う がある。 <html> <head> <meta charset="utf-8"> <title>Listing 7.2</title> <script type="text/javascript" src="../scripts/assert.js"></script> </meta></head></html>

JavaScript Ninjaの極意 6 まとめ

prototype new演算子との組み合わせ オブジェクトの型の判定 プロトタイプチューンを利用したJavaScriptコードで継承の効果を得る方法 コンストラクタの不適切な使い方で発生するオブジェクトが実体化されない問題 JavaScriptのオブジェクトをサブクラス化す…

エキスパートPythonプログラミング デコレータ 引数チェック

グローバルな辞書に関数を登録し、その引数と返り値の型のリストを保持する。 XML-RPC(軽量なRPC(Remote Procedure Call)プロトコル、SOAPの代わりに利用される)デコレータを使用すると引数の型情報を設定できるため、入出力に渡される値がそれに合うことを …

JavaScript Ninjaの極意 5 クロージャ

結構カジュアルかつ無意識にクロージャを使っていたのか。 <html> <head> <meta charset="utf-8"> <title>Listing 5.1</title> <script type="text/javascript" src="../scripts/assert.js"></script> <link href="../styles/assert.css" rel="stylesheet" type="text/css"> </head> <body> <script type="text/javascript"> var outer…</body></html>

エキスパートPythonプログラミング デコレータ その2

元の関数をラップするデコレータを使用した場合、関数名やdocstringがデコレータで定義したものに 置き換わってしまう。 >>> def mydecorator(function): ... def _mydecorator(*args, **kw): ... res = function(*args, **kw) ... return res ... return _m…

エキスパートPythonプログラミング デコレータ

# before 2.3 class WhatFor(object): def it(cls): print ('work with %s' % cls) it = classmethod(it) # make it classmethod def uncommon(): print ('I could be a global function') uncommon = staticmethod(uncommon) # make it staticmethod whatfo…

エキスパートPythonプログラミング ウィンドウイテレータ

isliceはシーケンスのサブグループに対するイテレータを返す。 次の例は、標準入力から行単位で入力を読み込み、その行が5つ以上の要素を 持つ場合に5番目の要素から順にyieldする Python 2.7.4 (default, Apr 18 2013, 22:40:51) [GCC 4.2.1 Compatible App…

エキスパートPythonプログラミング ジェネレータ式

リスト内包表記と似た表現。 yieldを使ったシンプルなループや、イテレータのように動作するリスト内包表記は、積極的にジェネレータ式に置き換えるべきである。 iter = (x**2 for x in range (10) if x % 2 == 0) for el in iter: print (el) 実行結果 0 4 …

エキスパートPythonプログラミング コルーチン

関数の一種で、複数の箇所で実行を一時停止したり、再開したりすることが出来るなお、multitaskはPython2系でしか使えない import multitask def coroutlime_1(): for i in range(3): print 'c1' yield i def coroutlime_2(): for i in range(3): print 'c2'…

JavaScript Ninjaの極意 4 メモ化

自分が計算した値を覚えておくように関数を構築する。 <html> <head> <meta charset="utf-8"> <title>Listing 4.9</title> <script type="text/javascript" src="../scripts/assert.js"></script> <link href="../styles/assert.css" rel="stylesheet" type="text/css"> </head> <body> <script type="text/javascript"> function is…</body></html>

JavaScript Ninjaの極意 4 再帰

関数が自分自身を呼び出し、コールツリーのなかである関数が 元の連鎖を呼び出すとき、再帰が発生する再帰の条件 自己参照(自分自身を呼び出していること) 終了への収束(再帰を停止する条件が実装されていること) <html> <head> <meta charset="utf-8"> <title>Listing 4.2</title> <script type="text/javascript" src="../scripts/assert.js"></script> </meta></head></html>

JavaScript Ninjaの極意 3 スコープ

変数宣言がスコープに入るのは、それが宣言された場所から、その宣言を含む関数の終わりまでであり、ブロックのネストには関係ない 名前つき関数がスコープに入るのは、その関数が宣言された関数全体であり、ブロックのネストには関係ない。これを巻き上げと…

JavaScript Ninjaの極意 3 関数の呼び出し

関数の呼び出しかた 関数 メソッド コンストラクタ 関数のapply()またはcall() 関数のパラメータリストと、実際の引数のリストは、長さが違うことがある 引数が割り当てられないパラメータはundefinedと評価される 余分な引数があってもパラメータ名と結合さ…

エキスパートPythonプログラミング throwとclose

def my_generator(): try: yield 'something' except ValueError: yield 'dealing with the exception' finally: # closeとthrowのどちらを呼び出しても一箇所で例外をつかまえて処理する print("ok let's clean") gen = my_generator() print next(gen) # s…

JavaScript Ninjaの極意 3 関数が肝心

JavaScriptは関数がファーストクラスのオブジェクトである。 つまり関数は、ほかのすべてのJavaScriptオブジェクトと共存し、それらと同様に扱われる。 JavaScriptの、より一般的なデータ型と同じように、関数も、変数によって参照することが出来、 リテラル…

エキスパートPythonプログラミング send

14-210206.pynextと似てる。 #-*- coding:utf-8 -*-" def psychologist(): print('Please tell me your problems') while True: answer = yield if answer is not None: if answer.endswith('?'): print("Don't ask yourself too much questions") elif 'goo…

ノウアスフィアの開墾19 結論: 慣習から慣習法へ

コモンローとか法学部でも勉強しないよ バークとかコークとか読めってのかよ ロック式の土地所有権理論と似た所有権概念であることもみた。それと結びつけて、参加者が時間とエネルギーと創造性をあげてしまうことで名声を競う「贈与文化」としてハッカー文…

ノウアスフィアの開墾18 文化への順応過程とアカデミズムへの関連

評判ゲームに基づく贈与文化は、高品質の創造的作業を産み出し、(そしてチェックする!)ために協力するにあたって、世界的に最適な方法なのかもしれない。 多くのプログラマがポスト希少性時代の贈与文化で生きられるだけの冨の余剰を資本主義が作り出せるよ…

ノウアスフィアの開墾17 紛争とその解決

プロジェクト内部で役割がますます複雑になってきているので、 技術的な論争が血で血を洗うような争いになるように見えるかもしれないけど、 権威は責任に伴うというなわばりのルールによってそこそこ簡単に解決がつく。 唯一の強制メカニズムは、フレーミン…

エキスパートPythonプログラミング ジェネレータ

11-070907.pyジェネレータは複雑な処理を分解するのにも役立つ。 複数のデータ群を仕様するようなデータ変換アルゴリズムの効率が向上する。 # -*- coding: euc-jp -*-" def power(values): for value in values: print('powering %s' % value) yield value …

エキスパートPythonプログラミング 自作イテレータ

10-223836.pyイテレータそのものは、低レベルな機能と概念であるため、 イテレータを使わなくてもプログラムを作成することは可能である。 # -*- coding: euc-jp -*-" class MyIterator(object): def __init__(self, step): self.step = step def next(self)…

ノウアスフィアの開墾16 プロジェクト構造と所有権

プロジェクトの所有者 管理者が一人しかいない場合は紛争は起こらないが、 メンバーが複数人いる場合は問題が発生する。「優しい独裁者」のもとに複数の共同管理者がいるような場合 →プロジェクトの独裁者またはプロジェクトリーダはその共同開発者たちに 大…

エキスパートPythonプログラミング MRO(メソッド解決順序)

09-224022.py # -*- coding: euc-jp -*-" class Base1: pass class Base2: def method(self): print('Base2') class MyClass(Base1, Base2): pass here = MyClass() here.method() # Base2 class BaseBase: def method(self): print('BaseBase') class Base1…

ノウアスフィアの開墾15 紛争の原因

オープンソースソフトをめぐる紛争の理由 だれがプロジェクトについて決定力のある決断をくだすのか? だれがなにについて、詳細や非難を受けるのか? 二度手間をさけて、非公式版がでてバグ追跡をややこしくするのを止めるにはどうするか? 技術的に見たら、な…