蚊章汇 - 扩展
type: channel
link: https://linuxcn.bwsl.wang/tag/%E6%89%A9%E5%B1%95/
items: 硬核观察 #890 微软元宇宙梦碎，砍掉了整个 VR/AR 团队
items: 为 Python 写一个 C++ 扩展模块
items: 如何安装 VSCode 扩展
items: 11 个有趣的 Firefox 浏览器扩展，改善你的浏览体验
items: 扩展一个 GraphQL 网站
items: 硬核观察 | SolarWinds 攻击至少需要有 1000 位工程师
items: 一个可放大图像的开源的浏览器扩展
items: 如何编写 VS Code 扩展
items: 3 个简单实用的 GNOME Shell 扩展
items: 4 个值得一提的 Firefox 扩展插件

硬核观察 #890 微软元宇宙梦碎，砍掉了整个 VR/AR 团队
type: item
date: 2023-01-24T01:42:00+08:00
description: 微软元宇宙梦碎，砍掉了整个 VR/AR 团队在这波大规模裁员中，微软砍掉了虚拟现实和混合现实项目的整个团队。微软在 2017 年收购的社交虚拟现实平台 AltSpaceVR 被整个砍掉了，该平台将于 3 月 10 日关闭。微软也裁掉了开发混合现实框架 MRTK 的团队，该团队本应在下个月发布新版本，MRTK 目前的重心是混合现实头戴式设备 HoloLens。消息来源：Windows Central老王点评：这代表了微软也结束了其在元宇宙领域的努力。建立在 VR/AR 之上的所谓“元宇宙”，前景堪忧啊。83% 的 GNOME 用户安装了扩展去年夏天，GNOME 邀请人们自愿在他们的系统上运行一个工具，以对系统配置方面的数据进行宏观统计。有 2560 人运行了这个工具，他们现在公布了这些数据。一些有趣的数据有：在受访者中，一半的用户在运行 Fedora；近 1/4 的用户使用的是联想的机器；90% 的系统都安装了 Flatpak；3/4 的默认浏览器是 Firefox；只有 1/10 的默认浏览器是 Chrome；83% 受访者安装了非默认的 GNOME 扩展。消息来源：GNOME老王点评：我最感兴趣这个安装扩展的比例，这充分说明了多样性的用户需求通过扩展的方式来满足是个好方法。VSCode 扩展市场容易出现欺骗性扩展根据调查，74.48% 的开发者在使用微软的 VSCode，几乎每个开发者都会使用扩展，而在 VSCode 市场上有超过 4 万个的扩展。研究发现，攻击者可以轻易地冒充流行的扩展，并欺骗不知情的开发者下载它们。一方面很难区分恶意扩展，扩展名称上的蓝色复选标记仅仅意味着发布者对随便一个域名的所有权。虽然 VSCode 市场会对每个新扩展和后续更新进行病毒扫描，并在发现恶意扩展时将其删除。但上传一个扩展，在被删除前很容易欺骗用户下载使用。最糟糕的是，VSCode 的扩展没有沙箱环境，这意味着扩展可以安装勒索软件、擦拭器和其他恶意代码，还可以改变你的本地代码，甚至使用你的 SSH 密钥来改变远程代码库中的代码。消息来源：Info World老王点评：同样是扩展的话题，这个消息反映出来的潜在危险令人担心。我想微软应该对 VSCode 的扩展安全做更多的工作。

