区块链学习(二)Mac系统下EOS区块链开发环境

一、从GitHub上克隆主网代码仓库:(注意EOS-Mainnet/eos 与 EOSIO/eos 的版本是一致的。若以前在本地已经安装编译过EOSIO/eos的1.0.2版本及以上,则可以直接跳到步骤三),最新版本是1.1.6

git clone https://github.com/EOS-Mainnet/eos 
cd eos
git submodule update --init --recursive 
git tag
git checkout mainnet-1.1.6

二、编译eos代码

./eosio_build.sh  

三、替换config.ini 和 genesis.json 文件

(1)运行nodeos节点后会生成默认的config.ini/genesis.json文件,现在对其进行替换

(2)在不同系统中找到其文件地址:

  • linux-ubuntu: ~/.local/share/eosio/nodeos/config/
  • mac-osx: ~/Library/Application\ Support/eosio/nodeos/config/

(3)新的config.ini文件设置如下:

# fullnode sample config

blocks-dir = "blocks"

chain-state-db-size-mb = 1024

reversible-blocks-db-size-mb = 340

contracts-console = false

https-client-validate-peers = 1

http-server-address = 0.0.0.0:8888

access-control-allow-credentials = false

p2p-listen-endpoint = 0.0.0.0:9876

p2p-server-address = 0.0.0.0:9876


# List of peers

p2p-peer-address = p2p.one.eosdublin.io:9876

p2p-peer-address = eu-west-nl.eosamsterdam.net:9876

p2p-peer-address = p2p.mainnet.eosgermany.online:9876

p2p-peer-address = 35.197.190.234:19878

p2p-peer-address = p2p.genereos.io:9876

p2p-peer-address = fullnode.eoslaomao.com:443

p2p-peer-address = new.eoshenzhen.io:10034

p2p-peer-address = node1.eosphere.io:9876

p2p-peer-address = p2p.meet.one:9876

p2p-peer-address = bp.eosbeijing.one:8080

p2p-peer-address = peer1.mainnet.helloeos.com.cn:80

p2p-peer-address = p2p-public.hkeos.com:19875

p2p-peer-address = pub1.eostheworld.io:9876

p2p-peer-address = eu1.eosdac.io:49876

p2p-peer-address = peer.eosio.sg:9876


p2p-max-nodes-per-host = 10


agent-name = "eosmainnet"

# allowed-connection can be set to "specified" to use whitelisting with the "peer-key" option

allowed-connection = any


# peer-private-key is needed if you are whitelisting specific peers with the "peer-key" option

peer-private-key = ["EOS6qTvpRYx35aLonqUkWAMwAf3mFVugYfQCbjV67zw2aoe7Vx7qd", "5JroNC1B4pz9gJzNZeU7tkU6YMtoeWRCr4CJJwKsVXnJhRbKXSC"]


max-clients = 250

connection-cleanup-period = 30

network-version-match = 1

sync-fetch-span = 100

max-implicit-request = 1500

enable-stale-production = false

pause-on-startup = false

max-transaction-time = 10000

max-irreversible-block-age = -1

txn-reference-block-lag = 0


# Plugins used for full nodes

plugin = eosio::chain_api_plugin

plugin = eosio::history_api_plugin

plugin = eosio::chain_plugin

plugin = eosio::history_plugin

plugin = eosio::net_plugin

plugin = eosio::net_api_plugin

其中p2p-peer-address的配置来源于:

https://docs.google.com/spreadsheets/d/1K_un5Vak3eDh_b4Wdh43sOersuhs0A76HMCfeQplDOY/edit#gid=0

(4)genesis.json文件内容如下:

{
  "initial_timestamp": "2018-06-08T08:08:08.888",
  "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 200000,
    "target_block_cpu_usage_pct": 1000,
    "max_transaction_cpu_usage": 150000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  }
}

此文件称为创世json文件,来自以下链接:

https://github.com/EOS-Mainnet/eos/blob/launch-rc-1.0.2/mainnet-genesis.json

四、将以上的创世json文件,复制拷贝到~/eos/build/program/nodeos目录下,并启动nodeos节点:

./nodeos --genesis-json genesis.json  

启动和连接可能不会那么顺利,我是用下面的命令的

