他のアカウント

無料ブログはココログ

2017年3月30日 (木)

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた−番外−非暴力行動198の方法

非暴力行動198の方法

本編

ジーン・シャープ「独裁体制から民主主義へ」

非暴力不服従抵抗の方法リスト。もちろん、これらは単なる例なので、これらをヒントに更にいろいろ考えられるだろう。

非暴力不服従抵抗の原理: 独裁政権は被支配者の生き血を吸わないと生きていけない。だから、服従や協力を可能な限り拒むことで飢えさせる。

  • 非暴力は「安全に」の意味ではない。暴力は逆効果になるから非暴力を選択するだけで、リスクは当然ある。つまり「犠牲者」も出る。
  • 非暴力は「道徳的に」の意味ではない。そもそも独裁政権では法律が必ずしも正義とは限らない社会でどう抵抗するかの戦略の問題。
  • これらのやり方を闇雲にやってうまくいくわけではなく、全体計画や戦略をたて、状況に合わせて臨機応変に対応する知恵が要求される。ただ、非暴力と言ってもこれだけ沢山の方法がある、と知ることは大事。

非暴力抵抗と説得の方法

形式的声明の方法

  1. 公共の場で演説する
  2. 反対意見や支援を示す手紙を送る
  3. 組織や機関による宣言を行う
  4. 署名入りの公共声明を出す
  5. 告発や決意を宣言する
  6. グループや大衆による嘆願を出す

幅広い人々とのコミュニケーション手段

  1. スローガン、風刺画、シンボル
  2. 旗、ポスター、プラカード
  3. チラシ、パンフレット、本
  4. 新聞、刊行物
  5. レコード、ラジオ、テレビ
  6. 空中文字、地上文字

グループによる主張の方法

  1. 代表団を設置する
  2. 模擬的な賞を授与する
  3. グループによるロビー活動を行う
  4. ピケを張る(重要な場所に行って、歩きまわったり座り込んだりして、監視する)
  5. 模擬的な選挙を実施する(合法的な選挙が認められていない場合に、独自に直接選挙や訪問による票回収などの方法で違法な選挙を行う)

象徴的な公然行動の方法

  1. 旗や象徴的な色を掲げる
  2. シンボルを身に付ける
  3. 礼 や礼拝を行う
  4. 象徴的なモノを届ける
  5. 抵抗のための脱衣行動を起こす
  6. 自身の所有物を破壊する
  7. 象徴的な明かりを掲げる
  8. 肖像画を提示する
  9. 抗議のためにペンキを塗布する(肖像画や看板にいたずら描きをしたり、塗りつぶす)
  10. 新しい標識や名前を掲げる(道路や駅名などの標識を撤去したり、異なった名前をつけるなど)
  11. 象徴的な音を鳴らす
  12. 土地や領土の象徴的な返還要求行動を起こす(重要な意味を持つ土地に木を植えたり、建物をたてるなど)
  13. 無礼な身振りをする

個人に対して圧力をかける方法

  1. 役人に"つきまとう"
  2. 役人をなじる
  3. 馴れ馴れしくする(主に兵士や警察を相手に、親しげに振る舞って、こちら側の影響力を直接的、間接的に与える)
  4. 寝ずの座り込みをする

演劇と音楽

  1. ユーモラスな寸劇やいたずらを行う。
  2. 演劇や音楽会を上演する。
  3. 歌を歌う

行進を利用する方法

  1. 行進をする。
  2. パレードを行う。
  3. 宗教的な行列を実施する。
  4. 巡礼する。
  5. 車によるパレードを行う。

死者を讃える方法

  1. 政治的追悼式を催す。
  2. 模擬的な葬儀を行う。
  3. 示威的な葬儀を行う。
  4. 墓参りをする。

公の集会行動

  1. 抗議や支援の集会を開く。
  2. 抗議会合を持つ。
  3. 偽装した抗議会合を開く。
  4. 討議会を開く。

撤退と放棄の方法

  1. 退室する。
  2. 沈黙する。
  3. 勲章を放棄する。
  4. 背中を向ける。(文字通り身体的に背中を向けて沈黙する。)

社会的非協力の方法

人を排斥する方法

  1. 社会的にボイコットする。
  2. 選択的な社会的ボイコットを行う。
  3. セックス・ストライキを行う。(好戦的な夫に対して、妻たちがセックスを拒否すること)。
  4. 破門する。
  5. 聖務禁止令を出す。(宗派のトップが、特定の地区での祭事の禁止を命ずること。)

社会的行事、慣習、機関への非協力の方法

  1. 社会活動やスポーツ活動を停止する。
  2. 社会的行事をボイコットする。
  3. 学生ストライキを行う。
  4. 社会的不服従を行う。
  5. 社会的機関から脱退する。

社会制度からの撤退の方法

  1. 自宅待機する。
  2. 完全な個人的非協力を行う。
  3. 労働闘争を行う。
  4. 避難所を設ける。
  5. 集団失踪する。
  6. 抵抗の逃避行(ヒジュラ)を行う。

経済的非協力の方法:(1)経済ボイコット

消費者による行動の方法

  1. 消費者によるボイコットを起こす。
  2. ボイコット製品の非消費運動を起こす。
  3. 耐乏生活に入る。
  4. 家賃不払いを起こす。
  5. 賃貸拒否をする。
  6. 全国的消費者によるボイコットを起こす。
  7. 海外の消費者によるボイコットを起こす。

労働者や生産者による行動の方法

  1. 工員によるボイコットを起こす。
  2. 生産者によるボイコットを行う。

中継ぎによる行動の方法

  1. 原料提供者や仲買人によるボイコットを起こす。

オーナーや経営陣による行動の方法

  1. 売買業者によるボイコットを起こす。
  2. 土地の賃貸や販売を拒否する。
  3. 閉鎖する。
  4. 産業支援を拒否する。
  5. 商人による”全体ストライキ(ゼネスト)”を起こす。

財政源の所有者による行動の方法

  1. 預貯金を引き出す。
  2. 料金、会費、税金の支払いを拒否する。
  3. 負債や金利の支払いを拒否する。
  4. 財源や信用金を遮断する。
  5. 政府への支払いを拒否する。
  6. 政府紙幣を拒否する。

政府による行動(支配的な独裁権力と別に政府が存在する場合)

  1. 国内通商を禁止する。
  2. 業者をブラックリスト化する。
  3. 海外販売業者との取引を禁止する。
  4. 海外買受業者との取引を禁止する。
  5. 国際貿易を禁止する。

経済的非協力の方法:(2)ストライキ

象徴的なストライキの方法

  1. 抗議のストライキを起こす。
  2. 急に退席する(稲妻ストライキ)。

農業ストライキの方法

  1. 農民によるストライキを起こす。
  2. 農場労働者によるストライキを起こす。

特殊グループによるストライキの方法

  1. 押し付け労働を拒否する。
  2. 囚人によるストライキを起こす。
  3. 同業組合によるストライキを起こす。
  4. 専門職によるストライキを起こす。

通常の産業ストライキの方法

  1. 機関によるストライキを起こす。
  2. 業界でのストライキを起こす。
  3. 同情ストライキを起こす。(他の作業員の苦境を解決するためのストライキのこと)。

限定的ストライキの方法

  1. 細分ストライキを起こす。(職場から作業員が一人ずつ去っていく形のストライキ。)
  2. バンパー・ストライキを起こす。(ある業界の中で、会社ごとストライキに入っていく方法。)
  3. 減産ストライキを起こす。
  4. 順法ストライキを起こす。
  5. 仮病を使って休む。
  6. 辞職によるストライキを起こす。
  7. 限定的ストライキを起こす。(特定の時間帯に作業しないことで行われるストライキ。時限スト。)
  8. 選択的ストライキを起こす。(特定の作業だけを行わないストライキ。)

複合的産業ストライキ

  1. 一般的ストライキを起こす。(過半数の作業員は仕事を続けるストライキ。部分スト。)
  2. 全体ストライキ(ゼネスト)を起こす。

ストライキと経済封鎖を組み合わせた方法

  1. 同盟休業をする。
  2. 経済封鎖をする。

政治的非協力の方法

