- 博客(388)
- 资源 (5)
- 论坛 (1)
- 收藏
- 关注
原创 自己动手实现区块链
简介本教程将带领大家从零开始开发一套可行的加密货币系统。开发的基本原则就是尽量的简单易懂。我们打造的这个项目的名称叫做Naivecoin。 用的开发语言是Typescript。总共分为六个章节。大家可以选择相应的分支进去查看相应的代码。如果你只是对区块链的实现原理感兴趣,那么你只需要看第一章就足够了,代码相当的简单,只用200行的代码就能让你一窥区块链的全貌。第一章:最小可行区块链这一章...
2019-06-23 11:53:14
2786
翻译 第六章 钱包管理界面和区块链浏览器
第三章 交易概览非对称加密和签名私钥和公钥交易概览交易outputs交易inputs交易数据结构交易id交易签名未消费的交易outputs未消费交易outputs清单更新交易有效性验证原始交易测试体验小结概览本章我们将引入加密货币中的交易机制。有了交易这个机制之后,我们的区块链将会从一个只有基本功能的区块链华丽转身成一个加密货币系统。 最终我们就能通过指定目标...
2019-06-23 11:50:05
518
翻译 第五章 自己动手写区块链之交易中继
概览交易池广播未决交易有效性验证记账更新交易池体验小结概览上一章节中,我们要给一笔交易记账的话,必须自己手动进行一次挖矿,才会把交易记录加到一个区块里面去。 这一章节中,我们将会引入未决交易中继的机制。有了这个机制之后,我们要进行一笔交易的时候,就不需要自己动手挖矿,而是将自己的交易发送到我们的区块链网络中去(即中继传递的概念),由其他节点在挖矿之后,将我们的交易记录加到他们...
2019-06-23 11:49:28
322
翻译 第四章 自己动手写区块链之钱包
第四章 钱包概览生成钱包钱包余额生成交易使用钱包测试体验小结概览钱包的目的是为了给用户创建更高层的抽象接口来对交易进行管理。我们最终的目的是让用户可以方便的:创建一个新钱包查看钱包的余额在钱包之间进行交易以上这些生效后,用户就不需要知道上一章节中描述的inputs和outpus这些交易的细节,就能对交易进行管理了。就好比在比特币网络中,你只需要把比特币打入对应地...
2019-06-23 11:48:27
243
翻译 第三章 自己动手写区块链之交易
第三章 交易概览非对称加密和签名私钥和公钥交易概览交易outputs交易inputs交易数据结构交易id交易签名未消费的交易outputs未消费交易outputs清单更新交易有效性验证原始交易测试体验小结概览本章我们将引入加密货币中的交易机制。有了交易这个机制之后,我们的区块链将会从一个只有基本功能的区块链华丽转身成一个加密货币系统。 最终我们就能通过指定目标...
2019-06-23 11:47:22
256
翻译 第二章 自己动手写区块链之工作量证明和挖矿
第二章 工作量证明和挖矿概览工作量证明拼图和难易度挖矿难易度共识时间戳校验累积难易度验证测试小结概览本章节我们将会在我们的玩具版区块链的基础上加入工作量证明(POW)的支持。在第一章节的版本中, 任何人都都可以在没有任何工作量证明的情况下添加一个区块到区块链中。 当我们引入工作量证明机制之后,一个节点必须要解开一个有相当计算量的拼图(POW Puzzle)之后,才能往区块链...
2019-06-23 11:46:01
263
翻译 第一章:自己动手写区块链之最小可行区块链
第一章:最小可行区块链概览区块数据结构区块哈希创世块创建区块保存区块链验证区块完整性选择最长链节点间通信操作节点架构运行测试小结概览区块链的基础概念非常简单, 说白了就是一个维护着一个持续增长的有序数据记录列表的这么一个分布式数据库。在此章节中我们将实现一个简单的玩具版的区块链。此章节结束时,我们的区块链将实现以下功能:实现区块和区块链结构定义实现可以将包含...
2019-06-23 11:44:40
561
原创 晓日程-首款打通微信和桌面的免费日历应用
新年伊始,新年新决心, 各大网站到处大肆标榜高效率人士是如何提高生产率的,其中一个共同点就是如何高效的利用好有限的时间。什么有效的单位时间划分,番茄工作法, GTD(Get Things Done),《清单革命》等方法论和书籍再次随着大家的唾沫子到处传播。 作为缺乏运动而免疫力底下且脑洞长期大开的程序员行列的一员,这些唾沫子很容易就通过眼耳口鼻直接进入我的大脑,触碰着我的show觉神经,逼迫本人给...
2019-03-13 10:21:30
526
原创 nodejs通过lodash合并去重由unixtime和Date组成的两个数组
1. 问题起源最近在实现一个API,其中有一部分功能是需要从Mongodb中取出一个由Date对象组成的数组,然后将客户端传过来的unixtime合并到该数组中,并且去重复。比如,假设从mongodb中取回来的数据中有一个叫做gaming的项,专门用来记录用户进入游戏的开始时间和退出时间。 那么mongoose的schema的定义将大概是这样的:const DeviceLogS
2017-04-28 13:32:48
6305
原创 小白学react之调用微信jssdk实战
本打算网上找个react调用微信的jssdk的实例进行学习的,但可惜搜索了半天而未果,只有一些基于其他框架的。估计是大牛们都觉得太简单或者太忙了,懒得提笔花几个小时来给我们做个Demo。对于处于快速学习年代的我们,一个可以运行起来的示例是多么的重要。希望本示例可以起到抛砖引玉的作用,让大家能快速的在react框架下体验jssdk的强大功能。通过上一篇《小白学react之网页获取微信用户信息》我们学
2017-04-23 11:30:12
7949
2
原创 小白学react之网页获取微信用户信息
通过上一篇《小白学react之EJS模版实战》我们学习了如何通过EJS模版生成我们高定制化的index.html文件。本篇我们将会继续延续我们的alt-tutorial项目的实战计划,去获取微信扫码用户的信息,并将头像显示在我们页面的右上角上。最终实战效果将如下所示。首先根据我们的网站url生成二维码,比如我们可以通过浏览器的FeHelper来生成:然后用户通过微信扫码:最后用户确定授权后获取到用户
2017-04-23 11:29:05
4823
原创 小白学react之EJS模版实战
通过上一篇《小白学react之由FOUC引发的一次webpack变革》我们学习了webpack的一些高级用法,比如如何生成哈希文件,如何将开发和生产配置分离,如何解决FOUC问题,以及如何运用html格式的模版来自动生成我们的index.html。但是在尝试将我们的应用部署到我的一个阿里云服务器上的时候却出现了问题。整个问题主要就是因为前端路由和访问路径不一致导致的,往下我就描述下应该如何解决。1.
2016-10-12 12:38:56
2973
原创 小白学react之由FOUC引发的一次webpack变革
上一篇《小白学react之页面BaseLayout框架及微信的坑》我们学习了如何为各个Components提供一个基础的父框架组件来处理不同页面的Title的显示和Style样式的显示。今天本人会尝试就自己踩到的一个坑开始,通过对webpack做进一步的修改,来学习更高级点的webpack相关的知识点。主要需要解决的问题如下:FOUC问题生产和开发配置分离自动生成index.html页面模版文
2016-10-12 12:37:26
1722
原创 小白学react之页面BaseLayout框架及微信的坑
上一篇《小白学react之SASS实战》我们学习了如何通过运用sass来为我们的应用页面“上色”,加入css的支持。但是我们到现在为止,每个页面的标题还是系统默认的,这多多少少显得不专业: 今天我的目标就是为所有页面提供一个通用的基础布局框架,以便在同一个地方控制不同页面的布局,比如背景颜色以及标题等。1. BaseLayout1.1 小白方案以修改标题为例,假如我们希望在About页面的时候标题
2016-10-12 12:35:55
1519
原创 小白学react之SASS实战
上一篇《小白学react之restful api获取服务器数据实战》我们学习了如何通过superagent的两个模块提供的功能,调用远程Express服务器上通过restful api提供的数据,并且学习了如何打造一个简单的Express api服务器。今天本人准备将我们的示例应用alt-tutorial加上css的支持,以便能更好的呈现。以下是最终效果:本篇开始之前,如果看官跟我一样对SASS没有
2016-10-12 12:34:19
2002
原创 小白学react之restful api获取服务器数据实战
通过上一篇文章《[小白学react之React Router实战](http://techgogogo.com/2016/09/react_router/)》我们学习了在React Router的基本功能,并根据路由功能建立了一个导航栏,可以方便的切换查看Locations和About。但是,这里Locations的数据还是在客户端模拟出来的。作为前端应用,和服务器端打交道是在所难免的了。所以,今天我
2016-09-29 15:38:02
7325
原创 小白学react之React Router实战
通过上一篇文章《[小白学react之altjs下的Action和Store](http://techgogogo.com/2016/09/altjs_action_store/)》我们学习了在alt框架下的Action和Store的特色,以及对alt-tutorial的代码做了重构,让其更简洁且各模块职责更分明。今天的计划是继续对alt-tutorial进行改造,通过实战来学习React Router的基
2016-09-29 08:06:33
957
原创 微信应用号开发知识贮备之altjs的Action和Store
过上一篇文章《[微信应用号开发知识贮备之打通React Component任督二脉](http://techgogogo.com/2016/09/altcontainer/)》我们学习了AltContainer是如何通过对Component职责的解绑,让Component的尽可能的关注在如何进行页面渲染的逻辑上去,而不需要去管该如何获取数据,该如何监听状态是否改变是否需要重新渲染的逻辑,从而让整个组件更容易重用
2016-09-27 20:43:02
709
原创 微信应用号开发知识贮备之打通React Component任督二脉
随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,我们很应该去拥抱这个趋势。这段时间在忙完工作之余准备储备一下这方面的知识点,以免将来被微信应用号的浪潮所淹没...
2016-09-25 20:45:11
1185
原创 微信应用号开发知识贮备之Webpack实战
随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,我们很应该去拥抱这个趋势。这段时间在忙完工作之余准备储备一下这方面的知识点,以免将来被微信应用号的浪潮所淹没通过上一篇《微信应用号开发知识贮备之altjs官方实例初探》,我们已经将altjs的官方实例所用到的依赖包升到最新,且修改的源码相应的部分来适应最新的依赖。
2016-09-24 10:49:58
2061
原创 微信应用号开发知识贮备之altjs官方实例初探
天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,自己之前从来没有做过web及webapp开发,所以这方面算是一名小白。时下最热的技术栈当然还是围绕着javascript的nodejs,mongodb,express, angularjs,HTML5,reactjs等了,这段时间在忙完工作之余准备储备一下这方面的知识点,以便不被微信应用号的浪潮所淹没。
2016-09-23 09:12:11
876
原创 开辟新战场,打造新的商业模式
在当今商业竞争异常激烈的年代,“差异化”和“革新”这两个词被广泛的交替使用,人们对它们之间的差别已经变得越来越模糊。比如我们经常会听到人说,我们要革新我们的商业模式,对我们的产品重新进行定位,找到有差异化的新商业模式和产品定位。其实它们之间是有着明显的区别的,“差异化”形容的是当前事物和旧事物还是基于同样的基础架构的,只是上层的表现形式等发生了改变。比如无论你一辆车的形状怎么变,无论你是烧汽油的兰博
2016-04-22 09:13:18
1621
原创 需求驱动还是技术驱动,大跃进的聊天机器人在开着一辆往历史倒退的车
F8大会的那个引爆的聊天机器人相信大家已经耳熟能详,但我们真的是需要这样的一个聊天机器人吗?Facebook是在大跃进穿越未来,还是在开着历史的倒车呢?李敖有话说:“是这样吗?真的是这样子吗?”
2016-04-22 09:10:33
6150
翻译 苹果产品设计中鲜为人知的10个细节
说到设计,无论是软件还是硬件上面,毫无疑问苹果对于细节上面的把控可以说无人能与之匹敌。在过去的几十年里,苹果对细节的注重可谓有口皆碑,很多细节上面的设计在无人指出的情况下很多消费者都没有注意到。令人惊讶的是,很多注重细节的iPhone和Mac的忠实拥趸也尝尝会忽略掉苹果设计上面的一些细节。下面我们列出10个可能会让你眼界大开的有趣却鲜为人知的设计细节,值得注意的是,这些细节事实上苹果也没有大肆的宣扬
2016-02-02 09:55:51
1810
翻译 云端办公?除了访问不了的谷歌和付费的微软,您其实还有其他选择
LibreOffice的商业合作伙伴Collabora和ownCloud共同发布了一个在线LibreOffice版本,其中ownCloud是一个类似Dropbox的开源文件存储和共享系统(其实就是一私有云产品)...
2015-12-17 10:14:43
1880
翻译 如日中天的Uber究竟是用什么开发语言做到的?
Uber的网站可靠性工程师Tom Croucher在最近于波兰举行的Node.js互动大会上详尽的对该公司所用的语言平台进行了阐述...
2015-12-17 10:04:35
2355
1
翻译 2分钟读懂大数据框架Hadoop和Spark的异同
谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考...
2015-12-17 09:55:35
2800
3
翻译 谁在吞噬着这个世界
Marc Andreessen曾抛出著名的言论说:“软件正在吞噬着整个世界”,这句话如今在IT界可谓是无人不知,无人不晓。同样是做风投的同行John Vrionis更进一步的断言说:“开源软件正在吞噬着整个世界”。那么何出此言?John是在大放阙词呢?还是言之有理呢?
2015-12-17 09:46:34
1767
原创 第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
到了现在,万事已经俱备,控件树这个东风也已经就绪了,我们也终于可以火烧赤壁大展拳脚,通过控件的ID在控件树中找到我们想要的控件了。 HierarchyViewer只允许用户通过控件的ID去查找控件,这比Robotium,UiAutomator和Appium这些框架是少了很多查找控件的方式的,但聊胜于无。 HierarchyViewer去尝试通过控件ID的方法叫做findViewById,它有两个重
2015-12-08 11:02:18
2052
1
原创 第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树
在上几节的描述中,我们把HierarchyViewer初始化好,也把ViewServer给装备好了。那现在距离获得一个控件去操作它是万事具备只欠东风了,欠了那一股春风了?欠了的是建立控件树这个东风,因为HierarchyViewer根据ID去获取一个控件之前是需要先建立好控件树,然后从该控件树上根据ID去查找到目标控件的。 那么这一小节我们就先去看下HierarchyViewer是如何去ViewS
2015-12-08 11:01:46
2059
原创 第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号
这里获取的版本号有两个,一个是ViewServer自身的版本号,一个是ViewServer当前使用协议的版本号。 我们这里为什么需要获取ViewServer版本以及其协议版本呢?其实主要原因是ViewServer有些功能在老版本上是不支持的,比如HierarchyViewer在列出当前所有Activity窗口的时候,针对获取焦点的窗口会根据不同的ViewServer协议版本而作不同处理,请看源码示
2015-12-08 11:00:57
1818
原创 第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
在获得ViewServer的运行状态后,如果ViewServer还没有启动的话,HierarchyViewer的setupViewServer的下一步就会去启动ViewServer。调用的方法是DeviceBridge.startViewServer,我们进去看看:190 public static boolean startViewServer(IDevice device) {191
2015-12-08 11:00:24
1771
原创 第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
上一小节我们描述了HierarchyViewer是如何组建ADB协议命令来实现ViewServer的端口转发的,在端口转发设置好后,下一个要做的事情就是去检测目标设备端ViewServer线程是否已经启动起来了。我们进入setupViewServer调用的DeviceBridge的isViewServerRunning方法:165 public static boolean isViewS
2015-12-08 10:59:54
1739
原创 第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发
在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这个方法: 39 private void setupViewServer() { 40 DeviceBridge.setupDeviceForward(mDevice); 41
2015-12-08 10:57:43
1660
原创 第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
既然要使用HierarchyViewer来获取控件信息,那么首先我们看下在脚本中,我们是怎么获得HierarchyViewer的,看下面一段脚本代码:1 device = MonkeyRunner.waitForConnection() 2 device.wake()3 device.startActivity(component="com.example.android.notepad/c
2015-12-08 10:56:02
1715
原创 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
HierarchyViewer库的引入让MonkeyRunner可以以面向控件的方式进行脚本编写,那么它是怎么做到这一点的呢?它的实现原理又是怎么样的呢?在这一小节开始我们就会开始一起揭开它的神秘面纱。 HierarchyViewer这个框架的工作需要ViewServer的协同工作,它们是以CS(Client-Server)架构来协同工作的。我们在上一章已经学习了如何让做为Server端的View
2015-12-08 09:18:28
1925
原创 第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
到此为止我们描述的MonkeyRunner对应用的点击拖放等操作都是直接通过指定坐标点来实现的,比如下面触摸一个坐标点为(60,90)的按钮的脚本例子:1 device.touch(60,900,MonkeyDevice.DOWN_AND_UP)代码14-1-1 直接使用坐标点操作应用 这样子做的话代码会存在以下几大缺点:缺乏易用性:要操作某个控件之前需要先想办法如通过工具来定位该控件的坐标点可
2015-12-08 09:17:42
1532
原创 第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结
最后我们对MonkeyRunner启动的过程做一个总结,当然,其中也包括启动Monkey,虽然它不属于启动过程的一部分:monkeyrunner这个shell脚本会先设置一些运行环境的系统属性保存到JVM的System.Propery里面然后该脚本会通过java -jar直接运行sdk下面的monkeyruner.jar然后操作系统直接回调到monkeyrunner在MonkeyRunnerSta
2015-12-08 09:16:19
1326
原创 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey
大家可能会觉得奇怪,为什么启动目标设备端的monkey进程会放在“运行测试脚本”这一节之后来阐述。 纵观前面整个MonkeyRunner的启动流程,我们看到并没有提及到monkey进程启动的地方。那么就奇怪了,monkey是什么时候被MonkeyRunner启动起来的呢? 我们的测试脚本一开始时几乎毫无例外的都需要执行一个调用:MonkeyRunner.waitForConnection(),如果
2015-12-08 09:15:42
1631
流媒体基本知识及流媒体服务器搭建知识大全
2015-01-06
流媒体及服务器搭建知识大全
2015-01-06
移动跨平台自动化测试框架Appium源码的控件哈希表优化问题求证
发表于 2015-01-30 最后回复 2015-01-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