./nodeos --data-dir . --config-dir . --genesis-json genesis.json

注意:编译完成后相关的程序都在:/Users/[your name]/eos-mainnet/eos/build/programs/nodeos

五、连接主网查看链信息:

EOS钱包推荐,imtoken,需要找一个已有eos账户的帮忙才可以噢,因为要买cpu和内存

eos一些常用的命令学习:

cleos create key #创建公钥私钥对,用于创建钱包等
cleos get info
cleos get block 191
因为现在主网数据已经很多了,到12325622个block了,所以要同步数据是很慢的,我们直接不同步数据,直连主网
cleos -u https://api.eosnewyork.io get account yiguidyiguid

 

区块链学习(一)Mac系统下搭建基于以太坊的区块链开发环境

区块链的相关知识后补,先从实际的上手,从实例中学习

知识点

分布式数据库并且只能插入和查找

任何人都可以成为节点,保存整个数据库,且数据同步

工作量产生价值,成为币

软件安装

brew tap ethereum/ethereum
brew install ethereum

执行时间较长,需要耐心等待或者梯子

也可以编译安装,请自行百度

https://github.com/ethereum/go-ethereum

检查是否安装成功

geth -h

搭建私有链

需要给一个数据存储的文件夹,我们使用

cd ~
mkdir ethereum
cd ethereum

初始化一个创世区块,新建文件

vi genesis.json
{ 
"nonce": "0x0000000000000042", 
"difficulty": "0x020000", 
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
"coinbase": "0x0000000000000000000000000000000000000000", 
"timestamp": "0x00", 
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", 
"gasLimit": "0x4c4b40", 
"config": { 
"chainId": 15, 
"homesteadBlock": 0, 
"eip155Block": 0, 
"eip158Block": 0 
}, 
"alloc": { } 
}

有没有一种普罗米修斯里面造物主的感觉

下面是对这个创世区块的一些解释

mixhash: 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。. 
nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase: 矿工的账号,随便填
timestamp: 设置创世块的时间戳
parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
extraData: 附加信息,随便填,可以填你的个性信息
gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

然后我们可以准备启动我们的私链

geth --datadir data init genesis.json

运行上面的命令,会读取genesis.json文件,根据其中的内容,将创世区块写入到区块链中。如果看到log信息中含有Successfully wrote genesis state字样,说明初始化成功。其中的数据信息等会保存在我们设置的data目录中。

启动私有链

初始化完成后,就可以通过输入以下命令启动私有链,并打开console了

geth –-datadir data console 2>> geth.log

指定数据目录是data,启动console,并且把console的输出重定向到geth.log文件

这样你可以另外启动一个控制台,使用命令查看console的输出

启动了区块链节点并进入了Javascript Console

这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法 
net:包含以下查看p2p网络状态的方法 
admin:包含一些与管理节点相关的方法 
miner:包含启动&停止挖矿的一些方法 
personal:主要包含一些管理账户的方法 
txpool:包含一些查看交易内存池的方法 
web3:包含了以上对象,还包含一些单位换算的方法

基本玩法

查看&创建账户

>eth.accounts
[ ]

目前还没有账户,下面开始创建,参数即是密钥

>personal.newAccount('password')
"0x2b661b5b692de27578e6fb199b4ae2714ff24047"

查询余额

>eth.getBalance(eth.accounts[0])
0

注意在console里也是可以用tab键自动补全的

启动&停止挖矿

miner.start(10)

其中参数表示挖矿使用的线程数。

第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

如果想停止挖矿,并且进度已经达到100%之后,可以在js console中输入

miner.stop()

挖到的区块会奖励币,是按wei的单位,wei是以太币的最小单位,1个以太币=10的18次方个wei。要查看有多少个以太币,可以用web3.fromWei()将返回值换算成以太币

>eth.getBalance(eth.accounts[0])
2.31e+21
>web3.fromWei(eth.getBalance(eth.accounts[0]),'ether') 
2310

可以设置矿工的账户

>miner.setEtherbase(eth.accounts[1])
true
>eth.coinbase

返回矿工的账户

转账