権力に対する拒絶の方法

  1. 忠誠を保留、あるいは撤回する。
  2. 公的援助を拒否する。
  3. 抗議を唱える文書公開や演説を行う。

市民による政府への非協力の方法

  1. 立法機関をボイコットする。
  2. 選挙をボイコットする。
  3. 政府による雇用や就職をボイコットする。
  4. 政府の省、機関,その他の組織をボイコットする。
  5. 政府の教育方針から退学する。
  6. 政府支援を受ける組織をボイコットする。
  7. 執行機関への協力をボイコットする。
  8. 自身の標識や表札を撤去する。
  9. 役人指名の受託を拒否する。
  10. 既存機関の解散を拒否する。

市民による服従に代わる方法

  1. 不承不承と緩慢に従う。
  2. 直接的な指示不在の下で非服従を行う。
  3. 民衆規模での非服従を行う。
  4. 偽装的な非服従を行う。
  5. 集会や会合解散を拒否する。
  6. 座り込みを行う。
  7. 徴兵や国外追放に対して非協力になる。
  8. 潜伏や逃避をし、偽りの身分を名乗る。
  9. "非合法的"な法律に対して市民的不服従を起こす。

政府職員による行動の方法

  1. 政府職員による支援を選択的に拒否する。
  2. 指令や情報系統を遮断する。
  3. 足止めや障害を起こす。
  4. 事務業務全体での非協力を起こす。
  5. 司法関係者による非協力を起こす。
  6. 警察関係者による意図的非効率と選択的非協力を起こす。
  7. 上官に対する暴動を起こす。

政府による国内行動の方法

  1. 擬似合法的な回避や遅延を起こす。
  2. 地方政府による非協力を起こす。

他国の政府による行動の方法

  1. 外交や他の代表を変更する。
  2. 外交行事を遅延する、あるいは取り止める。
  3. 外交交渉を保留する。
  4. 外交関係を断絶する。
  5. 国際機関から脱退する。
  6. 国際機関への入会を拒否する。
  7. 国際機関からの除名を受ける。

非暴力的介入の方法

心理的介入の方法

  1. 自らをその要素に晒す。(火や灼熱の太陽など、身体的、心理的に極限状態に陥るような状況に身を置くこと。)
  2. 断食する。
    1. 道徳的圧力をかけるための断食。
    2. ハンガー・ストライキ。
    3. サティーヤグラハ的(非暴力行動としての)断食。
  3. 逆提訴する。
  4. 非暴力的ないやがらせをする。

物理的介入

  1. 座り込みを行う。
  2. 立ち尽くしをする。
  3. 無許可乗車をする。
  4. 無許可の水中侵入をする。(入場が禁止されている海や池に入る。)
  5. 歩き回りをする。
  6. 無許可で祈祷をする。
  7. 非暴力的急襲をかける。
  8. 非暴力的空襲をかける。
  9. 非暴力的侵入をする。
  10. 非暴力的な介入を行う。
  11. 非暴力的な妨害をする。
  12. 非暴力的な占拠をする。

社会的介入

  1. 新しい社会的パターンを構築する。
  2. 機関の作業を過剰負担にする。
  3. 業務を停滞させる。
  4. 集会で介入演説をする。
  5. ゲリラ演劇を上演する。
  6. 別の社会的機関をつくる。
  7. 別の通信システムをつくる。

経済的介入の方法

  1. 逆ストライキを起こす。(必要以上に働いて、従業時間や生産量をオーバーさせること。)
  2. 居座りストライキをする。(職場には来るが、作業は行わないストライキ。目的が達成されるまで続けられる。)
  3. 非暴力的に土地の差し押さえをする。
  4. 封鎖を無視する。
  5. 政治的動機による偽造を行う。
  6. 妨害的な買い占めを行う。
  7. 資産を差し押さえる。
  8. 投げ売りをする。
  9. 選択的に後援する。
  10. 別の市場をつくる。
  11. 別の交通システムをつくる。
  12. 別の経済機関をつくる。

政治的介入の方法

  1. 行政機関を過剰負担にする。
  2. 秘密警察の身分を暴く。
  3. 拘束を求める。
  4. "中立的"法律への市民的な不服従を行う。(独裁政権が提示する一見中立に見える法律を受け入れないこと。)
  5. 非協力の下に仕事を続行する。
  6. 二重統治や並行政府を打ち立てる。

2017年3月27日 (月)

c++ でconst修飾をしても非constメンバ関数を呼べるトリッククラス。思いつき

c++ のstd::string は、constメンバ関数では本体の文字列が変更されることはない、という仕様がある。
このために、 const std::string では文字列の中身が変更されることはない。
まあ、c++にはmutable とか const_cast とかあるけれども。

そこで、ちょっと思いつきがあって、std::stringにちょっとだけ仕掛けをした拡張クラスを作ってみたら、const修飾してもstd::stringの非constメンバ関数を呼び出せてしまった。(もちろん、std::stringの拡張クラスでできた、というだけで const std::string が文字列を変えないことには違いない)。

ソース:
----

#include <iostream>
#include <string>

class mystring : public std::string{
private:
mystring* const pseudothis_ = this;
public:
mystring* pseudothis() const {return pseudothis_;}
};

int main(){
const mystring str;
std::cout << "str=" << str << std::endl;
str.pseudothis()->append("abc");
std::cout << "str=" << str << std::endl;
*(str.pseudothis()) += "def";
std::cout << "str=" << str << std::endl;
return 0;
}

----

実行結果
----

str=
str=abc
str=abcdef

----

手抜きクラスなので、自動生成された(空文字列で初期化の)デフォルトコンストラクタしかないが、const 修飾されてもstd::stringの非メンバ関数を呼び出せるため文字列の変更ができる。

しかし、ちょっと待て。これはstd::string の拡張クラスでなくても pseudo_ メンバ(とそのゲッター)のあるクラスを作れば、const修飾しても非constメンバ関数を呼び出せるクラスになるのではないか? c++の言語仕様でこのことが「保障」されるかどうかは断言できないが、かなり普遍性のあるトリックになりそうだ。
(もちろん、 class T {....} の中で T* const pseudothis _= this; というメンバを作るわけだ。)

2016年12月10日 (土)

法学ド素人が自民党憲法改正草案に駄目出しする-その前に

自民党は憲法改正をすると言う。

 

自民党憲法改正草案をそのまま現行憲法に置き換えるとは言っていない。が、草案を撤回もしていない。

 

今年の参院選で改憲推進派が2/3を取ったということは、国民は改憲を認めたことになる。

 

で、まず、自民党はどうやら憲法を「序文から何から全部書き換える」つもりのようだ。

 

これを「おかしい」と思わないだろうか?

 

他の国は改憲を何度もやってるのに日本は改憲をしてないから、などという理由で改憲を考えるってのもおかしいが、戦後70年改憲していなかった日本が、国の根幹の憲法を全面書き直しなどしたら、

 

どう考えても、日本は大混乱するだろう?

 

すべての法律は憲法と密接な関係にあるし、裁判所の裁判の仕方、その他、あらゆる制度、機関も大影響を受ける。

安全保障環境が変わったから? つまり外敵が考えられ、日本がこのままでは危険だから?

本当に危険があるなら、憲法全面改定などして日本が混乱したら、それこそその隙を突かれて日本はやられてしまう。当然、改憲なしで何とかするとか、改憲が必要だったとしても必要最小限度にしなければいけない。愚策もいいところだ。

それに、国民に相談もなしに政府が全面改正の憲法改正案を出してきたのに、国民の多くが内容を録に確かめもせずに「おまかせ」でやらせる、というのは民主主義国では到底考えられない話だ。

何のために憲法があるのか?が分かっていないということだ。

憲法って、公権力から国民の人権を守るために公権力を縛るものですよ? あなたの人権危ないよ?

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた(6) 独裁政権にも弱みがある

| 次>

ジーン・シャープ「独裁体制から民主主義へ」

第4章 独裁政権にも弱みがある

独裁政権は普通不死身に見えるものだ。対して、民主化勢力はあまりにか弱く見える。

しかし、独裁政権にもアキレス腱がある。

アキレス腱はどこか

アキレスの物語は非人道的な独裁政権にも当てはまる。打倒も可能だが、それは体制の弱点が洗い出され、そこを集中的に攻撃した場合。

