Wednesday, December 6, 2017

samrt contact test

开源工具和语言

一、brewMacOS包管理器

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

二、Solidity以太坊智能合约语言

brew install solidity
备注:安装时间可能有点长,请耐心等待… 备注:安装时间可能有点长,请耐心等待… 备注:安装时间可能有点长,请耐心等待…
如果碰见下面的错误,请移步:http://blog.csdn.net/Sico2Sico/article/details/71082130
The GitHub credentials in the macOS keychain may be invalid.
Clear them with:
  printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
Or create a personal access token:

https://github.com/settings/tokens/new?scopes=gist,public_repo&description=Homebrew

三、geth运行以太坊节点

liyuechun:Downloads yuechunli$ cd go-ethereum-1.5.9
liyuechun:go-ethereum-1.5.9 yuechunli$ pwd
/Users/liyuechun/Downloads/go-ethereum-1.5.9
liyuechun:go-ethereum-1.5.9 yuechunli$ make geth

建立私链

1. 创建一个文件夹来存储你的私链数据

liyuechun:1015 yuechunli$ mkdir privchain
liyuechun:1015 yuechunli$ pwd
/Users/liyuechun/Desktop/1015
liyuechun:1015 yuechunli$ ls
privchain
liyuechun:1015 yuechunli$ 

2. 使用geth来加载

geth --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --dev --datadir privchain
执行上面的命令,你应该能看到下面的信息:
INFO [10-1503:14:50] IPC endpoint opened: /Users/liyuechun/Desktop/1015/privchain/geth.ipc
INFO [10-1503:14:50] HTTP endpoint opened: http://127.0.0.1:8545
如果你切换到privchain文件夹里面,你会看到gethgeth.ipc, 和 keystore
liyuechun:1015 yuechunli$ cd privchain/
liyuechun:privchain yuechunli$ ls
geth  geth.ipc keystore
liyuechun:privchain yuechunli$ 
  • 保持节点的运行,不要关闭终端,重新打开一个终端,使用geth attach连接节点,并且打开geth console
liyuechun:privchain yuechunli$ geth attach ipc:/Users/liyuechun/Desktop/1015/privchain/geth.ipc 
Welcome to the Geth JavaScript console!

instance: Geth/v1.7.1-stable-05101641/darwin-amd64/go1.9.1
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 shh:1.0 txpool:1.0 web3:1.0

> 

3. 相关api命令

查看账户
> personal.listAccounts
[]
> 
创建账户
> personal.newAccount('liyuechun') 
"0xb6d7d842e7dc9016fa6900a183b2be26fc90b2d8"
> 
PS:里面的liyuechun是你账户的密码,输入你自己喜欢的密码。
查看账户
> personal.listAccounts 
["0xb6d7d842e7dc9016fa6900a183b2be26fc90b2d8"]
> 

4. web3命令

> web3.eth.coinbase 
"0xb6d7d842e7dc9016fa6900a183b2be26fc90b2d8"
> 

5. 编写智能合约代码

pragma solidity ^0.4.4;

contract test { 

    function multiply(uint a) returns(uint d){

        return a * 7;
    }

}

6. 获取智能合约字节码和abi

代码拷贝到https://remix.ethereum.org,编译,然后拷贝字节码。
6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029
{
  "contract_name": "test",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "a",
          "type": "uint256"
        }
      ],
      "name": "multiply",
      "outputs": [
        {
          "name": "d",
          "type": "uint256"
        }
      ],
      "payable": false,
      "type": "function"
    }
  ],
  "unlinked_binary": "0x60606040523415600e57600080fd5b5b60978061001d6000396000f300606060405263ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663c6888fa18114603c575b600080fd5b3415604657600080fd5b604f6004356061565b60405190815260200160405180910390f35b600781025b9190505600a165627a7a723058203da73c4161a1751d52899e2da724076a62a935cb5e7ed4b29f7f49560675ab8d0029",
  "networks": {},
  "schema_version": "0.0.5",
  "updated_at": 1508016118593
}

7. 在bejson中转义成字符串

{\"contract_name\":\"test\",\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"name\":\"d\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"}],\"unlinked_binary\":\"0x60606040523415600e57600080fd5b5b60978061001d6000396000f300606060405263ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663c6888fa18114603c575b600080fd5b3415604657600080fd5b604f6004356061565b60405190815260200160405180910390f35b600781025b9190505600a165627a7a723058203da73c4161a1751d52899e2da724076a62a935cb5e7ed4b29f7f49560675ab8d0029\",\"networks\":{},\"schema_version\":\"0.0.5\",\"updated_at\":1508016118593}

7. 通过abi创建合约对象

