Quantcast
Channel: 懒得折腾
Viewing all 764 articles
Browse latest View live

[Kails] 一个基于 Koa2 构建的类似于 Rails 的 nodejs 开源项目

$
0
0

本文首发于 Blog of Embbnux,转载请注明原文出处,并保留原文链接:
https://www.embbnux.com/2016/09/04/kails_with_koa2_like_ruby_on_rails

最近研究了下Koa2框架,喜爱其中间件的思想。但是发现实在是太简洁了,只有基本功能,虽然可以方便搭各种服务,但是离可以适应快速开发的网站框架还是有点距离。于是参考Rails的大致框架搭建了个网站框架kails,配合postgres和redis,实现了MVC架构,前端webpack,react前后端同构等网站开发基本框架。本文主要介绍kails搭建中的各种技术栈和思想。

koa来源于express的主创团队,主要利用es6的generators特性实现了基于中间件思想的新的框架,但是和express不同,koa并不想express一样提供一个可以满足基本网站开发的框架,而更像是一个基本功能模块,要满足网站还是需要自己引入很多功能模块。所以根据选型大的不同,有各种迥异的koa项目,kails由名字也可以看出是一个类似Ruby on Rails的koa项目。

项目地址:https://github.com/embbnux/kails

主要目录结构如下

├── app.js
├── assets
│   ├── images
│   ├── javascripts
│   └── stylesheets
├── config
│   ├── config.js
│   ├── development.js
│   ├── test.js
│   ├── production.js
│   └── webpack.config.js
│   ├── webpack
├── routes
├── models
├── controllers
├── views
├── db
│   └── migrations
├── helpers
├── index.js
├── package.json
├── public
└── test

一、第一步es6支持

kails选用的是koa2作为核心框架,koa2使用es7的async和await等功能,node在开启harmony后还是不能运行,所以要使用babel等语言转化工具进行支持:

babel6配置文件

.babelrc

{
  "presets": [
    "es2015",
    "stage-0",
    "react"
  ]
}

在入口使用babel加载整个功能,使支持es6

require('babel-core/register')
require('babel-polyfill')
require('./app.js')

二、核心文件app.js

app.js是核心文件,koa2的中间件的引入和使用主要在这里,这里会引入各种中间件和配置, 具体详细功能介绍后面会慢慢涉及到。

下面是部分内容,具体内容见github上仓库

import Koa from 'koa'
import session from 'koa-generic-session'
import csrf from 'koa-csrf'
import views from 'koa-views'
import convert from 'koa-convert'
import json from 'koa-json'
import bodyParser from 'koa-bodyparser'

import config from './config/config'
import router from './routes/index'
import koaRedis from 'koa-redis'
import models from './models/index'

const redisStore = koaRedis({
  url: config.redisUrl
})

const app = new Koa()

app.keys = [config.secretKeyBase]

app.use(convert(session({
  store: redisStore,
  prefix: 'kails:sess:',
  key: 'kails.sid'
})))

app.use(bodyParser())
app.use(convert(json()))
app.use(convert(logger()))

// not serve static when deploy
if(config.serveStatic){
  app.use(convert(require('koa-static')(__dirname + '/public')))
}

//views with pug
app.use(views('./views', { extension: 'pug' }))

// csrf
app.use(convert(csrf()))

app.use(router.routes(), router.allowedMethods())

app.listen(config.port)
export default app

三、MVC框架搭建

网站架构还是以mvc分层多见和实用,能满足很多场景的网站开发了,逻辑再复杂点可以再加个服务层,这里基于koa-router进行路由的分发,从而实行MVC分层。

路由的配置主要由routes/index.js文件去自动加载其目录下的其它文件,每个文件负责相应的路由头下的路由分发,如下

routes/index.js

import fs from 'fs'
import path from 'path'
import Router from 'koa-router'

const basename = path.basename(module.filename)
const router = Router()

fs
  .readdirSync(__dirname)
  .filter(function(file) {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js')
  })
  .forEach(function(file) {
    let route = require(path.join(__dirname, file))
    router.use(route.routes(), route.allowedMethods())
  })

export default router

路由文件主要负责把相应的请求分发到对应controller中,路由主要采用restful分格。

routes/articles.js

import Router from 'koa-router'
import articles from '../controllers/articles'

const router = Router({
  prefix: '/articles'
})
router.get('/new', articles.checkLogin, articles.newArticle)
router.get('/:id', articles.show)
router.put('/:id', articles.checkLogin, articles.checkArticleOwner, articles.checkParamsBody, articles.update)
router.get('/:id/edit', articles.checkLogin, articles.checkArticleOwner, articles.edit)
router.post('/', articles.checkLogin, articles.checkParamsBody, articles.create)

// for require auto in index.js
module.exports = router

model层这里基于Sequelize实现orm对接底层数据库postgres,利用sequelize-cli实现数据库的迁移功能。

user.js

import bcrypt from 'bcrypt'

export default function(sequelize, DataTypes) {
  const User = sequelize.define('User', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      type: DataTypes.STRING,
      validate: {
        notEmpty: true,
        len: [1, 50]
      }
    },
    email: {
      type: DataTypes.STRING,
      validate: {
        notEmpty: true,
        isEmail: true
      }
    },
    passwordDigest: {
      type: DataTypes.STRING,
      field: 'password_digest',
      validate: {
        notEmpty: true,
        len: [8, 128]
      }
    },
    password: {
      type: DataTypes.VIRTUAL,
      allowNull: false,
      validate: {
        notEmpty: true
      }
    },
    passwordConfirmation: {
      type: DataTypes.VIRTUAL
    }
  },{
    underscored: true,
    tableName: 'users',
    indexes: [{ unique: true, fields: ['email'] }],
    classMethods: {
      associate: function(models) {
        User.hasMany(models.Article, { foreignKey: 'user_id' })
      }
    },
    instanceMethods: {
      authenticate: function(value) {
        if (bcrypt.compareSync(value, this.passwordDigest)){
          return this
        }
        else{
          return false
        }
      }
    }
  })
  function hasSecurePassword(user, options, callback) {
    if (user.password != user.passwordConfirmation) {
      throw new Error('Password confirmation doesn\'t match Password')
    }
    bcrypt.hash(user.get('password'), 10, function(err, hash) {
      if (err) return callback(err)
      user.set('passwordDigest', hash)
      return callback(null, options)
    })
  }
  User.beforeCreate(function(user, options, callback) {
    user.email = user.email.toLowerCase()
    if (user.password){
      hasSecurePassword(user, options, callback)
    }
    else{
      return callback(null, options)
    }
  })
  User.beforeUpdate(function(user, options, callback) {
    user.email = user.email.toLowerCase()
    if (user.password){
      hasSecurePassword(user, options, callback)
    }
    else{
      return callback(null, options)
    }
  })
  return User
}

四、开发、测试与线上环境

网站开发测试与部署等都会有不同的环境,也就需要不同的配置,这里我主要分了development,test和production环境,使用时用自动基于NODE_ENV变量加载不同的环境配置。

实现代码:

config/config.js

var _ = require('lodash');
var development = require('./development');
var test = require('./test');
var production = require('./production');

var env = process.env.NODE_ENV || 'development';
var configs = {
  development: development,
  test: test,
  production: production
};
var defaultConfig = {
  env: env
};

var config = _.merge(defaultConfig, configs[env]);

module.exports = config;

生产环境的配置:

config/production.js

const port = Number.parseInt(process.env.PORT, 10) || 5000
module.exports = {
  port: port,
  hostName: process.env.HOST_NAME_PRO,
  serveStatic: process.env.SERVE_STATIC_PRO || false,
  assetHost: process.env.ASSET_HOST_PRO,
  redisUrl: process.env.REDIS_URL_PRO,
  secretKeyBase: process.env.SECRET_KEY_BASE
};

五、利用中间件优化代码

koa是以中间件思想构建的,自然代码中离不开中间件,这里介绍几个中间件的应用。

currentUser的注入

currentUser用于获取当前登录用户,在网站用户系统上中具有重要的重要

app.use(async (ctx, next) => {
  let currentUser = null
  if(ctx.session.userId){
    currentUser = await models.User.findById(ctx.session.userId)
  }
  ctx.state = {
    currentUser: currentUser,
    isUserSignIn: (currentUser != null)
  }
  await next()
})

这样在以后的中间件中就可以通过ctx.state.currentUser得到当前用户。

优化controller代码

比如article的controller里的edit和update,都需要找到当前的article对象,也需要验证权限,而且是一样的,为了避免代码重复,这里也可以用中间件。

controllers/articles.js

async function edit(ctx, next) {
  const locals = {
    title: '编辑',
    nav: 'article'
  }
  await ctx.render('articles/edit', locals)
}

async function update(ctx, next) {
  let article = ctx.state.article
  article = await article.update(ctx.state.articleParams)
  ctx.redirect('/articles/' + article.id)
  return
}

async function checkLogin(ctx, next) {
  if(!ctx.state.isUserSignIn){
    ctx.status = 302
    ctx.redirect('/')
    return
  }
  await next()
}

async function checkArticleOwner(ctx, next) {
  const currentUser = ctx.state.currentUser
  const article = await models.Article.findOne({
    where: {
      id: ctx.params.id,
      userId: currentUser.id
    }
  })
  if(article == null){
    ctx.redirect('/')
    return
  }
  ctx.state.article = article
  await next()
}

在路由中应用中间件

router.put('/:id', articles.checkLogin, articles.checkArticleOwner, articles.update)
router.get('/:id/edit', articles.checkLogin, articles.checkArticleOwner, articles.edit)

这样就相当于实现了rails的before_action的功能

六、webpack配置静态资源

在没实现前后端分离前,工程代码中肯定还是少不了前端代码,现在在webpack是前端模块化编程比较出名的工具,这里用它来做rails中assets pipeline的功能,这里介绍下基本的配置。

config/webpack/base.js

var webpack = require('webpack');
var path = require('path');
var publicPath = path.resolve(__dirname, '../', '../', 'public', 'assets');
var ManifestPlugin = require('webpack-manifest-plugin');
var assetHost = require('../config').assetHost;
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  context: path.resolve(__dirname, '../', '../'),
  entry: {
    application: './assets/javascripts/application.js',
    articles: './assets/javascripts/articles.js',
    editor: './assets/javascripts/editor.js'
  },
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: ['babel-loader'],
      query: {
        presets: ['react', 'es2015']
      }
    },{
      test: /\.coffee$/,
      exclude: /node_modules/,
      loader: 'coffee-loader'
    },
    {
      test: /\.(woff|woff2|eot|ttf|otf)\??.*$/,
      loader: 'url-loader?limit=8192&name=[name].[ext]'
    },
    {
      test: /\.(jpe?g|png|gif|svg)\??.*$/,
      loader: 'url-loader?limit=8192&name=[name].[ext]'
    },
    {
      test: /\.css$/,
      loader: ExtractTextPlugin.extract("style-loader", "css-loader")
    },
    {
      test: /\.scss$/,
      loader: ExtractTextPlugin.extract('style', 'css!sass')
    }]
  },
  resolve: {
    extensions: ['', '.js', '.jsx', '.coffee', '.json']
  },
  output: {
    path: publicPath,
    publicPath: assetHost + '/assets/',
    filename: '[name]_bundle.js'
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery'
    }),
    // new webpack.HotModuleReplacementPlugin(),
    new ManifestPlugin({
      fileName: 'kails_manifest.json'
    })
  ]
};

七、react前后端同构

node的好处是v8引擎只要是js就可以跑,所以想react的渲染dom功能也可以在后端渲染,有利用实现react的前后端同构,利于seo,对用户首屏内容也更加友好。

在前端跑react我就不说了,这里讲下在koa里面怎么实现的:

import React from 'react'
import { renderToString } from 'react-dom/server'
async function index(ctx, next) {
  const prerenderHtml = await renderToString(
    <Articles articles={ articles } />
  )
}

八、测试与lint

测试和lint自然是开发过程中工程化不可缺少的一部分,这里kails的测试采用mocha,lint使用eslint

.eslintrc

{
  "parser": "babel-eslint",
  "root": true,
  "rules": {
    "new-cap": 0,
    "strict": 0,
    "no-underscore-dangle": 0,
    "no-use-before-define": 1,
    "eol-last": 1,
    "indent": [2, 2, { "SwitchCase": 0 }],
    "quotes": [2, "single"],
    "linebreak-style": [2, "unix"],
    "semi": [1, "never"],
    "no-console": 1,
    "no-unused-vars": [1, {
      "argsIgnorePattern": "_",
      "varsIgnorePattern": "^debug$|^assert$|^withTransaction$"
    }]
  },
  "env": {
    "browser": true,
    "es6": true,
    "node": true,
    "mocha": true
  },
  "extends": "eslint:recommended"
}

九、console

用过rails的,应该都知道rails有个rails console,可以已命令行的形式进入网站的环境,很是方便,这里基于repl实现:

if (process.argv[2] && process.argv[2][0] == 'c') {
  const repl = require('repl')
  global.models = models
  repl.start({
    prompt: '> ',
    useGlobal: true
  }).on('exit', () => { process.exit() })
}
else {
  app.listen(config.port)
}

十、pm2部署

开发完自然是要部署到线上,这里用pm2来管理:

NODE_ENV=production ./node_modules/.bin/pm2 start index.js -i 2 --name "kails" --max-memory-restart 300M --merge-logs --log-date-format="YYYY-MM-DD HH:mm Z" --output="log/production.log"

十一、npm scripts

有些常用命令参数较多,也比较长,可以使用npm scripts里为这些命令做一些别名

{
  "scripts": {
    "console": "node index.js console",
    "start": "./node_modules/.bin/nodemon index.js & node_modules/.bin/webpack --config config/webpack.config.js --progress --colors --watch",
    "app": "node index.js",
    "pm2": "NODE_ENV=production ./node_modules/.bin/pm2 start index.js -i 2 --name \"kails\" --max-memory-restart 300M --merge-logs --log-date-format=\"YYYY-MM-DD HH:mm Z\" --output=\"log/production.log\"",
    "pm2:restart": "NODE_ENV=production ./node_modules/.bin/pm2 restart \"kails\"",
    "pm2:stop": "NODE_ENV=production ./node_modules/.bin/pm2 stop \"kails\"",
    "pm2:monit": "NODE_ENV=production ./node_modules/.bin/pm2 monit \"kails\"",
    "pm2:logs": "NODE_ENV=production ./node_modules/.bin/pm2 logs \"kails\"",
    "test": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register --recursive --harmony --require babel-polyfill",
    "assets_build": "node_modules/.bin/webpack --config config/webpack.config.js",
    "assets_compile": "NODE_ENV=production node_modules/.bin/webpack --config config/webpack.config.js -p",
    "webpack_dev": "node_modules/.bin/webpack --config config/webpack.config.js --progress --colors --watch",
    "lint": "eslint . --ext .js",
    "db:migrate": "node_modules/.bin/sequelize db:migrate",
    "db:rollback": "node_modules/.bin/sequelize db:migrate:undo",
    "create:migration": "node_modules/.bin/sequelize migration:create"
  }
}

这样就会多出这些命令:

npm install
npm run db:migrate
NODE_ENV=test npm run db:migrate
# run for development, it start app and webpack dev server
npm run start
# run the app
npm run app
# run the lint
npm run lint
# run test
npm run test
# deploy
npm run assets_compile
NODE_ENV=production npm run db:migrate
npm run pm2

十二、更进一步

目前kails实现了基本的博客功能,有基本的权限验证,以及markdown编辑等功能。现在目前能想到更进一步的:

  • 性能优化,加快响应速度
  • Dockerfile简化部署
  • 线上代码预编译

欢迎pull request:https://github.com/embbnux/kails



fir.im Weekly –做一款 App 需要考虑什么

$
0
0

开发 App 是一个痛并快乐的旅程。工具越来越多,成本也越来越低,那么在开发之前需要考虑些什么?limboy 总结了一些经验和反思——做一个 App 前需要考虑的几件事,参考一下为你的 App 多留点心。

除此之外,本周 fir.im Weekly 收集了微博热转 Github 项目、iOS/Android 开发实践等技术分享~

iOS符号表恢复&逆向支付宝

来自于杨君的小黑屋博客分享。

“符号表历来是逆向工程中的“必争之地”,而iOS应用在上线前都会裁去符号表,以避免被逆向分析。本文会介绍一个自己写的工具,用于恢复iOS应用的符号表。”

全文阅读,点击这里

iOS-Echarts支持链式编程

@叫什么都不如叫Pluto-Y在微博上分享:

“iOS-Echarts终于发布了新版本了,支持了链式编程。对于那些需要特别奇怪的图表,或者详细配置每一个细节的小伙伴,这里提供了一个替代方案。”项目地址:iOS-Echarts

细数iOS上的那些安全防护

@阿里移动安全分享的这篇文章从三个方面:代码签名、沙盒机制和利用缓解对 iOS 的系统安全机制做了一个总结,并在结尾展示了最新版iOS9.3.4上安装cydia的DEMO。
文章传送门

百里挑一:21个优质Swift开源App

感谢没故事的卓同学的翻译。

“Mybridge AI 根据代码质量和start排名从900多个开源项目中选出21个开源项目”,值得学习!

中文版:百里挑一:21个优质Swift开源App

原文链接:21 Amazing Open Source iOS Apps Written in Swift

BluetoothKit – iOS 蓝牙工具封装库

@开源小组分享的一款 iOS 蓝牙工具封装库——BluetoothKit,让你更容易地操作蓝牙。

微信 Tinker 关于 Android 热修复直播分享

来自 腾讯 DEV CLUB 微信直播群,整理发布于diycode

这是微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录,感兴趣来这里看看。

StyleImageView – Android滤镜库

程大治DEV写了一个Android滤镜库,可操作ImageView/View Background/Drawable/Bitmap,支持动画(差值器监听器套餐可选),可导出Bitmap。项目地址:StyleImageView.

知乎和简书的夜间模式实现套路

@D_clock爱吃葱花通过逆向分析得到简书和知乎夜间模式实现套路,汇总成文。点击这里查看。

Get Started with Clean Swift

@请叫我汪二在微博上推荐的网站 – CleanSwift,有几篇文章写得不错。

_
这期的 fir.im Weekly 就到这里,投稿请联系 dm[at]fir.im ,

欢迎分享更多的内容。


开源无人机“大事件”:ArduPilot脱离Dronecode始末

$
0
0

开源无人机“大事件”:ArduPilot脱离Dronecode始末

2016-09-23 19:30 赵青晖

无人机产业的发展之快速我们已经说过千万遍,关于世界著名品牌的报道也写了数不清的篇幅,无人机之所以能够快速被普及,很大程度上得益于“开源飞控”的发展,然而这个“幕后英雄”我们却很少在关注。

最近,开源无人机圈子里发生了一件大事——目前最活跃的开源飞控项目ArduPilot脱离了开源社区联盟Dronecode,雷锋网(搜索“雷锋网”公众号关注)觉得值得言说一番,于是找到了Dronecode中国区负责人斯东了解了整件事情的来龙去脉。

开源无人机“大事件”:ArduPilot脱离Dronecode始末

Dronecode基金会

随着无人机产业的发展,衍生出了不少开源无人机社区和管理机构,一年前,最大开源无人机项目Dronecode基金会成立,该基金会管理了两大开源无人机项目:ArduPilot和PX4。

ArduPilot是2007年由DIY无人机社区(DIY Drones)推出的飞控产品,是当今最为成熟的开源硬件项目,也就是开源无人机圈子里常说的APM(ArduPilotMega)飞控。

开源无人机“大事件”:ArduPilot脱离Dronecode始末

PX4源于是苏黎世联邦理工大学计算机视觉与几何实验室、自主系统实验室和自动控制实验室研发的一个软硬件开源项目。

这两个开源项目均归属Dronecode管理,其实不止这两个无人机开源项目,目前很多开源项目都在基金会下管理,比如IBM的openpower、Linux基金会等等,这是开源社区运营模式的一种趋势。

Dronecode基金会采用了会员制,使用Dronecode代码的且为项目贡献比较大的(包括代码和资金支持),会按贡献级别成为会员。

根据斯东介绍,Dronecode所得赞助资金均为两个项目共有,用于开源项目的开发、维护和提升。

“成员把赞助费放到基金会里面去,就算他们不使用ArduPilot,ArduPilot的成员还是可以从基金会中获取经费,反之一样。”

冲突

其实在早前,两个项目就有了一些分歧,一个更偏向于个人用户,一个更偏向于商业和实验用途。

ArduPilot是GPL V3协议,而PX4是BSD协议,所以商业公司更喜欢后者,比如高通、英特尔等都偏向于PX4。

下面是一段关于两个协议的简单介绍:

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

GPL协议和BSD等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。

简单来说,使用GPL V3协议的开发者必须将自己的代码公开,贡献给开源社区的所有成员,而BSD则不需要公开代码,这也就是为什么商业公司都更青睐PX4,因为公开代码对于商业公司来说会损害他们的利益。

开源无人机“大事件”:ArduPilot脱离Dronecode始末

刚刚发布的GoPro Karma无人机使用的就是基于PX4开发的

比如亚马逊要用ArduPilot为基础开发快递无人机,那么他们的代码就要全部公布出来,这样对于竞争极其不利。

根据ArduPilot官方的公告表示,Dronecode目前的规章制度和发展方向都是围绕更重要的客户来搭建的,他们认为这些“大客户”虽然为Dronecode带来了很多的资金支持(会员赞助费),但也一定程度上影响了整个基金会的发展方向,Dronecode的发展战略会越来越倾向于PX4,这对于ArduPilot是不能接受的。

离开

2016年8月,ArduPilot负责人Philip Rowse向Dronecode内部发送了一封邮件,公布了ArduPilot即将离开Dronecode的决定。

雷锋网了解到,这件事情的导火索是,Dronecode方面发布了一封内部公开信,想要每半年做一个发行版提供给组织成员(外媒资料说是要以PX4飞控代码为基础发开发发行版平台,但Dronecode中国区负责人斯东向雷锋网透露,Dronecode是想两个平台一起做,就像Android每年升级一个版本一样,有利于其他厂商可以更方便的跟进协作),但这对于ArduPilot来说,研发成本有些高,而且意义不大。

“之前是随意更新的,按功能发布。其实Chris(指Dronecode的创始人兼主席Chris Anderson)是更想推ArduPilot的,可是因为协议问题没有办法。”

对于此事,斯东表示:没有什么利益冲突,ArduPilot退出其实是双方满意的结果。ArduPilot确实是目前用户体验最好的开源飞控,但是GPL V3开源精神是一个死结,导致其在商业化的角度上障碍重重,商业化路难行就意味着资金难以取得,也很难推动开源无人机的发展。

开源产业

以上就大致是这次事件的全部来龙去脉,对于大众来说,开源无人机似乎从来就没有走进过大众视野,这次ArduPilot脱离Dronecode的“大事件”似乎也没有惊起业界多大的波澜。

开源无人机“大事件”:ArduPilot脱离Dronecode始末

据了解,ArduPilot在Dronecode创立之初就以核心地位存在,而随着“开源精神”和“商业利益”的冲突,导致这个“核心”即将剥离,这也让人不禁思考,这两者到底谁才更符合发展规律。

ArduPilot“开源精神”的初衷不容置疑,他们是想坚持初心,给广大的使用者提供完全开放的开源技术平台,所以这次离开Dronecode似乎无可厚非。ArduPilot平台近十年来积累的开发者人群十分可观,目前看来是多于PX4的,其论坛的活跃度也久居沉淀,不至于因为脱离组织而受损,雷锋网认为,“脱离”对他们来说并非是一件坏事。

而对产业界来说,PX4的项目获得了英特尔、高通等巨头的支持,在资金和资源上会有更多的富余,发展会更加顺畅,更加有利于推动开源无人机产业的发展。对于想要长远发展的中小企业,选择PX4看上去会更有前景。

唯一让人遗憾的是,以后可能看不到ArduPilot和PX4的合作了,客观来说,这两个开源项目都各有利弊,一直以来都是互相合作,取彼之长补己之短,让开源项目更具活力,此次如若ArduPilot脱离之后即中断与PX4的合作,难免让人有些遗憾。

分享:

文章点评:


为什么你觉得只开发微信号是不行的?

$
0
0

为什么你觉得只开发微信号是不行的?

在《别开发 app 了》和《微信小程序的一些细节》这两篇文章的留言里,你能找到很多质疑的声音,比如:

  1. 把产品交给微信,万一有一天微信挂了怎么办?
  2. 小程序(应用号)的体验没法和原生 app 比,开发 app 肯定依然是主流。
  3. 开什么玩笑,等你做大了,腾讯就把你封杀了。
  4. 你丫是微信的托吧,写这样的软文。

这些质疑有道理吗?都有道理。我没有做深入调研,不知道这些评论者的职位和背景,但可以肯定一点,他们没有站在商业的本质上思考问题。

博客

创业的本质是生意,获利是目的

尤其是当我们还比较年轻时,很容易被媒体或一些书上讲的,「创业就是要改变世界」这句话吸引,觉得创业,尤其是互联网创业,是多么高大上的事,心里面想着,这个世界太糟糕了,我要用我的双手去改造它。

屏幕快照 2016-09-26 上午5.41.52

但深想一下,和你同样觉得这个世界糟糕的人有多少?有多少人愿意享受你的改造?你确定你做的事能满足你目标用户的需求?有时可能我们连目标用户都没定义清楚。

创业就是做生意,做生意就是为了挣钱,挣钱是为了回馈股东。很多时候,创始人就是大股东,所以创业本质上就是想通过以小博大的方式赚取财富。投资机构也是这么想的,所以你很难看到 VC 们投资那些阳春白雪的、增长得慢的企业。

当然,也有企业创立的目的是为了「改变社会」,比如社会企业。社会企业的利润中的绝大部分不会回馈给股东,而是用来解决社会问题。也有 VC 投资社会企业,我 8 月份在美国就看到美国的社会投资发展得很好。但我们必须承认一点,「社会企业」和「公益组织」是企业机构里的极少组成部分,大多数企业都是纯粹为了攫取利润。

所以,改变世界是创业的手段,不是目的,我们只是想攫取更大的利润,于是顺便或必须改变世界,而已

获利,要寻找最佳的入口

开餐馆,大多数人会选人流多的地方,因为人流多的地方是餐馆最好的「入口」。如果要开一个卡丁车场,会选择租金便宜的地方,因为这样才能降低成本,租金便宜的地方,是卡丁车场最好的入口。

美团,开发了美团 app,开发了各个平台上的美团 app,是因为这些 app 是用户使用美团生活服务的入口。

互联网创业也好,传统生意也好,都在寻找性价比最高的入口,来获客,或获取用户。

从这个角度去思考,做一个 app 还是做一个微信号,判断标准就不是原生 app 还是微信号的体验更好,而是用哪个作为主要的入口,能降低成本或者能获取更大的利润。

在《别开发 app 了》这篇文章我已经列举了创业团队优先或只开发微信号,相对开发一个原生 app 的好处:

  1. 更低成本地接触到用户
  2. 推广成本更低
  3. 推送到达率更高
  4. 开发成本更低
  5. 符合精益创业的理念

从这些角度做简单的对比,就很容易发现,如果我们想以更低的成本建立入口,开发微信号,比开发 iOS 和 Android app,是更优的选择。

我并不是说微信公众号是最好的,但它是当前大多数创业公司的最优选择。

哪个平台都不是永恒的

就像创业要不断跟着市场的需求的变化而变化一样,

最优的入口,也是一直的变化的。

8 年前,还没有 App Store,iPhone 还没那么火的时候,没有那么多人相信,智能手机可以作为各种服务的入口,如果再回推 10 年,在 PC 软件盛行的年代,也没有那么多人相信,浏览器可以作为入口。

入口一直在变化,可能 3 年后,会出现更好的智能设备,替代了手机,到那个时候,作为创业者,很显然是要顺应这个趋势,在这个新的设备上建立入口。

当我,或者跟我有相似观点的人,推荐创业要先开发微信号时,我们都是站在「当前最优解」的角度去评价的。

我不会推荐你基于支付宝开发服务号,不是因为我觉得支付宝经常玩糟糕的营销,而是因为支付宝的用户停留时间太短。如果有一天,出现了一个比微信更优的入口,我照样会推荐我身边创业的朋友去这个新平台上建立入口。

没有哪个平台是永恒的,如果现在还抱着原生 app 的体验更好这个角度去创业,绝对不是最优解。

风险,在任何平台都有

有人说,基于微信开发产品,把数据都交给腾讯,万一有一天腾讯把我封杀了怎么办?

说实话,你还真不能怎么办。

这种风险是切切实实存在的,比如我有不少朋友,比我更早相信「不用开发 app」的朋友,都被微信封杀过,有被限制 URL 的,有被关小黑屋一个月的。

其实任何平台都有风险,我们不妨从三个角度去看。

平台和 app 们一样,都是商业公司

从前面的论述,很容易推导出来:

我们创业、做生意,是为了从满足客户需求的过程中盈利。平台,无论是 App Store 也好,微信公众平台也好,是为了满足开发者们的需求,并从这个过程中盈利。

本质上,都是为了盈利。

试想一下,为什么微信要推出小程序(应用号)?

  1. 微信已经推出了订阅号和服务号
  2. 但这两种号,没法满足技术复杂度更高的产品的需求
  3. 这些技术复杂度更高的产品可能因为平台无法满足他们的需求,他们依然选择开发原生 app,或使用别的平台
  4. 作为一家商业公司,盈利是目的,垄断是终极目标,理所当然要想方设法满足这些没有被满足的需求
  5. 因为当这些需求被满足了,微信的用户就能更长时间「呆」在微信里
  6. 在微信里「呆」更长的时间,微信的盈利方式就可以更多
  7. 从而实现更大的垄断

所以,本质是,一个公司去做一个平台,和一个公司去做一个独立产品,出发点是一样的。

我们必须理解平台的本质,才能与平台和谐相处,除非你不想在这个平台上建立入口。

风险存在于每个平台

风险不仅存在于微信,在 App Store,也有随时被苹果下架的风险。

  1. 比如,360 安全卫士曾经因为使用私有 API,被苹果下架。
  2. 又比如,喜马拉雅 FM、荔枝 FM 等曾经因为「恶意刷榜」被苹果下架。
  3. 再比如,一款叫 Vidyo 的录屏软件,因为使用了苹果不允许的技术录屏,被永久下架。

第二个案例,就和我们经常听到的某某公众号因为「诱导分享」被微信封禁一样,有时候封禁是一段时间,有时候则是永久。

当我们选择在某个平台开发产品,意味着我们相信这个平台是最好的入口,但不能忽略的是,每个平台都有自己的规则,虽然没有咬文嚼字地写明,但 App Store 会封杀这样的应用:

  1. 违规推广,比如刷榜
  2. 侵犯版权
  3. 内容违规包括涉黄、涉赌等
  4. 与苹果自己的产品相冲突
  5. 存在程序漏洞

作为对比,你也可以在微信公众号的投诉菜单里看到,微信不愿意看到这些公众号:

屏幕快照 2016-09-26 上午6.01.10

不记得从哪一年开始,苹果不再允许推荐 app 的 app 上架,因为它不希望在 App Store 之内出现另外一个 App Store,这是和苹果的产品冲突的,也极有可能,会侵害苹果的利益。

我相信,如果你开发一个微信号,与腾讯的某个业务严重冲突,腾讯也会封杀你。

这就好比你在一个商场租了一片地想开咖啡馆,刚好旁边是场地自己开的咖啡馆,它要么想办法和你共赢,要么把你干掉。

这些,都是无可厚非的,所谓的「公平」,只是利益规则内的公平。

平台不是给开发者打工

当我们选择基于某个平台开发产品时,我们应该默认遵守这个平台的规则,因为这样能确保我们在这个平台能生存下去。

平台不是给开发者打工,而是在规则之内寻求共赢。

不可否认,微信平台有不少规则是存在灰色地带的,在灰色地带里,似乎微信选择了「人治」,而不是明确规则,好处是能够避免一些人钻规则漏洞,你知道,中国人都很聪明,坏处是,那些没「那么坏」的开发者,很容易被误伤。

这一点我认为微信有可以改进的地方,但可能我不能提出更佳的解决方案。

总是,创业有风险,选择平台作为入口也有风险,都无法避免。

有时候我们只是习惯稳定,不愿意尝试

对大多数人来讲,「改变」总是困难的,「安于现状」总是最保险的选择。

这样的思维,很容易让我们错失机会。

有一个经典的例子,柯达。

kodak_officially_bankrupt_01

柯达,用过胶卷相机的人,都知道这个品牌。2012 年,柯达申请破产,虽然 2013 年后,柯达重组了公司,品牌保留了下来,但业绩和以前已经无法比拟,用数码相机的人,甚至已经不知道柯达这个品牌。

柯达错事了数码摄影。

但很少人知道,其实数码相机是柯达发明的,1975年,柯达应用电子研究中心工程师史蒂芬·沙森开发出了世界上第一台数码相机。这台数码相机以磁带作为存储介质,拥有1万像素。记录一张黑白影像需要23秒。当时,这台「手持式电子照相机」的出现颠覆了摄影的物理本质。

然而,发明了数码相机的柯达并不坚定地相信数码摄影是未来的趋势,它选择了「稳定」,因为胶卷是公司赖以生存的现金来源,虽然公司内部有人想推动的数码摄影业务,但柯达始终在这两个方向上摇摆不定,从而错过这个最好的转型时机。

屏幕快照 2016-09-26 上午4.51.30

其实,诺基亚、微软也是如此,相信大多数人对诺基亚的故事都不陌生,本来是手机大鳄,错过了和苹果交手的机会,也错过了 Android 的第一趟列车。但可能你没有看过 2007 年,当初代 iPhone 推出时,时任微软 CEO 的鲍尔默在接受采访时不断耻笑苹果,觉得 iPhone 是「垃圾」,比如他在采访时就说到:

Hahahah, Who the fuck wants a $500 device without keyboard?

举这两个例子,是想说明一件事,我们过去 7-8 年,一直在开发 iOS 和 Android app,我们已经习惯了这样一种稳定的状态,尤其是工程师们,沉浸在这两个平台的开发里,很容易就产生像鲍尔默那样的言论,什么?开发微信号?开什么国际玩笑?

并不是说,开发微信号总是好的,但从心态上,我认为我们应该保持好奇心,永远敢于尝试新事物、迎接新趋势。

互联网产品开发的速度很快,迭代也很快,去试一试死不了人,但不试一下,你可能真的就落后了。

没有那么多红利期

「红利期」这个词,似乎在新闻报道里出现得越来越多。财经新闻如此,科技新闻也如此。

比如上周微信小程序刚刚开始内测,各个媒体就纷纷报道,这是「红利期」,现在去开发微信小程序,第一批上线,肯定能获得红利。

我不这么认为。我认为红利只存在于我们看不到的地方,

看到红利的人多了,自然就没有红利了。

订阅号上线时,没多少人认为最早一波做订阅号的人有红利,但现在回头来看,这波公众号获得了大量的粉丝,一个群发头条广告费可能就数十万。

渐渐地,微信平台火了,微信的活跃用户也接近 10 亿了,于是这些错过了订阅号的红利期的人,就认为微信的每一步动作,都能带来红利期。

你想想,现在有多少人、多少公司正在开发微信小程序?估计不会比正在开发 iOS app 的少,当这么多人同时都认为这是红利时,每个人能分到的红利能有多少?

我特别相信中国那句老话,「闷声发大财」,一句话也不说,自己摸索出真正的红利,那是最好的。

Large1

另一方面,微信小程序也好,未来有的其它平台也好,对每个人来说,将越来越公平,因为大家将越来越懂得怎样做平台,以及怎样和平台融洽相处。而且,平台也逐渐懂得,如何让每个参与者公平竞争。比如虽然「有可能学院」拿到了微信小程序的内测,但是,所有的内测者程序上线的时间和所有人是一样的,这一点在微信的官方文档里被写明了。

所以,别听太多媒体鼓吹红利期,当媒体都在鼓吹时,它肯定已经不是红利。服务跟不上,运营跟不上,你做个 app 做个微信小程序都只是摆设。

创业者应该如何选择不同的平台?

创业不等于做一个 app。

大多数互联网创业,都是以 app 作为手段,为用户提供服务。如果我们能找到别的方式,同样低成本地提供服务,那开发 app 并不是必须的。

对于不同类型的产品,在选择开发原生 app、服务号、小程序之间,我有这些建议:

原生 app

考虑到原生 app 的开发、推广成本较高,游戏类、高粘性的社交类产品,依然适合开发原生 app。

工具类等对技术、对系统接口、对流畅性比较依赖的产品,比如地图,比如幻灯片制作工具,依然适合开发原生 app。

超高频使用的产品,也适合开发原生 app。

订阅号

订阅号只适合需要高频度给用户群发消息的产品,比如媒体。

服务号

服务号的接口比较丰富,用户使用频度不是特别高的服务型的产品,开发服务号是最佳选择。打车、外卖、团购等,都适合开发服务号。

通知类的产品,也适合开发服务号。因为服务号可以用「模板消息」,比如你刷卡后收到了银行服务号发来的通知,就是用的「模板消息」接口。

小程序

其实很多人没有仔细阅读小程序的文档,仔细阅读完之后,你会发现,小程序在某些地方的限制,比服务号还要多。

比如从目前的文档来看,小程序无法给所有用户群发消息,「模板消息」也加了新的限制 — 只能发给 7 天内有互动的用户,但服务号基本上可以随时给用户发送「模板消息」的。

小程序内测当天,张小龙在朋友圈这样定义小程序:

小程序是一种不需要下载安装即可使用的应用,它实现了应用「触手可及」的梦想,用户扫一扫或者搜一下即可打开应用。也体现了「用完即走」的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。

从这句定义可以简单猜测:

  1. 小程序可能没有「关注」功能,也就是意味着,你可能没有固定的粉丝。
  2. 用完即走,这更多地是对工具类应用进行描述时的用词,微信可能更鼓励开发工具类小程序。

我没有和微信团队的人进行太多沟通,但我对我的猜测比较自信,如果猜测准确,那么:

查询类、工具类、非高粘性的产品,适合开发小程序。其它的,可能选择服务号依然是更佳的选择。

你看,这么一简单的分析,「红利期」就至少被打掉了一半。

总结

并不是因为我多么喜欢微信,也不是因为我们推出了「微信公众号与小程序开发」培训,就鼓吹大家优先开发微信号,腾讯没有给过我任何好处,而是我从多个角度去思考,认为基于微信平台去开发,是当前的最优选择,尽管微信平台并不完美。

本质是,创业就是做生意,做生意就是为了挣钱,互联网创业和开个餐馆,目的是相同的。做生意就要顺应变化,寻找利益最大化的路径。至于这条路径是通过做一个 app 来实现,还是做一个微信公众号,是需要根据当时的利弊判断的。

微信也有可能衰落,但平台一直会有,对于创业者来讲,必须与时俱进,选择一个性价比最高的平台,在这个平台上建立入口。平台本身也是商业公司,要想在平台上盈利,学会和平台相处并共赢也是必须的。

红利期没那么多,也并不是没有,当有了新的平台,我们首先要敢于去尝试。


最后一次谈房事

$
0
0

文/感悟生活

  这极可能是我十多年来几十篇有关房地产文章的最后一篇,因为该说的都已经说了,多说也是无益,而且预期房产泡沫大破灭的日期越来越近,根本不需要我重复再说这件令人不快的事,又或许能让我公开写文章对中国经济走势做出危言耸听般预测的的时间已经不多了——当真的经济危机临近时,舆论管制必十分严厉,响彻云霄的必是形势一片大好的赞歌,绝不容许发出任何一点点杂音。
  一、过去主要观点的简要回顾
  过去10多年来,我写了大量有关房事的文章,主要批评土地财政把中国经济引入歧途,分析推动房价不断上涨的内在原因,同时对未来房价短、中、长期走势做预测。早期我的文章发在两个财经股票论坛上,现在连同被关闭的论坛一起消失不见。后来我注册了新浪博客和凯迪会员,就一直在这两个地方发帖,存活下来的文章还有几十篇。
  这么多年辛苦写下这么多与房地产有关的文章,令我非常自豪的有两点:
  一是准确分析地推动房价持续上涨的两大主因:地方政府的土地财政依赖和中央政府的滥发货币。不管各路专家和政府官员们如何忽悠,我极其准确地预测到了政府在房地产方面的政策取向,十多年来不厌其烦地明确指出:房地产是中国崛起不可或缺的伟哥,几年前更成为负债累累的地方政府生死攸关的收入来源,同时又是年年入不敷出的中央政府滥发货币的蓄水池和遮羞布,并彻底绑架了整个中国经济,因此从中央到地方各级政府必定动用各种手段确保房价不断上涨。我同时也对推动房价上涨的其他次要因素做了简单分析,包括财富分配均不公平,而高收入人群和贪官的投资渠道有限;没有契约精神的社会租房无法安定生活,因而居民购房欲望强烈;房价持续上涨产生的财富效应,势必吸引各路资金进入助推房价。
  二是准确地预测到十多年来房地产的短、中、长期走势,甚至每次房价技术性调整的起始和结束时间我都做了极精确的预测。我在10多年前就明确提出房价长期看涨,会以振荡上升的形态一直涨到2020年前后才会全面泡沫破灭,中间每次技术性调整之后会迎来更猛烈的上涨;每当较大的房价技术性调整即将到来时,我都会提前半年到一年时间做出分析,预测调整的起始和结束时间,以及本轮调整的最大下跌幅度,事后证明我的判断是极其精准的。如果有人认为我用词夸张、狂妄,可查看我前以前公开发表的几十篇文章来一一验证。多年来我也公开呼吁有钱的朋友要紧跟政策,与狼共舞,抓住每次房价技术调整即将到位的时机,通过买房投资实现个人财务自由,并自己身体力行,在北京、上海购置了多处住宅房产。
  可以自豪地讲,十多年来,本人虽然人微言轻,但对房地产市场走势做了非常精准的分析、预测。我甚至可以更狂妄地讲,中国无数的专家、学者、官员和业内人士,极少有人像我这样写过这么多文章、做了这么精准的预测。这绝不是我比他们更有学识和专长,更不是我比他们掌握了更多的资料或内幕信息,原因只有一个:我深知中国的快速崛起除了炒地皮和印钞票,没有其他的捷径可选择,明知会对中国经济造成长期的伤害,但以现行体制的决策思维一定会饮鸩止渴,而我作为一名私营企业的打工者,既不用拍政府的马屁又不想讨好一厢情愿的愚民,可以无所顾忌地说出仅靠常识就能做出判断的真相,而不必像他们一样天天说谎。
  二、未来房价短中期走势预测
  在本轮全国房价暴涨之后,我还是坚持十多年来的观点不变,即房价会一直涨到2020年前后才会泡沫破灭。在此之前,任何关于房价会很快崩溃的预测,包括国家会出台房地产税打压房价的传言,都是重复过去10多年来一厢情愿的胡言乱语,是典型的不懂中国国情的愚昧表现。
  我在2014年7月10日所写的《房价还会涨6年,买卖时机因人因地不同》一文中,详细分析了房价涨到2020年前后泡沫破灭的原因,现在这个时点就变成了房价走势的中期预测:
  1、严重脱离居民收入和经济增长水平的高房价,到时差不多榨干了普通百姓的每一滴血汗,需求会急剧萎缩;
  2、在2020年后,全国人口会快速萎缩;
  3、严重的通货膨胀加上高失业率,会严重削弱政府的管治能力;
  4、即使再强大的政府也不可能完全操控市场,市场规律终究不以人的意志为转移。
  文章链接如下:
  因为2020年距现在已经不到5年,因此对房价长期走势的分析已经没有意义。就房价短期走势来讲,本轮房价暴涨,预计在2016年底结束,明年1年度末开始新一轮技术性调整,届时定会像过去十多年每次房价技术性调整一样利空消息满天飞。本轮房价调整,伴随实体经济的下滑,全国平均房价会下跌20%左右,少数本轮房价暴涨过头的二、三线城市下跌幅度可能超过30%,一线城市和少数二、三线热门城市的房价虽然仍十分坚挺,但下跌幅度也会达到10-15%。
  房价经历差不多一年半时间较为剧烈的调整之后,叠加中国四面楚歌的国际环境造成的进出口下降和外资撤离,政府必定无法忍受经济的持续恶化带来的社会稳定隐患,被迫再次启动滥发货币为主要手段的经济刺激政策,导致房价的最后一次暴涨。考虑到政策效应的滞后性,起涨时间大约在2018年三、四季度。这最后一次回光返照,届时从低点反弹到最高点,全国平均涨幅在30%左右,绝大多数地区的房价会创新高,一线城市和少数二、三线城市的房价会比现在上涨超过50%。
  我必须再次郑重提醒,下一轮2018年三、四季度到2019年间房价的再一次暴涨,是中国房地产市场最后的晚餐,之后将迎来房产泡沫的大破灭。经历短暂而惨烈的暴跌之后,中国房地产市场将进入20年甚至更长时间的漫长阴跌,而且成交量会极度萎缩。在房产泡沫大破灭时,全国房价极可能从最高时的顶峰下跌超过50%,不但对中国经济杀伤力巨大,而且对个人财富的再分配和社会稳定会造成较大影响。
  三、未来几年房产投资的建议
  在很快到来的房产泡沫破灭的大变局中,受冲击最大的无疑是中产阶层,穷人本身就一套房子,跌与不跌跟他们关系不大,拥有大量财富的富人资产的大幅缩水也只不过账面数字变小的游戏,而中产阶层打回原形变成赤贫,则彻底颠覆他们曾经拥有的小资生活,极可能造成个人及家庭成员的终生痛苦。
  就像股市暴跌之前的最后一轮上涨,整体而言房价的上涨到了鱼尾阶段,虽然味道最是鲜美,但极可能被鱼刺卡住喉咙。
  在两年前,我就开始提出房产投资已经不再有遍地黄金的机会,应主要集中于北上广深等一线城市和部分二、三线城市。今天,我必须进一步缩小未来可进行房产投资的区域,除了北上广深,可投资的城市萎缩到只有过去3年来常住人口持续增长或是房价处于相对洼地的二、三线城市。这个名单在我看来已经屈指可数,它们是:北京、上海、深圳、广州、杭州、苏州、济南、珠海、郑州、武汉、长沙、重庆、成都、合肥、廊坊等
  就我自身而言,因为北京、上海限购的缘故,我以妻子父母名义购买的最后一套住房的房贷还没有还完,不要说我已经没有购房的经济能力,即使我有这个能力,肯定不会再买房投资。如果上海、北京的房价再上涨20%,我会毫不犹豫地出售一半房产,然后逐步兑换成美元,存放在外资银行中,不排除购买外资理财产品,以备不时之需。如果房价在今天基础上再上涨50%,我会保留一套自住房,将北京、上海剩余房产全部抛售,然后想办法兑换成美元;如果2020年以前房价在现在基础上再上涨80%,我会把惟一的住房也抛售,到时租房居住。
  需要特别提醒的是,考虑到房产泡沫破灭时,必然伴随着人民币汇率的大幅贬值,同时国家必然严厉控制外汇兑换,因此卖掉房子买美元的计划必须稍稍提前实施,不要期望房子卖在最高点,同时人民币汇率也在最高点——实际上人民币贬值趋势已经形成并不可逆转,要防止到时换不成美元,或换汇成本畸高,反而得不偿失;最怕手上人民币换不成美元,差不多就是抱着废纸一堆。未来人民币变成日元和韩元,并非完全没有可能!
  在我准备出售自己的房产时,我会在这个帖子上留言,让网友们做一个见证。我必须郑重声明,我并非专业房地产投资人士,因此无法对全国各地房产市场有深入研究,虽然过去十多年来我对中国房产市场做了十分精准的预测,但极可能最后这一次偏偏发生了重大错误——如果房价再涨10倍,让读者诸君失去了投资房产的大好机会,或者过早抛售房产损失了巨大利润;或者房价本轮调整后一跌不回头,再也没有下一次上涨逃命的机会;或

技术周刊 Vol.7 –【iOS丨好好学习,从娃抓起~】

$
0
0

我有一程序员朋友阿温,92 年,高个子,体型偏瘦,平时不善言辞,比较低调。最近,阿温家小娃出生,让他当了一回公司的热议人物。

事情是这样的,那会儿大家都还在睡午觉,只听阿温一声猝不及防的喊声,接下来便是以迅雷不及掩耳之势跑了出去,留下被惊醒群众一脸懵逼。向来稳重的他,今天如此异常的行为引来了不少同事的关注,群里有人开始调侃是不是预定的 7 到了,也有人说是不是手机刷 iOS 10 砖头了……但事实的真相,在之后的一个小时都没有得到当事人阿温的亲自证实。

「还在高速,结果娃已经……」阿温突然在群里发了言,打破了公司群的宁静。

「儿子比手机先到啊」阿温先生紧接着又发了个言,原来本该 10 月中旬出生的娃,提前来到了这个世界。

「你还惦记着手机- -」测试大妹子忍不住骂道。
「儿子生气了,要提前出来……」前端大哥笑着附和。
「升级了啊!」移动端小哥为荣升为爸爸的阿温送上恭喜。
「阿温,公司 10 后程序员就靠你~」CTO 正儿八经地说着笑话。
……

「可以开个程序员从入门到育儿的课程了」运营妹子也加入了这热闹的讨论,并贴心地抛出了几篇 iOS 入门指南,吓得我的朋友阿温再也不敢在群里发言了。

iPhone7 上市,iOS 10 发布,运营妹子都说了编程要从小娃娃抓起,就顺势接个招,分享一些和 iOS 相关的知识。本期周刊,内容包括 iOS 的入门知识、进阶演练,并配有系列学习,也为大家整理了在 iOS 开发过程中经常会遇到的问题及解决方法,最后还会和大家分享部分 iOS 开发过程用到的工具,比较齐全的 iOS 汇总资源

(﹁”﹁)希望此时的你已习惯刚升级的 iOS 10~

iOS day day up

此部分将和大家分享 iOS 入门及进阶的一些知识,另有 Auto Layout,自定义控件等特辑的学习,希望能让你的 iOS 学习 day day up~

入门

进阶

系列学习

扩展阅读

问题解决篇

get 了比较基本的 iOS 学习知识,并通过不少实例来巩固了一下基础,但 iOS 开发之路上,还是有那么多坑需要填,以下是社区小伙伴躺枪后吸取教训,并找出的一些解决方式,希望你能够少走弯路,多点成长。

工具类及资源汇总

最后,为你带来了提高效率的工具篇,进一步扩展知识的学习资源汇总,希望能更好地帮助到走在 iOS 开发路上的你~

工具类

资源汇总

(本期完)


往期周刊传送门:


React.JS Top 10 Articles in September

$
0
0

React.JS Top 10 Articles in September

React.JS is a JavaScript library created by Facebook. It is most commonly used in web and native mobile app development.

Mybridge AI evaluates the quality of content and ranks the best articles for professionals. In September 2016, we’ve observed nearly 1,500 new React.JS articles and picked the Top 10 (only 0.67% chance to be included in the list).

Hopefully this condensed list will help you avoid poor quality articles, and read and learn more productively in the area of React.JS.

This list is specific to React.JS and React Native. For those who looking for JavaScript, Angular 2.0, Web Development, Python, Machine Learning, CSS, Swift… Visit the publication.

Rank 1

You Might Not Need Redux. Courtesy of Dan Abramov, the creator of Redux


Rank 2

How To Scale React Applications. Courtesy of Max Stoiber, the creator of React-Boilerplate


Rank 3

Introducing React Native Elements. Courtesy of Nader Dabit

…………………….[Open source on Github: 2,439 stars]


Rank 4

Building a React Native App for 80 Million Users — Wix Engineering


Rank 5

React Native: Things I wish I knew before starting out.


Rank 6

First impressions of React. Courtesy of Remy Sharp


Rank 7

Introducing React Game Kit. Courtesy of Emma Brillhart


Rank 8

Netflix JavaScript Talks — RxJS + Redux + React = Amazing! Courtesy of Jay Phelps, Software Engineer at Netflix


Rank 9

Creating a Realtime Pokedex App with React and RethinkDB


Rank 10

The new GitHub GraphQL API : What every developer needs to know about GitHub’s new API. Courtesy of Jonas Helfer



CHIP GSM and GPS – a Cheap Linux Mobile Platform

$
0
0

CHIP GSM and GPS – a Cheap Linux Mobile Platform

http://rabarar.github.io/blog/2016/08/06/chip-gsm-and-gps-a-cheap-linux-mobile-platform/

AUG 6TH, 2016 5:40 PM | COMMENTS

Configuring C.H.I.P. to go Mobile!

I recently received my $9 NTC CHIPs and decided a cool use of the tiny server would be to mate it up with the Adafruit FONA 3G Cellular Breakout and Adafruit FONA 2G Cellular and GPS Breakout to test using both GPS and GSM GPRS via ppp on the CHIP.

Turns out you can’t use the ppp out of the box on the CHIP as it’s not part of the kernel. Depending on which flash you use, you might not even have USB-Serial support (via PL2303 or FTDI USB-to-Serial cables).

So, roll up your sleeves and let’s build us a new kernel! At first blush, this sounds far more daunting than it should. Having been a Unix kernel hacker for far too many years than I’d care to admit, today’s modern kernel build environment takes a lot of the sting out of configuring and building your custom kernel.

Kernel hacking

We need to start by setting up an environment and pulling a code base to allow us to configure and build our kernel

– Build environment:

The build environment will consist of setting up a vagrant environment for the CHIP-SDK. There are great directions for doing so on the CHIP Documentation site. Take a look at these instructions on setting up the CHIP-SDK vagrant vm.

Before you grab the source, you might need a few tools to make your vm ready to rock and roll. Specifically, add the following with your favorate package manager:

1
2
3
apt-get install git build-essential \
 fakeroot kernel-package zlib1g-dev \
 libncurses5-dev lzop

and

1
2
apt-get install gcc-arm-linux-gnueabihf \
binutils-arm-linux-gnueabihf

Once the vagrant machine is setup, clone the CHIP-linux source onto the machine into a working directory, say CHIP-linux

1
2
cd /home/vagrant
git clone https://github.com/NextThingCo/CHIP-linux.git

Next, check out the debian NTC release…

1
2
cd CHIP-linux
git checkout -b debian/4.3.0-ntc-4 origin/debian/4.3.0-ntc-4

Now you have the source, and the tools, and are ready to roll. But before you start the build process, we might want to start with our baseline config from our existing CHIP. This isn’t a requirement, but it will allow you to either add to or subtract from a known kernel configuration.

To grab your config file, simply:

1
scp root@chip.local:/boot/config-4.3.0 .

You might run into problem or two here depending on your CHIP Linux configuration. One, you may not have a root password! You might need to set that. Secondly, you might not have configured sshd to allow root login. Be sure you’ve remedied both of these issues as we’ll use root login throughout the kernel build process.

– Configuring the kernel

To configure our kernel, we simply invoke the makefile with the following:

1
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- menuconfig

This will bring up an easy to use menu-driven application that allows you to select or delete items that you wish to have in your kernel.

Remember that config file that we copied over from the CHIP? Let’s load that as our starting point.

Now make the modifications that you wish to your kernel. In this kernel, I want to add ppp support as well as ppp async-serial support. I select both of those, and then save my configuration file as .config.

Before we actually save the configuration, it’s a good idea to mark your Kernel so you can easily verify you’re running the kernel that you built. To do that we add a Local Version marking to the kernel release. Under the following Menu item: – General setup – ( ) Local version – append to kernel release

Add a tag that marks your kernel. I use rb-2016-08-01.0 for example.

Now I’m ready to actually compile the kernel that represents the configuration that I just selected. To do so, simply run make as follows:

1
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -j n

where n is the number of cores that you have on your box.

Once the compilation successfully completes, you’ll next need to install the modules into a directory that we’ll use later to place them onto the CHIP.

1
2
mkdir /tmp/lib
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/tmp/lib modules_install

Add the RTL8723BS: This is not part of the CHIP-linux source tree.

1
2
cd /home/vagrant/CHIP-linux
git clone https://github.com/NextThingCo/RTL8723BS.git

And build it…

1
2
3
4
5
6
7
8
9
10
11
cd RTL8723BS

## Check out the Debian branch...
git checkout -b debian origin/debian

## Patch it...
for i in debian/patches/0*; do  echo $i; patch -p 1 <$i ; done

## build it...
make -j 8 CONFIG_PLATFORM_ARM_SUNxI=y ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -C /home/vagrant/CHIP-linux/ M=$PWD CONFIG_RTL8723BS=m  INSTALL_MOD_PATH=/tmp/lib
make -j 8 CONFIG_PLATFORM_ARM_SUNxI=y ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -C /home/vagrant/CHIP-linux/ M=$PWD CONFIG_RTL8723BS=m  INSTALL_MOD_PATH=/tmp/lib modules_install

Now that everything is compiled and built, you’re ready to copy it to your CHIP!

1
2
3
4
5
6
7
scp /home/vagrant/CHIP-linux/arch/arm/boot/zImage root@chip.local:/boot/vmlinuz-4.3.0rb-2016-08-01.1+
scp /home/vagrant/CHIP-linux/.config root@chip.local:/boot/config-4.3.0rb-2016-08-01.1+
scp /home/vagrant/CHIP-linux/System.map root@chip.local:/boot/System.map-4.3.0rb-2016-08-01.1+
cd /tmp/lib/lib/modules
tar cf - 4.3.0rb-2016-08-01.1+ | ssh root@chip.local 'cd /lib/modules; tar xf -'
cd ../firmware/
tar cf - . | ssh root@chip.local 'mkdir /lib/firmware/4.3.0rb-2016-08-01.1+; cd /lib/firmware/4.3.0rd235+; tar xf -'

Now to boot your new kernel, there are two choices.

The Easy Choice:

Simply copy the existing kernel so you have a backup

1
2
sudo cp /boot/zImage /boot/zImage.backup
sudo cp /boot/vmlinuz-4.3.0rb-2016-08-01.1 /boot/zImage

Should something go wrong with the new kernel and you can’t boot, you’re hosed. There’s another way.

The Complicated, But More Better for Ya Choice:

The more complicated, but far more flexible approach is to add a serial USB-to-Serial connector to the chip. You can use a PL2303 and connect it as follows:

1
2
3
PL2303 TX (white wire)      -> CHIP Pin 3
PL2303 RX (grey wire)       -> CHIP Pin 5
PL2303 Gnd (black wire)     -> CHIP Pin 1

And on your computer use screen to access the serial port:

1
screen /dev/ttyUSB0 115200

Keep in mind that the actual device name may change depending on what OS you are using. I use the linux device name. Also, pay attention to the digit at the end, it might be some number other than zero.

Before you connect the serial port, be sure to first copy the orgiginal kernel so you have a backup. And then shut down the CHIP before you connect the serial cable.

Once all connected (both litreally with the USB connector as well as the screen command), type a key to stop the U-Boot booting process and fall into a u-boot shell.

Now you can change the bootcmd and boot the kernel that you copied to the CHIP in the previous section. In this case, if there is a problem booting your new kernel, you can easily boot the backup kernel instead.

Wah Lah! You have successfully booted your new kernel!

If everything went as expected, you should be able to now connect your FONA 2g or 3g Cellular GSM breakout to a PL2303 and connect it to your CHIP. Be sure to use a lipo battery as well as a USB power source for your FONA. Turn it on, and verify that you can access the device.

Here again, I use screen /dev/ttyUSB0 to access the FONA. Verify that the PL2303 is accessable to the CHIP via lsusb and you should see the PL2303 signature. If you don’t see it, you likely didn’t configure your kernel properly to include the USB device.

But if you did read the directions carefully, and have the device, and are able to screen to it, you should be able to communicate with the FONA by sending it AT commands, and receive back from the FONA a response, like OK.

Make sure you’ve added the ppp package.

1
2
sudo apt-get update
sudo apt-get install ppp

If all’s connected, and you’ve successfully added the ppp package, you can now configure the ppp setup.

1
2
3
sudo -i
cd /etc/ppp/peers/
wget https://raw.githubusercontent.com/adafruit/FONA_PPP/master/fona

Now edit the file and change the MUST CHANGE items. There are essentialy two of them

  • The first one is the APN. In my case I am using Ting Wireless. The APN is wholesale
  • The second item to change is the serial device. Make sure the device name that is connected to the FONA is specified in the file. For example, /dev/ttyUSB0.

Save the file, and give it a go! To turn on and off ppp, use pon`` andpoff“` respectivly.

1
sudo pon fona

You can verify that it worked by looking for the interface. A successful ppp session will result in a device shown when you run ifconfig. If you run into problems, take a look at the log files for details on what went wrong. Common problems include forgetting to turn on the FONA device!

take a look at the ppp chat script in the syslog file:

1
cat /var/log/syslog | grep chat

If you successfully create your ppp connection and have verified it via ifconfig, try it out! simply ping a website of your choice.

1
ping yahoo.com

To get a feel for the speed of the connection, grab some data too:

1
wget www.yahoo.com

Once you’re done with your ppp connection, simply turn it off:

1
sudo poff fona


Internet Connected & Sensor Free Presence Detector with the C.H.I.P.

$
0
0

Introduction

chipmain

Lots of cool boards for makers and developers have been coming out, and the C.H.I.P. is one that boasts both built-in WiFi and Bluetooth. What really makes the C.H.I.P. standout, however, is that itonly costs $9.

You read that right.

So, this WiFi-based presence detector will only cost you $9. It’ll take you hardly any time at all, and you’ll suddenly have a base for triggering all sorts of things when someone is detected.

Project level: Beginner
Approximate time to complete: An hour or less
Cost: Less than what you paid for lunch (ok, maybe not for you but it's close)

In this step-by-step tutorial, you will:

  • connect to the C.H.I.P. for the first time
  • setup the C.H.I.P. without a monitor or keyboard/mouse
  • setup the C.H.I.P. to scan for devices on a WiFi network and use that to determine who is “home”
  • stream collected data to a web service you can access from anywhere
  • setup a “service” to run your script every time the C.H.I.P. boots up

 

Part 1. Equipment

Rachel edited this page on 15 Aug · 5 revisions

chipequipment

This is maybe the shortest (and cheapest) supply list I’ve ever written:

Stuff you probably already have:

On to setting up the C.H.I.P.!

Part 2. Setting up the CHIP

Rachel edited this page on 15 Aug · 2 revisions

I talked a little bit about the C.H.I.P. earlier, and all we’re using it for is it’s built-in WiFi and Python, but here’s a look at all the other stuff you could hook up to it:

chippinsboth

So many possibilities.

Another great thing about it is how easy it is to set up without ever connecting it to a monitor. This means that, while you can totally hook the C.H.I.P. up to a TV and game on it with a bluetooth keyboard, you don’t need those things to get it up and running.

Get that Micro-USB to USB cable ready – we’re connecting it to our laptops!

Part 2. Connecting to WiFi

Rachel edited this page on 15 Aug · 8 revisions

The entire reason the C.H.I.P. is awesome is it’s built-in WiFi, so let’s get connected!

First, connect the C.H.I.P. to your laptop with the USB cable. Communicating with the C.H.I.P. differs between Windows and Mac:

Mac

  • Open Terminal (or your console of choice) – Applications > Utilities > Terminal
  • Find the address of your USB port. This should output something like “tty.usbmodem1411”:
cd /dev
ls -ltr /dev/*usb*
  • Open a serial connection to the C.H.I.P. from the USB port using the address you just found:
screen /dev/tty.usbmodem1***
  • The C.H.I.P.’s username and password are both “chip”, so enter that when prompted. You should see chip@chip:~$ appear. Scroll down past the Windows section to continue!

Note: Enter Ctrl+A followed by Ctrl+\ to quit this connection

Windows

  • Open device manager
  • Find the address of your USB port under “Ports”. Find “PI USB to Serial” and note the COM number (like COM4).
  • Open putty, choose “Serial” connection
  • Using the number from before, open serial line = COM#
  • The C.H.I.P.’s username and password are both “chip”, so enter that when prompted. You should see chip@chip:~$ appear.

Set Network Preferences

Adding your WiFi network info to the C.H.I.P. is super easy:

sudo nano /etc/network/interfaces

If you get prompted for a password, remember, it’s always “chip”!

You should see a file with nothing but comments. At the bottom of the file add:

auto wlan0
iface wlan0 inet dhcp
    wpa-ssid YourWiFiSSID
    wpa-psk YourWiFiPassword

Save and exit with Ctl-x and y. Now reboot the C.H.I.P. for the settings to update:

sudo reboot

Once the C.H.I.P. reboots (which is pretty quickly), connect to it again using the same steps as before. We want to a) make sure we actually have an internet connection and b) figure out the IP address so we can SSH in.

When you’re connected, check your internet connections with:

sudo ifconfig

Note: At first I thought that the C.H.I.P. didn’t run commands like ifconfig because running without sudo gave an error message sounding like it wasn’t installed – so always try sudo if something doesn’t work!

You’ll see a lot of output, but look for wlan0. You need to see two different series of numbers – one is the local address and the other (which should start with 10) is the address we want:

wlan0     Link encap:Ethernet  HWaddr cc:79:cf:21:c8:eb
          inet addr:10.10.7.192  Bcast:10.10.7.255  Mask:255.255.252.0
          inet6 addr: fe80::ce79:cfff:fe21:c8eb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45570 (44.5 KiB)  TX bytes:12253 (11.9 KiB)

Write or copy that number down somewhere because you’re going to need it.

If you don’t see a number, then you might not have an internet connection. You can test to make sure your SSID and password work by entering them in the following line: sudo nmcli d wifi connect WIFISSID password WIFIPW ifname wlan0

Shutdown the C.H.I.P. so that you can unplug it from your laptop. This can be done by either pressing and holding the button on the C.H.I.P. for ~10 seconds or by entering:

sudo shutdown -h now

Plug your power supply into your outlet of choice and then plug it into your C.H.I.P. Using eitherthe terminal or PUTTY, establish an SSH connection with the C.H.I.P. using the IP address you just wrote down or you can try setting up zero configuration networking and use chip.local:

ssh chip@IPADDRESS
ssh chip@chip.local

Note: If you receive a permissions error, you may need to use sudo. Be cautious though – this is your laptop’s password, not the C.H.I.P.’s! You should always pay careful attention when using sudo. On something like the C.H.I.P. it’s not such a big deal, but on your personal or work laptop it could be!

Once you’re in it’ll look the same as when you connected through the USB cable. Now we’re ready to start the fun stuff!

Part 3. Presence Detection

Rachel edited this page on 16 Aug · 4 revisions

chipfrontback

The way that we’re going to detect “presence” is by scanning the WiFi network for certain devices’ MAC addresses. These addresses are the unique identifier that your phone or laptop gives when connecting to a network. The C.H.I.P. needs to be connected to the same network your device will connect to. If you have 2.4Ghz and 5Ghz options on your router, the C.H.I.P. can only connect to the 2.4Ghz option – no worries, though! It can still detect devices on the 5Ghz band.

Detecting devices can also be done via Bluetooth; however, I hate leaving my Bluetooth on, so I figured WiFi would be a bit more reliable.

Before we get started, we need to make sure that the C.H.I.P. is updated. This could take a little while:

sudo apt-get update

Now let’s move on to scanning for devices!

Part 3. Scanning for Devices

Rachel edited this page on 15 Aug · 8 revisions

I decided to use a tool called arp-scan to look for devices on my network. Arp-scan is an Address Resolution Protocol packet scanner that shows every active IPv4 device on your local internet.

To install arp-scan, enter:

sudo apt-get install arp-scan

Once it’s installed, you can test arp-scan by running:

sudo arp-scan -l

You should see a list of devices and corresponding MAC addresses run down the screen (it could take a little while to load if on a large network).

So we can see connected devices! But we want to know when a particular device is connected, which means we need to know that device’s MAC address. I decided that my phone was the best device to use to detect my presence, so I looked up how to get it’s address (this can be done for any other internet connected device too).

On an iPhone

  • Go to Settings
  • -> General
  • -> About
  • Scroll down until you see “Wi-Fi Address”

On an Android phone

  • Go to Menu
  • -> Settings
  • -> About Tablet
  • -> Status
  • Scroll down until you see “Wi-Fi MAC Address”

The series of 12 letters and numbers separated by colons is the phone’s MAC address.

You can check to see if your phone appears on the arp-scan list of devices by running the earlier command and looking for it, or you can run:

sudo arp-scan -l | grep PHONEMACADDRESS

If your phone was found, the command will output its address. If it wasn’t found, make sure that it is connected to the same WiFi network as the C.H.I.P. You may also need to wake up your device as many devices disappear when not actually accessing the internet.

The last thing we need to install is the Initial State python streamer so that we can stream who’s home and who’s not!

Part 3. Initial State

Rachel edited this page on 15 Aug · 1 revision

We want to stream a message every time someone enters or leaves the area to a cloud service and have that service turn our data into a nice dashboard that we can access from our laptop or mobile device.

Step 1: Register for Initial State Account

Go to https://app.initialstate.com/#/register/ and create a new account.

Step 2: Install the ISStreamer

Before we can install the streamer, we need to install the cURL tool. This can be done in the C.H.I.P. GUI using the Synaptic Package Manager (Computer Things! -> Settings) or via the command line:

sudo apt-get install curl

Note: If this returns an error, make sure that you’ve run sudo apt-get update

Install the Initial State Python module onto your C.H.I.P.:

$ \curl -sSL https://get.initialstate.com/python -o - | sudo bash

Security Note: The above command has some important anatomy that the user should be aware of. 1) There is a preceding \ before curl. This is important to ensure no alias of curlgets run if one was created. This helps mitigate risk of the command doing more than intended. 2) The command is a piped command, so when running, you are piping the output of a script that is being retrieved from https://get.initialstate.com/python into the command sudo bash. This is done to simplify installation, however, it should be noted thathttps is important here for helping ensure no man-in-the-middle manipulation of the install script, especially since the script is being run with elevated privileges. This is a common way to simplify install and setup, but if you are a little more wary there are some slightly less convenient alternatives: you can break the command out into two steps and investigate the bash script being downloaded from the curl command yourself to insure it’s fidelity OR you can follow the pip instructions, you just wont get an automatically generated example script.

Step 3: Make some Automagic

After Step 2 you will see something similar to the following output to the screen:

pi@raspberrypi ~ $ \curl -sSL https://get.initialstate.com/python -o - | sudo bash
Password:
Beginning ISStreamer Python Easy Installation!
This may take a couple minutes to install, grab some coffee :)
But don't forget to come back, I'll have questions later!

Found easy_install: setuptools 1.1.6
Found pip: pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6- py2.7.egg (python 2.7)
pip major version: 1
pip minor version: 5
ISStreamer found, updating...
Requirement already up-to-date: ISStreamer in /Library/Python/2.7/site-packages
Cleaning up...
Do you want automagically get an example script? [y/N]

(the output may be different and take longer if you have never installed the Initial State Python streaming module before)

When prompted to automatically get an example script, type y. This will create a test script that we can run to ensure that we can stream data to Initial State from our Pi. You will be prompted:

Where do you want to save the example? [default: ./is_example.py]:

You can either type a custom local path or hit enter to accept the default.

You will be prompted for your username and password that you just created when you registered your Initial State account. Enter both and the installation will complete.

Step 4: Access Keys

Let’s take a look at the example script that was created.

$ nano is_example.py

On line 15, you will see a line that starts with streamer = Streamer(bucket_ .... This lines creates a new data bucket named “Python Stream Example” and is associated with your account. This association happens because of the access_key=”...” parameter on that same line. That long series of letters and numbers is your Initial State account access key. If you go to your Initial State account in your web browser, click on your username in the top right, then go to “my account”, you will find that same access key at the bottom of the page under “Streaming Access Keys”.

Access Keys

Every time you create a data stream, that access key will direct that data stream to your account (so don’t share your key with anyone).

Step 5: Run the Example

Run the test script to make sure we can create a data stream to your Initial State account:

$ python is_example.py

Step 6: Profit

Go back to your Initial State account in your web browser. A new data bucket called “Python Stream Example” should have shown up on the left in your log shelf (you may have to refresh the page). Click on this bucket and then click on the Waves icon to view the test data.

Example Stream Screenshot

You will want to step through the Waves tutorial to familiarize yourself with how to use this data visualization tool. Next, view the data in Tiles to see this same data in dashboard form.

Example Stream Screenshot

You are now ready to start streaming real data from your C.H.I.P.!

Part 3. The Code

Rachel edited this page on 16 Aug · 2 revisions

Time for the fun part.

You can find the presence.py script here: https://github.com/initialstate/CHIP-streaming-presence-detector/blob/master/presence.py

I’m going to go over it briefly so you know what’s happening!

First we import important packages:

import subprocess
from time import sleep
from threading import Thread
from ISStreamer.Streamer import Streamer

“subprocess” allows us to make calls like we would in the command line from the script. “time” is so that we can wait between actions. “threading” is necessary because we are looking for more than one device. Threads are basically separated pieces of code that can run at the exact same time as other threads. “Streamer” is the Initial State streamer that let’s us send data to a web-based dashboard.

Next we do some initializing:

# Edit these for how many people/devices you want to track
occupant = ["Rachel","Josh"]
# MAC addresses for our phones
address = ["6c:xx:xx:xx:xx:xx","18:xx:xx:xx:xx:xx"]

# Sleep for a minute to wait for internet connection
sleep(60)

# Initialize the Initial State streamer
# Be sure to add your unique access key
streamer = Streamer(bucket_name=":homes:Who's Home?", bucket_key="chip_home", access_key="YOUR_ACCESS_KEY")

# Some arrays to help minimize streaming and account for devices
# disappearing from the network when asleep
firstRun = [1,1]
presentSent = [0,0]
notPresentSent = [0,0]
counter = [0,0]

In my use case, I wanted to know when my husband or I were home, so I have an array with our names. The address array contains the corresponding MAC addresses for our phones. If you want to add more than 2 devices, simply add more values to both arrays.

We sleep for a minute before trying to initialize the Initial State streamer because we’ll want to run this script when the C.H.I.P. boots up and need to wait for an internet connection. Then we can create a stream with visible bucket name “:homes:Who’s Home?”, hidden bucket key “chip_home”, and unique access key.

Be sure to replace YOUR_ACCESS_KEY with your Initial State access key!

Because we a) don’t want to stream a ton of messages constantly if a device’s presence hasn’t changed and b) want to wait a reasonable amount of time before declaring a device absent since some phone’s disappear when their screen goes black, we create some arrays to handle when something should be streamed.

Now for the meat of our code:

# Function that checks for device presence
def whosHome(i):
    try:
        # Loop through checking for devices and counting if they're not present
        while True:
            # Assign list of devices on the network to "output"
            output = subprocess.check_output("sudo arp-scan -l", shell=True)
            # If a listed device address is present print and stream
            if address[i] in output:
                print(occupant[i] + "'s device is connected to your network")
                if presentSent[i] == 0:
                    # Stream that device is present
                    streamer.log(occupant[i],":house_with_garden:")
                    streamer.flush()
                    print(occupant[i] + " present streamed")
                    # Reset counters so another stream isn't sent if the device
                    # is still present
                    presentSent[i] = 1
                    notPresentSent[i] = 0
                    counter[i] = 0
                else:
                    # If a stream's already been sent, just wait for 5 minutes
                    counter[i] = 0
                    sleep(300)

The function “whosHome()” is where we check for the device and steam if it’s present or not. On line 31, we use arp-scan like before and look for the device address. If it’s there, the following if statement is called. We check to see if “device present” has been streamed and either wait 5 minutes if it has or stream it!

# If a listed device address is not present, print and stream
            else:
                print(occupant[i] + "'s device is not present")
                # Only consider a device offline if it's counter has reached 30
                # This is the same as 15 minutes passing
                if counter[i] == 30 or firstRun[i] == 1:
                    firstRun[i] = 0
                    if notPresentSent[i] == 0:
                        # Stream that device is not present
                        streamer.log(occupant[i],":no_entry_sign::house_with_garden:")
                        streamer.flush()
                        print(occupant[i] + " not present streamed")
                        # Reset counters so another stream isn't sent if the device
                        # is still present
                        notPresentSent[i] = 1
                        presentSent[i] = 0
                        counter[i] = 0
                    else:
                        # If a stream's already been sent, wait 30 seconds
                        counter[i] = 0
                        sleep(30)
                # Count how many 30 second intervals have happened since the device 
                # disappeared from the network
                else:
                    counter[i] = counter[i] + 1
                    print(occupant[i] + "'s counter at " + str(counter[i]))
                    sleep(30)

If the device’s address isn’t present, the else statement is called. Like above, we check to see if “device not present” has been streamed, but only if the device hasn’t shown up on the network in a 15 minute period. This way your device will hopefully be picked up even if it’s been sleeping for a little bit.

    # Return on a Keyboard Interrupt
    except KeyboardInterrupt:
        return

# Start the thread
# It will start as many threads as there are values in the occupant array
for i in range(len(occupant)):
    t = Thread(target=whosHome, args=(i,))
    t.start()

Because we have multiple devices, we create a thread for each one here. Since threads are almost completely separate from the main script, the keyboard exception is placed inside of the thread function.

Now run the script with:

sudo python presence.py

Watch what prints to the terminal to make sure your devices are being detected and that streaming is working. Head over to Initial State to checkout your streams!

Part 3. Your Personal Dashboard

Rachel edited this page on 16 Aug · 2 revisions

chiplaptopscreenie

After you’ve confirmed your script is working, go check out your dashboard! You should see some tiles with a large emoji home or “no” sign and then a home.

The dashboard isn’t super exciting with just two people, but adding other things like a temperature/humidity reading or the current weather would be both easy and interesting.

The main reason I wanted to do this project was as a proof of concept for triggering some sort of action when a certain device was detected – like playing theme music when I entered the apartment! If I get that working, I’ll be sure to add it here.

Something annoying that I noticed about running the script while SSH’d into the C.H.I.P. was that it quit anytime the SSH connection was severed. To solve that, keep reading on how to run the script at boot.

Part 3. Run the Script from Boot

Rachel edited this page on 19 Aug · 3 revisions

Usually if you’re planning on running a script for a long time on a device that you’re SSH’d into, you would add things like nohup and & to your run-the-script command. I tried both of these and a couple variations but my script was always “stopped” when I disconnected from the C.H.I.P.

In order to fix this (and really this was something that I intended to do eventually), I set up the script to run every time the C.H.I.P. booted up.

You can usually do this simply using crontab, but it didn’t seem to work on the first try. So instead, I created a service and used systemd to run that service at boot.

I’ll walk you through the steps here.

  • First we need to create the service file inside of the systemd directory. I named mine “presence.service”:
nano /etc/systemd/system/presence.service
  • Populate this file with where to find your file and extra “instructions”. If your presence.py file is in the C.H.I.P.’s home directory, then the path is the same as what I have here. The settings under [Unit] are trying to tell the C.H.I.P. not to run the service till after the network is online, however it only seems to wait until the network service has started (hence the 60 second wait in our presence.py script). Save and exit:
[Unit]
Description=start presence.py to check for presence
Wants=network-online.target
After=network-online.target
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/python /home/chip/presence.py

[Install]
WantedBy=multi-user.target
  • Enable the service:
sudo systemctl enable /etc/systemd/system/presence.service
  • You can check if the service is at least streaming with:
sudo service presence start

Note: You won’t see any of the debug output you did when running the script manually. Check Initial State to see if any new events have come in! You could even set up your script to stream the debug info instead of print it, but that would be a lot of events!

  • And you can check the status of the process with:
sudo service presence status -l

Reboot your C.H.I.P. and see if it’s working!

Now that that’s all done, you can think of cool things to trigger whenever a presence is sensed and just edit the presence.py file!

Part 4. (Bonus) Text Alerts

Rachel edited this page on 24 Aug · 3 revisions

chiptriggersIf you want a text or email alert every time someone’s device leaves or arrives, you can easily set it up inside of Initial State!

Note: You will need to be on the Pro plan to use triggers

We are going to follow the Trigger notification setup process outlined at here.

Just click on the shelf icon (in the top tray to the left of the Initial State logo) if it’s not already open, and click on “settings” beneath your “Who’s Home?” bucket name. Click on the “Triggers” tab in the settings menu.

You’ll want to set up your triggers like mine on the left. Select the data stream to trigger on (you can use the drop-down list to select from existing streams once a data bucket has loaded or you can type in the stream name/key manually; *note Safari does not support HTML5 dropdown lists). In my example screenshot, I selected both “Rachel” and “Josh”.

Select the conditional operator, in this case ‘=’, and set it equal to either present (which I symbolized with the emoji 🏡 , aka “house_with_garden”) or whatever you used for not present.

Click the ‘+’ button to add the Trigger condition and choose either email or SMS. Click the ‘+’ button to add the action. You’ll need to input any verification code if adding a new phone number or email to complete setup. Click done to return to the main screen.

Your trigger is now live and will fire when the condition is met!

I set mine up to text me whenever someone was present:


SUCCESS – FONA 808 GSM/GPS connected to PocketCHIP (SMS & Dialing)

$
0
0

Well it was easier than expected. I had this Adafruit FONA 808 board sitting around from an older projected and figured hey why not try to hook it up to the Pchip. I was able to connect it up, make a call, and send an SMS from the terminal console using the “screen” program. Of course, you must have a SIM card to place in the FONA. Here is a gist of what to do if anyone was curious:

NOTE: I TAKE NO RESPONSIBILITY IF YOU DAMAGE YOUR POCKET CHIP. THIS WORKED FOR ME, THATS ALL I KNOW :slight_smile:

1.Wire the FONA to the Pchip.
Note: the FONA must have its own LIPO/LIion battery hooked into the JST connector in order to work. I supposed you could wire it to the pchip 3v but I DID NOT try that. Also required is the GSM antenna.

I used the break out solder points at the top of the pocket chip
FONA TX -> Pocket CHip UART RX
FONA RX -> Pocket Chip UART TX
FONA GND -> Pocket Chip GND
FONA KEY -> Pocket Chip GND
FONA VIO -> Pocket Chip +3v

2.Power up Pocket Chip:
-you should notice the blue PWR LED of the FONA lit solid and the red NET LED starting to blink

3.Install screen (I ssh’d into my Pocket Chip):
sudo apt-get install screen

4.Disable getty on TTYS0 (this may not be necessary but I did it and it worked fine):
systemctl stop serial-getty@ttyS0.service

5.Start screen
screen /dev/ttyS0 115200

6.You should now see a blank screen where you can type in AT commands:
type: “AT” (without quotes) and you should receive “OK” as a response. this verifies the FONA and Pocket CHIP are talking to one another!
Here are some AT commands to try:

ATI – Get the module name and revision
AT+CMEE=2 – Turn on verbose errors (handy for when you are trying out commands!)
AT+CCID – get the SIM card number – this tests that the SIM card is found OK and you can verify the number is written on the card

AT+COPS? Check that you’re connected to the network

AT+CSQ – Check the ‘signal strength’ – the first # is dB strength, it should be higher than around 5. Higher is better. Of course it depends on your antenna and location!
AT+CBC – will return the lipo battery state. The second number is the % full (in this case its 92%) and the third number is the actual voltage in mV (in this case, 3.877 V)AT+CMGF=1 – this will set it to TEXT mode not PDU (data) mode. You must do this because otherwise you cannot just type out the message.

To Send a text msg:
AT+CMGS=”nnnnnn”
You will get a ‘>’ prompt for typing. Type out your message and when you are done send a [Control-Z] on an empty line to send

To call/dial:
ATDnnnnn; (Don’t forget the ; at the end!)
If they pick up you’ll hear it in the headset, if no pickup, you’ll get a NO CARRIER return
Once you are done chatting, you can hang up by sending ATH
Of course you need a hands-free headphone/mic device to plug into the FONA in order to hear the your caller and to talk!

7.To exit from screen: Ctrl+a and then Ctrl+z

Next up: create a PPP connection to use the data connection of the FONA with the Pocket CHIP!

11 Likes

  • created

    Aug 11

  • last reply

    29d

  • 4

    replies

  • 588

    views

  • 4

    users

  • 16

    likes

  • 5

    links

so much yes! I know what I’m doing with my.pocketchip! and if data can get working I will more then likely find a nice way to house it in pockchip and ditch my phone! (says alot since I have a lg g4 willing ditch the specs for debian over android!)

2 Likes

Just an update, I’m working on a Python script to create a simple dialpad to easily dial a phone number using the FONA on the Pocket CHIP! I can say that the PCHIP is definitely now a PHONE!

2 Likes

Wow! how is the sound quality? More pictures please! I’m thinking of buying a FONA.


大疆首款随身无人机「亲生」设计工程师:Mavic目前一骑绝尘,没有对手

$
0
0

大疆首款随身无人机「亲生」设计工程师:Mavic目前一骑绝尘,没有对手

大疆首款随身无人机「亲生」设计工程师:Mavic目前一骑绝尘,没有对手

本文内容首发于知乎,作者 雨眠 ,Mavic设计工程师。原文链接:http://t.cn/Rc1JbNB


产品终于发布了,近两年的努力终于与世人见面,此刻非常激动。

正在连夜赶一篇长篇干货回答,写完了贴上来。

写完更新:

阅读知乎多年,一直没有回答过什么问题,这次作为 Mavic 的设计工程师,对它了解得比较全面,所以试着回答一下这个问题。第一次认真写回答,希望大神们轻拍。

我会比较详细的介绍这款全新机型的设计。利益相关就不用多说了,我是 DJI 的员工,但这篇文章代表我的个人意见。我会本着工程师的信誉,实事求是的叙述。一个人的知识有限,下文中如果有不符合事实的地方,欢迎指出,我会及时更正。

消费无人机市场还非常的年轻,现在随着越来越多的新晋厂商入局试水,水准参差不齐,不少厂商本身缺乏技术积累,靠夸大宣传和酷炫的视频来吸引注意力,让不明真相的小白用户掏腰包却拿不到宣传中所承诺的产品(比如破产的 zano,一直跳票的 lily,等等),所以这次顺便也会科普一些无人机的技术知识,让大家能看破一些华而不实的宣传,做更好的购买决策。

DJI 的 Phantom 系列从无到有的开创了消费无人机的市场,第一次让消费者可以买到到手即飞的无人机,把航拍从少数专业玩家和摄像师的独门绝技,变成了一项人人都可以尝试并享受其中乐趣的活动(大家可以上 http://skypixel.com 看看用户拍摄的精美作品)。几年来经过历代技术更新迭代,目前的 phantom 4 已经相当成熟,从易用性,智能性到影像画质,智能功能,都绝对是消费无人机的行业标杆,一直被模仿,从未被超越。它也是第一台拥有视觉感知和一定自主飞行能力的消费无人机。然而,对于普通消费者来说,Phantom 以及这种级别的其他无人机,有几个通病:

• 体积:需要几乎一整个背包,平时带出去玩还可以,但是出去旅行就麻烦了,除非是自驾游

• 重量:长途携带会比较累;对女性来说太重

• 麻烦:需要每次使用都拆桨,装桨,从背包到悬停要几分钟

而 Mavic 很好的解决了这些痛点,第一次将 phantom 这个性能和拍摄质量级别的无人机,做到了真正便携的程度,而几乎没有损失性能。我可以自信的说,它将会是一款消费级无人机中具有里程碑意义的革命性产品,让高质量的航拍普及到更广大的受众群体。

这么说有些抽象,我先把一些关键参数扔出来,之后再展开分析:

• 飞机折叠后的尺寸:83mm*83mm*198mm(接近一个运动水瓶的体积)

• 重量:734g

• 机械 3 轴云台,支持长曝光(效果不是 3 轴电子防抖能比,后面会细说。这应该也是目前量产的最小的机械 3 轴云台了)

• 27 分钟续航(在无风环境下以 25km/h 匀速飞行时测得。而在理想条件下悬停时间可以接近 29 分钟)

• 最高 7 公里图传和遥控距离,最高支持 1080p(phantom 的 5km 已经碾压群雄了,这个 7km 加上最高支持 1080p 实在是有些逆天。注 意是美国 FCC 标准,开阔无遮挡,无电磁干扰环境下。国内 CE 标准对功率限值更严,因此是 4km。)

• 1/2.3 英寸相机 sensor,4k 视频,最大码流 60Mbps(和 Phantom 4 同样面积的相机 sensor)

• 前视双目视觉避障+智能跟随等自动飞行功能(这个技术目前在消费无人机中是 DJI 独家,避障模式最高支持 10m/s 的飞行速度,远超其他厂商)

• 双超声波+双目的精准下视定位(悬停精度持平 phantom 4,有效范围稍微更远)

• 最高飞行速度:65km/h(比 Phantom 4 的 72km/h 稍低,但远高于其他便携无人机)

• DJI 飞控和导航系统(DJI 的核心技术,不用多说了,稳定,精准,可靠,多功能)

• 8.3 寸快拆折叠桨(应该是现在市面上唯一一款同时有快拆和折叠的桨,而且无螺丝,后面会细说)

说到这里,对无人机产品有了解的人就已经能看出 Mavic 的革新之处:现在市面上达到这些性能,体验和可靠性的消费无人机,只有 phantom 4。而市面上体积能做到 Mavic 这么便携的无人机,性能跟 Mavic 完全不在同一个等级(单续航来说,就只有 Mavic 的 1/3-1/4),就像玩具一样。可以这么说,在性能和便携性两个维度上结合考量,Mavic 目前是一骑绝尘,没有对手的。配合着我们新设计的全功能折叠遥控器,Mavic 是世界上第一款你可以无负担轻易带去任何地方,并可以拍摄高质量内容的智能航拍无人机,无论是记录你的生活,旅行,探险,还是大自然的绝美风光都驾轻就熟,区区自拍更是不在话下。(对之后的详细说明没兴趣的,看到这里放心买买买就可以了:)

价格方面大家也不要觉得这么小的飞机为什么不卖得更便宜点,因为科技产品并不是论斤卖,或者按体积卖的。相反,要将同样的技术和配置塞进一个小很多的空间内,难度和成本更高。配置完全相同的笔记本电脑会比台式电脑更贵就是这个道理。最终公司定的这个价格已经相当良心了,比我预想的还要低。

参数介绍完了,下面进入正题,讲一下这款飞机的设计。好的无人机机型设计,尤其是好的折叠机的设计,是一个非常复杂,需要来回迭代的过程,其中涉及到很多方面:

1. 便携性,折叠方式,包括体积的最小化,折叠展开步骤的最简化

2. 结构的简洁,可靠,耐摔

3. 续航

4. 外观

5. 整机布局,合理布置 pcb 和散热,各组件和传感器的位置,并保证他们能发挥性能,互不干扰。这是一大块

6. 云台和减震设计

7. 如何优化设计来优化生产和组装

这些因素之间会相互牵制和影响,而如何平衡取舍,或者如何跳出现有框架,想出新的解决方案做到两全其美,就是设计飞机的难点和乐趣所在。

折叠方式

先从一般人比较感兴趣的折叠方式开始说起吧。一开始我接到的要求是设计一款口袋无人机,不过稍做了一些调研分析后,当时我果断放弃了这个方向,因为:

1. 这样的产品虽然比较吸引眼球,但是实用性不高,口袋这个空间的竞争已经非常激烈,手机,钥匙串,钱包等等。几乎轮不到无人机这种偶尔用一下的东西。就我个人来说,除了手机,连钱包一般都不放口袋里的,不舒服,就更别提厚厚的无人机了。

2. 体积做得小本身是没有错的,但为了做到放在口袋里,牺牲了太多的画质和续航,在普通无人机 20 来分钟续航大家都嫌不够的时候,7-8 分钟的续航是不能接受的。画质也做不到合格的水平(我心目中的合格是持平手机的拍摄画质)。

因此这样的 trade off 不明智。我们要做的应该是在保证产品品质和体验的前提下做到便携,而不是为了便携牺牲产品其他更重要的品质。当时有个叫 Anura 的口袋无人机在众筹,我觉得不靠谱,后来果然失败了。(现在,将近 2 年过去了,市面上出现了一些量产成功的口袋无人机,不过续航,画质等还是很差,只能算是过渡型的产品,我觉得也不会赢得消费者的认可)

不做口袋无人机的话,应该把产品设计成什么大小和形态最好呢?我非常喜欢各种户外运动,有一次在 Yosemite 国家公园徒步的时候,我一边在想这个问题。走着走着口渴了,于是我拿出水瓶喝了一口水,然后心中就有了答案。口袋太小,但是水瓶的大小应该是足够容纳一个品质合格的无人机的。而且出去玩,谁不带瓶水呢?一般的背包,户外装备等,都会专门设计水瓶的存放空间,如果无人机折叠后大概是个水瓶的形态,出去旅行或者户外运动的时候,就能很方便的带上了。然后我就在脑海中大概构想了几种折叠方式,有了初步靠谱的想法,非常激动,于是放弃了下午的徒步,直接赶回机场,借了几张纸就在机场画了起来。这就是第一版设计的由来,而后来又经过了半年多的研发和改进,整机布局和折叠方式才逐渐定型为今天的样子。之间的过程和艰辛这里就不说了,我直接讲讲最终的设计。

很多人会觉得 Mavic 后翼下置的造型以及后支臂向下翻转展开的方式很特别很酷炫,但可能不知道我们这么设计并不是为了特别和酷炫,而是有着很实在的考虑:最小化折叠后体积的同时,最简化机构和折叠步骤。这话怎么说呢?大家都知道四旋翼飞行器有 4 个支臂,4 个电机和螺旋桨。最直接的想法就是直接把它们对折到机身,大概是这样(我们 Mavic 专利中的说明图,图中附带了一些说明文字):

屏幕快照 2016-09-28 12.55.07.png

这个设计简单,直观,但是也有不少问题。大家都知道飞机的电子系统和电池等主要占体积的部件,都在机身内,机臂的空间基本上是放不了什么东西,纯粹只是为了撑开四个螺旋桨而已。因此我们会尽量把机臂做的细细的,这样才能尽少的阻碍螺旋桨的下洗气流。虽然机臂细了,但是电机和螺旋桨却得要那么宽,因为细了会牺牲动力系统的效率。因此可以看到,这种设计折叠后,中间能放电池和电子器件的主机身,只占整体体积的 1/3,而红框中的机臂,电机,桨 (合称动力系统吧),反而占了整体体积的 2/3,折叠后有大量空隙和没有利用上的体积,因此是相当低效率的折叠方式。

屏幕快照 2016-09-28 12.55.30.png

还有一种,会好一些,就是把前后机臂上下错开(我最初想用的办法):

屏幕快照 2016-09-28 12.55.41.png

这次,由于上下错开了,动力系统占得宽度就少了些。从 2/3 变到了 1/2 左右。不过上图有些理想化,因为实际折叠桨会比这个宽,就算在我们优化后(后面会细讲),折叠桨折叠后的宽度依然是机臂的 3 倍。因此,这个设计还有不少优化空间。因为折叠桨占用了大部分的宽度,机臂本身细很多,所以机臂和机身之间还会有比较大的空隙,没有利用到。

美国 Lockheed Martin 有一款无人机,设计就介于上面两种之间,是这样的(图片来自网络,侵删):

屏幕快照 2016-09-28 12.55.56.png

屏幕快照 2016-09-28 12.56.09.png

没有地方放云台,形态也不美观,折叠后体积利用率不是很高。

那么应该如何最小化折叠后的体积呢?可以看看 Mavic 的机身(为了让大家看清,我先把折叠桨取下来了。图片都是我自己随便用手机拍的工程样机,晚些如果有空换些好看点的图):

屏幕快照 2016-09-28 12.56.23.png

从上面看,机臂很细,减少了对螺旋桨下洗气流的阻碍,与机身紧密贴合,尽少占用宽度。机身后方两个凹坑,容纳电机。电机之间的 宽度刚好用来放置一块高性能 GPS 天线。几乎没有空间浪费。

屏幕快照 2016-09-28 12.56.41.png

从下面看也差不多,机臂与机身贴合,云台后方两个凹坑容纳电机,电机之间的宽度刚好用来放置散热风扇(底部是一体化镁合金散热底壳,有时候会比较热,大家使用的过程中稍微注意一下)。唯一浪费的空间是云台左右两边比较空。
屏幕快照 2016-09-28 12.56.55.png

从侧面看,机臂宽度较宽,增加了强度,同时也没有增加整机的体积。云台收纳在机身前面凹陷内,一体性和保护性都很好,也不需要每次拆下来才能储存运输。脚架也很巧妙的与机臂做成一体,收纳在了一个不占空间的地方。最巧妙的是螺旋桨,因为螺旋桨本身就是片状的零件,只要与其他面贴合在一起,是可以几乎不占体积的,因此我们让折叠桨平顺的贴合在了机身的上面和下面,几乎没有增加整机的体积。到这里,折叠后的形态就比较完美了,模块各司其职, 各安其位,紧凑的结合在一起,没有多少浪费的空隙和空间。

用 Mavic 模拟了一下对比图:左边是采用我们独特布局的 Mavic,右图是采用一般布局的 Mavic(上下错开了前后支臂,但是螺旋桨只是靠在了机身两边,没有贴合在机身上下表面),可以看到宽度差异相当大

屏幕快照 2016-09-28 12.57.07.png

接下来就是如何展开了。前面的两个机臂,按照常规方式向前展开就可以。但是由于后面两个机臂的桨,是贴着机身下面的,如果按照传统的转轴翻开,桨面就会对着地面,离地面很近,那么地上有任何不平整的地方,或者下降有侧倾,都会损坏到桨,然后 DJI 就可以卖出很多桨配件: )

玩笑话,这当然是不行的,所以当时也想了很多办法,比如在支臂上再加一个转轴,展开支臂后,再把螺旋桨翻上来。比如这个早期 prototype 中显示的这样。

屏幕快照 2016-09-28 12.57.21.png

或者在飞机尾部翻出一个很高的脚架来,让桨离地远一些。或者在机身主干上加个大转轴,一次把后面的两个支臂都翻上去(这些方案也都一并申请了专利)。这些方案虽然也能解决问题,但是并不是上策。因为它们都增加了机身结构的复杂性,重量,降低了可靠性,不是简洁优雅的解决方案。工程师一般都对简洁可靠的设计有着特殊的喜好,就像程序员喜欢简洁高效的代码和算法,数学家着迷于简洁优雅的解法一样。因此我对这些方案都不是很满意,于是苦苦思索了好一阵子。

有一天我想到一个平面几何的规律:对一个图形在平面上做任意次数的平移和旋转动作,从 A 位置位移到 B 位置,其实都能找到一个旋转中心,能用一次旋转来完成这个位移。也就是说,多步的旋转和平移动作,其实都可以归纳为一个旋转动作,只不过旋转中心不一定在图形内。于是我就想这个规律对于 3 维空间和物体适不适用呢?在稍微探索了一下后发现,除了一小部分特殊情况,是适用的!于是通过立体几何的办法定位了现在的这种斜轴的具体角度和位置,让机臂在展开到工作位置的同时,完成螺旋桨翻转到上面的动作,完美。

有些设计比较偷懒,折叠后需要把桨拆掉,虽然也可以做到体积紧凑,但是每次飞都要拆桨装桨,对于用户来说是很不方便的,因此我们没有做这样的设计。最后总结一下,四个支臂,四个转轴,从普通展开状态折叠到最紧凑的折叠状态,只需要四个动作,5s 之内搞定,从折叠结构和使用步骤来说,都几乎不能再简单再紧凑了,可以说是四旋翼折叠的终极方案。不服来辩。(开玩笑~如果真的有更好的方案,欢迎画几张简单的说明图私信我,确认之后可以给你一个 DJI 的工作 offer,过来把它实现)

转轴

折叠方式说完了,接下来具体谈谈折叠转轴。当时为了给用户一个最好的手感,我们参考了很多不同的转轴,包括 zippo 打火机,各种单车撑,翻盖手机,笔记本电脑……最终的结果也是挺满意:Mavic 的转轴是半自动的,也就是说,你掰开一定角度,它会自动弹开到展开位置,并且会有一个弹力一直压着,而不是靠机构完全锁死的。这样做有几个好处:

• 靠机构完全锁死的转轴,需要用户在打开机臂之后执行一个额外锁死的步骤。Mavic 的不需要,在 5s 内完成折叠,或者展开的全过程

• 一旦发生跌落和碰撞,完全锁死的转轴非死即伤。Mavic 的支臂在遭受足够的撞击后会自动弹回,卸掉部分冲击,转轴也不容易损坏

• 手感干脆爽快,大部分人在第一次拿到 Mavic 时候都会忍不住的来回掰它的机臂玩: )。这也是为什么我们要求折叠寿命至少是 5000 来回。

• 类似于汽车的悬挂,这样的设计可以滤掉一部分来自电机和螺旋桨震动,让云台和飞控更稳定。

缺点也有,一个是成本比较高,二是重一些,因为转轴基本上是全金属的,塑料材料承受不了这么大的压强。不过我觉得对于 Mavic 这样中高端的机型,这些代价是值得的。你会享受每一次展开 Mavic 的过程,并能充分的信任它的机构能够保证它在天空自由翱翔。

来张转轴的 X 光照镇楼:

屏幕快照 2016-09-28 12.57.36.png

云台

懂拍摄或者懂航拍的人都知道 3 轴机械云台的必要性,下面先给不了解的人稍微讲解一下,老司机可以跳过。大家都知道,四旋翼无人机都是靠调整飞机的姿态来调整飞行方向的,也就是说,飞行的过程中机身会左摇右摆,各种颠婆。这是低频的,但是大幅度的晃动。还有螺旋桨和电机高速转动带来的高频,小幅的震动。这种晃动和震动对于录像和摄影来说,都是致命的。(对于摄影,如果把快门调的很高,倒还可以缓解这个问题,但还是会有果冻纹)。目前,对这个问题唯一靠谱的解决办法,就是机械云台。通过减震系统以及电机转轴的隔震,再加上精密的主动控制,机械云台能把这些晃动和摆动都隔离出来,让他们传不到相机,这样我们才能得到稳定的视频和清晰的照片。而且你还能够通过云台精密地控制相机的运动和指向,拍出柔顺的运动镜头。再者,有了机械云台后,一台稳定悬停的飞机(DJI 新一代的飞机停得最稳)就像一个空中 3 脚架,可以支持长曝光,3s 曝光成功率非常高(最长支持 8s,不过清晰的几率不高,空中基本上都会有风)。比如这张照片就是我之前用 phantom 3 advanced 随便拍出来的,3s 曝光,已经有汽车光流的效果:

屏幕快照 2016-09-28 12.57.49.png

很多其他的无人机就算有 3 轴云台,因为飞机和云台的稳定性/精度不够,也做不到长曝光。拍夜景,暗光环境,没有长曝光还真不行。

而现在很多厂商或由于缺乏技术储备,或为了降低成本,放弃了机械云台,而采用了「3 轴」电子增稳或者电子防抖技术,在宣传上也有意混淆机械增稳和电子增稳之间的区别。实际上两者从手段到效果都有本质的区别。电子增稳,更准确的来说应该是「电子除抖」,因为它并不能使拍摄的原始视频更稳定,而是靠后期的动态裁切,从一个抖动震动的视频里裁切出一个分辨率更低的视频出来,而且抖动越严重,需要裁掉的画面就越多。它可以说是一种后期手段,是以画质和分辨率为代价的低成本方式。对画面有一点追求的摄像师都不会采用这种办法,只有预算低,或者没有其他办法时,才会使用。

尤其是无人机上,由于飞机姿态变化很大,一般电子防抖都 hold 不住,会要截取掉过多的画面,导致画面出现大面积黑边。一般厂商都是这两种办法解决:

1. 限制无人机的姿态,也就是限制飞机的加速性能和极速性能,让飞机本身飞的很慢,反应迟钝,这样画面自然不会这么抖。这样飞机的抗风性能会变差,就只能在地面附近飞飞,速度慢了也只能拍慢节奏的视频,飞行乐趣也无从说起。

2. 采用鱼眼镜头,让原始视频的视野特别大,这样就可以有充分的画面让电子除抖来裁切。然而,鱼眼镜头之后的相机感光元件,面积也就这么大(一般无人机上用的最大的也就 1/2.3 英寸),用了鱼眼再裁切,相当于视频只使用了不到感光器 1/4 的面积。因此画质是相当抱歉的,连你的手机自拍摄像头都不如。

最后,电子增稳只对视频有效,对于照片的长曝光完全没办法,喜欢摄影的同学也就不用考虑了。因此,就航拍来说,千万不要觉得电子增稳是什么高大上的东西,只是为了降低成本,减小体积而大大牺牲画质的妥协方案。

科普完了,具体介绍一下 Mavic 引以为傲的 3 轴机械云台:

1. 目前量产消费产品中最小的 3 轴机械云台(宽度 36.5mm)

2. 在目前搭载了 3 轴机械云台的量产消费无人机中,Mavic 是体积最小的(折叠后)

以上记录是以 2016 年 9 月底的时间为准。我没有做过全面的调查,如果谁知道有哪个产品超过了 Mavic,请指出,我会更新这个陈述。

它还有个比较特别的功能,就是 roll 轴可以旋转 90 度,让用户拍摄垂直构图的照片或者视频。另外,这个云台中搭载的 1/2.3 英寸的传感器,也是跟 phantom 4 同一级别的。至于那个透明的云台保护罩,主要是平时不用的时候,以及恶劣环境飞行的时候保护云台的,会让画质下降些,所以平时飞行的时候建议摘下来,画质和续航都会好些。

这云台够帅:

屏幕快照 2016-09-28 12.58.01.png

续航

跟所有移动电子产品一样,由于电池长期以来没有突破,续航一直是无人机最大的一个痛点之一。DJI 虽然在续航方面也一直是行业标杆,但不到 30 分钟,还是 会让人意犹未尽,经常需要多带几块电池。而以 Mavic 折叠后的体积大小,要做到 27 分钟的续航,是挺逆天的(在无风环境下以 25km/h 匀速飞行时测得。而在理想条件下悬停时间可以接近 29 分钟)。其实要做好续航,不仅仅是高密度的电池,还有这些因素:

1. 桨要大,越大越好,将能量转换为升力的效率就越高。(稍微解释一下:根据动量守恒原理,螺旋桨靠把空气向下加速,而获得一个向上的动量,抵御重力带来的冲量。这个动量=m*v,就是排出空气的质量 m 乘以排出空气的速度 v。而这部分空气带走的能量为 1/2*m*v^2,这部分能量是由飞机提供的,是要耗电的。由于这部分能量损耗与 m 的一次方成正比,与 v 的二次方方成正比,因此在保证同样动量的情况下,增加 m,减少 v,能够减少这部分能量损耗。也就是说,同样都是让飞机悬停在空中,这种方式能让耗损的电能更少。那么如何在减少空气速度的同时增加排出空气的质量呢?增加桨盘的面积,也就是增加桨的长度。) Mavic 的 8.3 寸桨,长度是远超同类便携无人机的。加上我们有专业的螺旋桨和电机研发团队,致力于优化飞机动力系统的效率,才让 Mavic 的续航碾压同行。

2. 机身轻量化。这个要解释比较简单,就是保证功能,性能,可靠性的前提下,通过简化结构和机械设计,移除不需要以及效率低的材料,更换强度密度更高的材料等手段,让飞机尽可能的轻。这从两个方面对续航有利:一个是让飞机的需要提供的拉力减小,减少能耗,二是让飞机的动力效率更高,减少能耗。因为一般来说,同一个动力系统,需要提高的拉力越高,效率也会越低。所以我们的飞机除了前期设计尽可能的用简洁的结构机构,后期也都会经过几轮狠狠的减肥工作。

3. 机身机臂设计尽量少的阻挡螺旋桨的下洗气流,这个比较好理解。

4. 当然,我们用的电池性能和质量也是业界最高的。

有天我在外面吃饭,坐旁边的几个女生吃完后摆着各种姿势各种组合足足自拍了 40 多分钟,那时我就想,现在市面上的那些自拍无人机药丸。都不到 10 分钟的续航,根本不能满足自拍需求……

话说回来,那些自拍无人机虽然都比 Mavic 小,便宜,但是要达到 Mavic 一块电池的同等续航,你得带上 3-4 块电池,这样价格和体积优势就没了。而我刚才也说了,一般就算是二十多分钟续航的飞机,也是经常需要多带两块电池的。换到自拍无人机上,相当于十几块电池——画面太美不敢看。

快拆折叠桨

讲完了续航顺便再讲讲我们全新设计的快拆折叠桨吧。以 DJI E2000 做例子,传统折叠桨设计一般是这样的:

屏幕快照 2016-09-28 12.58.14.png

屏幕快照 2016-09-28 12.58.25.png

可以看见,中心的电机转轴两端,各有一个银灰色的螺丝。这两个螺丝同时起着两个作用,一是把折叠桨叶固定在电机上,一是作为折叠桨的旋转轴。这个设计有几个缺点:两个螺丝要手工上上去,而且需要人工调整松紧度,松了不牢靠;太紧了也不行。更换比较麻烦,需要螺丝批,以及螺丝上需要上专业的螺丝胶,不然用一段时间后螺丝就会松动,飞行过程中有可能射桨(就是桨叶整个脱离机身飞出去,一般都会导致炸鸡)

因为这两点,我们只会在比较专业的机型用这种设计。无人机经常刮刮碰碰就需要换桨,如果在外面玩没带专用螺丝刀导致不能飞,那就郁闷了。其次,一般小白也不会上螺丝胶,也控制不好松紧,如果导致射桨,后果非常严重。现在其他厂家也在自己的消费无人机上使用这种设计,其实是不太好的,大家可以注意一下。

于是乎我们需要一个新设计,来改善这两个问题,让我们的 Mavic 用上方便靠谱的折叠桨。当我第一次知道要把折叠桨加上快拆功能的时候,其实我内心是拒绝的,因为我觉得把这么多功能加进去,结构会搞得挺复杂,对重量,体积都不好。当时想到一个挺好的方案,可以解决第一个问题,而且方案非常简洁,轻量,体积也小,在工程上来说很不错,就是解决不了更换桨需要螺丝刀和螺丝胶的问题。但是没办法,为了小白用户能够用得舒心,只得硬着头皮设计一个两个问题都解决的方案。看看最终的结果吧,史上第一款量产的同时兼有快拆和折叠的桨叶设计:

屏幕快照 2016-09-28 12.58.37.png

从顶上看,两个螺丝换成了两个金属轴,固定在桨夹上。将桨按下后旋转 40 度左右即可完成拆卸,安装也一样,无需任何工具。

屏幕快照 2016-09-28 12.58.48.png

卸下后的结构局部图。可以看到,整个装配零件数量也不多,是非常简洁的。像桨这种需要高速旋转并承受很大应力的部件,越简洁越可靠。

没有比较就没有伤害,为了让大家看到这款折叠桨设计在体积,外观,重量上的优化程度,我把压箱底的白色「珍藏版」prototype 拿了出来:

屏幕快照 2016-09-28 12.58.58.png

看看右边的桨,增加了宽度(整个飞机宽了 1cm),同时桨叶也变短了,放在机身上比较小气,中间的那一坨也不太好看,没有左边最终版的修长优雅。

最后,说明书里建议用户手动把螺旋桨展开,是为了保证绝对安全,实际上,只要你能保证螺旋桨附近没有人和障碍物,直接启动电机就可以自动靠离心力甩开折叠桨了。注意这个过程中(不到一秒)机身会抖动一下。

传感器/飞控

我的同事硕哥以前就这个话题专门写过一篇很好的科普,大家可以直接去看他的回答:

小米无人机跟大疆无人机有多大差距?- YY 硕的回答

具体到 Mavic,采用的是和 Phantom 4 一样的双目立体视觉系统,双目加双超声波精准下视定位。这套系统的特点是能够感知和构建 3 维空间,以及可视距离很远,能够支持最高支持 10m/s 速度下的避障,以及 13m 高度内无 gps 也能精准的定位悬停。这套系统不仅需要很高的计算量,而且对传感器的固定精度有非常高的要求,是现在市面上消费无人机上最成熟最强大的避障系统;缺点则是和人类似,在晚上暗光的情况下视觉系统是看不见的。

有些厂商随意的在飞机上加了一对最简单的超声波,或者单点 TOF,或者红外线,就宣称避障了。这些简单的方案都很鸡肋:要么可视距离很近(相当于近视眼,那么飞机就只能龟速飞行),要么可视范围很窄(只能看正前方,飞机稍微斜着飞就看不到,会撞上),要么会被日光干扰,所以只能在室内或者晚上使用。这些避障系统都只能用来炒作一下概念,发挥不了什么实用价值。

还有现在大家都在说的智能跟随,我们的技术(视觉跟随)也跟其他厂商的 GPS 跟随有着本质的区别:

屏幕快照 2016-09-28 12.59.12.png屏幕快照 2016-09-28 12.59.24.png

仅凭着 GPS,飞机只能知道你的大概位置和方向,是非常不准的(尤其是靠手机的 gps,尤其是高度的信息),根据这个来跟随,飞机虽然能够大概跟着你,但是拍不出构图合格的视频,很多时候你甚至都不会在画面中,而飞机也不知道,所以这种跟随只能装装样子,出不来好的视频。视觉跟随就完全不一样了,飞机能看到你,知道你的准确位置,并会尽可能的保证在整个视频中把你拍在预设的构图位置(默认是画面中心,你也可以调到其他位置)。有了这个功能,一些以前专业飞手都很难飞出的跟随画面,一个初学者都可以做到,比如说跟随移动的物体同时环绕。

至于 DJI 的飞控,一直以来都是行业标杆,稳定,精准,可靠,多功能。其中,稳定可靠是最重要的,否则,再花哨的功能,遇上抽风炸鸡都是白搭。大家可以看看这个大疆精灵 4 的暴力测试随意感受一下:

大疆精灵 4 暴力测试【撞树、挂水、砸机、剪桨……】

具体到 Mavic,飞控 IMU 也是采用和 Phantom(精灵)4 一样的独立悬挂和传感器冗余,保证了一致的可靠性和稳定性。抗风性能在风洞做过测试,可以在 15m/s 的风速下悬停。一般用户保险起见最好不要在超过 10m/s 的风速环境飞行。

遥控器

既然把飞机设计得这么便携了,没有一款便携的遥控器搭配怎么说得过去?于是我们又全新设计了一款便携遥控器,而且设计原则跟飞机一样,那就是性能上不妥协。因此,这款便携遥控器是全功能的,和 Phantom 遥控器比,不仅没有削减功能和操控(霍尔摇杆和全套按钮和拨轮都有),反而还有提升:比如独立的小屏幕,紧急刹车键,和五维按键。

真正要把遥控器做小,有两个问题,一个是做小了后握持感变差,对精确操控飞机不利,用户的手也更容易疲劳;二是手机夹占用的体积比较大,难以做得很小又能把手机夹稳。于是就想了一个办法,让这两个问题互相把对方干掉:做了一个折叠设计,把人体工程部件和手机夹结合起来,利用手机夹的体积来给用户手部提供充实的支撑和握持感,同时手机夹折叠后又与遥控器主题融为一体,大大减小了体积。我把这个想法和负责遥控器的同事交流了一下,他也很认同,于是把之前已经做了好一阵子的方案整个推倒重做,又经过团队将近一年时间的努力,才让这款遥控器面世。

屏幕快照 2016-09-28 13.26.17.png

可以看到图中箭头所指,手机夹同时作为握柄,给予手掌充分的支撑,对于手指精准操控和耐疲劳非常有利。

屏幕快照 2016-09-28 13.00.01.png

同时折叠完后大小也接近手机,不过有 4 厘米厚

这个方案其实还顺便解决了另外几个问题:

• 传统遥控器手机/平板夹持都在天线的上方,比较容易遮挡天线信号,影响图传和遥控;也导致操作的时候遥控器头重脚轻,拿久了容易手部疲劳。而这款遥控器手机在底部,完全不干扰天线;重心平衡,拿着没那么累。

• 由于手机屏幕离手指很近,触摸屏幕更方便,很多时候手不离开遥控器就可以进行触屏操作

我可以很自信的说,从便携性,功能,操控手感三个维度来衡量,这款遥控器是目前市场上最好的。不服再辩。(开玩笑~和上面一样,如果真的有更好的方案,欢迎画几张简单的说明图私信我,确认之后可以给你一个 DJI 的工作 offer,过来把它实现)别忘了,这么小的遥控器,这么小的飞机,全功能,7km 的图传距离,真不是开玩笑的。

现在不少小自拍机把纯手机操控,没有遥控器这个缺点作为卖点来宣传,是非常坑的。Mavic 也可以有纯手机操控的功能,不过我们内部一致认为这只能作为一个辅助功能,随便拍几张到此一游照还可以。主打的操控方式还是得用遥控器,因为体验好太多。具体我就不一一解释了,举个简单的例子吧,有两辆各方面完全一样的汽车,除了一点:一辆有方向盘,刹车和油门踏板等一应俱全;另一辆没有,只能用手机操控(没有自动驾驶功能);你会选哪一辆来开?

图传

无线通信这一块我比较外行,所以直接粘贴同事写的:

作为 MAVIC 的核心技术之一,OcuSync 也是 DJI Light Bridge 高清图传系列中的重要一员,相比其他多种常见图传技术表现出众。

• OcuSync 基于全新设计架构,从多个方面提升了用户的体验,还提供了不少新的功能。

• OcuSync 提供了强大流畅的图传遥控性能,在 HD(720p)的基础上提供了视像更加清晰的 Full HD(1080p)的图传体验(近距离无干扰情况下)

• OcuSync 为近场从飞机下载视频到手机提供了高达 40Mbps 的流传输,

• OcuSync 支持十分微弱的信号接收(可以在远达 7km 的地方接收图传遥控信号)• OcuSync 还提供了灵巧的干扰躲避机制

• 在新架构下,OcuSync 还提供了多台设备之间灵活配置的通信组合。(比如像 Inspire 那样的双人操控模式

OcuSync 在多种速率下都远超 WIFI 和一般图传的链路性能。由于 OcuSync 设计中采用了大量当今通信领域最为先进的信道编码技术、多天线技术、分集技术、信道估计和均衡技术等,还有完整的上层协议栈,比如无线媒体接入控制、无线资源管理等模块,又与视频编解码模块深度耦合设计,因此无线图传性能不同一般。后来的多次测试表明,OcuSync 在理想条件下图传遥控有效的距离实际上并不止于 7km,有的时候超过 10km 也不是不可能。这个结果令大家都很兴奋。而 spec 设为 7km,主要是考虑到通信产品都有一定生产公差,需要预留一些裕量(OcuSync 的传输距离在 CE 标准下标称是 4km,美国适用的 FCC 标准下是 7km)。

目前市面上还有一类基于 WIFI 技术的图传方案,与 WIFI 方案相比,OcuSync 的图传体验显著不同。WIFI 主要考虑消费电子产品的局部互联,多数设备通信用于几米到数十米之间,WIFI 协议为了照顾到低成本应用,链路性能偏弱,导致 WIFI 的收发机链路性能偏弱,无法检测微弱信号或者在一定干扰环境中检测有用信号;而 OcuSync 设计中采用了大量当今通信领域最为先进的传输技术,对比过灵敏度、抗干扰性能、抗衰落性能、高速移动、多设备等多个场景,WIFI 均无法直接与 OcuSync 进行比较。对用户而言,这种差别对应着流畅与卡顿图传的不同体验,也对应着飞行范围远近的不同体验,还对应着干扰情况下或者信号遮挡情况下图传遥控的不同体验。另外由于 WIFI 采用传统协议栈,建立链接或者失步后重新建立链接时间较长,约在数秒到十多秒,OcySync 则采用跨层设计,建立链接和重新建链时间可以低至 1 秒以内。

有些产品为了提升性能,故意额外增加功率或者采用强指向性发射天线,使得某些方向上的辐射强度提高来弥补性能偏弱的问题,号称也可以传数公里。各国官方机构无论是 FCC 还是 CE,都对消费产品规定了各个方向上的最大辐射强度(EIRP),因此上述做法其实是违法违规的,增加了干扰破坏其他设备通信的风险。

结束语

这篇文章主要讲了 Mavic 的基础技术和底层机械结构,没有讲太多我们飞机上的各种丰富的智能功能和背后的算法(这方面有其他人可以介绍的比我更好)。不过就像买汽车一样,最重要的是三大件(马达,变速箱,车架),其次才是建立在这个扎实基础上的各种丰富的配置和功能。不过现在很多人都不看车的基础,只关心比较表面的配置,也让不少国产厂商钻了空子,生产出一些三大件很差,但是配置超级丰富的华而不实的车。而现在无人机市场也有这个风气,就是不把飞机本身基础搞好,浮夸吹嘘一大堆所谓智能功能来忽悠消费者。这样的飞机流通在市面上,轻只是欺骗了消费者,重则伤害他人人身和财产安全,对于消费者以及整个行业来说都是一种极其不负责任的行为。国内厂商就先不说了,免得被水军淹没,就说国外众筹的 ZANO,视频宣传中吹嘘的各种牛逼,手掌大小,手上起飞,四面避障,甚至 Swarm(机器人集群)都能吹出来,也是脸皮够厚。最后连飞机都飞不稳,整个公司破产,众筹支持者的钱全部打水漂,产品都没拿到。这是现在互联网时代,企业普遍浮躁风气的一个比较极端的例子: 不好好做产品,总想靠概念营销一夜暴富,左忽悠消费者,右忽悠投资人……汽车行业,这么多年了至少行业标准已经比较成熟,低于这个标准都不能上市,而无人机现在暂时还没有通用的标准来监管,导致很多不合格的无人机产品也能推向市场,所以只能靠消费者自己鉴别。这也是我写这篇文章的目的之一,以后大家看到很酷炫的无人机宣传视频的时候,可以用这些标准审视一遍。

这篇长文终于要结束了,希望阅读后大家能对 Mavic 的设计有着更深入的了解,也希望大家能喜欢。其实我说的这些只是冰山一角,还有太多的技术细节是无数工程师夜夜加班一点一点抠出来而我没有讲到的,而正是这些无数一般人看不到的细节,才堆积出了 Mavic 这款革命性的产品。我们做这么多极致的优化,也是为了打造一款大家能带出去玩,跟着你旅行,探险,走到世界各个角落的高品质航拍机,也希望大家在使用 Mavic 的过程中能体会到我们的用心。(当然,全新的产品刚面世,bug 肯定是有一些的,还请大家及时反馈给客服或者大疆社区,我们的攻城狮和程序猿会及时更新修正)

最后打个小广告:

如果你对我们的产品感兴趣,想加入我们的团队共同打造世界一流的产品,欢迎到社会招聘-DJI 招募精英 投递简历

特别特别厉害的机械/结构/材料/震动工程师以及工业设计师 可以直接联系我,这边有激动人心,充满创新和挑战的下一代无人机项目等待你的加入。

我个人非常喜欢各种户外运动、旅行,摄影,摄像和航拍(作品主要放在墙外网站),也希望能和这方面的牛人多交流。

谢谢!


刘仲敬:真主的秩序——伊斯兰宪制与欧洲体系的共同演化

$
0
0

刘仲敬:真主的秩序——伊斯兰宪制与欧洲体系的共同演化

整理者(豆瓣@mhb1)注:
本次的录音由启蒙编译所提供,谨致谢。
本整理稿的放出,得到了启蒙编译所负责人汪宇老师本人的同意。
对启蒙编译所的支持表示由衷的感谢!~
在整理稿的最后,附上了的一段阿姨在休息时候的谈话。这段谈话发生于第三讲之前。
本整理为完全破解版,在几处地方直接请教了阿姨。
每当想起非洲录音能被放粗所经历的坎坷历程,窝就觉得,大家应该珍惜。

[00:00:00]……奥米亚王朝(661~750)化家为国,从阿拉伯人的角度来看,是一种胜利,因为阿布•苏富扬代表了阿拉伯的城邦传统和部族传统。但是从伊斯兰的普世主义角度来讲,那是一个失败。它意味着默罕默德本人的理想有一部分没有达成,政权又重新回到阿拉伯元老和族长的传统势力手中。这些人并不高兴把伊斯兰教作为一种普遍的、适合于全人类的宗教,把所有人都变成自己的教友,而是希望把伊斯兰教变成一种近乎特权的标志,把权力掌握在最初的阿拉伯骑士和元老手中,把后来被征服的大多数地区的臣民保留在非伊斯兰教的状态,这样他们才能够根据古兰经的依据,向非伊斯兰教徒征收人丁税。如果这些非伊斯兰教徒真的改信了伊斯兰教,那么人丁税就没有办法征了,他们的财政收入会受到严重的影响。同时既然大家都是伊斯兰教徒,那么待遇就应该比较平等,那么原先仅仅由阿拉伯贵族享受的大量的津贴,也就要给别人分享了。这两者都是他们不愿意看到的。

[00:01:18]阿拔斯王朝(750~1258)对奥米亚王朝的胜利,从疆域上来看是伊斯兰势力的扩张,但是从性质上来讲,实际上是伊斯兰最初秩序里面的又一次退化。因为阿拔斯王朝依靠的是波斯和呼罗珊的势力,它多多少少借助了非阿拉伯人对阿拉伯歧视的不满,利用波斯的力量来颠覆了大马士革的阿拉伯力量。阿拔斯王朝是伊斯兰世界文官制度的真正创始者。它尽可能的继承了波斯的帝国传统,把主要的权力交给哈里发大臣主持。而这些哈里发大臣往往是伊斯兰教的色彩非常淡薄,有些人甚至是,比如说是,一千零一夜里面那位大臣,实际上他的家族是出于佛教徒的一脉,另外,这批人是萨珊波斯的后裔。对于西部和南部的阿拉伯人来说,呼罗珊人或者是东方人的胜利,进一步的削弱了伊斯兰教原有的初衷。

[00:02:29]阿拔斯王朝带来的另一个改革就是伊斯兰的普世主义最终失败了。在圣战最初开始展开的时候,伊斯兰教的一个基本假定就是,战争应该是短暂的,最终,在不久的将来,战争地区将会消失,全世界都将在伊斯兰教的秩序之下实现和平。但是阿拔斯王朝把统治中心迁到巴格达以后,世界图景发生了变化,伊斯兰教世界和战争地区的冲突和分裂,将会[把它们]变成一种永久性的区别。因此新的法学派必须应运而生,开始讨论关于信道的君主和不信道的君主之间的相互关系。在最初的征服时代,这个相互关系是不存在的。

[00:04:14]在一个和平地区和战争地区并存的世界上,就必须得巧妙的解释古兰经中间关于权宜之计的理论。权宜之计就是说,伊斯兰教徒在存在异教徒的世界上怎么跟他们相处。如果伊斯兰教是统治者,应该怎样对待他们;如果伊斯兰教是被统治者,应该怎样接受非伊斯兰教的统治者。伊斯兰教的君主跟非伊斯兰教的君主打交道的时候,他们签署的协议,在什么情况下是有效的,什么情况下是无效的。他们创造的这个理论有点像红衣主教尼西流后来跟土耳其人结盟时创造的理论。首先要确定伊斯兰教君主本身的正统性,也就是说,信士们的长官的利益和信士的利益从根本上是一致的,以此为标准,如果符合信士们的长官弘扬信仰努力本身,那么出于权宜之计,跟异教徒签署的协议仍然是有效的;但是[如果]不符合这个标准,即使签署了协议也是可以不遵守的。因此条约或者是秩序的合法性,归根结底要取决于信士们的长官本人的合法性。

[00:05:23]但这样就产生了一个重大的问题,信士们的长官,也就是哈里发,他的合法性是怎么样建立起来呢?先知本人死的太仓促,没有留下一个明确的传统。在他死后的初期,也就是所谓的共和时代,麦加和麦地那城邦的传统起了一定的作用,哈里发的职位多多少少是由元老们产生出来的。奥米亚家族迁到叙利亚以后,把统治权恢复为世袭了。阿拔斯王朝把首都迁到巴格达以后,更没有意识要恢复原有的族长选举。结果就造成一种很微妙的状态,事实上,哈里发的权力是可以用武力夺取,甚至可以通过宫廷政变来夺取。攫取权力之后,没有人能够真正的对哈里发的正统性提出质疑。

[00:06:36]哈里发划分他自己的信徒,根据教团制度,而不是根据原有的部族和城邦制度,也就是后来土耳其人著名的米勒特制度。在这种制度中,法官,就是社团的统治者,法官执行的是教法,也就是说,伊斯兰教的教法或者是犹太教的教法,或者诸如此类的东西。本教团的法官,在哈里发面前代表本教团,对本教团的人负责。教团是跨越地域的,例如是,君士坦丁堡或者是其他安条克的大主教,管理他们手下的基督教徒,或者说是某地的犹太人的拉比管理他们手下的犹太教徒,他们那些基督教徒和犹太教徒分布的范围都是跨地域分布的,但只要他们在信仰上属于某个主教,就可以通过这个主教,跟哈里发发生关系。例如是科普特人的主教住在亚历山大,但他实际上还管理努比亚和埃塞俄比亚的教会。这些教会,哈里发就有理由通过他,自居为埃塞俄比亚和努比亚的宗主。

[00:07:50]米勒特制度假定的是一个,在伊斯兰教理论中间,是一个属于和平地区的政治体系。在哈里发统治的和平地区中,伊斯兰教徒已经占据了永久性的主导地位,伊斯兰教自然要通过他的卡迪(注:阿拉伯语音译,意为“教法执行官”)和法官来统治,卡迪和法官会有解释法典的权力。而其他各种宗教,受到宽容的犹太教徒和基督教徒,通过他们自己的教团,享有治外法权。从伊斯兰教理论上来看,他们应该是逐渐减小并最终被收编的群体。在这个和平世界的边界之外,在面对异教徒的广大世界中,他们仍然是一个等待传教和征服的对象。在传教和征服的过程中间,可以签署一系列具有权宜之计性质的合约。

[00:08:43]和平世界如果能够永远保留它理想上的状态的话,那么早期伊斯兰教的世界秩序也许真的会实现。但是问题在于,和平世界本身自己的秩序供应是出了问题的。阿拔斯王朝后期,哈里发制度开始向柱国制度和苏丹制度演化。从伊斯兰教的法统观念来看,这就意味着,僭主对合法统治者的篡夺。柱国,或者照阿拉伯的音译叫做道莱,或者苏丹,意思就是强人领袖。他在正式体系中间没有合法地位,但是在哈里发衰微、政权的正统性需要保卫的时候,军事强人就从哈里发那里得到柱国或者是苏丹的称号,根据这个称号和授权辅佐哈里发,代替哈里发行使权力。

[00:09:36]最初产生的柱国是在叙利亚,是由阿拉伯人本族的雇佣兵组成的,后期的苏丹往往就是从北方的突厥人或者是斯拉夫人组成的蛮族雇佣兵,而苏丹大多是这些蛮族雇佣兵的领袖。他们只称为苏丹,把哈里发变成放在宫廷里面毫不重要的傀儡。结果导致了伊斯兰世界的再度封建化。柱国和苏丹的正统性不如哈里发。强大的封建领主,或者说是蛮族入侵者,在控制了一、两个省区以后,往往都能够从旧的哈里发或者苏丹那里得到一定的称号。这些称号往往会进一步降低为埃米尔或者其他东西。随着这些南入的军事集团逐步增多,晚期的阿拔斯王朝逐步变成一个碎片式的、大批封建领地构成的一个综合体。后期伊斯兰教的动力,主要来自于这些大多数是由蛮族将领组成的封建体系。像征服中亚和印度的活动,主要就不是由早期的伊斯兰教徒、阿拉伯人或波斯人,这些人力精力早已经耗尽了,而是由后期进入阿拉伯土地、接受了哈里发封号的改信伊斯兰教的蛮族首领展开的。

[00:10:55]伽色尼王朝(963~1187)打开了通向印度的道路,把伊斯兰教扩张到印度河流域,最后经过几个世纪以后,逐步产生了德里苏丹国(1206~1526)和莫卧儿帝国(1526~1858)。入侵印度对伊斯兰教来说有一个很无奈的效果,就是说,原先默罕默德的传教活动中间,他考虑的是基督教和犹太教,也就是属于亚伯拉罕一神教这个系统的其他宗教,伊斯兰教以改革者自居,以更加纯洁的一神教自居,准备扫除掉这些原有宗教中间不纯洁的部分、具有多神教色彩的部分,使其恢复本原色彩。从某种意义上来讲,伊斯兰教与其说是一种独立的宗教,不如说是犹太基督教传统的一个新的改革宗,一个特别强大的改革宗。但是先知对于纯粹的拜物教——包括麦加他们原先曾经盛行过的这些崇拜自然神的各种多神教并不尊重。

[00:11:52]所谓的伊斯兰教的宽容,实际上是指的是宽容有经人(Ahl al-Kitab)。有经人就是指旧约、新约这样的宗教经典。从伊斯兰教教义的角度来看,这些宗教经典是正确但是不完备的。它部分的代表了上帝的旨意,耶稣和摩西都是接受了上帝旨意的先知,但是上帝的旨意尚未完全,要等默罕默德来了以后才能完全。所以有经人之所以得到宽容,因为他们的经典是正确的,但是没有完备的经典,是伊斯兰教的先驱。伊斯兰教并不是否定了这些经典,而是包含了这些经典,然后又加以添加。但是非一神教的其他多神教,崇拜星星、树木、石头、动物之类的,那就是完全的邪教了,是属于打击的范围,并不在宽容之中的。默罕默德在征服阿拉伯半岛以后首先做出的决定就是,在阿拉伯半岛只能有伊斯兰教存在。原始的多神教,除了麦加那一块玄石被赋予了新的意义而保留下来以后,原始的各个城邦的保护神和拜物崇拜基本上被扫除了。

[00:13:04]在印度,他们面临着同样的问题,就是说印度教、佛教这样的看上去神像众多的宗教,是不是属于有经人的范围。按照原始的定义,在伽色尼王朝这样比较狂热的传教者看来,他们显然都是属于邪恶的多神教,他们的神庙需要被拆除和毁灭。对印度的征服持续了几百年,直到莫卧儿王朝中叶的时候,阿克巴时代(1542~1605)的时候,才有人提出新的理论,认为印度的各个传统宗教也可以纳入宗教宽容的范围。但是这一点始终没有变成正统的学说。在奥朗则布执政的时期(1658-1707),莫卧儿帝国又恢复了他的宗教迫害政策。印度教徒或者是印度其他多神教徒在什么情况下能够分享犹太人和基督徒所能够得到的宽容,这在伊斯兰教法内部始终是一个很有争议的问题。伊斯兰教在十世纪以后进入中亚的时候也发生了同样的问题。伊斯兰教对佛教的取代,在中亚是一个伴随着血腥屠杀的过程。佛教的僧侣,照现在发现的考古证据来说,遭到大批屠杀,他们的经书遭到焚烧。现在龟兹的藏经洞发掘出来的考古学遗址中间,还保留着僧人当时被砍断的残肢和血泊。

[00:14:36]苏丹政治通过僭主的形式,极大的增加了伊斯兰教的军事活力,但也削弱了伊斯兰世界的正统性。苏丹一般是非阿拉伯人,不符合“阿拉伯语是真主唯一的语言和真主最喜爱的语言”这个基本前提。苏丹的力量一般来自于中亚高原游牧民族,跟原始的伊斯兰教徒没有关系。他们在伊斯兰教法方面的学术是比较浅薄的。在四大法学派斗争之中,喜欢采取武断干预的做法,引起了伊斯兰教内部的纠葛。所以从最初的突厥人,一直到最后的奥斯曼人、阿拉伯人和代理他们统治的蛮族军事首领之间的关系一直很微妙,他们多多少少有点像是后来明朝士大夫和满清之间的关系。一方面,南方的伊斯兰教徒和阿拉伯人已经衰微到这个地步,基本上没有能力保卫自己了。突厥人的干涉,是伊斯兰教恢复战斗力的唯一途径。另一方面,阿拉伯人又凭借自己的正统性和比较优越的学术地位,歧视这些比他们更野蛮的征服者。

[00:15:58]奥斯曼帝国和北方的突厥人的入侵,导致了阿拉伯和伊斯兰世界内部的法律观念进一步演化。哈里发渐渐变成了傀儡,那么拥立假哈里发的政权就会不止一个。阿拔斯王朝被蒙古人灭亡以后,假哈里发的问题就更加突出了。奥斯曼人和埃及的马穆鲁克近卫军集团各自拥立了自己的假哈里发集团。最后假哈里发像一个战利品一样,从埃及人手中落入奥斯曼人的手中。不再出面的君士坦丁堡的假哈里发,在多大程度上还能够维持全世界伊斯兰教徒的长官的名义,在15~16世纪之间逐步变成了伊斯兰世界和基督教世界交涉的一个重大题目。因为它引起了一个反向的干预问题。像法国人或者俄国人这样的基督教君主,他可以根据米勒特制度,提出反向的要求。如果说,君士坦丁堡的哈里发可以代表全世界的伊斯兰教徒,包括那些非伊斯兰教国家统治下的伊斯兰教徒,那么是不是沙皇或者是其他什么基督教国家的君主也可以代表奥斯曼帝国境内的基督教徒?

[00:17:26]这在苏丹政权的法统内部是符合米勒特制度的。因为米勒特制度的实质就是,它跟近代的民族国家或者是绝对主权观念是不相容的。它的统治边界不是地理上的,而是宗教意义上的。基本上所有的米勒特,从理论上来讲,都是跨国的,甚至是普世的。他们居住在全世界所有不同的地点,只要信仰相同,就要接受同样的律法的指令,就要接受同样的教长的指令。对于实施米勒特制度的政体来说,要想把它划分为地方性的、有明确边界性的民族国家来说,就是摧毁了他们宪法的根本。因此,奥斯曼帝国和欧洲各国的交涉就充满了一种奇特的色彩,等于说,你要按照民族国家的逻辑来看的话,等于是双方都采取了侵犯对方主权的做法。奥斯曼帝国境内的亚美尼亚的基督教徒,往往依靠沙皇为他们的代理人;而黎巴嫩的基督教徒往往要求法国人充当他们的代理人。苏丹本人对这些做法是完全认同的,他自己也自称为是英属印度的全体伊斯兰教的代理人。他派出的阿加汗亲王这些人,在英属印度的元老会议中占有一个重要的地位。

[00:18:55]伊斯兰教在宪法方面留下的主要遗产有两个大的标本。一个是黎巴嫩,一个就是英印帝国。尽管这两个地方都在伊斯兰教的边缘上面,但是正因为它在边缘上面,代表着伊斯兰教和非伊斯兰教世界接触的前方,所以它最完整的展示了近代前夜伊斯兰教世界体系的特征。这两个地方的宪制,可以作为一个样板。因为伊斯兰教比较内地,例如安纳托利亚内地,你恰好因为是教团比较少,当地可能除了亚美尼亚以外,没有其他什么教团,所以反而显得不太典型。像黎巴嫩的双州体制和英印帝国的伊斯兰教教团体制,实际上是最能典型的代表伊斯兰教在遭到西方世界体系冲击前夜的真正的宪法结构。

[00:19:50]双州体制是这样一个东西,黎巴嫩根据它的当地宗教教团特点,划分为德鲁兹人和马龙派的两个州。这两个州分别由德鲁兹教派的教长和马龙派的教长来负责。各州都有一个大概是二、三十人组成的长老议会,由当地的各个社区头领组成。双州共同构成一个议事会,再向奥斯曼帝国的苏丹负责,但是奥斯曼帝国如果企图改变双州的宪法结构和税收结构,必须通过双州的保护人。这个保护人,通常是法国国王,或者是后来变成拿破仑,沙皇亚历山大也曾经争取过这个保护人的角色。

[00:20:39]英属印度,在它的宪法结构中间,把各土邦的伊斯兰教社团作为一个特殊机构来处理。他们无论是在比哈尔还是在其他地方,无论当地的苏丹是伊斯兰教统治者还是印度教的王公或者是其他什么统治者,他们在宗教上面都要设立自己的评议会。这些评议会,在印度、德里的副王的宫殿中间,享有顾问的头衔。副王在召集国务会议的时候,在通知和咨询各地王公和苏丹的意见之前,要首先跟具有跨土邦性质的伊斯兰教评议会的代表商议。这些代表商议的结果,将会体现在德里副王派驻各土邦的顾问当中。由于英印帝国主要是一个实行顾问政治的,与其说是国家,不如说是一个超国家的政治大杂烩。顾问,而不是土邦的王公、苏丹之类的,才是它的实际上的统治者。因此像伊斯兰教评议会或者拜火教评议会这样的组织,总督给顾问下达的行政指令实施的实质影响力,是超过他们自己所在土邦的王公或者是国王之类的。

[00:22:17]德里的副王,从理论上讲,最先是莫卧儿帝国的代理人,虽然他实际上是英国政府派遣的。最后在维多利亚女王加冕以后,正式的变成了女王本人任命的代理人。他在法律上来讲,是不利于威斯敏斯特和英苏联和王国本身的政府。从理论上来讲,副王本身是仅次于皇帝的爵位,地位上比欧洲的国王本人都要高,除了兼任女皇的女王本人以外,没有任何人比他的地位高。这样一来,负责向副王宫廷里面派驻代表的各个协议会,例如代表从阿富汗到孟加拉国的跨国的伊斯兰教的团体,就形成了一种,你很难说是一种外交性的权利还是一种宪法上的权利的代表机构。因为这些东西涉及的利益,经常是跨越了奥斯曼帝国和英印帝国两个大国的边界。例如像是印度河外的游牧民族之类的伊斯兰教徒和孟加拉的那些已经完全定居和驯化的伊斯兰教徒之间发生冲突,那么你就很难说这是一个国内问题还是国际问题了。这些邦国中间,有很多,例如孟加拉人肯定是大英帝国的直辖臣民,另外一些呢,则是英印帝国统治之下,名义上是独立的,但是受英国保护和英国顾问监督的那些附属国的臣民,另外一些是英印帝国建外的某些独立部落的居民,他们其中又有一部分从理论上讲是接受奥斯曼帝国的最高宗主权,因此奥斯曼帝国有义务替他们发言。因此在这方面,依靠地理和边界划分主权的法则就基本上丧失了作用。

[00:24:18]你可能会面临着非常奇特的状态,在拉合尔进行的一次诉讼,由英国法官主持,但是法律上来讲却是一次外交活动。其中诉讼一方的代理人来自君士坦丁堡,他从理论上讲有权力管辖从爪哇岛一直到阿富汗的伊斯兰教徒,但是实际上,并不亲自来到印度,而是通过他在印度的代理人。而那些代理人呢,他真实的利益是要把,与其说是要维护本地伊斯兰教社团的利益,倒不如说是要通过本地伊斯兰教和英国政府之间的交涉,在君士坦丁堡的宫廷里面给自己增加若干荣誉头衔。诉讼的另一方则很可能是孟加拉的商人,这些人信仰上讲是伊斯兰教徒,但是他的全部利益都要求英国政府对孟加拉实行进一步的直接管制,通过这个直接管制理顺当地的财政结构,使他们这种没有特权的、完全依靠英国法律保护的商人,在对其他理论上是独立社团的伊斯兰教徒的交涉中间占据有利位置。

[00:25:35]处理这样微妙而复杂的问题,而英国人之所以能够应付的下来,部分原因就在于,英国当时实际上是正在现代化的欧洲国家中间,唯一一个保留了大量封建传统的国家。英印帝国的宪法,是自从拿破仑解散了神圣罗马帝国以后,唯一能够容得下各种享有半主权,或者是各种治外法权的团体合法存在的宪法体制。根据这种宪法体制,伊斯兰教徒也好,拜火教徒也好,还有耆那教徒的特殊社团,都可以通过比附的方式,假定他们是十四世纪或者是十五世纪普通法治下的某一个封建领主,或者是教团。通过比附的方式,使它能够纳入普通法的范围体制内,同时还可以把印度的习惯和伊斯兰教的教法都通过虚拟的方式,假定为相当于是威尔士人或者苏格兰高地人的特殊习惯那种习惯法。通过习惯法与习惯法交涉,以英国上议院裁决习惯法的方式,使它纳入一个更大的印度帝国习惯法体系之中。

[00:26:47]如果英国也是像法国一样,采取比较现代化的主权观念的话,一定要设立一个独一无二的主权概念,把所有的权力都集中到国会或者是政府手中,那么这样的体制就要完全行不通了。任何一次诉讼都会变成严重的外交事件,最后非得通过战争权力在来仲裁。如果按照这种体制的话,那么英印帝国就不可能是由六万土族士兵和几千个英国人就能够统治得下来的一个国家,而非得像是法属阿尔及利亚一样,需要派几十万大军,在每一个村派出警察,建立强有力的行政机构才能完成任务。

[00:27:28]十六世纪以来,伊斯兰教徒和外部世界的接触,大体上可以分为三种模式。第一种模式是奥斯曼帝国为主的伊斯兰教国家和法国大革命到1848年革命以后产生出来的这种经典的新民族国家的接触。奥斯曼帝国跟这些国家接触,最主要的发现就是,虽然奥斯曼帝国号称是专制国家,但是跟这些新兴的民族国家相比起来,奥斯曼帝国的权力过于松散。在它自己的境内存在着大批拥有治外法权的团体,以至于苏丹的权力不能够得到充分的贯彻。而后来青年土耳其党人和土耳其帝国大多数改革家似乎模仿的就是这种体制。这种模仿的结果,首先就要引起奥斯曼帝国国内的宪法革命,它要求根据地区的原则,而不是根据教团和宗族的原则,改组行政机构,取消原有的各教团过去的特权,用中央的行政官对各地区实行实质性的管制。

[00:28:42]第二种模式是奥斯曼帝国面临着东方的本身还没有建立民族国家体制的其他各个帝国之间的关系。这些帝国中间,最主要的就是俄罗斯帝国和清帝国,以及东方的沙赫波斯帝国。在针对这些帝国当中,伊斯兰教徒在中世纪发明出来的那种理论,也就是说,对不信教的君主在什么情况下可以签署条约、在什么情况下又可以撕毁条约的一系列的逻辑,仍然继续适用。奥斯曼帝国对俄罗斯帝国和波斯帝国的交涉,设计出的条约,跟对西方涉及的国际条约不一样,它们跟东方大军之间的条约一样,可以由当时双方宫廷的武断意志随时撕毁,随时可以重新爆发战争。但是对欧洲的交涉就必须完全往另外一个方向。

[00:29:39]第三种模式就是刚才提到过的,奥斯曼帝国跟唯一特殊的欧洲国家,也就是大英帝国之间的交涉。这个交涉在南方的埃及边境,在和印度的边境,都导致了一个多元宪法的结构。在这样的特殊政体之下,主权往往是属于原有的伊斯兰教统治者,例如莫卧儿帝国或者是奥斯曼帝国任命的埃及副王,但是实际权力由英国派出的顾问掌握。嵌入的法律通过习惯法交汇的方式,构成不断扩大的习惯法和造法传统。

[00:30:20]传统的观点认为,在这个时期,也就是大概在十六世纪前后,伊斯兰世界处在被包围的状态,正在逐步的衰微。但是现在的二战以后,特别是九十年代以后的新观点有所不同,他们倾向于,伊斯兰教在这个时代仍然是有进攻性和扩张性的,尤其是体现在东南亚一线。在亚奇,在印度南部,在东非各地,伊斯兰教仍然有进攻性的传教欲望,而且这个传教活动经常是在欧洲殖民者甚至是在俄国殖民者的保护之下进行的。

[00:30:54]这些殖民者庇护伊斯兰教传播的主要原因是行政管理上的方便,如果他们统治缺乏现在被统治经验的蛮族的话,这是一件比较费事儿的事情。如果这些蛮族,例如哈萨克游牧民族或者印度尼西亚的原始部落居民改信了伊斯兰教,那么他们就有了明确的权利和义务,伊斯兰教的长官、教士之类的,例如印尼的伊斯兰教教士联合会,就变成他们的领袖。伊斯兰教法是殖民统治者能够掌握、能够领会的东西,通过这种行动,他们就能够直接跟伊斯兰教教长打交道,借助伊斯兰教的势力去统治这些地方。因此,和有些人想法相反,殖民统治者经常是鼓励伊斯兰教传播的,甚至在俄国或者是印尼那种情况下,伊斯兰教后期的传播,在很大程度上是殖民主义提供经费的结果。殖民主义者的行政官,希望大多数臣民变成伊斯兰教徒,然后他们通过统治伊斯兰的代表,能够轻而易举的实现这些地方的去蛮族化,把难以控制的蛮族和部落居民,变成容易控制、适合于充当管制对象的顺民。

[00:32:16]从十六世纪到十九世纪的整个时间内,相对于其他各种体制,法国大革命以后产生的民族国家体制,一直处在强势扩张的过程中间,逐步的侵蚀了其他各种比较复杂、富有弹性的体制。这个过程直到第一次世界大战,造成了最后的绝灭。以前可以模糊过去的东西,到第一次世界大战的时候就没有办法模糊过去了。穿插在各个国家境内的不同教团,在这个时候必须得选择自己的归属了。而且这个归属,必须得按照民族国家和边界原则来进行。即使在混合政体传统最强的英印帝国,印度的穆斯林,也必须选择是不是要废除君士坦丁堡哈里发对他们宣布的圣战要求。因为奥斯曼帝国既然站在德国一边,那他就要宣布,要求全世界的伊斯兰教徒反对信士长官的敌人。印度的穆斯林,从理论上来讲,有理由响应他们的号召,反对他们的英国主人。

[00:33:27]而英国寇松政府采取的做法是非常微妙的,他一面又要承认哈里发对印度的穆斯林享有宗教性的权力,一面又否定哈里发对这些臣民享有政治上的权力。这一点照伊斯兰教法原有传统来讲是不成立的。因为英国人的意思是要搞一个宪法上的虚拟,把哈里发变成伊斯兰教的罗马教皇,对伊斯兰教本身推行政教分离,从而解决这方面的尴尬问题,这样就用不着冒犯印度伊斯兰教徒本身的信仰,又不至于损害他们效忠大英帝国的政治义务。但这一点在伊斯兰教法上其实是没有依据的,因为哈里发他不是教皇,哈里发一开始就是一个政治性的长官,所谓信士们的长官。他的职责是政治性的,而不是纯粹宗教性的。这种方法能不能够行得通还很难说,但是凯末尔到最后,仅仅过了几年就替英国人解决了这个问题,彻底废除了哈里发制度,使英国人没有必要再进一步考虑这方面的问题了。英国主要是出于混合宪制的传统比较深厚,英印帝国的中世纪色彩又极其特殊,所以才采取了这样尽可能的照顾各种古老权利的做法。

[00:34:41]在参加一战的大多数国家当中,伊斯兰教的社团都采取更加简单武断的方式来确定自己的效忠。例如在俄国境内,拒绝效忠沙皇、而继续效忠于君士坦丁堡的鞑靼人就会遭到驱逐,而在奥斯曼帝国境内,如果配合他们的俄国亚美尼亚宗教首领去支持沙皇的亚美尼亚人,也要遭到强制迁徙。这就是所谓的亚美尼亚大屠杀的起源。亚美尼亚大屠杀渐渐变成一个道德谴责的依据,被认为是纳粹以前搞种族清洗的一个典范。但实际上它真正的原因是一个宪法上的冲突。照过去的米勒特制度来说,无所谓国家主权,只有教团对教民的权力。亚美尼亚人居住在无论边境哪一边都无关紧要的。他们的主人就是亚美尼亚东正教会的领袖。但是如果你要武断的把这些地方都改成现代化的民族国家的话,那么亚美尼亚人如果住在土耳其这一边,尽管土耳其大多数也是伊斯兰教徒,他们就必须忠于土耳其;如果住在俄罗斯边境一边的话,他们就必须忠于俄罗斯。原先亚美尼亚人之所以能够作为一个跨国集团而相安无事,就是因为在米勒特制度或者是教团制度之下,边界和主权是一件不重要的事情,信仰和教律才是重要的事情。一旦俄罗斯或者土耳其这样的超民族的帝国必须转型为近代民族国家,像这样地位尴尬的民族就要遭到极为凄惨的命运。今后的几十年,这种命运就要在巴尔干上演。印度其实本来也要面临着同样的命运,主要也还是因为英国人的处理方式比较模糊,1947年的冲突才没有闹大。否则以印度种族形式和教团的众多和复杂,其中有很多教团和民族是注定要落到土耳其亚美尼亚人那种下场的。

[00:36:38]按照威尔逊总统的理想,以后,凡尔赛会议应该是开辟了一个外交上的新时代,以前的各种历史遗留都可以不考虑了,今后所有国家都应该通通按照民族自决的原则来处理问题。但是这样的处理方式的前提是,民族分布必须跟国界基本一致。在米勒特制度盛行的中东和伊斯兰教世界,这种处理方式是根本不存在的。例如在巴尔干的君士坦丁堡和保加利亚行省,种族之间的划分和职业之间的划分是基本一致的。保加利亚人基本上是农民,希腊人基本上是商人,每一个行业对应一个特殊的族群,各个族群对应特殊的教团,各个教团相互之间镶嵌在同一座城市里面,你很难说这一座城市具体说来是属于哪一个多数民族的。而多数民族,如果按人口来算的话,应该是农民,但是农民在政治上恰好又最分散、最不成熟的。最具有自治能力的团体,一般来说恰好是少数民族。如果按照威尔逊的原则去重建民族国家,那么种族清洗应该是在所难免的。从第一次世界大战到第二次世界大战几十年之内,巴尔干地区不断爆发种族清洗,归根结底就是这样的原因。

[00:38:01]按照现在制造的标准历史叙事,巴尔干冲突是当地民族反对伊斯兰教统治者的战争。但实际情况却不是这么简单,与其说是现在的那些居民是当地民族正当的继承者,不如说是他们经过几次屠杀或者驱逐以后,残余下来经过重新重组的居民。被驱逐的对象,一般来说,恰好是当地最先进的、最具有国际化视野的团体;留下来的族群,往往恰好是最保守、最被动的居民。巴尔干半岛经过这样几次连续的种族清洗,从理论上来讲制造出了一个族群比较单纯的国家边境,但是付出的代价也是非常惊人的。在奥斯曼帝国统治时期,巴尔干实际上是奥斯曼帝国的生命线和最先进的地区。在奥斯曼帝国退出了以后,民族国家最终胜利以后,它变成了欧洲最落后的地区。

[00:39:01]但是相对于中东的其他地区,巴尔干和土耳其本身都还算是比较好的。土耳其人通过强行驱除了亚美尼亚人和希腊人以后,算是勉勉强强的把原本只有宗教认同的安纳托利亚穆斯林人为的变成了一个民族。但是中东的其他地区,无论你采取什么手段,同样的做法仍然无法实现。在英国人托管的伊拉克,英国人依靠不到人口1%的亚述基督教徒作为他们在行政上的助手。由于英国和土耳其的边境谈判问题,库尔德人的居住地区被划分在土耳其共和国和英国托管的伊拉克王国之间。法国处理叙利亚,则是一个宗教和族群上的百纳被。法国人为了保护黎巴嫩,为了增强它的势力,实现了大黎巴嫩计划,把过去黎巴嫩的德鲁兹派和马龙派实行的双州体制,不仅扩大到整个黎巴嫩山区,而且向西扩大到整个黎巴嫩的沿海地区,制造一个前所未有的大黎巴嫩。双州宪法体系经过进一步的复杂化以后,变成了现在的黎巴嫩宪法,也就是我们现在看到的这个最奇特的宪法,依靠宗教团体来瓜分国家的主要职务,总统归马龙派,总理归逊尼派,国防部长和其他职位事先都根据宗教派系的归属来决定。

[00:40:46]在中东遭到瓜分和托管以后,法国统治的叙利亚是冲突最[严重]的地区。因为法国是民族国家体制的发源地,它的殖民体制,要把本国的体制延伸到中东。它对叙利亚和黎巴嫩的统治,从理论上来讲,要求重新想象和建构黎巴嫩民族和叙利亚民族。以这两个建构出来的民族为基础,将来在殖民主义者离开以后建立新的国家。而英国在伊拉克和约旦的统治没有这个必要,因为英国实行的是君主制,君主对他统治下臣民的种族和宗教上的一致性要求不是太高,他们只需要有一种封建性的契约效忠就可以了。因此即使他们属于不同的民族和宗教团体,都不会发生严重的问题。

[00:41:38]因此,第一次世界大战以后,叙利亚是发生冲突的主要地方。像阿拉伯的劳伦斯这种人,把法国人在叙利亚制造出来的大量冲突归根于法国的暴政。实际情况是恰好相反。法国人在叙利亚的统治,比英国人在约旦和伊拉克的统治,花钱更多,推行近代化的步骤更彻底,需要做出更大的投资和牺牲。但是引起的冲突反而更大。主要原因还是因为当地的各种错综复杂的教团,非常不适应创建民族的需要。而英国人把原有的贝都因部落酋长或者是阿拉伯半岛的权贵家族辅立成为自己支持的国王以后,就大体上可以撒手不管了。约旦国王和他的贝都因军团最后经过几十年的波折以后仍然能够维持不动,而叙利亚在变成共和国以后则变成一个不断发生政变和族群冲突的一个重灾区。这里面的根本问题还是,米勒特制度根深蒂固的一个社会,从性质上讲,不大适合于建立那种需要以同质化民族为基础的共和国或者是民族国家。

[00:42:54]奥斯曼帝国解体和土耳其共和国建立以后的几十年,是西方国际体系和民族国家体系在中东胜利的最高峰。从理论上讲和形式上讲,这些地方以后都应该以土耳其为样板,逐步的建立类似欧洲的国家体系。这些国家除了主流的宗教信仰是伊斯兰教以外,按道理说应该跟欧洲国家没有什么太大的区别。欧洲人给他们引进的宪法,是以十九世纪末期的西班牙宪法为蓝本的。虽然规定伊斯兰教为国教和多数人的宗教,也承认其他宗教的信仰自由,把它的国民假定成为一个已经存在的民族,然后把它的政府假定成为一个已经存在的国家政府,希望他们以这种方式抹去伊斯兰教世界和西方世界的区别,把国际体系扩大到整个中东。

[00:43:45]这个体系在第一次世界大战以后的几十年达到最高峰,但是在50年代以后,就开始面临着新的挑战了。新的挑战,第一波,来自于泛阿拉伯民族主义——我们后来知道的萨达姆或者是阿萨德的阿拉伯复兴社会党这种民族主义的主要的政治代理人。泛阿拉伯民族主义虽然自称为民族主义,但性质上恰好是欧洲人给他们引进的这种民族国家理论的反面。它的理论是,阿拉伯国家不是不同的民族,而是同一种民族。阿拉伯国家之间的国界线应该抹掉,通过复兴社会党,应该是一个具有跨国性质的革命组织。逐步的摧毁掉了这些国家和地区原有的统治集团。然后把所有阿拉伯人团结起来,建立起一个新的大国。它的组织形式,在很大程度上是借鉴了苏联革命以后产生出来的共产党组织。在外交上,由于它的政策要求推翻原有的君主——这些君主经常是亲西方的,或者是推翻西方直接统治的殖民政权——因此它在外交上的主要顾虑,经常是来自于苏联的。所以阿拉伯复兴党在性质上来讲,有许多特点接近于中国的国民党。它一方面本身不是共产主义者,但另一方面,它的主要支持者是苏联,它的组织模式和行为模式受到苏联和共产国际的深刻影响。

[00:45:31]阿拉伯复兴社会党的最初主要领袖实际上是埃及和黎巴嫩的阿拉伯基督教徒。在十九世纪晚期,奥斯曼帝国开始模仿西方制度的时候,最先作为他们的代理人跟西方人相接触的代表人物,往往就是奥斯曼帝国境内的阿拉伯基督教徒。穆斯林和非阿拉伯人在接受西方文化的过程中间存在着巨大的时间差。结果这个人数不多——大概在叙利亚占人口20%,在埃及不到10%——的团体,发挥了极其特殊的作用。贝鲁特这个地方,小小的贝鲁特,从性质上来讲,似乎不像是中东的一部分,而更像是欧洲的一部分。贝鲁特美国大学,为伊斯兰教世界培养出了最初的一批知识分子。正是这些知识分子,模仿欧洲已经产生的民族理论,试图重新构造阿拉伯民族。但他们所制造出来的民族理论,一旦扩散到比他们更大的阿拉伯或伊斯兰教社团中间的时候,立刻就产生了一种反向的效果,把他们自己——最初产生的阿拉伯民族主义者,阿拉伯基督教徒——变成了迫害对象和孤立的少数人了。他们在理论上的建树发展到现实政治层面,只用了几十年时间,而这几十年就是一个搬起石头砸自己的脚的过程。大概以50年代伊拉克和叙利亚的军事政变为界,以前的早期的泛阿拉伯主义的主要领袖还有浓厚的基督教色彩和西方影响的色彩,需要依靠群众运动和选举来夺取政权;之后的阿拉伯复兴主义者基本上都是军官,依靠攻击本国境内的基督教徒和犹太教徒作为团结民众的手段。

[00:47:25]五、六十年代以后,在阿拉伯世界和整个中东,建构民族国家的努力开始逆转,主要就是由于跨国的阿拉伯复兴社会党在苏联的支持下相继在各国夺权的结果。英国人支持阿拉伯军团保卫的约旦是唯一一个幸存者。它在伊拉克的姊妹国家——伊拉克王国,很快就被推翻了。同样在几年时间内,内战蔓延到约旦和叙利亚。这场运动的最高峰是在纳赛尔时代。纳赛尔主义的重要性就在于他希望借助埃及的支援,把泛阿拉伯运动整合到自己的旗帜之下,所谓的埃及、叙利亚和利比亚联邦,在设立的当时是准备作为后来的泛阿拉伯大统一国家的一个蓝本的。这个泛阿拉伯式的大统一,在性质上来讲,有点像是苏联和中国都参加到社会主义阵营,从理论上来讲他们也是要涉及到一个巨大的内圈集团,在这个内圈集团内部,实行具有阿拉伯特殊使命和特殊外交政策。因此纳赛尔认为,他有权力在叙利亚发动政变的时候,派军队去干涉叙利亚,在也门发生内战的时候派军队去干涉也门。与此同时,如果是欧洲国家在阿拉伯世界发生内战的时候进行干涉,例如像是英国干涉科威特那样,那是不正确的。因为阿拉伯世界的国家,不是正式的、欧洲国际体系想象的那种合法的国家,而是一个过渡状态。经过了这个过渡状态以后,它应该被整合在纳赛尔领导的泛阿拉伯运动当中。纳赛尔本人的企图失败了,但他不是泛阿拉伯运动的唯一的代理人,其他人也怀有同样的梦想,只是不高兴让纳赛尔和埃及充当领袖而已。

[00:49:27]六十年代行将结束的时候,中东大概划分为两个阵营。革命的泛阿拉伯势力已经占据了中东人口最多的几个国家,在英国保护之下,由保守的君主制维持了少数国家,例如科威特、沙特和约旦,都是人口比较少、游牧部落传统十分深厚、缺少定居居民、缺少吏治国家传统的、在阿拉伯历史传统上不太重要的边缘国家。七十年代和八十年代,是泛阿拉伯运动在国际社会上的最高峰,但也是他们自己走向衰亡的伏脉。因为事情发展到这一步,就有两方面的问题出现了。

[00:50:18]第一就是泛阿拉伯势力跟他们传统上的保护人——苏联的关系,不能再像以往一样和谐,因为他们已经养大了,自己的特殊利益不再时刻符合苏联的中东的战略。同时势力一旦分散以后,泛阿拉伯各党派内部的冲突就变得很明显。原先是同一次革命产物的叙利亚和伊拉克,居然都在复兴社会党的统治下,渐渐的变成了外交上的仇敌,甚至出现了叙利亚联合伊朗来对付伊拉克的局面。同时,在社会意义上来讲,掌握了政权的泛阿拉伯主义者为了证明他们自己的统治形式不应该跟西方的模板和苏联模板相似,采取了特殊的寡头政权。照他们的理论,典型的纳赛尔理论,纳赛尔的理论+海卡尔的理论就是说:“泛阿拉伯主义从本质上来讲是一种社会主义,因此,它跟西方以资本主义为基础建立的国家不一样,它不会容许以金融寡头为代表的资本家对国民进行剥削。但是它也跟苏联社会主义不一样,苏联社会主义是不保护劳动和私有财产,而阿拉伯主义是一种保护劳动和私有财产的社会主义。”而按照共产党的分类法,他们这种理论,是属于小资产阶级社会主义的范围,跟汪精卫他们那一系的国民党人非常相似。因此在世界革命的某一个阶段,是适合利用的盟友;在革命进入下一个阶段以后,又必须抛弃和打击了。

[00:51:57]结果阿拉伯社会党尽管在夺取政权的过程中间得到了苏联的很大的支持,但是在夺取政权以后,基本上,跟国民党很相似,都要面临着清洗内部的共产党主义者的斗争。随着这些斗争的展开,他们跟苏联的关系也变得非常困难了。一般来说,如果他们在清理内部共产党的斗争中获得胜利太彻底,例如像萨达姆那种情况,苏联就会采取比较机会主义的态度,继续承认他们是这一地区的进步势力的代表,因为苏联已经没有其他的选择余地了。但如果他们清理共产党的斗争不太彻底或者不太成功,那么苏联反而比较有可能支持本地的共产党势力,继续谴责他们已经过了时的前盟友,希望在这些地区建立起即使不是共产主义政权,也是亲共的统一战线政权,像南也门就是属于这种情况。

[00:53:01]八十年代以后,伊斯兰世界开始面临新的挑战,就是现在我们所说的原教旨主义的跨国事物。伊斯兰教的原教旨主义者和其他宗教的原教旨主义者是不一样的,不能说是仅仅看到“原教旨”这个词,就说他们都是狂热的或者是有政治欲望的。因为各教派的原教旨并不相同。伊斯兰教的原教旨,它先天的就包含了政治组织的内容。如果你说伊斯兰原教旨是要恢复到八世纪前后的穆罕默德时代的教规,那就其中必然要包括很多政治组织内容。但基督教原教旨主义,如果你要恢复到新约的本旨的话,它恰好是要教你要逃避政治。宗教改革时期,欧洲的许多新教的改革派,从道理上来讲都是属于原教旨主义者。其中又包含了非常多的纯粹和平主义教派,像是贵格派或者美国阿米绪人这些东西。这些人的主要特点就是要求他的臣民完全退出政治生活,甚至隐居到不大受人注意的殖民地去,开垦和发展自己的社区。而伊斯兰教的原教旨主义者当中,首先考虑的就是像先知本人一样,考虑的是怎样用八世纪的教法来刷新目前的腐败社会。

[00:54:20]原教旨主义之所以在伊斯兰教变成一种新的跨国力量,部分原因是因为阿拉伯复兴党或者说泛阿拉伯主义主导的中东秩序出现了自相矛盾的特点。首先,这些政权都不承认阿拉伯的各个国家是合法的、独立的民族国家,而把阿拉伯世界或伊斯兰世界视为一个有待于统一的整体。这样一来他们就破坏了自己建立合法性的可能性。在他们治下产生的其他思想,也自然不肯承认这些理论上不承认分邦建国、实际上却依靠分邦建国来维持统治的政权。其次,这些国家虽然是在经济理论上来讲,认为列宁主义是不承认私有财产的,但是在政治上,他们要依靠列宁主义组织机器,来维持一个一党专政的格局。实际上这个一党专政的国家不可避免的变成一个腐败和寡头的政权,而遭到疏离的大多数人在需要寻找资源的时候,自然而然的就转到了国内还唯一能够合法存在的组织,那就是伊斯兰教本身的组织。

[00:55:22]在复兴党所统治的国家内部,政治性的自由是不可能存在的,但是由于自身的性质,他们不可能废除本国国内的伊斯兰教。这些伊斯兰教基层的组织发挥了为普通群众提供福利和保护的作用。在政权有可能疏远他们甚至虐待他们的时候,只有这些教会才能够帮助他们,为他们提供资助。像真主党就是一个典型。按照外人的角度来看,真主党好像是一个十恶不赦的、经常扔炸弹的集团,但是在黎巴嫩东南部那些居民的眼中,真主党主要是一个开办学校和医院的组织。当地的人,只有那些受西方影响很深、经济地位很高的人,才有可能到贝鲁特美国大学,或其他什么正规的高等学府去上。一般的穷人,如果想要得到最基本的教育或者是社会服务的话,最好的办法就是到真主党所办的那些机构里面去享受廉价的待遇。塔利班之所以能够兴起,也是因为在巴基斯坦北部和阿富汗南部,伊斯兰教士联合会提供的廉价教育,是当地穷困子弟唯一的希望所在。当然这种教育给他们提供的东西都是有附带礼品的,就是相当于是洗脑的东西。进了这样的学校,受了这样的教育,你出来以后很可能就是塔利班或者是类似组织的候补成员了。所以世界上也是没有免费午餐的。

[00:56:51]伊斯兰教有一个特点就是,它部分的接受了东方专制国家的财产权,它容许苏丹和其他的军事政治领导人去侵犯其臣民的财产权,但是却不容许他们侵犯宗教团体的财产权。因此行之有效的一个保护财产的办法就是,你在设立遗嘱的时候,不要把你的财产分给你打算分给的子女或者是其他继承人,那样的话它们很可能会落到苏丹或者他那些贪婪的大臣手里面。更好的办法是,你把你的遗产捐赠给某些特殊的宗教慈善团体,但是在遗嘱条款中间附加一系列的特殊条款,规定这些宗教团体必须世世代代任命你的子女,或者说是,你真正打算馈赠遗产的那些人,当这些慈善团体的管理人员。用这种方法,财产一旦变成了宗教慈善团体基金会的一部分,那么即使是最强横的苏丹和大臣都不敢侵犯了。而你的子女虽然理论上来讲不是财产的主人,而是财产的管理人,但他们坐在管理人的位子,却要比财产的主人要安全得多。

[00:58:06]这样做的结果就是,中东地区尽管在石油发现以前并不是特别富裕的地区,但是民间的基金会确是异常的发达的。除了极为贫困的人,比较富有的人都更乐意把他们大部分财产,通过宗教慈善团体加以转让。而这些宗教慈善团体在使用他们的财产,使用他们托管的基金的时候,根据古兰经和圣训的原则,有几项是他们特别关心的,就是教育、医疗和社会服务。因此伊斯兰教虽然属于东方专制主义,但是跟我们比较熟悉的中国情况不一样。它在伊斯兰教保护之下,你可以说是一种畸形的方式吧,它的民间社会是相当发达的。巨大的现金流始终能够在官府控制的范围之外流动。随着石油美元进入中东,这些原先虽然组织上已经相当发达但是财产上还不是特别多的组织,一下子变得发了横财了,可能在七十年代以后,大概是全世界最有钱的基金会了。从我们现在的角度看来,今天世界上大多数原教旨主义者,都是用这些流入基金会的石油美元培养出来的。无论是云南那些穿黑袍的伊斯兰教的学校,还是印度尼西亚的教士联合会,还是中亚的乌兹别克那些学校,还是苏丹南部和巴基斯坦北部那些伊斯兰教教士,他们的最终,直接间接的资金来源,都要追溯到中东产生出来的这些基金会上面。

[00:59:47]印度和巴基斯坦两国是英印帝国的继承国,它们的独立,按照我们的话说,是不彻底的,没有经过彻底的革命,因此保留了英印帝国留下的许多法统和特权。他们的许多大法官仍然是英国培养出来的,就是这个现象的一个侧面。因此这些国家的法律中间,对于教团的自治权利,是规定的特别宽泛,特别有保障。因此这两个国家也是,伊斯兰教基金会发展特别迅速。你可以预见到,拥有一亿人口的印度,将来可能就是未来的各种新的伊斯兰教宗教改革团体的一个重大的发源地。

[01:00:44]伊斯兰原教旨主义理论当中有许多各不相同的细节上的差异。但有一点是很明确的,就是,他们明确的把十六世纪以后逐步进入中东地区的民族国家体系当作一种外道的和邪恶的势力,它割裂了伊斯兰教社区传统的完整性,破坏了伊斯兰宗教的普世性质。伊斯兰宗教作为唯一纯正的宗教,它的普适性是它的纯洁性的一个象征。而欧洲国家四分五裂,各建民族国家,恰好就证明了基督教本身并不是足够纯正的宗教,它向世俗主义做了太多的让步,物质主义和功利主义是这种让步造成的必然结果。一切社会问题归根结底都是由于这种不彻底的让步造成的。如果能够坚定的实行伊斯兰教法,例如是实行反对高利贷的教法,那么西方的金融体系就会完全无法展开了。如果能够坚决的实行伊斯兰教关于姓氏和各教团之间相互关系的法律,那民族国家就完全没有存在的必要了。

[01:01:59]而阿拉伯复兴党或者是泛阿拉伯主义可以导向这样一个结果,把所有阿拉伯国家都摧毁掉,然后成立一个全阿拉伯世界的超级大国。但是泛伊斯兰主义不会产生这样的结果。它会要求连泛阿拉伯主义的超级大国也不需要,它只需要一个没有国家名号的一个战斗的伊斯兰教教团。这些教团的领袖,没有必要启用现有的国家组织,没有必要像阿拉伯复兴党领袖一样,在取得政权以后还要用西方的总理或者总统之类的称号,用政党的名号,这种世俗主义的名号来动员和团结它的基本民众。相反的,像马赫迪或者哈里发之类的,具有跨国性质,纯粹依靠宗教的方式来解放民众的组织团体才是他们所需要的东西。

[01:02:58]在中东和伊斯兰世界的大部分,八十年代以后产生的这批新的伊斯兰教知识分子起了一个种子的作用。他们根据他们原先的渠道,很容易把已经得到的资金用还资的方式继续播撒出去。全球化给他们带来了更多的机会,使他们的播种范围可以不再受到原有的习惯性边界的约束。这些习惯性边界大概是在十六世纪的时候,由奥斯曼帝国的教法学家制定的。当时那些教法学家制定这些边界的理由是,伊斯兰教扩张和基督教世界的边境已经大体上稳定,需要有一个比较规范的形式,把和平地区和战争地区的交涉规则固定下来,以便以后的统治者参考。这些藩篱,在以后的几百年中一直维持着,保守的教法学家已经觉得没有必要再去考虑这些东西了,至少在短暂的目前,可以把这些边界看成永久性的。但是在八、九十年代以后,这些边界逐步的倒台了。现在新一代的伊斯兰教知识分子的中心,已经很难说到底是在开罗还是在巴黎了。

[01:04:08]在巴黎的可能性实际上反而更大一些。因为中东地区的统治者在信仰自由方面是管得比较死的。尽管他们自己可能也是亲伊斯兰教,甚至亲伊斯兰教激进主义的,但是他们对于不属于自己同一系,或者是教义和理论上有细节差异的宗教领袖和知识分子,往往会采取残酷打压的手段。而西方的言论自由,恰好为这些创新的理论家和社会活动家提供了良好的避难所。打个比方说,如果你是苏联的一个拥护托派的共产主义者,那么你在英国倒是可以自由活动,在苏联是肯定会被人整死的。伊斯兰教那些知识分子也是这样的。在阿尔及利亚不能立足的人,在巴黎可以立足;在马里和尼日利亚不能立足的人,在巴黎同样可以立足。

[01:04:55]巴黎的清真寺,伊斯兰教的理论家产生了当代世界最大、最多、最复杂的理论。而且这些理论渐渐的又有跟六十年代以后的反殖主义理论合流的倾向。如果与由法农等人开辟的这种理论的合流倾向能够得到认可的话,那他们的历史解释就变成这个样子了:“基督教世界从十六世纪开始对伊斯兰教的征服,是殖民主义的第一步,是摧毁了被殖民国家,伊斯兰教扮演了被殖民国家保护人的角色。西班牙王国对格拉纳达的征服,打开了美洲被征服的先河。征服美洲实际上是征服格拉纳达的一个必然和自然的延续。印第安人之所以失去了自己的国家,主要就是因为伊比利亚的穆斯林失去了自己国家的缘故。奥斯曼帝国衰微以后,中东和非洲以及东南亚,就注定要遭到欧洲人的奴役。所以反对殖民主义的先锋自然是伊斯兰教徒。而伊斯兰教法跟反殖民主义从历史的逻辑和道德的逻辑上都具有内在的一致性。解放,在过去可能是马克思主义意义上的经济解放,但是今后就要解释成为泛伊斯兰意义上的兄弟式的解放。通过使过去的压迫者和被压迫者共同皈依伊斯兰教,摧毁殖民主义的遗产,就可以完全扭转自西班牙征服和地理大发现以来的整体殖民主义。由于殖民主义并不像是泛阿拉伯主义所设想的那样,是一个具体和有限的统治,它代表了一个涉及政治、经济和文化结构的全方位格局,所以摧毁殖民主义,你并不仅仅是一个物质上的、或者是军事上的革命能够解决的。它必须涉及一场葛兰西意义上的文化战争。而这个文化战争,往往需要在西方内部的学府中间产生。”这种新的泛伊斯兰主义,吸收了葛兰西以来西方左派的许多理论,你只要把无产阶级的解放作用换成是伊斯兰教的解放作用,就可以看出他们在逻辑上的非常相似之处。

[01:07:12]随着共产主义理想在匈牙利事件和捷克事件以后渐渐丧失影响力,68年以后,法国有许多原有的左派知识分子干脆改信了伊斯兰教。他们的理由是,争取平等和解放的真正保护者已经不再是马克思主义者,而是伊斯兰教了。以前的其他宗教都有各方面的问题,尤其是种族问题——种族歧视和种族隔离的问题。而伊斯兰教才是真正能够打破种族藩篱,让黑人和白人在同一个信仰之下相互以兄弟方式相待的唯一途径。这种理论在美国就产生了马尔科姆•X和黑人回教徒运动。它的存在理由就是,因为美国的种族之间,当时还是相当明显的,但是他到了麦加朝圣以后发现,来自全世界各地的伊斯兰教徒,黄种、白种、黑种都有,都亲如兄弟的向玄石朝拜,觉得非常感动,觉得无论在美国的现有的社会和政治之下如何改革,都不如大家直接改信伊斯兰教,实现兄弟般的团结来得好。如果说是法国的伊斯兰教仅仅是一个阿尔及利亚移民或者是非洲移民的问题,那么这个问题还倒是比较单纯的。实际情况是,在法国知识界当中,伊斯兰本身已经是多多少少接管了马克思主义原有的生态位,它不仅在人口上增长,而且在理论上跟反殖主义和左派理论做了一个巧妙的嫁接以后,将来还很可能发展成为像十九世纪末期的马克思主义那样,真正颠覆西方的理论创新。跟这种理论创新相比起来,伊斯兰世界现在搞出来的那些恐怖主义和传统世俗国家之间的冲突,还真算不了什么。

[01:09:08]在俄罗斯,伊斯兰教知识分子通过欧亚主义的方式,进入了俄罗斯的主流意识形态。甚至,普京时代的一个特殊之处在于,就是,俄罗斯的西欧派或自由主义派的地位下降到这个程度,以至于他们甚至不如具有鞑靼血统和伊斯兰教血统的欧亚主义者更受普京的欢迎。欧亚主义者在古米廖夫(1886~1921)的时代,基本上都是纯粹的俄罗斯人,没有把东方化考虑在内,他所谓欧亚主义是俄罗斯在东西方之间的特殊作用。而今天俄罗斯的伊斯兰教知识分子公开以欧亚主义自居,则是要求改变俄罗斯本身的性质,把俄罗斯变成一个欧亚混合的特殊国家。而欧亚混合中间那个“亚”,或者说东方的性质,主要就体现于俄罗斯日益增长的穆斯林人口和它的伊斯兰知识分子。因为普京的政策是,他通过伊斯兰教知识分子来绥靖伊斯兰教徒,像通过科拉罗夫来对付车臣只是这个政策的一部分。他召集俄罗斯境内的伊斯兰教居民,让他们组织自己的团体,选出他们的知识分子和代理人,把这些知识分子和代理人以顾问和咨询顾问的方式,纳入了俄罗斯的决策体系。在俄罗斯宪法之内构成了一个具有特殊地位的集团。喀山这个具有伊斯兰传统的共和国的宪法,特别体现了这一点。它要求把喀山作为一个半独立的国家实体,跟俄罗斯联邦签署单独的条约,而它的政策,不仅受到喀山本身的伊斯兰教士联合会的影响,而且还要受到泛俄的鞑靼协会和鞑靼伊斯兰协会的制约。

[01:11:03]这种做法不限于俄罗斯,而且还同时出现在马来西亚。马来西亚政府从理论上讲,坚持世俗国家和联邦制的原则。但是为了应付它的多宗教和多族群的现状,它要求各主要宗教通过他们自己的学者专家构成一个教法学家的组织,通过这些教法学家的组织,向马来西亚政府提供咨询以及相互之间保持常规性的沟通,以此来避免各族群和各教团之间产生不必要的冲突。这种想法在理论上似乎是很好的,但是你也可以看出,他所谓的教法专家组织,从性质上讲,完全是根据伊斯兰教教法学家团体的模式组成的。伊斯兰教组织这样的团体是一点问题都没有的,因为他们长期以来米勒特制度就是这样组成的。教法学家、专家组成的咨询顾问,实际上就是他们的统治者,他们等于是恢复了他们的原有体制。但是其他各宗教和各族群而言,这种体制是非常陌生的。例如马来西亚的华人基督教徒应该是怎样的,或者华人的儒教徒应该是怎样的?为了适应这种局面,他们必须把儒教改称为孔教,然后把儒家学者改称为孔教的教法学家,以这种形式,在当地宪法中才能取得一席之地。

[01:12:24]普京政府在俄罗斯产生了许多长期的效果,其中之一就是,它改变了俄罗斯宪制的性质。经过他这么一种经营以后,沙皇时代从来没有发生过的事情发生了。伊斯兰教,现在在俄罗斯取得一种准国教的地位。由于它的人口仍然在继续增加,这个准国教的地位一旦取得了以后,今后再想要退回来,那就不大可能了。现在从法律上讲,东正教大主教和伊斯兰教大教长在俄罗斯联邦的法律地位,跟波兰主教和罗马教皇在波兰的法律地位是截然不同的:天主教会在波兰发挥的是一个道德上和精神上的引导作用,它在政治上没有直接的地位,只是享有大多数波兰人信仰的宗教这个地位;而东正教和伊斯兰教的教长,按照现有的俄罗斯宪法结构,他就不仅仅是宗教领袖了,他负有管理自身教民的责任。而世俗的行政长官为了统治方便起见,有义务通过教团的学者去统治他们的教民,而不是根据俄罗斯本身法律对他们进行统治。这样就产生了一些很奇特的现象,例如不久前才爆出来的消息,例如像是,车臣人的领袖娶了一个非常年轻的姨太太,诸如此类的东西。这在前苏联和俄罗斯帝国时代,事情不应该是这样的。之所以会发生这样的事情,就是因为目前俄罗斯的穆斯林社团,已经取得了他们以前从来没有取得过的特殊权利。这种特殊权利实际上是要求俄罗斯联邦的世俗法律在涉及民事的问题上,效力低于伊斯兰教法。按照这种模式,俄罗斯联邦在某种意义上,已经退回到十六世纪以前那种状态,它不再是一个民族国家,而是东正教和伊斯兰教教团组成的一个米勒特国家。从性质上讲,非常像拜占庭帝国在灭亡以前的情况。

[01:14:54]我们回顾一下,拜占庭虽然不是伊斯兰教世界的一部分,但是它在地缘上和制度上跟奥斯曼帝国都有很多重合之处。在拉丁帝国颠覆复辟的拜占庭帝国、依靠保加利亚人和土库曼人雇佣兵复国以后,这个新的拜占庭国家对米勒特制度的依赖已经达到了惊人的地步。他不仅把米勒特制度用于它自己原有的臣民,而且把欧洲人——热那亚人、希腊人,和其他基督教居民原有的社团都纳入了这个体制。像加拉太的热那亚人社区,他们跟拜占庭皇帝签署的条约就是教团性质的。在塞浦路斯和拜占庭帝国残留的剩下各岛中间,为拜占庭帝国的亲王服务的少数安纳托利亚的雇佣兵,他们也通过教团的方式,直接跟雇佣他们的王公发生关系。早在君士坦丁堡最终沦陷以前,君士坦丁堡那个位置并不算很大的市场就已经划分给几个主要的教团,跟据他们自己的教法统治了。再倒退几百年,在巴希尔王朝统治的君士坦丁堡,拜占庭帝国曾经从那些市场上收到巨额的收入,超过欧洲各封建国家的总和。但在拜占庭帝国的最后几年中,这个被瓜分的市场得到的大部分收入,都由主管这些市场的教团全都拿走了。而拜占庭王位的继承人,自己必须挤压他们的王官,向意大利的银行家借钱,却很难从那些依然繁荣的市场中间弄到一点点钱。

[01:16:49]奥斯曼帝国进入君士坦丁堡以后,为了继承拜占庭帝国的原有统治权,对拜占庭帝国原有辖区的各种居民继续实行同样的制度,允许他们的主教或者是教长在出席奥斯曼帝国皇帝的国务会议,在他们面前为他们自己统治下的教民的忠诚作担保。尽管征服者占据了君士坦丁堡的许多要害地带和大概一半儿的财政税收,但是剩下的各教团,组织方式仍然是米勒特制度的。从他们当时的角度来看,米勒特制度是同时保证征服者和被征服者双方特殊自由的有效手段。最重要的是,这种手段是具有高度灵活性的,随着双方势力,无论是哪一方势力有消去或增长的迹象,教团制度都可以做相应的调整;相反,宗族制度、城邦制度和领土国家制度就要刚性得多,它不可能随着各个团体之间的势力消长做出及时的调整。这就是为什么经过了十六世纪以来,三百年的演变,表面上看起来好像民族国家曾经一度濒临取得胜利,而在二十世纪下半叶教团制度又卷土重来的强烈倾向的缘故。

[01:18:08]从民族国家的政治伦理的角度看,教团本身是一个很讨厌的赘余,它是跨国性质的,严重损害了民族国家内部的主权,使国家内部的法律制度的统一受到了损害,也损害了统一国家、筹集财政和实施外交的努力。但是它的力量是如此之强大,以至于大多数臣民当中包含部分伊斯兰教徒的国家,都没有办法回避这些教团的存在。而且除了承认这些教团,并把它们纳入自己的宪法结构以外,他们很难找到适当的对待这些教团的方式。在政治秩序完全解体的地方,特别是从中亚费尔干纳盆地到瓦济里斯坦边境地区的这些地方,实际上教团和部落构成了唯一能够实行有效管制的力量。这些团体和部落,和当地理论上的政府,例如巴基斯坦的政府之间的交涉,就很难说是内政还是外交了。他们全都是跨越一定边界的,全都是按照独立的政治集团的身份来采取行动的。他们自己拥有的资金流,在大多数情况下是比理论上能够镇压他们或者统治他们的巴基斯坦地方警察要强大得多。同时,伊斯兰堡的许多政治势力都很乐意把这些教团或部落当作自己临时性的盟友,至少他们可以发挥打击自己其他假定的政治对手的用途。随着这些教团组织的不断扩张的话,巴基斯坦政府越来越像是以前的伊朗国王,变成一个表面上的空壳。在旁遮普人和信德人控制的那极少数大城市之外,从面积上来讲占巴基斯坦绝大部分、包括了巴基斯坦地缘政治上所有重要地区的部落区,日益变成教团的天下,也只有教团才能[统治这些]部落,对这些地方的居民提供更高层级的整合。

[01:20:23]在西非,伊斯兰教社团,传统上讲,是通过精盐贸易和奴隶贸易,先建立商团,然后通过商团,用传教和征服交替进行的方法,把他们原有的宗教团体变成政治团体,通过这样形成的政治团体建立贸易帝国。法国人的殖民征服在十九世纪一度打断了他们这个过程,但随着殖民主义的撤退,这个过程又重新开展了。反殖民主义以后的几十年,越过撒哈拉沙漠南下的伊斯兰教教团,把尼日利亚的大部分居民变成了穆斯林人口,把西非撒哈拉地区的大多数国家变成了伊斯兰各教团争夺的对象。也就是在这个背景之下,你才会看到博科圣地这样的组织。由于媒体曝光的不平衡性,它可能给人一种印象就是说,博科圣地是一个特殊性质的组织,是一个特别坏、特别侵犯人权的组织。但实际情况恐怕不是这样。应该说最近这几十年以来,当地的社会生态中间唯一有活力、能够提供重要社会服务的组织,就是各式各样的教团。博科圣地很可能只是这些教团中间并不特殊的一员,而它之所以变得这么知名,主要是由于西方媒体把报道的视角专门集中在它头上。其实其他教团在这方面可能跟他也是半斤八两,差别不是很大的。

[01:21:47]它不一定是最后胜出的力量,但是在可以预见的未来,这些教团的力量即使不足以完全统治当地,至少也会强大到足够构成当地统治者必须绥靖的力量。像肯尼亚,在英国殖民时代,它的穆斯林人口是接近于不存在的。目前,它的穆斯林人口大概是10%左右,正在不断增长之中。但这10%的人口,已经足以使肯尼亚修改宪法,为这个特殊的少数民族提供特殊地位。在肯尼亚目前实行的那种西方式的选举政治中间,10%特别好战的穆斯林能够有效的筛掉他们讨厌的候选人。在传统的、最古老的基督教大国埃塞俄比亚,在共产主义政权倒台以后不到二十年时间内,穆斯林人口以惊人的速度增加。据说,现在的埃塞俄比亚境内有将近一半的居民是已经变成伊斯兰教人口,而且他们增长的速度比传统基督教人口要大得多。他们跟索马里和努比亚的伊斯兰教团体关系十分密切。

[01:22:55]苏丹南部最近十几年所谓黑人和阿拉伯人的冲突,实际上是伊斯兰教利用它传统的教团形式,绥服多神教和基督教黑人的一种惯常的手段。其实也是因为受到西方媒体的特殊关注,才放大了它的意义,才在公众心中放大了它的分量。实际上这种行为在过去几百年来,在越过撒哈拉沙漠南下的伊斯兰教教团扩张中,应该是极其常见的。南苏丹的独立,在尼罗河上游地带制造一个基督教的孤岛,但是随着大河地区南下的有战斗力的伊斯兰教社团仍然在中非地区积极活动。可以想象,未来的中部非洲,他们的组织仍然会很有生命力。如果有谁能够构成它们强有力的对手,那肯定不是去殖民化以后建立起来的这些非常虚弱的有名无实的国家。这些国家大多数只在它们的首都存在,存在着纸面上的宪法,除了几条主要的交通线以外,对大多数部落地区没有起码的了解和管制。而伊斯兰教通过他们的社团,能够把原先分散的各居民和各部落有效的整合起来。整合以后的教团,比起原先的各部落,通常,即使他们不一定是人道和先进的,但是毫无疑问他们能够有更强大的组织能力和动员能力。这样就使他们对那些没有整合的其他各部落组织享有了巨大的优势。在西方人来到以前,西非的几个主要的帝国,都是依靠这样的形式建立起来的。这些帝国之所以信赖伊斯兰教,并不是像是君士坦丁或者阿育王改信佛教或者是基督教那种行为,而是因为伊斯兰教的组织本身就构成了当地最强有力的组织,甚至是唯一的组织。有伊斯兰教,就能够有帝国;没有伊斯兰教,你就只能有部落。没有伊斯兰教,只能是分散的部落,哪怕是武士非常强悍,但是政治统治的范围肯定很有限。有了伊斯兰教,你就能够跨越部族的边界,建立起广大的帝国。

[01:25:00]同样的模式也见于现在组成印度尼西亚的各岛屿。在荷兰殖民者来到以前,这些以伊斯兰教为组织资源建立起来的新帝国,比过去印度教建立起的那些比较松散的国家相比,具有重大的优势。随着欧洲人的撤退和伊斯兰原教旨主义兴起,像亚奇和伊斯兰教教士联合会那样的组织占据了印尼社会生态中的主要组成部分。六十年代反共军事政变之所以能够成功,主要就是由于伊斯兰教教士联合会能够深入基层的缘故。他们在屠杀当地的共产党人,其中包括许多华人,早已经掌握了当地社区的主要情报。而军政府,那些情报是不可能掌握的。如果仅仅依靠军政府的话,那么他们没有能力把共产党斩草除根的,顶多是在上层政府中间干掉共产党的主要官员和知名人士,但是没有办法避免在比较偏远的地方出现大规模的游击战。这种情况之所以能够避免,就是因为伊斯兰教教士联合会从深入基层的这个角度来看,是唯一能跟共产党匹敌的力量。由于有他们的反共免疫清洗作用存在,今天的印度尼西亚才得以存在。而今天在印度尼西亚的每一次大选中间,违背伊斯兰教士联合会意志的政党是不可能有生存机会的。

[01:26:20]伊斯兰教教士联合会也把它的意志强加给本国的宪法结构,其他印尼的建国五基,五大基础中间,其中有一条就是,要信奉上帝。这个“信奉上帝”不是一定要信仰伊斯兰教的安拉或者真主,而是信奉任何神明都可以。在这种情况下,基督教还没有什么问题,因为他们毕竟也是信奉上帝的,而华人就出现很狼狈的问题了,他们只能把自己自称为孔教信徒,把孔教解释为一种宗教,然后才能使自己符合建国五基的要求,把自己变成印尼宪法结构的有效组成部分。如果他们把孔教当成一种哲学,那就是等于是承认,信奉孔教的印尼华人是一群无神论者,等于在印度尼西亚就变成一个不受保护的群体。如果他们要变成受保护、有充分权利的公民和有效参与政治的团体的话,那么孔教就只能作为宗教存在了。之所以是这样,就是因为印尼宪法用看待伊斯兰教教团组织的方式,来看待所有居民团体和宗教团体。你要想在政治结构中争取自己的地位,你只有模拟伊斯兰教的教团结构,即使你不是伊斯兰教教徒。除此之外你没有办法争取自己的地位。

[01:27:39]未来,从现在的发展趋势看来,能够跟伊斯兰教教士联合会竞争的主要力量,也就只有亚奇的更加极端的伊斯兰原教旨主义势力。世俗的和非伊斯兰的势力,很难在这样的政治生态中间获得一席之地。亚奇现在的更加纯正和激烈的伊斯兰教激进分子提出了自己的独立方案和改造印尼国家的整个方案。他们和比较温和的伊斯兰教教士联合会之间的斗争,可能会构成今后几十年印度尼西亚政治斗争的主线条。这样的斗争才是争夺基本盘的斗争。相比之下,上层的党派斗争是不太重要的,因为印尼的党派都是不大稳定的,但是每一次临时拼凑起来的政党集团,最终,需要选票的时候,都非要依靠控制全国90%选民的印尼伊斯兰教士联合会的支持才能管用。唯一能够克制伊斯兰教士联合会的力量,要么就是军人和专业官僚集团,要么就是更加激进的、甚至具有境外色彩的伊斯兰极端原教旨主义势力。

[01:29:04]苏联解体以后,共产主义作为挑战性的和替代性的意识形态,在全世界范围内都已经丧失了生机。而今天唯一具有革命性的力量,能够发挥相当于是马克思主义那种力量的学说,也就是伊斯兰教了。我们不能抱有一种误会,以为伊斯兰教是一种中古性质的宗教,没有什么重大价值,能够提出来的东西我们早就知道了。实际上它现在已经接纳了大多数二战以后反殖民主义时期提出的大多数左派理论,把这些左派理论,之所以能够这样天造地设的结合,也就是,部分原因大概是在于,伊斯兰教在犹太基督教传统内部,本身就是一个晚来者和挑战者。他认为他是犹太基督教传统的革新者,要清除这些老宗教原有的弊端,补充他们没有完成的真理,但是并不是推翻一神教的真理,而是要纯正化一神教的真理。这个性质跟马克思主义确实是有部分的先天的契合,因为马克思主义一开始也是有他的启示录性质的,他认为他负有洁净世界的使命,通过世界末日善恶大决战来革新整个世界。这两者之间的心理结构一开始就是非常相似的。伊斯兰教有旧约先知的精神,通过狂热的圣战来革新世界的决心。在整个世界似乎都丧失了理想和变得抱残守缺、只能做局部修正的情况下,那些希望从整体上革新世界的人,在过去可能会投靠共产主义的人,在现在就只能去投靠伊斯兰教了,否则他们就再也没有其他的出路了。

[01:30:50]伊斯兰教的教法学家,擅长于把宗教和政治动员能力结合为一体,把追求公正和民主的斗争和伊斯兰教本身的基本教义结合在一起。这两者,构成了它将来在欧洲甚至是欧洲最发达的国家占住基础的最重要原因。一般的看法认为这些东西,欧洲的伊斯兰教是纯所谓移民问题,但是九十年代以后的情况已经不再是这样了。无论是在俄罗斯还是在法国,都有很多原先本来是属于纯粹俄罗斯人或者是欧洲人出身的子弟,甚至是俄罗斯安全部队的军官之类的,都在改信伊斯兰教。这里面的理由也是双方面的。一方面,伊斯兰教的组织性很强,财政支付体制始终完善,他们能够养得起人,能够保护得起人,能够给你提供必要的升迁,能够给你提供足够的社会关系。另一方面,它的理论,它能够以比较简单浅显的方式实现理论上的自洽性。这种自洽性具有普遍的和唯一的性质,不像是大多数国家目前所提出的各种修正版的打了补丁的理论那样,给人一种缺乏美感和逻辑一致性的感觉。福山所谓的那种历史终结,不是说历史世界的终结,而是说是世界理想的终结,就是说可以存在的世界模式逐步趋于,好像人类已经提不出什么跟原来不同的、新颖的理论,提不出什么可以追求的模式了。而伊斯兰教的存在,似乎是专门针对他这个终结论提出来的。革命的伊斯兰教理论,是能够提出替代性的、全球统一的理论的,只要你愿意按照它的要求去做出重大的牺牲。

[01:32:58]所以现在中东和全世界发生的事情,在地方性事件的背后,存在着既古老又新颖的世界体系理论的斗争。这种世界体系,因为它没有自己的身体,没有自己明确的形态,所以容易被人忽略,或者说容易在歪曲的情况下被解释为其他的东西。这个解释不见得完全不正确,例如你可以把它解释为当地的社会不公,或者是政治结构扭曲,专制主义所导致的种种结果;可以把它解释为各种特殊部落或者文化系统斗争。但这些解释本身都是正确的,但它在背后却存在着一个连贯性的线索:伊斯兰教内部的组织,能够提供一个全球化的网络,以非常迅速的方式,把他们的信息模式、统治模式传播到全世界。像伊斯兰国最近在叙利亚稍微取得了点成功,你马上就可以看到,巴基斯坦阿富汗的组织、印度尼西亚的组织、尼日利亚的组织和遍及全世界的各伊斯兰教组织,在极短的时间内突然向他效忠。而且这个效忠好像还不仅仅是出于名义的,因为这个效忠的宣言只花了几个月以后,他们的组织内部就开始展开了相当残酷的清洗和改组。清洗和改组的存在,就表明了这些组织的归附,并不仅仅是纯属名义上的,它有点像是共产国际在二、三十年代对那些加入共产国际外围组织的重新组合,相当于是伊斯兰教式的延安整风。经过这样反复整顿和不断繁殖形成的一个团体的网络,在目前这个全球化为他们提供了充分的交流工具的情况下,将来一定是大有可为的。特别是在边缘地区,在原有的殖民主义撤退后,民族国家的组织名存实亡,没有真正建立起来的地方,他们享有的实际权力很可能比正式国家还要大。而且建立自己的政权,从地下浮出水面,需要的时间是非常短暂的。

[01:35:09]可想而知,在这些组织传播的边缘地区,特别是俄罗斯、中国和印度这样的地方,将来会发生巨大的冲突。因为这些地方它的伊斯兰教团传播的基本条件已经是具备了,但是非伊斯兰教的世俗政权的组织和民族国家的传统仍然足够强大,有一定的抵抗力。在两种有抵抗力的力量相遇的地方,很容易爆发冲突。而在西非或者是尼罗河谷这样的地方,非伊斯兰教团的各种力量是如此的分散,以至于很难发生有效的抵抗。这些地方在可以预见的未来,可能会在近乎无声无息的情况下,经历大规模的伊斯兰化。欧洲可能是未来的伊斯兰教革命理论的一个巨大的孕育孵化中心,失意的法国左派知识分子将在这场运动中发挥主要的作用。

[01:36:08]目前,要预见到未来的发展是怎样,大概是不可能的。但是这种情况确实很像是十九世纪末叶,苏联还没有产生出来以前,西欧社会主义在全球扩张的格局非常相似。任何事情在它发生以前都是有一定伏脉的。也就是说如果某一种思想或者是某一种组织,在某一个历史阶段突然冒出头来变得非常强大,那你一定可以看见,在它冒出头来以前,这样的思想和组织,本身已经有一个地下的大规模增长状态了。相反你也可以把这种推理方法反过来运用一下,你从现在各种思想和组织的发展势头就可以看得出来,它将来会不会有突然暴起的机会,还是会逐渐衰微。如果按照这种思想方法来推理的话,那你就得承认,冷战以后,属于社会主义的所有思想流派,无论是共产主义还是社会民主主义,还是其他什么各种变体,都处在急剧衰微的状态。顺着这个趋势,他们将来在未来的世界中不会发挥主要的作用,而且他们原先控制的地盘也处在不断的萎缩之中。而在不断崛起的各种力量当中,最具有革命性和爆炸性的力量,莫过于伊斯兰教的教团组织。其他同样迅速崛起和扩张的组织还有,但是都没有它具有这样大的革命性和冲击力。所以我相信,未来的几十年之内,他们的冲击会在很大程度上给世界体系留下重大的烙印,比较接近于二十世纪俄罗斯的冲击给世界体系留下来的烙印。而现在的俄罗斯,虽然在形式上好像仍然是西方体系的主要挑战者,但它却是一个正在衰微的势力。它挑战的结果很可能使自己进一步衰微。而伊斯兰教对世界体系的挑战则是正处在方兴未艾的状态,将来还是大有可为的。好,谢谢。

讨论部分(仅选取与阿姨讲话相关的部分,所有问题均经过提炼。)

[01:38:10]某听众:是不是可以说像伊斯兰这样政教合一的国家很容易出现独裁?

[01:38:21]刘仲敬:这个,与其说它们是政教合一的国家,倒不如说它们根本不是国家。至少他们不是说,法国大革命以后建立起来的那种国家模式的国家。它们本身就是教团。它们的教团实际上是不需要国家的。它们能够提供社会生活的方方面面。所以这个信仰的意义,对于他们来说,信仰的意义就绝对不符合比较宽泛的知识分子想象中的那种信仰的含义。知识分子想象的信仰就是我赞成某一种理论和观念,然后赞成完了以后,可能我就去研究去了,或者不研究。但是无论如何,这件事情没有多少社会性,主要是理论上的东西。而教团呢,它在理论上是不先进的,伊斯兰教有一个特点就是它在神学上不是很发达。其实在中世纪,好像是伊斯兰教占领地区和经济势力比基督教世界要强大得多,但是它们远不如中世纪欧洲那些贫困的修道院里面产生出来的神学多。它们的特长在于,它们提供了直接和具体的社会服务。加入了那些团体之后,你实际上在团体之外,就没有别的社会关系了。

[01:39:25]这一点我觉得中国人应该能够理解,因为这一点跟共产主义有相似之处。共产主义跟传统的俱乐部政党不一样。传统的俱乐部政党就是说,我们是保守党或者自由党,就是一帮地方绅士或者商人,观念相似,我们组成一个俱乐部式的结构,但在俱乐部以外,我们还有自己各自的关系。哪一天闹翻了,我退出你的俱乐部,另外组党,那是理所当然的事。但是共产党不一样,你一旦加入了共产党,你的孩子从幼儿园开始就是少先队员,一直到死都在组织的管理之下,除了组织以外你什么都没有。你离开组织以后,你就好像一个残疾人离开拐杖以后,刹那间,至少在短时间内,你连怎么样生活都不会了,连怎么样说话都不会了。所以这一点你才能够解释,为什么共产党员在遭到迫害的时候,往往是怎么都不肯逃走,在有机会逃走的时候都不肯逃走,给他平反的机会他马上就会回去。同样的情况出现在资产阶级政党当中,那肯定就是大家撕逼,然后各自搞各自的政党。

[01:40:21]共产主义之所以会发生这种情况,关键就在于,它的组织能够造成极大的社会关系依赖性。这个依赖性一旦养成了以后,你要想摆脱它另外重新建造一套社会关系,是非常不可能的。你像张国焘这种人,他逃到加拿大去,结果只能做一个领取养老金的人,基本上除此之外什么也不能做了。也就是说,你真正在共产主义组织中混过一段时间以后,你等于是变成了一种特殊材料做成的人,用特殊的语言和特殊的切口。离开这个团体,你连说话都不会了,做事都不会了,你整个就是一个废人。在这种情况下,如果组织哪怕是整过你,只要他愿意给你平反,恢复你的地位,你肯定是兴高采烈的回去了,因为你本来就没有其他的路。

[01:41:03]伊斯兰教的教团就是这个样子的。你如果从小就在这样的教团中长大的话,你跟教团之外的人没有办法接触,你跟教团之外的人没有办法结婚,没有办法交朋友,因为一到生活细节方面的话,你原来形成的习惯和依赖,都对你构成新的社会关系形成了不可逾越的阻碍。这样的教团组织真正的力量就在这个全方位的服务。这个全方位的服务是非常有用的,非常安全的,它能够保护你。例如像现在的新疆就有这样的情况。如果你是个普通的居民,你穷了没有人会管你,如果有人欺负你,没有人会管你。如果你加入了他的某一个教团,那就会出现这种情况,你没有房子,刹那间,会有一批教友从你听都没有听说过的地方跑过来,带着钱、带着工具、带着材料来,帮你一夜之间就把你的房子建起来了,一夜之间你就有钱了,你的家人都得到安定了。但是如果你背叛了他,也可能在半夜之间,你突然醒来的时候,发现你自己躺在垃圾堆上,刚刚建好的房子已经给人拆得光光的。它既是巨大的服务和保障力量,又是巨大的约束和恐吓力量。一旦你加入了这样的团体,即使理论上他没有说要杀你全家,但是实际上你加入进去以后就是一个单行道,你再想要退出来,那个成本是非常之高的。

[01:42:24]某听众:现在的贪官在法庭上承认错误,我觉得虽然可能是违心的,但是可能有一部分他们是真心悔过的。

[01:42:45]刘仲敬:因为人最大的恐惧就是什么呢,被孤独和被抛弃。像高尔基这样的人都是这样的。列宁在世的时候他往往跟列宁吵架,列宁一死了以后,他就觉得他自己变成了孤儿,好像失去了依附的对象,马上就痛心疾首的忏悔起来,说过去不该跟列宁吵架什么什么的。这个事情不一定是别人逼他的。从心理依赖性的角度来看是很容易理解的。

[01:43:08]某听众:美国将来对穆斯林的态度会是怎样?

[01:43:21]刘仲敬:我觉得美国不是伊斯兰教徒的敌人,能够跟伊斯兰教徒竞争的只能是跟它同生态位的团体。对它来说就不存在有军事打击的问题。如果你用现代化的军队去打击它,那当然是可以打掉的。但是你别忘了,你现代化的军队招募到的那些军官,自己都很有可能变成他们教团的成员。像俄罗斯镇压车臣那些军官,往往就是这样的。俄罗斯安全部队当中改信伊斯兰教的比例是格外的高,这一点可能里面应该是有一点儿特殊的奥妙的。能够跟伊斯兰教徒竞争的东西,就是跟它能够占据相似生态位、能够团结群众、能够建立类似教团的组织。

[01:44:02]某听众:那他们会不会在一定程度上挑战美国主导的世界体系?

[01:44:10]刘仲敬:会的。因为美国主导的这个秩序是威斯特伐利亚体系的一个直接延伸,而教团制度所取消的,正好就是国家体系本身。美国等于是这个体系的继承人。而它们攻击的,虽然不是直接攻击美国,但它们间接的攻击了美国体系产生的那个基础和源头。但是这是没有军事或者政治解决方法的。实际上这就是一个社会组织和信仰的竞争。如果它们的挑战失败,那也只是因为在思想观念上和组织层面上产生了跟他们生态位相近、而且足以对它们进行有效竞争和遏制的组织。这个组织我觉得不大可能是民族国家。民族国家跟他们就是,属于有劲使不上,因为跟它们不处在同一个层面上。就好像说你养了一只猎犬或者老虎,让它们去捉跳蚤一样,它肯定捉不住。不是因为你养的猎犬不好,而是因为它们不在同一个生态位上。能够跟跳蚤实行有效竞争的,那大概是其他的某些昆虫,像蜘蛛之类的。能够跟细菌竞争的,大概就是产生青霉素的霉菌之类的。能够克制你的人,肯定是跟你生态位相近的,不会是超越你生态位的东西。

[01:45:21]它这种教团挑战的厉害之处、危险之处就恰好在于,十六世纪以来民族国家体系的产生,实际上是牺牲了中世纪长期存在的许多基础生态位。而这些基础生态位,才是遏制像伊斯兰教团,能够跟伊斯兰教团进行有效竞争的力量。将来如果说是类似的组织,比如说像是圣殿骑士团或者诸如此类的组织不重新产生的话,那么可能现有的民族国家体制是不能有效的遏制伊斯兰教势力的扩张的。所以我觉得最有可能发生的情况应该是这样的,它的挑战,能够在很大程度上,至少在初期阶段,能够像是布尔什维克打倒一大批比较脆弱的国家一样,一下子就打倒了一批比较脆弱的民族国家,造成一个动荡的真空。然后在这个扩张的过程中,引起相当于中世纪那种亚国家团体,骑士团啊,兄弟会啊之类的组织,重新复活。而那些重新复活的组织,才能够跟这些教团构成有效的竞争关系。

[01:46:30]某听众:那是不是说现在伊斯兰国的行为反而能起到一个对世界的推动作用?

[01:46:39]刘仲敬:是个有力的刺激作用。因为挑战和破坏是很难分清楚的事情。同一件事情你说它是挑战还是破坏,那是要看你的观点了。但是,无论如何,就是说经过挑战以后,无论挑战结果如何,世界都会变得不一样。通常你为了战胜某一种挑战,你会不得不接受你的敌人和挑战者带来的某些特征,否则你就没有办法克制他。所以在这种情况下,他即使失败了,也不是完全失败,其中也是有胜利成分在内的。我想伊斯兰教这种团体,它等于是给民族国家体制提供了一个警示,证明我们原先,二战以前还认为是完美无缺的、维也纳会议和巴黎和会都认为是没有问题的这个民族国家体制,其实是有软肋和空白点的。

[01:47:36]某听众:那您说这种刺激作用是不是对普通人而言会造成一种灾难呢?

[01:47:46]刘仲敬:是灾难。

[01:47:48]某听众:所以是不是说所有的东西都是必须要经过这个痛苦的过程才能得到提升和完善呢?

[01:47:55]刘仲敬:仔细想来应该就是这个样子的。因为你所有的优秀品质什么的,都是通过演化论意义上的筛选构成的。你之所以能够,比如说是具备某种能力,那你肯定是因为在过去的演化和筛选中间,有许多没有这种能力的个体已经死掉了。进化和退化也是一样的事情,因为你产生出某些特点或者组织,或者甚至可能是必然会导致另外一些特征或组织的退化。因为一切资源都是有限的,即使物质资源在某个情况下可能达到近乎无限供应,但是机会的资源或组织资源肯定是有限的。比如说你[在某一时段]中,你关注的对象肯定是有限的,你关注了物理学就不能关注化学,无论你物质上的资源再多的话,你不可能同时关注的。你如果把注意力转向化学,那你必然要放松物理学方面的关注。这是一个同样的道理。所以可能世界是永远无法达到完美的。完美只是一种临时的、暂时的最优平衡态。完美的产生,肯定,在某一方面达到完美的同时,在另外一方面就会产生出空门和软肋,结果新的挑战会在你这些空门和软肋产生。而你原先已经认为战胜的这个控制和挑战,则变得不再重要了。

[01:49:23]某听众:我觉得人类文明是不是不能全按照动物世界的丛林法则来走的吧,总会理性一点吧?

[01:49:33]刘仲敬:这个嘛,很难说,因为理性这个东西到底是一种内在的自洽的东西,还是只不过是历史经验产生出来的一个边界条件?这是很难说的。我倒倾向于可能是属于后者。也许理性本身不是一个整体上的东西,而是巨大的、你自己都没有意识到的历代相传的历史经验,给你铺平了一个道路中间画出的一条边界线。这条边界线之所以能够画在这儿,主要是因为历史经验刚好推进到这一步。如果历史经验没有推进到这一步,那么理性的边界就要画在另一个位置上了。而且随着历史经验的演变,这条边界也可能不是固定的,而是在不断演变之中的。

[01:50:15]某听众:那是不是说人类平和的改进不如这种冲击来得好啊?

[01:50:34]刘仲敬:不是说不如冲击来得好。而是因为如果你长期没有接受到某种冲击的话,那么你对这种冲击的抵抗力就会变得越来越脆弱,于是实际上你等于说是,在更长时期内,造成了你面临这种冲击的时候会突然崩溃的可能性。

[01:51:25]某听众:目前能和伊斯兰教进行同生态位竞争的有哪些?

[01:51:36]刘仲敬:我想,就目前情况来说的话,能够跟伊斯兰教进行有效竞争的也就是基督教的传教团体。

[01:51:43]某听众:那目前他们是一个什么样的情况呢?

[01:51:46]刘仲敬:这个我具体也不太了解。当然将来也可能会产生出更加合理的组织。我认为就是跟这种团体能够进行有效竞争的团体,除了生态位相近以外,但是也不应该是完全相同的。它应该能够具备某一些教法团体所不具备的特征,而这些生态位相近,但是特征有异的东西,才是它的有效的克制剂。如果是完全相同的话,那就仅仅能够竞争而不能克制了。所以中世纪时期,十字军战争时期会形成骑士团这样的组织,圣殿骑士团,或者波兰王国的骑兵队这样的组织,可能就是为了这个目的而产生出来的。这种演化是自然。它应该产生在斗争的边界地区。也许像现在库尔德人这样的组织,就是这种应激反应的一部分。

[01:52:48]某听众:所以说现在的伊斯兰国兴起不一定是一件坏事?

[01:52:54]刘仲敬:这要看你从哪个角度来看了。你如果处在没有做准备就遭到打击的那个边界线上,那就不见的是好事。但是[如果]没有这样的打击的话,也就没有办法在冲突地区产生出必要的制度创新和理论创新了。其实人的大部分基因都是转导的产物,也就是说由其他的病毒或微生物给带进来的。所以人可能有70%都是由异种基因构成的。连物种和物种之间的边界都不是明确的。制度和制度的边界当然也是这样。笼统的说可以有这种制度和那种制度,但是所有制度其实都是人类基因组这样的嵌合体,其中留下了很多来源于其他历史时期留下的制度的痕迹,那是历史上各种入侵和模仿的产物。但是可能就是这样七拼八凑搞成的看上去很不规范的东西才有生命力。你如果搞成一种看上去整整齐齐,好像是每一段都是功能明确的基因,这样的基因很可能在自然界是没有生存能力的。这种七拼八凑留下的痕迹,恰好就反应了它在过去的漫长历史中间曾经经历的各种考验,而这种考验是它生存能力的最佳保证。

[01:55:58]某听众:中国会不会受到大的冲击?

[01:56:00]刘仲敬:会的。这基本上是可以肯定的。时间上凑的正好。九十年代以后,基层政权和社会组织倾向于空心化,正好是提供了大好的机会。他们可以填补,多半是已经填补了这个真空了。如果不是这样的话,你就不可能说是现在有什么以河南为中转站的什么地下运输线的存在了。如果是以云南为中转站还比较正常一点,因为云南还是传统的伊斯兰教地区,结果中转站居然在河南。

[01:57:38]某听众:那山东的回族呢?

[01:57:41]刘仲敬:我觉得山东的回族应该是比较老的家族,应该还是相对而言比较固定的。有危险的应该是新来的这种迅速传播的教派。中国的致命之伤在于基层的空虚和枯竭,资金和人才都被抽空了,就是留下来了一个巨大的真空。任何人想进去的话,阻力都不是很大的。

[01:59:33]某听众:我们国家历史上从来都是世俗的国家。

[01:59:38]刘仲敬:这个不见得。你说历史上中国一直都是世俗国家,实际上是因为中国历史的记录者是士大夫阶级,所以他有意的低估了基层各种怪力乱神的作用。像是张角啦,孙恩啦那些乱七八糟的人。所以你要看士大夫记录的历史,就有一种很奇怪的现象,像张角、孙恩那种人,好像是前几年历史上一点痕迹都没有,大家都在关心着谁当什么什么官,谁跟羌人或者匈奴人打仗之类的事情,突然几年之内,好像全国到处都在闹黄巾,他们从哪儿出来的?这好像是不可能的。正确的解释应该是,士大夫阶级不愿意记载这些不规范的、缙绅乡绅难言的、不雅驯的东西,直到这些人实在打上门来,不记载也不行了,才用比较歪曲的方式记载下来。像明朝这样的例子,肯定不会像是明史记载的那样。它的早期历史,十拿九稳就跟孙恩、张角他们这批人是差不多的。只是后来被士大夫阶级重新给改写了。早期它就是一个邪教组织,这也应该是没问题的。

[02:01:41]某听众:我觉得中国每个朝代的君主都是造反上来的,然后长则几百年,短则几十年,又被其他人推翻了。

[02:02:02]刘仲敬:所以中国社会的不稳定性比较强,容易发生大动乱或者是大规模的替代。日本这样的地方就不容易。基督教在日本传了一百多年,现在成就仍然非常之小,这就是重要原因之一,它原有的社会比较密闭,基本上是填合了所有可以填合的空间,就没有什么余地可以让你渗进去的。但是像中国这样的地方,外来的宗教或者组织,突然渗透进去,突然替代,那是太容易了。

[02:03:18]某听众:我的感受是,政府现在对穆斯林的打压不如对基督教的打压。

[02:03:45]刘仲敬:这个可能是因为中国的正式理论还是把自己当作挑战者,当作是世界上的革命力量,觉得亚非拉的革命势力是我们的兄弟,反对美国的都是我们的兄弟,所以想把,多多少少要统战一下伊斯兰教的意思在里面。

附:阿姨在休息时的一段谈话。这段谈话发生于第三讲之前

[00:00:00]刘仲敬:[我所说的]精英不是一般意义上的精英,就是说,不能是只是科举士大夫那种精英,或者是说军人那种精英,你要的就是出钱的人,坦白说就是要资产阶级才行,只有资产阶级才有足够的财政责任感,没有他们那是不行的。近代民主的优越性就是依靠资产阶级专政来建立的。而且随着资产阶级专政的削弱,遭到了严重的破坏。所谓资产阶级专政的削弱,在西方的核心区,在英美这些国家,就表现为普选制,取消了原来那种天经地义的财产资格。不纳税的人不应该有选举权,坦白说就是这个原因,这一点至关紧要。

[00:00:37]某听众:现在都在纳税啊,谁没纳税?

[00:00:41]刘仲敬:间接税不算税,消费税那些是不算税的。它培养不起责任感。英国人当时所谓的纳税人,就是指乡绅和商人。地主纳土地税,伦敦的商人什么的,纳货物税。他们有职业的责任感。像法国第三共和国就有一个制度,它是规定是,文武官员在选举时是不应该投票,因为他们是支付薪水的人。还有一个阶级是不应该投票的,就是仆人。因为其实仆人是有主人的,他投票的时候很容易受到主人的影响,因此去选举是不公正的。而文武百官,他也是仆人,但他不是私人的仆人,而是公共的仆人,所以他们参与选举也是会引起选举混乱的。总的来说,基本精神就是,出钱的人,纳税阶级才应该是投票的人,食税阶级、使用税款的阶级,无论是公家的仆人还是私家的仆人,都是不应该投票的。这才符合政治学的基本原理。

[00:03:36]私人的财产权的绝对性受到损害,它不是仅仅影响到民营企业家或者影响经济,它直接影响到整个社会的创新能力。可以说,西方文明最成熟、创新能力最强的时代就是牛顿和莱布尼茨那个时代——十七世纪和十八世纪。第一次世界大战以后,表面上看技术还在继续发展,但是最核心的理论创新实际上是放慢了的,比起牛顿当时那个时代,那种日新月异的情况来说,可以说是,最基础的理论上的创新是放慢了的,实用技术的发展是增加的。这其实不是个好兆头,这对文明本身是不利的。因为有很多东西,其实最根本的东西就是理论创新。理论创新产生了,有了突破以后,实用技术是比较容易的。理论创新过不去的话,那你这个层次升不上去,单搞实用技术的话,那等于是一个扁平的横向发展。

[00:05:06]实际最需要的,不仅是中国,就是西方和整个世界,最需要的就是恢复到近代早期十六、十七世纪的政治理论上。这才是正本清源。这里面有一点是必要的,就是要破除大众民主、群众民主和一人一票的影响。大众民主只有一个好处,就是它运作起来比较简单,因为一人一票这个东西计算起来比较简单,但实际上绝对不能证明说是,多数派,或者说是群众的意见就一定是真理。实际上这个道理就好像是长子继承权一样,不能说就是大儿子一定比小儿子聪明,但是为什么我们要用长子继承权,因为这样比较简单。谁是小儿子不好说,因为你也搞不清楚,你在四十岁、五十岁的时候会不会再生一个。你要说小儿子继承的话,那现在这几个儿子谁继承,谁也说不清楚,说不定将来出了一个继承人把他挤掉了。这样继承人就会变得很不稳定。但是谁是大儿子,这是很明显的。他第一个生出来,不管再过几十年,他肯定都是大儿子。

[00:06:07]同时长子继承权也比选贤与能要好,因为选贤与能就说不清楚了。你说你数学好,他说我音乐比你好。按照数学的标准我应该上,按照音乐的标准你应该上,这样吵起来就没完没了。要按照才智和功绩竞争的话,最后的结果就一定要搞阴谋诡计。大家都觉得我应该上,搞到最后一定是,由良性竞争转为恶性竞争,搞到家破人亡的地步。相反的,你说无论你聪明也好笨也好、有功也好没功也好,只要你是长子你就上。那这样的话,马上就可以解决很多具体的纠纷。按照中国古人的话,这叫做大位不以智取。尽管长子本身不一定高明,但是因为长子继承权这个概念可以一下子消灭很多不必要的争论,所以这个制度就是有道理的。一人一票也是这样的。实际上一人一票是没有道理的,多数人根本不见得正确,群众根本不见得正确。但是一人一票这个做法的好处在哪里?它可以防止作弊。你要划分选举团的话,谁有资格、谁落选,那么作弊的机会会多到无穷无尽,人人都想作弊,而为了作弊又会引起很多阴暗的党争,这些党争对政治的破坏作用非常之大,为了避免这些问题,所以还不如干脆就一人一票了。真正合理的原因就只有这一点。其他所有的理由都是神话性质的,不值得推敲的。

[00:07:25]某听众:那如果你说谁出钱谁来决定的话,有两个问题。其一,如何保证有钱人对没有钱的人做出的决定是公平的?其二,如果使钱多的人有更大的权力,在大众民主制下该通过何种方式实现?

[00:07:45]刘仲敬:实际上有一个非常简单的办法,其实张五常提过这个办法,就是选票买卖,公开出售选票。还可以再加一个彭定康式的修正:可以实行一种一人两票制。一票对应兵役,你投了这一票就要尽军事义务,就要当兵,如果不当兵的话,你没有这一票。只要你当了兵,用你的血做了贡献,这一票就是你的了,不可转让。还有第二票是可以转让的。你可以不卖,留给自己,但是你要高兴卖的话,出卖这个选票是你天然的权利。谁出价高,或者是你看谁顺眼,你可以出卖或者赠送这张选票。按照这种形式实行一人两票制度,可以解决现在大众民主制引发的问题。

[00:08:32]某听众:那这跟贿选买票不就是一回事么?

[00:08:38]刘仲敬:贿选是个很正面的现象,它不是坏事。英国人、罗马人和雅典人在他们的黄金时代,他们的选票实际上都是可以买卖的。

[00:08:51]某听众:我觉得如果要采取这种选举制度,必须存在许多政党。要是只有一个政党的话,你让我们选谁去呀,呵呵~

[00:09:06]刘仲敬:这个嘛,我说的是理想的政体,这个理想政体不大可能出现在中国的。我刚才提出的那种做法对于西方现在的那种一人一票的社会福利的大众民主,是一个有效的矫正。按照我这种选举制度的话,他们现在就不会有什么福利国家的问题,不会有什么穆斯林移民的问题,这些问题从源头上就不存在。至于在中国嘛,在有共产党的国家,老实说,问题是解决不了的。只要有共产党存在,你无论多么好的方案都执行不了,好方案和坏方案完全一样,反正全都是空想。他无论如何都不肯交出权力。所以老实说,不管你想往哪一个方向改革,你都得要排除共产党。

[00:09:46]而共产党的问题在于,它有一种犯罪集团的心理,它不是一个可以退休的政治集团,它是有黑历史的犯罪集团。他退休以后,不可避免的要面临着无法交代的过去,仅仅凭这一点他就不能退。这是一个共犯结构的问题。比如说我跟你一起赚钱,这一点不能保证我们将来一起团结,因为我在别的地方也可以赚钱,说不定我就跟你撕逼了;但是如果我跟你联合起来把他给杀了,那么我永远不敢背叛你,一旦背叛了你的话,我自己就会暴露,整个就要完蛋了。像上次洛阳不是发生一个绑架案么,绑架好几个小姐,最后那个男的联合几个小姐杀了其中一个想要逃跑的小姐,所以最后的话,其他几个人都不敢背叛他,为什么呢,因为一旦背叛他,她们自己就是杀人的从犯,所以她们不敢面对警察。

[00:10:35]共产党的情况就是这个样子的。他自己构成了一个既是加害者又是受害者的共犯结构,哪怕是表面上看是受害者,实际上在这中间也是有自己的不光彩的一份在里面,所以是禁不住曝光的。这一点才是他能够维持统治的根本原因。你想想王实味那些人为什么受了害还不肯逃跑,像现在那些被打的贪官污吏什么的,为什么他不肯辩护呢,说是不能跟党组织对抗,那是因为即使目前给他加的这些罪名是纯粹冤枉的,但他自己另外肯定还有黑历史在党手里面。他不是一个完全无辜的人。没有党的话,一旦真相完全曝光的话,他的真正身份肯定是通缉犯。所以即使党迫害他,他也只能希望,或者是“家鸡打得团团转,野鸡打得到处飞”,他是家鸡,他永远离不开党,他希望党有朝一日回心转意,像是胡耀邦时代那样重新拨乱反正。他绝对不敢到共产党以外的地方去重新开始生活。这一点才是它能维持团结的真正逻辑。所以你就不能把它当成一个政治集团来考虑,你得把它当成一个有共同黑历史而且不能曝光的犯罪集团来考虑。按照这种方法来考虑的话,许多事情就可以解释清楚了。

#完#

刘仲敬在不骂娘的时候,论诉还是很精辟的。
很多国人说起伊斯兰教,就说要大力推进世俗化。
但是世俗化是结果而不是动力。
知乎对伊斯兰教的回答很多,但一般只限于表层的经义或行为。而忽视了伊斯兰教是一种强有力的社区共同体组织形式。
划定共同体边境和对共同体之外实现党同伐异的歧视和斗争。这是伊斯兰组织成功的基础。
补充两句。中国人通常持有主权国家至高无上的观点。而这种观点,在经济上受到跨国公司的挑战,在文化上收到穆斯林社群,以后可能还会有其他跨国宗教社群的挑战。未必是最好和最后的发展范式。

真搞不清上面有多少人真用心看完了全篇,理解了阿姨所言表达的观点,看看楼上多少人纠结于细枝末节的概念、历史错误而一叶障目,却把握不到重心

阿姨认为在当代解决以伊斯兰教为组织方式的社会组织所造成的恶劣影响是不可能的,因为当代的社会资源的组织力量大多都是现代化的国家,也就是中国、美国、俄罗斯这样的现代化大国,这些现代国家无法对抗伊斯兰教恐怖组织是因为它们两根本就不在一个层次,现代国家最有利的对抗伊斯兰教恐怖组织的手段是军事打击,但军事打击只能消灭掉一两个特定的伊斯兰教恐怖组织,消灭不了产生伊斯兰教恐怖组织的土壤和其功能性的价值作用,现代化国家的组织力量虽然在军事和调节府际关系方面非常强大,但无力于社会的治理和思想文化的维持和塑造,而这些正是伊斯兰教势力的根基地。他认为在当代伊斯兰教所引发的各种问题是无法根治的,想要根治只能借助于类似的组织,如圣殿骑士团、圣约翰骑士团这样的组织,而这些组织早在现代化之前就被扬弃掉了。
为什么伊斯兰教势力能一直维持到今天?这是前几篇文章的主题,阿姨认为伊斯兰教是一种特殊的社会组织方式,而不是简单的宗教团体,而欧洲大陆由于现代化已经失去了这种动员能力和方式。在伊斯兰教势力范围民族国家的主权和边界的价值是很小的,社会运作的中心是信仰和法律。当代的伊斯兰教恐怖组织的土壤就在这里,因为当代大多数伊斯兰教国家都是用民族国家的方式存在和运作的,这些国家本身就是反伊斯兰教理想的存在,相反那些恐怖组织更贴近伊斯兰教的原意,即跨越国家的一切主权和边界建立信仰的统一体。
虽然伊斯兰教势力有着超越现代国家体制的能力,但伊斯兰教势力却不得不依赖现代国家才能存在。伊斯兰教势力会像寄生虫一样蚕食现代国家,从现代国家身上吸取资源,但它们本身缺乏独立运作的能力,伊斯兰教无论是理想还是组织方式都是不经济的昂贵的,它不得不依赖宿主,宿主一旦死亡,伊斯兰教势力自身就会分裂和灭亡。所以伊斯兰教势力虽然具有对现代性的冲击力,但不具有对现代性的超越力。

阿姨思想的核心来自于对人类社会有着非常深刻的洞察和见解,这是一套颇有马克思主义作风的人类社会元素周期律。但他无力于将之理论化系统化地阐述出来,他只能用现有的概念和名词去表述新事物的图景,实际上这些现有的概念和名词对他思想的解释力非常不足,他最终也迷失在了那里,导致他最终南辕北辙。而大多数人只知道那些概念和名词最肤浅的表面含义,他们更不可能理解阿姨の深意。
但最后阿姨便化身为教主,可惜可惜≧﹏≦

伊斯兰的力量在于社民党白左的政治正确。反之一旦民族国家撕下政治正确,极右翼或极左翼起来,以伊斯兰这种野生状态会什么下场基本是可以预期的。目前在欧洲的情况j就看是哪边更快了。

和谐畅行版 简明伊斯兰史

本文为阿姨6月讲演的整理稿,原题《“真主的秩序”——伊斯兰宪制与欧洲体系的共同演化》,是阿姨首次、也是唯一一次大篇幅深度剖析伊斯兰文明,冬川豆对本文同阿姨进行了多次的核对校订,耗时日久。由于众所周知的原因,广大非订阅读者收到的是和谐版,完整版于同一时间发抵冬川豆订阅读者。正文共计2万8千字,明日将推送问答部分。感谢场记三马兄。

(一)未能实现的普世和平

麦叶王朝(661-750,又译倭马亚王朝,阿拉伯帝国①的第一个世袭王朝。在伊斯兰教最初的四位哈里发(即所谓“纯洁的哈里发”或“正统哈里发”)的执政结束之后,由阿拉伯帝国的叙利亚总督穆阿维叶(即后来的哈里发穆阿维叶一世)建立。从661年至750年,该王朝是穆斯林世界的统治王朝)化家为国,从阿拉伯人的角度来看,是一种胜利。因为阿布·苏富扬(麦加贵族领袖,原本是穆罕默德的敌对者,后皈依伊斯兰教。他的儿子穆阿维叶·伊本·阿布·苏富扬成功夺取了哈里发的宝座,开创了伍麦叶王朝)代表了阿拉伯的城邦传统和部族传统。但是从伊斯兰的普世主义角度来讲,那是一个失败。它意味着默罕默德本人的理想有一部分没有达成,政权又重新回到阿拉伯元老和酋长的传统势力手中。这些人并不高兴把伊斯兰教作为一种普遍的、适合于全人类的宗教,把所有人都变成自己的教友,而是希望把伊斯兰教变成一种近乎特权的标志,把权力掌握在最初的阿拉伯骑士和元老手中,把后来被征服的大多数地区的臣民保留在非伊斯兰教的状态,这样他们才能够根据古兰经的依据,向非伊斯兰教徒征收人丁税。如果这些非伊斯兰教徒真的改信了伊斯兰教,那么人丁税就没有办法征了,他们的财政收入会受到严重的影响。同时既然大家都是伊斯兰教徒,那么待遇就应该比较平等,那么原先仅仅由阿拉伯贵族享受的大量的津贴,也就要给别人分享了。这两者都是他们不愿意看到的。

1、阿拉伯帝国(632-1258),阿拉伯半岛上的阿拉伯人于中世纪创建的一系列伊斯兰穆斯林哈里发国(本意为哈里发的领地)。唐代以来的文言文史书均称之为大食国,而西欧称作萨拉森帝国(在拉丁文中意指“东方人们的帝国”)。帝国存在了600多年,主要有神权共和时期和伍麦叶王朝、阿拔斯王朝两个世袭王朝。帝国最盛时,疆域东起印度河西至大西洋。由于其地理位置和扩张性,阿拉伯帝国改变了周边文明诸共同体的发展进程。

640
▋伍麦叶王朝诸哈里发谱系图,同时显示了伍麦叶一系与先知穆罕默德及正统哈里发奥斯曼的宗族关系

640
▋叙利亚境内一座伍麦叶时代的沙漠宫殿,阿拉伯骑士集团征服并管理黎凡特的重要堡垒

阿拔斯王朝(750-1258,穆罕默德的叔父阿拔斯·伊本·阿卜杜勒·穆塔里卜的后裔哈希姆家族在什叶派和呼罗珊波斯人的支持下建立)对伍麦叶王朝的胜利,从疆域上来看是伊斯兰势力的扩张,但是从性质上来讲,实际上是伊斯兰最初秩序的又一次退化。因为阿拔斯王朝依靠的是波斯和呼罗珊(包括今天的波斯东北、土库曼东南和阿富汗北部地区)的势力,它多多少少借助了非阿拉伯人对阿拉伯歧视的不满,利用波斯人的力量来颠覆了大马士革的阿拉伯力量。阿拔斯王朝是伊斯兰世界文官制度的真正创始者。它尽可能地继承了波斯的帝国传统,把主要的权力交给哈里发大臣主持。而这些哈里发大臣的伊斯兰教色彩往往非常淡薄,有些人甚至是,比如说是,一千零一夜里面那位大臣,实际上他的家族是出于佛教徒的一脉。另外这批人是萨珊波斯的后裔。对于西部和南部的阿拉伯人来说,呼罗珊人或者是东方人的胜利,进一步地削弱了伊斯兰教原有的势力。阿拔斯王朝带来的另一个改革就是伊斯兰的普世主义最终失败了。在圣战最初开始展开的时候,伊斯兰教的一个基本假定就是,战争应该是短暂的,最终,在不久的将来,战争地区将会消失,全世界都将在伊斯兰教的秩序之下实现和平。但是阿拔斯王朝把统治中心迁到巴格达以后,世界图景发生了变化,伊斯兰教世界和战争地区的冲突和分裂,将会变成一种永久性的趋势。因此新的法学派应运而生,开始讨论关于信教的君主和不信教的君主之间的相互关系。在最初的征服时代,这个相互关系是不存在的。

640
▋伍麦叶时代帝国版图东扩示意图(颜色越浅征服越晚)。较晚征服的波斯背景浓厚的帝国东部在政治、文化、军事方面深刻影响了之后阿拉伯帝国乃至整个伊斯兰世界

640
▋梅尔夫不但是前伊斯兰时代波斯帝国东部最重要城市之一,也是阿拔斯王朝势力对抗伍麦叶王朝的军事、政治大本营

640
▋阿拔斯时代《古兰经》第四十八章《费特哈》(胜利)

在一个和平地区和战争地区并存的世界上,就必须得巧妙地解释古兰经中关于权宜之计的理论。权宜之计就是说,伊斯兰教徒在存在异教徒的世界上怎么跟他们相处。如果伊斯兰教是统治者,应该怎么对待他们;如果伊斯兰教是被统治者,应该怎样接受非伊斯兰教的统治者。伊斯兰教的君主跟非伊斯兰教的君主打交道的时候,他们签署的协议,在什么情况下是有效的,什么情况下是无效的。他们创造的这个理论有点像红衣主教黎塞留(阿尔芒-让•迪普莱西•德•黎塞留,1585-1642,枢机主教、路易十三的首相。为了打击哈布斯堡王朝势力,黎塞留与信仰新教的瑞典和信仰伊斯兰教的奥斯曼土耳其结盟)后来跟土耳其人结盟时创造的理论。首先要确定伊斯兰教君主本身的正统性,也就是信士们的长官的利益和信士的利益从根本上是一致的,以此为标准,如果符合信士们的长官弘扬信仰努力本身,那么出于权宜之计,跟异教徒签署的协议仍然是有效的;但是如果不符合这个标准,即使签署了协议也是可以不遵守的。因此条约或者是秩序的合法性,归根结底要取决于信士们的长官本人的合法性。

640
▋穆罕默德

但这样就产生了一个重大的问题,信士们的长官,也就是哈里发,他的合法性是怎么样建立起来的?先知本人死得太仓促,没有留下一个明确的传统。在他死后的初期,也就是所谓的共和时代,麦加和麦地那城邦的传统起了一定的作用,哈里发的职位多多少少是由元老们产生出来的。伍麦叶家族迁到叙利亚以后,把统治权恢复为世袭了(叙利亚和埃及是穆阿维叶·本·阿比·苏富扬势力的大本营,他胁迫第四位哈里发阿里的长子哈桑放弃继承权,并假装同意阿里的次子候赛因·宾·阿里在他死后继承哈里发之位,但暗地积极培植自己的儿子亚泽德的势力。680年,穆阿维叶死,亚泽德攻杀候赛因·宾·阿里,继承了哈里发之位,从此,穆阿维叶的后代世袭为哈里发)。阿拔斯王朝把首都迁到巴格达以后,更没有意识要恢复原有的族长选举。结果就造成一种很微妙的状态,事实上,哈里发的权力是可以用武力夺取的,甚至可以通过宫廷政变来夺取。攫取权力之后,没有人能够真正地对哈里发的正统性提出质疑。

640
▋奥斯曼帝国极盛时期的米勒特划分:穆斯林(深绿)、鲁姆人(东正教基督徒,蓝色)、犹太人(黄色)、亚美尼亚人(粉红)、天主教徒(黄绿)

哈里发划分他自己的信徒,根据教团制度,而不是根据原有的部族和城邦制度,也就是后来土耳其人著名的米勒特制度(米勒特本意为“民族”。1453年苏丹穆罕默德二世占领君士坦丁堡后,承认希腊正教会为“米勒特”,任命真纳狄奥为正教总主教。在总主教领导下,正教徒只要不触犯帝国的行政当局和穆斯林,就享有宗教、文化等方面的自治权)。在这种制度中,法官,就是社团的统治者,法官执行的是教法,也就是伊斯兰教的教法或者是犹太教的教法,或者诸如此类的东西。本教团的法官,在哈里发面前代表本教团,对本教团的人负责。教团是跨越地域的,例如是君士坦丁堡或者安条克的大主教,管理他们手下的基督教徒,或者说是某地的犹太人的拉比管理他们手下的犹太教徒。他们那些基督教徒和犹太教徒分布的范围都是跨地域分布的。但只要他们在信仰上属于某个主教,就可以通过这个主教,跟哈里发发生关系。例如是科普特人(阿拉伯人占领埃及后变为穆斯林对那些仍在使用古代埃及语的土著基督教居民的称呼,科普特人大多自愿缴纳丁税,保留原有信仰,成为“吉玛人”(“受保护的人”),而不愿皈依伊斯兰教,变成“麦瓦里”(外族穆斯林))的主教住在亚历山大,但他实际上还管理努比亚(埃及尼罗河第一瀑布阿斯旺与苏丹第四瀑布库赖迈之间的地区)和埃塞俄比亚的教会。这些教会,哈里发就有理由通过他,干涉埃塞俄比亚和努比亚的政务。

640
▋奥斯曼时期帝国都城的宗教法官审理案件

640
▋奥斯曼苏丹麦赫麦特二世与希腊正教君士坦丁堡普世牧首耶那丢斯二世

6401
▋奥斯曼帝国晚期阿勒颇的犹太人大教长

在伊斯兰教理论中,米勒特制度假定的是一个属于和平地区的政治体系。在哈里发统治的和平地区,伊斯兰教已经占据了永久性的主导地位,伊斯兰教自然要通过他的卡迪(伊斯兰教教职,意为“教法执行官”,即依据伊斯兰教法对穆斯林当事人之间的民事、商事、刑事等诉讼执行审判的官员)和法官来统治。卡迪和法官有解释法典的权力。而其他各种宗教,受到宽容的犹太教和基督教徒,通过他们自己的教团,享有治外法权。从伊斯兰教理论上来看,他们应该是逐渐减小并最终被收编的群体。在这个和平世界的边界之外,在面对异教徒的广大世界中,他们仍然是一个等待传教和征服的对象。在传教和征服的过程中间,可以签署一系列具有权宜之计性质的合约。

和平世界如果能够永远保留它理想上的状态的话,那么早期伊斯兰教设计的世界秩序也许真的会实现。但是问题在于,和平世界本身自己的秩序供应是出了问题的。阿拔斯王朝后期,哈里发制度开始向柱国制度和苏丹制度转化。从伊斯兰教的法统观念来看,这就意味着,僭主对合法统治者的篡夺。柱国,或者照阿拉伯的音译叫做道莱,或者是苏丹,一直就是强人领袖。它在正式体系中间没有合法地位,但是在哈里发衰微、政权的正统性需要保卫的时候,军事强人就从哈利发那里得到柱国或者是苏丹的称号,根据这个称号来授权辅佐哈里发,代替哈里发行使权力。

6402
▋建于12世纪位于伊朗北部的图鲁尔陵,蛮族军阀势力强盛与哈里发权威衰弱的历史见证

6403
▋阿拔斯王朝晚期割据势力林立,从地缘有效管理的角度上看哈里发的朝廷近乎消失

最初产生的柱国是在叙利亚,是由阿拉伯人本族的雇佣兵组成的,后续的苏丹往往就是从北方的突厥人或者是斯拉夫人组成的蛮族雇佣兵,而苏丹大多是这些蛮族雇佣兵的领袖。他们只称为苏丹,把哈里发变成放在宫廷里面毫不重要的傀儡。结果导致了伊斯兰世界的再度封建化。柱国和苏丹的正统性不如哈里发。强大的封建领主,或者说是蛮族入侵者,在控制了一、两个省区以后,往往都能够从旧的哈里发或者苏丹那里得到一定的称号。这些称号往往会进一步降低为埃米尔(伍麦叶王朝时,哈里发所属各地封建领主及各行省最高长官总督被称为埃米尔,哈里发宫廷卫队总监(兼都城军事长官)也袭用此称号。后来,各地埃米尔与哈里发之间的从属关系逐渐疏离,不少地方的埃米尔只象征式地承认哈里发的统治权,取得独立的地区军政大权)或者其他什么东西。随着这些阑入的军事集团逐步增多,晚期的阿拔斯王朝逐步变成一个碎片式的、大批封建领地构成的一个综合体。后期伊斯兰教的动力,主要来自于这些大多数是由蛮族将领组成的封建体系。像征服中亚和印度的活动,主要就不是由早期的伊斯兰教徒、阿拉伯人或波斯人,这些人的精力早已经耗尽了,而是由后期进入阿拉伯土地、接受了哈里发封号的改信伊斯兰教的蛮族首领展开的。

6404
▋1025年南亚次大陆局势地图,最北面的绿色部分为加兹尼王朝控制区域

加兹尼王朝(962-1186,由波斯萨曼王朝的突厥族奴隶出身的将领建立,极盛时期占据着伊朗大部、土克曼斯坦、乌兹别克斯坦部分地区、阿富汗、巴基斯坦与印度北部)打开了通向印度的道路,把伊斯兰教扩张到印度河流域,最后经过几个世纪以后,逐步产生了德里苏丹国(1206-1526)和莫卧儿帝国(1526-1858)。入侵印度对伊斯兰教来说有一个很无奈的效果,就是说,原先穆罕默德在传教活动中,他考虑的是基督教和犹太教,也就是属于亚伯拉罕一神教这个系统的其他宗教,伊斯兰教以改革者自居,以更加纯洁的一神教自居,准备扫除掉这些原有宗教中间不纯洁的部分、具有多神教色彩的部分,使其恢复本原色彩。从某种意义上来讲,伊斯兰教与其说是一种独立的宗教,不如说是犹太基督教传统的一个新的改革宗,一个特别强大的改革宗。但是先知对于纯粹的拜物教——包括麦加原先曾经盛行过的这些崇拜自然神的各种多神教并不尊重。

6405
▋建于12世纪末的德里顾特卜塔标志着伊斯兰势力在南亚次大陆北部绝对优势的开端,不远处的铁柱则是佛教时代的帝国遗存

6406
▋建于16世纪中叶的德里胡马雍陵

所谓的伊斯兰教的宽容,实际上指的是宽容有经人(Ahl al-Kitab)。有经人就是指旧约、新约这样的宗教经典。从伊斯兰教教义的角度来看,这些宗教经典是正确但是不完备的。它部分地代表了上帝的旨意,耶稣和摩西都是接受了上帝旨意的先知,但是上帝的旨意尚未完全,要等穆罕默德来了以后才能完全。所以有经人之所以得到宽容,因为他们的经典是正确的,但是没有完备的经典,是伊斯兰教的先驱。伊斯兰教并不是否定了这些经典,而是包含了这些经典,然后又有所添加。但是非一神教的多神教,崇拜星星、树木、石头、动物之类的,那就是完全的邪教了,是属于打击的范围,并不在宽容之中的。穆罕默德在征服阿拉伯半岛以后首先做出的决定就是,在阿拉伯半岛只能有伊斯兰教存在。原始的多神教,除了麦加那一块玄石(麦加克尔白东南角墙上镶嵌的一块微红泛褐色的陨石。很久以前,闪族文化就有一种习俗,人们以非比寻常的石头标记宗教崇拜的场所。632年,穆罕默德率众到麦加克尔白举行辞别朝觐时,曾抚摸和亲吻这块石头,说它是真主在大地上的誓约。后来它被穆斯林视为“神圣之石”)被赋予了新的意义而保留下来以后,原始的各个城邦的保护神和拜物崇拜基本上被扫除了。

6407
▋细密画中先知穆罕默德与其之前的使者(亚当、亚伯拉罕、摩西、耶稣)

6408
▋先知穆罕默德捣毁麦加天房中的偶像,留下玄石并将其镶嵌在天房的一角

在印度,他们面临着同样的问题,就是说印度教、佛教这样的看上去神像众多的宗教,是不是属于有经人的范围。按照原始的定义,在加兹尼王朝这样狂热的传教者看来,他们显然都是属于邪恶的多神教,他们的神庙需要被拆除和毁灭。对印度的征服持续了几百年,直到莫卧儿王朝中叶的时候,阿克巴时代(1542-1605,1556-1605年间在位,莫卧儿帝国第三代皇帝),才有人提出新的理论,认为印度的各个传统宗教也可以纳入宗教宽容的范围。但是这一点始终没有变成正统的学说。在奥朗则布执政的时期(1918-1707,1658-1707年间在位,莫卧儿帝国极盛时期的皇帝),莫卧儿帝国又恢复了他的宗教迫害政策。印度教徒或者是印度其他多神教徒在什么情况下能够分享犹太人和基督徒所能够得到的宽容,这始终是一个在伊斯兰教法内部很有争议的问题。伊斯兰教在十世纪以后进入中亚的时候也发生了同样的问题。伊斯兰教对佛教的取代,在中亚是一个伴随着血腥屠杀的过程。佛教的僧侣,照现在发现的考古证据来说,遭到大批屠杀,他们的经书遭到焚烧。现在龟兹的藏经洞发掘出来的考古遗址中,还保留着僧人当时被砍断的残肢和凝固在血泊中的经卷。

6409
▋德里一座清真寺的部分建筑原为印度本土神庙,相当多的同类神庙在伊斯兰势力扩张的过程中被拆毁

640a
▋阿克巴大帝乐于将各种宗教代表人物引入宫廷并与之讨论宗教问题

640b
▋沙贾汗大帝爱子达拉有志于融汇折衷伊斯兰与印度教理论,后在夺位战争中被偏好纯正伊斯兰的兄弟奥朗则布击败

640c
▋库车境内的苏巴什佛寺遗址。佛教时代的龟兹在伊斯兰浪潮的冲击下灰飞烟灭

苏丹政治通过僭主的形式,极大地增加了伊斯兰教的军事活力,但也削弱了伊斯兰世界的正统性。苏丹一般是非阿拉伯人,不符合“阿拉伯语是真主唯一的语言和真主最喜爱的语言”这个基本前提。苏丹的力量一般来自于中亚高原游牧民族,跟原始的伊斯兰教徒没有关系。他们在伊斯兰教法方面的学术是比较浅薄的。在四大法学派斗争之中,喜欢采取武断干预的做法,引起了伊斯兰教内部的纠葛。所以从最初的突厥人,一直到最后的奥斯曼人、阿拉伯人和代理他们统治的蛮族军事首领之间的关系一直很微妙。他们多多少少有点像是后来明朝士大夫和满清之间的关系。一方面,伊斯兰教徒和阿拉伯人已经衰弱到这个地步,基本上没有能力保卫自己了。突厥人的干涉,是伊斯兰教恢复战斗力的唯一途径。另一方面,阿拉伯人又凭借自己的正统性和比较优越的学术地位,歧视这些比他们野蛮的征服者。

640d
▋马穆鲁克骑兵

奥斯曼帝国和北方的突厥人的入侵,导致了阿拉伯和伊斯兰世界内部的法律观念进一步演化。哈里发渐渐变成了傀儡,那么拥立假哈里发的政权就会不止一个。阿拔斯王朝被蒙古人灭亡以后,假哈里发的问题就更加突出了。奥斯曼人和埃及的马穆鲁克近卫军集团各自拥立了自己的假哈里发集团。最后假哈里发像一个战利品一样,从埃及人手中落入奥斯曼人的手中。不再出面的君士坦丁堡的假哈里发,在多大程度上还能够维持全世界伊斯兰教徒的长官的名义,在15-16世纪之间逐步变成了伊斯兰世界和基督教世界交涉时的一个重大题目。因为它引起了一个反向的干预问题。像法国人或者俄国人这样的基督教君主,他可以根据米勒特制度,提出反向的要求。如果说,君士坦丁堡的哈里发可以代表全世界的伊斯兰教徒,包括那些非伊斯兰教的国家统治下的伊斯兰教徒,那么是不是沙皇或者是其他什么基督教国家的君主也可以代表奥斯曼帝国境内的基督教徒?

640e
▋开罗郊外阿拔斯系哈里发陵墓群。巴格达被蒙古帝国攻陷后,开罗的马穆鲁克苏丹在本地扶植了新的傀儡阿拔斯系哈里发

640f
▋奥斯曼苏丹塞里姆一世击败埃及马穆鲁克王朝后废黜了开罗的阿拔斯系哈里发并将其头衔正式转到奥斯曼系君主身上

这在苏丹政权的法统内部是符合米勒特制度的。因为米勒特制度的实质就是,它跟近代的民族国家或者是绝对主权观念是不相容的。它的统治边界不是地理上的,而是宗教意义上的。基本上所有的米勒特,从理论上来讲,都是跨国的,甚至是普世的。他们居住在全世界所有不同的地点,只要信仰相同,就要接受同样的律法指导,就要接受同样的教长领导。对于实施米勒特制度的政体来说,要想把它划分为地方性的、有明确边界性的民族国家来说,就是摧毁了他们宪法的根本。因此,奥斯曼帝国和欧洲各国的交涉就充满了一种奇特的色彩。等于说,你要按照民族国家的逻辑来看的话,等于是双方都采取了侵犯对方主权的做法。奥斯曼帝国境内的亚美尼亚的基督教徒,往往依靠沙皇为他们的代理人;而黎巴嫩的基督教徒往往要求法国人充当他们的代理人。苏丹本人对这些做法是完全认同的,他自己也自称为是英属印度的全体伊斯兰教的代理人。他派出的阿迦汗亲王(伊斯玛仪派尼扎尔支派王朝的世袭称号)这些人,在英属印度的元老会议中占有一个重要的地位。

640g
▋第二代阿迦汗亲王,十九世纪南亚次大陆伊斯兰势力的重要角色

640h
▋位于印度浦那的阿迦汗亲王宫殿

(二)殖民体系与多元宪制

伊斯兰教在宪制方面留下的主要遗产有两个大的标本。一个是黎巴嫩,一个就是英印帝国。尽管这两个地方都在伊斯兰教的边缘上面,但是正因为它在边缘上面,代表着伊斯兰教和非伊斯兰教世界接触的前方,所以它最完整地展示了近代前夜伊斯兰教世界体系的特征。这两个地方的宪制,可以作为一个样板。例如安纳托利亚内地,恰好因为是教团比较少,当地可能除了亚美尼亚以外,没有其他什么教团,所以反而显得不太典型。像黎巴嫩的双州体制和英印帝国的伊斯兰教教团体制,实际上是最能典型的代表伊斯兰教在遭到西方世界体系冲击前夜的真正的宪法结构。

1
▋黎巴嫩宗教势力分布图:什叶派(深紫)、逊尼派(绿)、德鲁兹(蓝)、阿拉维派(浅紫)、马龙派(红)、天主教(橙)、东正教(黄)、亚美尼亚人(褐)

双州体制是这样一个东西,黎巴嫩根据它的当地宗教教团特点,划分为德鲁兹派(什叶派伊斯玛仪派的一个分支,教义受到诺斯替主义影响,常被视为异端)和马龙派(东仪天主教会,据说为叙利亚人马龙(?-410)所创。该派保持古代叙利亚教会的传统礼仪,使用叙利亚语和阿拉伯语,遵奉卡尔西顿公会议的决议,维护基督一位两性论)的两个州。这两个州分别由德鲁兹教派的教长和马龙派的教长来负责。各州都有一个大概是二、三十人组成的长老议会,由当地的各个社区头领组成。双州共同构成一个议事会,再向奥斯曼帝国的苏丹负责,但是奥斯曼帝国如果企图改变双州的宪法结构和税收结构,必须通过双州的保护人。这个保护人,通常是法国国王,后来变成拿破仑,沙皇亚历山大也曾经争取过这个保护人的角色。

2
▋英属印度宗教势力分布图:印度教(粉红)、伊斯兰(绿)、佛教(黄)、基督宗教(蓝)、锡克教(棕)、原始信仰(灰)

英属印度,在它的宪法结构中,把各土邦的伊斯兰教社团作为一个特殊机构来处理。他们无论是在比哈尔(印度东北部的邦)还是在其他地方,无论当地的苏丹是伊斯兰教统治者还是印度教的王公或者是其他什么统治者,他们在宗教上面都要设立自己的评议会。这些评议会,在印度德里的副王的宫殿中,享有顾问的头衔。副王在召集国务会议的时候,在通知和咨询各地王公和苏丹的意见之前,要首先跟具有跨土邦性质的伊斯兰教评议会的代表商议。这些代表商议的结果,将会体现在德里副王派驻各土邦的顾问当中。由于英印帝国主要是实行顾问政治的,与其说是国家,不如说是一个超国家的政治大杂烩。顾问,而不是土邦的王公、苏丹之类的,才是它的实际上的统治者。因此像伊斯兰教评议会或者拜火教评议会这样的组织,他们对总督提出的,总督给顾问下达的行政指令,产生的实质影响力是超过他们自己所在土邦的王公或者是国王之类的。

3
▋海德拉巴是英印时期最重要的穆斯林君主土邦,君主的实际权力受到多方面的限制

4
▋英印帝国后期在新德里建造的印度风貌鲜明的副王宫,现为印度共和国总统府

德里的副王,从理论上讲,首先是莫卧儿帝国的代理人,虽然他实际上是英国政府派遣的。最后在维多利亚女王加冕以后,正式地变成了女王本人任命的代理人。他在法律上来讲,是不利于威斯敏斯特和联合王国本身的政府的。从理论上来讲,副王本身是仅次于皇帝的爵位,地位上比欧洲的国王本人都要高,除了兼任女皇的女王本人以外,没有任何人比他的地位高。这样一来,负责向副王宫廷里面派驻代表的各个评议会,例如代表从阿富汗到孟加拉国的跨国的伊斯兰教的团体,就形成了一种,你很难说是一种外交性的权利还是一种宪法上的权利的代表机构。因为这些东西涉及的利益,经常跨越了奥斯曼帝国和英印帝国两个大国的边界。例如像是印度河外的游牧民族之类的伊斯兰教徒和孟加拉的那些已经完全定居和驯化的伊斯兰教徒之间发生冲突,那么你就很难说这是一个国内问题还是国际问题了。这些邦国中间,有很多,例如孟加拉人肯定是大英帝国的直辖臣民,另外一些人呢,则是英印帝国统治之下,名义上是独立的,但是受英国保护和英国顾问监督的那些附属国的臣民,另外一些是英印帝国之外的某些独立部落的居民,他们其中又有一部分从理论上讲是接受奥斯曼帝国的最高宗主权,因此奥斯曼帝国有义务替他们发言。因此在这方面,依靠地理和边界划分主权的法则就基本上丧失了作用。

5
▋达卡的阿桑曼吉尔宫,英印时代次大陆重要伊斯兰势力的主要会议、结盟地点

你可能会面临着非常奇特的状态,在拉合尔(巴基斯坦重要城市)进行的一次诉讼,由英国法官主持,但是法律上来讲却是一次外交活动。其中诉讼一方的代理人来自君士坦丁堡,他从理论上来讲有权力管辖从爪哇岛一直到阿富汗的伊斯兰教徒,但是实际上,他并不亲自来到印度,而是通过他在印度的代理人。而那些代理人呢,他真实的利益,与其说是要维护本地伊斯兰教社团的利益,倒不如说是要通过本地伊斯兰教社团和英国政府之间的交涉,在君士坦丁堡的宫廷里面给自己增加若干荣誉头衔。诉讼的另一方则很可能是孟加拉的商人,这些人信仰上来讲是伊斯兰教徒,但是他的全部利益都要求英国政府对孟加拉实行进一步的直接管制,通过这个直接管制理顺当地的财政结构,使他们这种没有特权的、完全依靠英国法律保护的商人在对其他理论上是降虏的伊斯兰教徒的交涉中占据有利位置。

处理这样微妙而复杂的问题,而英国人之所以能够应付得下来,部分原因就在于,英国当时实际上是正在现代化的欧洲国家中,唯一一个保留了大量封建传统的国家。英印帝国的宪法,是自从拿破仑解散了神圣罗马帝国以后,唯一能够容得下各种享有半主权,或者各种治外法权的团体合法存在的宪法体制。根据这种宪法体制,伊斯兰教徒也好,拜火教徒也好,还有锡克教徒的特殊社团,都可以通过比附的方式,假定他们是十四世纪或者是十五世纪普通法治下的某一个封建领主或者教团。通过比附的方式,使它能够纳入普通法的范围体制内,同时还可以把印度的习惯和伊斯兰教的教法都通过虚拟的方式,假定为相当于是威尔士人或者苏格兰高地人的特殊习惯那种习惯法。通过习惯法与习惯法交涉,以英国上议院裁决习惯法的方式,使它纳入一个更大的印度帝国习惯法体系之中。如果英国也像法国一样,采取比较现代化的主权观念的话,一定要设立一个独一无二的主权概念,把所有的权力都集中到国会或者是政府手中,那么这样的体制就要完全行不通了。任何一次诉讼都会变成严重的外交事件,最后非得通过战争权力来仲裁。如果按照这种体制的话,那么英印帝国就不可能是只有六万土著士兵和几千个英国人就能够统治得下来的一个国家,而非得像是法属阿尔及利亚一样,需要派几十万大军,在每一个村派出警察,建立强有力的行政机构才能完成任务。

十六世纪以来,伊斯兰教徒和外部世界的接触,大体上可以分为三种模式。第一种模式是奥斯曼帝国为主的伊斯兰教国家和法国大革命到1848年革命以后产生出来的这种经典的新民族国家的接触。奥斯曼帝国跟这些国家接触,最主要的发现就是,虽然奥斯曼帝国号称是专制国家,但是跟这些新兴的民族国家相比起来,奥斯曼帝国的权力过于松散。在它自己的境内存在着大批拥有治外法权的团体,以至于苏丹的权力不能够得到充分的贯彻。而后来青年土耳其党人和土耳其帝国大多数改革家试图模仿的就是这种体制。这种模仿的结果,首先就要引起奥斯曼帝国国内的宪法革命,它要求根据地区的原则,而不是根据教团和宗族的原则,改组行政机构。取消原有的各教团过去的特权,用中央的行政官对各地区实行实质性的管制。

6
▋明信片上的青年土耳其党人及奥斯曼主义代表人物恩维尔帕夏(明信片下方白色文字为法语“国家万岁!民族万岁!自由万岁!”)

第二种模式是奥斯曼帝国面临着东方的本身还没有建立民族国家体制的其他各个帝国之间的关系。这些帝国中,最主要的就是俄罗斯帝国和清帝国,以及东方的波斯帝国。在针对这些帝国当中,伊斯兰教徒在中世纪发明出来的那种理论,也就是说,对不信教的君主在什么情况下可以签署条约,在什么情况下又可以撕毁条约,一系列的逻辑,仍然继续适用。奥斯曼帝国对俄罗斯帝国和波斯帝国的交涉,设计出来的条约,跟对西方涉及的国际条约不一样。他们跟东方可汗制定的条约一样,可以由当时双方宫廷的武断意志随时撕毁,随时可以重新爆发战争。但是对欧洲的交涉就必须完全往另外一个方向。

7
▋阿古柏苏丹与清军交战时打出奥斯曼帝国的旗帜,间接体现了奥斯曼帝国对东方帝国关系的特点

第三种模式就是刚才提到过的,奥斯曼帝国跟唯一特殊的欧洲国家,也就是大英帝国之间的交涉。这个交涉在南方的埃及边境,在和印度的边境,都导致了一个多元宪法的结构。在这样的特殊政体之下,主权往往是属于原有的伊斯兰教统治者,例如莫卧儿帝国或者是奥斯曼帝国任命的埃及副王,但是实际权力由英国派出的顾问掌握。嵌入的法律通过习惯法交汇的方式,构成不断扩大的习惯法和造法传统。

8
▋埃及成为大英帝国保护国时期的国王法鲁克一世

传统的观点认为,在这个时期,也就是大概在十六世纪前后,伊斯兰世界处在被包围的状态,正在逐步地衰微。但是二战以后,特别是九十年代以后的新观点有所不同,他们倾向于,伊斯兰教在这个时代仍然是有进攻性和扩张性的,尤其是体现在东南亚一线。在亚齐(伊斯兰教从这里进入印尼),在印度南部,在东非各地,伊斯兰教仍然有进攻性的传教运动,而且这个传教活动经常是在欧洲殖民者甚至是在俄国殖民者的保护之下进行的。这些殖民者鼓励伊斯兰教传播的主要原因是行政管理上的方便,如果他们统治缺乏被统治经验的蛮族的话,这是一件比较费事的事情。如果这些蛮族,例如哈萨克游牧民族或者印度尼西亚的原始部落居民改信了伊斯兰教,那么他们就有了明确的权利和义务,伊斯兰教的长官、教师之类的,例如印尼的伊斯兰教教师联合会,就变成他们的领袖。伊斯兰教法是殖民统治者能够掌握、能够领会的东西,通过这种行动,他们就能够直接跟伊斯兰教教长打交道,借助伊斯兰教的势力去统治这些地方。因此,和有些人想法相反,殖民统治者经常是鼓励伊斯兰教传播的,甚至在俄国或者是印尼那种情况下,伊斯兰教后期的传播,在很大程度上是殖民主义提供经费的结果。殖民主义者的行政官,希望大多数臣民变成伊斯兰教徒,然后他们通过统治伊斯兰的代表,能够轻而易举的实现这些地方的去蛮族化。把难以控制的蛮族和部落居民,变成容易控制、适合于充当管制对象的顺民。

9
▋荷兰殖民者设计建造的印尼班达亚齐的拉亚拜图拉赫曼清真寺

从十六世纪到十九世纪的整个时间内,相对于其他各种体制,法国大革命以后产生的那种民族国家体制,一直处在强势扩张的过程中,逐步地侵蚀了其他各种比较复杂、富有弹性的体制。这个过程直到第一次世界大战,造成了最后的决裂。以前可以模糊过去的东西,到第一次世界大战的时候就没有办法模糊过去了。穿插在各个国家境内的不同教团,在这个时候必须得选择自己的归属了。而且这个归属,必须得按照民族国家和边界原则来进行。即使在混合政体传统最强的英印帝国,印度的穆斯林,也必须选择是不是要废除君士坦丁堡哈里发对他们宣布的圣战要求。因为奥斯曼帝国既然站在德国一边,那他就要宣布,要求全世界的伊斯兰教徒反对信士长官的敌人。印度的穆斯林,从理论上来讲,有理由响应他们的号召,反对他们的英国主人。

而英国阿斯奎斯(1852-1928,自由党领袖,曾任内政大臣及财政大臣,1908年至1916年出任英国首相)政府采取的做法是非常微妙的,他一面又要承认哈里发对印度的穆斯林享有宗教性的权力,一面又否定哈里发对这些臣民享有政治上的权力。这一点照伊斯兰教法原有传统来讲是不成立的。因为英国人的意思是要搞一个宪法上的虚拟权力,把哈里发变成伊斯兰教的罗马教皇,对伊斯兰教本身推行政教分离,从而解决这方面的尴尬问题,这样就用不着冒犯印度伊斯兰教徒本身的信仰,又不至于损害他们效忠大英帝国的政治义务。但这一点在伊斯兰教法上其实是没有依据的,因为哈里发他不是教皇,哈里发一开始就是一个政治性的长官,所谓信士们的长官。他的职责是政治性的,而不是纯粹宗教性的。这种方法能不能够行得通还很难说,但是仅仅过了几年,凯末尔就替英国人解决了这个问题,彻底废除了哈里发制度(1924年3月,土耳其大国民议会通过了废除哈里发制的决议,最后一代哈里发被驱逐出境),使英国人没有必要再进一步考虑这方面的问题了。英国主要是出于混合宪制的传统比较深厚,英印帝国的中世纪色彩又极其特殊,所以才采取了这样尽可能照顾各种古老权利的做法。

10
▋奥斯曼系最后一位哈里发阿卜杜麦吉德二世旗帜

在参加一战的大多数国家当中,伊斯兰教的社团都采取更加简单武断的方式来确定自己的效忠。例如在俄国境内,拒绝效忠沙皇、而继续效忠于君士坦丁堡的鞑靼人就会遭到驱逐,而在奥斯曼帝国境内,如果配合他们的俄国亚美尼亚宗教首领去支持沙皇的亚美尼亚人,也要遭到强制迁徙。这就是所谓的亚美尼亚大屠杀(亚美尼亚和其他许多国家认为在1915至1922年期间,奥斯曼帝国通过种族灭绝政策导致150万亚美尼亚人死亡。而土耳其认为并不存在“有计划的大屠杀”)的起源。亚美尼亚大屠杀渐渐变成一个道德谴责的依据,被认为是纳粹以前搞种族清洗的一个典范。但实际上它真正的原因是一个宪法上的冲突。照过去的米勒特制度来说,无所谓国家主权,只有教团对教民的权力。亚美尼亚人居住在无论边境哪一边都无关紧要的。他们的主人就是亚美尼亚东正教会的领袖。但是如果你要武断地把这些地方都改成现代化的民族国家的话,那么亚美尼亚人如果住在土耳其这一边,尽管土耳其大多数是伊斯兰教徒,他们就必须忠于土耳其;如果住在俄罗斯边境一边的话,他们就必须忠于俄罗斯。原先亚美尼亚人之所以能够作为一个跨国集团而相安无事,就是因为在米勒特制度或者是教团制度之下,边界和主权是一件不重要的事情,信仰和教律才是重要的事情。一旦俄罗斯或者土耳其这样的超民族的帝国必须转型为近代民族国家,像这样地位尴尬的民族就要遭到极为凄惨的命运。今后的几十年,这种命运就要在巴尔干上演。印度其实本来也要面临同样的命运,主要也还是因为英国人的处理方式比较模糊,1947年的冲突才没有闹大。否则以印度种族形式和教团的众多和复杂,其中有很多教团和民族是注定要落到土耳其亚美尼亚人那种下场的。

11
▋奥斯曼帝国晚期强制亚美尼亚人迁徙路线图

(三)革命年代

按照威尔逊总统的理想,以后,凡尔赛会议应该是开辟了一个外交上的新时代,以前的各种历史遗留都可以不考虑了,今后所有国家都应该统统按照民族自决的原则来处理问题。但是这样的处理方式的前提是,民族分布必须跟国界基本一致。在米勒特制度盛行的中东和伊斯兰教世界,这种处理方式是根本不存在的。例如在巴尔干的君士坦丁堡和保加利亚行省,种族之间的划分和职业之间的划分是基本一致的。保加利亚人基本上是农民,希腊人基本上是商人,每一个行业对应一个特殊的族群,各个族群对应特殊的教团,各个教团相互之间镶嵌在同一座城市里面。你很难说这一座城市具体说来是属于哪一个多数民族的。而多数民族,如果按人口来算的话,应该是农民,但是农民在政治上恰好又是最分散、最不成熟的。最具有自治能力的团体,一般来说恰好是少数民族。如果按照威尔逊的原则去重建民族国家,那么种族清洗应该是在所难免的。从第一次世界大战到第二次世界大战,几十年时间之内,巴尔干地区不断爆发种族清洗,归根结底就是这样的原因。

12
▋画作中的波斯尼亚小城莫斯塔尔,多族裔多宗教并存的状态最接近奥斯曼帝国时期的样貌

按照现在制造的标准历史叙事,巴尔干冲突是当地民族反对伊斯兰教统治者的战争。但实际情况却不是这么简单,与其说是现在的那些居民是当地民族正当的继承者,不如说是他们经过几次屠杀或者驱逐以后,残余下来经过重新重组的居民。被驱逐的对象,一般来说,恰好是当地最先进的、最具有国际化视野的团体。留下来的族群,往往恰好是最保守、最被动的居民。巴尔干半岛经过这样几次连续的种族清洗,从理论上来讲制造出了一个族群比较单纯的国家边境,但是付出的代价其实也是非常惊人的。在奥斯曼帝国统治时期,巴尔干实际上是奥斯曼帝国的生命线和最先进的地区。在奥斯曼帝国退出了以后,民族国家最终胜利以后,它变成了欧洲最落后的地区。

13
▋波斯尼亚的索科洛维奇桥,由奥斯曼帝国宰相出资修建并以其姓氏命名。近古以来巴尔干地区社会经济发展的见证

但是相对于中东的其他地区,巴尔干和土耳其本身,都还算是比较好的。土耳其人通过强行驱除了亚美尼亚人和希腊人,算是勉勉强强地把原本只有宗教认同的安纳托利亚居民人为地变成了一个民族。但是中东的其他地区,无论你采取什么手段,同样的做法仍然无法实现。在英国人托管的伊拉克,英国人依靠不到人口1%的亚述基督教徒,做他们在行政上的助手。由于英国和土耳其的边境谈判问题,库尔德人的居住地区被划分在土耳其共和国和英国托管的伊拉克王国之间。法国处理叙利亚,则是一个宗教和族群上的百衲被。法国人为了保护黎巴嫩,为了增强它的势力,实行了大黎巴嫩计划,把过去黎巴嫩的德鲁兹派和马龙派实行的双州体制,不仅扩大到整个黎巴嫩山区,而且向西扩大到整个黎巴嫩的沿海地区,制造一个前所未有的大黎巴嫩。双州宪法体系经过进一步的复杂化以后,变成了现在的黎巴嫩宪法,也就是我们现在看到的这个最奇特的宪法,依靠宗教团体来瓜分国家的主要职务,总统归马龙派,总理归逊尼派,国防部长和其他职位事先都根据宗教派系的归属来决定。

14
▋黎巴嫩议会席位也是根据宗教团体分配

在中东遭到瓜分和托管以后,法国统治的叙利亚是冲突最严重的地区。因为法国是民族国家体制的发源地,它的殖民体制,要把本国的民族国家体制延伸到中东。它对黎巴嫩和叙利亚的统治,从理论上来讲,要求重新想象和建构黎巴嫩民族和叙利亚民族。以这两个建构出来的民族为基础,将来在殖民主义者离开以后建立新的国家。而英国在伊拉克和约旦的统治没有这个必要,因为英国实行的是君主制,君主对他统治下臣民的种族和宗教上的一致性要求不是太高,他们只需要有一种封建性的契约效忠就可以了。因此即使他们属于不同的民族和宗教团体,都不会发生严重的问题。

因此,第一次世界大战以后,叙利亚是发生冲突的主要地方。像阿拉伯的劳伦斯(托马斯·爱德华·劳伦斯,1888-1935,他因在1916年至1918年间投身阿拉伯大起义而著名)这种人,把法国人在叙利亚制造出来的大量冲突归根于法国的暴政。实际情况是恰好相反。法国人在叙利亚的统治,比英国人在约旦和伊拉克的统治,花钱更多,推行近代化的步骤更彻底,付出了更大的投资和牺牲,但是引起的冲突反而更大。主要原因还是因为当地的各种错综复杂的教团,非常不适应创建民族的需要。而英国人把原有的贝都因部落酋长或者是阿拉伯半岛的权贵家族辅立成为自己支持的国王以后,就大致上可以撒手不管了。约旦国王和他的贝都因军团最后经过几十年的波折以后仍然能够维持不动,而叙利亚在变成共和国以后则变成一个不断发生政变和族群冲突的一个重灾区。这里面的根本问题还是,米勒特制度根深蒂固的社会,从性质上讲,不大适合于建立那种需要以同质化民族为基础的共和国或者是民族国家。

15
▋英国人“阿拉伯的劳伦斯”(现代阿拉伯民族独立运动重要活动家,左二)与阿卜杜拉一世(现代约旦国家首位君主,最右)

奥斯曼帝国解体和土耳其共和国建立以后的几十年,是西方国际体系和民族国家体系在中东胜利的最高峰。从理论上和形式上讲,这些地方以后都应该以土耳其为样板,逐步建立类似欧洲的国家体系。这些国家除了主流的宗教信仰是伊斯兰教以外,按道理说应该跟欧洲国家没有什么太大的区别。欧洲人给他们引进的宪法,是以十九世纪末期的西班牙宪法为蓝本的。虽然规定伊斯兰教为国教和多数人的宗教,也承认其他宗教的信仰自由,把他的国民假定成为一个已经存在的民族,然后把他的政府假定成为一个已经存在的国家政府,希望他们以这种方式抹去伊斯兰教世界和西方世界的区别,把国际体系扩大到整个中东。

16
▋1937年约旦国王阿卜杜拉一世访问土耳其并会晤凯末尔

这个体系在第一次世界大战以后的几十年达到最高峰,但是在50年代以后,就开始面临着新的挑战了。新的挑战,第一波,来自于泛阿拉伯民族主义——我们后来知道的萨达姆或者是阿萨德的阿拉伯复兴社会党这种民族主义的主要的政治代理人。泛阿拉伯民族主义虽然自称为民族主义,但性质上恰好是欧洲人给他们引进的那种民族国家理论的反面。它的理论是,阿拉伯国家不是不同的民族,而是同一种民族。阿拉伯国家之间的国界线应该抹掉,复兴社会党应该是一个具有跨国性质的革命组织,通过逐步摧毁掉这些国家和地区原有的统治集团,把所有阿拉伯人团结起来,建立起一个新的大国。它的组织形式,在很大程度上是借鉴了(由于众所周知的原因,为保护冬川豆,此处被迫删节16字,请读者们原谅。)在外交上,由于它的政策要求推翻原有的君主——这些君主经常是亲西方的,或者是推翻西方直接殖民统治的政权。(此处被迫删节70余字)。

17
▋1979年伊拉克时任总统萨达姆会见阿拉伯复兴党创始人阿弗拉克

阿拉伯复兴社会党的最初主要领袖实际上是埃及和黎巴嫩的阿拉伯基督教徒。在十九世纪晚期,奥斯曼帝国开始模仿西方制度的时候,最先作为他们的代理人跟西方人相接触的代表人物,往往就是奥斯曼帝国境内的阿拉伯基督教徒。穆斯林和非阿拉伯人在接受西方文化的过程中间存在着巨大的时间差。结果这个人数不多——大概在叙利亚占人口20%,在埃及不到10%——的团体,发挥了极其特殊的作用。贝鲁特这个地方,小小的贝鲁特,从性质上来讲,似乎不像是中东的一部分,而更像是欧洲的一部分。贝鲁特美国大学,为伊斯兰教世界培养出了最初的一批知识分子。正是这些知识分子,模仿欧洲已经产生的民族理论,试图重新构造阿拉伯民族。但他们所制造出来的民族理论,一旦扩散到比他们更大的阿拉伯或伊斯兰教社团中间的时候,立刻就产生了一种反向的效果,把他们自己——最初产生的阿拉伯民族主义者,阿拉伯基督教徒——变成了迫害对象了,孤立的少数人了。他们在理论上的建树发展到现实政治层面,只不过几十年时间,而这几十年就是一个搬起石头砸自己的脚的过程。大概以50年代伊拉克和叙利亚的军事政变为界,以前的早期的泛阿拉伯主义的主要领袖还有浓厚的基督教色彩和西方影响的色彩,需要依靠群众运动和选举来夺取政权;之后的阿拉伯复兴主义者基本上都是军官,依靠攻击本国境内的基督教徒和犹太教徒作为团结民众的手段。

18
▋贝鲁特美国大学校园

五、六十年代以后,在阿拉伯世界和整个中东,建构民族国家的努力开始逆转,主要就是由于跨国的阿拉伯复兴社会党在苏联的支持下相继在各国夺权的结果。英国人支持阿拉伯军团保卫的约旦是唯一一个幸存者。它在伊拉克的姊妹国家——伊拉克王国,很快就被推翻了。同样在几年时间内,内战蔓延到约旦和叙利亚。这场运动的最高峰是在纳赛尔时代。纳赛尔主义的重要性就在于他希望借助埃及的支援,把泛阿拉伯运动整合到自己的旗帜之下,所谓的就是埃及、叙利亚和利比亚联邦,在设立的当时是准备作为后来的泛阿拉伯大统一国家的一个蓝本的。这个泛阿拉伯式的大统一,在性质上来讲,(由于众所周知的原因,此处被迫删节19字。)从理论上来讲他们也是要涉及到一个巨大的内圈集团,在这个内圈集团内部,实行具有阿拉伯特殊使命和特殊外交政策。因此纳赛尔认为,他有权力在叙利亚发动政变的时候,派军队去干涉叙利亚,在也门发生内战的时候派军队去干涉也门。与此同时,如果是欧洲国家在阿拉伯世界发生内战的时候进行干涉,例如像英国干涉科威特那样,那是不正确的。因为阿拉伯世界的国家,不是正式的、欧洲国际体系想象的那种合法的国家,而是一个过渡状态。经过了这个过渡状态以后,它应该被整合在纳赛尔领导的泛阿拉伯运动当中。纳赛尔本人的企图失败了,但他不是泛阿拉伯运动的唯一的代理人,其他人也怀有同样的梦想,只是不高兴让纳赛尔和埃及充当领袖而已。

19
▋埃及共和国第二任总统纳赛尔与叙利亚共和国第一任总统库瓦特利联合签署合邦成立阿拉伯联合共和国文件

六十年代行将结束的时候,中东大概划分为两个阵营。革命的泛阿拉伯势力已经占据了中东人口最多的几个国家,在英国保护之下,由保守的君主制维持了少数国家,例如科威特、沙特和约旦,都是人口比较少、游牧部落传统十分深厚、缺少定居居民、缺少吏治国家传统的、在阿拉伯历史传统上不太重要的边缘国家。七十年代和八十年代,是泛阿拉伯运动在国际社会上的最高峰,但也是他们自己走向衰亡的伏脉。因为事情发展到这一步,就有两方面的问题出现了。

20
▋海湾阿拉伯国家合作委员会六国领导人1981年会晤

第一就是泛阿拉伯势力跟他们传统上的保护人——苏联的关系,不能再像以往一样和谐,因为他们已经养大了,自己的特殊利益不再时刻符合苏联的中东的战略。同时革命一旦成功了以后,泛阿拉伯各党派内部的冲突就变得很明显。原先是同一次革命产物的叙利亚和伊拉克,居然都在复兴社会党的统治下,渐渐的变成了外交上的仇敌,甚至出现了叙利亚联合伊朗来对付伊拉克的局面。同时,在社会意义上来讲,掌握了政权的泛阿拉伯主义者为了证明他们自己的统治形式不应该跟西方的模板和苏联模板相似,采取了特殊的寡头政权。照他们的理论,典型的纳赛尔理论,纳赛尔的理论+海卡尔(穆罕默德·哈萨尼·海卡尔,1923-,埃及新闻人、评论人,纳赛尔的朋友)的理论就是说:“泛阿拉伯主义从本质上来讲是一种社会主义,因此,它跟西方以资本主义为基础建立的国家不一样,它不会容许以金融寡头为代表的资本家对国民进行剥削。但是它也跟苏联社会主义不一样,苏联社会主义是不保护劳动和私有财产,而阿拉伯主义是一种保护劳动和私有财产的社会主义。”(此处删节50余字)因此在世界革命的某一个阶段,是适合利用的盟友;在革命进入下一个阶段以后,又必须抛弃和打击了。

结果阿拉伯社会党尽管在夺取政权的过程中间得到了苏联的很大的支持,但是在夺取政权以后,基本上,(此处删节27字)随着这些斗争的展开,他们跟苏联的关系也变得非常困难了。(此处被迫删节180余字)。

八十年代以后,伊斯兰世界开始面临新的挑战,就是现在我们所说的原教旨主义的跨国事物。伊斯兰教的原教旨主义者和其他宗教的原教旨主义者是不一样的,不能说是仅仅看到“原教旨”这个词,就说他们都是狂热的或者是有政治欲望的。因为各教派的原教旨并不相同。伊斯兰教的原教旨,它先天的就包含了政治组织的内容。如果你说伊斯兰原教旨是什么。要恢复到什么?要恢复到八世纪前后的穆罕默德时代的教规,那其中必然要包括很多政治组织内容。但基督教原教旨主义,如果你要恢复到新约的本旨的话,它恰好是要教你要逃避政治。宗教改革时期,欧洲的许多新教的改革派,从道理上来讲都是属于原教旨主义者。其中又包含了非常多的纯粹和平主义教派,像是贵格派或者美国阿米绪人这些东西。这些人的主要特点就是要求他的臣民完全退出政治生活,甚至隐居到不大受人注意的殖民地去,开垦和发展自己的社区。而伊斯兰教的原教旨主义者当中,首先考虑的就是像先知本人一样,考虑的是怎样用八世纪的教法来刷新目前的腐败社会。

21
▋纽约州一处阿米什人社区

原教旨主义之所以在伊斯兰教变成一种新的跨国力量,部分原因是因为阿拉伯复兴党或者说泛阿拉伯主义主导的中东秩序出现了自相矛盾的特点。首先,这些政权都不承认阿拉伯的各个国家是合法的、独立的民族国家,而把阿拉伯世界或伊斯兰世界视为一个有待于统一的整体。这样一来他们就破坏了自己建立合法性的可能性。在他们治下产生的其他思想,也自然不肯承认这些理论上不承认分邦建国、实际上却依靠分邦建国来维持统治的政权。(此处删节60余字)实际上这个一党专政的国家不可避免地变成一个腐败和寡头的政权,而遭到疏离的大多数人在需要寻找资源的时候,自然而然的就转到了国内还唯一能够合法存在的组织,那就是伊斯兰教本身的组织。

在复兴党所统治的国家内部,政治性的自由是不可能存在的,但是由于自身的性质,他们不可能废除本国国内的伊斯兰教。这些伊斯兰教基层的组织发挥了为普通群众提供福利和保护的作用。在政权有可能疏远他们甚至虐待他们的时候,只有这些教会才能够帮助他们,为他们提供资助。像真主党就是一个典型。按照外人的角度来看,真主党好像是一个十恶不赦的、经常扔炸弹的集团,但是在黎巴嫩东南部那些居民的眼中,真主党主要是一个开办学校和医院的组织。当地的人,只有那些受西方影响很深、经济地位很高的人,才有可能到贝鲁特美国大学,或其他什么正规的高等学府去上。一般的穷人,如果想要得到最基本的教育或者是社会服务的话,最好的办法就是到真主党所办的那些机构里面去享受廉价的待遇。塔利班之所以能够兴起,也是因为在巴基斯坦北部和阿富汗南部,伊斯兰教师联合会提供的廉价教育,是当地穷困子弟唯一的希望所在。当然这种教育给他们提供的东西都是有附带礼品的,就是相当于是洗脑的东西。进了这样的学校,受了这样的教育,你出来以后很可能就是塔利班或者是类似组织的候补成员。所以世界上也是没有免费午餐的。

22
▋黎巴嫩巴勒贝克常见的真主党宣传画与旗帜

(四)进击的泛伊斯兰势力

伊斯兰教有一个特点就是,它部分地接受了东方专制国家的财产权,它容许苏丹和其他的军事政治领导人去侵犯其臣民的财产权,但是却不容许他们侵犯宗教团体的财产权。因此行之有效的一个保护财产的办法就是,你在设立遗嘱的时候,不要把你的财产分给你打算分给的子女或者是其他继承人,那样的话它们很可能会落到苏丹或者他那些贪婪的大臣手里面。更好的办法是,你把你的遗产捐赠给某些特殊的宗教慈善团体,但是在遗嘱条款中间附加一系列的特殊条款,规定这些宗教团体必须世世代代任命你的子女,或者说是,你真正打算馈赠遗产的那些人,当这些慈善团体的管理人员。用这种方法,财产一旦变成了宗教慈善团体基金会的一部分,那么即使是最强横的苏丹和大臣都不敢侵犯了。而你的子女虽然理论上来讲不是财产的主人,而是财产的管理人,但他们坐在管理人的位子,却要比财产的主人要安全得多。

这样做的结果就是,中东地区尽管在石油发现以前并不是特别富裕的地区,但是民间的基金会确是异常的发达的。除了极为贫困的人,比较富有的人都更乐意把他们大部分财产,通过宗教慈善团体从家族财产中转让。而这些宗教慈善团体在使用他们的财产,使用他们托管的基金的时候,根据古兰经和圣训的原则,有几项是他们特别关心的,就是教育、医疗和社会服务。因此伊斯兰教虽然属于东方专制主义,(由于众所周知的原因,此处被迫删节17字,请读者们原谅。)在伊斯兰教保护之下,你可以说是一种畸形的方式吧,民间社会是相当发达的。巨大的现金流始终能够在官府控制的范围之外流动。随着石油美元进入中东,这些原先虽然组织上已经相当发达但是财产上还不是特别多的组织,一下子变得发了横财了,可能在七十年代以后,大概是全世界最有钱的基金会了。从我们现在的角度看来,今天世界上大多数原教旨主义者,都是用这些流入基金会的石油美元培养出来的。(此处删节18字)还是印度尼西亚的教师联合会,还是中亚的乌兹别克那些学校,还是苏丹南部和巴基斯坦北部那些伊斯兰教教师,他们直接间接的资金来源,都要追溯到中东产生出来的这些基金会上面。

30
▋沙特宗教财团出资建造的规模宏大的云南沙甸大清真寺

印度和巴基斯坦两国是英印帝国的继承国,他们的独立,按照我们的话说,是不彻底的,没有经过彻底的革命,因此保留了英印帝国留下的许多法统和特权。他们的许多大法官仍然是英国培养出来的,就是这个现象的一个侧面。因此这些国家的法律中,对于教团的自治权利,是规定得特别宽泛,特别有保障。因此这两个国家也是伊斯兰教基金会发展特别迅速。你可以预见到,拥有一亿穆斯林的印度,将来可能就是未来各种新的伊斯兰教宗教改革团体的一个重大的发源地。

31
▋近代伊斯兰思想在南亚的重要园地印度阿里格尔穆斯林大学

伊斯兰原教旨主义理论中有许多各不相同的细节上的差异。但有一点是很明确的,就是,他们明确地把十六世纪以后逐步进入中东地区的民族国家体系当做一种外道的和邪恶的势力,它割裂了伊斯兰教社区传统的完整性,破坏了伊斯兰宗教的普世性质。伊斯兰宗教作为唯一纯正的宗教,它的普适性是它的纯洁性的一个象征。而欧洲国家四分五裂,各建民族国家,恰好就证明了基督教本身并不是足够纯正的宗教,它向世俗主义做了太多的让步,物质主义和功利主义是这种让步造成的必然结果。一切社会问题归根结底都是由于这种不彻底的让步造成的。如果能够坚定地实行伊斯兰教法,例如实行反对高利贷的教法,那么西方的金融体系就会完全无法展开了。如果能够坚决地实行伊斯兰教关于姓氏和各教团之间相互关系的法律,那民族国家就完全没有存在的必要了。

32
▋IS声称的政权疆域范围,不承认其间国家与国界的合法性

而阿拉伯复兴党或者是泛阿拉伯主义可以导向这样一个结果,把所有阿拉伯国家都摧毁掉,然后成立一个全阿拉伯世界的超级大国。但是泛伊斯兰主义不会产生这样的结果。它不要求泛阿拉伯主义的超级大国,也不需要,它只需要一个没有国家名号的一个战斗的伊斯兰教教团。这些教团的领袖,没有必要启用现有的国家组织,没有必要像阿拉伯复兴党领袖一样,在取得政权以后还要用西方的总理或者总统之类的称号,用政党的名号,这种世俗主义的名号来动员和团结它的基本民众。相反的,像马赫迪或者哈里发之类的,具有跨国性质,纯粹依靠宗教的方式来解放民众的组织团体才是他们所需要的东西。

33
▋IS领导人巴格达迪

在中东和伊斯兰世界的大部分,八十年代以后产生的这批新的伊斯兰教知识分子起了一个种子的作用。他们根据他们原先的渠道,很容易把已经得到的资金用还资的方式继续播撒出去。全球化给他们带来了更多的机会,使他们的播种范围可以不再受到原有的习惯性边界的约束。这些习惯性边界大概是在十六世纪的时候,由奥斯曼帝国的教法学家制定的。当时那些教法学家制定这些边界的理由是,伊斯兰教扩张和基督教世界的边境已经大体上稳定,需要有一个比较规范的形式,把和平地区和战争地区的交涉规则固定下来,以便以后的统治者参考。这些藩篱,在以后的几百年中一直维持着,保守的教法学家已经觉得没有必要再去考虑这些东西了,至少在短暂的目前,可以把这些边界看作永久性的。但是在八、九十年代以后,这些边界逐步地倒台了。现在新一代的伊斯兰教知识分子的中心,已经很难说到底是在开罗还是在巴黎了。

34
▋巴黎大清真寺及附属穆斯林研究院

在巴黎的可能性实际上反而更大一些。因为中东地区的统治者在信仰自由方面是管得比较死的。尽管他们自己可能也是亲伊斯兰教,甚至亲伊斯兰教激进主义的,但是他们对于不属于自己同一系,或者是教义和理论上有细节差异的宗教领袖和知识分子,往往会采取残酷打压的手段。而西方的言论自由,恰好为这些创新的理论家和社会活动家提供了良好的避难所。打个比方说,(此处删节43字)伊斯兰教那些知识分子也是这样的。在阿尔及利亚不能立足的人,在巴黎可以立足;在马里和尼日利亚不能立足的人,在巴黎同样可以立足。

巴黎的清真寺,产生了当代世界最大、最多、最复杂的理论和最多的伊斯兰教理论家。而且这些理论渐渐地又有跟六十年代以后的反殖主义理论合流的倾向。如果由法农(Frantz Fanon,1925-1961,法国黑人后殖民主义文化批评家)等人开辟的这种理论的合流倾向能够得到认可的话,那他们的历史解释就变成这个样子了:“基督教世界从十六世纪开始对伊斯兰教的征服,是殖民主义的第一步,摧毁了被殖民国家,伊斯兰教扮演了被殖民国家保护人的角色。西班牙王国对格拉纳达的征服,打开了美洲被征服的先河。征服美洲实际上是征服格拉纳达的一个必然和自然的延续。印第安人之所以失去了自己的国家,主要就是因为伊比利亚的穆斯林失去了自己国家的缘故。奥斯曼帝国衰微以后,中东和非洲以及东南亚,就注定要遭到欧洲人的奴役。所以反对殖民主义的先锋自然是伊斯兰教徒。而伊斯兰教法跟反殖民主义从历史的逻辑和道德的逻辑上都具有内在的一致性。解放,在过去可能是马克思主义意义上的经济解放,但是今后就要解释成为泛伊斯兰意义上的兄弟式的解放。通过使过去的压迫者和被压迫者共同皈依伊斯兰教,摧毁殖民主义的遗产,就可以完全扭转自西班牙征服和地理大发现以来的整体殖民主义。由于殖民主义并不像是泛阿拉伯主义所设想的那样,是一个具体和有限的统治,它代表了一个涉及政治、经济和文化结构的全方位格局,所以摧毁殖民主义,你并不仅仅是一个物质上的、或者是军事上的革命能够解决的。它必须涉及一场葛兰西(Antonio Gramsci,1891-1937,意大利共产党人,左派理论家,提出了“文化霸权”理论)意义上的文化战争。而这个文化战争,往往需要在西方内部的学府中间产生。”这种新的泛伊斯兰主义,吸收了葛兰西以来西方左派的许多理论,你只要把无产阶级的解放作用换成是伊斯兰教的解放作用,就可以看出他们在逻辑上的非常的相似之处。

35
▋因欧洲的族群与文化渐变而导致对伊比利亚历史中波澜壮阔的光复运动日益产生诸多新的解读角度

随着(此处删节25字)1968年以后,法国有许多原有的左派知识分子干脆改信了伊斯兰教。他们的理由是,争取平等和解放的真正保护者已经不再是(此处被迫删节6字),而是伊斯兰教了。以前的其他宗教都有各方面的问题,尤其是种族问题——种族歧视和种族隔离的问题。而伊斯兰教才是真正能够打破种族藩篱,让黑人和白人在同一个信仰之下相互以兄弟方式相待的唯一途径。这种理论在美国就产生了马尔科姆•X(Malcolm X,原名Malcolm Little,又名哈吉马立克·夏巴兹,1925-1965,早年是黑帮犯罪分子,入狱服刑期间受到激进组织“伊斯兰国度”教士的感化,成为坚定的穆斯林。出狱后,他追随“伊斯兰国度”领袖以利亚·穆罕默德,成为该组织重要的传教士。后又前往麦加朝觐,改奉逊尼派。他后来放弃了黑白分离主张,组建了穆斯林清真寺社团以及非裔美国人团结组织,并与马丁·路德·金等自由派民权组织合作。1965年在一次演讲中被乱枪打死)和黑人回教徒运动。它的存在理由就是,因为美国的种族之间,当时还是相当明显的,但是他到了麦加朝圣以后发现,来自全世界各地的伊斯兰教徒,黄种、白种、黑种都有,都亲如兄弟地向玄石朝拜,觉得非常感动,觉得无论在美国的现有的社会和政治之下如何改革,都不如大家直接改信伊斯兰教,实现兄弟般的团结来得好。如果说是法国的伊斯兰教仅仅是一个阿尔及利亚移民或者是非洲移民的问题,那么这个问题还倒是比较单纯的。实际情况是,在法国知识界中,伊斯兰本身已经是多多少少接管了(此处删节11字)它不仅在人口上增长,而且在理论上跟反殖主义和左派理论做了一个巧妙的嫁接以后,将来还很可能发展成为像十九世纪末期的(此处删节5字)那样真正颠覆西方的理论创新。跟这种理论创新相比起来,伊斯兰世界现在搞出来的那些恐怖主义和传统世俗国家之间的冲突,还真算不了什么。

36
▋美国黑人“伊斯兰民族”创始人马尔科姆-埃克斯开始被部分人视为美国自由的象征人物

在俄罗斯,伊斯兰教知识分子通过欧亚主义的方式,进入了俄罗斯的主流意识形态。甚至,普京时代的一个特殊之处在于,俄罗斯的西欧派或自由主义派的地位下降到这个程度,以至于他们甚至不如具有鞑靼血统和伊斯兰教血统的欧亚主义者更受普京的欢迎。欧亚主义者在前苏联的时代,基本上都是纯粹的俄罗斯人,没有把东方化考虑在内。他所谓欧亚主义是俄罗斯在东西方之间的特殊作用。而今天俄罗斯的伊斯兰教知识分子公开以欧亚主义自居,则是要求改变俄罗斯本身的性质,把俄罗斯变成一个欧亚混合的特殊国家。而欧亚混合中间那个“亚”,或者说东方的性质,主要就体现于俄罗斯日益增长的穆斯林人口和它的伊斯兰知识分子。因为普京的政策是,他通过伊斯兰教知识分子来绥靖伊斯兰教徒,像通过卡德罗夫家族(卡德罗夫家族是车臣当地教派领袖。艾哈迈德·卡德罗夫,1951-2004,1994-1996年车臣战争期间,他曾站在杜达耶夫分裂主义势力一边与俄联邦军队对抗,1999年8月车臣反恐怖行动开始后,他转而支持俄联邦,得到普京信任,后遇刺身亡。其子拉姆赞·卡德罗夫,1976- ,车臣共和国现任总统,拥有八千人的私人卫队)来对付车臣只是这个政策的一部分。他召集俄罗斯境内的伊斯兰教居民,让他们组织自己的团体,选出他们的知识分子和代理人,把这些知识分子和代理人以顾问和咨询顾问的方式,纳入了俄罗斯的决策体系,在俄罗斯宪法之内构成了一个具有特殊地位的集团。喀山这个具有伊斯兰传统的共和国的宪法,特别体现了这一点。它要求把喀山作为一个半独立的国家实体,跟俄罗斯联邦签署单独的条约,而它的政策,不仅受到喀山本身的伊斯兰教师联合会的影响,而且还要受到泛俄的鞑靼协会和鞑靼伊斯兰协会的制约。

37
▋鞑靼斯坦共和国上层政教人士

这种做法不限于俄罗斯,而且还同时出现在马来西亚。马来西亚政府从理论上讲,坚持世俗国家和联邦制的原则。但是为了应付它的多宗教和多族群的现状,它要求各主要宗教通过他们自己的学者专家构成一个教法学家的组织,通过这些教法学家的组织,向马来西亚政府提供咨询以及相互之间保持常规性的沟通,以此来避免各族群和各教团之间产生不必要的冲突。这种想法在理论上似乎是很好的,但是你也可以看出,它所谓的教法专家组织,从性质上来讲,完全是根据伊斯兰教教法学家团体的模式组成的。伊斯兰教组织这样的团体是一点问题都没有的,因为他们长期以来米勒特制度就是这样组成的。教法学家、专家组成的咨询顾问,实际上就是他们的统治者。他们等于是恢复了他们的原有体制。但是其他各宗教和各族群而言,这种体制是非常陌生的。例如马来西亚的华人基督教徒应该是怎样的,或者华人的儒教徒应该是怎样的?为了适应这种局面,他们必须把儒教改称为孔教,然后把儒家学者改称为孔教的教法学家,以这种形式,在当地宪法中才能取得一席之地。

普京政府在俄罗斯产生了许多长期的效果,其中之一就是,它改变了俄罗斯宪制的性质。经过他这么一种经营以后,沙皇时代从来没有发生过的事情发生了。伊斯兰教,现在在俄罗斯取得一种准国教的地位。由于它的人口仍然在继续增加,这个准国教的地位一旦取得了以后,今后再想要退回来,那就不大可能了。现在从法律上讲,东正教大主教和伊斯兰教大教长在俄罗斯联邦的法律地位,跟波兰主教和罗马教皇在波兰的法律地位是截然不同的:天主教会在波兰发挥的是一个道德上和精神上的引导作用,它在政治上没有直接的地位,只是享有大多数波兰人信仰的宗教这个地位;而东正教和伊斯兰教的教长,按照现有的俄罗斯宪法结构,他就不仅仅是宗教领袖了,他负有管理自身教民的责任。而世俗的行政长官为了统治方便起见,有义务通过教团的学者统治去他们的教民,而不是根据俄罗斯本身法律去对他们进行统治。这样就产生了一些很奇特的现象,例如不久前才爆出来的消息,例如像是,车臣人的领袖娶了一个非常年轻的姨太太,诸如此类的东西。这在前苏联和俄罗斯帝国时代,事情不应该是这样的。之所以会发生这样的事情,就是因为目前俄罗斯的穆斯林社团,已经取得了他们以前从来没有取得过的特殊权利。这种特殊权利实际上是要求俄罗斯联邦的世俗法律在涉及民事的问题上,效力低于伊斯兰教法。按照这种模式,俄罗斯联邦在某种意义上,已经退回到十六世纪以前那种状态。它不再是一个民族国家,而是东正教和伊斯兰教教团组成的一个米勒特国家。从性质上讲,非常像拜占庭帝国在灭亡以前的情况。

我们回顾一下,拜占庭虽然不是伊斯兰教世界的一部分,但是它在地缘上和制度上跟奥斯曼帝国都有很多重合之处。在被拉丁帝国颠覆的拜占庭帝国依靠保加利亚人和土库曼人雇佣兵复国以后(1204年,第四次十字军东征攻陷君士坦丁堡后,建立起拉丁帝国。原拜占庭的流亡贵族则在小亚细亚建立了尼西亚帝国等流亡政权。1261年,尼西亚帝国的米海尔八世夺回君士坦丁堡,推翻拉丁帝国,恢复了拜占庭帝国),这个新的拜占庭国家对米勒特制度的依赖已经达到了惊人的地步。它不仅把米勒特制度用于它自己原有的臣民,而且把欧洲人——热那亚人、希腊人,和其他基督教居民原有的社团都纳入了这个体制。像加拉太(安纳托利亚中部地区)的热那亚人社区,他们跟拜占庭皇帝签署的条约就是教团性质的。在塞浦路斯和拜占庭帝国残留的剩下各岛中间,为拜占庭帝国的亲王服务的少数安纳托利亚的雇佣兵,他们也通过教团的方式,直接跟雇佣他们的王公发生关系。早在君士坦丁堡最终沦陷以前,君士坦丁堡那个位置并不算很大的市场就已经划分给几个主要的教团,根据他们自己的教法统治了。在倒退几百年,在巴希尔王朝(巴希尔二世,958-1025,拜占庭马其顿王朝第十一位皇帝,962-1025在位,976-1025年亲政。他在位期间,拜占庭帝国达到了第二次黄金时期(第一次为查士丁尼统治时期))统治的君士坦丁堡,拜占庭帝国曾经从那些市场上收到巨额的收入,超过欧洲各封建国家的总和。但在拜占庭帝国的最后几年中,这个被瓜分的市场得到的大部分收入,都由主管这些市场的教团全都拿走了。而拜占庭王位的继承人必须抵押他们的王冠,向意大利的银行家借钱,却很难从那些依然繁荣的市场中间弄到一点点钱。

38
▋伊斯坦堡加拉太城区的拜占庭时代热那亚教堂遗迹

奥斯曼帝国进入君士坦丁堡以后,为了继承拜占庭帝国的原有统治权,对拜占庭帝国原有辖区的各种居民继续实行同样的制度,允许他们的主教或者是教长在出席奥斯曼帝国皇帝的国务会议,在他们面前为他们自己统治下的教民的忠诚作担保。尽管征服者占据了君士坦丁堡的许多要害地带和大概一半的财政税收,但是剩下的各教团,组织方式仍然是米勒特制度的。从他们当时的角度来看,米勒特制度是同时保证征服者和被征服者双方特殊自由的有效手段。最重要的是,这种手段是具有高度灵活性的,随着双方势力,无论是哪一方势力有消极或增长的迹象,教团制度都可以做相应的调整;相反,宗族制度、城邦制度和领土国家制度就要刚性得多,它不可能随着各个团体之间的势力消长做出及时的调整。这就是为什么经过了十六世纪以来三百年的演变,表面上看起来好像民族国家曾经一度濒临取得胜利,而在二十世纪下半叶教团制度又有卷土重来的强烈趋势的缘故。

从民族国家的政治伦理的角度看,教团本身是一个很讨厌的存在,它是跨国性质的,严重损害民族国家内部的主权,使国家内部的法律制度的统一受到了损害,也损害了统一国家、收集财政和实施外交的努力。但是它的力量是如此之强大,以至于大多数臣民中包含部分伊斯兰教徒的国家,都没有办法回避这些教团的存在。而且除了承认这些教团,并把他们纳入自己的宪法结构以外,他们很难找到适当的对待这些教团的方式。在政治秩序完全解体的地方,特别是从中亚费尔干纳盆地(位于乌兹别克斯坦、塔吉克斯坦和吉尔吉斯斯坦三国交界处)到瓦济里斯坦(位于巴基斯坦西北部与阿富汗接壤的山区)边境地区的地方,实际上教团和部落构成了唯一能够实行有效管制的力量。这些团体和部落,和当地理论上的政府,也就是巴基斯坦的政府之间的交涉,就很难说是内政还是外交了。他们全都是跨越一定边界的,全都是按照独立的政治集团的身份来采取行动的。他们自己拥有的资金流,在大多数情况下是比理论上能够镇压他们或者统治他们的巴基斯坦地方警察要强大得多。同时,伊斯兰堡的许多政治势力都很乐意把这些教团和部落当作自己临时性的盟友,至少他们可以发挥打击自己其他假定的政治对手的用途。随着这些教团组织的不断扩张,巴基斯坦政府越来越像是以前的伊朗国王,变成一个表面上的空壳。在旁遮普人和信德人控制的那极少数大城市之外,从面积上来讲占巴基斯坦绝大部分、包括了巴基斯坦地缘政治上所有重要地区的部落区,日益变成教团的天下,也只有教团才能超越部落,对这些地方的居民提供更高层级的整合。

39
▋普什图部族与教团长老聚会

(五)新世界的降临?

在西非,伊斯兰教社团,传统上来讲,是通过精盐贸易和奴隶贸易,先建立商团,然后通过商团,用传教和征服交替进行的方法,把他们原有的宗教团体变成政治团体,通过这样形成的政治团体建立贸易帝国。法国人的殖民征服在十九世纪一度打断了他们这个过程,但随着殖民主义的撤退,这个过程又重新开展了。反殖民主义以后的几十年,越过撒哈拉沙漠南下的伊斯兰教教团,把尼日利亚的大部分居民变成了穆斯林人口,把西非撒哈拉地区的大多数国家变成了伊斯兰各教团争夺的对象。也就是在这个背景之下,你才会看到博科圣地(正式名称是致力传播先知教导及圣战人民军,2002年成立于尼日利亚博尔诺州首府迈杜古里,主张在尼日利亚推行宗教法律,被称为尼日利亚的塔利班。其已故领袖穆罕默德·优素福在2009年接受英国广播公司采访时说,他不承认地球是圆的、不承认达尔文的理论、不承认水被太阳蒸发后形成雨,因为这与伊斯兰教教义不符)这样的组织。由于媒体曝光的不平衡性,它可能给人一种印象就是说,博科圣地是一个特殊性质的组织,是一个特别坏、特别侵犯人权的组织。但实际情况恐怕不是这样。应该说最近这几十年以来,当地的社会生态中间唯一有活力、能够提供重要社会服务的组织,就是各式各样的教团。博科圣地很可能只是这些教团中间并不特殊的一员,而它之所以变得这么知名,主要是由于西方媒体把报道的视角专门集中在它头上。其实其他教团在这方面可能跟他也是半斤八两,差别不是很大的。

40
▋博科圣地势力范围图。该组织新近自称为“西苏丹省”以示对IS效忠

它不一定是最后胜出的力量,但是在可以预见的未来,这些教团的力量即使不足以完全统治当地,至少也会强大到足够构成当地统治者必须绥靖的力量。像肯尼亚,在英国殖民时代,它的穆斯林人口是接近于不存在的。目前,它的穆斯林人口大概是10%左右,正在不断增长之中。但这10%的人口,已经足以使肯尼亚修改宪法,为这个特殊的少数民族提供特殊地位。在肯尼亚目前实行的那种西方式的选举政治中,10%特别好战的穆斯林能够有效地筛掉他们讨厌的候选人。在传统的基督教大国埃塞俄比亚,最古老的文明国家埃塞俄比亚,在XXXX政权倒台(1974年埃塞俄比亚皇帝被废黜,埃塞俄比亚帝国改称“社会主义埃塞俄比亚”;1977年2月,门格斯图·海尔·马里亚姆中校发动政变上台,自任国家元首;1979年成立以军人为主的“埃塞俄比亚劳动人民党组织委员会”,推行一党制;1987年9月,门格斯图宣布成立“埃塞俄比亚人民民主共和国”;1988年3月,埃塞爆发内战;1991年5月,埃塞俄比亚人民革命民主阵线推翻门格斯图政权)以后不到二十年时间内,穆斯林人口以惊人的速度增加。据说,现在的埃塞俄比亚境内有将近一半的居民是已经变成伊斯兰教人口,而且他们增长的速度比传统基督教人口要大得多。他们跟索马里和努比亚的伊斯兰教团体关系十分密切。

苏丹南部最近十几年所谓黑人和阿拉伯人的冲突,实际上是伊斯兰教利用它传统的教团形式,对付多神教和基督教黑人的一种惯常的手段。其实也是因为受到西方媒体的特殊关注,才放大了它的特殊意义,才在公众心中放大了它的分量。实际上这种行为在过去几百年来,在越过撒哈拉沙漠南下的伊斯兰教教团扩张中,应该是极其常见的。南苏丹的独立,在尼罗河上游地带制造一个基督教的孤岛,但是随着大河地区南下的有战斗力的伊斯兰教社团仍然在中非地区积极活动。可以想象,未来的中部非洲,他们的组织仍然会很有生命力。如果有谁能够充当他们强有力的对手,那肯定不是去殖民化以后建立起来的这些非常虚弱的有名无实的国家。这些国家大多数只在它们的首都存在,存在着纸面上的宪法,除了几条主要的交通线以外,对大多数部落地区没有起码的了解和管制。而伊斯兰教通过他们的社团,能够把原先分散的各居民和各部落有效地整合起来。整合以后的教团,比起原先的各部落,通常,即使他们不一定是人道和先进的,但是毫无疑问他们能够有更强大的组织能力和动员能力。这样就使他们对那些没有整合的其他各部落组织享有了巨大的优势。在西方人来到以前,西非的几个主要的帝国,都是依靠这样的新势力建立起来的。这些帝国之所以信赖伊斯兰教,并不是出于君士坦丁改信基督教或阿育王改信佛教那种原因,而是因为伊斯兰教的组织本身就构成了当地最强硬的组织,甚至是唯一的组织。有伊斯兰教,就能够有帝国;没有伊斯兰教,你就只能有部落。没有伊斯兰教,只能是分散的部落,哪怕是武士非常强悍,但是政治统治的范围肯定很有限。有了伊斯兰教,你就能够跨越部族的边界,建立起广大的帝国。

41
▋南苏丹天主教徒的主日弥撒

同样的模式也见于现在组成印度尼西亚的各岛屿。在荷兰殖民者来到以前,这些以伊斯兰教为组织资源建立起来的新帝国,与过去印度教建立起的那些比较松散的国家相比,具有重大的优势。随着欧洲人的撤退和伊斯兰原教旨主义兴起,像亚齐的伊斯兰教师联合会那样的组织占据了印尼社会生态中的主要组成部分。(由于众所周知的原因,此处被迫删节270余字,请读者们原谅。)而今天在印度尼西亚的每一次大选中间,违背伊斯兰教师联合会意志的政党是不可能有生存机会的。

伊斯兰教师联合会也把它的意志强加给本国的宪法结构,印尼的建国五基——五大基础中,其中有一条就是,要信奉上帝。这个“信奉上帝”不是一定要信仰伊斯兰教的安拉,而是信奉任何神明都可以。在这种情况下,基督教还没有什么问题,因为他们毕竟也是信奉上帝的,而华人就出现很狼狈的问题了,他们只能把自己自称为孔教信徒,把孔教解释为一种宗教,然后才能使自己符合建国五基的要求,把自己变成印尼宪法结构的有效组成部分。如果他们把孔教当成一种哲学,那就是等于是承认,信奉孔教的印尼华人是一群无神论者,在印度尼西亚就变成一个不受保护的群体。如果他们要变成受保护、有充分权利的公民和有效参与政治的团体的话,那么孔教就只能作为宗教存在了。之所以是这样,就是因为印尼宪法用看待伊斯兰教教团组织的方式,来看待所有居民团体和宗教团体。你要想在政治结构中争取自己的地位,你只有模拟伊斯兰教的教团结构,即使你不是伊斯兰教教徒。除此之外你没有办法争取自己的地位。

42
▋印尼雅加达华人社群的孔教会

从现在的发展趋势看来,未来能够跟伊斯兰教师联合会竞争的主要力量,也就只有亚齐的更加极端的伊斯兰原教旨主义势力。世俗的和非伊斯兰的势力,很难在这样的政治生态中间获得一席之地。现在更加纯正和激烈的伊斯兰教激进分子提出了自己的独立方案和改造印尼国家的整个方案。他们和比较温和的伊斯兰教师联合会之间的斗争,可能会构成今后几十年印度尼西亚政治斗争的主线条。这样的斗争才是争夺基本盘的斗争。相比之下,上层的党派斗争是不太重要的,因为印尼的党派都是不大稳定的,但是每一次临时拼凑起来的政党集团,需要选票的时候,最终都非要依靠控制全国90%选民的印尼伊斯兰教师联合会的支持才能管用。唯一能够克制伊斯兰教师联合会的力量,要么就是军人和专业官僚集团,要么就是更加激进的、甚至具有境外色彩的伊斯兰极端原教旨主义势力。

43
▋印尼雅加达重要伊斯兰组织穆罕默迪亚总部

(此处删节60余字)我们不能抱有一种误会,以为伊斯兰教是一种中古性质的宗教,没有什么重大价值,能够提出来的东西我们早就知道了。实际上它现在已经接纳了大多数二战以后反殖民主义时期提出的大多数左派理论,它与这些左派理论之所以能够这样天造地设的结合,部分原因大概在于,伊斯兰教在犹太基督教传统内部,本身就是一个晚来者和挑战者。它认为它是犹太基督教传统的革新者,要清除这些老宗教原有的弊端,补充他们没有完成的真理,但是并不是推翻一神教的真理,而是要纯正化伊斯兰教的真理。这个性质跟(此处被迫删节24字)一开始也是有他的启示录性质的,他认为他负有洁净世界的使命,通过世界末日善恶大决战来革新整个世界。这两者之间的心理结构一开始就是非常相似的。伊斯兰教有旧约先知的精神,通过狂热的圣战来革新世界的决心。在整个世界似乎都丧失了理想和变得抱残守缺、只能做局部修正的情况下,那些希望从整体上革新世界的人,在过去可能会投靠XXX的人,在现在就只能去投靠伊斯兰教了,否则他们就再也没有其他的出路了。

44
▋拉美著名马列主义恐怖分子豺狼卡洛斯,由无神论皈依伊斯兰

伊斯兰教的教法学家,擅长于把宗教和政治动员能力结合为一体,把追求公正和民主的斗争和伊斯兰教本身的基本教义结合在一起。这两者,构成了它将来在欧洲甚至是欧洲最发达的国家占住基础的最重要原因。一般的看法认为欧洲的伊斯兰教是纯粹的所谓移民问题,但是九十年代以后的情况已经不再是这样了。无论是在俄罗斯还是在法国,都有很多原先本来是属于纯粹俄罗斯人或者是欧洲人出身的子弟,甚至是俄罗斯安全部队的军官之类的,都在改信伊斯兰教。这里面的理由也是双方面的。一方面伊斯兰教的组织性很强,财政支付体制始终完善,他们能够养得起人,能够保护得起人,能够给你提供必要的升迁,能够给你提供足够的社会关系。另一方面,它能够以比较简单浅显的方式实现理论上的自洽性。这种自洽性具有普遍的和唯一的性质,不像是大多数国家目前所提出的各种修正版的打了补丁的理论那样,给人一种缺乏美感和缺乏逻辑一致性的感觉。福山所谓的那种历史终结,不是说历史世界的终结,而是说是世界理想的终结,就是说可以存在的世界模式逐步趋于,好像人类已经提不出什么跟原来不同的、新颖的理论,提不出什么可以追求的模式了。而伊斯兰教的存在,似乎是专门针对他这个终结论提出来的。革命的伊斯兰教理论,是能够提出替代性的、全球统一的理论的,只要你愿意按照它的要求去做出重大的牺牲。

所以现在中东和全世界发生的事情,在地方性事件的背后,存在着既古老又新颖的世界体系理论的斗争。这种世界体系,因为它没有自己的身体,没有自己明确的形态,所以容易被人忽略,或者说容易在歪曲的情况下被解释为其他的东西。这个解释不见得完全正确,例如你可以把它解释为当地的社会不公,或者是政治结构扭曲,专制主义所导致的种种结果;可以把它解释为各种特殊部落或者文化系统斗争。这些解释本身都是正确的,但它在背后却存在着一个连贯性的线索:伊斯兰教内部的组织,能够提供一个全球化的网络,以非常迅速的方式,把他们的信息模式、统治模式传播到全世界。像伊斯兰国最近在叙利亚稍微取得了点成功,你马上就可以看到,巴基斯坦和阿富汗的组织、印度尼西亚的组织、尼日利亚的组织和遍及全世界的各伊斯兰教组织,在极短的时间内突然向他效忠。而且这个效忠好像还不仅仅是出于名义的,因为这个效忠的宣言只花了几个月以后,他们的组织内部就开始展开了相当残酷的清洗和改组。清洗和改组的存在,就表明了这些组织的归附,并不仅仅是纯属名义上的,它有点像是(此处删节35字)经过这样反复整顿和不断繁殖形成的一个团体的网络,在目前这个全球化为他们提供了充分的交流工具的情况下,将来一定是大有可为的。特别是在边缘地区,在原有的殖民主义撤退后,民族国家的组织名存实亡,没有真正建立起来的地方,他们享有的实际权力很可能比正式国家还要大。而且建立自己的政权,从地下浮出水面,需要的时间是非常短暂的。

45
▋与IS有较强关联的其它极端伊斯兰组织分布图

可想而知,在这些组织传播的边缘地区,特别是俄罗斯、XX和印度这样的地方,将来会发生巨大的冲突。因为这些地方的伊斯兰教团传播的基本条件已经是具备了,但是非伊斯兰教的世俗政权的组织和民族国家的传统仍然足够强大,有一定的抵抗力。在两种有抵抗力的力量相遇的地方,很容易爆发冲突。而在西非或者是尼罗河谷这样的地方,非伊斯兰教团的各种力量是如此的分散,以至于很难发生有效的抵抗。这些地方在可以预见的未来,可能会在近乎无声无息的情况下,经历大规模的伊斯兰化。欧洲可能是未来的伊斯兰教革命理论的一个巨大的孕育孵化中心。失意的法国左派知识分子将在这场运动中发挥主要的作用。

46
▋2015年九月俄罗斯总统普京、土耳其总统埃尔多安及其它俄罗斯政教要人出席莫斯科大清真寺启用典礼

目前,要预见到未来的发展是怎样,大概是不可能的。但是这种情况确实与十九世纪末叶,苏联还没有产生出来以前,西欧社会主义在全球扩张的格局非常相似。任何事情在它发生以前都是有一定伏脉的。也就是说如果某一种思想或者是某一种组织,在某一个历史阶段突然冒出头来变得非常强大,那你一定可以看见,在它冒出头来以前,这样的思想和组织,本身已经有一个地下的大规模增长状态了。相反你也可以把这种推理方法反过来运用一下,你从现在各种思想和组织的发展势头就可以看得出来,它将来会不会有突然暴起的机会,还是会逐渐衰微。如果按照这种思想方法来推理的话,那你就得承认,冷战以后,属于(此处删节30余字)还是其他什么各种变体,都处在急剧衰微的状态。顺着这个趋势,他们在未来的世界中不会发挥主要的作用,而且他们原先控制的地盘也处在不断的萎缩之中。而在不断崛起的各种力量当中,最具有革命性和爆炸性的力量,莫过于伊斯兰教的教团组织。其他同样迅速崛起和扩张的组织还有,但是都没有它具有这样大的革命性和冲击力。所以我相信,未来的几十年之内,他们的冲击会在很大程度上给世界体系留下重大的烙印,比较接近于二十世纪俄罗斯的冲击给世界体系留下来的烙印。而现在的俄罗斯,虽然在形式上好像仍然是西方体系的主要挑战者,但它却是一个正在衰微的势力。它挑战的结果很可能使自己进一步衰微。而伊斯兰教对世界体系的挑战则是正处在方兴未艾的状态,将来还是大有可为的。好,谢谢。

· 正文完 ·

(六)问答部分

问:是不是可以说像伊斯兰这样政教合一的国家很容易出现独裁?

阿姨:与其说他们是政教合一的国家,倒不如说他们根本不是国家。至少他们不是法国大革命以后建立起来的那种国家模式的国家。他们本身就是教团。他们的教团实际上是不需要国家的。他们能够提供社会生活的方方面面,所以对于他们来说,信仰的意义就绝对不符合比较宽泛的知识分子想象中的那种信仰的含义。知识分子想象的信仰就是我赞成某一种理论和观念,然后赞成完了以后,可能我就去研究或者不研究。但是无论如何,这件事情没有多少社会性,主要是理论上的东西。而教团呢,它在理论上是不先进的。伊斯兰教有一个特点就是它在神学上不是很发达。其实在中世纪,好像是伊斯兰教占领地区和经济实力比基督教世界要强大得多,但是他们远不如中世纪欧洲那些贫困的修道院里面产生出来的神学成就大。他们的特长在于,他们提供了直接和具体的社会服务。加入了那些团体之后,你实际上在团体之外就没有别的社会关系了。

111

这一点我觉得中国人应该能够理解,因为这一点跟XXXX有相似之处。(由于众所周知的原因,为保护冬川豆,此处被迫删节130余字,请读者们原谅。)一直到死都在组织的管理之下,除了组织以外你什么都没有。你离开组织以后,你就好像一个残疾人离开拐杖以后,刹那间,至少在短时间内,你连怎么样生活都不会了,连怎么样说话都不会了。明白这一点你才能够解释,为什么(此处删节11字),往往是怎么都不肯逃走,在有机会逃走的时候都不肯逃走,给他平反的机会他马上就会回去。同样的情况出现在资产阶级政党中,那肯定就是大家撕逼,然后各自搞各自的政党。XXXX之所以会发生这种情况,关键就在于,它的组织能够造成极大的社会关系依赖性。这个依赖性一旦养成了以后,你要想摆脱它另外重新建造一套社会关系,是非常不可能的。(此处删节60字)你等于是变成了一种特殊材料做成的人,用特殊的语言和特殊的切口。离开这个团体,你连说话都不会了,做事都不会了,你整个就是一个废人。像这种情况下,如果组织哪怕是整过你,只要他愿意给你平反,恢复你的地位,你肯定是兴高采烈地回去了,因为你本来就没有其他的路。

伊斯兰教的教团就是这个样子的。你如果从小就在这样的教团中长大的话,你跟教团之外的人没有办法接触,你跟教团之外的人没有办法结婚,没有办法交朋友,因为一到生活细节方面的话,你原来形成的习惯和依赖,都对你构成新的社会关系形成了不可逾越的阻碍。这样的教团组织真正的力量就在这个全方位的服务。这个全方位的服务是非常有用的,非常安全的,它能够保护你。(此处删节14字)如果你是个普通的居民,你穷了没有人会管你,如果有人欺负你,没有人会管你。如果你加入了他的某一个教团,那就会出现这种情况,你没有房子,刹那间,会有一批教友从你听都没有听说过的地方跑过来,带着钱、带着工具、带着材料来,帮你一夜之间就把你的房子建起来了,一夜之间你就有钱了,你的家人都得到安定了。但是如果你背叛了他,也可能在半夜之间,你突然醒来的时候,发现你自己躺在垃圾堆上,刚刚建好的房子已经给人拆得光光的。它既是巨大的服务和保障力量,又是巨大的约束和恐吓力量。一旦你加入了这样的团体,即使理论上他没有说要杀你全家,但是实际上你加入进去以后就是一个单行道,你再想要退出来,那个成本是非常之高的。

问:现在的贪官在法庭上承认错误,我觉得虽然有些可能是违心的,但是可能有一部分他们是真心悔过的。

阿姨:因为人最大的恐惧就是什么呢,被孤独和被抛弃。像高尔基这样的人都是这样的。列宁在世的时候他往往跟列宁吵架,列宁一死了以后,他就觉得他自己变成了孤儿,好像失去了依附的对象,马上就痛心疾首地忏悔起来,说过去不该跟列宁吵架什么什么的。这个事情不一定是别人逼他的。从心理依赖性的角度来看是很容易理解的。

问:美国将来对穆斯林的态度会是怎样?

阿姨:我觉得美国不是伊斯兰教徒的敌人,能够跟伊斯兰教徒竞争的只能是跟它同生态位的团体。对他来说就不存在有军事打击的问题。如果你用现代化的军队去打击他,那当然是可以打掉的。但是你别忘了,你现代化的军队招募到的那些军官,自己都很有可能变成他们教团的成员。像俄罗斯镇压车臣那些军官,往往就是这样的。俄罗斯安全部队当中改信伊斯兰教的比例是格外的高,这一点可能里面应该是有一点儿特殊的奥妙的。能够跟伊斯兰教徒竞争的东西,就是跟它能够占据相似生态位、能够团结群众、能够建立类似教团的组织。

112

问:那他们会不会在一定程度上挑战美国主导的世界体系?

阿姨:会的。因为美国主导的这个秩序是威斯特伐利亚体系的一个直接延伸,而教团制度所取消的,正好就是国家体系本身。美国等于是这个体系的继承人。而他们虽然不是直接攻击美国,但他们间接地攻击了美国体系产生的那个基础和源头。但是这是没有军事或者政治解决方法的。实际上这就是一个社会组织和信仰的竞争。如果他们的挑战失败,那也只是因为在思想观念上和组织层面上产生了跟他们生态位相近、而且足以对他们进行有效竞争和遏制的组织。这个组织我觉得不大可能是民族国家。民族国家属于有劲使不上,因为跟他们不处在同一个层面上。就好像说你养了一只猎犬或者老虎,让它们去捉跳蚤一样,它肯定捉不住。不是因为你养的猎犬不好,而是因为它们不在同一个生态位上。能够跟跳蚤实行有效竞争的,那大概是其他的某些昆虫,像蜘蛛之类的。能够跟细菌竞争的,大概就是产生青霉素的霉菌之类的。能够克制你的人,肯定是跟你生态位相近的,不会是超越你生态位的东西。

它这种教团挑战的厉害之处、危险之处就恰好在于,十六世纪以来民族国家体系的产生,实际上是牺牲了中世纪长期存在的许多基础生态位。而这些基础生态位,才是遏制伊斯兰教团,能够跟伊斯兰教团进行有效竞争的力量。将来如果说是类似的组织,比如说像是圣殿骑士团或者诸如此类的组织不重新产生的话,那么可能现有的民族国家体制是不能有效地遏制伊斯兰教势力的扩张的。所以我觉得最有可能发生的情况应该是这样的,它的挑战,能够在很大程度上,至少在初期阶段,能够像是布尔什维克打倒一大批比较脆弱的国家一样,一下子就打倒了一批比较脆弱的民族国家,造成一个动荡的真空。然后在这个扩张的过程中,引起相当于中世纪那种亚国家团体,骑士团啊,兄弟会啊之类的组织,重新复活。而那些重新复活的组织,才能够跟这些教团构成有效的竞争关系。

113
▋雅克•德•莫莱成为圣殿骑士

问:那是不是说现在伊斯兰国的行为反而能起到一个对世界的推动作用?

阿姨:是个有力的刺激作用。因为挑战和破坏是很难分清楚的事情。同一件事情你说他是挑战还是破坏,那是要看你的观点了。但是,无论如何,就是说经过挑战以后,无论挑战结果如何,世界都会变得不一样。通常你为了战胜某一种挑战,你会不得不接受你的敌人和挑战者带来的某些特征,否则你就没有办法克制他。所以在这种情况下,他即使失败了,也不是完全失败,其中也是有胜利成分在内的。我想伊斯兰教这种团体,它等于是给民族国家体制提供了一个警示,证明我们原先,二战以前还认为是完美无缺的、维也纳会议和巴黎和会都认为是没有问题的这个民族国家体制,其实是有软肋和空白点的。

114
▋穆斯林在法国

问:那您说这种刺激作用是不是对普通人而言会造成一种灾难呢?

阿姨:是灾难。

问:所以是不是说所有的东西都是必须要经过这个痛苦的过程才能得到提升和完善呢?

阿姨:仔细想来应该就是这个样子的。因为你所有的优秀品质什么的,都是通过演化论意义上的筛选构成的。你之所以能够,比如说是具备某种能力,那你肯定是因为在过去的演化和筛选中间,有许多没有这种能力的个体已经死掉了。进化和退化也是一样的事情,因为你产生出某些特点或者组织,或者甚至可能是必然会导致另外一些特征或组织的退化。因为一切资源都是有限的,即使物质资源在某个情况下可能达到近乎无限供应,但是机会的资源或组织资源肯定是有限的。比如说你在特定的时间中,你关注的对象肯定是有限的,你关注了物理学就不能关注化学,无论你物质上的资源再多,你都不可能同时关注的。你如果把注意力转向化学,那你必然要放松物理学方面的关注。这是一个同样的道理。所以可能世界是永远无法达到完美的。完美只是一种临时的、暂时的最优平衡状态。在某一方面达到完美的同时,在另外一方面就会产生出空门和软肋,结果新的挑战会在你这些空门和软肋产生。而你原先已经认为战胜的这个控制和挑战,则变得不再重要了。

问:我觉得人类文明是不是不能全按照动物世界的丛林法则来走的吧?

阿姨:这个嘛,很难说,因为理性这个东西到底是一种内在的自洽的东西,还是只不过是历史经验产生出来的一个边界条件?这是很难说的。我倒倾向于可能是属于后者。也许理性本身不是一个整体上的东西,而是巨大的、你自己都没有意识到的历代相传的历史经验,给你铺平了一个道路中间画出的一条边界线。这条边界线之所以能够画在这儿,主要是因为历史经验刚好推进到这一步。如果历史经验没有推进到这一步,那么理性的边界就要画在另一个位置上了。而且随着历史经验的演变,这条边界也可能不是固定的,而是在不断演变之中的。

115

问:那是不是说人类平和的改进不如这种冲击来得好啊?

阿姨:不是说不如冲击来得好。而是因为如果你长期没有接受到某种冲击的话,那么你对这种冲击的抵抗力就会变得越来越脆弱,于是实际上在更长时期内,造成了你面临这种冲击的时候会突然崩溃的可能性。

问:目前能和伊斯兰教进行同生态位竞争的有哪些?

阿姨:我想,就目前情况来说的话,能够跟伊斯兰教进行有效竞争的也就是基督教的传教团体。

问:那目前他们是一个什么样的情况呢?

阿姨:这个我具体也不太了解。当然将来也可能会产生出更加合理的组织。我认为就是跟这种团体能够进行有效竞争的团体,生态位相近,但不是完全相同。它应该能够具备某一些教法团体所不具备的特征,而这些生态位相近,但是特征有异的东西,才是它的有效的克制剂。如果是完全相同的话,那就仅仅能够竞争而不能克制了。所以中世纪时期,十字军战争时期会形成骑士团这样的组织,圣殿骑士团,或者波兰王国的骑兵队这样的东西,可能就是为了这个目的而产生出来的。这种演化是自然的。它应该产生在斗争的边界地区。也许像现在库尔德人这样的组织,就是这种应激反应的一部分。

116
▋库尔德女战士

问:所以说现在的伊斯兰国兴起不一定是一件坏事?

阿姨:这要看你从哪个角度来看了。你如果处在没有做准备就遭到打击的那个边界线上,那就不见得是好事。但是如果没有这样的打击的话,也就没有办法在冲突地区产生出必要的制度创新和理论创新了。其实人的大部分基因都是转导的产物,也就是说由其他的病毒或微生物给带进来的。所以人可能有70%都是由异种基因构成的。连物种和物种之间的边界都不是明确的。制度和制度的边界当然也是这样。笼统的说可以有这种制度那种制度,但是所有制度其实都是人类基因组这样的嵌合体,其中留下了很多来源于其他历史时期留下的制度的痕迹,那是历史上各种入侵和模仿的产物。但是可能就是这样七拼八凑搞成的看上去很不规范的东西才有生命力。你如果搞成一种看上去整整齐齐,好像是每一段都是功能明确的基因,这样的基因很可能在自然界是没有生存能力的。这种七拼八凑留下的痕迹,恰好就反应了它在过去的漫长历史中间曾经经受过各种考验,而这种考验是它生存能力的最佳保证。

问:中国会不会受到大的冲击?

阿姨:(此处删节150余字)

117

问:那山东的回族呢?

阿姨:我觉得山东的回族应该是比较老的家族,应该还是相对而言比较固定的。有危险的应该是(此处删节40字),就是留下来了一个巨大的真空。任何人想进去的话,阻力都不是很大的。

问:我们国家历史上从来都是世俗的国家。

阿姨:这个不见得。你说历史上中国一直都是世俗国家,实际上是因为中国历史的记录者是士大夫阶级,所以他有意地低估了基层各种怪力乱神的作用。像是张角(东汉太平道教主、黄巾军领袖)啦,孙恩(东晋五斗米教领袖、海寇头领)啦那些乱七八糟的人。所以你要看士大夫记录的历史,就有一种很奇怪的现象,像张角、孙恩那种人,好像是前几年历史上一点痕迹都没有,大家都在关心着谁当什么什么官,谁跟羌人或者匈奴人打仗之类的事情,突然几年之内,好像全国到处都在闹黄巾,他们从哪儿出来的?这好像是不可能的。正确的解释应该是,士大夫阶级不愿意记载这些不规范的、搢绅先生难言的、不雅驯的东西,直到这些人实在打上门来,不记载也不行了,才用比较歪曲的方式记载下来。像明朝这样的例子,肯定不会像是明史记载的那样。它的早期历史,十拿九稳就跟孙恩、张角他们这批人是差不多的。只是后来被士大夫阶级重新给改写了。早期它就是一个邪教组织,这也应该是没问题的。

问:我觉得中国每个朝代的君主都是造反上来的,然后长则几百年,短则几十年,又被其他人推翻了。

阿姨:(此处删节30字)日本这样的地方就不容易。基督教在日本传了一百多年,现在成就仍然非常之小,这就是重要原因之一,它原有的社会比较密闭,基本上是填合了所有可以填合的空间,就没有什么余地可以让你渗进去的。但是像中国这样的地方,外来的宗教或者组织,突然渗透进去,突然替代,那是太容易了。

问:(本问题略)

· 全文完 ·


Raspberry Pi Baby Monitor with Splunk by Bam Bam Mantell in technologysensors

$
0
0

Raspberry Pi Baby Monitor with Splunk by Bam Bam Mantell in technologysensors
Featured
Download 15 Steps Share Favorite I Made it! Collection
Picture of Raspberry Pi Baby Monitor with Splunk
webcam.png
IMG_0432 (1).png
IMG_0431 (1).png
These steps will teach you how to assemble the components required to make a Raspberry Pi baby monitor, and collect that data into Splunk, a log reader and analytical tool, to preset that data in a meaningful way. At the end you will be able to use the Spunk dashboard to monitor sleep patterns, room temperature and humidity. We’ll also pull in outside weather for a comparison.

To create the monitor you will need:

Some Linux skills
Raspberry Pi 2b with Raspbian installed
The Raspberry Pi Camera module, with Infrared
AM2302 DHT22 Temperature And Humidity
The Raspberry Pi Wifi Dongle
A server to host Splunk – for the Reporting dashboard, I used Linux Centos, but you can run it on Windows for Mac as well
The Splunk Universal forwarder software for Raspberry Pi
When I started this experiment, I was sure that if we could maintain a good sleep environment for bub’s, then I too would get more sleep in return, benefitting everyone. It gets pretty hot in Australia in summer, so ensuring the room was at optimal temperate for the sleep zone should really help keep everyone happy. So with some monitoring and alerting we should be able to keep it in the sweet spot for optimal baby comfort!
Step by Step Instructions to Replacing Your Toilet
Replacing your old toilet with a new, low-flow model is a great way to save water and update the look of your bathroom.
Ad by The Home Depot Canada
Step 1: Set up the Raspberry Pi

Picture of Set up the Raspberry Pi
The basis for the baby monitor is the Raspberry Pi, a cheap versatile Linux platform. You can order them from heaps of places online for about $50. I used the Model 2B, but I’m sure the newer version would also work. The Raspberry Pi 3 has integrated Wifi, so that’s one less thing you need to buy.

Order Raspberry Pi, and camera, and SD card
Wait patiently for its delivery
Install Raspbian linux on the SD card, follow the Raspberry Pi guide on this
Confirm you can connect, use you favourite SSH program to log in remotely once installed
Run an update, running the update command
sudo apt-get update
Once that is done, you’ve got a base operating system to build on

ADVERTISEMENT

Step 2: Connect the Pi NoIR camera

Picture of Connect the Pi NoIR camera
enable camera.png
The Pi NoIR, is the night vision version of the camera, it has ‘No Infra Red’ Filter, meaning, if you have an infra red light source, at night, the camera can see them in the dark. Since our baby will do lots of sleep at night (hopefully), thats what we’re using. If you want brightly lit, colour vision, don’t use this camera.

Open the Raspberry Pi Case, push back the bar on the clip next to HDMI port, push it firmly, but don’t bend it

Logged into the Raspberry Pi (ssh, or the console)

Type the command

sudo raspi-config
Select

Enable camera
Select enter, when you are done, It prompts for a reboot, which you should do, its wise to follow instructions

Step 3: Connect the Temperature and Humidity Sensor

Picture of Connect the Temperature and Humidity Sensor
IMG_0426 (1).png
At the start I advised on the sensor to use for this. The one I linked to has the embedded components, namely a resistor. I have seen another version, a blue version that doesn’t have this, and may need one, to not blow up. This direct connection is applied to the red AM2302 sensor, with on board components. Others may work, but be careful.

Connect the jumper lead to the 3 connections on the Sensor
Orange = Ground
Red = VCC
Brown = DAT
Connect the other end to the Raspberry Pi. Raspberry Pi have a reference digram for connecting.

Connect the ORANGE = Pin 6 = third from the left on the top
Connect the RED = Pin 1 = bottom left
Connect the Brown = Pin 22 = 8 from the boat left
Now you can close the case and connect the power up, we need to write some software to read the sensor, you know, check that it actually works.

Step 4: Install required libraries

To write the software, that can read the sensor, we’re going to need a couple of things.

First ensure the compiler is installed already with the common

sudo apt-get install git-core
Then install the WiringPi Module with the command

git clone git://git.drogon.net/wiringPi
Then type

cd wiringPi

git pull origin
Then compile and install

cd wiringPi

./build
Step 5: Read data from the sensor

I used this site as a guide for writing the software that will be able to read the Sensor. They advised we need to use a C program to ensure it always reads the sensor. Ive modified their original code to not loop, and format the readings better for later reading into Splunk. Splunk likes the format variable_name=value to easily identify it in the log

Open your your favourite linux text editor and make a file dat.c

Insert this code into it the dht.c file

<p>/*<br> * dht.c:
* read temperature and humidity from DHT11 or DHT22 sensor
*/

#include
#include
#include
#include

#define MAX_TIMINGS 85
#define DHT_PIN 3 /* GPIO-22 */

int data[5] = { 0, 0, 0, 0, 0 };

void read_dht_data()
{
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;

data[0] = data[1] = data[2] = data[3] = data[4] = 0;

/* pull pin down for 18 milliseconds */
pinMode( DHT_PIN, OUTPUT );
digitalWrite( DHT_PIN, LOW );
delay( 18 );

/* prepare to read the pin */
pinMode( DHT_PIN, INPUT );

/* detect change and read data */
for ( i = 0; i < MAX_TIMINGS; i++ )
{
counter = 0;
while ( digitalRead( DHT_PIN ) == laststate )
{
counter++;
delayMicroseconds( 1 );
if ( counter == 255 )
{
break;
}
}
laststate = digitalRead( DHT_PIN );

if ( counter == 255 )
break;

/* ignore first 3 transitions */
if ( (i >= 4) && (i % 2 == 0) )
{
/* shove each bit into the storage bytes */
data[j / 8] <<= 1;
if ( counter > 16 )
data[j / 8] |= 1;
j++;
}
}

/*
* check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
* print it out if data is good
*/
if ( (j >= 40) &&
(data[4] == ( (data[0] + data[1] + data[2] + data[3]) & 0xFF) ) )
{
float h = (float)((data[0] << 8) + data[1]) / 10;
if ( h > 100 )
{
h = data[0]; // for DHT11
}
float c = (float)(((data[2] & 0x7F) << 8) + data[3]) / 10;
if ( c > 125 )
{
c = data[2]; // for DHT11
}
if ( data[2] & 0x80 )
{
c = -c;
}
float f = c * 1.8f + 32;
printf( “Humidity=%.1f Temperature=%.1f\n”, h, c );
}else {
printf( “Data not good, skip\n” );
}
}

int main( void )
{
if ( wiringPiSetup() == -1 )
exit( 1 );

read_dht_data();

return(0);
}</p>
Step 6: Compile your Reader software

Picture of Compile your Reader software
The code you put into the dot.c file now needs to be compiled

Type the command

cc -Wall dht.c -o dht -lwiringPi
You can then run the program with the command

sudo ./dat
You should see some output, this will only work if sensor is connected correctly, and code is working. It will show

Humidity=66.9 Temperature=18.3
Obviously exchange the reading for your local temperature – I’ve removed the Fahrenheit reading, since we don’t use that down under.

Step 7: Write the data to a log file

When we get to using Splunk, it reads log files. So the data we are collecting from the sensors we are going to write to a log file, to then tell Splunk to monitor for changes.

First we are going to create a directory in the pi home folder, called logs, to store the files in

mkdir /home/pi/logs
Now, still in the home directory create a bash script file

touch /home/pi/temperature_script.sh
Edit the file with your favourite text editor, vim or something, and insert this code

#! /bin/bash

log=”/home/pi/logs/”

#run the client

“/home/pi/dht” > temperature.txt

OUTPUT=`cat temperature.txt`

# Write values to the screen

TEMPERATURE=`echo “$OUTPUT”`

# Output data to a log file

echo “$(date +”%Y-%m-%d %T” ): “”$TEMPERATURE” >>”$log”temperature.log
Step 8: Schedule your scripts

Picture of Schedule your scripts
We are going to use Cron on the Raspberry Pi to run the job. It gives us the flexibility of when to run each of our scripts

The temperature sensor required sudo (root) access to run, so we have to sudo the crontab, type the command

sudo crontab -e
Add the line to the file

*/5 * * * * /home/pi/temperature_script.sh
This will run the temperature program every five minutes. You can check you log file is being written to with the command

cat /home/pi/logs/temperature.log
Your log should start looking like the one attached.

Step 9: Set up the Webcam

Now we are going to set up the webcam. We enabled it earlier but now we’re going to install some software to actually use it (crazy right!).

The software is called motion, and it can run a web server, for viewing, detect motion, and record frames, and pictures. In this setup, I turn that off, I don’t have a lot of space for video files, so I just run the live feed for monitoring, and use the log for tracking sleep movements.

The default install of motion doesn’t have support for the Pi Camera. So we are using a special build made to work with it. The full guide is here. Ill give the short version.

Type the command

sudo apt-get install motion
Now download the special build

wget href=”https://www.dropbox.com/s/0gzxtkxhvwgfocs/motion-mmal.tar.gz
Now unzip

tar zxvf motion-mmal.tar.gz
Open the config file motion-mmalcam.conf with your favourite text editor, and update a few of the settings, daemon on so it runs in the background, increase video height and video for quality, set the log file to our other location, and increase log level for events.

daemon on

width=1280

height=720

logfile /home/pi/logs/motion.log

log_level 7
Turn off stream local host, it mean’s you can connect to it remotely.

stream_localhost off
Text_Left is the text that comes up on the feed

text_left Baby’s Room %t
There is a setting for username and password, set that up if you ahem this internet facing. Otherwise leave it as is.

Save the file, and start motion with the command

sudo ./motion -c motion-mmalcam.conf
Step 10: Connect to the web stream

Picture of Connect to the web stream
motion_detections.png
You should now be able to connect to the web stream from the camera

Point your web browser, preferably Chrome or Firefox at

http://Your.ip.Address:8081

And you should get a live feed. You can also check the motion log and see if events are getting recorded.

cat /home/pi/logs/motion.log
These motion events are what we are going to count to detect sleep movements.

If you want to turn the red LED off, make the camera more discreet, edit the boot config

sudo vim /boot/config.txt
Add these lines, and after reboot it won’t came on.

# Turn off camera Red LED
disable_camera_led=1
Step 11: Install Splunk and the Universal forwarder

Picture of Install Splunk and the Universal forwarder
I’m not going to get into much details on the Splunk server. You can install on whatever OS you want. I’ve done it on Mac OSX and Linux, and both worked fine. So just follow the Splunk guide.

Once you have Splunk installed, ensure its got at least one receiving connection. The default port is 9997. Once this is done, and assuming no firewalls will block it, you can configure a Universal Forwarder to send data in.

Go to Splunk and get the universal forwarder for Linux. You need to get the version for ARM

Follow the instructions at Splunk.

Run the Splunk installer when you have the file

tar xvzf splunkforwarder-<…>-Linux-arm.tgz -C /opt
Configure the forwarder to point to your Splunk server.

Edit the file at

sudo vim opt/splunkforwarder/etc/system/local/outputs.conf
My server is 192.168.0.10

[tcpout:default-autolb-group]
server = 192.168.0.10:9997
Save and close, you can now start splunk forwarder

/splunkforwarder/bin/splunk start
No add a motor to our log file location

sudo /opt/splunkforwarder/bin/splunk add monitor /home/pi/logs
Our Splunk forwarder should now start collecting logs in that directory. You can check the Splunk forwarder log if its not going though to check for issues

sudo cat /opt/splunkforwarder/var/log/splunk/splunkd.log
Step 12: Create a dashboard

Picture of Create a dashboard
Now log into your Splunk server and confirm if data is coming in.

Perform a search for events

index=main source=”/home/pi/logs/temperature.log”
If you switch to Verbose mode in Splunk, it should identify the Temperature and Humidity variables. You can now graph them using a Splunk search, like;

index=main source=”/home/pi/logs/temperature.log”| timechart max(Temperature)
You can create a dial for Temperature, run the below search and save to a new Dashboard, give it a name “Baby Monitor”

index=main Temperature source=”/home/pi/logs/temperature.log” | stats first(Temperature)
And again for Humidity, select visualisation, Radial gauge. Save as a Dashboard panel, to the existing Panel, “Baby Monitor”

index=main Humidity source=”/home/pi/logs/temperature.log” | stats first(Humidity)
Step 13: Add more to the Dashboard

Picture of Add more to the Dashboard
Dahboard.png
If the motion log is successfully being logged we should have events for it in Splunk now. If we search for events detected, we should get results back

index=main detected
If we have results we can graph them. We are going to graph the volume of events. This will show us how much movement was detected over time.

The query looks like this

index=main detected | timechart count span=5min
By combining these searches and adding to a dashboard we can build up a lot of useful metrics on inside and outside temperatures, and baby movements.

The query for inside and outside temperature together looks like this:

index=main source=”/home/pi/logs/outside_weather.log” OR source=”/home/pi/logs/temperature.log” | timechart max(Temperature) AS “Baby’s Room” max(Outside_Weather) AS “Outside” span=30min
Step 14: Connect with the App and Mounting

Picture of Connect with the App and Mounting
IMG_0431 (1).png
IMG_0432 (1).png
Splunk App
Splunk make an App for IOS, its free to install, and yo can enter in the password and web address and search your dashboards on your Tablet.

If you want to connect remotely, you can use a port forward on your home router to open up the address. It required ports 8000 and 8089 for Splunk, to the SPlunk server, and 8081 for the webcam, straight to the Raspberry Pi as that’s where its hosted.

Mounting
I mounted using sticky tape over the back of the crib, the Pi is pretty light. Whilst this is OK for now, as soon as your baby is able to sit up, this becomes very dangerous, you need to then mount it out of reach!

They will tear it off and try and eat it!

Step 15: Bonus Script – outside weather

Picture of Bonus Script – outside weather
I used a script to get the Weather from the Australian weather site. Its downloads a file from the Bureau of Meteorology and outputs the location closest to me, and writes that to a log file for Splunk to ingest.

#! /bin/bash<br>log=”/home/pi/logs/”

#run the client<br>rm IDW60XXX.94610.axf

wget href=”http://www.bom.gov.au/fwo/IDW60901/IDW60XXX.94610.axf&#8221;

OUTPUT=`cat IDW60XXX.94610.axf | grep -m 1 0,94610,`

TEMPERATURE=`echo “$OUTPUT”`

echo “$(date +”%Y-%m-%d %T”) , “”$TEMPERATURE” >>”$log”outside_weather.log
Add that to a cron job

*/30 * * * * /home/pi/outside_weather.sh
Then you can start adding more data, cross referencing and building bigger dashboards, the possibilities are endless!


Landsat and Sentinel-2 data now on Google Cloud

$
0
0

Landsat and Sentinel-2 data now on Google Cloud

Google has just announced the release of Landsat and Sentinel-2 data on the Google Cloud. Landsat and Sentinel-2 data are public datasets of satellite imagery from earth observation satellites. The Landsat data is from a joint program between US Geological Society (USGS) and NASA and the Sentinel-2 data is from the European Space Agency’s Copernicus program.

Google has long had the datasets in Google Earth Engine but accessing it required a Google Earth Engine account which had certain restrictions on usage. The Google cloud version appears to be without restrictions. The data itself is public data and you can do almost anything you like with it although proper attribution may be required.

More about the individual datasets and how to access them can be found here: General instructions, Landsat, Sentinel-2.

The imagery is provided as unprocessed tiles for each of the optical bands that each satellite provides. To see the images in colour requires processing. The easiest way to do this is withcommercial tools from GeoSage. Alternatively, see this post for instructions on how to process Sentinel-2 imagery using GIMP. Landsat data can be processed in a similar way although it an some extra steps are required to get the best resolution.

The resolution of Sentinel-2 imagery is 10 m per pixel and Landsat-8 is 15 m per pixel after pan-sharpening. Do not expect to see the kind of detail we are used to in Google Earth.

Sadly, Google has not provided thumbnails with the data.

Amazon provided Landsat data via its cloud infrastructure Amazon Web Services (AWS) in 2015 and more recently added Sentinel-2 data. We did a series of posts featuring KML tools to allow you to preview the latest images and make animations from provided thumbnails. The Landsat data on AWS is somewhat limited compared to the Google Cloud offering. Google is providing all Landsat images from Landsats 4,5,6,7 and 8 from 1982 to present. AWS only has Landsat 8 data and even that is only complete data for 2015 with select images from 2013 and 2014.

The image below is a Sentinel-2 image downloaded from the Google Cloud and processed with GIMP. It shows a small part of the Soberanes Fire, California, on September 12th, 2016. To see it in Google Earth (and covering a larger area) download this KML file


Copernicus Sentinel data, 2016.


Indoor Air Quality Sensor

$
0
0

‘Indoor Air Quality Sensor’ Designed by CRT Labs & #Realtors, Using Open-Source Software & Hardware @CRTLabs @nardotrealtor

And as if this already wasn’t cool enough, future versions will have LoRa capabilities!

sensor_board_v0-5

v0-3_prototype

Measurement Points:
Temperature (SHT31)
Relative Humidity (SHT31)
VOC (Volatile Organic Compounds) (IAQ Core)
Derived CO2 (IAQ Core)
Barometric Pressure (MPL3115A2)
Light Intensity (TSL2561)
CO Concentration (MiCS-4154)
NO2 Concentration (MiCS-4154)
Sound Intensity (ADMP401)
Connectivity:

FSK (RFM69HW 433/915MHz)
WiFi (Particle Photon)
Cellular (Particle Electron) (Coming soon)
LoRa (Coming Soon)
License: Apache License Version 2.0



Weather forecasting using deep learning techniques

$
0
0

Abstract:

Weather forecasting has gained attention many researchers from various research communities due to its effect to the global human life. The emerging deep learning techniques in the last decade coupled with the wide availability of massive weather observation data and the advent of information and computer technology have motivated many researches to explore hidden hierarchical pattern in the large volume of weather dataset for weather forecasting. This study investigates deep learning techniques for weather forecasting. In particular, this study will compare prediction performance of Recurrence Neural Network (RNN), Conditional Restricted Boltzmann Machine (CRBM), and Convolutional Network (CN) models. Those models are tested using weather dataset provided by BMKG (Indonesian Agency for Meteorology, Climatology, and Geophysics) which are collected from a number of weather stations in Aceh area from 1973 to 2009 and El-Nino Southern Oscilation (ENSO) data set provided by International Institution such as National Weather Service Center for Environmental Prediction Climate (NOAA). Forecasting accuracy of each model is evaluated using Frobenius norm. The result of this study expected to contribute to weather forecasting for wide application domains including flight navigation to agriculture and tourism.
Date of Conference: 10-11 Oct. 2015
Date Added to IEEE Xplore: 25 February 2016
ISBN Information:
INSPEC Accession Number: 15804407
Publisher: IEEE

Advances in Computational Intelligence

Volume 9094 of the series Lecture Notes in Computer Science pp 430-443

Date: 06 June 2015

Deep Neural Networks for Wind Energy Prediction

  • Abstract

In this work we will apply some of the Deep Learning models that are currently obtaining state of the art results in several machine learning problems to the prediction of wind energy production. In particular, we will consider both deep, fully connected multilayer perceptrons with appropriate weight initialization, and also convolutional neural networks that can take advantage of the spatial and feature structure of the numerical weather prediction patterns. We will also explore the effects of regularization techniques such as dropout or weight decay and consider how to select the final predictive deep models after analyzing their training evolution.

Early Prediction of Extreme Rainfall Events: A Deep Learning Approach

Chapter · January 2016with7 Reads
DOI: 10.1007/978-3-319-41561-1_12
In book: Advances in Data Mining. Applications and Theoretical Aspects, pp.154-167
Abstract
Prediction of heavy rainfall is an extremely important problem in the field of meteorology as it has a great impact on the life and economy of people. Every year many people in different parts of the world suffer from the severe consequences of heavy rainfall like flood, spread of diseases, etc. We have proposed a model based on deep neural network to predict extreme rainfall from the previous climatic parameters. Our model comprising of a stacked auto-encoder has been tested for Mumbai and Kolkata, India, and found to be capable of predicting heavy rainfall events over both these regions. The model is able to predict extreme rainfall events 6 to 48 h before their occurrence. However it also predicts several false positives. We compare our results with other methods and find our method doing much better than the other methods used in literature. Predicting heavy rainfall 1 to 2 days earlier is a difficult task and such an early prediction can help in avoiding a lot of damages. This is where we find that our model can give a promising solution. Compared to the conventional methods used, our method reduces the number of false alarms; on further analysis of our results we find that in many cases false alarm has been raised when there has been rainfall in the surrounding regions. Thus our model generates warning for heavy rain in surrounding regions as well.

How’s the weather? Using artificial intelligence for better answers

$
0
0

How’s the weather? Using artificial intelligence for better answers

Here are two things we know about the weather: We have tons of data about it, and we care very deeply about it.

It’s those two factors that led Microsoft researchers Ashish Kapoor and Eric Horvitz to turn to the latest advances in artificial intelligence to try to find a better answer to that age-old question: What’s the weather forecast?

They found that their approach, drawing upon methods developed within a subfield of artificial intelligence called machine learning, was more accurate at predicting weather patterns in the coming 24 hours than a traditional forecasting model.

That’s giving them hope that this method could eventually be used to help solve some of the more difficult weather puzzles, such as understanding how climate change is affecting weather patterns or making more accurate long-term weather predictions.

“That’s where I think we could actually leverage the power of machine learning methods,” said Kapoor, a senior researcher at Microsoft.

Of course, climatologists and meteorologists have long been tracking weather data and using that data to make forecasts.

Unlike more typical weather forecasting approaches, which have traditionally relied on physical simulations, Kapoor said their research took a data-centric approach: They just looked at the data and didn’t try to make restrictive assumptions about how nature tends to act.

This kind of approach is possible because of recent advances in machine learning, which lets people take very large data sets and analyze them using large-scale computing systems. Machine learning centers on the development and use of algorithms that can learn to make predictions based on past data.

The researchers used historical data for several weather variables — atmospheric pressure, temperature, dew point and winds — to train their systems to make predictions about future weather patterns based on past data.

To make their predictions, they applied a mix of physical models and a combination of machine learning methods, including deep neural networks. That’s the same technique that has recently been used to vastly improve the accuracy of things like image classification, speech recognition and translation.

Eric Horvitz

The work builds on Kapoor and Horvitz’s previous research on making more accurate wind forecasts by using thousands of airplanes as wind sensors. That work is behind a live wind prediction service called Windflow, which can be used by pilots to optimize flight times.

The weather forecasting effort also is closely related to another project that Kapoor is working on, helping Red Bull Air Race pilot Kirby Chambliss improve his air race times.

Aditya Grover, an intern who worked on the weather prediction project with Horvitz and Kapoor, will present the team’s findings at the ACM SIGKDD Conference on Knowledge Discovery and Data Mining, an industry conference that begins Monday in Sydney, Australia.

Grover was an undergraduate when he came to Microsoft Research, and was so inspired by the weather forecasting work that he decided to pursue a career in artificial intelligence. He’s starting graduate school at Stanford University in the fall.

“To be honest, this was the driving factor that pushed me towards applying to graduate school,” Grover said.

Microsoft researchers and their colleagues from other universities and research institutions will present a number of other papers at KDD2015. They include:

  • Performance Modeling and Scalability Optimization of Distributed Deep Learning Systems
  • Regularity and Conformity: Location Prediction Using Heterogeneous Mobility Data
  • Intelligible Models for HealthCare: Predicting Pneumonia Risk and Hospital 30-day Readmission

Related:

A Deep Hybrid Model for Weather Forecasting

Follow Eric Horvitz on Twitter

The next evolution of machine learning: Machine teaching

Allison Linn is a senior writer at Microsoft Research. Follow her on Twitter.

Read more at http://blogs.microsoft.com/next/2015/08/10/hows-the-weather-using-artificial-intelligence-for-better-answers/#pcTs2gRqfJjzDEdq.99


OWN YOUR OWN CLOUD WITH C.H.I.P.!

$
0
0

OWN YOUR OWN CLOUD WITH C.H.I.P.!

Not a cloud in the sky, except owncloud on C.H.I.P.

Take back ownership of the cloud with ownCloud, a USB thumb drive, and C.H.I.P. on your home network. It’s easy to setup on C.H.I.P. with ownCloud and you’ll be able to share files, photos, address books, and even calendars all from hardware that’s yours.

Chris Watterston’s sticker popularized a common jab at all the cloud computing hype: “There is no cloud, it’s just somebody else’s computer.” Maybe. But with ownCloud and C.H.I.P. the cloud is yours!

1. FLASH C.H.I.P.

Use the online flashing tool to update your C.H.I.P. with the 4.4. Headless image. The flasher has built-in instructions, requires only a USB micro cable and paperclip, and takes only a few minutes.

Note: Flashing overwrites all the data on C.H.I.P., so backup any personal files you want to keep. For an easy backup, use a USB thumb drive or try your hand at SCP.


2. ADD A MONITOR & KEYBOARD

Connect a keyboard and monitor to C.H.I.P. for easy access to the command-line. Once you have everything setup on C.H.I.P., you can unplug the keyboard and monitor and deploy your cloud anywhere you can give it power.

Note: Alternatively, you could use a USB-to-Serial cable to connect to C.H.I.P. and forgo the monitor and keyboard. Consult the C.H.I.P. docs for more on this option.


3. SETUP WIFI

From the command-line, use the nmcli utility to setup a network connection. In the command below, replace SSID_NAME and WIFI_PASSWORD with your home network information.
sudo nmcli device wifi connect 'SSID_NAME' password 'WIFI_PASSWORD' ifname wlan0

Note: Do not add a line break between ‘WIFI_PASSWORD’ and ifname.


4. INSTALL SSH

Use apt to update the Debian package information on your system and install SSH.
sudo apt update && sudo apt install ssh

Determine C.H.I.P.’s IP address so you can remotely connect to it.
ip addr show wlan0

On your laptop, use SSH and connect to C.H.I.P.. Linux and macOS have SSH clients built-in and accessible from the terminal. Windows users need to install an SSH client such asPutty.


5. SETUP LOCALES

localesLocales on C.H.I.P. define the region and language the software should use. For most packages, it doesn’t matter too much if locales are fully setup, but OwnCloud and many of its required packages require a properly configured system.

Type the command below and follow the on-screen steps.
sudo apt install locales && sudo dpkg-reconfigure locales && sudo locale-gen

Use the arrow keys and tab to move around, and spacebar to mark your desired selection. Many locations have multiple entries. Select your desired region with UTF8.

Note: In BASH, && is a way to connect two (or more) commands together. The second command will run only if the first command runs successfully.


6. SETUP AVAHI

Avahi enables you to connect to C.H.I.P. using the machine’s hostname, not just it’s IP address. It’s preinstalled on the 4.4 Headless image, so you just need to tweak a few configs. Create the file /etc/avahi/services/afpd.service using the text editor Nano.
sudo nano /etc/avahi/services/afpd.service

Note: For help with Nano, check out this great guide.
Populate the file with the following text, save it, and quit.

Open /etc/hostname with Nano and change chip to whatever new hostname you want to use.
sudo nano /etc/hostname

Open /etc/hosts and swap out chip with the same hostname you used in the /etc/hostnamefile.
sudo nano /etc/hosts

Restart the Avahi daemon so your new hostname takes effect.
sudo /etc/init.d/avahi-daemon restart


7. INSTALL OWNCLOUD

Use apt to install ownCloud and the MySQL database server.
sudo apt install owncloud mysql-server

When prompted to create a password for the MySQL root user, pick a password that’s different than your Debian root password –it’s never wise to reuse passwords.


8. CONFIGURE MYSQL TO WORK WITH OWNCLOUD

Now that your C.H.I.P. has a running MySQL database server, you’ll need to create a database for ownCloud to use and set permissions for accessing the data. You’ll only need to deal with the MySQL command line once.

Access the MySQL command line as the MySQL root user and use the -p argument to force login with a password. Remember, the MySQL root password should be different than the Debian root password.
mysql -u root -p

A MySQL server can host multiple databases on the same system. Create a new database called owncloud specifically for use with ownCloud.
CREATE DATABASE owncloud;

Note: It’s a common practice to capitalize SQL keywords and, for me, it makes the commands easier to read.

Create a MySQL user named owncloud that has permission to access the databaseowncloud to write and request data. Replace YOUR_DB_PASSWORD with a custom password for the owncloud user.
CREATE USER owncloud@localhost IDENTIFIED BY 'YOUR_DB_PASSWORD';

Set the level of permission the owncloud user should have in the database.
GRANT ALL PRIVILEGES ON owncloud.* TO owncloud@localhost;

Reload the part of the database that keeps track of permissions so that all the changes you just made take effect.
flush privileges;

Quit the MySQL command line.
quit


9. CONFIGURE A USB THUMB DRIVE FOR OWNCLOUD

Create a directory where all of your ownCloud data should live. You can specify a directory on C.H.I.P.’s built-in storage or you can specify USB thumb drive.
sudo mkdir /media/owncloud

Determine the UUID of the USB drive and write it down.
sudo blkid

Open /etc/fstab and type in the text below. Replace YOUR_UUID_HERE with the output from the command above.
sudo nano /etc/fstab

UUID=YOUR_UUID_HERE /media/owncloud vfat auto,users,uid=33,gid=33,dmask=027,fmask=137,utf8 0 0

NOTE: The text above should be entered on one line.


10. BROWSE TO YOUR CLOUD

1stloginOn your laptop open a web browser and surf over to your C.H.I.P. atHOSTNAME.local/owncloud. Replace HOSTNAME with what you called your C.H.I.P. in Step 3. Then simply fill out all the input fields and your setup is done.

  • Username: pick whatever you want
  • Password: pick whatever you want
  • Data folder: /media/owncloud/
  • Username: owncloud
  • Password: YOUR_DB_PASSWORD from Step 4
  • Database: owncloud
  • Host: localhost

11. FILE BROWSE

Own your own cloud with C.H.I.P. and ownCloud

Now that your cloud is running on C.H.I.P., you’ll be able to access it while connected to the same home network. Easily transfer files from your phone to your laptop using ownCloud’s browser-based graphical interface.


BONUS STEP: INSTALL AN OWNCLOUD CLIENT ON POCKETC.H.I.P.

clientowncloudTo make ownCloud really useful you’ll want to setup a few of your devices with the dedicated client application. Installation is really straightforward, just follow the install instructions on the ownCloud site. All of the clients except the iOS and Android apps are completely free, but don’t worry, you can use the Linux client on PocketC.H.I.P. free of charge. ᕕ( ՞ ᗜ ՞ )ᕗ


Set React Native for Android in Windows

$
0
0
  1. Set up the proxy for npm.
    npm config set proxy http://xxxxxx:xxxx  
    npm config set https-proxy http://xxxxxx:xxxx  
  2. Set up the proxy for gradle. In ~/.gradle/gradle.perperties, add
    systemProp.http.proxyHost=xxxxxx
    systemProp.http.proxyPort=xxxx
    systemProp.https.proxyHost=xxxxxx
    systemProp.https.proxyPort=xxxx
  3. Add local.properties to android subfolder and append the following content.
    sdk.dir=C\:\\Users\\xxxxx\\AppData\\Local\\Android\\sdk
  4. Since BuildTools 23.0.3 is installed, but the app needs 23.0.1. Go to build.gradle under android/app and change the version number to 23.0.3. But do not change the appcompat-v7 version number.

回首近代民国的宪政之路

$
0
0
回首近代民国的宪政之路
沙梨熊维尼 2016-10-19 17:20:22 举报
阅读数:5539

    先说维尼为何要发这个扫盲贴,因为刚才恰好看到半圆和果粉争论宪政问题,虽说小熊喜欢围观吵架,但是观摩两个文盲掐架,实际上是很郁闷DI。一个是太监嘲笑别人有性生活,另一个则一望可知是陆生,因为据维尼所知,真有民国派司的,没一个愿意出钱出力反攻复国,倒是对登陆经商享受超国民待遇很有兴趣,自由人都是自私的嘛。

  言归正传,宪政是什么,公知们和祥林嫂似的,从理论上重复过无数遍,天赋民权云云。小熊从不讲理论,只讲技术。所谓宪政本身就是一个技术性的流程。无非以下几步。

  首先是合理性,伐无道,诛暴秦之类,学名叫做自由革命。然后是过渡期,临时政府等等,任上要完成一件事,开放式选举。民意代表选出,下一步,正式制宪会议召开。原则性的议题,例如民权保障这些,通过不会有任何问题。难点在于此后的三道连续单选题。

  A,国体,也就是国家元首来源和产生方式,按君主或是共和划分,六选一

  君主里三个选项,甲,世袭制(英式,一家人坐到底),乙,选王制(马来式,几户有同等资格的,定期轮选),丙,虚位制(无皇室君主立宪,弄件国宝供起来,当君主替代品,当年匈牙利用的是千年王冠,第三帝国是皇室御宝和圣枪,清末民初,曾经考虑过儒教君宪,也就是把孔老二牌位当虚拟君主)

  共和里也是三个选项,甲,直选制(总统,执政,主席之类直接民选),乙,推选制(由议会或是选举人团推选),丙,轮值制(瑞士,议会直接推出各部会委员,集体负责,委员会主席是虚职,简单说,部长是正职,总统是兼职,那天轮到你主持会议,赶上外交礼仪活动,那你多打一份工而已)

  B,政体,行政架构

  总理(首相)及其内阁,对谁负责?甲,对立法机构(议会)负责,乙,对国家元首(君主或总统)负责,丙,一仆二主,同时对议会和元首负责。同理可推地方行政架构,县市政厅对县市长还是县市议会负责

  C,政体,地方与中央关系,实际就是地税朝贡问题

  甲,单一制,乙,联邦制,丙,邦联制,

  综上,各派系议员团能在ABC上谈拢,过了这三关,之后水到渠成完成新政府构建,开香槟庆祝,宪政目标达成,正式开始民主旅程。可要是在ABC上谈不拢,吃二茬苦,遭二回罪,那是家常便饭。

  维尼正文到这里结束,以下无非举例子,讲故事,愿意听,不愿意听可以睡了

  近代,从宪政法理上说,有第一民国,第二民国

  第一民国,正式起止时间,1913年4月8日~1926年8月。在此之前,也就是辛亥双十开始,包括炮哥,大头,临时政府等等都是合理性过渡,然后根据临时约法,搞了一次全亚洲规模最大的开放式自由民选,四千万选民选出八百余名制宪议员,他们是合法性的代表,也就是法统所在。国会在1913年4月8日召开,第一民国开始。期间经历三起三落。

  大头开始正式总统任期有国会多数(前宋系国民党和梁系进步党)背书,是合法的。炮哥反叛就是叛国,自是不合法。大头何时开始非法,围绕ABC三个选择题,双方答辩,

  大头三问,A,基于历史,传统等原因,以及国民素质低下现实,只能靠总统独力扛起所有行政重担,B,合议制效率差,只有总统独断才提高行政效率,C,外国例子,美国总统制成功,法国议会制失败。

  国会三答,A,正是传统余毒,国民愚昧,才需要开民智,最怕一人独断带来新暴君,B,合议制效率低是优点,防止盲目躁进的恶政恶法,与民休息才是王道,C,美国成功是建立在联邦自治,国民素质高基础上的特例,同类墨西哥拉美学美国都失败,法国议会失败原因是被萝卜丝和拿破仑野心家破坏,基础没打好,而英国瑞士北欧议会都成功,才是普世价值。

  三问三答之后,国会一方乘势追击,美式总统制源泉在于孟德斯鸠,老孟本就是一学理不通,五谷不分的FQ云云,老孟也可怜,躺着都中枪。大头更可怜,秀才都没考上的人,和国会精英去答辩。国会辩论完胜,推出天坛宪草,要议会内阁制。大头不甘心,和叶利钦一样,只好强力解散国会,自弃法统,从自由功臣,变成民主罪人。大头成为僭主,国会转入地下。

  僭主大头决定ABC三题自问自答,结果第三题烤糊了。想搞单一制。两个方案,废省置道(全国划为93道)或是并省设区(8大军区),汉的推恩令,清的总督制,原理上都没错,操作上出错,大头先用杨度的柔性设道,后又急转用陈宦的强硬并省,两个方案前后撞车,导致地方反弹,一连串事件,大头连病带急,就此谢幕。

  大头一去,国会复开。还是老问题ABC。这次表面上看是府院之争,实际上却是国会内部问题。多数派(宋系和炮系重合后的国民党,以及从进步党分裂出来的直系议员),少数派(梁系挺皖议员)。闹到最后,段被国会多数派弹劾下野,虽然不甘,又能如何(黎段在大头时代,一被软禁瀛台,一被困于西山,此时都没有实力)。偏偏梁启超为了一己私利,出主意,让张勋驱黎,张必复辟,段再讨张,这样就有了名分,至于军力,可以花钱雇佣,从日本正金银行贷款。之后一系列发展,张复辟,黎出奔,国会再度转入地下。段复出装B,不再请黎复位,不再重开国会,而是让梁启超一手包办伪选举,伪总统等等,北方就此进入皖系僭主时代。

  地下国会,地下总统怎么办,授权南方护法,结果西南雄藩搞了N久,北伐也没什么进展,反而炮哥拿了笔金马克,同样组织非法选举,当选非法总统,于是徐世昌和炮哥成为南北双僭主格局。

  老天给机会,吴解决了皖系,陈解决了炮党,双僭主下野,黎元洪复位,国会复会,法统重光。虽然曹锟继任,有贿选花絮,但法理上没任何问题(实际也不像炮党教科书说的那样,真相是曹锟有当选的把握,但担心开会的人数不够,开会法定要有议员总数四分之三出席,投票要有这些出席者中的三分之二票数。曹有450左右票数,但不敢保证有600人左右实际到会投票,于是他出高价请议员到会,哪怕你投反对票,只要来就好,炮党和奉系,皖系这时是一伙,都拿日元,出八千一票,让议员不去开会,不到法定出席人数就会议流局。比起来,曹三爷花自己的钱请人来投反对票,比那些拿日元的破坏议事程序的家伙,可爱多了)。

  关键还是制宪,这是国会第三次常会,经过十年磨砺。得出一个经验,在这片神奇的大陆上,纯英式议会制走不通,因为最强实力派稳占总统府大位,直接介入行政,而不愿意进入议会成为最大党之后,再出面组阁。这时需要智慧。张君励,留德出身,宪法专家,推出国是宪草。核心是总理内阁同时对总统和国会双负责制。各方满意,民国宪法终于达成(有人说,十年前要有这个方案,大头也不至于走上最后自弃法统的绝路。凡事不能马后炮,这套方案,是从魏玛舶来的,魏玛德国开始也是英式议会和军人总统顶杠不和谐,宪政危机重重,这才协调出个总理内阁一仆二主制,德国是世界原创,民国是世界第二,大头那会还没人想到这层呢)。

  本来民主就此上路,天不从人愿,之后三年,日元党,卢布党交相辉映,吴大帅败走武汉,国会也迁到武汉,护宪一方最终还是挡不住卢布党的攻势,1926年八月中旬,城破在即,吴给议员每人100元路费,国会正式解散,近世公认最好的23年版中华民国宪法灰飞烟灭(直到几十年后,成为另一部宪章的母本)。历史进入下一个轮回。

  第二民国,起止时间 1946年11月17日~1991年12月31日

  26年8月,首届合法民选国会风流云散,国家就此进入法理空位期,之后十年,各派都说自己有理,无非自说自话而已,直到1936年,南京国民政府开始组选,预备正式宪政建国,开放式的选举是合理性所在,于是在法理上进入过渡期。除了六区(英控卫藏,日控满洲,台湾,苏控新疆,蒙古,陕北),两党(左翼卢布党和右翼青年党)之外,其余全国各区域(3亿5千万国民)代表和各职业(党派)代表,基本选出,预备37年正式召开制宪国大,结果卢沟桥枪响,只能暂缓。此后又是十年,有一个政治协调常设机构,国民参政会,算是临时法统象征。抗战结束,各派政协召开,决定国家前途。卢布党提出联合政府案,国民党不肯(觉得吃亏),其余党派不干(认为这相当于你们两家私相授受,违背宪政原则),最后得出共识,还是选举,制宪,建国三步走。

  46年初,外有美苏肯定,内有各派系不断协调,推出政协宪草,背后推手主要是国民党内的政学系,卢布党内的华山派,张群与岳不群联手操盘,台前则是中间各势力呼应。原则性的方向,实际还是23年宪法,起草人也还是张君励,这次玩的是精巧(主要是为了绕开炮哥五权宪法的框架)

  炮哥五权宪法,本质上是有中国特色的超级美式总统制。国民大会相当于制宪大会兼选举人团,由国大代表选出总统,然后三权(立法司法行政)附属于总统,炮哥知道自己理亏,为了防止他日立法院脱离总统,所以把弹劾权分离出来交给监察院,以作预防。炮哥还怕出现强势总理,于是再把人事权从行政院剥离,特设考试院,作为后手。

  炮哥五五宪草,完全违背宪政原则,如何既能绕过去,还给炮哥留面子?老张出来阐述炮哥遗教。国民大会(选举人团)选总统,监察院就是参院,立法院就是众院,参众两院皆直选,不由总统遴选。行政院同时对总统和立法院负责,司法院独立,考试院独立。如此一来炮哥学说一字未改,可意思完全不同了。当然有基本教义派质疑的声音,老张有绝活,找了科仔来背书,科仔说我老豆当年就是这个意思。科仔为什么肯背书(因为老豆计划再好,自己现实也没接到班,可按老张们的意思走,大家说好未来推他做行政院长)。

  其余部分,国会一开,议会多党,各中间民主派都满意,地方搞省宪,也就是联邦制,军队国家化(满洲,国5军,赤1军,华北,国3军,再各出4军组成4个混编集团军,各取两个集团军司令,华中,赤1军,国9军,西北,国5军,华南,国4军),等于华山派军中四大天王,三虎,聂人王,夏侯兄弟捞到四个梅花上将,岳不群内定行政院副院长。裁掉的全是教主人马,华山派实力保存,而且顺利进入体制内,法共路线达成,党机器迁到淮阴,不群的地盘,任我行出任国民政府委员,每月靠1600元干薪,养活圣姑母女和蛋炒饭们,彻底被架空,这样的方案,岳不群开心死了。至于国民党内,行政院,立法两院实转,一党制路线废除,政务官系统,政学系地位极大突出,老对手党团系统的CC泡沫化,张群乐得睡不着觉。对总统其实没影响,无论如何他都是共主,而且对尼古拉也有好处,尼古拉按这一架构,有政学系的扶持,由政务系统出道,对顺利接班有好处,不像空降党务系统出道,接班难度难度那么大。

  本来大伙都OK,除了CC和任教主。可他们也没办法反对。但到了4月,苏俄干爹变阵,从同意法共路线转向直接扶持契仔(具体原因参看文末大国舅三误小妹夫)。苏援一到,卢布党内岳不群计划流局,教主重获主动权,卢布党彻底退出和平民主进程,自弃合法化的机会。同年11月17日,国大如期召开,全国主流派以政协宪草为蓝本完成了46版中华民国宪法,之后就是行宪,因为战乱,第一民国国会历史重演,只有首届民选国大(迁台关系,没办法进行全国性的换届选举。万年国大是唯一法统所在)。直到91年末,李公宣布来年第二次国大选举,如此一来等于自弃法统,自我矮化成为地方性政治实体,第二民国实际结束。从92年开始,再次进入法理空位期。当然果粉要是想硬拗,除非你承认自己是国民党或是绿党精神党员和支持者,然后可以说两党不分区立委们,是你的精神党代表,从这个理论推导,你才能成为精神国民,这基本属于九段YY了。什么时候会有第三民国,无非就是上文概念,先是过渡委,然后全国性大选,制宪大会,各派系还是ABC三题,谈妥了,第三民国,谈不拢,再把历史重演一遍,人间事就是这么的悲催。

  最后送一段,大国舅三误小妹夫。

  一误,导致莫斯科老爹变阵,卢布党没有变成法共第二。46年初,莫斯科要什么。有一个参照系。在中东,要三样东西,A,德黑兰承认阿塞拜疆和库尔德斯坦自治,B,伊属黑海沿岸要驻扎红海军,C,经济互惠合作(北方五省采油权)。给这三样,苏军如期撤出伊朗,同时让伊朗人民党(伊共)走法共路线。在远东,同样,A,重庆承认蒙古国和东伊国独立,B,旅大军港租借,C,经济合作(中东路特殊经济区)。答应老爹,苏军撤走,让卢布党进入体制内。

  如何应对,闹上联合国,一反两瞪眼,还是戒急用忍,空间换时间。伊朗首相卡瓦姆老成谋国,一步到位全给他。一切好办,之后几年,招安后的伊共分化瓦解,美援也逐步到位,49年巴列维王朝篱笆已经稳固,反戈一击,重夺阿塞拜疆和库尔德斯坦,采油权收回,老爹竹篮打水一场空。

  民国不是没有谋主,政学系也是同样办法,张群说暂时的民族牺牲换最大内部问题的解决,尼古拉也是这个意思。可是实际负责谈判的是国舅系的留美官僚,他们认为可以在谈判中,援门户开放政策,引美国入局,制衡莫斯科,可以少付点代价,而且他们外交官就可以不背骂名。如此一来,和谈就陷入僵局,苏军迟迟不撤,这就要出事,于是一连串事件,1月16日事件,国方接受张辛夫代表去收回抚顺煤矿,被苏军指使卢布党吴亮平所部刺杀,2月1事件,苏军到期拒不撤出满洲,2月11事件,雅尔塔协议全文公布,舆论哗然,2月13赤都社论事件,任教主放话,战后满洲地位未定论,2月13事件,东北流亡学生沙坪坝大散步,声讨第二次918,2月16,全国反苏总散步,3月1,国民党六二全会,西山会议派,CC,力行社,老中青三代基本教义派全线反弹,围攻主和派,有办法拿出来,没办法说出来,有本事扛起来,没本事放下来。莫斯科观察,这是不打算给岁币了,于是变阵,任教主背靠干爹咸鱼翻身,三虎入四平,新京做首都,麻二哥筹划满洲人大对抗关内国大。一切的杯具,就是国舅不肯负外交责任,和平由此流局。

  二误,既然开打,战争初期有优势,可首战告捷之后,国舅又跳出来,说要以胜促和,有马歇尔调停,可以以目前胜利换谈判中更大优势,又信了他,结果,满洲没有追过松花江,两淮得手没有追进鲁南,张家口之后没有乘胜入多伦,整个冬季都在等谈判,国大数次延期,一直再等卢布党重回体制内。结果这段时间,人家稳住阵脚,苏援从北韩上千车皮重炮,连同朝鲜日本老兵入北满,旅大军需补给海运胶东,外蒙军火入晋察冀。等到来年春天,确定人家不来开会了,可此刻军事上的战略优势也消失殆尽了。

  三误,47年的黄金潮,外交军事被连误两次之后,还信他,让他去稳定法币币值。通胀问题是汪伪末期中储券崩溃造成。接手之后,延烧,到法币身上。问题本来不大正常黄金外汇与法币比价是1:700,当时市场实际是1:2000,小通胀而已。怎么办,政学系提议,公债案(也就是说与商人共市场,你们手头多余1300还政府,政府每年按2000本钱付利息给你,同时以汪伪敌产股份做信用担保)。国舅不干,他认为国库有钱,还有美国朋友。要和市场商人对赌,大规模抛售黄金和外汇,要把比价硬性拉抬到1:7000,认为到此时,商人手中法币告罄,他再把比价压回1:700,彻底解决通胀问题。谁知拉到万点高位,还没搞定,双方都快弹尽粮绝,此刻是散户定输赢。散户抛售,政府赢,散户追涨,商人赢。散户是抛是追,则是由市场消息决定。结果美国老朋友说原定5亿美金贷款延期。等于说不给政府注资。散户疯狂入市扫货,国库黄金外汇被市场榨干,黄金潮爆发,法币在12000点总崩盘。

  由此维尼相信蒋宋是真心相爱,而且委员长有颗大心脏。不然普通的妹夫有这样坑爹的大舅子,卵二姐,早就离婚了,实在受不鸟,小熊以史为鉴,将来要娶独生女,安全第一。。


Viewing all 764 articles
Browse latest View live