独裁政権の弱み

  1. 体制を運営するのに必要な民衆やグループ、機関による協力が、少なくなったり、なくなったりすることがある
  2. 政権が過去の政策で決めたことが、それと相反する現政策を採択し実践する能力を多少なりとも制限してしまうことがある。
  3. 体制運営がルーティーン化し、新しい状況に迅速に対応できなくなることがある。
  4. 既存の任務に配置されている人員や資源が、新しい目的のためには簡単に利用できないことがある。
  5. 上司の機嫌を損ねるのを怖れる部下が、独裁者が決断を下すのに必要な情報を曲げて報告する、またはまったく報告しないことがある。
  6. イデオロギーが損なわれ、体制の神秘性や象徴性が不安定になることがある。
  7. 現実への視点をゆがめる程の強いイデオロギーがある場合、それに執着しすぎて、実際の状況や必要性へ十分な注意が行き届かないことがある。
  8. 官僚組織の効率性や能力が低下したり、過剰な管理や規制があると、体制の政策や運営から効率を奪うかもしれない。
  9. 機関内部での争いや個人間の競争や敵対が、独裁政権の運営に害を与え、分裂させることがある。
  10. 知識人や学生が、現状や制約、教条、抑圧に対して不満を持つようになることがある。
  11. 一般民衆が、時がたつにつれ、政権に対して無関心になったり懐疑的になったり、あるいは敵意を持つことがある。
  12. 地域間、階級間、文化間、あるいは国家間の違いが深刻になることがある。
  13. 独裁政権内の権力ヒエアルキーは、常に幾分不安定だが、ときにそれが顕著になることがある
  14. れっきとした独裁者の意に反することでも、警察や軍の一部が自らの目的のためにクーデターを含む行動を起こすことがある。
  15. 確立直後の独裁政権の場合は、安定するまで時間がかかる。
  16. 独裁体制においては、意思決定にかかわるのが小数なため、判断や政策、行動において間違えやすい。
  17. 上の危険を防ごうと、政権が管理と意思決定を分散させれば、中央集権化された力のテコがさらに弱体化することがある。

独裁政権の弱みを攻撃する

ヒトラーの命令さえ、時には無視された

とはいえ、リスクや犠牲なしに打倒できるわけではない。

それでも、相手の弱点に集中すれば成功の可能性は高まる。

| 次>

2016年11月19日 (土)

C++ でのconst性ってどこまで保証されてる?

大昔C言語を少しかじったことがある。

C++は自分でメモリ管理をするのはちょっときついと、勉強しなかった。ただし、CとC++の非互換性の部分はチェックしたが。

今でも、特にC++でプログラムする必要はないのだが、教養として少しずつ勉強をしている(かたつむりのように鈍く)。

C++ では const はとても大事だ。
しかし、const宣言では何が保証されるのだろうか?

この疑問はスマートポインタの一種のshard_ptr の動きから生まれた。

クラスの中で

const std::shared_ptr<T> p;

と「定数」pをつくっても、p.use_count() の値は変化しえる。というか変化できないと困る。

long getUseCount() const { return p.use_count();}

というconstメンバ関数を作ることはできるが、この値は変化し得るわけだ。
これは大丈夫なのか?といろいろ検索した結果、constメンバ関数が保証するのは const *this である、と覚えればいいと分かった。
つまり、クラスの中の変数の変化がないだけであって、ポインタ変数の参照先は書き換えることができる。(またstatic変数も書き換えてよい)。

shard_ptr も参照カウンタはおそらくポインタを使って共有されているから書き換え可能で問題はない。use_count() は変化してよい。これで納得。

・・・が、それは本当か? 例えば、const 参照引数されたクラスのインスタンスで非スタティック/非ポインター・メンバー変数が書き換えられたりしないのか?mutable とか const_cast など使わずに。

ちょいと実験してみた。

Foo.h
----------------

#ifndef FOO_H_
#define FOO_H_

// コピーコンストラクタの引数のconst性を破壊できるか?をテストするクラス。
class Foo{
private:
int counter_ = 0; //コピー・ムーブの元の場合、自分がコピーされた回数を数える
// つもりで最初は設定した。
// しかし、コピー・ムーブの仕方によってはリセットされるなどがあり得るので
// この変数が正確には何を数えているのか作者にもよく分からない。

int* pcounter_ = &counter_;
// 初期状態ではcounter_の位置。書き換えられ得るので注意


public:
Foo(){}
Foo( const Foo& f){
counter_ = f.counter_;

pcounter_ = f.pcounter_;
// this->pcounter_ は f.pcountrのコピーなので
// this->counter_ を参照しない。
// f.pcounter_ も書き換えられてる可能性があるので静的にpcounter_の参照先は決定できない
// *this が生きているうちにfの寿命が尽きたりなどすると簡単にダングリングポインタに
// なるので非常に危険

++*pcounter_;
// f.pcounter_ が f.counter_ を参照している場合はf.counter_ を1増加させる。
// int 型の f.counter_ を書き換えるとするとconst性を壊す可能性がある。
// そうでない場合も、どれかのFooインスタンスのcouter_変数を増加させる。
// ただし、pcounter_ がダングリングポインタになってる場合は何が起きるか分からない。
// 以下のムーブコンストラクタや=のオーバーロードなどでも同じ問題がある。
}
Foo( Foo&& f){
// ちょっとムーブっぽく、f.pcounter_ が消えても大丈夫なようにしておく。大した意味はない。
counter_ = *f.pcounter_;
f.pcounter_ = nullptr;
pcounter_ = &counter_;
++counter_;
}
Foo& operator=(const Foo& f){
counter_ = f.counter_;
pcounter_  = f.pcounter_;
++*pcounter_;
return *this;
}
Foo operator=(Foo&& f){
// ちょっとムーブっぽく、f.pcunter_ が消えても大丈夫なようにしておく。大した意味はない。
counter_ = *f.pcounter_;
f.pcounter_ = nullptr;
pcounter_ = &counter_;
++*pcounter_;
return *this;
}
virtual ~Foo(){}

// ゲッターメソッド
const int& counter() const {return counter_;}
int deref_pcounter() const {return *pcounter_;}

};

#endif // FOO_H_

--------

pcounter_ ポインタメンバ変数がメンバ変数 counter_ を参照している。こういうことをするといろいろ危険である。

テスト・プログラム

Foo.cpp
----------------

#include <iostream>

#include "foo.h"

Foo idFoo( Foo x){ return x;}

int main(){
Foo a;
std::cout << "Foo a;" << std::endl;
std::cout << "a.counter()="<< a.counter() << std::endl;
std::cout << "a.deref_pcounter()="<< a.deref_pcounter() << std::endl;

Foo b = a; // 初期化
std::cout << std::endl << "Foo b = a;" <<std::endl;
std::cout << "a.counter()=" << a.counter() << std::endl;
std::cout << "a.deref_pcounter()="<< a.deref_pcounter() << std::endl;
std::cout << "b.counter()=" << b.counter() << std::endl;
std::cout << "b.deref_pcounter()="<< b.deref_pcounter() << std::endl;

Foo c;
c = b; // 代入
std::cout << std::endl << "Foo c; c=b;" << std::endl;
std::cout << "a.counter()=" << a.counter() << std::endl;
std::cout << "a.deref_pcounter()="<< a.deref_pcounter() << std::endl;
std::cout << "b.counter()=" << b.counter() << std::endl;
std::cout << "b.deref_pcounter()="<< b.deref_pcounter() << std::endl;
std::cout << "c.counter()=" << c.counter() << std::endl;
std::cout << "c.deref_pcounter()="<< c.deref_pcounter() << std::endl;

Foo d;
c = a; // c の書き換え
a = d; // a の書き換え
std::cout << std::endl << "Foo d;c = a; a = d;" << std::endl;
std::cout << "a.counter()=" << a.counter() << std::endl;
std::cout << "a.deref_pcounter()="<< a.deref_pcounter() << std::endl;
std::cout << "b.counter()=" << b.counter() << std::endl;
std::cout << "b.deref_pcounter()="<< b.deref_pcounter() << std::endl;
std::cout << "c.counter()=" << c.counter() << std::endl;
std::cout << "c.deref_pcounter()="<< c.deref_pcounter() << std::endl;
std::cout << "d.counter()=" << d.counter() << std::endl;
std::cout << "d.deref_pcounter()="<< d.deref_pcounter() << std::endl;

Foo e = idFoo(a);
std::cout << std::endl << "Foo e = idFoo(a);" << std::endl;
std::cout << "a.counter()=" << a.counter() << std::endl;
std::cout << "a.deref_pcounter()="<< a.deref_pcounter() << std::endl;
std::cout << "e.counter()=" << e.counter() << std::endl;
std::cout << "e.deref_pcounter()="<< e.deref_pcounter() << std::endl;



return 0;
}