#为账户设置别名,方便命令输入
user1=eth.accounts[0]
user2=eth.accounts[1]
#查看区块高度,现在为0
eth.blockNumber
#转账测试,首先解锁账号user1
#命令运行后要求输入解锁密码,直接回车,默认账号锁定密码为空
也就是调用newAccount时候传的参数
返回true成功
personal.unlockAccount(user1)
#从user1向user2转账3个以太币
#命令运行后,提交交易立马回出发挖矿
eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})

 

发现还没转过去,此时交易已经提交到区块链,但还未被处理,这可以通过查看txpool来验证:

>txpool.status 
{
     pending: 1,
     queued: 0 
}

#挖矿测试
#geth启动后,自动启动挖矿,这时运行miner.start(),返回为null 无交易的时候#不挖矿,当有交易时自动会触发挖矿流程

#我们可以先停止挖矿
miner.stop()

然后发现交易已经完成

查看交易和区块

可以通过区块号查看区块

> eth.getBlock(66)
{
 difficulty: 135266,
 extraData: "0xd783010802846765746886676f312e31308664617277696e",
 gasLimit: 3350537,
 gasUsed: 0,
 hash: "0x265dfcc0649bf6240812256b2b9b4e3ae48d51fd8e43e25329ac111556eacdc8",
 logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
 miner: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
 mixHash: "0xaf755722f62cac9b483d3437dbc795f2d3a02e28ec03d39d8ecbb6012906263c",
 nonce: "0x3cd80f6ec5c2f3e9",
 number: 66,
 parentHash: "0x099776a52223b892d13266bb3aec3cc04c455dc797185f0b3300d39f9fc0a8ec",
 receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
 sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
 size: 535,
 stateRoot: "0x0c9feec5a201c8c98618331aecbfd2d4d93da1c6064abd0c41ae649fc08d8d06",
 timestamp: 1520391527,
 totalDifficulty: 8919666,
 transactions: [],
 transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
 uncles: []
}

或者通过交易hash查看交易,交易hash就是在sendTransaction的时候,会返回的一串

> amount = web3.toWei(10,'ether')
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [03-07|11:13:11] Submitted transaction fullhash=0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6 recipient=0x46B24d04105551498587e3C6CE2c3341d5988938
"0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6"
>eth.getTransaction("0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6")
{
 blockHash: "0x1cb368a27cc23c786ff5cdf7cd4351d48f4c8e8aea2e084a5e9d7c480449c79a",
 blockNumber: 463,
 from: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
 gas: 90000,
 gasPrice: 18000000000,
 hash: "0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6",
 input: "0x",
 nonce: 0,
 r: "0x31d22686e0d408a16497becf6d47fbfdffe6692d91727e5b7ed3d73ede9e66ea",
 s: "0x7ff7c14a20991e2dfdb813c2237b08a5611c8c8cb3c2dcb03a55ed282ce4d9c3",
 to: "0x46b24d04105551498587e3c6ce2c3341d5988938",
 transactionIndex: 0,
 v: "0x38",
 value: 10000000000000000000
}

小程序啊小程序

1.小程序的入口是哪里

小程序在微信内没有入口入口是二维码。

这意味着开发者还需要强大的推广能力而且是落地推广能力这让小程序承载的更偏向于O2O模式而非线上导流。

2.会不会有小程序商店

不可能有

张小龙说微信团队从开始就没有做小程序分发的想法小程序一定是没有中心入口、去中心化,“同理分类、排行、推荐的模式在小程序里也是不存在的。因为小程序不存在下载过程所以不需要商店用户查找和搜索的需求会另外解决。

3.订阅关系的问题

小程序没有订阅关系。

张小龙说做小程序不能以收获粉丝为目的小程序没有粉丝数只有访问量的数据。

4.小程序能不能推送消息

答案是不能。

张小龙说如果小程序能推送消息就意味着用户访问的每个网站都推送消息用户会崩溃。但小程序将保留有限的推送能力如果用户确认希望收到某些推送通知那么微信会给商户提供有限的推送能力。

5.小程序能分享么

肯定不能分享到朋友圈但是可以分享到聊天和微信群内。

6.小程序能不能做游戏

现在不能。

7.小程序能被搜索到么

