Sunday, August 15, 2021

V2EX - 技术

V2EX - 技术


安卓是否有办法让应用后台运行?

Posted: 15 Aug 2021 04:08 AM PDT

玩一个手游(冒险岛 m ),里面支持挂机,需要应用在前台挂机才行。 想挂机的时候顺便看小说的我想到了同屏双开,完全不影响。

这时候就会想,如果完全真后台,是否可以手游完全在后台挂机,这样就可以全屏看小说了。 因为分屏的时候能扛得住,那么性能就不是瓶颈了。可惜网上找了一圈完全没找到可行的方案……

我的理解是,最差也应该能够通过某种方式,用系统自带的分屏原理来做一个伪实现?

有没地方可以下载 Windows 图标文件?

Posted: 15 Aug 2021 03:58 AM PDT

本人新装电脑,用于展示用。但是又不想下载很多专业软件,试过了可以比如复制很多个记事本快捷键方式到桌面,修改图标和名字来达到假装装了很多软件,但是一个个自己制作图标实属效率太低,是否有网站可以有的下载原始图标文件? :D

一位程序员出的密码学解谜,请大家一起研究一下

Posted: 15 Aug 2021 03:42 AM PDT

谜面只有 7 组数字,密码为 6 字母组成的英文单词

序号(顺序)		谜面内容 1			311 2			212 3			332 4			212 5			313 6			323 7			7 

通过不断尝试和套话,现在已知

  • 1 整体一共使用两种加密方式
  • 2 前六组数字为一种加密,最后一组数为一组加密
  • 3 已经确定第二种加密为凯撒密码
  • 4 字母顺序是按照序号顺序来的,不需要重组,由 2,4 组数字来看可知 2,4 位字母相同
  • 5 第一种密码为非矩阵加密的对照式密码,我第一次猜想为 三分密码 被出题人告知是错误的,但是是类似的加密方式
  • 6 数字转英文单词和第七组数字这种加密方式在某款游戏中使用过

线索就这些,大家有什么好的想法思路吗

Debian 11 Bullseye 出了

Posted: 15 Aug 2021 03:41 AM PDT

Why do so many people become Java haters?

Posted: 15 Aug 2021 03:26 AM PDT

I did some searches on the Internet, and there seem to be quite a few answers on the Internet.

e.g.

I read many of these posts, and I found that the most concentrated complaint against Java is

It's very verbose and repetitive.

However, there have been many improvements in recent versions of Java for the issue (Type Inference, Text Blocks, Recoeds, etc.). And Java 17 will be released in a month, Java code is becoming more and more concise.

But it may take more years to change the over-engineering culture of the Java community..

GitHub 不再支持密码验证解决方案: SSH 免密与 Token 登录配置

Posted: 15 Aug 2021 03:12 AM PDT

今天提交代码,push 到 GitHub 上,突然出现这个问题。

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

fatal: unable to access 'https://github.com/wsgzao/wsgzao.github.io.git/': The requested URL returned error: 403

官方的解释:https://github.blog/changelog/2021-08-12-git-password-authentication-is-shutting-down/

As previously announced, starting on August 13, 2021, at 09:00 PST, we will no longer accept account passwords when authenticating Git operations on GitHub.com. Instead, token-based authentication (for example, personal access, OAuth, SSH Key, or GitHub App installation token) will be required for all authenticated Git operations.

Please refer to this blog post for instructions on what you need to do to continue using git operations securely.

Removal

  • August 13, 2021, at 09:00 PST

大致意思是,密码验证于 2021 年 8 月 13 日不再支持,也就是今天 intellij 不能再用密码方式去提交代码。请用使用 personal access token 替代。

这个去年年底就说了,https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/

In July 2020, we announced our intent to require the use of token-based authentication (for example, a personal access, OAuth, or GitHub App installation token) for all authenticated Git operations. Beginning August 13, 2021, we will no longer accept account passwords when authenticating Git operations on GitHub.com.

自己鼓捣了一遍 Token,烦人的很。还是觉得直接 ssh 的方式操作 git 就好(之前是 ssh 的源,也没有这个问题)。

以下两种解决方案推荐使用 SSH 免密登录

  1. GitHub 配置 SSH 免密登录
  2. GitHub token