--------

実行結果:

--------
Foo a;
a.counter()=0
a.deref_pcounter()=0

Foo b = a;
a.counter()=1
a.deref_pcounter()=1
b.counter()=0
b.deref_pcounter()=1

Foo c; c=b;
a.counter()=2
a.deref_pcounter()=2
b.counter()=0
b.deref_pcounter()=2
c.counter()=0
c.deref_pcounter()=2

Foo d;c = a; a = d;
a.counter()=0
a.deref_pcounter()=1
b.counter()=0
b.deref_pcounter()=0
c.counter()=2
c.deref_pcounter()=0
d.counter()=1
d.deref_pcounter()=1

Foo e = idFoo(a);
a.counter()=0
a.deref_pcounter()=2
e.counter()=3
e.deref_pcounter()=3
--------

わけの分からない結果が出たが、どうやらFooクラスのインスタンスの int型変数 counter_ はコピーコンストラクタのコピー元で const が付いていても変化するようだ。

idFoo() 関数は値渡しなので、コピー回数が増えたようだ。

・・・まあ、C++もC言語の流れを汲んでるから、仕方ないな。

追記: ムーブコンストラクタ等、少々書き換えました。ダングリングポインタが出る可能性は全然なくなってませんが。

追記2: C++に詳しい人々に聞いたら、単に未定義動作をするプログラムを作っただけ、というだけの話のようです。

2016年10月13日 (木)

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた(5) 交渉の危険

|

ジーン・シャープ「独裁体制から民主主義へ」

第2章 交渉に潜む危険性

考察

ぶっちゃけ、独裁政権と交渉しようなどという期待は持たないことだな!

せいぜい、独裁者が「海外逃亡まで命を取らないでくれ」と言ったときぐらいに考慮する話ってことだ。

独裁政権は強大だから、と受け身になって「妥協」「調停」「交渉」に希望を持つ人々はどうしても出る。

「分別をもって話し合ったら?」「独裁者にも人間性を理解する感覚はあるだろう」「独裁者がよかれと思ってしたことを勘違いしたのでは?」「独裁者にとっても利益のある提案をしたらどうだ?」「「他に選択肢はない」などなど。

何故、独裁体制に闘争を挑むなどということをしなければならないのか?

交渉することの長所と短所

交渉が有効な場合:「妥協」があって良い場合。賃金値上げのためのストライキなどでは双方歩み寄りのための交渉は大変重要な手段。

交渉によって満足な解決策が得られない場合:宗教的原理、人間の自由、未来永劫にわたる社会的発展などの根源的・基本的な問題の場合(「妥協」があってはならない場合)。

このような基本的問題をまともに採り上げられるのは、民主化勢力側に力がシフトしたときだけ。このシフトを起こせるのは交渉ではなく闘争。

交渉すべきではない、という意味ではなく、強い反体制側の民主化勢力が欠落している状況では独裁政権を追放する手段として交渉は現実的ではない

交渉不可能な場合もある: 独裁者側が拒む、交渉開始後に民主化勢力のリーダーが行方不明になる、等。

降伏は交渉によって得られるか?

長年の闘いでも解決がつかなかったり、味方の被害が大きすぎるなど、どうしても民主化勢力内では交渉を試みる強い誘惑が出るものである。

独裁政権側が交渉の場で「平和」を提供しようと言い出すときは、もちろん不誠実なもの!

独裁者は反体制側が闘争をやめれば自分たちの暴力を止めると言うだろう。「和解」を装って民主化勢力を交渉によって降参させようとするだろう。

これらは魅力的だが、非常な危険がある

また、反体制側が例外的に強力の場合、独裁政権側が自分を守ろうと交渉を求めることもある。しかし、どの場合でも独裁者側の目的遂行には断固手を貸してはならない!

政治的自由の闘争で「交渉」が呼びかけられた場合、そこにはが待ち受けていることを決して忘れてはならない。

独裁政権側が交渉を言うのは、民主化勢力を手懐けて降伏を引き出し、非人道的な行為を続ける企みである。

こういう問題で交渉が役に立つのは、せいぜい、果敢な闘争が終わり、独裁者が完全に弱体化して海外逃亡するときに、空港まで個人的安全を求めるときぐらいのもの。

交渉における力と正義

「交渉」というものはどんなものか、明確に思考しなければならない。

交渉とは、双方が平等という前提の元に、同じテーブルについて対立を産んだ互いの相違点を解決するものではない

  • 交渉で到達する最終合意は、双方の意見を照らしあわせた上での公正さから来るものではない
  • 交渉で得られる合意は、双方の力関係に大きく左右される。

交渉で相手が合意しなかった場合どうするか? また、交渉の合意の約束を相手が破った場合どうするか? 相手が力づくで約束と違うことを押し付けた場合は?

交渉における和解は、何が正しくて何が間違っているか?で決まるものではない。双方の絶対的、相対的な力関係をどう評価するかで決まる。

また、交渉による歩み寄りに際しては、双方が何を放棄する気があるのか、も考えんければならない。

しかし、極端な独裁政権下の民衆が歩み寄れるもの、放棄できるものはあるか?

仮に交渉でもっとうまく合意が得られたとしても、その結果の平和はいったいどんなものか?それは闘争を始めたときよりましになっているか、悪化するか?

「合意を取り繕う」独裁者たち

独裁者の欲しいものは様々だが、彼らが統治をあきらめたら彼らの欲しいものは残らない。従って、絶対に統治の手をわずかでも緩めようとする筈がない。

つまり、交渉の場で独裁者が何を約束しようとも、降伏を引き寄せた後、独裁者は約束をあっさり破る!

民主化勢力が、一時的に抑圧を弱めてもらうかわりに抵抗運動を中止する、と決めた場合、約束は守られない。抵抗運動を中止して抑圧が止むことはない! むしろ一掃弾圧を過酷なものにしさえする。

根源的な問題が争点となっている場合は、変化は和解交渉ではなく抵抗によってもたらされる。

独裁者を追放するためには、抵抗を必ず継続しなければならない

成功のためには、和解交渉ではなく、どれだけ強い抵抗手段を賢く使いこなせるか?にかかっている。

自由のために闘う方法では、政治的、および非暴力闘争がもっとも強力な方法である、というのがこの本の主題である。

どんな平和か?

民主化勢力と独裁政権が「平和」について話し合うときは、明瞭な思考が必要となる。非常な危険があるからだ。

民主化勢力の考える平和と独裁者が言う平和は違う。

ヒトラーも「平和」をたびたび口にしたが、その言葉の意味は、彼の望むことに人々を降伏させることだった。独裁者の言う平和は、大抵牢獄や墓場での平和にすぎない。

それ以外の危険: よい意図で交渉を始めたとして、プロセスが混乱して、ひょんなことから独裁者に国内外での「合法性」を与えてしまうことがある。独裁者は合法性を切望する。独裁者に合法性は決して与えてはならない

希望がある理由

民主化闘争に希望を失って交渉を選ぶしかない、とあきらめる気になることはあることだが、あきらめる必要はない。

民衆が弱いままでいる必要はない。独裁政権も脆弱なものであり、弱点を拡大することは可能。

また、独裁体制が非暴力抵抗によって比較的短期間で崩壊することもよくある。

暴力的方法がはやく、非暴力的方法が遅い、という規則はない。

平和と自由を獲得するには、政治的抵抗という方法がある。

|

2016年8月13日 (土)

ある「プロ」の書いた、初心者向けc言語入門プログラム