用户能搜索到小程序同时小程序提供的很多服务也是线上的。但微信团队会极力限制这个搜索能力不希望它被滥用。

8.小程序和公众号的关系

小程序和公众号没有任何关系彼此独立。

但很多公众号和小程序可能是同一个企业开发的会存在某种关联比如在公众号里目前用户能看到同一个企业还做了哪些小程序反之亦然小程序和公众号之间可以互相跳转。

9.微信会不会提示线下店面

目前微信会进行轻量的提示让用户感知到附近有哪些店铺提供小程序。

10.小程序什么时候能用

19日正式上线小程序所有微信用户都能够使用。

张小龙说这个时间点1227日晚上才和微信团队商量好这个时间点也是微信提出应用号小程序前身一周年的纪念。

没有入口没有应用商店没有订阅关系也不能分享到朋友圈。。。即用即走,微信很大胆,很有野心啊

ionic学习笔记

登录页面输入框

<label class=”item item-input”>

  <i class=”icon ion-ios-unlocked-outline positive”></i>

  <input type=”password” placeholder=”请输入您的密码”>

</label>

顶部条状的tabs

class=”tabs-striped tabs-top”

grid布局

row和col

col是按百分比的col-50,col-20

下拉更新数据 ion-refresher

上拉加载更多数据 ion-infinite-scroll

$ionicScrollDelegate可以控制滚动scrollTop或者scrollBottom

ionic.wang有中文文档

ionic路由管理

$state:路由状态机

状态迁移的几种方式:

1、$state.go(“state name”);

2、<a ui-sref=“state name”>go state name</a>

3、导航到相关联的url

内联模板

<script type=“text/ng-template” id=“name.html”>

<ion-view>

<p>123</p>

</ion-view>

</script>

加载的模板会放在<ion-nav-view></ion-nav-view>里

<ion-view>用在定义模板的时候

控制是否显示标题栏

$ionicNavBarDelegate.showBar(true);

state可以通过点标记tab.chats或者parent:’tab’来继承模板框架

tab和sidemenu结合使用,应该是把tabs放到sidemenucontent里面去

这样有全局的sidemenu

angularjs和ionic

web storm编辑器

下拉更新

ion-refresher

03里面的demo02 pull-to-refresh有示例工程

angularjs:

ng-app,表示angularjs开始接管

ng-model=“username” 绑定input,类似普通html里面的name=“ username”

ng-bind=“ username” 类似 {{username}}

较普通html不同的是,这种绑定方式可以实时input,实时输出

这就叫双向数据绑定

ng-init,设置一些初始值,一般不用

{{}}中可以写表达式{{num*5}}

ng-controller,指定控制器,angularjs的核心

然后使用$scope元素完成双向绑定

ng-app和ng-controller都是有控制域的

angularjs使用模块,解决控制器污染全局命名的问题

ng-repeat完成循环,如下,将会循环li标签

<ul>

  <li ng-repeat=“p in person”></li>

</ul>

需要用哪个模块,就把模块名加到controller的参数里面,如$http等

$http.get(url).success(function(data) {}).error(function(err) {});

$http.post(url).success()

$http.jsonp(url),跨域请求其中url需要加callback=JSON_CALLBACK

过滤器

{{name | uppercase}}

{{name | lowercase}}

ng-repeat=“p in person | orderBy:’name’ “

还可以筛选 ng-repeat | filter

$scope作用域

controller可以嵌套,对应$scope就是继承关系

另外有一个$rootScope

如果外部的setTimeout方法要实现$scope的变化,或者是监听$scope的变化

使用$apply或者$watch方法

但是可以使用angularjs内置的$timeout方法,更简单,不需要用$apply方法

监听数据变化特别好用,比如在计算运费的时候

$scope.$watch($scope.sum,function(newVal,oldVal) {

//console.log(newVal); 

//console.log(oldVal); 

$scope.iphone.fre = newVal >= 100 ? 0 : 10;

});

{{sum()}},数据绑定里面可以执行方法

$scope.sum() {return total;}

angularjs的工具方法

angular.isArray, isString 等等

angular.uppercase()

如果要初始化两个ng-app,需要用angular.bootstrap来加载

模块之间的依赖还可以从[]中加入

比如

service.js中有angular.module(‘starter.services’, [])

