Sunday, September 12, 2021

V2EX - 技术

V2EX - 技术


不要再拿 Golang 与 Java 作比较

Posted: 12 Sep 2021 04:41 AM PDT

以下是我从《 Go 语言高级编程》一书中摘录的部分内容,简述了 Go 语言开发的初衷。

Go 语言最初由谷歌公司的 Robert Griesemer 、Ken Thompson 和 Rob Pike 这 3 位技术大咖于 2007 年开始设计发明,设计新语言的最初动力来自对超级复杂的 C++11 特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的 C 语言。到 2008 年中期,在语言的大部分特性设计已经完成并开始着手实现编译器和运行时,Russ Cox 作为主力开发者加入。到 2010 年,Go 语言已经逐步趋于稳定,并在 9 月正式发布并开源了代码。
Go 语言很多时候被描述为"类 C 语言",或者"21 世纪的 C 语言"。从各种角度看,Go 语言确实是从 C 语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想,并彻底继承和发扬了 C 语言简单直接的暴力编程哲学等。


从上面的描述可以看出,Go 语言的目标是占领一部分 c 和 c++的市场,和 Java 语言毫无关系,再拿来作比较就有点牵强附会了。

好失望,想在工作中写好代码真难。想得多了,容易过度设计导致项目延期;想少了代码又要被打回来重写。。。真难过,求大家骂骂我

Posted: 12 Sep 2021 04:38 AM PDT

如题,深受打击。

本人从业三年多了,一直用的 python 。

组里做 toB 的,业务细节非常非常非常复杂,

项目代码要求写代码要写单元测试,结果代码在本机都跑不通,

如果提交到 GITLAB 上,build 镜像就要十多分钟,还不算跑历史的 testcase,

好烦

Golang 的 http.DetectContentType 有更好的替代实现吗?

Posted: 12 Sep 2021 03:43 AM PDT

我发现 http.DetectContentType 无法识别出一个 mp4 文件的文件类型。

只会返回application/octet-stream

http.DetectContentTypenet/http 包提供的一个方法,可以用于识别文件的类型。但是目前看来支持并不完善。

在 GitHub 上看到有相关的讨论,但是貌似没有结论。

直接在命令行用 file 命令是没问题的。

# file 命令输出如下 ISO Media, MP4 Base Media v1 [IS0 14496-12:2003] 

ps.用过文件扩展名判断不靠谱,所以想通过文件头判断。

www.v2ex.com 域名被和谐了?

Posted: 12 Sep 2021 02:07 AM PDT

RT.

file 一张图片,输出了 JPEG 和 TIFF?

Posted: 12 Sep 2021 02:07 AM PDT

# file-5.33 JPEG image data, JFIF standard 1.02, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=7, orientation=upper-left, xresolution=98, yresolution=106, resolutionunit=2, software=Adobe Photoshop 7.0, datetime=2004:09:27 18:40:30], progressive, precision 8, 800x1027, frames 3 
  1. 意思是这张图片是 TIFF 转到 JPEG 的?
  2. 试了几个online meta/exif info viewer没查到 TIFF 字眼,还有其它网站吗?

第一篇技术博客:函数式编程和 Spark

Posted: 12 Sep 2021 01:12 AM PDT

前言

最近工作中开始用 Spark 了,完全是赶鸭子上架 0 基础。想着把自己的学习经历记录下,而且写点博客也对求职有帮助,就试着写了一篇,发现写这玩意确实很难啊,写了半天写得一塌糊涂。一方面是自己才疏学浅,刚毕业大学学的的东西也忘得差不多了;一方面是不太会写,写文章没有条理。

希望大家读完给点建议,挑挑错~ 面向的读者大概是 Spark 的使用者吧。

开篇

第一篇先讲讲函数式编程在 Spark 中的应用,因为理解函数式编程对理解 Spark 的一些原理还是很有帮助的。

函数式编程简介

函数式编程有两个比较重要的点,一个是无副作用,一个是 immutable 变量。

  1. 无副作用: f(x)=x + 1,对于这个函数,只要它的入参是 n,它的输出值永远都是 n+1 。因为这个函数不依赖任何外部的状态,只依赖入参。这一特性是 Spark 的 RDD 懒加载的理论基础。
  2. immutable 变量: 这个特性指的是,所有变量都应该是不可变的,在 Spark 中,RDD 就是不可变的。它和无副作用是 Spark 容错机制 lineage 的理论基础。

