如何看待谷歌 Chrome 浏览器宣布将于 2020 年停止支持 Flash Player? 获取链接 Facebook X Pinterest 电子邮件 其他应用 - 八月 24, 2019 说实话 flash 这种技术几百年前就应该被淘汰了 (小声)只是还有一些古老的网站需要 获取链接 Facebook X Pinterest 电子邮件 其他应用 评论
Follow.is Feed Verification - 十月 12, 2024 This message is used to verify that this feed (feedId:68119418071751680) belongs to me (userId:67570460419266560). Join me in enjoying the next generation information browser https://follow.is. 阅读全文
给你的git仓库瘦身 - 九月 07, 2019 很久没有写博客了,最近遇到了一个git问题,比较典型,记录下来与大家分享。 我们使用git版本控制的时候享受了很多便利,不管是代码合并,分支提供给我们的并发,但我们也往往忽略了每次提交之后在我们本地项目根目录下.git文件夹里面的存储变化。我遇到的git“臃肿”问题就是因为在提交的时候把较大文本加入版本控制,在其他人拉取更新反推远程分支的时候,每一次都会加剧.git下面的objects的文件夹大小,最终的结果就是再也无法顺利从远程pull,也无法顺利clone该项目。 关于.git的产生和相关文件,可见此文的详细讲解:http://www.jianshu.com/p/fa31ef8814d2 。 简单的说,每一次提交修改的改变都会以文件的形式存储在本地项目根目录下的.git中,会在.git/objects下面形成一个Blob(一段二进制数据)文件记录。这意味着,即使你只改动了某个文件的一行内容,Git 也会生成一个全新的对象来存储新的文件内容。所以git仓库随着时间变化会自增长,我们往往忽视了这种潜在的危险。 下面来就我遇到的问题来思考解决方案,其实由于.git过大,我们可以从两种方向去思考,第一种治标不治本的方法:压缩git仓库。第二种删除git提交记录中大文件,在gc压缩。第一种方法是比较直接快捷的,可以使用命令:git gc --prune=now。 当你再次du -hs的时候会发现仓库大小有一定的变小。其实git自身在可承受范围内会自动用gc帮你压缩打包,所以除非真的遇到pull,push都困难的时候,可以不用手动执行。这个方法明显的缺点在于压缩的效果有限,且大文件还一直在之后的每次提交中,为以后埋下隐患。 本人更推荐第二种方法,大文件对象再删除。 先查找大文件,命令如下: git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" 例如删除nspatientList1.txt文件: git filter-branch --force --index-filter 'git rm -rf -... 阅读全文
Specifying Systems 第四章笔记 - 十二月 14, 2019 本章介绍一个先进先出 FIFO 系统。 4.1 内部结构的规范 一个 FIFO 队列内部是一个缓冲区,对外提供单个消息的入队与出队接口。对于外部接口,TLA+ 可以复用之前的模块,这类似于面向对象编程中实例的概念。我们复用上一章的模块 Channel InChan == INSTANCE Channel WITH Data <- Message, chan <- in InChan 现在是一个 Channel ,除了 Data 和 chan 通过相应的新标识符访问,其余标识符(以及运算符)通过 InChan!symbol 访问。 缓冲区用 TLA+ 的内置数据结构 Sequences 进行表示。 Sequences 表示一个有限序列,字面量用元组表示,并有如下的与之相关的标识符: Seq(S) 表示 S 集合能组成的所有有限序列。 Head(S) 、 Tail(S) 表示序列的首元素及剩余序列。 Append(S) 、 S \o T 表示序列与元素、另一个序列连接。 Len(S) 表示序列的长度。 了解上述语法后,可以把 FIFO 描述为三个组件:依次相连的入队接口、内部先进先出缓冲区、出队接口。FIFO 的状态转移将由相连两组件各自的状态转移以及两组件交互组成。 4.2 实例化的细节 与 EXTENDS 不同,实例化需要导入的所有符号(主要是 CONSTANT 、 VARIABLE 等关键词定义的标识符)都指定本模块中对应标识符。有以下几个方面需要注意。 4.2.1 实例化即替换 TLA+ 的实例化是进行表达式展开和替换。为了满足语法,原模块替换完成后,所有符号在本模块中都要有定义,这可以通过 EXTENDS 引入运算符等符号以及使用 <- 为原模块未匹配的符号指定本模块的标识符、表达式等符号来满足。 4.2.2 实例化的参数化 实例化时可以包含参数,即 InChan == INSTANCE Channel WITH Data <- Message, chan <- in OutChan == INSTANCE Channel WITH Data <- Message, chan <- out 可以使用 Chan(ch) ... 阅读全文
评论
发表评论