Wednesday, July 14, 2021

V2EX - 技术

V2EX - 技术


sizeof 计算问题求解

Posted: 14 Jul 2021 04:29 AM PDT

void foo(int *arr) {   printf("%d\n", sizeof arr); // 4 }  int main(){   int arr[] = {1, 2, 3, 4, 5};   printf("%d\n", sizeof arr); // 20   foo(arr); } 

对于上述代码的sizeof计算数组字节结果有些不太明白,arr很显然和arr[0]是等效的,为什么在主函数中计算arr的大小等于20(所有元素加起来的字节大小),而作为参数传递给另一个函数时却是4

Win11 磁贴取消了,有没有好的替代品?

Posted: 14 Jul 2021 04:29 AM PDT

以前用 Win10 的时候好好地把各类应用在 磁贴 里按类别放到不同文件夹里,所以启动任何常用软件只要点三下:开始键 -> 分类 -> 应用,私以为是非常好的应用启动器解决方案。

现在 Win11 取消了磁贴,又不想把应用都堆在桌面,目前只好每次找应用全靠搜索,非常难受。。。

想问问大家有没有好的这种带分类的启动器推荐一下?

700W 数据的表,如何做分页查询,速度不低于 1s

Posted: 14 Jul 2021 04:26 AM PDT

mysql ,700W 数据的表,如何做分页查询,速度不低于 1s

请问 Google 账号被认作是中国账号了还有解决办法吗?

Posted: 14 Jul 2021 04:25 AM PDT

Google Play 之前消费过美元倒是没问题……但是其他方面都被认作是中国账号了,包括一系列限制比如开不了 YouTube premium,这也是最烦的一点……能不能通过组家庭强开 premium 解决?
天杀 Google,前段时间更新了 IP 政策,一堆账号都变成中国的了。虚拟定位试过了……解决不了

如何把 http 请求转成对应的 rpc 请求。

Posted: 14 Jul 2021 04:25 AM PDT

  1. 所有的对外接口都是用 pd 来定义的,能不能在网关这一层做协议的转换
  2. 如果可以做转换,那么是手写还是程序自动转换还是说只能生成模版文件降低人工

想了几种办法,还是思路不是很清晰,各位大佬给个思路呗。。。

想开源又想有专利保护,选择哪个开源协议合适呢?

Posted: 14 Jul 2021 04:24 AM PDT

我策划了一个开源软件,虽然是一款开源产品,但是开发者生态和终端市场应用有着非常大的商业前景,为了保护开源生态的可持续发展,避免相似竞品的出现,我申请了 6 个发明专利。

我的目的是:

  • 对于使用者,免费使用,不限用途,包括商业项目使用;
  • 对于开发者,只能通过 Pull Requests 方式参与主程序开发,不能演绎其他版本的主程序;但是不影响开发扩展插件,或者商业化运营扩展插件;
  • 对于竞争者,如果开发出功能原理一样或者相似的产品,无论使用哪种编程语言,无论是自托管部署或者 SaaS 模式,都要受到专利限制。

基于这个目的,我选择哪个开源协议比较适合呢?

或者谁知道哪家律师事务所或者律师,是懂开源协议的?

感谢大家帮我参谋参谋。

mta.qq.com 这网站是倒闭了吗?想看一下手机市场占有率也费劲,接二连三的各种大厂停止服务��

Posted: 14 Jul 2021 04:14 AM PDT

上次是cnpm 主站不能访问,持续到现在还是不能访问

这次是 https://mta.qq.com/mta/data/device ,上礼拜想查一下移动设备的占有率,发现打不开,还以为是暂时的,没想到过了一礼拜了,估计也是凉凉了吧

好歹 cnpm 还提示了一下 中文字 , 这货妥妥的一脸的宕机样🐶😂


平时主要用的百度 腾讯的流量统计数据来做分析,都是开放查询,可以相互佐证,至少不会偏的离谱,现在缺了一条腿,又得找个新欢了😂

有没有推荐的可以直接查看移动设备市场份额统计的网址发一下?我已经准备好白嫖了😘

Nginx 是否存在低成本的性能监控/日志统计方案

Posted: 14 Jul 2021 03:56 AM PDT

GoAccess 的统计方式和显示方式都不太对胃口,ELK 那种超重型方案不太适合。

我其实最多就像知道十几天内的 Nginx 运行情况,包括:一段时间内,哪些接口被访问过,访问过多少次,按照响应时间排个序让我知道最慢的几个接口。统计出未能成功响应的地址。就这些也就行了

如何解决 React 中组件传递方法链路很长的问题?

Posted: 14 Jul 2021 03:39 AM PDT

一个组件 A 的方法通过 props 传递到组件 B 然后到组件 C 再到 D 再到 E...

这样的写法找起来真是痛苦啊,所以如何解决这种问题呢?

网上搜了一圈没找到方案,所以来问下哈哈哈

typecho 怎么没有 even 主题呢

Posted: 14 Jul 2021 02:20 AM PDT

hugo: https://themes.gohugo.io/themes/hugo-theme-even/

hexo: https://github.com/ahonn/hexo-theme-even

这个主题的文章详情页看着舒服多了,搜了一圈 typecho 居然没有这个主题,搞得想换博客引擎了。。

由相关帖子 Jetbrain 的 Color Scheme 引出,有适合色弱用的 Theme 或者 Color Scheme

Posted: 14 Jul 2021 02:05 AM PDT

鉴于没找到合适的,求推荐 Jetbrain 的 Color Scheme!

Posted: 14 Jul 2021 02:05 AM PDT

默认的 Color Scheme 颜色标识类别较少,因此想换一个,但是没找到看着舒服的。
求大佬们推荐推荐!

字体颜色的 Color Scheme
字体颜色的 Color Scheme
字体颜色的 Color Scheme

不是主题 Theme !
不是主题 Theme !!
不是主题 Theme !! !

github 如何设置一个 pr 可以被 maintainer 设置编辑修改权限?

Posted: 14 Jul 2021 01:38 AM PDT

请教一个问题,我给一个项目提了 pr,然后项目的 maintainer 在我基础上做了一些改动,结果这个 pr 无法被 merge 。maintainer 让我参考这个链接 https://docs.github.com/en/github/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork 来 修改 pr 的设置。我没有找到具体怎么设置。请大神指导一下?

Mac 系统, node 如何从剪切板中读取图片并转成 base64

Posted: 14 Jul 2021 01:14 AM PDT

试了下 pbpaste命令,貌似只能打印出剪切板里的文本

给定若干个条件,怎么判断这些条件彼此互斥

Posted: 13 Jul 2021 11:20 PM PDT

需求是流程编辑器,想要检查用户设定的分支是否冲突

比如左边的分支是 A>80 右边的分支理论上应该是 A<=80,但是不要是右边分支是 A>60,或者是 B>80 这种没法做唯一性的解

见过其他的解决方案,都是设定默认分支,当程序也不知道怎么走的时候,就走默认分支

类似的可以扩展到多个分支,多个条件

如果感觉不靠谱,可以限制为单条件,也就是说没有[a, b]这样的左右区间比较

除了手写 if-else 判断有没有什么优雅方法

如果数据表每一个字段,除去主键字段外都带有唯一约束,那增加与修改的代码流程怎么写是最好的?

Posted: 13 Jul 2021 10:43 PM PDT

有一个数据表,有 n 个字段,有主键字段,主键内容自动生成。并且还有 n-1 个字段,这些字段都带有自己的唯一约束,并且这些字段的内容不是自动生成的,是人工录入的,现在要求是实现对该数据表的增删改查的页面。

遇到这种情况,那增加与修改的代码流程(也就是最终调用 insert 和 update 语句的方法),怎么写是最好的?如何把处理该情况的代码流程写的通用一点(封装成一个专门处理此情况的 api 方法)?

还是每个字段的修改,在 ui 界面上,都用单独的对话框进行修改?

Go IP 限制 HTTP 访问频率,大家都是如何做的呢?

Posted: 13 Jul 2021 10:35 PM PDT

就想实现这样的功能,限制一个 ip 的访问频率,
如果 2 秒内访问超过 20 次,
10 秒内访问超过 100 次,就锁定 2 小时。
大家是一般怎么做的呢?

吐槽 moto 系统的魔改

Posted: 13 Jul 2021 10:26 PM PDT

安卓 11,机器到手的时候还没有开源 ROM,就把比较类原生的海外版 rom 收拾了一下就投入使用。一开始是冻结了除 google service 之外的所有谷歌 app,一切 OK,用了一段时间后再把很多 moto 的 app 也冻结了,比如什么手势教程、moto game 等等,开始是没发现任何问题,后来某天发现不能及时收到消息通知了,必须打开 app 才能收到,就跟以前用的没有 google service 的机器一样的状态。立刻去检查 google service,没有问题,运行的好好的,又没冻结它。尝试重启,没用。查看后台,那些 IM 一直允许的也一直在后台运行着。省电优化关闭,没用,之前没关这个优化也好好的....

最近听说有开源 ROM 了,我都下载好了,但是想想刷机后又要重头开始设置一遍手机就懒了,再加上不服气,老子就不信找不出问题根源,再次一个一个的冻结着的 app 检查过去,发现了有个 moto 的 APP BOX 比较可疑( com.motorola.brapps ),解冻,立刻能收到通知了!

真是操了,fcm 本来好好的,你 moto 没事管它们干嘛?写个程序不要出人工的?而且解冻这个 app box 之后除了 FCM 没有问题了之外也没有发现系统里多出了什么功能,拜托这些厂家不要没事犯贱好吗

等我这个手机的开源 ROM 再多几个选择,还是要刷机,背后的联想不是个好东西

分享数据可视化大屏设计器的开发思路

Posted: 13 Jul 2021 09:47 PM PDT

参考项目 https://github.com/woai3c/visual-drag-demo

开源地址 https://github.com/ggymm/data-view-web

预览地址 http://49.233.166.224/data-view-web/data-view-instance/create 预览地址不是很新,最近有些新功能没有同步

技术交流,开源分享

[爬虫问题] 有个字段是 js 生成的,麻烦帮忙

Posted: 13 Jul 2021 08:57 PM PDT

爬虫小白

目标网站: https://page.auctions.yahoo.co.jp/jp/auction/j744286598 目标字段:'送料 東京都は1,111 円(離島を除く)' 或者是 '配送方法と送料' 下面的的所有内容

1.png https://sm.ms/image/79ynzYdXFiQNUkK 2.png

有什么办法能将一个浏览器中某个网站的登录状态共享给另一个浏览器吗?

Posted: 13 Jul 2021 08:50 PM PDT

不太明白这到底是和 Cookie 相关还是 Session 相关,Web 小白了属于是。

关于 js 的自身加密混淆,还有这骚操作?

Posted: 13 Jul 2021 08:32 PM PDT

我发现知乎看到了这个 https://www.zhihu.com/question/454938362

第一次见到这种所谓自身加密,看这加密疑似 base64,但不管是编码还是加密混淆,最终是下载到客户端打开的,所以这个加密方式是否能运行?望大佬们解惑

AB 的工程效率小集 #1 七月刊

Posted: 13 Jul 2021 06:53 PM PDT

约是年初开始,我持续不断地在一些较有讨论氛围的社区、社群,参与我感兴趣的技术话题互动。经过半年的体验,这类持续输入输出对我个人有不少的收获。一方面我能从这些社区社群看到不少新东西,例如第一时间看到世界各地的技术访谈、博客、新闻、活动;另外一方面我的知识体系在反哺社区和讨论的过程中逐步完善。

可惜,不少的社区社群并不能被搜索引擎记录,例如 Slack 、星球、以及各种普通 IM 工具内的群组。在第八期"二分电台"讨论"持续学习"话题时,Randy 和我聊到了《 Learn in Public 》这篇文章——是的,固然加入了某个 Slack 社区后可以在里面搜索历史记录,但是它依然不是搜索引擎可见的。特别像 Gradle 这类大家"熟悉的陌生人",我们每天都在用,但真碰到一个什么奇怪的问题想赶紧知道(不一定是 bug,可能只是一个用法、一个 API 的理解等),目前最好的办法还是去他们的 Slack 社区互动,纵然他们有论坛和 StackOverflow 的 tag 。这些"封闭"的内容无法有效地被更广泛的人群接受,新手很难从外部获取到最新的资讯、讨论;以至于我有时候甚至觉得技术分享的视频如果不把 timeline 和关键字标注出来,也会流失大量本来可以点击进入的观众。

所以,我一直有这个想法:做一个月度或者半月的小集合,把我参与过、具有通用价值的一些东西记录下来、公开出去。

  • 这类问答式的内容,如果单独写成一篇,可能有些 overkill 了,所以定位在一个月度的小集的形式;
  • 目前以我参与过的内容为主,在所有的内容确保是无版权、或者我拥有版本的情况下,再整理、记录、沉淀,后面也会考虑加入一些 Slack 或其他群组上我看到的精彩内容;
  • 至于分发形式,我斟酌的结论是:先在我的博客记录,公众号 /掘金等二次分发,如果有其他朋友参与一起做且方向比较统一在工程效率和开发体验这块的话,可以尝试 Substack 这种邮件订阅的形式做订阅。但目标是不变的,需要在公开的互联网领域留下这些有参考价值的内容。

OK,那我们进入第一期的正文。2021 年 7 月工程效率小集:

构建:Gradle/AGP/CI/...

Q1: To pass a bunch of File which come from different dirs, should I use SetProperty<File> or SetProperty<RegularFile> ?

A1:

  • @vierbergenlars: I think a FileCollection is better suited for that. It also gives you some nice additional methods to add files and to manage them.
  • @wolfs: I agree, ConfigurableFileCollection is the analog to RegularFile/DirectoryProperty for multiple files.

这则问答来自于 Gradle Slack 社区,起因是我在写一个 demo 时发现有一个场景是需要收集一些来自不同文件夹的文件,并传入到某个 Task 。对于这类场景,不管是多个文件、文件夹,或者混合的场景,使用 FileCollection 都是比较好的选项,因为它的 API 在面对这类场景时比较友好,比如 from(varags Object)。如果想保持一致性都使用 Provider,可以使用 FileCollection.getElements() API 转换。对这些类不了解的朋友可以参考 Working with FilesLazy Configurations

Q2: Gradle 7.1 + zulu arm64 JDK11 do not run natively on my M1 Mac mini.

A2: 这则问题我后来自己发现了问题(小黄鸭调试法),因为我使用 SDKMAN! 安装的 zulu 的 sdk,但是 SDKMAN! 本身是通过 Rosetta2 转译运行的,加上它在命令行 bash_profile / zshrc 添加了一些东西(没细看了...大概是为了支持 Java 版本的切换等),导致 Gradle 起 java 进程时也都通过 Rosetta2 去跑。删掉重装后即可。

Q3:From the performance perspective, is buildSrc still a bit worse than composite build?

A3:

  • @Vampire: This should still be true, but depending on your test project you might or might not be hit by a performance hit compared to composite builds. If your test project is too simple you will for example not see any difference. The point is, that buildSrc is automatically added to the class path of all build scripts in the main build and due to that the runtime class path of all tasks changed and thus all tasks in all projects are out of date if anything in buildSrc changes. If you use composite builds instead, only the dependencies you actually use by applying a plugin or adding it to the buildscript dependencies block are added to the class path of that specific build script, so all other build scripts / projects stay unaffected. If you apply all plugins you have to all projects you have, then there sill probabaly be no performance difference, as then still all tasks are going to be out of date when something is changed.I personally only use composite builds nowadays, also because I can then easily use composite build within (though there is a "work-around" now) and I can also move and rename it, for example to <root project>/gradle/build-logic instead of <root project>/buildSrc.

  • @CristianGM: And...I should add another small difference, buildSrc runs its tests when it compiles, while composite build doesn't

这则问题讨论了在哪些情况下 composite-build 优于 buildSrc,主要的性能问题集中在是否把这个额外的编译脚本模块 apply 到所有的主代码模块中。

Q4: 我执行 gradlew bundle 命令的时候,为什么每个 product flavor 里面的配置都会被执行一次?如何给渠道设置版本名称?

producatFlavors {      india {          setProperty("archivesBaseName", "urbanic-${versioNameIndia}-${currentVersionCode}"      }          india {          setProperty("archivesBaseName", "urbanic-${versioNameOther}-${currentVersionCode}"      } } 

A4:

  • Gradle 配置阶段的脚本是全部都会执行的,不然没法得到配置好的 Extension,也没办法得到 Task Graph ;
  • 就这段脚本而言它是执行 Flavor 的配置,像 dimension applicationIdSuffix buildConfigField 都是作用于 flavor 的(隐藏的 this 是 ProdcutFlavor),setProperty 是作用于 project 的,所以会被覆盖;
  • archivesBaseName 的配置看了下是从 Gradle API 来的,并不是 AGP 的( AGP 有挺多地方用了不过,但是没法搞 variant aware 的策略),如果你真想 hack 一下,那就根据你输入的命令 hardcode 对应的 property:if(gradle.startParameter.getTaskNames().get(0).contains("India")) { setProperty(...) }
  • 现在应该用这个了 Artifacts API: https://github.com/android/gradle-recipes/blob/agp-4.2/Kotlin/getApksTest/app/build.gradle.kts (可以切分支查看不同版本 AGP 的 API,7.0 后稳定了),添加一个 Task 获取对应渠道 APK 后再修改名称。

Q5: 对于想在 assembleDebug 后对 APK 执行一些操作的情况,可以用 finalizeBy()

A5:

我也经常忍不住用😂,但是这个 API 有几个问题:

  1. 如果一个 task 有多个 finalizer,它们是按 finalizer 的名字排序(相当于乱序;
  2. Finalizer 可不管前一个任务执行成功没(见附图),只要前一个任务执行了,它就总是会接着执行;

上面两点其实是 by design 的,所以官方文档的用例是用来做 task 的资源清理工作。我一直觉得自己有点滥用,不过有需要没办法的时候也只能用。

就这个 case 可能的几个别的解法是:

  1. doLast(),但是只接受 Action 而不是 Task
  2. 反向 dependsOn(), 让 apkRenameDebug.dependsOn(resguardDebug),然后执行终端执行 apkRenameDebug
  3. 加一个类似 lifecycle task 的锚点 task 作为最后运行的 task,然后把前面那些 task 往他上面 dependsOn(),算是 2 的优化版(比较好看干净);
  4. buildFinish() 生命周期监听器,所有任务跑完后取 apk 做处理可以不需要依赖 AGP ;
  5. 用新的 Artifacts API (见 A4 的链接)。

Kotlin 周边:Koin/Ktor/Coil/...

Q1: Is it possible a feature/plugin depends on another?I need to transform the type with my feature before JsonFeature get it. The problem is JsonFeature should be able to parse SomeError or User, so I have to unwrap it from my Either before, if not, JsonFeature will try it with the Either class and it will fail.

A1: For ktor client's plugin I used/created, I don't think there's a direct approach to implement this. But if u look into their implementations, can see the interceptor pipelines - base on the lifecycle of those pipeline, u can define the running sequence and thus make dependent relationship indirectly. In this case, probably u can use HttpResponsePipeline.Receive in your custom plugin to unwrap before JsonFeature works.

scope.responsePipeline.intercept(HttpResponsePipeline.Receive) { (info, body) ->     if (body !is ByteReadChannel) { return @intercept}     // Do something you want and get the final result in String (others types I did not try)     val result: String = decrypt(body.readRemaining().readText())     proceedWith(HttpResponseContainer(info, ByteReadChannel(result))) } 

Q2: Coil 加载时报错 Software rendering doesn't support hardware bitmaps

A2:

  1. Recipes - Coil,你大概率是碰到了:Shared element transitions are incompatible with hardware bitmaps ;
  2. 除了上面那个,还有一些机型原生不支持,以及 OS 版本原生不支持的,库本身应该是处理好了:https://github.com/coil-kt/coil/blob/main/coil-base/src/main/java/coil/memory/HardwareBitmapService.kt
  3. 查看所有相关 issue,比如这个,没有看到超出上述范围的讨论,所以我觉得应该就是这样啦。

欢迎关注我的 博客 / Github / 公众号 / 播客 / 微博 / Twitter

如何使用 VSCode 开发 UserScripts?

Posted: 13 Jul 2021 02:54 PM PDT

vscode 内置提供了几种调试方法,但都存在一点小问题,也是我不太会用。

vscode 调试时要求运行一个服务器,在此之上来 debug js 。而运行服务器不能只有 js,需要放置一个 html 。

vscode 还提供一种 node 的方式来运行调试 js,很方便,但不能使用浏览器 API 。

预期最好的结果是最后这种,能在 vscode 里直接运行调试单文件 js,又能使用浏览器 API 。可以的话,greasyfork 中提供的 API 也能有一个补全提示就更好了。

No comments:

Post a Comment