狭义的播客,一般是指独立播客。 即符合上述国外制作流程的播客。用去中心化的方式进行分发,所有内容都可以由你自己掌控。因此你需要有自己的托管服务器、有自己的域名、且 RSS 订阅链接中含有此域名,这样就算你托管的服务器挂掉了,听众还是可以通过这个固定的 RSS 链接找到你。
播客是一种数字媒体,指一系列的音频、视频、电子电台或文字档以列表形式经互联网发布,然后听众经由电子设备订阅该列表以下载或流当中的电子文件,从而接收内容。英语 “Podcast” 一词是 “iPod” 和 “broadcast”(广播)的混成词。
Polkacast : A decentralization podcast hosting platform
从疫情开始到现在的未结束,整个人在2020年仿佛经历了生死轮回,每个人的经历不一样、认知不一样,自然就导致了结果不一样,在2月份从家出门到工作的城市,就在家封闭了3个月,每天过着焦虑的日子,仿佛自己随时都会死去,而自己追求的、热爱的、所爱的,仿佛一切都没有了,所以在疫情稍微好一点之后就常回家看看,有什么比父母更重要的呢,经济学上说:“分配决定了收益”,而现在的分配导致以后的结果,时间就那么多,总要流失,重要的是这些时间都用来干什么。
今年运动稍微有点懒散,没有减肥到预期的体重65KG,学会爱自己、爱生活,让自己过的开心,一个健康的生命比任何都重要。
— 这个社会的前进,需要我们每个人去担当,去负重前行。如果天空是黑暗的,那就摸黑生存。如果发出声音是危险的,那就保持沉默。如果自觉无力发光,那就蜷伏于墙角。但千万不要为精致的苟且而得意,更不要嘲讽那些比自己更勇敢热情推动社会前行的人们。—
]]>By:kk德米安 2020-01-01
spy-debugger 用来调试安卓、IOS 、webview 等 H5页面适配问题,抓包的话主要用在webview,调试页面适配spy-debugger还是很方便的,不需要连接数据线,直接可以访问多人同时调试。
安装:
npm install spy-debugger -g
sudo npm install spy-debugger -g
启动
spy-debugger
上手调试必备条件
spy-debugger
win或macOS下如果启动不了命令,请关闭防火墙后重试spy-debugger
启动时的ip和本地启动项目的端口http://localhost:8080
,即得出调试地址为:http://192.168.2.36:8080
如上图所示,当前的method,host,即为调试起发起的请求,点击对应的请求可以看到Response返回内容
块级声明用于声明在指定块的作用域之外无法访问的变量。let 和 const 都是块级声明的一种。
ECMAScript 6 引入了块级作用域,块级作用域存在于:函数内部和当前块中(字符 { 和 } 之间的区域 =》if(){ xxxxxx 此处也是块级 })
|
|
此处的let是一个单独的作用域,因此结果是 abc 输出了三次,每次迭代循环时都创建一个新变量,并以之前迭代中同名变量的值将其初始化,此时的let作用类似于闭包。
变量提升的现象:在同一作用域下,变量可以在声明之前使用,值为 undefined,(ES5时 var 会出现变量提升,ES6 使用直接console一个未声明的值会报错Uncaught ReferenceError: xxxxxx is not defined)
暂时性死区和不能变量提升的意义:为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
let、const不允许在相同作用域内,重复声明同一个变量
|
|
) 来代替普通字符串中的用双引号和单引号。简单的说模版字符串就是用来处理一些特殊的字符、数据展示、react模版时用来占位的一种特殊写法,以一种更优雅的方式来表示。
|
|
|
|
Name/Value
Expires
Expires 用于设置 Cookie 的过期时间。比如:
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
当 Expires 属性缺省时,表示是会话性 Cookie,像上图 Expires 的值为 Session,表示的就是会话性 Cookie。当为会话性 Cookie 的时候,值保存在客户端内存中,并在用户关闭浏览器时失效。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期 Cookie 也会被保留下来,就好像浏览器从来没有关闭一样。
与会话性 Cookie 相对的是持久性 Cookie,持久性 Cookies 会保存在用户的硬盘中,直至过期或者清除 Cookie。这里值得注意的是,设定的日期和时间只与客户端相关,而不是服务端。
Max-Age
- Max-Age 用于设置在 Cookie 失效之前需要经过的秒数。比如:
- Set-Cookie: id=a3fWa; Max-Age=604800;
- Max-Age 可以为正数、负数、甚至是 0。
- 如果 max-Age 属性为正数时,浏览器会将其持久化,即写到对应的 Cookie 文件中。
- 当 max-Age 属性为负数,则表示该 Cookie 只是一个会话性 Cookie。
- 当 max-Age 为 0 时,则会立即删除这个 Cookie。
- 假如 Expires 和 Max-Age 都存在,Max-Age 优先级更高。
Domain
Path
Path 指定了一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 Cookie 首部。比如设置 Path=/docs,/docs/Web/ 下的资源会带 Cookie 首部,/test 则不会携带 Cookie 首部。
Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL。
Secure属性
HTTPOnly
SameSite
SameSite属性用来限制第三方 Cookie,减少安全风险,有三个值:
Strict
Lax
None
从上图可以看出,对大部分 web 应用而言,Post 表单,iframe,AJAX,Image 这四种情况从以前的跨站会发送三方 Cookie,变成了不发送。
Post表单:应该的,学 CSRF 总会举表单的例子。
iframe:iframe 嵌入的 web 应用有很多是跨站的,都会受到影响。
AJAX:可能会影响部分前端取值的行为和结果。
Image:图片一般放 CDN,大部分情况不需要 Cookie,故影响有限。但如果引用了需要鉴权的图片,可能会受到影响。
临时方案可设置 SameSite 为 None,必须同时设置Secure属性 (Set-cookie: key=value; SameSite=None; Secure)
合理的解决方案简单总结应该是按照谷歌浏览器规则:
7月14日稳定发布Chrome 84的同时恢复SameSite Cookie的强制实施,同时对Chrome 80+启用强制实施。
cookie的校验更加严格,SameSite属性默认值由None变为Lax
adb install 或sudo npx react-native run-android
安装apk包adb reverse tcp:8081 tcp:8081
,然后运行sudo npx react-native run-android
然后出现错误: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]
sudo npx react-native run-android
安装Android APIv29 FileNotFoundException EACCES (Permission denied)
修改application 配置:android:requestLegacyExternalStorage="true"
android > gradle.properties
=> FLIPPER_VERSION=0.39.0
要想有一个效率的开发效果,必然需要一个效率的开发工具,因此开发工具和一些基础的插件已经成为开发者必备的工具,比如前端需要VSCode、WebStorm等,而后端则需要对应不同的语言使用不同的编辑器,比如Go用Goland、Java使用Idea、Php使用PhpStorm等。
这里只介绍前端开发的一些基础工具,比如VSCode插件、Google Chrome插件。
前端开发工具:
由于作者使用的是VS Code,所以也推荐此工具,简洁方便,外加强大的插件功能,让开发效率可以更高,当然玩法也变的更多。
VS Code 需要哪些主题和基础的插件
谷歌Chrome 插件
什么是ES6?
入门文档推荐
什么是flex布局?
flex布局教程指南
Css3 Flexbox布局口诀
延伸阅读
React 基础
拓展使用第三方教程
Redux、Store、Saga、Reducer基础
拓展使用替代Redux方案,Rematch
有了以上基础,写基础的页面应该不是啥大问题,而对于RN开发,则需要学习对应的文档,了解一些基础的UI组件使用、组件复用、网络请求、flexbox布局、数据存储(AsyncStorage)、loading加载、手机适配、与原生IOS、安卓交互等。
往远了说,在一切页面布局开始写的时候,同时应该规划好接口的调用和字段、mock数据格式、数据的持久化、打包的方式、热更新等。
RN基础之环境安装
组件化和组件复用
数据请求和数据持久化
RN 路由、Bottom
automatically manage signing
,并选择开发者账号和已经配置的Profiles,然后设置Build Settings 搜索sign,设置debug和release的四个选项为Apple Development
,重新打包启动即可。Charles、Fiddler
等抓包工具查看返回情况和请求情况。设置外层宽度,然后定位文字,给文字设置css行高(lineHeight应大于外层文字高度)
error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by opening cleaaan.xcworkspace
碰到code 65 可能和ios包管理有关,cd ios && pod repo update && pod install && pod update
ios键盘遮挡问题,使用APSL下组件:[react-native-keyboard-aware-scrollview](https://github.com/APSL/react-native-keyboard-aware-scroll-view)
TypeError: Invalid attempt to spread non-iterable instance
mkdir release_ios
npx react-native bundle --entry-file index.js --platform ios --dev false --bundle-output release_ios/main.jsbundle --assets-dest release_ios/
release_ios
下的文件 添加到xcode项目,xx项目名 -》 add files to xxx项目 ->选择目录release_ios-》folders
类型为“Create folder references” -》 Add
cd android
./gradlew assembleRelease
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
更多详细操作步骤推荐参考:
Notice:Macos下可能需要sudo
/当前项目名/android/app/src/main/AndroidManifest.xml
,增加配置在application中 android:usesCleartextTraffic="true"
macos/linux 设置中国镜像: 每次都要先执行一次 (export PATH=”$PWD/flutter/bin:$PATH”)
然后运行flutter doctor -v 更新版本
flutter 环境之java环境,必须使用jdk8,否则会一直提示升级。
git clone 加速
git config –global http.https://github.com.proxy socks5://127.0.0.1:7891
或者打开 .gitconfig 文件,输入下面配置
[http “https://github.com“]
proxy = socks5://127.0.0.1:1086
Waiting for another flutter command to release the startup lock…
CDN: trunk URL couldn’t be downloaded:
https://raw.githubusercontent.com
强类型语言,声明后无法改变
var z;
z = "hello world";
// 下面代码在dart中会报错,因为变量t的类型已经确定为String,
// 类型一旦确定后则不能再更改其类型。
z = 1000;
dynamic和Object
//可以省略String这个类型声明
final str = “hi world”;
//final String str = “hi world”;
const str1 = “hi world”;
//const String str1 = “hi world”;
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
Dart函数声明如果没有显式声明返回值类型时会默认当做“dynamic处理”,注意,函数返回值没有类型推断!
对于只包含一个表达式的函数,可以使用简写语法
bool isNoble (int atomicNumber)=> _nobleGases [ atomicNumber ] != null ;
var say = (str){
print(str);
};
say(“hi world”);
void execute(var callback) {
callback();
}
execute(() => print(“xxx”))
String say(String from, String msg, [String device]) {
var result = ‘$from says $msg’;
if (device != null) {
result = ‘$result with a $device’;
}
return result;
}
测试=》say(‘Bob’, ‘Howdy’); //结果是: Bob says Howdy
测试=> say(‘Bob’, ‘Howdy’, ‘smoke signal’); //结果是:Bob says Howdy with a smoke signal
//设置[bold]和[hidden]标志
void enableFlags({bool bold, bool hidden}) {
// …
}
enableFlags(bold: true, hidden: false);
注意,不能同时使用可选的位置参数和可选的命名参数
Dart类库有非常多的返回Future或者Stream对象的函数。 这些函数被称为异步函数:它们只会在设置好一些耗时操作之后返回,比如像 IO操作。而不是等到这个操作完成。
async和await关键词支持了异步编程,允许您写出和同步代码很像的异步代码。
Future
Future API及特性 例子讲解
// 延迟2s返回结果:”hi world!”
Future.delayed(new Duration(seconds: 2),(){
return “hi world!”;
}).then((data){
// 执行成功走这
print(data);
}).catchError((e){
//执行失败会走到这里
print(e);
}).whenComplete((){
//无论成功或失败都会走到这里
});
// wait等待结果,4s后看到hello world
Future.wait([
// 2秒后返回结果
Future.delayed(new Duration(seconds: 2), () {
return “hello”;
}),
// 4秒后返回结果
Future.delayed(new Duration(seconds: 4), () {
return “ world”;
})
]).then((results){
print(results[0]+results[1]);
}).catchError((e){
print(e);
});
// 登陆之后保存用户信息
task() async {
try{
String id = await login(“alice”,”**“);
String userInfo = await getUserInfo(id);
await saveUserInfo(userInfo);
//执行接下来的操作
} catch(e){
//错误处理
print(e);
}
}
路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewController。所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。
导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作,而路由管理主要是指如何来管理路由栈。
// 路由跳转例子,调用Navigator.push方法,return到一个新的路由页面(NewRoute)
onPressed: () {
//导航到新路由
Navigator.push( context,
MaterialPageRoute(builder: (context) {
return NewRoute();
}));
},
路由之=》MaterialPageRoute
MaterialPageRoute继承自PageRoute类,PageRoute类是一个抽象类,表示占有整个屏幕空间的一个模态路由页面,它还定义了路由构建及切换时过渡动画的相关接口及属性。MaterialPageRoute 是Material组件库提供的组件,它可以针对不同平台,实现与平台页面切换动画风格一致的路由切换动画:
对于Android,当打开新页面时,新的页面会从屏幕底部滑动到屏幕顶部;当关闭页面时,当前页面会从屏幕顶部滑动到屏幕底部后消失,同时上一个页面会显示到屏幕上。
MaterialPageRoute使用参数介绍
MaterialPageRoute({
WidgetBuilder builder,
RouteSettings settings,
bool maintainState = true,
bool fullscreenDialog = false,
})
builder 是一个WidgetBuilder类型的回调函数,它的作用是构建路由页面的具体内容,返回值是一个widget。我们通常要实现此回调,返回新路由的实例。
settings 包含路由的配置信息,如路由名称、是否初始路由(首页)。
maintainState:默认情况下,当入栈一个新路由时,原来的路由仍然会被保存在内存中,如果想在路由没用的时候释放其所占用的所有资源,可以设置maintainState为false。
fullscreenDialog表示新的路由页面是否是一个全屏的模态对话框,在iOS中,如果
fullscreenDialog为true,新页面将会从屏幕底部滑入(而不是水平方向)。
路由之Navigator
判断用户是否登陆,onGenerateRoute属性
flutter如何使用配置文件pubspec.yaml(位于项目根目录)来管理第三方依赖包。
YAML是一种直观、可读性高并且容易被人类阅读的文件格式,它和xml或Json相比,它语法简单并非常容易解析,所以YAML常用于配置文件,Flutter也是用yaml文件作为其配置文件。
name: flutter_in_action
description: First Flutter application.
version: 1.0.0+1
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
// 新添加的依赖
english_words: ^3.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
flutter:
assets:
加载当前在pubspec设置的assets图路径,两种方法都可以
Image(
image: AssetImage(“images/my_icon.png”),
width: 100.0
);
Image.asset(“images/avatar.png”,
width: 100.0,
)
Image(
image: NetworkImage(
“https://avatars2.githubusercontent.com/u/20411648?s=460&v=4“),
width: 100.0,
)
Image.network(
“https://avatars2.githubusercontent.com/u/20411648?s=460&v=4“,
width: 100.0,
)
const Image({
…
this.width, //图片的宽
this.height, //图片高度
this.color, //图片的混合色值
this.colorBlendMode, //混合模式
this.fit,//缩放模式
this.alignment = Alignment.center, //对齐方式
this.repeat = ImageRepeat.noRepeat, //重复方式
…
})
官方给出的一些原则可以帮助你做决定:
React中提出一个重要思想:状态改变则UI随之自动改变,而React框架本身就是响应用户状态改变的事件而执行重新构建用户界面的工作,这就是典型的响应式编程范式,下面我们总结一下React中响应式原理:
开发者只需关注状态转移(数据),当状态发生变化,React框架会自动根据新的状态重新构建UI。
React框架在接收到用户状态改变通知后,会根据当前渲染树,结合最新的状态改变,通过Diff算法,计算出树中变化的部分,然后只更新变化的部分(DOM操作),从而避免整棵树重构,提高性能。
上文已经提到React Native 是React 在原生移动应用平台的衍生产物,那两者主要的区别是什么呢?其实,主要的区别在于虚拟DOM映射的对象是什么?React中虚拟DOM最终会映射为浏览器DOM树,而RN中虚拟DOM会通过 JavaScriptCore 映射为原生控件树。
JavaScriptCore 是一个JavaScript解释器,它在React Native中主要有两个作用:
而RN中将虚拟DOM映射为原生控件的过程中分两步:
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)
常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6 和 AES
常见的非对称加密算法:RSA、ECC (移动设备用)、Diffie-Hellman、El Gamal、DSA (数字签名用)
常见的 Hash 算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
分组加密算法中,有ECB,CBC,CFB,OFB这几种算法模式
网络安全通信中要用到两类密码算法,加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称密码算法有时又叫传统密码算法、秘密密钥算法或单密钥算法,非对称密码算法也叫公开密钥密码算法或双密钥算法。对称密码算法的加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。
对称算法又可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64位――这个长度既考虑到分析破译密码的难度,又考虑到使用的方便性。后来,随着破译能力的发展,分组长度又提高到128位或更长。
常用的采用对称密码术的加密方案有5个组成部分:
分组加密算法中,一般有ECB,CBC,CFB,OFB这几种算法模式。
DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种对称密码算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,三十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。
DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8 位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。其中有极少数被认为是易破解的弱密钥,但是很容易避开它们不用。所以保密性依赖于密钥。
DES加密的算法框架如下:
DES解密过程:
加密工作模式:ECB、CBC、CFB、OFB
ECB 电子密码本模式:Electronic codebook 每块堵路加密
优点:分块处理 并行处理
缺点:同样的原文得到相同的密文 容易被攻击
CBC 密码分组链接:Cipher-block chaining 每块加密依赖前一块的密文
优点:同样的原文得到不同的密文 原文微下的改变影响后面全部密文
缺点:加密需要串行处理 误差传递
CFB Cipher Feedback (CFB)/密文反馈模式
OFB Output Feedback (OFB)/输出反馈模式
DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。M一般都应采用信息的HASH值。DSA加密算法的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。其安全性与RSA相比差不多。
DSA 一般用于数字签名和认证。在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
椭圆曲线密码学的主要优势是在某些情况下它比其他的方法使用更小的密钥 — — 比如RSA加密算法 — — 提供相当的或更高等级的安全。椭圆曲线密码学的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。
椭圆曲线密码学,是一种建立公开密钥加密的算法,也就输非对称加密.类似的还有RSA,EIGamal算法等.ECC被公认为在给定密钥长度下最安全的加密算法.
双线性映射解释:在数论中,一个双线性映射是由两个向量空间上的元素,生成第三个向量空间上一个元素之函数,并且该函数对每个参数都是线性的。
公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥(其实这里密钥说法不好,就是“钥”),一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。–wiki百科
单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
SHA-1 与 MD5 的比较 :
因为二者均由 MD4 导出,SHA-1 和 MD5 彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
对强行供给的安全性:最显著和最重要的区别是 SHA-1 摘要比 MD5 摘要长 32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对 MD5 是 2128 数量级的操作,而对 SHA-1 则是 2160 数量级的操作。这样,SHA-1 对强行攻击有更大的强度;
在管理方面:公钥密码算法只需要较少的资源就可以实现目的,在密钥的分配上,两者之间相差一个指数级别(一个是 n 一个是 n2)。所以私钥密码算法不适应广域网的使用,而且更重要的一点是它不支持数字签名;
在安全方面:由于公钥密码算法基于未解决的数学难题,在破解上几乎不可能。对于私钥密码算法,到了 AES 虽说从理论来说是不可能破解的,但从计算机的发展角度来看。公钥更具有优越性;
从速度上来看:AES 的软件实现速度已经达到了每秒数兆或数十兆比特。是公钥的 100 倍,如果用硬件来实现的话这个比值将扩大到 1000 倍。
对称加密优缺点:对称加密相比非对称加密算法来说,加解密的效率要高得多、加密速度快。但是缺陷在于对于密钥的管理和分发上比较困难,不是非常安全,密钥管理负担很重。
非对称加密优缺点:安全性更高,公钥是公开的,密钥是自己保存的,不需要将私钥给别人。缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
代码托管已上传到Github,请访问连接查看:Go语言实现加密算法
参考:
]]>HomeBrew
Xcode命令行工具
go-ethereum
Ganache
nodejs和npm
Truffle
VsCode
如果已经安装请忽略本步骤
请打开https://brew.sh/,然后复制红框内内容: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ethereum
检测是否安装完成:输入geth -h,如果出现下图所示,则代表已经安装完成
brew install node
node -v 检测是否已经安装成功
npm -v
npm install -g truffle
truffle -v 检测是否安装成功
浏览器中打开下面的链接,https://www.trufflesuite.com/ganache
下载Ganache for MacOS ,然后点击下载后的dmg包,依次按步骤执行即可。
然后启动此软件,就可以进行相关调试了,如下图
然后安装插件,先点击步骤1,然后在步骤上直接搜索当前要安装的插件名称,然后点击install即可
首先上述软件已经安装成功,然后打开Ganache客户端,可以看到已经分配的测试网账户和一些余额。
然后打开终端,创建一个目录mkdir blockchain-test
使用前面安装的truffle创建项目,这里推荐使用truffle box 模式,它会带一些自动的事例,具体可以看文档和一些已经存在的项目:https://www.trufflesuite.com/boxes
这里我们以pet-shop,首先执行:sudo truffle unbox pet-shop
contracts/ : 包含所有項目中智能合約 Solidity 代码,其中有事例 Migrations.sol 智能合約,容后再介紹;
migrations/ : 主要是 Truffle 用与部署智能合約的一个迁移命令集;
test/ : 包含 JavaScript 和 Solidity 的 test cases;
truffle-config.js : Truffle 的一些设置,比如端口、测试网、正式网等;
node_modules : 是一些安装的基础包
bs-config.json:是智能合约的编译鲁姆
src:是项目的主入口文件
然后分别依次执行 :
然后就可以看到程序已经跑起来:
2017年,一个叫Block.one的公司开发了一个叫EOSIO的软件。为了开发这个软件,Block.one进行了一个历时350天的众筹,最后募集资金超过40亿美元。
EOSIO这个软件是后来的EOS-Mainnet和其他区块链网络(BOS、Telos等等)构建网络的基础工具。
EOS-Mainnet,也就是EOS主网,是我们目前使用最广泛的基于EOSIO软件的区块链网络。网上听说的很多EOS Dapp(Decentralized Application,去中心化的app)都是运行在EOS主网上,大多数人一说EOS,基本上指的就是EOS主网。
EOS是EOS主网上的原生代币的符号,EOS的数量体现了你在EOS主网上可使用资源和可参与治理的多少。EOS本身具有价格,可以在各大交易所购买。
在EOS上,账户类似于用户名,所有的操作都是以账户为基础的,转账、投票、更新信息,参与Dapp等等。账户需要注册,至多12位字符。
如何证明这个账户是属于你的而不是别人的呢?这个就需要用到公钥和私钥,用互联网来类比的话就是密码,不过这个密码是由公钥和私钥两部分构成的。
形象地理解,公钥和私钥就相当于锁和钥匙,私钥,也就是钥匙,掌握在你自己手里;公钥,也就是锁,和账户绑定。如果你想在账户里进行操作,就需要用你手里的私钥和公钥匹配,如果匹配上了,那么账户就认为你是所有者。
实际上,EOS的账户系统还可以更加复杂,比如给予每个公钥/私钥对不同的权限(Owner和Active),对一个账户就行多人共管(Multi-sig,多签)等等,暂时先不展开了。
注意,一个公钥/私钥对可以同时控制多个账户。
(三)钱包
常用的钱包,PC端和国外主要用Scatter,手机端和国内主要用TokenPocket、Meetone。这些可以通过他们的官网下载。
每个EOS账户里面存在着三者资源,所有的操作都需要花费这三种资源,可以理解,这三种资源是你使用EOS网络的成本。这三种资源叫做计算(CPU)、存储(RAM)和网络(NET)。
项目 | 传统含义 | EOS上含义 |
---|---|---|
计算(CPU) | 中央处理单元,指的是负责在计算机中执行指令和处理信息的硬件 | 一种按时间计价的资源(单位:微秒),用来衡量EOS节点应该对你帐户中的交易确认所投入的时间 |
网络(NET) | 互联网带宽 | 一种以空间计价的资源(单位:字节),用来衡量当在P2P层上传输数据时需要多少区块的网络描述来存储你的交易数据 |
存储(RAM) | 存储是用来存储云平台上的所有数据。RAM是指运行内存,速度更快,但储存是暂时的,断电后内容就会消失 | RAM不再是临时存储,而是作为主储存层,用来储存所有的数据。相当于是让储存速度更快的内存(RAM)充当了硬盘的功能。在RAM中存储数据库,可以让读取数据的速度更快 |
安装 brew tap eosio/eosio
brew install eosio
卸载 brew remove eosio
wget https://github.com/EOSIO/eos/releases/download/v1.8.6/eosio_1.8.6-1-ubuntu-18.04_amd64.deb
sudo apt install ./eosio_1.8.6-1-ubuntu-18.04_amd64.deb
wget https://github.com/EOSIO/eos/releases/download/v1.8.6/eosio_1.8.6-1-ubuntu-16.04_amd64.deb
sudo apt install ./eosio_1.8.6-1-ubuntu-18.04_amd64.deb
wget https://github.com/EOSIO/eos/releases/download/v1.8.6/eosio-1.8.6-1.el7.x86_64.rpm
sudo yum install ./eosio-1.8.6-1.el7.x86_64.rpm
cd /data mkdir development-eos
cd development-eos 进入开发目录
keosd &
如果成功则会看到如下截图:
nodeos -e -p eosio \
--plugin eosio::producer_plugin \
--plugin eosio::chain_api_plugin \
--plugin eosio::http_plugin \
--plugin eosio::history_plugin \
--plugin eosio::history_api_plugin \
--filter-on="*" \
--access-control-allow-origin='*' \
--contracts-console \
--http-validate-host=false \
--verbose-http-errors >> nodeos.log 2>&1 &
cleos wallet list
不出意外应该会返回一个空的数组,当前我们并没有创建钱包
brew install eosio.cdt
卸载CDT brew remove eosio.cdt
wget https://github.com/EOSIO/eosio.cdt/releases/download/v1.6.3/eosio.cdt-1.6.3-1.el7.x86_64.rpm
sudo yum install ./eosio.cdt-1.6.3-1.el7.x86_64.rpm
卸载CDT sudo yum remove eosio.cdt
然后执行 cd eosio.cdt ./build.sh
sudo ./install.sh
首先执行创建钱包的命令:cleos wallet create –to-console , 此时cleos会返回一个密码,你可以存在任何地方,后续以备使用。
打开一个eos钱包:cleos wallet open
返回钱包的列表查看目前可以打开的钱包:cleos wallet list
打开之前首先需要解锁:cleos wallet unlock
然后在输入:cleos wallet list,会看到列表的钱包后面会增加一个*号,然后就可以在执行打开命令打开。
运行上述命令后会得到一个新的key: “EOS8PEJ5FM4LLLpHK…X6PypHu97kqGDJQY5Y”
在网页https://developers.eos.io/eosio-home/docs/wallets 的第五步输入上述得到的key就可以得到一个开发的Public key
使用命令分别创建bob和alice两个账户,YOUR_PUBLIC_KEY是之前步骤生成的key
cleos create account eosio bob YOUR_PUBLIC_KEY
cleos create account eosio alice YOUR_PUBLIC_KEY
运行命令后会反馈当前广播交易的消息
|
|
|
|
|
|
从 Go 1.11 版本开始已经开始支持Go Mod ,并且提供了包下载的解决方案,就是使用 https://goproxy.io/ 直接代理下载,官方设置方法:
macos/linux
|
|
|
|
|
|
Go 成功安装Gin框架并使用Go mod管理
]]>故乡安放不了灵魂
大家好,我是币聪(比特B小白)–詹强威
每天码字的非专业程序员,每晚不定点(21:50)为你罗列B圈那些事
认真写作第 18 天
投资理财是指投资者通过合理安排资金,运用诸如储蓄、银行理财产品、债券、基金、股票、期货、外汇、房地产、保险以及黄金等投资理财工具对个人、家庭和企事业单位资产进行管理和分配,达到保值增值的目的,从而加速资产的增长。
投资理财不等于简单的攒钱、存钱,把钱放在银行里,也不等于简单的炒股(股票买卖)。投资理财是根据需求和目的将所有财产和负债,其中包括有形的、无形的、流动的、非流动的、过去的、现在的、未来的、遗产、遗嘱及知识产权等在内的所有资产和负债进行积极主动的策划、安排、置换、重组等使其达到保值、增值的综合的、系统的、全面的经济活动。前者只是投资的一种具体行为,充其量为现金的使用。作为投资理财一部分的现金管理要比它复杂得多,也难得多。–自MBA智库
国内很多人都说:“富不过三代”,其实是有原因的,不注重理财和资产管理,只会慢慢走向衰落,因此理财对于千禧一代或许是新的机会,可以选择基金、股票、数字币…
改革开放40年来,已经早就了很多很多的已经成功的人士,而也给千禧一代带来了巨大的压力,90后、00后已经成为了不敢生、不敢老、不敢病、不敢死。总是越想这个社会,就越觉得惨。Z世代2亿人、银发族2亿人、中产白领3亿人、小镇青年2亿人,无不都面临了房价、生活、上学、养孩子等需要花钱的地方,然而这代人并未有多高的个人资产,如果没有一个好爸爸,那这辈子可能就是房奴、车奴、奶粉奴,甚至只能维持自己的生活,而这一切就是这个社会的现状,甚至更凄惨。
作为21世纪的莘莘学子,大多数人都活在了互联网时代,身边有数不尽的娱乐和消耗时间的代替品,已经不在是40年前那个只能玩泥巴的时代,有人说成功的人,一定是有恒心切又付出行动的人,而“tittytainment”让更多的年轻人迷失了自我,他们一直沉迷在se情、网络游戏、看热闹打屁、刷抖音、刷偶像剧、真人秀等娱乐活动,无不沉浸在娱乐的世界,不知不觉时间都被大量的app占用。与此同时也有一部分在默默的努力,他们每天5点起床看书、学英语,乘坐地铁和公交时仍然在用小本本学英语,也有人在绞尽脑汁去想策划案,这或许就是两极分化,一部分创造,一部分享受,而这个结果或许像滚雪球一样,越来越大。
很多失去,看似无奈,但都是自己的选择。
有人说:“选择大于努力”,当然这话得看是什么情况下,如果一个不努力的人,又何来选择,选择只是留给有准备的人而已,在有选择的情况下,作出正确的选择才是正确的。
19年,最早的90后已经快30了,而作为一个对自己有认知的人,或许你应该懂一点经济学、懂一点理财、懂一点金融、了解一下时政,虽说什么年龄干什么事,但是有些人就是早熟,眼光要比其他人更远,他的认知更高,知道自己应该需要什么,应该去奋斗什么。
19年很多人说是经济转型年,或许是下一次机会的到来,无论是制造业还是互联网,都需要进一步快速发展,而发展的背后肯定是需要政策支持,40年前成功的人可能都或多或少摸到了政策方针,而今的我们在这个大环境下,即使知道政策,依然没有办法去改变现状,因为贫富差距很大,根本做不出选择,只能安心的上好班,拿到那应得的工资然后算算房贷、花销、奶粉钱等等,或许这就是安于现状的结果,爱拼才有赢的机会,因此我们应该学会理财、学会让自己的资产变的更多。
年初以来国内股市和国外股市高开高走,而为何华尔街大佬还在担心?可能有人说是牛市来了,政策也放出来了,粤港湾、一带一路、万亿养老金、贸易战停战、房价调控都是刺激政策,股市何愁不涨?或许是真想多了,涨的话也顶多是恢复性上涨,今年GDP预测6.3%比往年低了,无论怎么调控,贸易战或许已经输了,想想现在的人均收入是八几年时候美国的收入,差距是30年,太可怕了。在加上美联储降息周期还未看到,而特朗普的商业强势手段,只会持续降息,或许到2021年下一任总统上任会出现更好的结果,即使是连任也是有降的可能。
所以说目前的股市即使涨也不会涨太久或者说是很多,而对于此种行情,或许买板块是一个选择,比如5G、人工智能、半导体、新材料、电池技术、区块链技术等相关概念股票。
股市飞起,房价不跌反涨,足以说明即使4-10线城市房价跌出翔,而1、2、3线城市房价也不会跌太多,刚需太多,旱的旱死涝的涝死。北上广深人在不断较少,纷纷回归故乡到2-3线城市,而这个原因或许是边际成本的增加,让互联网巨头不得不布局2-3线城市,减低开发和人员成本,同时刺激国内小城市经济,带动了商业和地产,同时增加了地方财政收入,真是一举多得。
对于大多数中产,或许买了车或房之后就不再有什么资产,然而有更多的人可能连投资都不懂,那么钱只会存放在银行,很多南方人认为,钱在银行就是在贬值,或许这就是认知不同,而对于钱生钱很多人还是走稳妥路线,不买股票、不炒币。可能08、15年股灾让很多新认识到股票的人都以为这是骗人的,根本不可能盈利。投机的人吓跑了,胆小的人不敢投资,国内股市20年仍然是低迷时期,都说股市对标经济,那么这样看来经济是真的很差。
作为一个会理财的人,不能把鸡蛋放到一个篮子里,因此投资则需要多元化,曾经说过43221配置资产,如果你是激进的投资者那么把4投到风险大的里面,如果你是稳健型那么把4投到稳定收益的里面。
会理财、会赚钱,不拿死工资,唯一的办法就是开辟自己的第二职业,无论是写作还是视频制作,或者是糕点师等职业,总之你需要在工作之外还有一个感兴趣的事,或许这份投资会得到意想不到的收益。偏执狂不止是偏执,也是成功的一部分。
Notice:
1.数字货币目前买币只买比特币和以太坊
2.股票只买概念股(5G、半导体、新材料、环境治理等)
3.房地产买2-3线城市,或新一线城市(杭州、南京、成都、苏州、合肥),在就是粤港湾地区肇庆或许是不错的选择
4.多读书提高认知,发现新的投资
风险警示:币聪所有文章都不构成投资推荐,仅代表个人观点,如有异议请联系官方,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。
币聪(比特B小白)詹强威:火B资讯签约作者、金色财经、千克、今日头条、企鹅号、加密圈、32know、支点、币乎等平台专栏作者
推荐文章:
币聪看点:币圈独角兽,coinbase上架的币才是值得抄底的币吗?
币聪:提升自己的边界和认知,在加上坚持,或许这样的你才会成功
币聪行情:卡尔达诺ADA支撑位0.035美元还能撑多久,ADA会在2019年创下新的历史新高吗?
]]>