TGINSIGHT CHAT
Hypercube's Channel
@SmartHypercube_channel
科技@SmartHypercube 随便发最近关注的东西 欢迎找我私聊讨论 可以使用 Telegram 的转发功能转发消息
最近帖子
第 16/21 页 · 共 244 条
发布 6月26日
我好喜欢 Haskell 的这两个特性:各种控制结构都是表达式,并且内部是独立的文法块。(其实 JS 也是这样啦)这两个特性使得变量名和变量的生命期管理非常轻松,配合上编译器的静态检查可以避免很多错误。 在一个已经有些复杂的 Python 函数中,我想把一个常数改成如果满足特定条件,就要在运行时打开一个文件并做一些计算来得到。简单的写法是这样: ... foo = 5 if dynamicFoo: count = 0 for line in open(...).readlines(): type_, n = line.split() if type_ == 'foo': count += int(n) foo = count ... 注意这段代码产生了很多个新变量:count, line, type_, n。任何一个如果在其他地方已经使用了,就会静默地覆盖掉,导致难以发现的错误,没有工具可以对此发出警告。有人可能会说正解是把这一段代码包装成单独的函数,但这就需要为这个只用一次、完全是为这里专用的函数起一个名字并且放在其他地方,导致阅读这段代码时增加几个步骤。 这段代码在 haskell 中可以写成这样: ... foo <- if dynamicFoo then do s <- readFileUtf8 ... values <- for (T.lines s) $ \line -> do case words line of ["foo", n] -> return (read (T.unpack n)) _ -> return 0 return (sum values) else do return 5 ... 除了 foo 以外的变量的作用域都被限制在各自的文法块中,并不会泄漏到外层。如果其他地方已经使用了同名变量,编译器还会对 name shadowing 发出警告。
发布 6月20日
最近对 Pixel Art 感兴趣,第一幅作品,不知道 USTC 的同学能不能看出来😂
发布 6月20日
发布 6月13日
我惊了,Haskell 中 callCC [1][2] 的类型居然没有 rank 2 polymorphism,这能用?? 具体而言,我认为 callCC :: forall a b. ((a -> ContT r m b) -> ContT r m a) -> ContT r m a 应该改成 callCC :: forall a. ((a -> (forall b. ContT r m b)) -> ContT r m a) -> ContT r m a 或者 callCC :: forall a. ((forall b. a -> ContT r m b) -> ContT r m a) -> ContT r m a (这两种定义用起来应该是一样的?) 查了一下,只有这里提到了这个问题,搞不懂为什么没人觉得需要改库中的定义。
发布 6月9日
看到 GitHub 宣布停止维护 Atom 编辑器,找了一下我上次调研编辑器的记录,是 2019 年 11 月,在那之前我主要在用 PyCharm,之后到现在一直在用 VS Code。考虑到最近几年 VS Code 的发展状况,觉得自己做了一个不错的选择😃当时我发的消息: 前一段时间我调研了现在的主流文本编辑器,并且重新评估了我的选择。我最终选中了 vscode,理由是我想要一个比较轻(也就是说不像 pycharm 那样,自带一整套各种语言的基于 language server 的类型提示和自动补全)、不需要创建“项目”就能临时随便编辑文件、易于上手、功能齐全、免费自由(我很难保证我不用喜欢的编辑器偶尔编辑商业项目)的选择。在最终 atom 和 vscode 的挑选中,atom 我花了很多时间捣鼓,连基本的语法高亮插件啥的都不 work,败给了一下子就配好了的 vscode
发布 6月6日
为了玩好城市天际线,最近对现实中的城市进行了一些观察,比如看海淀区的主要道路宽度和车道数、交叉口类型和占地面积、快速路和主干道的一般间距等,确实很有帮助。刚才忽然意识到我想找的这些知识都属于城市规划的范畴(以及比如住宅区和商业区分别分配多少面积、它们和道路的空间关系等等),于是读了《城市道路交通规划设计规范》(GB 502220-95),发现我想到的和我没想到的很多问题都已经被回答了😂
发布 6月3日
(发现总是记不住这些信息,整理出来备查) IEEE 754 双精度浮点数 53 位有效数字,指数范围 -1022 到 1023 最小非规约正数 ≈ 4.9e-324 最小规约正数 ≈ 2.2e-308 最大正数 ≈ 1.8e308 转换到 17 位十进制有效数字保证可逆 在指数范围内,15 位十进制有效数字转换到浮点数保证可逆 可以精确表示绝对值小于等于 2^53 ≈ 9.01e15 的所有整数 可以精确表示绝对值小于等于 4e22 的只有一位有效数字的整数 IEEE 754 单精度浮点数 24 位有效数字,指数范围 -126 到 127 最小非规约正数 ≈ 1.4e-45 最小规约正数 ≈ 1.2e-38 最大正数 ≈ 3.4e38 转换到 9 位十进制有效数字保证可逆 在指数范围内,6 位十进制有效数字转换到浮点数保证可逆 可以精确表示绝对值小于等于 2^24 ≈ 1.7e7 的所有整数 可以精确表示绝对值小于等于 8e9 的只有一位有效数字的整数 IEEE 754 半精度浮点数 11 位有效数字,指数范围 -14 到 15 最小非规约正数 ≈ 5.96e-8 最小规约正数 ≈ 6.1e-5 最大正数 = 65504 转换到 5 位十进制有效数字保证可逆 在指数范围内,3 位十进制有效数字转换到浮点数保证可逆 可以精确表示绝对值小于等于 2^11 = 2048 的所有整数 可以精确表示绝对值小于等于 40000 的只有一位有效数字的整数
发布 5月11日
自从升级了 Debian bullseye,和 Ubuntu 20.04 的机器之间用 rsync -z 传大文件时就总是会炸,应该是两边版本不兼容导致的。但不带 -z 的话有时真的很亏。rsync 就不能自动协商选个两边都支持的压缩算法吗?
发布 5月10日
拿到了一笔年化 3.2% 的信用卡分期,从来没见过这么低的分期利率
发布 4月2日
“已移除了通讯录的通讯录权限”
发布 3月27日
发布 3月27日
和 @Eguchiww 组装的打字机 2079 颗粒好多啊,花的时间比预期久。不过除了有点辛苦以外对这个套装非常满意👍