29 Matching Annotations
  1. Apr 2019
    1. 每一个实例对象,都有自己的属性和方法的副本。

      JavaScript 没有类,自然也就没有类变量,所以同一个原型对象的实例无法共做到数据共享

  2. Feb 2019
    1. 我们为 Right 定义 of 的原因是,如果一个类型容器可以 map,那它就应该 map。看上面的例子,你应该会对 of 通常的工作模式有一个直观的印象,而 Left 破坏了这种模式。

      因为 Left 表示 not Right,也就是错误 错误不应该继续 map

  3. Jan 2019
    1. 这样可以方便的进行单元测试,不需要模拟Api.fetch函数的具体返回结果。

      非模拟时,由redux-saga内部的调度器帮我们执行 next(在异步函数或副作用函数执行获得结果后);

      模拟时,由测试函数自己根据需要执行 next,所以说无需模拟 Api.fetch 函数的具体返回结果,从而为测试带来了方便

    1. 要注意的是,在saga模式中不能保证隔离性,因为没有锁住资源,其他事务依然可以覆盖或者影响当前事务。

      因为saga没有tcc的try阶段,try阶段要做的一件事就是锁住资源

    2. T1, T2, ..., Tj(失败), Tj(重试),..., Tn

      向后恢复:出错则撤销;

      向前恢复:出错则重试。

  4. Dec 2018
    1. 因此,Gamma表示的是对冲风险的难度

      Gamma 越大,则股价变动引起的 Delta 变化越难(速度越慢)

    1. 为了避免在时间处理上出现问题,核心就是统一输入输出时间的转化。因此解决的思路也是两个:

      前提条件:计算机或设备在投入运行之前,必须校准好本地时间(与服务器相同,或者与网络时间相同),同时,还要支持断电保存(RTC)或者连接NTP更新

  5. Nov 2018
    1. logger.debug

      suppose we have configured another category named "xxx" which has a appender named "cheese" that has been configured as an appender,

      then logger.debug.xxx("yyy") will output log as below:

      [date time] [DEBUG] [xxx] yyy

    1. 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

      XSS 是对客户端的攻击

      CSRF 是对服务端的攻击

    1. 这样启动时不需要和 Zookeeper 通讯获取 Worker ID. 做到了完全的去中心化

      分布式网络内的 workerid 有些情况下是通过一个中心服务器分配的

      如果我们使用 mac 地址,或者其它机器自身唯一属性作为 workerid,则可实现去中心化

    2. snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。这个算法单机每秒内理论上最多可以生成1000*(2^12),也就是400W的ID。

      41位毫秒时间戳 10位机器编号 12位毫秒内序列号

      单机 12位毫秒序列号 1 毫秒内最多生成 2^12 = 4096 个

      单机 1 秒内最多生成 409.6w 个

    1. 在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性。即使客户机在长时间无法与某一时间服务器相联系的情况下,仍可提供高准确度时间。

      难怪客户端配置里有很多个 server

    1. 所以,一旦数据存储在IPFS中,它就会是永久性的。比如我们经常会遇到的某个资源删除无法访问的问题。 这种情况,在IPFS上就不会发生。即便是把该站点撤销,只要存储该站点信息的网络依然存在,该网页就可以被正常访问。存储站点的分布式网络越多,它的可靠性也就越强。

      如果存储该信息的节点都下线了或删除了该资源,

      那么久真的访问不到了。

      不过该资源似乎只有建立者才有资格删除?

      既然建立者有资格删除,那么不是应该同步到整个网络吗?

      还是说,已上传的资源永远无法删除?

    1. Q: how can i ensure something remains online? A: you can do this by keeping one or several ipfs nodes online pinning the content you're interested in backing up, the more ipfs nodes pinning content, the better redundancy you get. Tools such as ipfs-persistence-consortium, pincoop, and ipfs-cluster on top of ipfs allow you to share the costs of bandwidth with other people or organizations. Then, protocols like Filecoin will allow you to just pay the network to do it for you (i.e. similar to how people pay "the cloud companies", but here you're paying the network itself). (Filecoin is not live yet)

      so if you want a bkup, you need to do it by yourself

    1. 换一种解释,预言机整个完整的工作流程是这样的,首先预言机从小米官方获取小米9A的电视价格,然后向特定区块链上的地址进行转账,并将价格信息写入交易备注,这样智能合约只需要查看特定地址的交易记录,就可以获取小米9A的价格了。而由于区块链会自动同步存储包含交易的区块,所以智能合约几乎只需要访问本地就能得到价格信息。既保证了访问效率,又保证了价格的一致性。

      所以预言机也是一个合约

    1. 例如,一个需求非常大的应用是一个用来对冲以太币(或其它密码学货币)相对美元价格波动的智能合约,但该合约需要知道以太币相对美元的价格。最简单的方法是 通过由某特定机构(例如纳斯达克)维护的“数据提供“合约进行,该合约的设计使得该机构能够根据需要更新合约,并提供一个接口使得其它合约能够通过发送一 个消息给该合约以获取包含价格信息的回复。

      合约调用合约

      注意:这里,后一个合约收维护自一个权威中心

    2. 下面这个示意图就是一个智能合约模型:一段代码(智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。  智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。

      智能合约可以理解为一种区块链的回调器。

      它监听数据副本上的数值和状态的变化,

      并根据变化自动执行预先编入的代码(合约)

  6. Sep 2018
    1. module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。

      也就是说:

      1. require 获得的是 module.export 对象;
      2. export === modue.export 指向同一块内存;export 是一个快捷方式,覆盖就没有意义;
      3. module.export 可以覆盖,这取决与需要暴露什么对象或方法;覆盖后 export 无效,因为 第 1 条;
  7. Aug 2018
    1. 有时候,上面四个 Accept 字段并不够用,例如要针对特定浏览器如 IE6 输出不一样的内容,就需要用到请求头中的 User-Agent 字段。类似的,请求头中的 Cookie 也可能被服务端用做输出差异化内容的依据。 由于客户端和服务端之间可能存在一个或多个中间实体(如缓存服务器),而缓存服务最基本的要求是给用户返回正确的文档。如果服务端根据不同 User-Agent 返回不同内容,而缓存服务器把 IE6 用户的响应缓存下来,并返回给使用其他浏览器的用户,肯定会出问题 。 所以 HTTP 协议规定,如果服务端提供的内容取决于 User-Agent 这样「常规 Accept 协商字段之外」的请求头字段,那么响应头中必须包含 Vary 字段,且 Vary 的内容必须包含 User-Agent。同理,如果服务端同时使用请求头中 User-Agent 和 Cookie 这两个字段来生成内容,那么响应中的 Vary 字段看上去应该是这样的: Vary: User-Agent, Cookie 也就是说 Vary 字段用于列出一个响应字段列表,告诉缓存服务器遇到同一个 URL 对应着不同版本文档的情况时,如何缓存和筛选合适的版本。

      也就是说,Vary 字段是给缓存服务器用的。

      比如说,如果没有 Vary 字段中的 User-Agent,

      缓存服务器就会不加区分地转发服务器的数据给客户端,

      这可能导致不同 User-Agent 的客户端收到不与之相对应的数据。

    1. Such behavior means that errors might be visible somewhere in the user interface, or maybe, when some operation is performed on the wrong value, but not at the moment when the real typo occurred.

      错误会等到它发作的时候才会显现, 而不是在它被定义或编译的时候。 这为错误的排查提供了障碍。

    1. Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。

      cookie 是整个会话对象都放在客户端,很容易看到(base64 只是压缩,并不是加密)。 session 是整个会话对象都放在服务端,只有一个 session id 副本放在客户端的 cookie 里,所以就算有人偷到了 session id 冒充,也看不到会话信息。

    1. 但是这可能会使调试变得更麻烦

      暂时还看不出来

    2. var sortUserTasks = R.compose(R.map(R.sortBy(R.prop("dueDate"))), activeByUser);

      从后往前看,从里往外看: activeByUser 处理数据返回的结果,传给 R.prop("dueDate") 函数——提取其中的 dueDate 属性的值的列表——再进行默认排序(R.sortBy)。 需要注意的是:R.map 是用于将里面包裹的函数用于对 activeByUser 返回的数据列表每个元素进行处理的。

    3. 注意到有什么不同了吗?这里没有提到任务列表。Ramda 代码只给我们函数(没有给数据参数)。

      尚未带入数据的函数可以进行任意组合,已经带入数据的函数可能已经得到结果,不能再组合——Ramda 的特点就在于,它是先函数参数,后数据参数,这意味着你能在组合各种功能函数获得最终所需要的函数后,再带入数据参数,获得最终的结果。

    1. `prop` takes two arguments. If I just give it one, I get a function back

      类似于偏函数

  8. Jul 2018
    1. 使用指导

        在 LBA Calculator LBA 中输入 sector 值,选择 512 B,即可计算出各个单位下的容量大小。

        如果是 Block 值,有些文件系统是一个 Block 1KB,有得则是 2KB 或 4KB,这里只能计算 4KB 的,所以要注意一下。

        CHS Calculator 还不知道怎么用。

    1.   正如其他人所指出的——所以本条回答本应作为他们回答的回复,但这样的话对小小的回复框而言又显得太长了——这个目录用于存放一些初始化脚本,通常是在系统启动的过程中执行,此时,你系统中的其他文件系统可能是只读的,或者根本都还没挂载上。

        文件系统会在系统启动完毕后挂载,正如初始化脚本也有可能在系统运行中的任何时候被运行(比如手动启动一项服务,或者开关一项运行等级等)。已经挂载了的 /lib/init 即使在变成只读的情况下,你也不应该将它卸载。如果不是处于实际的存储数据的过程,它不会占用太多的系统资源,所以它不是一个性能考虑的点。

        我是没看到你将自己的脚本放到里面会对系统产生什么损害啦,当然你的脚本必须经过良好的测试,并且还要确保你的脚本不要完全占用它,以免其他脚本要使用时使用不了,不过,实现同样的目的更安全的方式是创建你自己的 tmpfs 挂载点(理论上而言,这样的挂载点你想要多少有多少,而且它们只在存储数据的过程中才占用系统内存空间),或者也可以使用 /tmp,它同样也被挂载成 tmpfs 文件系统,而不占用实际的硬盘空间(译注:它占用的是内存)。

        当你在使用 tmpfs 文件系统作为临时数据的目录时,必须注意它也会占用系统内存空间,当内存不够用时,则会转移到交换空间(译注:交换空间可以理解为硬盘上的虚拟内存)。这就是为什么我通常使用的都是一块独立的硬盘空间,而不是 /tmp 目录(该目录什么进程放的东西都有,占用的空间可比我单独一个脚本占用的要多得多)。如果你大部分时间都拥有大量的“空闲”内存的话,就当我没说。需要注意的是,在诸如 freetop 一类的管理工具的输出信息中,tmpfs 文件系统存储的数据所占用的内存通常会被记录在 “cached” 一栏中——这点可以详见 In Linux, what is the difference between "buffers" and "cache" reported by the free command?

        补充:差点忘了……创建你自己的 tmpfs 文件系统挂载点,而不是使用 Debian 创建的用来存放标准脚本的目录的另一个原因是,这样你对发行版的依赖就少了,这意味着当你的脚本要迁移到其他配置环境下时,你所需要做的改动要相对小得多。

    1. Use eMMC in Data Reliability Mode Typical eMMC devices also should not be powered down during a write/erase cycle, as they can be prone to the same failures as an SD Card. However, the eMMC devices that Technologic Systems uses in our products include support for a "Write Reliability" mode, and a "psuedo SLC" mode. These modes can be access by setting a fuse on the eMMC device. With both of these enabled the eMMC only risks up to 512B during a write. In the event of a power loss that 512B of data would return the values from a previous write rather than corrupt or erased data like a typical SD card. Even in cases where the wrong data is present on the next boot, fsck is able to deal with the older data being present in a 512B block. The downsides to setting these modes are that it will about half the size of the eMMC module to 1.759Gib by default, and write speed will be slightly slower. Used with ext3/4 and the filesystem configured to journal data, this can provide a very robust system. This mode still has the tradeoff that any data not yet committed to disk will be lost.

      使用 eMMC 的数据可靠模式(可靠写入模式 + 伪 SLC 模式)可提高存储设备的断电耐受能力。