昔、ある所で、「俺はc言語が得意」と言っているプロ(既に、プログラマーではなく、プロジェクト管理とかやっている人らしい)が、プログラム初めての初心者向けに書いたサンプルソースを見て、目が点になったことがある。
初心者向けとは見えないし、このプロ氏は仕事でどんなプログラムを作っているのか怖くなった。

sample.h
------------

/** 2重インクルード防止を付けて欲しい **/

// ローマ字カナ変換処理
int Romaji2Kana(
char *Src,
char *Buff
);
// 半角文字列大文字変換処理
void Str2Upper(
char *Buff
);
// 改行コード削除処理
void RemoveCRLF(
char *Buff
);

sample.cpp
---------------

/************************************************************************************
* 「C言語が得意」というプロ氏の書いた「プログラム未経験の初心者用ソース。           *
* 若干の書き換えはあるが、ほとんどそのまま。                                        *
* 「//」形式のコメントは、プロ氏の書いたコメント。「/*」形式のコメントはブログ      *
* 主のコメント。                                                                 *
*                                                                                   *
* ファイル名は書き換えてあるが拡張子がcppとなっているのはそのまま。                 *
* マイクロソフト Visual Studio の Visual C++ では、                                 *
* ソースファイル名の拡張子を省略した場合、C++の拡張子である「.cpp」が               *
* 付けられてしまう。                                                                *
* つまり、C言語プログラムのつもりでもC++としてコンパイルされる。                    *
* 「C++はCの上位互換」という迷信があるが、CとC++ は非互換なので                     *
* Visual C++ で純粋なC言語ソースを書きたい場合はソースファイル名には                *   
* 拡張子「.c」を明示するべき。                                                      *
* 私「gccの場合だと・・・」と言い出したら、プロ氏は「gccの話なら別の機会にしてくれ」*
* とキレた。もしかして、Windows PC上でgcc環境の構築ができないのか?                 *
*************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <memory.h>

// オリジナルヘッダ定義
#include "sample.h"

/* C++としてコンパイルされるわけだし、constがあった方がいいと思う */
//  ローマ字変換テーブル(グローバル変数)
char        *RMojiTbl[ 175 ][ 2 ] = {
    //  あ行
    {"A", "ア" },    {"I", "イ" },    {"U", "ウ" },    {"E", "エ" },    {"O", "オ" },
    //  か行
    {"KA", "カ" },   {"KI", "キ" },   {"KU", "ク" },   {"KE", "ケ" },   {"KO", "コ" },
    {"KYA", "キヤ" }, {"KYI", "キイ" }, {"KYU", "キユ" }, {"KYE", "キエ" }, {"KYO", "キヨ" },
    //  さ行
    {"SA", "サ" },   {"SHI", "シ" },  {"SU", "ス" },   {"SE", "セ" },   {"SO", "ソ" },
    {"ZI", "ジ" },  {"SI", "シ" },   {"JYO", "ジヨ" },    {"KEN", "ケン" }, {"OH", "オウ" },
    {"SHA", "シヤ" }, {"SYI", "シイ" }, {"SHU", "シユ" }, {"SHE", "シエ" }, {"SHO", "シヨ" },
    //  た行
    {"TA", "タ" },   {"CHI", "チ" },  {"TSU", "ツ" },  {"TE", "テ" },   {"TO", "ト" },
    {"CHA", "チヤ" }, {"CYI", "チイ" }, {"CHU", "チユ" }, {"CHE", "チエ" }, {"CHO", "チヨ" },
    {"TOH", "トウ" }, {"TI", "チ" },   {"TU", "ツ" },   {"TTO", "ツト" }, {"TYO", "チヨ" },
    {"THA", "チヤ" }, {"THI", "チイ" }, {"THU", "チユ" }, {"THE", "チエ" }, {"THO", "チヨ" },
    //  な行
    {"NA", "ナ" },   {"NI", "ニ" },   {"NU", "ヌ" },   {"NE", "ネ" },   {"NO", "ノ" },
    {"NYA", "ニヤ" }, {"NYI", "ニイ" }, {"NYU", "ニユ" }, {"NYE", "ニエ" }, {"NYO", "ニヨ" },
    //  は行
    {"HA", "ハ" },   {"HI", "ヒ" },   {"FU", "フ" },   {"HE", "ヘ" },   {"HO", "ホ" },
    {"HYA", "ヒヤ" }, {"HYI", "ヒイ" }, {"HYU", "ヒユ" }, {"HYE", "ヒエ" }, {"HYO", "ヒヨ" },
    {"FA", "フア" },  {"FI", "フイ" },  {"FE", "フエ" },  {"FO", "フオ" },  {"SYU", "シュ" },
    {"FYA", "フア" }, {"FYU", "フユ" }, {"FYO", "フヨ" }, {"HU", "フ" },   {"DUMMY", "DUMMY" },
    //  ま行
    {"MA", "マ" },   {"MI", "ミ" },   {"MU", "ム" },   {"ME", "メ" },   {"MO", "モ" },
    {"MYA", "ミヤ" }, {"MYI", "ミイ" }, {"MYU", "ミユ" }, {"MYE", "ミエ" }, {"MYO", "ミヨ" },
    //  や行
    {"YA", "ヤ" },   {"YU", "ユ" },   {"YO", "ヨ" },   {"DUMMY", "DUMMY" },    {"DUMMY", "DUMMY" },
    //  ら行
    {"RA", "ラ" },   {"RI", "リ" },   {"RU", "ル" },   {"RE", "レ" },   {"RO", "ロ" },
    {"RYA", "リヤ" }, {"RYI", "リイ" }, {"RYU", "リユ" }, {"RYE", "リエ" }, {"RYO", "リヨ" },
    //  わ行
    {"WA", "ワ" },   {"WI", "ウイ" },  {"WE", "ウエ" },  {"WO", "ヲ" },   {"DUMMY", "DUMMY" },
    //  ん行
    {"NN", "ン" },   {"DUMMY", "DUMMY" },    {"DUMMY", "DUMMY" },    {"DUMMY", "DUMMY" },    {"DUMMY", "DUMMY" },
    //  が行
    {"GA", "ガ" },  {"GI", "ギ" },  {"GU", "グ" },  {"GE", "ゲ" },  {"GO", "ゴ" },
    {"GYA", "ギヤ" },    {"GYI", "ギイ" },    {"GYU", "ギユ" },    {"GYE", "ギエ" },    {"GYO", "ギヨ" },
    //  ざ行
    {"ZA", "ザ" },  {"JI", "ジ" },  {"ZU", "ズ" },  {"ZE", "ゼ" },  {"ZO", "ゾ" },
    {"JA", "ジヤ" }, {"JYI", "ジイ" },    {"JU", "ジユ" }, {"JE", "ジエ" }, {"JO", "ジヨ" },
    //  だ行
    {"DA", "ダ" },  {"DI", "ヂ" },  {"DU", "ヅ" },  {"DE", "デ" },  {"DO", "ド" },
    {"DYA", "ヂヤ" },    {"DYI", "ヂイ" },    {"DYU", "ヂユ" },    {"DYE", "ヂエ" },    {"DYO", "ヂヨ" },
    {"DHA", "デヤ" },    {"DHI", "デイ" },    {"DHU", "デユ" },    {"DHE", "デエ" },    {"DHO", "デヨ" },
    //  ば行
    {"BA", "バ" },  {"BI", "ビ" },  {"BU", "ブ" },  {"BE", "ベ" },  {"BO", "ボ" },
    {"BYA", "ビヤ" },    {"BYI", "ビイ" },    {"BYU", "ビユ" },    {"BYE", "ビエ" },    {"BYO", "ビヨ" },
    //  ぱ行
    {"PA", "パ" },  {"PI", "ピ" },  {"PU", "プ" },  {"PE", "ペ" },  {"PO", "ポ" },
    {"PYA", "ピヤ" },    {"PYI", "ピイ" },    {"PYU", "ピユ" },    {"PYE", "ピエ" },    {"PYO", "ピヨ" },
    //  ヴ行
    {"VA", "ヴア" }, {"VI", "ヴイ" }, {"VU", "ビユ" }, {"VE", "ヴエ" }, {"VO", "ヴオ" }

};
/* 私だったら、最後に番兵を置いて、項目の数は計算機に計算させたいところだが、
気にしないことにする。
でも、半角カタカナは文字化け問題とかあるので使わないで欲しかった */