controller.js中有angular.module(‘starter.controllers’, [])

然后在app.js中写入

angular.module(‘starter’, [‘ionic’, ‘starter.controllers’, ‘starter.services’])

其中ionic是插件,另外两个是其他文件中的module

学习ionic和cordova

osx环境下

安装nodejs,0.10.26版本的就好,太新或者太旧都不好用

node -v和npm -v查看安装是否成功

安装ionic和cordova

npm install -g cordova ionic

ionic实际上就是基于cordova和angularjs的一个框架

ionic start [project name]创建一个项目

首先看index.html,是主页面,里面引入了angularjs, cordova等js支持,此外还有app.js, controllers.js, services.js三个文件,这三个文件构建了app的应用逻辑,app是主程序,包含一些设置和启动脚本,services是数据支持部分,也就是model部分,用于提供数据的增删改查操作,controllers用于控制,包含业务逻辑控制代码

ionic platform add ios

ionic build ios

然后进文件目录,project name/platform/ios用xcode打开就好了

如果装了ios-sim,可以继续

ionic run ios 或者

ionic emulate android等

修改www中的文件,主要是css,img,js,templates

其中css控制样式

js里面app.js控制页面跳转

.state(‘tab.friends’, {

    url: ‘/friends’,

    views: {

      ‘tab-friends’: {

        templateUrl: ‘templates/tab-friends.html’,

        controller: ‘FriendsCtrl’

      }

    }

  })

控制的是tab页面,friends页的形式,在tab-friends这个view里面显示templates名字叫tab-friends的html,然后控制器叫FriendsCtrl

controller.js控制逻辑

$scope是全局变量,定义一些数据和方法

另外还有$ionicTabsDelegate等,注意传递参数

controller里面可以console.log输出,或者直接alert

services.js提供数据等

页面都在templates里面,用到的一些模板的语法,有一些特定的框架和元素,以ion-开头的

注意js中的.controller,  .factory等,多个之间没有任何符号,直接换行即可

最后有分号

直接用ionic serve,开启浏览器调试模式,所见即所得

ionic popover的css, 4388行,opacity为什么是0呢?

leancloud,集成云存储,通信等,移动开发不再需要后台,json数据交互

ionic连接leancloud也非常简单,申请好账号,得到appid和appkey之后

在index.html中引入两个js

<script src=”https://cdn1.lncld.net/static/js/av-mini-0.6.1.js”></script>

<script src=”https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js”></script>

然后在app.js中

.run(function($ionicPlatform) {

  $ionicPlatform.ready(function() {

    //里面,添加AV初始化即可

    //leancloud

    AV.initialize(‘vGdoW****beS1D’, ‘5LubapRJ*****lcQw8zx2’);

  });

})

阿里云ubuntu安装ejabberd

突发奇想在阿里云的ubuntu上搭建一个ejabberd服务器,也学一学XMPP,百度和谷歌了一下发现还是有很多攻略的,但是都说得不是很清楚,于是自己结合搜索的结果和自己的尝试在这里记录一下安装过程

1.安装ejabberd

这个比较简单,ubuntu下直接sudo apt-get install ejabberd就会静默完成

两个目录比较重要:/etc/ejabberd这里面有配置文件ejabberd.cfg,后面配置会用到

/usr/lib/ejabberd这里面有ebin目录,是后面放mysql连接扩展的

另外有的攻略里面说这下面的priv目录里有ejabberd mysql数据库初始化sql文件,我没有找到,后面是在别处下载的

2.配置mysql

第一步安装完成之后,应该就可以使用ejabberdctl命令了,可以接status,start,restart等等

首先从https://github.com/processone/ejabberd/blob/master/sql/mysql.sql下载数据库初始化sql文件,放在某个目录下,比如/etc/ejabberd

然后登录到你的mysql,

mysql -uroot -proot

创建一个用户ejabberd

GRANT ALL ON ejabberd.* TO ‘ejabberd’@’localhost’IDENTIFIED BY ‘ejabberd’;

创建一个数据库

create database ejabberd;

使用前面那个mysql.sql文件创建初始表格

use ejabberd;

source mysql.sql

这个时候会发现ejabberd这个数据库里面多了很多表格就对了