为 Python 写一个 C++ 扩展模块
type: item
date: 2023-01-03T01:35:18+08:00
description: 使用 C 扩展为 Python 提供特定功能。在前一篇文章中，我介绍了 六个 Python 解释器。在大多数系统上，CPython 是默认的解释器，而且根据民意调查显示，它还是最流行的解释器。Cpython 的独有功能是使用扩展 API 用 C 语言编写 Python 模块。用 C 语言编写 Python 模块允许你将计算密集型代码转移到 C，同时保留 Python 的易用性。在本文中，我将向你展示如何编写一个 C++ 扩展模块。使用 C++ 而不是 C，因为大多数编译器通常都能理解这两种语言。我必须提前说明缺点：以这种方式构建的 Python 模块不能移植到其他解释器中。它们只与 CPython 解释器配合工作。因此，如果你正在寻找一种可移植性更好的与 C 语言模块交互的方式，考虑下使用 ctypes 模块。源代码和往常一样，你可以在 GitHub 上找到相关的源代码。仓库中的 C++ 文件有以下用途：my_py_module.cpp: Python 模块 MyModule 的定义my_cpp_class.h: 一个头文件 - 只有一个暴露给 Python 的 C++ 类my_class_py_type.h/cpp: Python 形式的 C++ 类pydbg.cpp: 用于调试的单独应用程序本文构建的 Python 模块不会有任何实际用途，但它是一个很好的示例。构建模块在查看源代码之前，你可以检查它是否能在你的系统上编译。我使用 CMake 来创建构建的配置信息，因此你的系统上必须安装 CMake。为了配置和构建这个模块，可以让 Python 去执行这个过程：$ python3 setup.py build 或者手动执行：$ cmake -B build $ cmake --build build 之后，在 /build 子目录下你会有一个名为 MyModule. so 的文件。定义扩展模块首先，看一下 my_py_module.cpp 文件，尤其是 PyInit_MyModule 函数：PyMODINIT_FUNC PyInit_MyModule(void) { PyObject* module = PyModule_Create(&my_module); PyObject *myclass = PyType_FromSpec(&spec_myclass); if (myclass == NULL){ return NULL; } Py_INCREF(myclass); if(PyModule_AddObject(module, "MyClass", myclass) < 0){ Py_DECREF(myclass); Py_DECREF(module); return NULL; } return module; } 这是本例中最重要的代码，因为它是 CPython 的入口点。一般来说，当一个 Python C 扩展被编译并作为共享对象二进制文件提供时，CPython 会在同名二进制文件中（<ModuleName>.so）搜索 PyInit_<ModuleName> 函数，并在试图导入时执行它。无论是声明还是实例，所有 Python 类型都是 PyObject 的一个指针。在此函数的第一部分中，module 通过 PyModule_Create(...) 创建的。正如你在 module 详述（my_py_module，同名文件）中看到的，它没有任何特殊的功能。之后，调用 PyType\_FromSpec 为自定义类型 MyClass 创建一个 Python 堆类型 定义。一个堆类型对应于一个 Python 类，然后将它赋值给 MyModule 模块。注意，如果其中一个函数返回失败，则必须减少以前创建的复制对象的引用计数，以便解释器删除它们。指定 Python 类型MyClass 详述在 my\_class\_py\_type.h 中可以找到，它作为 PyType\_Spec 的一个实例：static PyType_Spec spec_myclass = { "MyClass", // name sizeof(MyClassObject) + sizeof(MyClass), // basicsize 0, // itemsize Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // flags MyClass_slots // slots }; 它定义了一些基本类型信息，它的大小包括 Python 表示的大小（MyClassObject）和普通 C++ 类的大小（MyClass）。MyClassObject 定义如下：typedef struct { PyObject_HEAD in…

如何安装 VSCode 扩展
type: item
date: 2022-10-03T07:22:27+08:00
description: 通过图形界面和命令行两种方法，了解如何在 VSCode 中搜索和安装扩展。微软的 Visual Studio Code（VSCode）可能是最流行的 开源代码编辑器，仅次于 Vim（当然）。VSCode 通过提供几乎所有类似 IDE 的功能，提供了令人惊叹的“开箱即用”体验。 但总有一些事情是你希望 VSCode 能够另外做到的。正所谓“邻家芳草绿，隔岸风景好” : )你可以在 Visual Studio Code 市场 Marketplace 找到 VSCode 扩展插件。在 VSCode 市场上发布的扩展插件在发布之前会进行病毒扫描，所以这些扩展可以 信任。在 VSCode 中安装扩展插件你不需要访问 VSCode 市场 Marketplace 网站就可以安装扩展插件。也就是说，你可以直接从 VSCode 本身安装和管理扩展插件。我希望你已经在你使用的操作系统（比如 在 Linux）上 安装了 VSCode。打开 VSCode，最左侧是活动栏。活动栏上的最后一个按钮就是“扩展”按钮。点击它之后你会看到大量可安装的扩展。你也可以按快捷键组合 Ctrl + Shift + X 来启动扩展栏的侧面面板。如果你还没有安装任何扩展的话，你会看到 VSCode 市场上最流行的扩展列表。找到并安装某个扩展（图形界面方法）现在是时候尝试一下 Linux 人谈论的 vim 了（鼓动的语气）; )开玩笑啦。让我们安装一些对我们初学者更友好，可以轻松使用而且无需太多练习的扩展吧。从最流行的扩展列表中单击 “Visual Studio IntelliCode” （①）扩展。点击 “ 安装 Install ” 按钮（②）即可安装 “Visual Studio IntelliCode” 扩展。这个扩展会在你编写代码时为你提供 AI 预测的建议。安装后，你可以充分利用此扩展。试试用你喜欢的编程语言输入一段代码，然后看看 AI 的自动完成功能是否顺利运行而且没有拖慢你的工作进程。如果你不喜欢某个已安装的扩展插件，你只需单击 “ 卸载 Uninstall ” 按钮（②）即可完全删除不需要的扩展插件。如果你安装了多个扩展插件，并且你觉得其中某个扩展插件给你带来了问题——比如说突然崩溃；你只需点击 “ 禁用 Disable ” 按钮（①）即可禁用一个（或多个）扩展插件，并检查扩展插件 甲 是否在起作用，或者它是扩展插件 乙，还是完全不同的东西。考虑到扩展删除和重新安装需要很长时间，当你安装了多个扩展时，禁用扩展会很方便。另外方法：使用终端安装扩展你知道你可以从终端安装 VSCode 扩展吗？不过，现在你知道了！要从你的终端安装扩展程序，你需要知道扩展程序名称和发布者名称，再按照 发布者名称.扩展程序名称 的顺序找到它。比如说，如果你想安装 “Visual Studio IntelliCode” 这个扩展（前面提到的），它的名称就是 VisualStudioExptTeam.vscodeintellicode。要找出扩展用于标识的唯一名称（ID），首先要在你的浏览器中 访问 VSCode 市场。然后搜索某个扩展，在本教程中，我将以安装 “Visual Studio IntelliCode” 这个扩展为例。下一步，打开你要安装的扩展程序的页面。打开扩展程序的网页后，你将看到一个代码块。下面的截图突出标示了扩展程序的 ID。一旦你有了想要安装的扩展的 ID —— 在这种情况下是 VisualStudioExptTeam.vscodeintellicode，你可以通过在终端中运行以下命令来继续。code --install-extension VisualStudioExptTeam.vscodeintellicode 与图形界面一样，命令行界面也允许你安装、禁用、删除和管理扩展。可以通过运行以下命令查看已安装的所有扩展的列表。code --list-extensions 要禁用单个扩展，请运行以下命令：code --disable-extension <在这里输入扩展的ID> 如果要禁用所有扩展，可以运行以下命令：code --disable-extensions 上述命令将禁用 所有 已安装的扩展。这将帮助你判断导致问题的是插件，还是 VSCode 本身。现在，如果你想完全删除任何某个扩展，请运行以下命令：code --uninstall-extension <在这里输入扩展的ID> 总结我发现使用 VSCode 安装扩展要容易得多。毕竟，它直接在我编辑器左边的侧栏中。一旦你对 VSCode 的操作得心应手，也许可以看看这篇文章，VSCode 实用快捷键 可能会帮助你提高工作效率！写代码顺利，新朋友！ : )via: https://itsfoss.com/ins…