# 登录 github 添加 SSH and GPG keys 公钥  # 修改 git config vim wsgzao.github.io/.git/config  [core]         repositoryformatversion = 0         filemode = false         bare = false         logallrefupdates = true         symlinks = false         ignorecase = true         hideDotFiles = dotGitOnly [remote "origin"]         url = https://github.com/wsgzao/wsgzao.github.io.git         fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"]         remote = origin         merge = refs/heads/master  # 替换 url =   [core]         repositoryformatversion = 0         filemode = false         bare = false         logallrefupdates = true         symlinks = false         ignorecase = true         hideDotFiles = dotGitOnly [remote "origin"]         url = git@github.com:wsgzao/wsgzao.github.io.git         fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"]         remote = origin         merge = refs/heads/master  

Google 搜索到以下文章具体步骤非常详细,我就直接贴链接不再重复了

https://www.cnblogs.com/zhoulujun/p/15141608.html

有没有比“正则表达式” 更简单直观的匹配技术?

Posted: 15 Aug 2021 03:08 AM PDT

正则表达式:是很强大但感觉还是稍微复杂了一点,并且可读性也有点差。

我现在有个小需求:
1. 能够匹配一行字符(就一行不超过 100 个字符,能够匹配内部的英文数字符号等各种字符)。
2. 简单直观易上手(也就是说新手小白看 5 分钟就可以上手自己编写规则)。

大家来推荐几本对职业生涯影响较大的技术书籍

Posted: 15 Aug 2021 03:05 AM PDT

开发过程中,有时候会觉得当时要是没有读过那本书,现在肯定想不到要这样做。由此可以推定,因为曾经没有读过某一本书,会导致想不到要怎样做。所以不如大家都相互推荐一下自己读过的好书,拓宽自己的知识领域。

我先推荐几本对我影响比较大的书:

《算法》基本功,理解常用的组件的原理,比如 redis 。 面试也很有用

《 Head First 设计模式(中文版)》业务开发利器。可以写出更优雅的代码

《 MySQL 技术内幕》充分理解 mysql,每次阅读都有新收获

《 Go 语言设计与实现》 深入了解 golang 。 面试也很有用

《架构整洁之道》 如何避免代码不断膨胀导致项目不可维护,非常有效

有没有人在做短链接程序

Posted: 15 Aug 2021 02:46 AM PDT

闲置两个短链接域名 short.im I'm short 以及 url.ke 可爱 url

.im 续费 80 元 .ke 续费 40 美金

每个 1000 元,有兴趣的朋友联系我哦,地址 miao.win

PHP 有什么较好的质量压缩图片吗

Posted: 15 Aug 2021 02:42 AM PDT

目前找到的一般都是 imagecopyresampled,但是尺寸留为 100%的话,压缩效果较一般,处理过的图片使用安卓的 ImageCompress 库,比率设置为 40 都可以再缩小一半。 PHP 有什么类似的质量压缩类的方法吗

git merge 的提交没有出现在文件提交记录上?

Posted: 15 Aug 2021 02:15 AM PDT

最近的 revison 和本地文件不一致(本地没动过),找了半天才发现是 merge 导致的 change,这到底是操作的问题还是 gitlab 的问题?有避免的方法吗

请教大家一个 C++内存分配后对象初始化的问题

Posted: 15 Aug 2021 12:17 AM PDT

一直写 Java,最近用到 C++,有个问题不是很明白。 现在有个 allocator 用来分配内存,Key 是个类。 Key* keys = allocator.alloc(sizeof(key) * 10); 我的理解这样 keys 数组是不能直接用的,因为只分配了内存,类没有初始化。 但是这该怎么初始化呢?我能想到的笨方法是,先分配一个 buf 内存,然后循环里通过 new (buf)一个个初始化,但是这样感觉代码很丑陋,之前没接触过 C++,问题可能很蠢,请大佬不要介意。

问题 Java : ==连接引用数据类型的时候比较的是哈希地址值还是物理地址值

Posted: 14 Aug 2021 11:37 PM PDT

==连接引用数据类型的时候比较的是哈希地址值还是物理地址值

thinkphp 使用 laravel-queue 组建出现的问题

Posted: 14 Aug 2021 11:32 PM PDT

       //laravel 框架队列引入         $queue = new Queue();         $container = $queue->getContainer();         $config = [             'options' => [                 'prefix' => 'laravel_database_'             ],             'default' => [                 'host' => \think\facade\Config::get('cache.redis.host', ''),                 'password' => \think\facade\Config::get('cache.redis.password', ''),                 'port' => \think\facade\Config::get('cache.redis.port', ''),                 'database' => 0,             ],         ];         $container->bind("redis", function ($container) use ($config) {             return new RedisManager($container, 'predis', $config);         });         $queue->getContainer()->bind('Illuminate\Contracts\Queue\EntityResolver', function () {             return new \Illuminate\Database\Eloquent\QueueEntityResolver();         });         $queue->addConnection([             'driver' => 'redis',             'connection' => 'default',             'queue' => 'default',             'retry_after' => 90,             'block_for' => null,         ]);         $queue->setAsGlobal();         //laravel 框架队列结束         $data = json_encode(['name' => 'aa']);         $ret = $queue->push('App\Jobs\TestJobs', $data); 

