読者です 読者をやめる 読者になる 読者になる

無国家社会での善悪判断と秩序構築について

善悪の基準は普遍的なものではない。自分が所属する集団によって、それが決まる。「人を殺す事」が人類共通の悪のように見えるのは、それがどの集団でも秩序も乱す事に繋がるからであって、秩序を乱すものを殺す事や、対立する集団の人を殺す事は、寧ろ善である場合も多い。

端的に言うと、善悪というものは、 集団の秩序に貢献するか、乱すか 、ということに過ぎない。

その例として象徴的なのは、少し前にあったフランスのシャルリー・エブド紙襲撃事件だ。

あれは、ムハンマドの風刺画が原因だった。その絵が、2つの集団の秩序に与える影響の差。それかが事件を引き起こした。2つの集団とは、イスラムとフランスだ。

フランス秩序の根底には、「表現の自由」というものがある。それがフランスの秩序を作り上げる一部となっている。あの絵を公表する自由を守ることが善なのだ。

対するイスラム秩序から見ると、ムハンマドはその秩序の根底にあるものだ。風刺画は秩序を大きく乱すもので、悪とみなされる。

一つの事柄について、2つの集団で正反対の見方がされる。善悪というものは、そういうものだ。

それでは、このブログのテーマの一つとしている、無国家社会では、善悪というもの基準は、どうなるのか。むしろ無いのか。

無国家社会での善悪

ここで書く無国家社会は、前の記事でも書いているような、個人がばらばらに存在し、目的ごとに動的に繋がって、アメーバのように形を変えながら最終的に消えていくような集団が無数に存在する世界を前提としている。

無国家社会のベースとなるのは、P2Pネットワークとその上に乗るブロックチェイン技術が進化したものになるはずだ。そうでなくても、人と人の繋がりの部分には、コンピュータネットワークが土台にないと不可能だ。

コンピュータネットワーク上では、「契約」(と書くと事務的な感じになってしまうので、「約束」でもよい)情報の更新とその履行が常に行われ、それが集団の活動そのものとなる。

この「契約」は、個人間や任意の集団内で行われる。そして、それを管理する存在もない。誰でも「契約」を作ることができ(契約情報はP2Pネットワーク上の公開データ、契約の実行はコンピュータプログラムとなる)、内容に何の制限もない。

ブロックチェイン技術により「契約」の改ざんは出来ないが、今日現在、多くの人が「悪」とみなす「契約」を作ったり実行したりすることを防ぐことは出来ない。例えば、麻薬を売買する契約など。

麻薬常用者が増えることは、治安悪化をもたらす。これは、多くの人間にとってデメリットとなるので、全体から見ると、悪と見なすことがてきるだろう。

「契約」の情報とコードは、デジタルデータなので、それがネットワーク上にどのように影響をもたらすかをシミュレートすることが可能だ。

ネットワークに繋がるコンピュータ(人)が、何が自分にとって害になるかを定義することができるとすると、その「契約」の実行が、ネットワーク全体の合計でどれだけの利害をもたらすかを計算することができる。

その全体の利害によって善悪を決定することができるはずだ。

つまり、 ネットワーク全体のコンセンサスで善悪を決定 するということだ。

悪いアルゴリズムを走らせている個人には、暗号通貨が(無国家社会では、単に貨幣としてではなく、コミュニケーション手段としての役割も担うと考えている)渡らないようにしたり、ネットワーク上の活動を制限したりする方法で罰することができる。

これにより、刑罰の代わりとなるものを作ることができ、秩序を作り上げることができる。

ただ、デジタルデータにし辛い事柄については、難しい。

例えば、現実世界での通り魔殺人などは、ネットワークを介さないので、どうしようもない。これについては、別の方法が必要になるだろう。

知的集約型産業に向く組織体系

IT産業などの知識集型産業は、他の業種と比べると 少ない元手 で始められるものが多い。

特に最近は、クラウドサービスがどんどん進化していて、人件費以外の費用が、より少なくて済むようになってきている。

元手はいらないが、何よりも必要になるのが、 アイディアや知識 だ。

株式会社は出資者が所有者となる。会社が生んだ利益は、出資比率の配分で分配される(配当)。