> var contractInfo = JSON.parse('{\"contract_name\":\"test\",\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"name\":\"d\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"}],\"unlinked_binary\":\"0x60606040523415600e57600080fd5b5b60978061001d6000396000f300606060405263ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663c6888fa18114603c575b600080fd5b3415604657600080fd5b604f6004356061565b60405190815260200160405180910390f35b600781025b9190505600a165627a7a723058203da73c4161a1751d52899e2da724076a62a935cb5e7ed4b29f7f49560675ab8d0029\",\"networks\":{},\"schema_version\":\"0.0.5\",\"updated_at\":1508016118593}')
> myContract = web3.eth.contract(contractInfo.abi)
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "multiply",
      outputs: [{...}],
      payable: false,
      type: "function"
  }],
  eth: {
    accounts: ["0x2abf46d8b0d940cdeedd55872bc0648add40227d"],
    blockNumber: 384,
    coinbase: "0x2abf46d8b0d940cdeedd55872bc0648add40227d",
    compile: {
      lll: function(),
      serpent: function(),
      solidity: function()
    },
    defaultAccount: undefined,
    defaultBlock: "latest",
    gasPrice: 0,
    hashrate: 0,
    mining: false,
    pendingTransactions: [],
    protocolVersion: "0x3f",
    syncing: false,
    call: function(),
    contract: function(abi),
    estimateGas: function(),
    filter: function(fil, callback),
    getAccounts: function(callback),
    getBalance: function(),
    getBlock: function(),
    getBlockNumber: function(callback),
    getBlockTransactionCount: function(),
    getBlockUncleCount: function(),
    getCode: function(),
    getCoinbase: function(callback),
    getCompilers: function(),
    getGasPrice: function(callback),
    getHashrate: function(callback),
    getMining: function(callback),
    getPendingTransactions: function(callback),
    getProtocolVersion: function(callback),
    getRawTransaction: function(),
    getRawTransactionFromBlock: function(),
    getStorageAt: function(),
    getSyncing: function(callback),
    getTransaction: function(),
    getTransactionCount: function(),
    getTransactionFromBlock: function(),
    getTransactionReceipt: function(),
    getUncle: function(),
    getWork: function(),
    iban: function(iban),
    icapNamereg: function(),
    isSyncing: function(callback),
    namereg: function(),
    resend: function(),
    sendIBANTransaction: function(),
    sendRawTransaction: function(),
    sendTransaction: function(),
    sign: function(),
    signTransaction: function(),
    submitTransaction: function(),
    submitWork: function()
  },
  at: function(address, callback),
  getData: function(),
  new: function()
}

8. 检查coinbase账号余额

> account1 = web3.eth.coinbase
"0x2abf46d8b0d940cdeedd55872bc0648add40227d"
> web3.eth.getBalance(account1)
0
> 
如果余额大于0,继续,否则,开始挖矿。
> miner.start();
null
> 
挖矿过程中,切换到节点终端,你会发现一直在挖矿。
gif1
如果你觉得差不多了,可以运行下面的命令停止挖矿。
miner.stop();

9. 停止挖矿,并且查余额

> miner.start();
null
> miner.stop();
true
> web3.eth.getBalance(account1)
1.152e+21
> 

10. 解锁coinbase账号,我们通过coinbase账号来付费部署合约

liyuechun: 换成你的密码。
> personal.unlockAccount(account1, 'liyuechun') 
true
> 

11. 预估手续费

> bytecode = "6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029"
"6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029"
> web3.eth.estimateGas({data: bytecode})
Error: invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go struct field CallArgs.data of type hexutil.Bytes
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at :1:1

> bytecode = "0x6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029"
"0x6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029"
> web3.eth.estimateGas({data: bytecode})
98391
> 
备注:字节码前面需要添加0x。手续费大概为98391wei

12. 部署合约,为了方便理解,设置一个回调函数

> contractInstance = myContract.new({data: bytecode gas: 1000000, from: account1}, function(e, contract){
  if(!e){
    if(!contract.address){
      console.log("Contract transaction send: Transaction Hash: "+contract.transactionHash+" waiting to be mined...");
    }else{
      console.log("Contract mined! Address: "+contract.address);
      console.log(contract);
    }
  }else{
    console.log(e)
  }
})
Contract transaction send: Transaction Hash: 0x5e2aebbf400d71a32e807dc3f11f1053b6ee3b2a81435ed8ace2fa54eebb9f3d waiting to be mined...
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "multiply",
      outputs: [{...}],
      payable: false,
      type: "function"
  }],
  address: undefined,
  transactionHash: "0x5e2aebbf400d71a32e807dc3f11f1053b6ee3b2a81435ed8ace2fa54eebb9f3d"
}
> 

13. 你的合约等待挖矿,开始挖矿,等一会儿,停止

> miner.start()
null
> Contract mined! Address: 0xbf8b24283f2516360d3a4ba1db0df78ae74689db
[object Object]
> miner.stop()
true
> 
wakuang1

14. 检查合约是否部署成功

> eth.getCode(contractInstance.address)
"0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa114603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60006007820290505b9190505600a165627a7a7230582067d7c851e14e862886b6f53dad6825135557fb3a4b691350c94ea5b80605f6770029"
> 

15. 调用合约方法

> contractInstance.multiply.call(6)
42
> 
PS: 这里添加call的原因是因为multiply函数没有添加constant
pragma solidity ^0.4.4;

contract test {

    function multiply(uint a) returns(uint d){

        return a * 7;
    }

}
Over Game!!!!

Friday, September 15, 2017

基因说