以上操作可以在 tp 把项目推送到 redis 上边,但是出现以下问题。应该是那个服务没有注册

Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #0 [ <required> $data ]] in class App\Jobs\TestJobs in /vendor/laravel/framework/src/Illuminate/Container/Container.php:993 Stack trace: #0 /vendor/laravel/framework/src/Illuminate/Container/Container.php(931): Illuminate\Container\Container->unresolvablePrimitive(Object(ReflectionParameter)) #1 /vendor/laravel/framework/src/Illuminate/Container/Container.php(872): Illuminate\Container\Container->resolvePrimitive(Object(ReflectionParameter)) #2 /vendor/laravel/framework/src/Illuminate/Container/Container.php(834): Illuminate\Container\Container->resolveDependencies(Array) #3 /vendor/laravel/framework/src/Illuminate/Container/Container.php(681): Illuminate\Container\Container->build('App\\Jobs\\TestJo...') #4 /www/walle/bitian_queue/8_989_20210815_104701/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(785): Illuminate\Container\Container->resolve('App\\Jobs\\TestJo...', Array, true) #5 /vendor/laravel/framework/src/Illuminate/Container/Container.php(629): Illuminate\Foundation\Application->resolve('App\\Jobs\\TestJo...', Array) #6 /vendor/laravel/framework/src/Illuminate/Foundation/Application.php(770): Illuminate\Container\Container->make('App\\Jobs\\TestJo...', Array) #7 /vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(215): Illuminate\Foundation\Application->make('App\\Jobs\\TestJo...') #8 /vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(88): Illuminate\Queue\Jobs\Job->resolve('App\\Jobs\\TestJo...') #9 /vendor/laravel/framework/src/Illuminate/Queue/Worker.php(368): Illuminate\Queue\Jobs\Job->fire() #10/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(314): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions)) #11 /vendor/laravel/framework/src/Illuminate/Queue/Worker.php(134): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions)) #12 /vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate\Queue\Worker->daemon('redis', 'high,default', Object(Illuminate\Queue\WorkerOptions)) #13 /vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'high,default') #14 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle() #15 /vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() #16 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure)) #17 /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure)) #18 /vendor/laravel/framework/src/Illuminate/Container/Container.php(590): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL) #19 /vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\Container\Container->call(Array) #20 /vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) #21 /vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) #22 /vendor/symfony/console/Application.php(1009): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #23 /vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #24 /vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #25 /vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #26 /vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(131): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #27/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) #28 {main} 

有个词,是讲程序的抗异常能力

Posted: 14 Aug 2021 11:12 PM PDT

但是忘了叫啥了

FastGO, 一个基于 Gin 和 Swagger 的 Web 框架

Posted: 14 Aug 2021 10:45 PM PDT

项目地址: https://github.com/long2ice/fastgo

FastGo 是一个基于 Gin 和 Swagger 的 Web 框架,本质是将 Gin 和 Swagger 结合起来,提供开箱即用的 API 文档服务与模型校验,在编写代码的同时就已经编写好 API 文档。

之前使用 FastAPI 的时候,其内置的参数校验,API 文档集成使得开发很友好,最近使用 Gin 开发的时候也想找到类似的东西,结果只找到个 https://github.com/swaggo/swag 貌似靠谱一点,然而用写注释的方式写文档实在让人蛋疼,有这功夫我还不如单独写文档?

于是乎有了 FastGo 。

当前已经支持的功能有模型校验,API 文档等,并且跟 FastAPI 一样支持 Swagger UI 和 Redoc, 当然 Gin 本身的功能都是支持的。除此之外,优化了模型校验,支持将所有类型的参数比如 path, query, form 写到同一个模型中进行一次性绑定,这是 Gin 本身不支持的。

后续准备支持更多 Swagger 的功能例如权限校验,返回模型定义等。

最后依然求个 star !

推荐下 Python 程序提交到分布式服务, 打包的工具 cluster_pack

Posted: 14 Aug 2021 10:05 PM PDT

比如 spark, dask, tensorflow

pyspark 打包的三种方式

有没有电脑上可以方便的查看外卖距离的方法?

Posted: 14 Aug 2021 09:59 PM PDT