社員は会社の所有者ではなく、会社から雇用された単なる従業員だ。社員は、会社から労働の対価として給料をもらう。会社から見ると、社員への支払いは、人件費という「費用」だ。

ITなどの知識集約型産業の儲けの源泉になるのはアイディアや知識で、それを創り出すのは社員だ。

なので、社員が生み出した儲けの源泉を会社に譲渡するという形となる。その社員は、アイディアと知識を譲渡する前も後も、会社にとっては「費用」であり続ける。

そして、そのアイディアや知識が産んだ利益は、それほど必要でない資金を出した出資者へ配分される。

アイディアや知識は、「これがやりたい」という 志向 が無いと生まれない。 株式会社の目的は出資者に利益を還元すること で、その志向とは関係がない。さらにはその志向とは関係ない社員が所属している。そのため、そのアイディア等を基にして生まれる計画について、参加する社員が意欲を持てるかどうかは分からず、会社は抱えている社員に仕事を割り当てる必要があるため、そのような社員が仕事に従事することになる。その結果、その社員は、賃金を得るために労働力を提供するだけの「 労働者 」となる。

知識集約型の仕事は、何より個人の 意欲 がパフォーマンスに大きく影響する。また、その志向をさらに進める新たなアイディアも、意欲が無ければ生まれない。

株式会社は、大規模な設備を回して利益が生むような、例えば電力や鉄道のような産業に向いているもので、知識集約型産業とは相性が悪い。(IT人身売買業の上の方に位置するような企業や、研究開発型の企業には多少メリットがあるかもしれない・・・)

さらには、株式会社が最も向いている業態は、従業員が機械的に労働するようなもので、近い未来に機械で置き換えられるようなものだ。

会社には、株式会社の他に 合同会社 という形態がある。

この形態では、 社員=出資者兼従事者=所有者 という形になる。利益の配分は、出資比率により決まるわけではなく、自由に決めることができる。また、 有限責任事業組合 という形態もある。これは基本的には合同会社と同じだが、法人で無いというところが合同会社とは違う。そのため、こちらの方がより個人が前面に出てくる形態となる。

上でも書いたが、知識集約型産業でパフォーマンスを出すのに必要なのは、参加する個人の意欲だ。

存在する一般的な会社の形態では、まず組織があり、その中で目的が決まる。製品等の利益を生み出すプロジェクトは、組織の中で生まれ、そのプロセスは繰り返され、それが出来なくなった時点で消えていく。

組織に所属するメンバーは、すべてのプロジェクトに対して意欲が持てるはずもない。その目的で組織に参加しているわけではないから。

プロジェクトに対して意欲を持つメンバーを参加させるには、その プロジェクトごとに組織を作る しかない。そして、そのプロジェクトが完了することで、その組織も解散する。合同会社か有限責任事業組合ような形で、プロジェクトごとに立ち上げられるのが、形としてはベターだ。

目的があって、それに向かう方法や仕組みがあって、それに共感できる人が参加する。このブログでのテーマの一つとしている、 分散自立組織(Decentralized Autonomous Organization, DAO) の形だ。

ただ、合同会社や有言責任事業組合を立ち上げる形は、税金や費用の面でデメリットが多いので、それなりの規模があるプロジェクト単位で行うべきだろう。

Pythonで秒換算での経過時間計算

今作っているアプリで、2つのdatetime型時間データ間の経過時間を、秒で計算する必要が出てきた。

単純に引き算すれと、timedelta型の差が取得できる。
でも、timedelta型は、日数、時間、分、秒をそれぞれメンバ変数で持っていて、それを秒に換算してくれるイケてるメソッドがない。

意外とイケてないなぁ・・・・
日、時間、分をそれぞれ秒換算して計算することはできるけど、マイナス等を考慮して色々作るのは面倒臭いしなぁ・・・・
とウジウジしながら色々と試行錯誤した結果、以下のやり方が一番スッキリしているのではないかという結論に。

from datetime import datetime
import time

# エポックからの経過秒数に変換
def dt2sec(dt):
    return int(time.mktime(datetime.timetuple(dt)))

# dt2からdt1までで経過した秒数を計算
result = dt2sec(dt1) - dt2sec(dt2)

# ついでに経過分数
result2 = result // 60