/***********************************************************************
* 配列の添字などの型には何故か unsigned long をプロ氏は使う            *
* プロ氏の環境ではそれがいいのかもしれないが、size_t とか              *
* 使った方が可搬性と可読性が増すと思う。                               *
* プロ氏は仕事でもこのようなプログラムを書いているのだろうか?         *
* というか、まったくの初心者向きなのだから、int を使う方がいいと思う   *
************************************************************************/
// ローマ字テーブルのデータ数(グローバル変数)
unsigned long RMojiTblMax = 35 * 5;

// ローマ字変換処理(今回は引数は使用しません)
int main(int argc, char* argv[])
{
/* 80 というマジックナンバーはマクロにした方がいいと思う */
char Buff[ 80 ]; // ローマ字変換結果格納メモリ
char work[ 80 ]; // ローマ字格納メモリ

/****************************************************************************
* プロ氏は「繰り返し」はすべて while(1){ ・・・ } 無限ループを使い、  *
* break; 等で脱出する。確かにこれひとつ覚えておけば繰り返しは全部     *
* 書けるが、for文とかwhile(条件)・・・ とかを覚えさせる方がいいと     *
* 思う。                                                              *
* というか、プロ氏は仕事でもこのスタイルで書いているのか?            *
* 「プロの世界ではコーディングルールというものがあって」云々言って    *
* いたが、どんなコーディングルールを使ってるのだろう?                *
*****************************************************************************/
// ローマ字入力をカナに変換する
// exitで終了
while( 1 )
{
memset( work, 0x00, sizeof( work ) );
memset( Buff, 0x00, sizeof( Buff ) );
// 文字列を取得する
printf( "ローマ字入力 : " );
fgets( work, sizeof( work ), stdin );
// 改行コードの除去
RemoveCRLF( work );
// 半角文字を全て大文字に変換する
Str2Upper( work );
// exitを入力すると処理終了
/***************************************************************
* strncmpのサイズを表す引数が4だと、EXITで始まる         *
* 長い文字列が入力されても終了する。5の方がいいかも      *
* しれない。片方がリテラルの場合はstrcmpを使う手もある。 *
***************************************************************/
if( !strncmp( work, "EXIT", 4 ) ){
break;
}
// ローマ字変換を行う
Romaji2Kana( work, Buff );
// 変換結果を表示する
printf( "ローマ字 : %s\nカナ変換後 : %s\n", work, Buff );

}
return 0;
}
// 改行コードの除去
void RemoveCRLF(
char *Buff
){
/***********************************************************************
* プロ氏は、文字列終端の'\0'もNULLマクロを使用している。         *
* 彼は「NULL はヌルポインタとヌル文字の2つの意味で使うのが      *
* デファクトスタンダードだ」と述べたが、本来NULLは null pointer  *
* constant を表すマクロである。                                  *
* このプログラムはC++としてコンパイルされるため NULL は 0 に     *
* 展開されるが、VisualStudio VC++では、純粋なc言語のソース      *
* を書きたい場合はソースファイル名に拡張子「.c」を明記するべき。 *
* 「.c」を付けてコンパイルすると NULL は ((void *)0) に展開      *
* されるので警告が出る。CとC++の非互換性のひとつである。         *
************************************************************************/

char *p = NULL;
/************************************************************************
* プロ氏は「(初心者にはわかりにくいだろうが)strchr関数は        *
* バッファサイズを指定する引数がないので使うべきではないのだ」    *
* と memchr 関数を使っているが、肝心のバッファサイズを取得する    *
* のに strlen 関数を使っている。これではバッファオーバーランの    *
* 虚弱性を解消したことにはならない。それを指摘したらプロ氏は      *
* 「fgets関数で取得した文字列は必ず終端がヌル文字になること       *
* が保証されている」と・・・それを仮定するならstrchrでかまわない。*
* 読みづらくなったのに虚弱性は解消されていない。また、虚弱性を    *
* 解消したつもりになっているのがかえって危険である。              *
*************************************************************************/
// 文字列からキャリッジリターンがないか?
p = (char *)memchr( Buff, '\r', strlen( Buff ) );
if( p != NULL ){
// あればNULLをセットする
*p = NULL; /* '\0' であるべき */
}
// 文字列から改行コードがないか?
p = (char *)memchr( Buff, '\n', strlen( Buff ) );
if( p != NULL ){
// あればNULLをセットする
*p = NULL; /* '\0' であるべき */
}

}
// ローマ字からカナに変換
int Romaji2Kana(
char *Src, // 変換する文字列
char *Buff // 変換結果を格納するメモリ
){
char work[ 3 + 1 ];
unsigned long Count = 0;
unsigned long Count2 = 0;

// 変換する文字列がない場合
if( strlen( Src ) <= 0 ){
// 何も処理しませんよ
return( -1 );
}
memset( work, 0, sizeof( work ) );
// 3文字分処理する
while( 1 )
{
// 3文字処理しても変換できない場合は処理終了
if( Count >= 3 ){
break;
}
work[ Count ] = Src[ Count ];
Count2 = 0;
// ローマ字テーブル分と一致するか検査するまで繰り返す
while( 1 ){
if( Count2 >= RMojiTblMax ){
break;
}
/**************************************************************
* だから、strlenでサイズを取得するならstrncmpのように   *
* サイズを引数とする関数を使ってもバッファオーバーラン  *
* の虚弱性は解消されないって。                          *
***************************************************************/
// 変換文字が一致したかな?
if( !strncmp(
work,
RMojiTbl[ Count2 ][ 0 ],
strlen( RMojiTbl[ Count2 ][ 0 ] )
)
){
// カナ変換文字をコピーする
memcpy( Buff,
RMojiTbl[ Count2 ][ 1 ],
strlen( RMojiTbl[ Count2 ][ 1 ] ) );
// 変換した文字列分を飛ばして残りの文字列を処理する
// 自分自身を呼び出す事をリカーシブルコール(再帰呼出)
// といいます。
Romaji2Kana( Src + Count + 1, Buff + strlen( Buff ) );
// 関数を終了させる
return( 0 );
}
Count2++;
}
Count++;
}
/** ここでリカーシブコールを使うか! **/
// 文字を1つ進めて残りの文字列を処理する
// 自分自身を呼び出す事をリカーシブルコール(再帰呼出)
// といいます。
Romaji2Kana( Src + 1, Buff );
return( 0 );

}
// 半角文字列を全て大文字に変換
void Str2Upper(
char *Buff
){
unsigned long Count = 0;
/**************************************************************************
* for文の方がすっきり書けると思う。unsigned longがやはり違和感。    *
*   繰り返しの中でstrlenを使ってるのもちょっと気になる。   *
***************************************************************************/
// 全ての文字列を処理する
while( 1 ){
// 文字列全て処理をすれば処理終了する
if( Count >= strlen( Buff ) ){
break;
}
/***************************************************************************
* シンタックスシュガーを使って Buff[Count] と書いた方が分かりやすい。*
***************************************************************************/
// 半角文字列を小文字から大文字に変換する
*( Buff + Count ) = toupper( *( Buff + Count ) );
Count++;
}
}

--------

実行例。gccでコンパイルするとやたらに警告(const char* を char*に変換、null pointer constant の意味以外で NULL を使った(この警告はgccで出たが、必ず警告してくれる保証はないらしい))が出た後、長すぎる入力でバグったようだ。fgets使ってるのに。デバグはしてない。する気がおきない。

----