3.配置ejabberd支持mysql

修改/etc/ejabberd/ejabberd.cfg文件如下:

注释掉: {auth_method, internal}.
取消注释:{auth_method, odbc}.

取消注释并设置数据库名称和密码:
{odbc_server, {mysql, “localhost”, “ejabberd”, “ejabberd”, “ejabberd”}}.

修改模块如下:在原有模块名后面都增加_odbc
{mod_last_odbc, []},
{mod_offline_odbc, []},
{mod_privacy_odbc, []},
{mod_private_odbc, []},
{mod_pubsub_odbc, [ % requires mod_caps …
{mod_roster_odbc, []},
{mod_vcard_odbc, []},

重启服务

ejabberdctl restart

4.这个时候多半发现ejabberd服务没启起来,通过查看/var/log/ejabberd/ejabberd.log可以看出

=ERROR REPORT==== 2010-06-24 11:35:34 ===
C(<0.37.0>:ejabberd_check:63) : ejabberd is configured to use ‘mysql’, but the following Erlang modules are not installed: ‘[mysql,
mysql_auth,
mysql_conn,
mysql_recv]’
=INFO REPORT==== 2010-06-24 11:35:34 ===
application: ejabberd
exited: {bad_return,{{ejabberd_app,start,[normal,[]]},
{‘EXIT’,database_module_missing}}}
type: temporary

原因是erlang缺少mysql模块,需要单独编译

那么从svn co https://svn.process-one.net/ejabberd-modules/mysql/trunk mysql

可以把需要的模块源码下载下来,主要是

mysql_recv.erl

mysql_conn.erl

mysql_auth.erl

mysql.hrl

mysql.erl

这几个

放到某个目录里面后分别使用erlc *.erl编译

可以得到几个文件

mysql.beam
mysql_auth.beam
mysql_conn.beam
mysql_recv.beam

把他们全部放到/usr/lib/ejabberd/ebin里面再次尝试重启ejabberd服务就可以了

5.配置ejabberd管理员用户

ejabberdctl register admin [YourIPAddress] 123456

使用web地址http://ip地址:5280/admin,登录即可开始进行服务器管理了

后面的操作未完待续

参考url

http://www.cnblogs.com/silent2012/p/3610747.html

https://code.google.com/p/ejabberd4joomla/wiki/installing_eJabberd

http://srijan.me/ejabberd-storing-data-in-mysql/

 

Objective-C语法快速参考

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是在说我自己。

如果你和我一样,对苹果相关的开发:Mac OS X或是iPhone有兴趣,但是第一时间看到Objective-C就会头疼并伴有发烧症状的话,疗效比较好的快速治疗方法是阅读本文。大概花二十分钟左右,而且绝不无聊的时间,你就会对Objective-C有那么一点点了解,至少读读例子不会那么头疼了。

不过假定你要有那么一点点c++、c#或是java的基础,至少能看到c++、c#或是java的源码,能够大致明白说得是什么。

这篇文章不是一篇科技文章,希望你也不要把它当做科技文章来读。文章非常不严谨,但是我相信你能看得懂。

一、XCode、Objective-C、Cocoa说的是几样东西?

答案:三样东西。

XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩意。你可以将Interface Builder认为是Visual Studio中用来画界面的那部分功能单独提出来的程序。

Objective-C:这是一种语言,就好像c++是一种语言,Java是一种语言,c#是一种语言,莺歌历史也是一种语言一样。

Cocoa:是一大堆函数库,就好像MFC.NETSwing这类玩意,人家已经写好了一堆现成的东西,你只要知道怎么用就可以了。

有些人会比较容易混淆Objective-CCocoa,就好像有些人会混淆c#.NET一样。这两个东西真的是两个不一样的东西。

二、Objective-C是什么?

你可以把它认为是语法稍稍有点不一样的c语言。虽然第一眼望上去你可能会认为它是火星语,和你所认知的任何一种语言都不一样。

先简单列出一点差别:

 

问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?

1 减号(或者加号)

减号表示一个函数、或者方法、或者消息的开始,怎么说都行。

比如c#中,一个方法的写法可能是:

private void hello(bool ishello)

{

//OOXX

}

用Objective-C写出来就是

-(void) hello:(BOOL)ishello

{

//OOXX

}

挺好懂的吧?

不过在Objective-C里面没有publicprivate的概念,你可以认为全是public

而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。

2 中括号

中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

比如C#里你可以这么写:

this.hello(true);

在Objective-C里,就要写成:

[self hello:YES];

3 NS****

老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。

这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:

继续阅读“Objective-C语法快速参考”

信息安全学习笔记(5)

两天没来写了,不是偷懒噢,而是前两天学习的主要是前沿技术的东西,都是大学的时候学过的,所以也没有太多可以记的。相关知识都可以在云计算,物联网,操作系统等课程中学到。

大概列个提纲吧:

云计算

架构部署模式:公有云,私有云,团体云,混合云

按业务交付模式:Software as a Service,SaaS;Platform as a Service,PaaS;Infrastructure as a Service,IaaS。

动态资源调配:网络资源,计算资源,存储资源,安全资源。

与Google的服务器群组不太一样,虚拟化技术是现在云计算的基础

云计算安全威胁:旁路边界防护,多用户滥用,跳板攻击,管理员权限滥用,未加固虚拟镜像

云计算安全建设:缺乏统一标准,虚拟机之间的攻击,不同安全级别的服务,

—–

物联网技术

—–

信息安全

PS:老师用note II就可以在局域网内session劫持,还是很可怕的

wifi密码设置WPA2要比WPA安全,WEP是最不安全的

—–

系统安全

WIndows,Linux,应用安全,web安全等

邮件系统中使用PGP,是RSA公钥加密

—–

访问控制中:

强制型访问控制有

BLP-保密性

Biba和Clark wilson-完整性

Chinese wall-混合型

访问控制矩阵 – 自主型访问控制:ACL和CL

—–

BLP模型中,简单规则是,向下读,不能向上读(S读O,S》O)

*-规则是,向上写,不能向下写(S写O,O》S)

Biba模型中,完整性的,向上读,向下写

—–

单点登陆,Kerberos协议,获得票据许可票据,获得服务许可票据,获得服务

集中式访问控制技术:RADIUS,TACACS,TACACS+,Diameter

审计是一次性,周期性的,三个部分:日志记录器,分析器,通告器

监控是实时的

—–

CISP知识体系

信息安全保障概述:信息安全基本知识,信息安全基本实践

信息安全技术:密码技术,访问控制与审计,网络安全,系统安全,应用软件安全,安全攻防,软件安全开发

信息安全管理:信息安全管理体系,信息安全风险管理,信息安全管理措施

信息安全工程:信息安全工程原理,信息安全工程实践

信息安全标准法规:信息安全法规与政策,信息安全标准,信息安全道德规范

—–

信息是一种资产,具有价值

信息安全就是保护信息的保密性,完整性和可用性

信息安全管理的相关标准27000系列:27001,引入PDCA模型,是信息安全体系要求

27002,7799-1,17799都是实践准则

27003,信息安全管理实施指南

信息安全管理体系:ISMS,Information Security Management System,从风险评估开始

—–

PDCA模型,又叫戴明环,规划和建立Plan,实施和运行Do,监视和评审Check,保持和改进Action

特点是:循环,组织部分,个人均可采用,阶段总结

风险就是威胁利用脆弱性对资产造成不良后果

项目      风险管理     风险评估

目的:降低风险      确定风险等级

周期:所有阶段      单个阶段

计划:PDCA            按需要

—–

风险管理内容:建立背景,风险评估,风险处理,批准监督;监控审查,沟通咨询

常用风险处置方法:减低风险,转移风险,规避风险,接受风险

风险管理贯穿信息系统生命周期:规划,设计,实施,运维,废弃

—–

应急响应的六个阶段:准备,确认,遏制,根除,恢复,跟踪

信息安全应急响应编制方法:总则,角色及职责,预防和预警机制,应急响应流程,应急响应保障措施,附件

信息安全事件分级方法:系统损失,社会影响,信息系统的重要程度

灾难恢复规划的过程阶段:风险分析,业务影响分析,确定灾难恢复目标,制定恢复策略,灾难恢复策略的实现,灾难恢复预案的制定、落实和管理