最近在重构手上的一个 Angular 项目,之前是用的自己写的一个仿 Elm 架构的库来进行的状态管理,期间遇到了这些痛点:
- 样板代码太多
- 异步处理太过繁琐
- 需要单独维护一个 npm 包
其中,一、二两点是促使我重构的原因,第三点是促使我更换状态管理方案的理由(太懒了,根本不想去维护这个项目)。
在 F# 中,Record Type 是无法表达 `null` 语义的,例如,一个 Record 变量不能够使用 `null` 字面量赋值,接收 nullable(这里并不是指 BCL 中的 `Nullable<T>` 类型,而是指 C# 8.0 之前的引用类型)作为参数的函数不能使用 Record 作为参数: | |
```fsharp | |
type Foo = {Id: string} | |
let foo: Foo = null // 编译错误 | |
let foo = {Id: "2333"} // 编译通过 | |
let fooOp = Option.ofObj foo // 编译错误 | |
``` |
1月24日,F# 4.6 预览版正式公布,与以往一样,新版本的设计与开发过程是整个 F# 开源社区共同努力的结果,这次更新的具体讨论内容可以通过下面两个链接来查看:
这次更新的主要内容有:
npm set registry https://registry.npm.taobao.org && \ | |
npm set disturl https://npm.taobao.org/dist && \ | |
npm set sass_binary_site https://npm.taobao.org/mirrors/node-sass && \ | |
npm set electron_mirror https://npm.taobao.org/mirrors/electron/ && \ | |
npm set puppeteer_download_host https://storage.googleapis.com.cnpmjs.org && \ | |
npm set chromedriver_cdnurl https://npm.taobao.org/mirrors/chromedriver && \ | |
npm set operadriver_cdnurl https://npm.taobao.org/mirrors/operadriver && \ | |
npm set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs && \ | |
npm set selenium_cdnurl https://npm.taobao.org/mirrors/selenium && \ | |
npm set node_inspector_cdnurl https://npm.taobao.org/mirrors/node-inspector && \ |
npm set registry https://registry.npm.taobao.org && \ | |
npm set disturl https://npm.taobao.org/dist && \ | |
npm set sass_binary_site https://npm.taobao.org/mirrors/node-sass && \ | |
npm set electron_mirror https://npm.taobao.org/mirrors/electron/ && \ | |
npm set puppeteer_download_host https://storage.googleapis.com.cnpmjs.org && \ | |
npm set chromedriver_cdnurl https://npm.taobao.org/mirrors/chromedriver && \ | |
npm set operadriver_cdnurl https://npm.taobao.org/mirrors/operadriver && \ | |
npm set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs && \ | |
npm set selenium_cdnurl https://npm.taobao.org/mirrors/selenium && \ | |
npm set node_inspector_cdnurl https://npm.taobao.org/mirrors/node-inspector && \ |
nmap <Space> <Nop> | |
let mapleader = " " | |
" Options | |
set ignorecase | |
set smartcase | |
set scrolloff=5 " 5 lines above/below cursor when scrolling | |
set clipboard+=ideaput | |
set clipboard+=unnamedplus | |
set ideajoin |
(defcfg | |
input (device-file "/dev/input/by-path/platform-i8042-serio-0-event-kbd") | |
;; To understand the importance of the following line, see the section on | |
;; Compose-key sequences at the near-bottom of this file. | |
output (uinput-sink "KMonad: HP EliteBook 845 G8" "/usr/bin/sleep 1 && /usr/bin/setxkbmap -option compose:ralt") | |
;; Set the compose key to `RightAlt' | |
cmp-seq ralt | |
;; 5ms delay between each compose-key sequence press | |
;; todo: not available now | |
;; cmp-seq-delay 5 |
#!/usr/bin/pwsh | |
# meminfo -sort <name|value> -list | |
param( | |
[Parameter(Mandatory = $false)] [switch] $list = $false, | |
[parameter(Mandatory = $false)] [switch] $human = $false, | |
[Parameter(Mandatory = $false)] [ValidateSet('name', 'value')] [string] $sort = 'value' | |
) | |
# read /proc/meminfo |