About Web SPA Data Flow

Catalogue
  1. 1. web应用数据流的类型
    1. 1.1. 单向数据流
  2. 2. Observable & RxJS
    1. 2.1. RxJS 的入门级教程
  3. 3. 参考阅读

web应用数据流的类型

什么场景下需要关心数据的变动?

单向数据流

Observable & RxJS

Observable 是 TC39 提给 ECMAScript 的一个标准库提议,目前仍处于 Stage-1 草案阶段。根据 tc39/proposal-observable 的说明,RxJS 是当前对于 Observable 草案的一个实现。

RxJS 的入门级教程

让我们一起来学习 RxJS | 饿了么

参考阅读

Share

Webpack 指南(1. 入门篇)

webpack 基本概念

webpack 是目前非常流行的前端资源(JS/CSS/IMG/…)打包解决方案。它默认按照 ES2015 定义的模块机制来查找、打包文件,即对 importexport 声明进行相应的模块封装,而对于其他代码,则不做任何改动。如果想使用其他的 ES6 特性,现阶段需要借助于 Babel 这样的编译工具。

Read More

Share

Play Music with SoX on MacOS

Catalogue
  1. 1. 基本使用
  2. 2. 单曲循环
  3. 3. 参考阅读

基本使用

今日突发奇想,想在命令行下播放音乐。找到了一个现成的程序,SoX(Sound eXchange)。

Mac 下面执行下面的命令即可安装:

1
brew install sox

安装好之后,可以通过 play 命令来播放音乐(这首歌是在我博客另一篇博文HTML5 audio 实验里面用的音乐):

1
$ play ~/Downloads/naruto_xia_ri_xing.mp3

效果如下:

单曲循环

1
play ~/Downloads/naruto_xia_ri_xing.mp3 repeat 0

repeat 后面加上希望循环的次数,0表示无限循环。任何时候想要停止,按下 ctrl c 即可。

参考阅读

Share

Koa Running On HTTP/2

HTTP2 概述

翻译自 Hypertext Transfer Protocol Version 2 (HTTP/2) 的简介:

HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.

HTTP/2 可以提升对网络资源的使用效率,并且通过压缩头部、在同一个连接里多路复用,来减少网络等待时间。HTTP/2 还引入了服务器推送的技术。

Read More

Share

关于MacOS文件系统的文件名大小写问题

背景

注意到这个事情,是因为今天在工作中发现了由此导致的一个构建问题。我在某个项目A上进行开发,该项目依赖了一个公共组件C。C是由其他同学负责维护,里面的JS源码、以及由 ES6 编译为 ES5 之后的部分文件名,是大写开头的(当然了,我个人是习惯于总是小写命名文件,用连字符处理长文件名情形),但是有个文件在创建的时候,用了小写开头的:pick.js,但是在引用的时候,是这样的:

1
import * from './Picker.js';

由于我们所有的开发人员都是配 Mac,因此在开发环境中,并没能发现这个隐藏的错误。只是在 A 项目中,发现这个文件是找不到的(我们使用了 webpack 进行构建):

1
Module not found: Error: Can't resolve './Picker' in 'some-file'

最后,通过修改文件名,就解决了这个问题。

Read More

Share

《JavaScript面向对象精要》笔记

一切皆对象

其他编程语言用栈储存原始类型,用堆储存引用类型,JavaScript 则完全不同:它是以一个变量对象追踪变量的生存期。原始值被直接保存在变量对象内,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
page 2

例如,所有的 JavaScript 对象都有一个方法 Object.prototype.valueOf(),该方法返回指定对象的原始值。如果我们一个简单的赋值语句:

1
var a = 1;

那么我们会发现变量 a 上面其实有很多方法(当然,大部分都是来自于其原型)。这就是因为该变量是通过变量对象进行追踪的,并不仅仅只有一个值(这也涉及一个概念,“原始封装类型”)。这也是 JavaScript “一切皆为对象”的理念。

Read More

Share

Linux常用命令笔记(二:变量)

变量

基本使用

Bash 里,每个变量的值都是字符串。变量名是区分大小写的。要输出变量值,可以用下面方法中的任意一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var="some test string."
# 方法①
# 美元符号 $ 用于提取变量值
echo $var
# 方法②
echo ${var}
# 方法③
echo "$var"
# 方法④
# 这种语法,非常像 ES6 里面的模板字符串
echo "${var}"

上面说到变量值都是字符串,那么如果想知道字符串的长度,可以通过 # 符号来获取:

1
2
var="some test string."
echo $#var # 输出 17

Read More

Share

PNG 图片压缩及若干工具对比

原始图片的体积是433KB,格式为 PNG,尺寸为 2560×920。【待补充图片测试用例】

这里共使用了5种工具:

  • 有损压缩工具 ImageOptim
  • GUI 工具 ImageOptim
  • Zopfli
  • OptiPNG
  • pngcrush

Read More

Share

用rescuetime来记录你在Macbook上的工作时间

在公司配的 MacBook 上装了 rescuetime 这个软件,记录自己的使用时间分配。到现在已经快两个月了,给出的数据感觉很有意思。

总结我个人工作的几个特点:

  • 平均每天用电脑的时间为8小时。平均来说,每天:10点30开始工作,中午吃饭、休息1.5小时,晚上吃饭0.5小时,厕所、接水等0.5小时,21点下班。
  • 每天的编码时间平均在5个小时左右。少于5小时,的确会感觉工作不饱和;而如果经常多于6小时,则会容易觉得累、无法持续太多天
  • 一天的工作时间不太可能全部用来进行编码,还有不少是花在了沟通(约1小时,公司的内部即时通信软件,QQ等)、读写文档(约1小时)上面

Read More

Share

2016 年度小结

2016年用一个字形容,是累。用一句话来形容的话,就是很累,同时学到了很多东西。当然,又老了一岁。

中国的城镇化进程势不可挡。当年逃离北上广的年轻人们,也许都已经在各自的二三线城市舒舒服服地过日子了。但是仍有另一批人,怀揣着自己或清晰或朦胧的梦想,来到一线奋斗。知乎上总是会有两群人为各自选择城市的哲学而争辩,看上去是一个非常因人而异的话题。

有一次,曾经的系队好友从家飞来北京度周末,闲聊时问我,“你在北京感到生活的乐趣了吗”。我只好告诉他,Negative,在这里更多的是工作、挣钱,哪有功夫生活啊。

女友常说以后要找个机会,最好是大段时间,好比几年,去家寺庙静静心。其实在这里,很多时候是孤独的。“小隐隐于野,中隐隐于市,大隐隐于朝”,屁民大隐无望,那么在大城市里忍受甚至享受孤独的我,也许已经到“中隐”的境界了呢。

下面就总结一下这一年,记下自己都完成了哪些“KPI”。

PS:上一年的总结在这里,记 2015

Read More

Share