他のアカウント

無料ブログはココログ

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. 大衆が、政府への同意や援助を保留できる能力の度合い。

2016年7月11日 (月)

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

マハトマ・ガンジーと言えば非暴力不服従という言葉が浮かぶ。しかし、その内容を知っている人は少ない。私もその一人だ。

この「非暴力不服従非協力」とはいったいどんなものなのか? の基本が分かる教科書があるので、ちょっとだけ紹介してみたい。とは言っても私も充分に理解したとは言えないのだが。

独裁体制から民主主義へ―権力に対抗するための教科書 (ちくま学芸文庫)

著者のジーン・シャープはアインシュタイン研究所で非暴力の理論を研究しているようだ。

文庫なので量も適切(ただし、著者も認めているように具体的なところや、詳細に及ぶ分析まではしていないが、逆に、基本的原理を分かりやすく書いてある分、入門には適している)である。

私も、ガンジーは単に理念だけで活動したのではなく、きちんと、これはやり方が正しければ効果がある、という具体的な構想があったことが分かった。

もちろん、簡単にできるとも言っていないし困難で犠牲も出る覚悟は必要であるが、それでも少ない犠牲で大きな成果を出せるように著者も調査し伝え方も工夫している。

第1章、第2章では、憲法も法律も選挙や民意、道徳や情その他をやすやすと踏みにじる独裁者に対して、当然人々が考える暴力的な革命や、ゲリラ活動、海外からの「救世主」の待望、交渉に頼ること、などの危険や期待通りにいかない理由(独裁者に弾圧の口実を与える、戦力的に圧倒的に不利、革命に成功しても革命指導者が独裁者になってしまう可能性、交渉の約束などすぐ破られる、等など)を述べているが、そこは後回しにして、抵抗の原理の3章から読み取った部分を書いてみる。ただ、著者が第1章で示した最低限の4原則は書いておく必要がある。

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

民衆は従順さに慣れてしまってるし、無力感も出る。最大の敵は恐怖感だ。それを克服しないといけない。

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

そもそも、独裁者の政治的な力がどこから来るのか?をはっきり認識・理解しなければいけない。

「猿の主人」という喩え話で紹介される。ある老人が猿を召使として山に連れて行き、果実を猿に採らせて収穫の1/10を献上させていた。

ある日、小猿が他の猿に尋ねた。「果樹や林の木は、あの老人が植えたの?」と。

聞かれた猿は答えた「いや、自然に生えてきたものさ」。小猿はさらに尋ねた。「老人の許可がないと、果実を採ってはならないの?」。猿たちは言った。「いや、誰が採ってもいい」。小猿は続けて尋ねた。「それじゃあ、なぜ老人に飼われていなきゃならないの?なぜ彼の召使いじゃなきゃいけないの?」

小猿がそう言い終わるか終わらないかのうちに、猿たちはみなハッと覚醒した。

(中略)「世の中には、正当な原理ではなく、策略によって民衆を支配する者がいる・・・」

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

原理は簡単だ。

独裁者は、統治する民衆の支えを必要とする

ということだ。

政治的な力の源:

  • 権威・・・政権が正当で、従うのが義務だ、という民衆の信奉。
  • 人的資源・・・独裁者へ協力・支援を提供する人々の数と重要性。
  • 技能と知識・・・協力者たちによって提供される。
  • 無形の要素・・・統治者に従い、支援させるよう民衆を誘導する心理的・観念的な要素。
  • 物的資源・・・統治者が管理し、アクセスできる度合い。
  • 制裁・・・統治者が処罰によって、降伏や協力を確保する。

民衆が受け入れ従順になり、社会の様々な機関などの協力があれば統治者の力は増大する。

反対に、民衆や機関が侵略者や独裁者に協力しなくなれば、どんな統治者であっても依存する力の源は枯れていき、時には絶たれる。

この原理が、まず出発点だ。

2016年7月 7日 (木)

不正選挙から国民の主権を守りたい方からのメッセージ

野党共闘立候補者とその支持者様へ。また選挙の立会人をやられている方々へ。不正選挙について

現行憲法前文に、日本国民は「正当な選挙」で選ばれた代表者により行動する、と書いてありますから、万が一不正な選挙で選ばれた者は「代表者」ではないですね。

もしそんなことをしたら、憲法12条や99条その他に違反しまくりです。国民主権も基本的人権も蹂躙しているのですから。

「不正があるというなら、それを証明してみろ」と「お上」は言いますが、疑惑がある場合の「説明責任」は選管や政府の方だし、「疑惑解明責任」は議会の方にあります(twで他の方に教えてもらいました。)

不正選挙に関心を持ってる方々は沢山いらっしゃいますが、「人権の踏み絵」さんと言う方が、メッセージをブログに書いても構わない、とおっしゃいましたので、紹介させていただきます。

勿論、2016年参院選での話ですが、それ以降の選挙でも同じだと思います。まあ、自民党案の緊急事態条項が通って、緊急事態宣言された後は選挙さえ無くなるかもしれませんが。

