1.npmmirror 镜像站已内置支持类似 unpkg cdn 解析能力
2.AnnotationAnnotation处理器
3.WSL2 安装并下载、网站网页编译AOSP源码
4.你真的源码懂VirtualDisplay虚拟屏幕的Mirror模式吗?
5.Linux环境源码安装GCC/CMAKE
6.Mirror Networking网络框架源码学习
npmmirror 镜像站已内置支持类似 unpkg cdn 解析能力
前端开发者熟知的unpkg是一个基于npm registry的静态资源CDN服务,提供便捷的网站网页静态资源访问能力。访问unpkg地址时,源码回源服务根据URL参数,网站网页从npm registry下载对应的源码my sal源码npm包,解压后响应对应的网站网页文件内容。
在国内,源码npmmirror镜像站(前身为淘宝npm源)是网站网页广受前端开发者欢迎的公共镜像站,其单月下载量超过亿次,源码源码开源,网站网页国内许多公司基于其二次开发并部署企业私有包管理服务。源码
考虑到npmmirror本身提供tgzcdn托管服务,网站网页额外增加类似unpkg的源码cdn解析能力,成本较低。网站网页因此,最近实现了此功能,现已正式上线,URL规范如下:
相关RFC和Issue如下,欢迎试用并提PR帮助完善:-RFC:cnpm/cnpmcore/issues/-PR:cnpm/cnpmcore/pull/,cnpm/cnpmcore/pull/
在内网部署cnpmcore时,请谨慎启用此能力,并考虑二次开发白名单审核机制,以防内部包意外泄露至CDN,导致安全风险或合规问题。
注:请不要忘记夸奖我的题图。
AnnotationAnnotation处理器
注释处理工具(Annotation Processing Tool,简称APT)是一种强大的工具,允许在编译阶段处理源代码中的注释信息,从而生成更灵活的代码结构,进一步解放了程序员在编写样板式代码时的束缚。 为了让运行时(RUNTIME)程序能够利用注释(Annotation)中的信息,编写注释时需添加@Retention(RetentionPolicy.RUNTIME)注释。通过这一标记,编译器将注释信息保留在编译后的字节码中,确保其在运行时可以被程序访问。 构建自定义注释信息处理器时,需要熟悉以下几个关键API: 1. **Mirror API**:尽管已标记为过时(Deprecated),努力向上的源码但Mirror API仍然在一些特定的注释处理器实现中发挥作用,帮助解析和操作编译时的类型、包、类、接口等元数据。 2. **javax.annotation.processing**:这是注释处理器API的核心,提供了处理注释的基本框架,包括注册处理器、访问注解信息、生成和报告错误等关键功能。 3. **javax.lang.model**:作为Java语言模型(Language Model)的一部分,提供了对Java语言结构的抽象表示,包括类型、成员、包等概念,便于注释处理器理解和操作。 4. **javax.lang.model.element**:这个包包含了用于表示语言元素(如类型、成员、包、注解类型等)的类,是构建注释处理器时不可或缺的工具。 5. **javax.lang.model.type**:专注于类型信息的抽象表示,提供了访问和操作类型参数、泛型类型、原始类型和类型变量的接口。 通过熟练运用这些API,注释处理器可以实现复杂的功能,如自动生成代码、验证代码规范、提供运行时元数据服务等,极大地增强了Java开发的灵活性和效率。扩展资料
java.lang.annotation,接口 Annotation。对于Annotation,是Java5的新特性,JDK5引入了Metedata(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的脚本源码解读作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形势应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。WSL2 安装并下载、编译AOSP源码
安装WSL2
参考链接:安装WSL要求Windows 版本及更高版本(内部版本及更高版本)或Windows 。在power shell或cmd执行如下命令。
执行完之后就安装了Linux for Windows,并且打开了Windows的虚拟机平台和Linux子系统功能,并设置wsl默认版本为2。也可以手动安装,先在控制面板中找到启用或关闭Windows功能,勾选虚拟机平台和适用于Linux的Windows子系统功能。然后在应用商店找到Linux子系统(例如Ubuntu)进行安装。
如果是升级安装wsl,可能还需要同时升级linux内核。直接下载msi升级安装文件,点击安装即可。具体可参考:旧版WSL的手动安装步骤
硬盘设置
这里分为两类,一是将AOSP源码放在Windows文件系统下,二是将源码放置在WSL中。对于前者,需要修改文件目录的大小写敏感,新建完源码目录后,用管理员身份打开Windows的Powershell,执行以下命令:
其中的path就是刚新建用来同步AOSP源码的目录,需要注意的是,这个命令只对指定的目录有效,不会改变已存在的子目录的大小写敏感,所以要在同步代码之前设置好。根据文章:WSL编译AOSP必要的几个前置工作,还需要重新挂载磁盘。如果源码放在了Windows驱动器上,比如说F:\aosp,在WSL中的路径应该是/mnt/f/aosp这种形式的,此时需要以drvfs文件系统重新挂载盘符,原纸指标源码否则编译到中途会报错:
注意,每次WSL重启,在编译之前都需要执行这步操作,也可以将它新建成WSL的一个开机服务,确保每次打开WSL都会执行这两段命令。如果是将源码放置在WSL中,需要注意WSL默认占用C盘空间,保证C盘有足够的空间,或者将WSL迁移到别的盘符。因为我的硬盘没有分区,不用担心占满C盘的空间,所以直接将源码放在WSL中编译。WSL安装之后默认是GB大小,对于AOSP的编译是不够的。可通过df命令查看容量,下面是我编译完之后的容量,可以看到占用了GB。
扩展WSL 2虚拟硬盘的大小 如何管理WSL磁盘空间
输出如下:
经过如上操作,将wsl的虚拟磁盘大小调整到1TB。
源码下载
创建bin,并加入path:
下载repo:
下载代码有两种方式,使用每月更新的初始化包或者传统初始化方式。
下载mirrors.tuna.tsinghua.edu.cn...,下载完成后记得根据checksum.txt的内容校验一下。由于所有代码都是从隐藏的.repo目录中checkout出来的,所以我们只保留了.repo目录,下载后解压再repo sync一遍即可得到完整的目录。使用方法如下:
此后,每次只需运行repo sync即可保持同步。
建立工作目录并初始化仓库: repo init -u mirrors.tuna.tsinghua.edu.cn... 如果需要某个特定的Android版本(列表): repo init -u mirrors.tuna.tsinghua.edu.cn... -b android-4.0.1_r1 同步源码树(以后只需执行这条命令来同步): repo sync 详细可见:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror Android源码(AOSP)下载与编译 - 掘金
设置WSL内存大小
直接编译源码,会因为内存不足导致失败,通过free -m查看内存,只有4GB内存,swap空间只有2GB。可以通过设置WSL配置文件来修改相关配置属性。在用户目录下新建.wslconfig文件,在文件管理器输入%USERPROFILE%可找到用户文件夹。动漫源码怎么用注意这里新建.wslconfig文件不要用新建文本文件的方式,这样文件可能没法被正确识别。可以通过命令行输入code .wslconfig的方式。
配置文件如下,根据自己的硬件配置尽可能多的分配多点资源,在编译完成后也能修改回来。我电脑是GB内存,所以给WSL配置GB内存,还有GB swap空间。
编译源码
编译源码就是常规流程,lunch项根据自己需要进行选择,编译线程数根据机器配置选择。
编译可能会报错缺少库文件,直接安装即可。sudo apt-get install libncurses5 如果需要编译出CMakeLists文件,方便导入CLion,需要在编译前添加环境变量。
编译成功!!
导入Clion效果。
若需要导入Android Studio中,还需要生成配置索引。
这一步需要Java环境,提前安装一下。sudo apt install openjdk--jdk
最终效果如下:
你真的懂VirtualDisplay虚拟屏幕的Mirror模式吗?
理解VirtualDisplay的Mirror模式关键在于其如何根据屏幕内容的有无自动切换显示模式。当主屏幕无内容时,它会启用镜像模式,将主屏幕内容复制到虚拟屏幕上;而当虚拟屏幕有自定义内容时,它会独立显示,不会镜像主屏幕。
原理研究步骤:
1. 要观察VirtualDisplay的显示行为,首先通过`dumpsys SurfaceFlinger`查看Display的层级数据和图层索引,确定layer能否在Display上显示。
2. 比较镜像模式和独立显示时,layerStack的差异,发现层栈在有内容和无内容时会发生变化。
3. 通过堆栈追踪,发现当Task在虚拟屏幕中移动时,会触发layerStack的修改,这与SurfaceControl相关。
核心源码分析:
- VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR设置下,会检查DisplayContent的mApplySurfaceChangesTransaction,判断是否有内容。
- 当内容变化时,会调用setDisplayLayerStack来调整层栈,确保正确的Display显示。
- 层栈匹配由SurfaceFlinger控制,决定显示哪个Display。
进一步资料:
- 深入研究可参考:[链接](mp.weixin.qq.com/s/LbVL...),以及其他课程资料:[链接](mp.weixin.qq.com/s/Qv8z...)。
- 视频教程可在B站观看:[链接](bilibili.com/video/BV1w...)。
通过以上分析,VirtualDisplay的Mirror模式依赖于内容的存在与否来决定是否镜像主屏幕,以及如何调整层栈以确保正确的显示。
Linux环境源码安装GCC/CMAKE
为了在Linux环境下源码安装GCC和CMAKE,我们需要遵循详细的步骤和策略。对于GCC源码,我们可以从GitHub-gcc-mirror/gcc获取4.4.6版本。接下来,进入下载后的GCC源代码目录。
在配置和编译GCC时,首先应该明确指定安装的目录,避免冲突。可能在配置脚本时遇到错误,这时候需要解决依赖项问题。分别安装MPFR、MPC和任何其他必要的依赖库。对于GCC8.3及以上版本,内部集成脚本能够简便地获取这些依赖库。
安装库路径后,再次执行配置文件,加入库路径参数,确保安装的每个步骤顺利进行。配置完成后,整个GCC安装过程即宣告成功。
为了测试GCC是否正确安装,遵循指导进行验证。
CMake的安装同样关键,可以通过直接指定需要的GCC版本来简化安装流程。在CMake命令行参数中指定GCC路径也是可行的。
在运行GCC4.4.6编译的程序时,可能存在系统路径问题,这是因为我们选择的是不替换安装方式。因此,需要额外操作,确保所需的库被正确添加到路径中。
遇到GCC多版本引起的ABI兼容问题时,如果编译链接过程中遇到“undefined reference to"“std::__cxx ***””错误,这提示可能是C++ ABI问题。处理方法是,针对GCC5.1之前版本发布的libstdc++中新增的ABI,通过添加定义-D_GLIBCXX_USE_CXX_ABI=0来解决该问题。
对于GDB版本的问题,特别在GCC.1的使用中,要求C++的编译器,导致了旧版本GDB启动出现Segment Fault。解决办法是升级GDB版本。
附录中提供了一些额外资源,例如Mingw下载,适用于位和位Windows的最新版x_-win-sjlj;CMake下载链接以及GCC的GitHub地址等。遵循这些资源和提示,能够帮助用户顺畅进行Linux环境下的GCC和CMAKE的源码安装与配置。
Mirror Networking网络框架源码学习
在游戏开发领域,特别是多人在线游戏的制作,网络框架的选择与理解至关重要。本文将带领大家了解并学习Mirror网络框架,这是UNET的替代品,帮助开发者更好地掌握Unity项目内容。Mirror提供了强大的网络功能,使得客户端和服务端逻辑集成在同一个系统中。
对于Mirror框架,CMD(Command)和RPC(Remote Procedure Call)是核心功能。CMD允许开发者在客户端和服务端之间传递命令,而RPC则允许远程调用服务端方法,实现异步通信。这些标签用于区分客户端与服务端的代码逻辑。
例如在Examples/Chat中,通过设置一个端作为服务器,其他端连接到localhost作为客户端,可以实现基本的聊天功能。值得注意的是,这个案例中的数据同步机制,尤其是SyncVar的作用,对于理解如何在客户端和服务端之间共享和同步数据至关重要。
SyncVar通过编译后处理和Update驱动同步实现数据的实时同步。在编译后处理阶段,通过SerializeSyncVars初始化所有SyncVar,并在逐帧更新中驱动同步过程,确保数据在客户端和服务端保持一致。
在服务器监听部分,以KcpTransport为例,分为初始化绑定、接收更新数据和业务处理。这一流程展示了如何在服务器端接收和处理网络数据,确保游戏逻辑的正确执行。
为了进一步深入学习,推荐查阅以下资源:
- Unity3D-network网络相关(一)_alayeshi的专栏-CSDN博客
- Unity3D-network网络相关(二)_alayeshi的专栏-CSDN博客
- 交大计算机课程(5):计算机网络
- GitHub - vis2k/Mirror: #1 Open Source Unity Networking Library
- Mirror Documentation
- Unity 使用Mirror框架制作多人游戏
- MirrorNetworking
通过这些资源,开发者可以全面了解Mirror网络框架的使用方法,从而在多人游戏开发中获得更多的灵活性和控制力。
探寻最优linux镜像网站linux镜像网站
探寻最优Linux镜像网站
Linux是一种自由、开放源代码的操作系统,其应用及用户群体越来越广泛,已经从最初的服务器端应用扩展到了桌面端、移动端等各个领域。然而,作为一个开放源代码的操作系统,不同版本的Linux安装包及其应用软件需要从不同的服务器下载,而服务器不同,下载速度也会不同。因此,如何选取最优的Linux镜像网站来下载软件包,成为了Linux用户必须要解决的问题。
常见的Linux镜像网站包括: 阿里云、网易云、中科大、清华大学镜像站等。这篇文章将采用Python编程语言,通过测速工具获取Linux镜像站点下载速度,以得出最优Linux镜像网站。
1.编写Python程序获取镜像站点速度
通过Python编程语言,我们可以很快地编写程序来测量和比较各个Linux镜像网站的下载速度。首先,我们需要安装Python requests 和time模块。
import requests
import time
def test_speed(url):
start_time = time.time()
try:
response = requests.get(url, timeout=3)
end_time = time.time()
speed = round(response.content.__len__() / (end_time-start_time) / , 2)
return speed
except:
return -1
上述代码中,定义了test_speed()函数,该函数接收一个url参数,在函数内使用requests.get()方法获取返回的数据,如果成功,计算下载速度,并返回。如果下载失败,返回-1。
2.测试镜像站点速度
我们定义一个Linux镜像网站列表来测试速度,如下所示:
mirror_list = [
“/ubuntu/dists/xenial/main/installer-amd/”,
“/ubuntu/dists/xenial/main/installer-amd/”
]
使用for循环循环遍历镜像站点,调用test_speed()函数进行速度测试,并将测试结果输出:
for mirror in mirror_list:
print(mirror, test_speed(mirror))
3.选择最优的Linux镜像网站
我们定义一个函数get_best_mirror(),该函数依次对所有Linux镜像网站进行速度测试,并找出其中下载速度最快的镜像网站,并返回该站点的url:
def get_best_mirror():
mirror_list = [
“/ubuntu/dists/xenial/main/installer-amd/”,
“/ubuntu/dists/xenial/main/installer-amd/”
]
best_mirror = “”
best_speed = 0
for mirror in mirror_list:
speed = test_speed(mirror)
if speed > best_speed:
best_mirror = mirror
best_speed = speed
return best_mirror
运行get_best_mirror()函数,将输出下载速度最快的Linux镜像网站。
综上所述,我们可以通过Python编程语言,使用测速工具获取Linux镜像站点的下载速度,以得出最优的Linux镜像网站。这样可以提高软件的下载速度,节约时间,提高效率。
从源码解析Electron的安装为什么这么慢
Electron的安装速度慢主要源于其跨平台特性导致的二进制基座差异化和默认下载机制。本文通过解析源码,揭示了下载过程中的关键环节。
安装过程:
当通过npm install electron -D命令下载时,如果没有配置特定的镜像,npm会默认下载对应平台的二进制基座。这个过程可能会因为网络原因或镜像源选择而变得缓慢。
解决方法:
设置.npmrc文件中的ELECTRON_MIRROR,指向国内镜像源,如'https://npm.taobao.org/mirrors/electron/',可显著加快下载速度。
源码分析:
- @electron/get模块负责下载Electron的二进制制品,它会优先检查本地缓存,若存在则直接使用,否则从远程下载。
- 缓存路径默认在Windows下为~/AppData/Local/electron/Cache/,可以通过设置控制缓存行为。
附录:
- @electron/get支持自定义镜像源、版本和下载选项,以及代理设置。
- 通过环境变量,如ELECTRON_GET_USE_PROXY,可以配置代理支持。
总之,理解Electron安装的底层原理和优化策略,能够帮助开发者有效提升开发效率。