Transform,action 和懒加载( Lazy Loading )

编写过一些 Spark 程序的人,应该了解 Spark 有两种对 RDD/dataset 的操作。一种是 Transform 类型,包括 map,mapPartition 等;一种是 action 类型,包括 count,reduce 等。

看下这个例子:

val sampleRdd = sc.makeRDD(Array(1, 2, 3, 4), 2) val rdd2 = sampleRdd.filter((str) => str >= 2) val count = rdd2.count() 

spark 会等到调用 count()的时候才执行 filter(),这就是懒加载,只有用户真正需要结果的时候才执行全过程。所有 transform 类型的操作都是懒加载的,而 action 类型会触发 rdd 上的所有 transform 。懒加载可以让程序集中运行,节约资源,而且在 Spark 这样的分布式程序里可以节约大量的通信调度时间。

为什么函数式编程的无副作用的对懒加载相当重要呢,我们来看下面这个例子。

val xMinBefore = (x : Int) => {     System.currentTimeMillis / 1000 - 60 * x; } 

看到这个函数,它就是有副作用的,它的运行结果不仅依赖入参,还依赖于这个世界的时间,所以你在不同时间去执行这个函数,返回的值是不同的。对于这种有副作用的函数,我们自然不能使用懒加载,我们需要在调用的时候就得到结果,才能保证结果是我们需要的。而没有副作用的函数,我们可以在任何时候执行都得到一致的结果,自然可以在任何时候调用,也就保证了在最后加载的时候,输出的数据是不会有问题的。

RDD 的 Lineage

保证了无副作用,Spark 的容错机制 lineage 才能起作用。回到上面那个例子

val sampleRdd = sc.makeRDD(Array(1, 2, 3, 4), 2) val rdd2 = sampleRdd.filter((str) => str >= 2) val count = rdd2.count() 

rdd2 是在 sampleRdd 的基础上进行了 filter 操作,rdd2 实际上就是保留了一个对 sampleRdd 的引用,并记录了 filter 操作。rdd2 这样就有了和 samleRdd 的 lineage 。

lineage 的应用: 在执行第三行 count()时,rdd2 就会在 sampleRdd 的基础上执行 filter 操作。当执行 filter 的时候失败了,spark 就会往上追溯到上一个成功的 rdd,也就是 sampleRdd,再执行一把。可以使用这种方式容错的前提,就是 RDD 的 immutable 特性以及无副作用,它们保证在任何时候对一个 RDD 执行相同操作时,输出的结果永远是一样的。

经常觉得自己智商做不了程序员

Posted: 12 Sep 2021 01:08 AM PDT

看一些框架的设计,一些算法,甚至一些工程实践的时候觉得自己的智商可能和这些软件的发明者或者维护者真的差的太远了,自己写的都是啥玩意啊,超沮丧😟。

SpringBoot 求教这里为什么 Autowire 找不到 bean

Posted: 11 Sep 2021 11:02 PM PDT

d4fYBeKMEyjN8sv

如果测试程序使用这个,就能找到 dog 这个 bean

2JscVOj1gvk6WGb

收集 海思 Linux kernel 模块 开发交流的渠道。被 module PLT section(s) missing,困扰好久了。

Posted: 11 Sep 2021 10:30 PM PDT

RT, 之前询问的帖子,www.v2ex.com/t/786837

编译成的 ko 模块 (github.com/0neday/OptiXstarHS8145X6/tree/main/persist-root-shell),在海思中运行提示 错误。

module PLT section(s) missing 

修改 linux 官方内核 4.4.197 中 arch/arm/kernel/module.lds 的内容,去掉 .core

SECTIONS { .plt : { BYTE(0) } .init.plt : { BYTE(0) } } 

运行不提示错误,用lsmod 查看,模块没有加载成功,状态 -1 。

这个问题困扰好久了。 应该需要给内核打补丁。

有没有兼容各大网盘下载和 BT 下载的 web UI? 想把小鸡的价值榨干

Posted: 11 Sep 2021 09:30 PM PDT