在手机下单之后,如果想要查看外卖距离只能掏出手机看,或者电脑上通过小程序,实在不太方便,之前在微博上看到一个 po 主做了一个类似功能的东西 https://www.weibo.com/u/1260797924?layerid=4611460623500088

大家现在还用 swagger 生成 API 文档吗

Posted: 14 Aug 2021 04:49 PM PDT

之前我试过纯粹用编辑 API 的软件写 API 文档,但是发现坚持不下去,每个 API 返回值啥的都要我一个个写好,而且接口改动之后往往就忘记了改 API 文档,毕竟是在两个地方的,要开两个软件。

用了 swagger 感觉会轻松很多,只需要定义传入参数就行了,传出参数也只需要简单描述一下每个字段是干啥的,返回值直接就动态生成了。注释就在代码里,总能比上面这种方法不容易忘吧

但是现在写着写着又感觉不爽了,遇到复杂的接口,参数很多,注释比代码都长有时候,而且 idea 的 swagger 注释和其他注释一样黄黄的看着人眼都要晃了,突然想到如果能把 swagger 的注释颜色改成普通注释颜色应该会舒服很多,不知道可不可行。

��看自己的博客主题又双叒叕不顺眼了

Posted: 14 Aug 2021 01:18 PM PDT

自己不会写前端是次要的,没有设计想法是最苦恼的

厚脸皮贴一个链接吧,主要是游戏开发相关:
https://lightjiao.github.io/

[火星] WinRAR 5.91 的证书在一年前被吊销过?

Posted: 14 Aug 2021 12:29 PM PDT

今天突然发现 WinRAR 不能 UAC 提权了,"为了对电脑进行保护,已经阻止此应用",仔细一看文件属性,好家伙,数字签名直接给吊销了。

上网一搜,感觉很奇怪,貌似是一年前的事情了,而且很诡异,rarlab 官网上貌似有贴过两个文本通知,但是现在都是 404,只有 web archive 上还能找到备份:
ht [ V 站不让发链接] tps://www.rarlab.c [ V 站不让发链接] om/missing590.html
ht [ V 站不让发链接] tps://www.rarlab.c [ V 站不让发链接] om/revoked591.html

里面貌似就是吐槽说 CA 只是因为 virustotal 上看到报毒(误报),就给证书吊销了。

现在在 google 上 site:rarlab.com certificate 或 revoked 也没有结果。

因为我一直懒得升级 WinRAR,今天才发现这茬事。奇怪的是好像对此的讨论也不多。

tableplus for windows 版本终于开启支持 mongodb 了...

Posted: 14 Aug 2021 11:17 AM PDT

TablePlus 4.2.6 - Build 176 Release date: 15 August 2021.

Added MongoDB driver. Fixed issue on Windows 11. Other bug fixes and improvements. 

fcPEFA.jpg

请教个掘金 api 的问题

Posted: 14 Aug 2021 10:49 AM PDT

接口返回{"err_no":0,"err_msg":"success","data":[],"cursor":"eyJ2IjoiIiwiaSI6MTB9","count":0,"has_more":false}是啥意思有人知道不

请教下 ViewModel 和 Adapter 该如何结合以实现动态加载

Posted: 14 Aug 2021 07:38 AM PDT

如题,我的 ViewModel 类中有一个列表结构的数据,需要动态加载,代码如下:

class TimelineViewModel : ViewModel() {     val timelines = MutableLiveData<List<TimelineModel>>(emptyList())      private var nextTime = System.currentTimeMillis()      fun getTimeline() {     	viewModelScope.launch {             try {                 val respData = Repository.getTimeline(nextTime)                 if (respData.data != null) {                     nextTime = respData.data.feeds.nextTime                     val timelineModels = respData.data.feeds.data.filterNotNull().map {                         TimelineModel(it)                     }                     timelines.value = timelines.value.let {                         if (it == null) {                             timelineModels                         } else {                             it + timelineModels                         }                     }                 }             } catch (e: Exception) {                 Log.e(TAG, "Network Request Fail", e)             }         }     } } 
  • 如果在视图层直接使用 MutableLiveData#observe 方法观察这个数据,那么观察到的是整个 List 数据的变化,那么该怎么将其转化为 Adapter 的添加元素的行为?
  • 或者应该怎么处理这种需要修改列表数据的场景?

vim 相关 tg 群组信息

Posted: 14 Aug 2021 05:11 AM PDT

发现一些 vim 爱好者还不知道 vim 的社群,有两个人数比较多的 vim tg 群组,主要讨论 vim 相关的话题:

vim 中文用户群: https://t.me/vimzh_real

vim 英文用户群: https://t.me/VimUserGroup

No comments:

Post a Comment