《基因那些事儿》文字版 知道大家有没有注意到一个问题,近一两百年,是人类科技成果的“爆发期”,两次工业革命、信息技术的爆炸式发展,让人类拥有了非常强大的外在力量,只要愿意的话,毁灭个地球可能都不是问题。但是,从生物角度上看,我们人类本身,跟两千年以前比,并没有什么实质性的变化,有些能力甚至还在退化,你像视力、听力,可能比古代的平均水平差远了。你别看火箭能上太空,但是医院连我脸上的痘都治不好,更别说搞什么进化永生了。这反映了一件事儿:人类对于自身的研究水平,远远滞后于对外部这些东西的研究水平。所以今天,咱们就来聊聊和人类自身相关的科技,基因技术。   其实咱把眼光放得开阔一点,科技和创新真的远远不局限于电子产品,甚至不局限于互联网这个圈子。麻省理工评论(《MIT Technology Review》)去年评选了全球50家最具创新性的公司,除了苹果、Amazon、Tesla这些明星公司,还有近五分之一的公司,是做生物技术的,它们几乎全都跟“搞基”有关。我不说你可能都没听过,什么23andMe, illumina,OxfordNanopore,等等等等,名儿都特奇怪。而且最近,国内跟基因技术有关的概念股也是一路飘红,可见人类上九天揽过月,下五洋捉过鳖,今天终于到了对自己感兴趣的时候。   咱们一般人理解的基因公司,也就是做做基因检测,比如跟女朋友才认识四个月就有了自己的孩子,感觉很幸福,这时候你可能要测一测。其实基因技术还有更高级的应用,最重要的,就是治病保命。很多疑难杂症,病根儿出现在基因上,所以也只能通过基因技术得以解决,比如癌症,再比如一些遗传病,你像先天性失明;第二种,把生态环境变得更适合人类生存,比如榜单里边有个公司叫Intrexon,专门研究转基因蚊子,这种蚊子的后代死得很快,基本上出生就死了,研究它干什么用呢,抑制病毒传播,你像寨卡病毒,主要是通过蚊虫叮咬传染的,只要把这种转基因蚊子放到病毒爆发的地区,慢慢就会让这些有毒的蚊子断子绝孙;最后,基因技术还有一个伦理敏感的应用,那就是人类的基因优化,增强智商,强化体魄,培养出一些美国队长那样的超级战士,不是没有可能。要实现这一切,核心技术有两个:基因测序,以及基因编辑,这才是MIT榜单里大部分基因公司在干的事儿。   要聊这两个技术,咱们还是先简单说一下,基因到底是什么东西。说得装逼一点,基因是遗传信息的基本单位,是染色体或基因组的一段DNA序列。翻译成人话:你要把这世界看成一大网游,咱们都是游戏里的人物,那基因就是你的一段代码。如果说,零和一是电子世界的基本码,那么,DNA上的四种碱基分子,ATCG,就是生物世界的基本码;就是这些分子的特定排列顺序,决定了你的一切。   我们人体里大约有30亿对ACTG,2.5万个基因,它里边所蕴含的信息,那可海了去了,从你十八代祖宗从哪儿来,一直到你的颜值、性向,再到你容易得什么病,长寿还是短寿,其实在你出生的时候,差不多就都决定好了。但是,这么多信息,它的体积有多大呢,咱们做个小学数学题,在生物信息学中,四种碱基用二进制的00、01、10、11来表示,每个碱基分子的容量是2比特,8比特是1字节,所以它的体积应该是30×109×2÷8÷1000÷1000=750M,你的整个基因组,其实只有一部小电影那么大,还不是高清的,顶多是个720p。   那人类基因跟计算机代码比起来,有一个厉害的地方:信息存储效率特别高。二进制的一个数位上只有1和0两种选择,但是DNA一个数位上可以有ACTG 4个选择。你想啊,同样是10位数,二进制最多有210种组合,要是DNA,组合数可就是410,数学好的可以自己算算。更吊的是,0和1是虚拟的,虽然肉眼看不到,但是存在实体结构。DNA可是有空间结构的,旋转折叠不停歇。人体的基因组虽然小到肉眼根本看不到,但要是和拉面一样拉直了,能拉2米长,这伸缩能力,那可是完爆蚁人。所以除了序列信息以外,空间结构所蕴含的信息也相当丰富,这么一来DNA信息的存储效率就相当高了。现在,有些计算机科学家,玩生物跨界,借鉴DNA分子的存储方法,用ATCG来替代0和1,搞出了一种新的高效存储技术,叫DNA存储技术,微软正在做,据说一个立方毫米的DNA就能存储十亿字节的数据,这种技术如果得到大规模应用,那就厉害了,我们的手机这些智能设备的性能,可能还会有非常大的进步空间。但话又说回来,跟很多新技术一样,在未来很长一段时间里,它确实也没什么卵用,SSD还是主流,所以现实很骨感,毕竟人类的基因理论一共只有六十年,还没有新中国建国时间长呢。   好,欢迎回到科技相对论,我是王自如,咱们刚说到,基因其实就是一串代码,里边有很多很重要的信息,既然它是代码,那就意味着,它是有可能被读取和修改的。这就是咱们前边提到过的,基因测序,和基因编辑的技术。   基因测序 咱们先说基因测序,其实就是读代码,解读你的遗传信息。说到这儿,有个著名的例子,宅男女神,安吉丽娜·朱莉。她就做过这个基因测序,结果发现自己是一个“乳腺癌易感基因突变体携带者”,得乳腺癌的概率高达87%,另外还有50%的概率,会得卵巢癌。她一想,她的母亲、姥姥,还有大姨妈,都是得癌症去世的,所以毅然决然地,就直接把乳腺组织给切除了,你别想错了啊,乳腺,只是一个腺体,切除不影响外观。   不知道大家注没注意到,有些公司,非常低调,你一般发现不了,等你发现的时候,它已经默默地垄断了全球百分之七八十的市场,你比如前两年的大疆,要不是它那年业绩太好,过年给员工发奔驰当年终奖,拉了一波仇恨,可能还没多少人知道它呢。基因测序行业也有这么一公司,叫Illumina,跟小黄人那个开发商名字差不多(Illumination),逼格太高没有官方译名,我为了念着方便,就先管它叫小黄人公司,你注意这不是官方称呼啊。这个小黄人公司在基因测序这行的影响力,那就等于手机里边的三星苹果,无人机里边的大疆,默默地占领了全球百分之七十的市场份额。小黄人今天之所以能这么牛,是因为它有个厉害的产品,叫高通量测序仪,就是一种能读取DNA的设备,具体原理太复杂,咱就不讲了啊,说多了容易露馅。咱们说它为啥牛。   基因测序的难度有三个:成本、速度、数据解读。咱们先说成本。如果你对科技感兴趣,可能听过这个词儿,叫“人类基因组计划”,是一帮顶尖生物学家在上世纪90年代初提出来的,要解读人体的30亿对基因组,搞清楚它们都是干啥用的,当时的预算成本是多少,27亿美元。这件事儿干完以后,个人基因测序的成本大大降低,但一般人还是玩不起:零三零四年,你要做个个人的基因组测序,光成本就要三千到五千万美元,给你做这玩意,人家公司还得盈利吧,你得花个大几千万,才能做,等于好几十套深圳南山中心区的房,都是富豪玩的,一般人玩不起。又过了几年,技术进步,成本下降了一万倍,大概也要五六千美元,这时候,小黄人公司推出了一个新的测序平台,把成本降到了1000美元,到了今年年初,它们又更新了测序仪的产品线,声称要把测序成本控制在100美元以内。十五年的时间,成本从27亿到100块,你看这个速度,跟摩尔定律比,也不差啥了吧。就是因为成本的降低,基因测序技术才能从军用和科研下放到民用,你上网一搜,很多基因检测,产前诊断服务都冒出来了,而且连医院都不用去,直接京东上买就OK了。   而且,小黄人之所以能得到今天的行业地位,除了机器做得好,后边还有一个更重要的东西,那就是咱们经常提到的,大数据。一切规律都是从数据里分析出来的,你要想得到一个准确的基因检测结果,没有数据,那白搭。小黄人生产测序仪,一定会获得大量基因数据,它控制了数据,就等于站在了整个基因测序的产业上游,不抱它的大腿,你普通小公司根本解读不了基因密码。所以你看,数据无论在那个行业,都是非常重要的。 基因编辑 人类的欲望是无穷无尽的。既然人类能够解读这些遗传密码,肯定就要想办法去修改它们,这就是基因编辑技术。   前段时间,出了个让我们觉得挺不是滋味的事儿,河北科技大学,有个叫韩春雨的副教授,在牛逼杂志《自然:生物技术》上发表了一篇文章,就是关于新型基因编辑技术的。当时被称为“革命性的,有诺奖潜力的研究成果”,一时间是风光无限,什么2个亿的科研资金,长江学者提名,都来了,他也是欣然接受,结果全世界几个实验室尝试以后发现,这个韩副教授的关键实验数据,无法被重复验证,这也让人开始怀疑他的研究成果,而且更讽刺的是,现在连韩副教授自己都无法复制自己的实验数据了,这不是piapia打脸么?要知道对于这种“实用技术”来说,前无古人,后无来者可不是啥好事儿。所以,前两天这韩副教授就把稿子暂时给撤下来了。不管这事儿是学术造假,还是另有隐情,咱们还是不客气地说,韩春雨在研究成果有很大争议,未经证明的时候,就忙着接受各种荣誉,这吃相实在是有点难看。   回到技术上,现在世界上主流的基因编辑技术,叫CRISPR,利用这种技术,可以对生物的基因序列进行修改。为了方便你出去装逼,咱们还是简单说一下它的原理。它其实是利用了细菌的免疫系统,非常巧妙。   咱们上一季讲过人体免疫,有很多病,人只要得过一次,就不会再得了,比如水痘。这是因为,你的身体会记住曾经入侵过的病毒长啥样,下次它刚一出现,还没来得及让你生病呢,免疫系统就认出,这个是坏人,把它赶跑了。细菌的免疫系统也有这种功能。一个细菌,受到病毒攻击以后,没死,就会把这个外来病毒的DNA插到自己的DNA序列里边,存起来,相当于制造一个“黑名单”。下次再有病毒过来搞事情,它就先做个DNA识别,看看这个病毒的DNA在不在黑名单上,如果在的话,马上把它拖出去斩了。那么重点来了,你发现了吗:细菌的免疫系统可以实现对DNA的写入和删除,科学家一看,这真是厉害了,我要是能人工写一份“黑名单”进去,把病毒基因换成个人类基因,不就可以让细菌帮忙改变人类基因了吗,这就是CRISPR。这个技术的时间不长,四五年前,有个叫张峰的华人科学家,刚刚证明了,经过特定的改造后,CRISPR确实能用来编辑动物细胞中的基因,当时科学界一下就炸开了,这件事意味着,我们人类,终于不只是听天由命了,我们真正开始掌握了改造自身的技术,虽然一切才是刚刚开始。   当然,CRISPR还远远不完美,严格来说,它并不能百分百做到任何位置任何序列的编辑,对黑名单的编写标准也有“格式”上的要求,而我们前边提到的,韩春雨提出的那个技术(NgAgo),之所以会被看作是CRISPR的替代品,就是因为它没有这么多破事儿,只要是基因都能编辑,听起来很让人动心,只不过这到底是不是韩春雨一个人的自嗨乌托邦,那还是等时间来告诉我们吧。   基因技术的应用层次 好,欢迎回到科技相对论,我是王自如。咱们刚才聊到了当下热门的两种基因技术:基因测序和基因编辑,实现了对人类基因的阅读和修改。那么,掌握了这些技术,人类究竟会怎么把它应用到自己身上?咱们大胆地设想一下,可能有三个层次:第一,自我修复,治病,让你身体健康;第二,物种优化,通过基因技术,提升人的各项能力,比如智商,视力,肌肉力量,达到一个理想中人的状态;第三,成神。基因技术和其他技术结合,能不能碰撞出一些火花,比如让人实现永生,或者具备一些像X战警那种超能力,胜天半子,这就是科幻里的事儿了,咱们想想就得了。先说说第一个层次,自我修复:所谓的基因疗法,到底能不能治癌症。   去年有个让人非常感慨的事儿:魏则西。二十多岁的小伙子,独生子,不幸患上了滑膜肉瘤,被某搜索引擎的的竞价排名系统坑了。某武警医院(武警北京总队第二医院)的医生,说他们医院有一种“生物免疫疗法”,能治这个病。结果家里的钱都花完了,病也没有治好,当时在知乎上面的生命倒计时直播,让人看着心里真不是滋味。事件的详细过程和原因,谁该对这个事儿负责,网上有很多分析,咱们就不再赘述了。只说莆田系医生嘴里这个可以治疗癌症的“生物免疫疗法”,它其实就是一种基因细胞疗法。莆田系医生用的这种方法不靠谱,但客观来看,细胞疗法其实是挺大一个类别,可不要因为某度虚假宣传一棒子打死正牌军,在未来几年之内,基因细胞疗法确实将会成为治疗部分癌症的关键技术。这里我觉得有必要提一句,科技是严肃的,我们要保持清醒的头脑,小心某度,远离庸医。   谈到细胞疗法的正牌军,CAR-T现在可是最火的一项技术,而这技术火起来,可离不开一个小姑娘。EmilyWhitehead,(小姑娘的官网在此,http://emilywhitehead.com)2010年在Emily快5岁生日的时候,不幸被诊断为急性淋巴细胞白血病,一种极其可怕的血液癌症,而且,她在第一轮化疗的时候就受到了严重的感染,非常危险,医生计划给她骨髓移植,但在这期间,她的病情又急转直下,连骨髓移植都做不了了,当时所有医生都没办法了,只好死马当活马医,虽然话是糙了点,但在绝症面前,往往需要向死而生的一份决心。   我们知道,肿瘤细胞之所以能够肆虐,其实是因为他们确实跟正常细胞长得比较像,免疫细胞识别不出来,就干不掉它。但是,肿瘤细胞表面确实有些特殊的分子结构,如果能想办法,教会免疫细胞识别肿瘤细胞,就可以进行针对性的杀灭。这就是CAR-T疗法。小样儿,别以为为穿上马甲我就不认识你了。   这种疗法在当时是一种非常疯狂的试验性疗法,是没有选择的选择。它的技术关键,就在于一种经过基因改造的免疫细胞,可以说是究极版的免疫细胞。宾夕法尼亚大学的科学家把埃米莉的血抽出来,把免疫细胞都收集了起来,借助CRISPR等基因编辑技术对免疫细胞进行了彻底改装,教会它们如何识别特定肿瘤细胞,并重新输回Emily的身体里,这些经过改装的细胞就叫CAR-T细胞。结果,在Emily7岁的时候,所有血液指标就都已经恢复正常,现在也没有任何复发的迹象。   当然,我们这是简化的版本,Emily在治疗期间也不是没有遇到困难,涡轮增压版的免疫细胞可以在患者的血液和骨髓中增殖,每个CAR-T细胞可以杀死1000至90000个肿瘤细胞,真正的一夫当关万夫莫开。不过这么强的杀伤力难免会波及正常细胞,在回输后,Emily因为发烧住院,被送进特护病房插上呼吸机。医生通知家属埃米莉活过当晚的可能性只有千分之一,好在小姑娘挺过来了,也算是医学史上的奇迹。后来宾夕法尼亚大学与全球制药巨头诺华合作,对CAR-T进行优化开发,针对儿童和年轻人的 难治性复发性急性淋巴细胞白血病 治愈率超过了8成。   虽然CAR-T对于血液癌症的效果很好,但它现在并不能治疗所有癌症。要变成一种普及的癌症疗法,它现在还有三个比较大的阻碍。第一,要想让CAR-T识别并杀灭肿瘤细胞,科学家得先要把这个癌症研究透彻,得知道这个癌症细胞和正常细胞的基因究竟哪里有区别,要不然CAR-T进去了可是伤敌一千自损八百,病人很可能因为巨大的副作用而死亡。第二,它对于实体肿瘤的效果会大打折扣,一个比较形象的说法,它治疗血液癌症,那是打游击战,但治疗实体肿瘤,那是打攻坚战,难。那是因为实体肿瘤的肿瘤细胞都聚集成块,CAR-T只能一层一层地去杀灭,所以说是攻坚战;而血液中的癌细胞都四处游走,很容易就被CAR-T逮到了,这是游击战。第三,因为病人基因不同,癌症种类也不同,所以目前的CAR-T是一种定制疗法,这特别定制的东西都贵,为你改造好的CAR-T细胞别人就不能用,所以还是得有钱才行啊!   好,我们总结一下,作为细胞疗法的CAR-T确实能够治疗癌症,治愈率上那是传统方法没得比的;但治愈率是群体的,放到个人身上只有生和死。并不是所有癌症都适用于CAR-T,而因为定制疗法的缘故,治疗费用可能会让很多符合治疗条件的病人头疼,要下放到真正的消费级市场,可能还需时日,但前途是光明的。   基因技术的两面性 科技相对论,凡事都有两面性,前面我们都在讲,基因技术怎么好怎么牛逼,但事实上,基因技术的发展,也可能给我们带来很多新的,很可怕的问题。   第一个就是,你可能整天活在提心吊胆中。什么意思,就拿基因检测来说吧,首先,现阶段的消费级基因组测序,不能说是完全准确。这里边有技术上的原因,也有基因本身运行方式的原因,它的结果充满了不确定性。它可能让你苦不堪言。你想想,基因测序的结果告诉你,你有百分之二十的机会得肝癌,百分之八十的机会得前列腺癌,百分之十的机会,晚期牙癌,就算你知道它不一定准,你心里是不是也挺堵得慌。而且,你有没有想过,如果这个结果被人捅出去,保险公司还愿意为你提供保险服务吗?天下没有赔本的生意,我想大部分保险公司会选择no,即使是yes,保价肯定也不是平均价格。保险本来就是用来规避未来可能的风险,而现在不幸的人反而要为风险承担更多代价,细思极恐。这不是危言耸听,尽管美国加拿大都已经出台了《反基因歧视法》,但在测序成本下降到如此之低的现在,许多保险公司已将基因检测报告列为在参保前必须出示的材料,以商业逻辑来看,一点毛病没有,到那时候你还想知道自己的基因报告吗?   第二个,就是基因歧视。你想想,没有基因测序之前,我们还整天开地图炮,给人贴标签呢,东北的,开大众的,泛黄区的人,素质都有问题,是吧,没有英文名就做不成朋友,是吧。做了基因测序以后,你身体里30亿个碱基的最终解释权可就落到别人手里了,说你有神经病,你就有神经病。你现在找工作,找对象,可能只需要拿个体检报告,以后呢,可能就得做个基因测序了,你想想这多可怕。你找对象,除了房子车子要齐全,丈母娘可能还要看你的基因检测报告!!!粗暴一点说,基因上的屌丝可能连繁衍后代的机会都没有,而且再努力也没用,无助的你会不会觉得当初要是没被生下来就好了?这逻辑没错吧!   其实,有脑子的人,千万不要没事儿搞这种歧视。有个旅游网站Momondo(视频在此https://www.youtube.com/watch?v=7mqWYuKvbXY)做过一个有意思的测试,邀请了67名测试者问问他们觉得自己是哪个国家哪个种族,其中有相当一部分似乎很确定,甚至还会带点种族歧视和国家地区歧视。但DNA测试的结果下来,真是男人看了会沉默,女人看了会流泪。他们竟然人人有带有他们最看不上那群人的基因,打脸吧。   那最后一个问题,可能想得远一点了,基因技术可能会影响我们整个社会的运行机制,有个97年的科幻电影,叫《千钧一发》,它就描述了这么一个图景,一个基因决定命运的社会,只有基因精英,才能从事精英的工作,而基因不好的劣等人,只能去干社会最底层的工作,比如清洁工,这不是我职业歧视哈,是影片中的设定。这种社会运行模式,是高效但无情的,你生活的终极意义是什么呢,可能不只是为了成为一个社会机器吧。   结     论 好,时间差不多了,我们还是三句话总结一下今天的内容:第一,基因技术(基因测序和基因编辑的发展),让人类可以掌握自己的命运;第二,基因细胞疗法有可能治愈癌症,不是野鸡疗法;第三,要让基因技术更好地为人类服务,社会还要做好相关的伦理准备;  


Tuesday, December 27, 2016

新加坡报废名车都去了哪里?

新加坡报废名车都去了哪里?

随着本地拥车证价格下降,不少车主在车龄满五年时会选择“杀车”,再购买一辆新车。有马来西亚中间商看准此商机,通过低价购入这些报废名车,再非法倒卖到马国从中牟利。

据马国《星报》报道, 这些马国中间商是以低价从新加坡购入被报废名车,再运回马国,通过贿赂政府官员制造假证件,把名车以高价再倒卖到市场上。这些报废名车在马国倒卖的价格大约是同款汽车的十分之一。由于这些报废名车的价格还是远远低于注册汽车商的价格,马国买家也愿意冒险非法购买这类名车。

一名马国中间商迈克(Mike)表示,许多买家明知会触犯法律,但仍然愿意冒险。他说:“这比在马来西亚买二手车的价格还要便宜很多。这些新加坡汽车的车龄通常只有五年多,而且保养得很好。”迈克以一辆二手马赛地(Mercedes-Benz)轿车为例,他说,马国的二手车价格是8万令吉(约2万6200新元),而这些非法报废名车的价格则只要1万令吉(约3275新元)。

他说:“我们通过新加坡的联系人,由一名司机负责将报废名车运过来,通过新加坡和新山的两个关卡。”随后,买家可以选择通过两种非法途径,复制已注册的车牌号或私下与马国陆路交通局(JPJ)进行注册,获得一个“合法”的车牌号。

迈克表示,“复制”另一辆注册车辆的车牌号要比私下注册新车牌号更便宜,大约只要5000到6000令吉(约1600到2000新元)。他说:“通常,他们会找一个类似的车型和颜色,最好是来自另一个州的车牌号来复制。然后找内部官员的帮忙,拿到一张路税收据的原件。不过,“复制”车牌号所承担的风险也更高。迈克说,这类的车辆没有有效的保险,若当局深入追查车牌号,车主将遇上大麻烦。

而私下与当局注册,买家则需要支付额外1万5000令吉(约4900新元)购买汽车进口商所颁发的进口许可证,再私下找当局官员注册该车辆。不过,买家也可选择他们想要的车牌号,也申请购买保险,随后只需每年缴付路税即可。相比之下,“复制”车牌号的买家就必须等到车牌主人缴付路税后,才能再次获得收据的原件。

迈克称,他每个月会有三到五个顾客,平均花2万5000令吉(约8200新元)从他手中购买各式各样的名车,受欢迎的是马赛地和宝马(BMW)轿车。

一名负责运送这类报废名车进入马国的司机透露,这些名车加上许可证,最高可以卖到4万令吉(约1万3000新元)。他也表示,也有办法可以通过更改底盘编号(chassis number)来匹配马国报废汽车的许可证。

我国拥车证的有效期为十年,到期后车辆一般被报销,而在车龄满五年后,车主也必须缴付额外税务。因此,有不少本地车主在车龄达五年后,便会选择“杀车”。

打理好一家咖啡馆

现实中要打理好一家咖啡馆,远没有想象中那般诗情画意。开咖啡馆与开一家“兰州拉面馆”不同,它的管理相当复杂、烦琐,付出要比做一家拉面馆多几倍,但经济回报却可能更少。

在中国(或亚洲地区),咖啡馆代表了一种相对精致的生活方式。虽然同样是人均 40元的消费,但你在一家兰州拉面馆一般是不会要求雅致的桌椅、精美的摆盘、温馨的音乐,以及服务人员的微笑和耐心;而在一家咖啡馆,这些都是“基本配置”。如果你是一个有追求的馆长,想打造一家在平均水准之上的咖啡馆,那就要在更多的细节上费心。小到餐巾纸叠法、吸油纸的造型、服务人员的站姿,大到餐饮样式、店铺文化等。

与其他行业相比,咖啡馆并不能提供给员工太高的薪水,那如何让员工以“老板心态”做事?除了提供薪水之外,你必须关心他们的生活。你可以说这不关我事,但你肯定会失去一个员工。这不是无中生有,而是我曾经面临过的真实处境。

你还需要持续不断地学习。要做一家咖啡馆,仅懂咖啡是远远不够的。

要会选址,你需要对地产行业有基本的了解;

要懂设计,你需要了解装修行业;

你要了解如何注册一家公司,也要了解公司相关的财务问题;

你需要站在老板而不是员工的角度彻底了解“五险一金”;

你要了解水、电、天然气该如何处理;

你要对蔬菜、水果市场持续跟踪;

你要弄懂餐饮行业的一切法律法规

我不是在危言耸听,因为以上任何一个环节处理不好,都可能让你掉到“坑”里,让几个月的辛苦打水漂儿——它可能是工商或者消防的一次罚款,也可能是一次房东的突然变卦,还可能是一次POS(销售点情报管理系统)机诈骗,或者是一场有预谋的碰瓷……

开咖啡馆是愉悦的,它带给你的精神享受是开一间兰州拉面馆所不能比的;但同时,开咖啡馆也是痛苦的,它会给你带来更多的辛苦和挫折:这才是开咖啡馆真实的体验。

需要情怀,更需要懂商业

毫无疑问,开咖啡馆是需要情怀的。

当经济收益与你的投入不成正比的时候,当你感到挫败、沮丧的时候,那种超越商业的理想与激情就是你坚持下去的动力。

但是,情怀并不能解决所有问题。

当你持续亏损 10 天的时候,情怀还是起作用的;但是当你持续亏损一个月、两个月、三个月的时候,你的情怀还能坚持吗?根据我对业内有限的观察来看,很多小业主在持续亏损两个月后就扛不住了。他们可能不会关店,但心态已经发生了变化,开始担忧、焦虑,这种焦虑也会传递到员工、客人身上,导致咖啡馆服务水平下降,从而使营业额进一步下降——这是一个恶性循环。

因此,开好一家咖啡馆,除了超越商业的情怀,更需要科学的策略和方法。许多人不学习开馆的基础知识和技巧,有了点儿闲钱就想开咖啡馆,这种心态是不对的——这也是为什么经营状况良好的咖啡馆越来越少的原因。

请不要误解我——我不是说开咖啡馆不能赚钱。我可以负责任地告诉大家,只要方法得当,咖啡馆完全可以达成创业的目标,实现财务上的成功。

更重要的是,由于咖啡馆独特的氛围和底蕴,这种创业更具备了一般的创业项目所不具备的精神愉悦感——但前提是,你必须足够专业

手机电池/充电最全误区整理:涨姿势

手机电池/充电最全误区整理:涨姿势

2016年11月03日

  如今智能手机仍在持续升级,无论在屏幕尺寸还是硬件性能都在不断飙升,可唯独电池续航无法得到质的提升。在其他部件技术正在快速发展的同时,电池技术并没有同步得到发展,已经被远远甩在后面。正因如此,手机的续航能力成为用户日常使用手机最头疼的问题。

一直以来,关于智能手机电池充电的说法众说纷纭,一些充电误区经常弄得人们一头雾水。

  大家应该听过这样的说法:在睡觉时,将智能手机连接充电器,连续充电一整夜,这样的做法会损坏手机电池,类似的说法还有很多。为了能够让大家更加安全有效的使用手机,下面,我们一起来了解一下手机电池和充电的一些误区。

  1.快充技术是咋回事?
高通快充方案
  现在的手机快充技术可以分为两类:一是提高电流派;二是提高电压派一样。提高电流方案的大概思路就是把充电线加粗、充电线缆线路由普通的4针或5针扩充为7针等,充电线路变粗,电阻变小,电流提高。提高电压派可以理解为在充电头处升完电压之后,在手机集成电路再降下来,再输入到电池中。总而言之,快充技术本质就是在一定限定条件下(如安全性),尽可能提高到达电池的电压或电流,从而提高输入功率。

  2.充电一整晚,会损坏电池吗?
手机夜间进行充电

  手机进行一整晚充电可能会遇到反复充电的可能,而反复使手机处于恒压充电状态是会减少电池使用寿命的;但是我们现在使用的智能手机会在充满电后停止充电,直到电池电量低于某个电压后才会继续充电;而通常手机处于待机状态下,电量下降很慢,所以即使充一整晚电,也不会频繁触发重新充电。但是笔者要说的是,虽然整晚充电不会损伤电池,但长久以往,电池寿命也会大打折扣,所以为了延长手机寿命尽量避免整晚充电。

  3.边玩手机边充电到底好不好?

手机边玩游戏边充电

  你可能会想,在手机充电时使用它,将会对手机充电电路或电池产生不良影响。其实,目前很多手机是带路径管理的,就是说充电时手机直接从充电器取电。即便不带路径管理,直接从电池取电也不会出现什么问题。但是考虑到温度问题,玩手机时CPU、屏幕发热;充电时电池也发热;二者发热叠加可能使手机达到比单独玩游戏或单独充电更高的温度。因此,在边玩手机边充电时,要注意手机是否过热,如果过热,建议采取保守措施降温。

  4.手机电池每隔一段时间需要放光电再充满,才能够保持寿命?

手机电池不需要每隔一段时间需要放光电再充满
  很多用户都有这样的想法,手机电池需要通过“训练”才能够充到尽可能多的电量,所以为了达到这个目的,用户会将手机电池每隔一段时间放光再充满。当电池电量还有80%以上时,最好插上电源充电,其实这种观点是错误的,现在智能手机采用的锂电池是没有记忆功能的,即使电量达到80%,也可以对其充电,所以用户可以想充就充,不必考虑电量的多少。

  5.第三方电池管理软件竟能帮助延长电池寿命?

第三方电池管理软件并不会延长电池寿命

  可以说第三方电池管理软件对电池寿命没有影响。通常这些任务管理软件可以允许或者屏蔽掉部分任务,但是他们对电池续航时间的帮助并没有内置系统多。你可能需要第三方应用软件来更好管理应用软件,但是不要奢望它们来延长电池续航时间。

  6.使用第三方电池或充电器不安全吗?

使用第三方电池的iPhone 4s

  为了确保不会发生意外情况,通常手机厂商都会建议用户购买原厂配件。但是很多用户在原装充电器损坏后,都会购买厂商认证的第三方配件,在实际使用上并没有什么差异,也不会发生安全性或功能上的问题。只有那些无品牌、廉价的山寨电池或充电器,在使用过程中,可能出现安全故障;所以建议大家尽量使用原装或第三方充电器/电池。

  7.边充电边玩手机,安不安全?

边充电边玩手机,一般情况下没有安全问题

  虽然曾经有过充电时使用手机出现事故的案例,但实际上这并不是手机或是电池技术的问题。会发生这种情况无非是:在水池或浴缸里使用充电中的手机,或是使用廉价、无保障的山寨充电器。正品手机、充电器都拥有电流保护措施,最大电压也远低于人体承受的最大电压,但是边充电边玩手机时,还是要考虑手机机身的温度,温度过高应该停止使用手机。

  8.在低温环境下使用手机,会延长电池寿命吗?

在低温环境下使用手机会缩短电池寿命

  有些用户为了增加手机电池续航时间,会在温度较低的环境下进行使用,这种做法其实是不对的,这种做法不仅不可以延长续航时间,还会对电池寿命有影响。原因是锂离子电池会到“热”和“冷”的不良影响,对于智能手机电池来说室内温度才是最佳的温度。

  9.智能手机电池需要几次完全充放电来激活?

智能手机电池不要“激活”

  早期的镍镉电池和镍氢电池需要类似的“激活”。这些电池会产生“记忆效应”,在不完全放电的状态下充电,易使电池过度充电,但现在的手机所用的电池是锂离子电池,它的初始化过程已在制造时完成,因此开始使用时不需要激活。

  10.听说减少充电次数能够延长电池寿命?

锂离子电池寿命与充电次数没有关系


  此前,人们普遍认为锂电池的锂离子会随着充电次数增加失去活力,导致电池寿命殆尽,不过苹果解释称,锂电池的寿命取决于充电周期而非次数。一般锂离子电池的寿命可达到几百次充放电循环,这里的充放电循环指将电量用光后再充满的过程,而不是插上充电器再拔掉就算1次。

  写在最后

  以上这些内容是笔者认为一些用户可能对智能手机电池/充电存在的误区。根据锂离子电池的衰退机理,笔者为大家提供一个电池“最优”的使用习惯:将手机电量维持在30%-50%的低电量状态,直到出门提前将电量充满到100%。这样就降低“高电量状态下的静置时间”(举例来说,100%的电池放一个月,与50%的电池放一个月,前者的容量衰退更大一些)。当然,这个策略对于现在的手机用户来说,并不是很实用,所以仅供参考。