もっと楽ちんなやり方があったら教えてください・・・

Pythonのbottleを使ってJSON-RPCでデータを送受信する

JavaScript畑のわたしは、Pythonの構文のカッチリさに食わず嫌いしていたのですが(JavaScript、自由度高すぎですよね・・・)、bottleフレームワークのお手軽さに一気に惹かれて、最近、Pythonばっかりになってしまいました。
辞書とか意外とJavaScriptと構文が同じだったりするし、取っ付き易いというのもありますね。。。

bottleって、現在、一番手っ取り早くアプリケーション・サーバーを作ることができる環境なのではないでしょうか。

node.jsをはじめて使ったときは、こりゃ便利だと思ったものですが、こっちの方が全然直感的に書けるし、なによりたくさん書いたときの見通しがよい。
(これはPythonのカッチリした構文に依る部分も大きいですが・・・)

で、今、スマホの側アプリを作っておりまして、そのサーバー側をこいつでやってやろうと思っています。

できるだけ画面遷移を起こさないようにXMLHttpRequestでjsonデータを送受信する形にしているので、ajax系での書き方を調べているのですが・・・・
bottleの使い方の記事自体は多くあるのですが・・・・
ajax系の情報が少ない。。。

なので、調べた内容を書いて行きたいと思います。

コード

クライアント側をこんな感じで書いているとします。
(ベタのコードを書くと面倒なので、JQueryでのコードを記載します。)

$.ajax({
    type: "POST",
    url: getUrl(url),
    data: JSON.stringify(data),
    dataType: 'json',
    contentType: "application/json",
    success: function(res){
        console.log(res);
    },
    error : function(req, stat,err) {
        console.debug('error:' + err.message);
        alert('エラーが発生しました。再読み込みを実行してください。');
    }
});

まずはライブラリをこんな感じでimportしてみます。

from bottle import post, request, HTTPResponse

クライアントはPOSTで送信をしているとします。
その場合・・・

@post(‘/path/to/call’)
def call()
    if request.is_ajax: #AJAXのデータなら
        print (JSON.stringify(request.json)) # request.jsonに辞書型で格納されている
        r = HTTPResponse(status=200, body=‘{“uho” : 1, “oho” : 2}’) #bodyにJSON形式で詰め込む
        r.set_header('Content-Type', 'application/json’)
      return r
  else:
      r = HTTPResponse(status=400)
      return r

うーん。お手軽。

MacでGoogleTestを使用しようとしたらリンクエラー

C++用のテストフレームワークとして、GoogleTestを使おうと思い、 GoogleTestのサイト(下記)の内容を信じ、SVNから最新版を落として、cmakeからmakeを実行。 https://code.google.com/p/googletest/

無事makeは通った。 出来たライブラリを実行テストモジュールにリンクしたところ、下記エラーが発生。。。

ld: warning: could not create compact unwind for __ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN7testing12TestPropertyESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predINS2_8internal17TestPropertyKeyIsEEEET_SE_SE_T0_: dwarf uses DW_CFA_GNU_args_size
ld: warning: could not create compact unwind for __ZNSt6vectorISsSaISsEEC1IPKPKcEET_S7_RKS0_: dwarf uses DW_CFA_GNU_args_size
ld: warning: could not create compact unwind for __ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN7testing8TestCaseESt6vectorIS4_SaIS4_EEEENS0_5__ops10_Iter_predINS2_8internal14TestCaseNameIsEEEET_SF_SF_T0_: dwarf uses DW_CFA_GNU_args_size
Undefined symbols for architecture x86_64:
  "testing::internal2::PrintBytesInObjectTo(unsigned char const*, unsigned long, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)", referenced from:
      testing::internal2::TypeWithoutFormatter<std::nullptr_t, (testing::internal2::TypeKind)2>::PrintValue(std::nullptr_t const&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in test.cpp.o

GoogleTestのmakefileを見ても、testing::internal2::PrintBytesInObjectToがあるソースをちゃんと含めているし、謎状態。 色々試行錯誤しても解決しないので、古い版(1.7.0)を落として同じ手順でやってみたら、うまく行きました。。。

f:id:osajiru:20150505020129j:plain

© 2009-2017 Osajiru All Rights Reserved.