11 个有趣的 Firefox 浏览器扩展，改善你的浏览体验
type: item
date: 2022-09-19T22:20:00+08:00
description: 我想我们都同意，Firefox 是 Linux 的最佳浏览器 之一。而且锦上添花的是，你可以用一些扩展来提高你的浏览体验! 也许甚至可以将 Facebook 隔离在容器中？?在我推荐一些优秀的 Firefox 浏览器扩展之前，让我给你一些提示。安装 Firefox 扩展前须知我们都知道的一件事是 盲目地安装浏览器扩展可能是极其有害的。那么如何确定浏览器扩展是否可以安全使用？由于本文是关于 Firefox 扩展的，我们将重点放在 Firefox 的市场（获取扩展的官方渠道）。虽然没有什么是 100% 安全的，但有几件事可以检查：扩展的徽章：寻找“推荐”或“By Firefox”徽章；忽略包含警告徽章/图标的扩展。菜单和评论：虽然仅此一项并不能提供太多保证，但这是你可以在其他方面考虑的一件事。此外，关注评论的数量可以帮助你了解它在用户中是否足够受欢迎。扩展的权限：某些扩展需要诸如“访问浏览器标签页”、“导航时访问浏览器动作”等权限。记下这一点并确定你对哪些权限的舒适程度。最后更新日期：有时，即使是优秀的、知名的扩展也不会更新。这没关系，但对于像密码管理器、广告拦截器这样的扩展来说，这很重要。应始终谨慎使用超过 2 个月没更新的扩展。扩展发布者：始终确保扩展的发布者是你信任的人，或者已经发布了你信任的扩展。话虽如此，让我们来看看一些可以改善你的网络浏览体验的扩展。另请阅读：9 个开源扩展可改善你的 Mozilla Firefox 体验1、Facebook Container主要亮点：由 Mozilla Firefox 团队制作平均评分为 4.5 星（3,500 多条评论）定期更新每个人都讨厌 Facebook，但很少有人愿意从自己的网站上删除 Facebook 的跟踪元素。所以 Mozilla 引用了一个灭霸的片段 —— “好吧，我自己做”，并为 Firefox 用户创建了这个扩展。顾名思义，为 Facebook 创建了一个隔离容器（与 Docker 无关）。所有与 Facebook 相关的东西都发生在这个孤立的容器中。 这最终使社交媒体巨头更难追踪你。安装 Facebook Container2、uBlock Origin主要亮点：Mozilla 推荐的扩展4.8 星的平均评分（14,000 多条评论）定期更新uBlock Origin 是 Firefox 最知名和最受信任的“广告拦截”扩展之一。是的，它主要用于屏蔽广告，但因为它的基本任务是屏蔽你的网络浏览器中的元素，所以它可以屏蔽很多项目。广告，是的，还有网络跟踪器、加密货币矿工、弹出窗口等。虽然它的权限可能看起来有点过分，但这背后是有原因的。该扩展需要“在导航期间访问浏览器活动”和“访问所有网站的数据”等权限，以便它可以评估每个查询并阻止那些看起来有害或无用的查询。安装uBlock Origin3、Bitwarden主要亮点：Mozilla 推荐的扩展平均评分为 4.8 星（6000 多条评论）Bitwarden 应该是每个人的首选密码管理器。它为移动端、网页端和 PC 端提供免费同步支持，还可以安全地存储笔记，帮助生成用户名和密码、自动填充用户信息等等。最重要的是，它使用 GPL-3.0 许可证。谁不喜欢自由开源软件？Bitwarden 拥有我会在密码管理器中寻找的一切。如果你想升级到高级版，只需 10 美元。 我强烈推荐这个 Firefox 扩展！安装 Bitwarden4、LanguageTool主要亮点：Mozilla 推荐的扩展平均评分为 4.7 星（2900 多条评论）定期更新你是否想要 Grammarly 的开源替代品？虽然我在使用 Grammarly 时没有任何问题，但我真正喜欢和首选的是自由开源软件。LanguageTool 是一款出色的工具，可用于检查拼写错误等语法不一致、使用不同的拼写（color 与 colour）、常见的混淆词（then 与 than），你还可以使用它获得同义词库。根据我使用此扩展的经验，它几乎可以在所有文本上可靠地工作。毫无问题。该扩展最大的两个特点如下：支持超过 25 种语言。支持的语言列在“关于此扩展程序”部分的底部。使用此扩展无需注册！安装 LanguageTool5、Tranquikity Reader想象一下，你正在阅读互联网上的一篇文章，网页顶部和底部有两个横幅广告，整个右侧都是广告，底部的广告横幅是自动播放的视频。你打开广告拦截器，但视频继续播放。有时横幅中没有广告，但它们仍然占用了宝贵的屏幕空间。你是否感觉很烦恼？别担心，看，Firefox 的 Tranquility Reader 扩展可以解决这个问题。此扩展程序删除了“额外的”元素，如照片、视频、广告、社交媒体共享按钮等。它为你提供了一个干净的 UI，只有文本，因…