ローマ字入力 : DUMMY
ローマ字 : DUMMY
カナ変換後 : ヅ
ローマ字入力 : asahi
ローマ字 : ASAHI
カナ変換後 : アサヒ
ローマ字入力 : assamu
ローマ字 : ASSAMU
カナ変換後 : アサム
ローマ字入力 : kyoukai
ローマ字 : KYOUKAI
カナ変換後 : キヨウカイ
ローマ字入力 : aaa
ローマ字 : AAA
カナ変換後 : アアア
ローマ字入力 : mmmyou
ローマ字 : MMMYOU
カナ変換後 : ミヨウ
ローマ字入力 : dummystring
ローマ字 : DUMMYSTRING
カナ変換後 : ヅリ
ローマ字入力 : hello world
ローマ字 : HELLO WORLD
カナ変換後 : ヘオヲ
ローマ字入力 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ローマ字 : �AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAア�z �アアア�\�ア�WϿ�WϿ��x�ア�WϿtWϿ$���ア�アアアア����V�アアアアア��アアx���\�ア�ア��アア��ア�WϿ �����x��WϿアア�cϿアアϿ�cϿ�cϿ�cϿ�cϿdϿ5dϿjdϿudϿ�dϿ�dϿ�dϿ�dϿeϿ;eϿjeϿteϿ�jϿ�jϿkϿ3kϿfkϿ�klϿlϿ@lϿRlϿplϿ�lϿ�lϿ�lϿ�lϿ�lϿmϿmϿ1mϿCmϿ]mϿemϿtmϿ�mϿ�mϿ�mϿ�mϿ�mϿ�mϿnϿ^nϿ�nϿ�nϿ�nϿ�nϿア�oϿ*oϿDoϿXoϿzoϿ�oϿ�oϿ�oϿ�oϿアアア�w�!アア�ア����アアアアアア4�ア アアアアアアアアア�
       ア�ア
カナ変換後 : アアアアアアアアアアアアアアアアアアアアアアアアアアアAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAア�z �アアア�\�ア�WϿ�WϿ��x�ア�WϿtWϿ$���ア�アアアア����V�アアアアア��アアx���\�ア�ア��アア��ア�WϿ �����x��WϿアア�cϿアアϿ�cϿ�cϿ�cϿ�cϿdϿ5dϿjdϿudϿ�dϿ�dϿ�dϿ�dϿeϿ;eϿjeϿteϿ�jϿ�jϿkϿ3kϿfkϿ�klϿlϿ@lϿRlϿplϿ�lϿ�lϿ�lϿ�lϿ�lϿmϿmϿ1mϿCmϿ]mϿemϿtmϿ�mϿ�mϿ�mϿ�mϿ�mϿ�mϿnϿ^nϿ�nϿ�nϿ�nϿ�nϿア�oϿ*oϿDoϿXoϿzoϿ�oϿ�oϿ�oϿ�oϿアアア�w�!アア�ア����アアアアアア4�ア アア アアアアアアア�
                                        ア�ア
ローマ字入力 : ローマ字 : �AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAア�z �アアア�\�ア�WϿ�WϿ��x�ア�WϿtWϿ$���ア�アアアア����V�アアアアア��アアx���\�ア�ア��アア��ア�WϿ �����x��WϿアア�cϿアアϿ�cϿ�cϿ�cϿ�cϿdϿ5dϿjdϿudϿ�dϿ�dϿ�dϿ�dϿeϿ;eϿjeϿteϿ�jϿ�jϿkϿ3kϿfkϿ�klϿlϿ@lϿRlϿplϿ�lϿ�lϿ�lϿ�lϿ�lϿmϿmϿ1mϿCmϿ]mϿemϿtmϿ�mϿ�mϿ�mϿ�mϿ�mϿ�mϿnϿ^nϿ�nϿ�nϿ�nϿ�nϿア�oϿ*oϿDoϿXoϿzoϿ�oϿ�oϿ�oϿ�oϿアアア�w�!アア�ア����アアアアアア4�ア アア アアアアアアア�
                        ア�アア�アア�アア�アアアアアYϿア�oϿア�YϿアアアア%�z�<��g3a7�i686アアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアア
カナ変換後 : アアアアアアアアアアアアアアアアアアアアアアアアアアアAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAア�z �アアア�\�ア�WϿ�WϿ��x�ア�WϿtWϿ$���ア�アアアア����V�アアアアア��アアx���\�ア�ア��アア��ア�WϿ �����x��WϿアア�cϿアアϿ�cϿ�cϿ�cϿ�cϿdϿ5dϿjdϿudϿ�dϿ�dϿ�dϿ�dϿeϿ;eϿjeϿteϿ�jϿ�jϿkϿ3kϿfkϿ�klϿlϿ@lϿRlϿplϿ�lϿ�lϿ�lϿ�lϿ�lϿmϿmϿ1mϿCmϿ]mϿemϿtmϿ�mϿ�mϿ�mϿ�mϿ�mϿ�mϿnϿ^nϿ�nϿ�nϿ�nϿ�nϿア�oϿ*oϿDoϿXoϿzoϿ�oϿ�oϿ�oϿ�oϿアアア�w�!アア�ア����アアアアアア4�ア アア アアアアアアア�
                                        ア�アア�アア�アア�アアアアアYϿア�oϿア�YϿアアアア%�z�<��g3a7�i686アアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアア
ローマ字入力 : ローマ字 : AAAAAAAAAAAAAA
カナ変換後 : アアアアアアアアアアアアアア
ローマ字入力 : exitttttttt
Segmentation fault (コアダンプ)

2016年8月 4日 (木)

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた(4)

|

ジーン・シャープ「独裁体制から民主主義へ」

第3章 からはじめたので、第1章からあらためて読みます。

第1章の中心的なテーマは、「独裁体制に暴力で対抗することは正しいか?」これは道徳とか合法性の問題でなく、現実の効果などの話である。そして、それは危険であり、逆効果の可能性が非常に高いことを述べている。また、選挙外国からの援助に頼るのもよくない。

考察:

日本人の多くの人々が非暴力という言葉を「暴力はいけません」等の道徳的意味とか「法律違反はいけない」というような情緒的な意味合いでしか受け取っていないことに非常に危機感を覚える。非暴力不服従非協力、というのは抵抗運動の現実的な効果や仕組みがあるのだ。そして、それは非常に強力な精神力が必要である。生半可なものではない。

第1章 独裁体制に直面することの現実

近年、様々な独裁体制が民衆の運動によって弱められたり、時には崩壊している。
独裁体制はあまりにも巨大で難攻不落に見えるが、民衆が一致団結して政治的・経済的・社会的な抵抗を行った場合、体制を支えきれなくなることがある。

  • もちろん、独裁体制が倒れたからといって、悲惨な沢山の問題が解決するわけではない。しかし、独裁体制による苦しみからの軽減はある。

困難は続く

他方、いまだに独裁体制に苦しんでいるところが多数ある。何十年、何百年の抵抗でもまだ抑圧に耐えている国は多い。

  • 民衆は権威者・統治者に無条件に服従するよう長年調教されてしまっている。
  • 極端な場合は、統治者の管轄外のグループや機関は完全に骨抜きにされ、支配され、乗っ取られる。
  • 国民は分断化、原子化(孤立した個人にされてしまう)され、自由を勝ち取る活動や、国民同士の互いの信頼もできなくなり、自分たちの主導で何かを成し遂げることもできなくなる。
  • 国民は弱体化し、自信を失い、抵抗を考えることすらできなくなる。家族や友人との間でさえ自由への渇望や独裁体制への嫌悪をわかちあうこともできなくなる
  • 過去にはまだ、抵抗する人々もいたであろうが、結果はかえってより苦しみをもたらすことが多く、現在はより悲惨な状態かもしれない。民衆の恐怖感と従順癖を克服できなかったからだ。

民衆の順癖と恐怖感を克服することが、独裁体制を打倒するための前提条件であるにも関わらず。

暴力を通して自由は得られるか?

どうしたらいい?

いくら正当性を訴えても、憲法、法律上の違法性、司法の判決、世論などはたいてい独裁者に単純に無視される。

そうなると、独裁政権の残虐行為に怒る人々は暴力的な方法を使うしかない、と人々が結論するのは自然なことである。しかし、実際の結果は期待と正反対のことになる。

どんな形であれ、暴力的な反撃は独裁体制にとってもっとも有利な闘いを選んでしまった、ことになる。

考察:

