Group Details Private

Global Moderators

版主

Member List

  • 细数协程与线程池的异同,发现并无本质区别

    首先,协程是基于线程池实现的。有n个线程来完成m个协程。那么在操作系统看来,调度对象是n个线程。这方面协程与线程池无差别。

    让出CPU的时机上,协程是由于异步IO或者任务结束而不再占用CPU,线程池中提交的任务也同样由于异步IO或者任务结束而不占用CPU。

    任务中途挂起状态上,协程允许任务中间由于IO挂起,等到恢复到就绪状态后,可能被放到另一个线程上继续执行,这些调度过程是不需要干预的。线程池则不存在任务挂起状态,每个任务都必须一口气完成,如果某个任务中间出现了wait()这样让出CPU的操作,那么任务也不会被丢回到等待队列,而是继续占用线程资源。在使用线程池的时候,如果一个长期任务中间有让出CPU,那么应该将其分割成为不含让出CPU的小片段,再使用回调等方式逐步添加到任务队列。这里线程池远不如协程方便。

    实际上,协程是线程池的自动调度任务的版本,自动根据任务状态将其剩余部分丢回到等待队列,免去了人工干预分割任务成各个片段的麻烦。协程需要由调度器管理任务状态,所以不像线程一样可以人工干预使其进入等待,也不再有必要暴露管理线程状态的接口。

    从调度任务带来的性能上,如果使用相同数量的线程,合理地划分任务片段,实际上协程不会比线程池具有更好的性能。但是划分任务片段是个麻烦事,让任务调度看起来像JS的回调一样,只是把发起回调变成了提交任务片段。

    posted in 编程
  • Telegram是如何识别设备型号的

    在Telegram账号登入新的设备的时候,会在旧设备的对话窗口中看到一条消息,提示有新的设备登入,比如我在使用Python实现的Telegram Media Downlaoder的时候,发现这一客户端被识别为CPython 3.8,我感到不安,因为这一标识和官方客户端不同,这一标记增加了风控风险。尽管我相信不滥用的情况下应当不会对帐号有太大风险,但是我还是希望尽可能模拟原始客户端。于是我开始寻找Telegram是如何识别客户端信息的。

    我观察Telegram Media Downlaoder的代码发现其中调用了pyrogram的库,这名字一看就感觉和telegram有关系,经过搜索发现这确实是一个python版本的telegram客户端库。由于在Telegram Media Downlaoder的代码中没有发现CPython相关的内容,于是我认为很可能是pyrogram透露了客户端信息。我直接打开了site-packages查看pyrogram的代码,找不到CPython相关的字符串。但是我知道CPython和版本号是运行时环境信息,与测试开始查找用于检测运行时环境信息的代码。首先是sys.version_info,这一信息不包含CPython,sys.version也不包含CPython,不过好在我认识到我应该搜索sys这一关键字,程序中调用sys的应该不多,而其中一定包含我想要的CPython信息。全局搜索sys发现在pyrogram的客户端构造方法中,有下面三行代码决定了登陆提示里边的设备信息:

        APP_VERSION = f"Pyrogram {__version__}"
        DEVICE_MODEL = f"{platform.python_implementation()} {platform.python_version()}"
        SYSTEM_VERSION = f"{platform.system()} {platform.release()}"
    

    第一行是App版本,是一个字面量;第二行是CPython3.8对应的信息;第三行是宿主机Winodws系统的信息。这三点结合起来基本能够覆盖登陆信息里的内容了。要修改登录信息只需要在构造pyrogram客户端的时候指定这三个参数就好:

            app_version: str = APP_VERSION,
            device_model: str = DEVICE_MODEL,
            system_version: str = SYSTEM_VERSION,
    

    另外,我使用的API_ID和API_HASH是直接从Telegram Web源代码里取得的,那么我应该将其模仿为web客户端。安卓、桌面客户端源代码里删除了API_ID和API_HASH,水池kdweb客户端开发者是不小心还是心态开放。

    posted in 编程
  • 带GC的编程语言没有一个适合做原生视频播放

    突然意识到,带GC的编程语言没有一个适合做原生视频播放组件,不仅仅是解码性能问题,而且视频帧高效显示和色彩渲染都是和宿主操作系统甚至显示驱动程序紧密相关的,想要做到好的效果和性能需要花大功夫,花大功夫形成的程序库通常会希望有最好的性能并且能够暴露给更多的程序使用,那么C/C++也就成了唯一的选择,而GC编程语言通常不会成为其他语言的库。

    posted in 软件
  • 用 chrome 记住密码到底不安全

    根源是操作系统没有沙箱机制,不仅限于Windows,macOS的程序也能随意读取其他程序的文件夹。macOS上现在的文件访问权限冶金针对文档、下载等几个常见的用户文件夹有用,chrome等程序的文件夹不受保护,而且chrome也不把密码存到文档文件夹里,所以也不安全。

    posted in 软件
  • 讲话时在中文中夹杂英语

    书面语中我会尽量避免,但是平时沟通真的还是惯用什么就说什么,有时候甚至会因为在线会议里避免歧义而故意用英语,比如“检测”和“监测”,我这边的工作里这两个词经常会一起出现在前后几句话里,为了容易区分,有时候我就说成detection和monitoring。如果能用汉语说清楚,我会觉得讲的很棒,但是有时候真的词汇量不够了,找到对应的词语需要精力,那为了效率,只能哪个方便用哪个了。

    posted in 文化
  • 为什么都这么讨厌安卓?安卓的缺点有哪些

    性能配置方面,iPhone性能只有顶配,廉价款之比旗舰落后半年到一年的性能,差距一般不会超过30%,缩水的是屏幕、传感器之类的,但是即便是缩水的,用的也是老旗舰的硬件,依然能做到不错的体验;安卓这边的廉价机型那就百花齐放了,骁龙400系列的芯片用来做智能手机感觉基本无法使用,和旗舰芯片比较差距可以是80%,估计只装微信用久了都卡。

    屏幕,对,屏幕。现在安卓手机屏幕标准很高了,但是高不代表好。比如广色域屏幕在不同亮度下的颜色曲线是否准确,这一点我深感怀疑。屏幕是唯一必不可少的输入输出设备,应该予以重视。安卓屏幕通常默认是一个不太准确的设置,可以在设置中选择用户自己喜欢的颜色模式,但是这意味着图片资源按照用户的喜好变色,而不是始终保持应该有的颜色。比如微信绿色的图标,在sRGB标准下应该是正确的颜色,但是用户选择广色域模式的时候,过于浓郁了,然而用户就是喜欢这样的错误效果,仅管这一效果只应应用于广色域照片和视频上。允许用户犯错,看起来这是一个自由问题,给予更多自由总应该是好的,但是同时也降低了安卓手机对于追求准确的用户的吸引力,因为增加了犯错的可能。而ios这边,总是准确的,如果希望要其他颜色风格,这个问题应该交给软件开发者去更改,而不是交给ios全局更改。

    外观设计方面,安卓相对而言百花齐放,但是这只是一个中性的 描述,不是夸赞。百花齐放不一定代表里边有好看的。安卓厂商对做工方面的品控差一些,早年三星塑料壳子真的很没有质感,更别提肆意乱开的机身开孔,比如sim卡槽位置在机身厚度上不居中、耳机孔也可以不居中,扬声器的孔也可以是歪的,这些问题不能说在iPhone上没有,但几乎是没有的。iPhone的设计稿更注重外观审美,其他可能不好说,但是基本的居中、排布整齐是做到了的,再加上更严格的工差控制,外观上更加精致。

    软件系统上,安卓更加开放,或者说,其实是不受管理。这也是个中性描述。我自己愿意的话,可以自己编写安卓软件自己使用,而ios上就不行。这是我眼中安卓的一个好处。但是同时,因为开发成本低,客观上导致了软件质量较差,毕竟开发者门槛更低。另外一方面,安卓软件的适配问题总是会降低新手机的体验。对于最新的系统而言,最好的体验当然是所有软件针对这一系统版本适配,然而这是不可能的,即便是ios也要保持至少三个ios版本的支持。但是安卓长期的状态是保持超过3个版本以上的兼容性,因为碎片化。这两年可能因为新手机更新,碎片化已经缓解了,但是仍然不是很满意。比如至少微信、抖音依然支持安卓7,而目前安卓12已经上市,13也已经发布。为了兼容安卓7,软件要付出额外的代价,无论是新功能的取舍还是冗余代码和资源,这些都会一定程度上降低新系统上的性能。

    posted in 数码
  • VMware Workstation 15 Pro版永不过期KEY

    VMware Workstation 15 Pro版永不过期KEY,蓝点网为您提供。

    KEY:YZ718-4REEQ-08DHQ-JNYQC-ZQRD0

    下载安装地址:https://www.landiannews.com/?p=50822

    posted in 软件
  • 上传腾讯文档,保留word公式的方法

    现在找到的最佳方案是,把word文档保存成doc格式的老版本文档,再上传到腾讯文档,所有的公式会以图片的形式得到保留。

    目前没有办法上传并保留成可编辑的公式的办法。

    此外,在线公式编辑多数采用的是latex语法,现在word也支持latex的很多语法了,对于不太复杂的公式可以粘贴latex代码再点一下转换按钮。

    posted in 脏衣篮
  • 到头来,非200PPI显示器坑害的还是windows用户

    之前为了给mac选配一台4k显示器,找了很久24寸4k的,但是太少了,除了苹果官网上LG那台,其他的接口、色域、亮度都是问题。如果把条件放宽到27寸,那么大批显示器就出现了,p3色域、400尼特亮度的显示器有的挑了。然而27英寸4k显示器的PPI只有160左右,如果使用200%缩放比例,系统显示的按钮等元素看起来就太大了一点。Windows连接上这台27寸4k显示器之后,推荐的缩放比例是150%,我自己比较喜欢175%。mac连接这台显示器的时候,默认使用的是按照1080p的大小渲染画面,相当于200%缩放比例,导致按钮比较大,我自己会调整为更多内容的缩放比例。

    对于27寸4k显示器而言,连接windows主机使用的时候,175%的缩放比例再过半数的应用程序中使用效果不错。浏览器、QQ、微信以及更新频繁的应用程序基本都支持了缩放。但是仍然有两个问题。其一是有很多老旧的、技术上没更新的应用程序不支持缩放,比如斗鱼的客户端、使用老旧框架开发的PDF翻译软件、网络认证程序等等。其二是字体渲染问题,微软雅黑再高像素密度屏幕上的显示效果不太好。明明可以正常渲染,但是使用hinting的雅黑字体再标题栏等位置的横笔画显得格外扎眼,原本为了提高清晰度而做的工作现在成了让字体变形的拖累。此外,像adobe软件再Windows上仅仅持支100%、200%、300%的缩放比例,Windows的150%或者175%都不合适,一块27英寸的屏幕只能当作1080p屏幕的大小来使用。

    说完了Windows的坑,来说说mac为什么没有这个坑。我一直以为mac只对200%缩放有效,但我没想到的是mac再更改缩放等级的时候会采用超分辨率的策略,最终结果是几乎看不出更改缩放级别带来的清晰度上的损失。更改为显示更多内容的缩放等级后,mac会把这块屏幕当作5k屏渲染,然后再缩小一点放到4k屏幕上,理论上来讲这样会琐事一些清晰度,尤其是字体和线条,但实际上,对于160PPI的屏幕来讲,非点对点渲染带来的字体清晰度问题几乎看不出来,所以mac配合这块屏幕居然是没有坑的。唯一一个小坑,可能是显示器设置那里会提示这样的缩放等级可能会带来性能下降,但实际上没有感知到性能下降。

    posted in 脏衣篮
  • RE: 尽可能不用菜鸟驿站了

    哈哈,太搞笑了,今天快递到了,依然被放在了菜鸟驿站,搞笑的事情是申通快递客服居然说‘快递员出车祸在医院,快递是别人帮忙送的,一起放到了菜鸟驿站’,其实到这里也不过分,只要能解决问题也行,但是,客服说出的解决方法是‘你给菜鸟驿站打个电话让他们尽快送货上门’。我告诉客服我没有同意过菜鸟驿站的使用协议,我跟菜鸟驿站没有关系,不应该有任何联系,客服才说快递公司来安排送货。

    这么做确实会耗费更长的时间,不过没关系,我这个快递是个便宜而且不重要的东西,也不着急用,我就慢慢等,反感不妥协。

    如果还是菜鸟驿站联系我,我就直接投诉到邮政部门。

    posted in 脏衣篮