扩展一个 GraphQL 网站
type: item
date: 2021-11-14T19:34:20+08:00
description: 我通常会抽象地总结我为他人所做的工作（出于显而易见的原因），但是我被允许公开谈论一个网站：Vocal 。我去年为它做了一些 SRE 工作。实际上早在 2 月份，我就在 GraphQL 悉尼会议上做过一次演讲，不过这篇博客推迟了一点才发表。Vocal 是一个基于 GraphQL 的网站，它获得了人们的关注，然后就遇到了可扩展性问题，而我是来解决这个问题的。这篇文章会讲述我的工作。显然，如果你正在扩展一个 GraphQL 站点，你会发现这篇文章很有用，但其中大部分内容讲的都是当一个站点获得了足够的流量而出现的必须解决的技术问题。如果你对站点可扩展性有兴趣，你可能想先阅读 最近我发表的一系列关于可扩展性的文章。VocalVocal 是一个博客平台，内容包括日记、电影评论、文章评论、食谱、专业或业余摄影、美容和生活小贴士以及诗歌，当然，还有可爱的猫猫和狗狗照片。Vocal 的不同之处在于，它允许人们制作观众感兴趣的作品而获得报酬。作者的页面每次被浏览都可以获得一小笔钱，还能获得其他用户的捐赠。有很多专业人士在这个平台上展示他们的工作，但对于大多数普通用户来说，他们只是把 Vocal 当作一个兴趣爱好，碰巧还能赚些零花钱作为奖励。Vocal 是新泽西初创公司 Jerrick Media 的产品，更新：Jerrick Media 已经更名为 Creatd，在纳斯达克上市。2015 年，他们与 Thinkmill 合作一起开发，Thinkmill 是一家悉尼中型软件开发咨询公司，擅长 JavaScript、React 和 GraphQL 开发。剧透不幸的是，有人告诉我，由于法律原因，我不能提供具体的流量数字，但公开的信息可以说明。Alexa 对所有网站按照流量进行排名。这是我演讲中展示的 Alexa 排名图，从 2019 年 11 月到今年 2 月，Vocal 流量增长到全球排名第 5567 位。曲线增长变慢是正常的，因为它需要越来越多的流量来赢得每个位置。Vocal 现在排名 4900 名左右，显然还有很长的路要走，但对于一家初创公司来说，这一点也不寒酸。大多数初创公司都很乐意与 Vocal 互换排名。在网站升级后不久，Creatd 开展了一项营销活动，使流量翻了一番。在技术方面，我们要做的就是观察仪表盘上的上升的数字。自发布以来的 9 个月里，只有两个平台问题需要员工干预：3 月份每五年一次的 AWS RDS 证书轮换，以及一款应用推出时遇到的 Terraform 错误。作为一名 SRE，我很高兴看到 Vocal 不需要太多的平台工作来保持运行。更新：该系统也抗过了 2020 年的美国大选，没有任何意外。以下是本文技术内容的概述：技术和历史背景从 MongoDB 迁移到 Postgres部署基础设施的改造使应用程序兼容扩展措施让 HTTP 缓存发挥作用其他一些性能调整一些背景信息Thinkmill 使用 Next.js（一个基于 React 的 Web 框架）构建了一个网站，和 Keystone 在 MongoDB 前面提供的 GraphQL API 进行交互。Keystone 是一个基于 GraphQL 的无头 CMS 库：在 JavaScripy 中定义一个模式，将它与一些数据存储挂钩，并获得一个自动生成的 GraphQL API 用于数据访问。这是一个自由开源软件项目，由 Thinkmill 提供商业支持。Vocal V2Vocal 的第一版就受到了关注，它找到了一个喜欢它的用户群，并不断壮大，最终 Creatd 请求 Thinkmill 帮助开发 V2，并于去年 9 月成功推出。Creatd 员工避免了 第二个系统效应，他们一般都是根据用户的反馈进行改变，所以他们 主要是 UI 和功能更改，我就不赘述了。相反，我将讨论下我的工作内容：使新站点更加健壮和可扩展。声明：我很感谢能与 Creatd 以及 Thinkmill 在 Vocal 上的合作，并且他们允许我发表这个故事，但 我仍然是一名独立顾问，我写这篇文章没有报酬，甚至没有被要求写它，这仍然是我自己的个人博客。迁移数据库Thinkmill 在使用 MongoDB 时遇到了几个可扩展性问题，因此决定升级到 Keystone 5 以利用其新的 Postgres 支持。如果你从事技术工作的时间足够长，那你可能还记得 00 年代末的 “NOSQL” 营销，这可能听起来很有趣。NoSQL 的一个重要特点是，像 Postgres 这样的关系数据库（SQL）不像 MongoDB 这样“网站级规模”的 NoSQL 数据库那样具有可扩展性。从技术上将，这种说法是正确的，但 NoSQL 数据库的可扩展性来自它可以有效处理各种查询的折衷。简单的非关系数据库（如文档数据库和键值数据库）有其一席之地，…