皆様に 2回目のお願いがあります。 今回は
  ********** 最大の脅威ムサシの件です! **********
、選挙票集計ソフトのムサシは安倍総理の父安倍晋太郎が大株主で あった会社です。

当然息子の安倍晋三が相続していると 思もわれます。

公正な集計は期待できるものではなく、 使用中止を強く要求すべきものです。

無論地元選管いにデモや抗議電話でムサシの使用中止を要求し、対応の様子を ヴォイス・レコーダーでYouTube にUPするのは良いことだと思います。

しかし、 ムサシが開票集計に使われる場合の 出来る対処法を考えてみました。
やはり最重要必須なことは 立候補者が 大阪W選挙や北海道5区補選のように、選挙戦中は支持の盛り上がりが あっても、 次々と落選させられていることを 認識することだと思います。 (不正選挙が視界外の方は  #不正操作選挙 #不正選挙 など クリックしてみて下さい。) そして 選挙戦に勝利をするためには 立候補者と支持有権者が連帯して選挙を戦うことです。

(公職選挙法)ご参考にして下さい。http://law.e-gov.go.jp/htmldata/S25/S25HO100.html 
それでムサシに対処するため 特にお願いしたいことは 以下の①②③です。 (開票立会人) 第六十二条

①当該開票区の 開票立会人を信頼できるひとを 選んでください。

スターリン「票を投じる者が 決定するのではない。 票を数える者が決定するのだ」 開票立会人の役割が 非常に重要です。
(開票立会人) 第六十二条 参照下さい。 立候補者が立候補している 選挙区内の各開票区(開票所) の開票立会人がそれぞれの 開票立会人のメルアドを 相互に共有出来るように 関与指揮する様にしてください。 これは添付図 黄色の部分の左側 のように 集計の途中経過が発表される 度に全ての開票区で、 他の開票区の投票票数の 出方(発表)の様子が 確認できるようにするためです。

② このメルアドは 前回お願いした 各投票所から 信頼の於ける一般支持者からの 投票用紙の映像を 受信するために (添付図の黄色の部分) 各開票所の開票立会人の メールアドレスを立候補者の WEB上に記載表示した メルアドとは違った 別ものにしてください。

妨害悪戯の受信を さけるためです。

③開票立会人は 公選法65条 「開票は、すべての投票箱の 送致を受けた日 又はその翌日に行う。 」 なのでJinnkennb001 期日前の投票箱が 選挙区選出議員用の 投票箱数と 比例代表選出議員用の 投票箱数とが それぞれ何箱筒あるのかを 投票開始作業前のカギの かけられた状態の時に 確認することが大切です。

> 北海道5区補選のhttp://ameblo.jp/vita-sana/entry-12154622794.html のように
Jinnkennb002  急に投票数が出来る理由に 期日前投票が悪利用されたことが あったためにこういうことを 防ぐためです。 以下の例をみてください。 北海道5区補選について の言及から抜粋です。
*** 「その後22時過ぎに立会人が 食事か休憩で離席したタイミングで、 間隙を突いて慌てて票のすり替え をしたのではないでしょうか。 *** *** マゼラン黒木水下 ?@ssenshhh97 ・ 6月13日 @Unite_The_Power @onewinterday @shiminrengo_ksi
北海道5区の補選でも 終盤で突然自民の和田に 票が入りだしたが、選管は
「期日前投票を入れ忘れたためと」 話していたというTWEETを見た。Jinnkennb003
ということは期日前投票の票で安倍自民党が不正? *** 開票立会人は 開票途中で気を許すことは出来ないと いう厳しい任務だと 認識して欲しいと 思います。 特に開票が終り近くで 疲労が溜まってきていても その開票区(開票所) の集計数とムサシが表示する 票数とに差異がないか どうかにです。 、 ************

③ 全国でフォローされていない 野党共闘立候補者に DMを差し上げることができません、 ①②の内容にご賛同いただければ、 お知り合いの野党共闘の立候補者や その支持団体にご転送して 頂ければ有り難く思います。

今回は地元の立候補者の 選挙義務所に 電話を掛けて 立候補者と支持者の 固い連帯が必要であること をお伝え 頂きたく存じます。 宜しくお願いします。 また (情報が稚拙で不足していますが) 日本人連帯し戦おう https://twitter.com/Unite_The_Power/status/744255711396270080  #日本人連帯し戦おう  #不正操作選挙 
 を ツイターで、 ご覧頂ければと思います。

人権の踏み絵さんのつぶやきの例:

https://twitter.com/Unite_The_Power/status/750022074475745281

Jinkennnewtw スターリン「票を投じる者が決定するのではない。票を数える者が決定するのだ」 日本の政治は選管が  で決めている!戦争法破棄陣営の開票立会人が頑張れば、日本が崖っぷちで踏み止まれるかも?若者よ7月10日に投票しよう!https://twitter.com/Unite_The_Power/status/750010138975612928

Jinnkennnewtw2

«現行憲法前文の主語を「あなた」「私」に変えてみた