要するに、暴力を使った抵抗は独裁体制の土俵に自ら登ってしまうことだ、とも言えるだろう。何度も強調しなければいけないのは、これは道徳や合法性の問題ではない、ということだ。(勿論、違法な手段を使うと独裁体制に弾圧の口実を与えるのでよくないとは言えるが)。

  1. 暴力について言えば、独裁者の方が圧倒的かつ桁違いに大きな戦力を持っている。まず勝ち目はない
  2. 軍事的反抗が非現実的だと分かると、ゲリラ活動に活路を見出そうとする場合も多い。しかし、やはり戦力の差などが大きすぎ、長期化し犠牲者も増え、新たな苦痛が生まれるだけで、どういう意味でも良い方法ではない。
  3. 仮にゲリラ活動で勝利を収めたとしても、民主化に必要な独立した機関その他を弱体化解体化し中央集権的にして、反対制行動のリーダーがより残忍な独裁者になることも多い。

考察:

当然のことながら、暴力革命など暴力を使った反抗が失敗すれば、独裁体制はそれを名目として更なる残酷な弾圧や抑圧を強めることになる。その意味でも、暴力的な方法は逆効果になる。

従って、別の方法を考えなければならない。

クーデター、選挙、あるいは国外からの救世主

  • Q. 軍事的クーデターで対抗するのはどうか? これなら短期間で効果的ではないか?ーーA.深刻な欠点がある。最大の欠点は、独裁体制の権力構造を温存してしまうこと。つまり、独裁体制の統治構造は同じなままなので、たとえ勝ったとしてもクーデターのリーダーがより残酷な独裁者に変わってしまうことが多い。人が変わるだけ。
  • Q. 選挙で独裁者を追い出せないか? −−A. 不可能だ。選挙そのものが独裁体制の思惑通りの結果になるように不正操作されるだけのこと。万が一選挙で反対制側が勝っても、独裁者に単に無視されたり、抹殺されるだけ。独裁者は自分の立場を危うくする選挙などに興味はない。利用できるときに利用するだけ。

独裁体制から何とか逃げ出した亡命者たちは、自分たちの力で独裁体制を何とかできるなどとはまったく信じることができない。そこで、国際的な援助のみが独裁体制を崩す方法だと信じるようになる。

期待する外部の力: 国際的世論、国連、特定の国家、海外からの経済的・政治的制裁など。

慰めにはなっても、現実は非情である。

独裁体制下での民衆は、残酷な独裁者に対抗する力が自分たちにあると信じることがほとんどできない。また自らを救う手筈の持ち合わせもない。当然、闘う気力も持てない。だから、解放の力を外部に求めるのも無理はない。しかし・・・

外部からの「救世主」に頼ることの危険

外部の救世主に頼ることは完全な間違いかもしれない。大抵の場合、海外からの救世主は現れない。もし他国からの介入があったとしても信頼すべきではない

他国の介入を信頼した場合の危険性:

  • 他国はその他国の利益のために、独裁政権を黙認したり、更には積極的に支持する場合がある。
  • 他国はその他国の利益など他の目的のために、「自由化してあげる」という約束を反故にして、民衆を売り渡すかもしれない。
  • 他国は、単にその国の支配利益などのためだけに独裁体制に歯向かうことがある。民衆のためではない。
  • ただし、他国は、国内の抵抗運動が独裁体制を揺るがしたり、その兆しが見えた場合には、前向きな介入をすることもある。政権の残忍な性格に海外が注目を集めるのを意識して、はじめて介入するもの。

独裁体制が存続する理由は、国内での権力配分にある: 民衆は弱い立場で、富と権力は僅かな勢力の手の内にある。海外からの介入で一時的に揺らぐこともあり得るが、国内の構造が原因である限り内因を変えない限り存続するもの。

国際的な圧力が常に役に立たないわけではない。

国内での抵抗運動がある場合には、国際的な圧力は非情に効果があることが多い。

国際的な経済ボイコット、通商停止、国際的組織からの追放、国連関連組織による非難などなどは大きな力になる。ただし、国内に強力な抵抗運動がないとそういう動きが起こることは考えにくい

厳しい現実を直視する

現実は甘くない。独裁体制から逃れたいのならば、最低限次の任務に取り組む必要がある。

  1. 抑圧された民衆自身の意思や自信、抵抗技能を強化する。
  2. 抑圧された民衆が関わる独立した社会グループや機関を強化する。
  3. 国内での強力な抵抗勢力を築く。
  4. 解放のための全体戦略計画を練り、それをうまく実行する。

 

 強力で自助的な勢力が賢明な戦略を手に、修練された勇敢な行動を起こし、純粋な力をもって向きあえば、独裁体制は崩壊する。ただし、最低限上記の4項目は必須である。

 

独裁体制からの自由化は、究極的には人びとが自らを解放できる能力にかかっている。

 

ただし、その詳細に入る前に、「独裁体制との交渉」という手段の効果について吟味しなければならない。これは重要である。

|

2016年7月26日 (火)

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた(3)

ジーン・シャープ「独裁体制から民主主義へ」

第3章 政治的力は何に由来するか

民主的な力の中心

民主的社会は国家から独立した非政治グループや機関が多数存在する。例えば、

  • 家族
  • 宗教組織
  • 文化的協会
  • スポーツ・クラブ
  • 経済機関
  • 労働組合
  • 学生協会
  • 政党
  • 町会
  • 園芸クラブ
  • 人権組織
  • 音楽グループ
  • 文学協会

などなど。これらは、社会の重要な要素である。独自の目的があり社会の需要を満たしている。また政治的にも重要である。

このようなグループや機関が、独裁者に掌握されていればいるほど民衆は無力となる。

反対に、独立した(政府の管轄外の)こういったグループ・機関の自立性と自由が保たれ(or 回復され)れば、政治的抵抗の重要な基盤となる。

また、これらは、独裁体制崩壊後は民主的社会を営む際の構造的基盤となる。

独裁体制が、このようなグループを掌握している場合、抵抗勢力は新しい独立した社会グループを作るか、生き残ってる組織や部分的に支配されてる組織・グループに対して民主的な支配を取り戻すことは非常に重要な課題となる。

これらは歴史的に実際に何度も起こったことなので実行可能である(もちろん、たやすくできるわけではなく、独裁政権も取り戻そうとする。犠牲者が出ることも覚悟しなければならない)。

私の考察:

つまり、こういった独立した社会グループ、組織、機関、は独裁政権が生き血を吸う手段(あるいは生き血そのもの)であって、これらを抵抗勢力が取り戻せばその分独裁体制は飢えるということだ。

民主的力の源を考察することの結論: 独裁政権を意図的に崩壊させることは可能である

特に、独裁政権は、巧みに展開された政治的抵抗にはかなり傷つきやすい、という性質がある。

巧みに展開、という意味は後の章で示される。

| 次 >

2016年7月14日 (木)

ジーン・シャープ「独裁体制から民主主義へ」を読んでみた(2)


ジーン・シャープ「独裁体制から民主主義へ」

第3章 政治的力は何に由来するのか?

政治的力を成り立たせているもの

より続き。

全体主義的な独裁体制は、それが支配する民衆と社会に依存している。

政治学者のカール・ドイッチの1953年の記述より孫引用:

独裁体制の権力が強力でいられるのは、それがあまり頻繁に行使されないときに限られる。もし、その権力が民衆全体に対して常に行使されなければならないと、確固たる力を長期的にわたって保つことはできない。独裁政権は、他の形態の政府と比べて、対象を治めるのにより多くの力を必要とするため、政権は民衆の間に頼るに十分な服従的習慣が広まることを大いに必要とする。そしてそれは、有事の際にそれなりの数の民衆が積極的に支持してくれると見込めるよりも重要なものである。

俺の感想:

要するに、独裁政権は支配している民衆の生き血を吸わないと生きていられないのだから、民衆の服従が必要だ、ということかな?
そして、民衆が(犠牲を恐れず)協力をやめる決意をすれば(生き血を吸われることを拒否すれば)政権は弱体化するということか?

政権が政府の力をどの程度まで保てるか?

  1. 政府の力に歯止めをかけようとする民衆の要望の度合い。
  2. 被統治者の独立的組織や独立的機関が、力の源となっているものを一斉に撤退させられる統率力の度合い。
  3. 大衆が、政府への同意や援助を保留できる能力の度合い。

«ジーン・シャープ「独裁体制から民主主義へ」を読んでみた

最近のトラックバック

最近のコメント

ウェブページ

2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30