硬核观察 | SolarWinds 攻击至少需要有 1000 位工程师
type: item
date: 2021-02-18T06:10:38+08:00
description: SolarWinds 攻击至少需要有 1000 位工程师这场长达数月的，可能影响了多达 1.8 万家美国政府机构和网络安全厂商的黑客攻击活动，是通过在 SolarWinds 的 Orion 网络管理软件内植入木马进行的软件供应链攻击。微软总裁布拉德•史密斯在访谈中谈到，“我认为从软件工程的角度来看，可能可以说这是世界上有史以来规模最大、最复杂的攻击”。微软也是这次攻击的受害者之一，为了调查这次攻击，微软指派了 500 名工程师参与了调查。史密斯认为，“当我们分析在微软看到的一切时，我们问自己大概有多少工程师参与过这些攻击。而我们得出的答案是，肯定超过 1000 人。”据悉，攻击者只在 Orion 内重写了 4032 行代码，而 Orion 由数百万行代码组成。我认为，这么大规模、处心积虑的攻击行为，背后没有一个严密的组织是不可能的，不过这个规模还是令人吃惊的。开源 Web 扩展项目中的恶意程序问题一些广为流传的 Chrome 开源扩展在变更了控制权之后，变成了恶意软件。这包括 The Great Suspender 的所有权在去年 10 月转移给一个未公开身份的人之后，推送了恶意更新，它会下载和执行第三方 JavaScript 脚本，并关闭了自动更新机制，这意味着即使恶意代码移除现有用户仍然会继续使用恶意版本。谷歌最近决定强制移除该恶意扩展。这样的事情并不鲜见，还包括 uBlock 转移所有权之后，被新的维护者用来牟利和让广告商付费免除屏蔽；Nano Adblocker 和 Nano Defender 也在转移后变成了恶意扩展。用户往往不会注意也不会得到开源的扩展应用所有权转移的通知，这就为使用开源扩展带来了潜在的风险。因为，谷歌并不会对这些扩展进行事先的人工审查，而用户基于之前的口碑也往往在受到侵害后才可能发现问题。我认为，这个问题需要得到重视，作为托管这些扩展的谷歌商店，应该建立相应的机制，最起码可以做到明确提醒所有权变更，或对刻意的更新进行更严格的审查。谷歌在称赞其 Stadia 工作室一周后，关闭了它谷歌在 2 月 1 日出人意料地宣布，将关闭 Stadia 游戏开发工作室。但这一消息不仅仅是对 Stadia 客户的惊吓，对于 Stadia 开发团队来说更是晴天霹雳。据报道，就在一周前，Stadia 开发团队还被告知，工作室正在取得“巨大的进步”。据报道，谷歌副总裁、Stadia 总经理哈里森承认，当他发邮件赞扬团队的进展时，谷歌的高管们已经知道关闭的消息了。我认为，这也太儿戏了，这些领导人说的话都是官样文章，你相信就天真了。

