群组信息 私有

administrators

成员列表

  • 研究生避开不靠谱靠谱导师的一个可行的方法

    首先去找目标导师最近发表的文章,去要实验代码或者说明,表示想要复现,如果对方无法给出或者给的东西有明显问题,就说明这个导师不靠谱。

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

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

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

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

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

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

    发布在 编程
  • 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客户端开发者是不小心还是心态开放。

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

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

    发布在 软件
  • 用 chrome 记住密码到底不安全

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

    发布在 软件
  • 讲话时在中文中夹杂英语

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

    发布在 文化
  • 为什么都这么讨厌安卓?安卓的缺点有哪些

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

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

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

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

    发布在 数码
  • macOS 上为打开某个应用设置快捷键的方法

    首先打开‘自动操作’这个系统自带的应用,直接搜索‘auto’就能找到它,然后新建文稿,选择快速操作,在窗口左上角搜索‘应用’,在列表里看到‘开启应用’,把它拖动到右边的工作区,再选取想要开启的应用,最后按下command 和 S组合键保存,取个名字比如open Calculator,保存之后就可以关闭这个应用了。接着打开系统设置,选择键盘,再选择快捷键选项卡,左侧列表里找到服务,右侧找到刚刚保存时起的名称,为它添加一个快捷键组合即可。

    发布在 脏衣篮
  • Paxos算法的C++实现实验代码

    Paxos 算法是莱斯利·兰伯特于 1990 年提出的一种基于消息传递的一致性算法。这个算法被认为是类似算法中最有效的。目前在 Google 的 Chubby、MegaStore、 Spanner 等系统中得到了应用,另外,ZooKeeper 也使用了 Paxos 算法。
    本实训主要介绍 Paxos 算法的基本概念,并根据该算法流程完成相关程序设计。

    找到了实现代码,代码分享,在这里:https://github.com/huoyu820125/SecondPaxos

    发布在 脏衣篮
  • 联合国的网站在线志愿者/工作申请机会,完成后可以拿到证书

    地址:https://app.unv.org/

    今天在v2ex上看到的,联合国有一些在线的任务找人做,做完之后可以拿到证书没如果可以的话,这证书还是有点唬人的。

    发布在 脏衣篮