要不是 cloudflare 对通过 CDN 的 ssl 流量限制了可用端口数量,Aria2 一个端口 Transmission 一个端口,其他某个下载程序一个端口都可以,现在就是可用端口数量不多了,所以想找找有没有哪个能下网盘能下 BT 的全能下载程序,一个端口既方便使用又节省资源

交互式 SICP:第一章

Posted: 11 Sep 2021 03:14 PM PDT

是时候学点 Scheme 了,还记得自己曾经暗下决心吗:

读完 SICP,做一个有追求的程序员!!!

现在,机会来了! XmacsLabs 制作了《交互式 SICP 》,使用 GNU TeXmacs,你就可以在阅读的同时,运行书中的 Scheme 代码片段。

https://gitee.com/XmacsLabs/interactive-sicp

欢迎在 Gitee 上面建工单反馈问题。

小小的建议:

  • 推荐 Windows 用户使用 Xmacs v2021.1 (在这里下载)
  • 推荐 macOS 用户使用 GNU TeXmacs 2.1 (从官网下载)

pgsql 不能链接数据库问题 求大佬解答

Posted: 11 Sep 2021 11:53 AM PDT

$ psql
psql: error: FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE "en_US", which is not recognized by setlocale().
HINT: Recreate the database with another locale or install the missing locale.

当我们在说“轻量级产品”的时候,这个“轻量级”具体可以用来指代产品的哪些特点?

Posted: 11 Sep 2021 10:23 AM PDT

Python tkinter 按钮中输入 emoji 表情符号,会被重复显示

Posted: 11 Sep 2021 06:46 AM PDT

本意是想给 tkinter 里的按钮增加 emoji 表情以便快速识别

Button(root, text="明细查询", command=searchitem, font=("宋体", 15, 'bold')).grid(column=3, row=4)

比如,在 text 这里增加一个 emoji 表情。添加后,表情可以显示出来,但任何表情都是会变成 2 个相同的。如果是只输入表情,不输入文字,就显示 2 个相同的表情。如果输入表情加文字,则文字会出现在 2 个重复表情的中间。如果不用 emoji 表情,用普通的 symbol 之类,可以正常显示。

求教怎么解决?

付费找大佬帮忙写个 JavaScript 脚本

Posted: 11 Sep 2021 04:38 AM PDT

小白一枚,尝试自己研究没搞定,所以在这求助大家,不知这个需求是否能实现。

有愿意帮忙的大佬麻烦留个联系方式和报价,提前感谢!


需求如下:

为 HTML 页面添加搜索功能,最好用 jQuery 语法写

页面里有一组汽车型号列表,不同型号有属于各自的种类(例如汽油车、柴油车、电动车)

部分汽车型号针对市场不同有不同发布名称,但列表只有国内市场发布名称

需要实现的效果是,页面添加搜索框,输入汽车型号关键词显示对应的产品

由于列表只有国内市场发布名称,所以数据源在脚本里定义好,结合 <li> CSS 选择器找到对应的汽车型号,下面详细说明:

HTML 内容( id 选择器对应汽车型号,class 选择器对应汽车种类,这些在页面里已经有)

<ul> <li id="gwmc30" class="battery">长城 C30</li> <li id="geelytx4" class="diesel">英伦 TX4</li> <li id="geely300t" class="petrol">星越 300T</li> </ul>

脚本里定义好对应关系(格式类似下面)

gwmc30:长城 C30,丹麦市场名称,其它市场名称 geelytx4:英伦 TX4,丹麦市场名称,其它市场名称 geely300t:星越 300T,丹麦市场名称,其它市场名称

上面是主要需求,还有另外两个小需求,能实现更好

  1. 在页面添加种类筛选按钮,例如点击汽油车按钮就显示所有汽油车型号(利用列表里的 class 选择器)
  2. 搜索框下面添加热门汽车型号( HTML 文本元素),点击就自动填入搜索框,并显示搜索结果

HTML 样本 https://codepen.io/zhao3574/pen/WNOxKyd

Magisk 开发者吴泓霖(John Wu)在 medium 上发文了,称会继续维护 Magisk

Posted: 10 Sep 2021 06:38 PM PDT

No comments:

Post a Comment