一个可放大图像的开源的浏览器扩展
type: item
date: 2020-07-06T08:17:02+08:00
description: 想细看网络图像并不总是那么简单，但是 Hover Zoom+ 让它像鼠标滑动一样容易。你是否曾经在访问网站时希望查看更大的图像？我经常遇到这种情况，而要做到这点并不总是那么容易。有时，我在源码中筛选，使用 Ctrl + F 搜索图像，复制图像源地址并将其粘贴到新窗口中，以便以全尺寸查看图像。或者，另一个选择是右键单击，复制图像地址，然后粘贴到新选项卡中。Hover Zoom+ 让这个过程更加简单。Hover Zoom+ 是一个简单 Chrome 扩展程序，在 MIT 许可证下发布，可在 Chrome 商店中找到，它的源码可在 GitHub 上获得。它也适用于 Firefox。这个应用使得该过程更加容易。只需将鼠标悬停在图像上，你将看到一个弹出窗口来显示该图像的全部内容，它会匹配你的浏览器窗口，无论图像是否被裁剪（或者图像尺寸适当，它看上去会是一样的）。这可能很有趣，因为有时可能会裁剪原始图像，以适应空间或聚焦于图像的特定部分。但是，你无法右键单击并直接从弹出窗口中保存图像。根据加州圣何塞的开发人员 Oleg Anashkin 的说法，“这是原始 HoverZoom 扩展的开源版本，现已被恶意软件所占领，并被从商店中删除。在此版本中，所有间谍软件均已删除，许多 bug 已被修复，并添加了新功能。它默认不会收集任何统计信息。”我在 Windows 10 笔记本上的 Chrome 中安装了此扩展，然后试用了一下。安装扩展后，我将鼠标悬停在图像上，它在弹出窗口中显示了比实际更大的图像。但是，Hover Zoom+ 不适用于所有网站或所有图像。它适用于 Facebook 和 Twitter，但不适用于这些网站上的赞助内容。用户可以轻松切换该应用以针对特定站点启用或禁用它。使用 Hover Zoom+ 可以很容易地看到 Instagram 上的这只可爱小猫而无需实际阅读帖子（方便！）：via: https://opensource.com/article/20/6/hoverzoom作者：Jeff Macharyas 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

如何编写 VS Code 扩展
type: item
date: 2020-06-13T18:54:57+08:00
description: 通过为流行的代码编辑器编写自己的扩展来添加缺失的功能。Visual Studio Code（VS Code）是微软为 Linux、Windows 和 macOS 创建的跨平台代码编辑器。遗憾的是，微软版本的 VS Code 是在 Microsoft Software License 下发布的，这不是一个开源的许可证。然而，它的源代码是开源的，在 MIT 许可证下由 VSCodium 项目发布。VSCodium 和 VS Code一样，支持扩展、内嵌式 Git 控制、GitHub 集成、语法高亮、调试、智能代码补完、代码片段等。换句话说，对于大多数用户来说，使用 VS Code 和 VSCodium 没有什么区别，而且后者是完全开源的！什么是 VS Code 扩展？ 扩展 extension 可以让你为 VS Code 或 VSCodium 添加功能。你可以在 GUI 中或从终端安装扩展。你也可以构建自己的扩展。有几个你可能想学习如何构建扩展的原因：想要添加一些功能： 如果缺失你想要的功能，你可以创建一个扩展来添加它。为了乐趣和学习： 扩展 API 允许你探索 VSCodium 是如何工作的，这是一件有趣的事情。为了提高您的技能： 创建扩展可以提高你的编程技能。为了成名： 创建一个对他人有用的扩展可以提高你的公众形象。安装工具在你开始之前，你必须已经安装了 Node.js、npm 和 VS Code 或 VSCodium。要生成一个扩展，你还需要以下工具：Yeoman，是一个开源的客户端脚手架工具，可以帮助你搭建新项目；以及 vscode-generator-code，是 VS Code 团队创建的 Yeoman 生成器。构建一个扩展在本教程中，你将构建一个扩展，它可以为应用程序初始化一个 Docker 镜像。生成一个扩展骨架要在全局范围内安装并运行 Yeoman 生成器，请在命令提示符或终端中输入以下内容：npm install -g yo generator-code 导航到要生成扩展的文件夹，键入以下命令，然后按回车：yo code 根据提示，你必须回答一些关于你的扩展的问题：你想创建什么类型的扩展？ 使用上下箭头选择其中一个选项。在本文中，我将只介绍第一个选项，New Extension (TypeScript)。你的扩展名称是什么？ 输入你的扩展名称。我的叫 initdockerapp。（我相信你会有一个更好的名字。）你的扩展的标识符是什么？ 请保持原样。你的扩展的描述是什么？ 写一些关于你的扩展的内容（你可以现在填写或稍后编辑它）。初始化 Git 仓库？ 这将初始化一个 Git 仓库，你可以稍后添加 set-remote。使用哪个包管理器？ 你可以选择 yarn 或 npm；我使用 npm。按回车键后，就会开始安装所需的依赖项。最后显示："Your extension initdockerapp has been created!"干的漂亮！检查项目的结构检查你生成的东西和项目结构。导航到新的文件夹，并在终端中键入 cd initdockerapp。一旦你进入该目录，键入 .code。它将在你的编辑器中打开，看起来像这样。 （Hussain Ansari, CC BY-SA 4.0）最需要注意的两个文件是 src 文件夹内的 package.json 和 extension.ts。package.json首先来看看 package.json，它应该是这样的：{ "name": "initdockerapp", "displayName": "initdockerapp", "description": "", "version": "0.0.1", "engines": { "vscode": "^1.44.0" }, "categories": [ "Other" ], "activationEvents": [ "onCommand:initdockerapp.initialize" ], "main": "./out/extension.js", "contributes": { "commands": [ { "command": "initdockerapp.initialize", "title": "Initialize A Docker Application" } ] }, "scripts": { "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "lint": "eslint src --ext ts", "watch": "tsc -watch -p ./", "pretest": "npm run compile …

3 个简单实用的 GNOME Shell 扩展
type: item
date: 2019-02-14T07:47:35+08:00
description: Fedora 工作站的默认桌面 GNOME Shell，因其极简、整洁的用户界面而闻名，并深受许多用户的喜爱。它还以可使用扩展添加到 stock 界面的能力而闻名。在本文中，我们将介绍 GNOME Shell 的 3 个简单且有用的扩展。这三个扩展为你的桌面提供了更多的行为，可以完成你可能每天都会做的简单任务。安装扩展程序安装 GNOME Shell 扩展的最快捷、最简单的方法是使用“软件”应用。有关详细信息，请查看 Magazine 以前的文章：可移动驱动器菜单Fedora 29 中的 Removable Drive Menu 扩展首先是 Removable Drive Menu 扩展。如果你的计算机中有可移动驱动器，它是一个可在系统托盘中添加一个 widget 的简单工具。它可以使你轻松打开可移动驱动器中的文件，或者快速方便地弹出驱动器以安全移除设备。软件应用中的 Removable Drive Menu扩展之扩展如果你一直在安装和尝试新扩展，那么 Extensions 扩展非常有用。它提供了所有已安装扩展的列表，允许你启用或禁用它们。此外，如果该扩展有设置，那么可以快速打开每个扩展的设置对话框。软件中的 Extensions 扩展无用的时钟移动最后的是列表中最简单的扩展。Frippery Move Clock，只是将时钟位置从顶部栏的中心向右移动，位于状态区旁边。via: https://fedoramagazine.org/3-simple-and-useful-gnome-shell-extensions/作者：Ryan Lerch 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

4 个值得一提的 Firefox 扩展插件
type: item
date: 2019-01-21T19:09:09+08:00
description: 这些扩展可以使火狐更具生产力和使用乐趣。自从大约 12 年前 Firefox（火狐浏览器）v2.0 推出以来, 我一直是它的用户。它不是那时最好的网络浏览器，但是总会有一个理由让我回到它：我最喜爱的浏览器扩展插件不能工作在其它浏览器上。如今，我喜欢现下的 Firefox，因为它快速、可定制和开源，我也很欣赏那些体现了原开发人员从未想到过的想法的扩展插件：如果你想在没有鼠标的情况下浏览网页呢？如果你不喜欢盯着晚上从显示器里发出来的强光呢？如何在 YouTube 和其他视频托管网站上使用一个更专业的播放器来获得更好的性能和更多播放控制呢？如果你需要更复杂的方法来禁用跟踪器和加快加载页面，该怎么办？幸运的是，这些问题都有答案，我将展现给你我最喜爱的扩展 —— 所有这些都是免费软件或开源的 (即，在 GNU GPL、MPL 或 Apache 许可帧下) ，它们可以使一个优秀的浏览器更优秀。尽管术语 加载项 add-on 和 扩展 extension 的含义稍微不同，但我在本文中的使用不会区分它们。TridactylTridactyl 的新选项卡页面，展示了链接的指引。Tridactyl 使你能够在大多数浏览活动中使用键盘。它的灵感来自于现已不复存在的 Vimperator 和 Pentadactyl，而它们受到了 Vim 的默认键绑定的启发。由于我已经习惯了 Vim 和其他命令行应用程序，我发现了它的功能类似于使用键值 h/j/k/l 进行导航，用 f/F 可以与超链接进行交互，而且创建自定义的键绑定和命令非常方便。Tridactyl 最近刚刚实现了一个可选的本地信使（目前，仅适用于 GNU/Linux 和 Mac OSX），提供了更酷的功能。例如，有了它，你可以隐藏 Firefox 用户界面上的一些元素（以 Vimperator 和 Pentadactyl 的方式）、在外部程序中打开链接或当前页（我经常用 mpv 和 youtube-dl 播放视频）、通过按 Ctrl-I（或者任意你选择的组合键）用你喜爱的编辑器来编辑文本框的内容。话虽如此，但要记住，这是一个相对早期的项目，细节可能还是很粗糙。另一方面，它的开发非常活跃，当你回顾它早期的缺陷时，未尝不是一种乐趣。Open WithOpen With 提供的菜单。我可以用这里列出的一个外部程序打开当前页面。说到与外部程序的互动，有时能够用鼠标来做到这一点还是让人很高兴的。这是 Open With 的用武之地。除了添加的上下文菜单（如屏幕截图所示）之外，你还可以通过单击加载项栏上的扩展图标来找到自己定义的命令。如它在 Mozilla Add-ons 页面上 的图标和描述所示，它主要是为了切换到其它的 web 浏览器，但我也可以轻松地将它与 mpv 和 youtube-dl 相配合。它也提供了键盘快捷方式，但它们受到了严重限制。可以在扩展设置的下拉列表中选择的组合不超过三种。相反，Tridactyl 允许我将命令分配给几乎任何没有被 Firefox 所阻止的东西。没错，Open With 目前为鼠标而准备的。Stylus!")在这个屏幕截图中，我刚刚搜索并为当前正在浏览的 Stylus 的网站安装了一个黑暗主题。即使是弹出窗口也可以定制风格（称为 Deepdark Stylus）！Stylus 是一个用户样式管理器，这意味着可以通过编写自定义 CSS 规则并将其加载到 Stylus 中来更改任何网页的外观。如果你不懂 CSS，在如 userstyles.org 这样网站上有大量的其他人制作的样式。现在，你可能会问，“这不就是 Stylish 么？” 你是对的！Stylus 是基于 Stylish 的，并提供了更多的改进：它不包含任何远程记录、尊重你的隐私，所有开发都是公开的（尽管 Stylish 仍在积极开发，我一直未能找到最新版本的源代码），而且它还支持 UserCSS。UserCSS 是一种有趣的格式，尤其是对于开发人员来说。我已经为不同的网站写了几种用户样式（主要是黑暗主题，和为了提高可读性的调整），虽然 Stylus 的内部编辑器很好，我还是喜欢用 Neovim 编辑代码。为了做到这样我所需要做的就是用 “.user.css” 作为本地加载文件的后缀名，在 Stylus 里启动 “Live Reload” 选项，只要我在 Neovim 中保存文件就会应用所有的更改。它也支持远程 UserCSS 文件，因此，每当我将更改推送到 GitHub 或任何基于 git 的开发平台时，它们将自动对用户可用。（我提供了指向该文件的原始版本的链接，以便他们可以轻松地访问它。）uMatrixuMatrix 的用户界面，显示当前访问过的网页的当前规则。Jeremy Garcia 在他发表在 Open…