- ubuntu 安装gcc 10
AI算法网奇
c++入门宝典win/ubuntuubuntulinux运维
目录ubuntu安装gcc10使用update-alternatives命令更新默认版本添加新版本解决方法:选择默认版本2.验证版本是否更新1.验证GCC安装路径2.添加GCC路径到PATH(如果未自动添加)GCC4.8.2在ubuntu下编译安装ubuntu安装gcc10sudoadd-apt-repositoryppa:ubuntu-toolchain-r/testsudoaptupdateo
- 2021.11.20【读书笔记】|差异可变剪接事件及DTU分析
穆易青
RNA-seq二代读书笔记数据分析自动化业务流程测试
一、可变剪接(AlternativeSplicing)定义:同一前体mRNA分子,可以在不同的剪接位点发生剪接反应,生成不同的mRNA分子,最终产生不同的蛋白质分子的一种RNA剪切方式。意义:1.AS是形成生物多样性的重要原因之一2.AS是基因表达调控的重要组成部分,与基因表达的时空性息息相关3.由于可变剪接直接造成表达产物的差异,因此可变剪接在一些性状、疾病中发挥重要作用。识别:分成了7个类型识
- kali python环境搭建
vlan103
pythonlinux
文章目录写在前面安装python修改pip写在前面本人搭建环境能力真的太菜了2333,经常环境奔溃,因为上次硬盘烧坏了之后,数据迁移了一下但还是要有一些后遗症,kaliLinux也崩了。然后又重新配个环境记录一下吧。安装pythonkali自带2和3版本,实在没有直接终端输入也会提示安装创建链接update-alternatives--install/usr/bin/pythonpython/us
- tryhackme——Abusing Windows Internals(进程注入)
PT_silver
Tryhackmewindowsmicrosoft
文章目录一、AbusingProcesses二、进程镂空三、线程劫持四、DLL注入五、MemoryExecutionAlternatives一、AbusingProcesses操作系统上运行的应用程序可以包含一个或多个进程,进程表示正在执行的程序。进程包含许多其他子组件,并且直接与内存或虚拟内存交互,下表描述了进程的每个关键组件及其用途。ProcessComponentPurpose私有虚拟地址空
- 上位机知识篇---Python&Pip安装与配置
Ronin-Lotus
上位机知识篇上位机操作篇程序代码篇pythonpipchromelinux
文章目录前言1.安装Python3.9方法一:通过APT仓库安装(推荐)安装依赖添加Python3.9的PPA方法二:源码编译安装(通用方法)下载编译工具下载Python3.9的源码编译安装2.设置Python3.9为默认版本使用update-alternatives管理多版本注册到updata-alternatives系统选择默认版本验证Python默认版本3.安装并设置pip为默认安装pip3
- configurable_alternatives 方法与使用技巧
yibuapi_com
#langchain实用技巧数据库java开发语言gptpythonaiAI编程
核心功能与应用场景在开发调试过程中,当需要动态替换链中的完整组件(如大语言模型、提示词模板等)并保持对话连续性时,可通过configurable_alternatives()实现运行时组件热替换。典型场景包括:调试时切换不同版本模型(如GPT-4o→GPT-3.5)生产环境动态降级模型服务多模型A/B测试与bind()的区别:本方法用于整体组件替换而非参数调整动态替换四步流程1.定义组件标识键为可
- 更改系统默认Python版本
静悦时光
Python开发环境python
1.局部替换法(推荐)在~/.local/bin目录下建立一个python3软链接,然后在.bashrc中导入配置PATH环境变量PATH=~/.local/bin:$PATH即可。【注意】软链接的名字要和系统中默认python的名字一致才行,这样才能达到覆盖默认的效果。2.update-alternatives更换优先级法(不推荐)当同时安装多个Python版本时,比如安装了一个3.x版本和一个
- Ubuntu20.04更新gcc g++版本
MobiCetus
linux服务器ubuntu
Ubuntu20.04更新gccg++版本升级sudoaptupdatesudoaptinstallgcc-10g++-10配置默认gcc/g++链接优先级sudoupdate-alternatives--install/usr/bin/gccgcc/usr/bin/gcc-1020sudoupdate-alternatives--install/usr/bin/g++g++/usr/bin/g+
- 在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用
daqinzl
linuxqtC++Ubuntu20.04Qt5交叉编译Windows应用
参考链接:https://blog.csdn.net/Interview_TC/article/details/146050419https://bugreports.qt.io/browse/QTBUG-82592重要设置sudoupdate-alternatives--configx86_64-w64-mingw32-g++选择后缀带posix的,(/usr/bin/x86_64-w64-mi
- Ubuntu18.04切换python3.8版本
波波维琦
pythonlinuxubuntu
安装python3.8sudoaptinstallpython3.8赋予python优先级sudoupdate-alternatives--install/usr/bin/pythonpython/usr/bin/python3.82切换python默认版本sudoupdate-alternatives--configpython选择python3.8的编号,回车赋予python3优先级sudou
- 在 Ubuntu 上安装和切换多个 GCC 版本
chase。
ubuntulinux服务器
在软件开发过程中,有时需要在不同的GCC版本之间进行切换。本文将介绍如何在Ubuntu上安装多个GCC版本,并使用update-alternatives工具进行版本切换。1.安装所需的GCC版本首先,更新包列表并安装所需的GCC版本。本文将安装gcc-7,gcc-9和gcc-11。sudoaptupdatesudoaptinstallgcc-7g++-7gcc-9g++-9gcc-11g++-11
- linux替换原有java
javalinux云服务器
替换Linux系统中的Java版本看似是一个复杂的过程,但其实只要按照一定的步骤来进行,就可以简单地完成这个操作。流程总览下面提供了一个关于如何替换Java版本的流程表:步骤任务1确认当前Java版本2安装新的Java版本3配置Java环境变量4更新Javaalternatives5验证更换后的Java版本各步骤详细说明步骤1:确认当前Java版本在终端中运行以下命令,以检查当前安装的Java版本
- 蓝易云 - ubuntu如何修改java版本
蓝易云
ubuntujavalinux数据库正则表达式运维服务器
在Ubuntu上修改Java版本,可以按照以下步骤进行:打开终端。查看系统中已安装的Java版本,运行以下命令:sudoupdate-java-alternatives--list选择要使用的Java版本,运行以下命令,将java_version替换为你想要使用的版本名称:sudoupdate-java-alternatives--setjava_version验证Java版本是否已经更改,运
- Ubuntu22 安装多个版本的python
莫忘初心丶
python数据库开发语言
前言使用pyenv是一个很好的选择,尤其是在需要管理多个Python版本时。它提供了一个简单的方法来安装、切换和管理多个版本的Python,而不必依赖系统的包管理器或update-alternatives。特别是当你需要在同一系统中频繁切换Python版本时,pyenv会显得更加方便。目录前言为什么使用`pyenv`安装`pyenv`1.安装依赖2.安装`pyenv`3.配置shell环境4.安装
- Ubuntu下 Python 版本切换
Tobey袁
Ubuntushellubuntulinux
在Ubuntu的开发环境下,由于Python2和Python3很多不兼容,经常会需要我们手动切换Python版本。sudoupdate-alternatives--install/usr/bin/pythonpython/usr/bin/python2100sudoupdate-alternatives--install/usr/bin/pythonpython/usr/bin/python315
- ubuntu系统切换python版本的方法
lkasi
Ubuntuubuntulinux运维
1.查看所有的python版本终端输入ls/usr/bin/python*结果2.切换版本终端输入sudoupdate-alternatives--configpython结果输入对应的选择编号即可切换python版本
- Ubuntu 多版本 gcc 配置常用命令备忘
Eloudy
linuxC++
用的频率不高,总忘记具体参数1,安装多版本gcc以gcc-11和12为例:sudoapt-getinstallgcc-11gcc-12sudoapt-getinstallgcc-11gcc-122,配置多版本gccgcc与g++一起配置进数据库中:sudoupdate-alternatives--install/usr/bin/gccgcc/usr/bin/gcc-1111sudoupdate-a
- 多个python版本管理:
JY在学嵌入式
pythonlinux开发语言
①查看python替代版本信息:~$update-alternatives--displaypython如果结果为:update-alternatives:error:noalternativesforpython说明python的替代版本尚未被update-alternatives②查看python的位置:~$whereispython更新一下替代列表:~$sudoupdate-alternat
- linux 配置Java环境变量
找个栗子
linuxjavapython
要在Linux上配置Java环境变量,可以按照以下步骤进行操作:首先,打开终端。确认是否已安装Java。在终端中运行以下命令:java-version如果已安装Java,则会显示Java的版本信息。如果没有安装Java,请先安装Java。找到Java的安装路径。在终端中运行以下命令:sudoupdate-alternatives--configjava这会显示Java的安装路径。记下此路径,后续会
- sqoop导出orc数据至mysql,将Sqoop导入为OrC文件
终有尽头
IsthereanyoptioninsqooptoimportdatafromRDMSandstoreitasORCfileformatinHDFS?Alternativestried:importedastextformatandusedatemptabletoreadinputastextfileandwritetohdfsasorcinhive解决方案AtleastinSqoop1.4.5t
- sqoop从orc文件到oracle,Sqoop import as OrC file
余革革
问题IsthereanyoptioninsqooptoimportdatafromRDMSandstoreitasORCfileformatinHDFS?Alternativestried:importedastextformatandusedatemptabletoreadinputastextfileandwritetohdfsasorcinhive回答1:AtleastinSqoop1.4.
- linux简单安装gcc和gdb
chn-zgq
Linuxlinuxubuntu
linux安装gcc以及环境配置和gdb安装gcc-10.0添加源:sudoadd-apt-repositoryppa:ubuntu-toolchain-r/ppa更新源:sudoaptupdate下载gcc:sudoaptinstallgcc-10g++-10默认GCC版本设置为gcc-10.0:sudoupdate-alternatives--install/usr/bin/gccgcc/us
- 安装python新版本后,pip指向旧的python环境解决办法
m0_60961641
pythonpiplinux
1.更新软链接:sudoln-sf/usr/local/bin/python3.8/usr/bin/python32.设置默认版本:sudoupdate-alternatives--configpython33.选择序号,选择你默认使用的Python版本即可
- 每日一词-viable
LizhuHuang
这是什么词?词:viable英英释义:abletobedone,orworthdoing(Feasible)例句:Renewablesareeconomicallyviablealternatives.2.为什么选这个词?“viable”是个形容词,它本身的意思是“可以存活的”,常被引申使用表示“可行的”“值得做的”。正如健康的生命才可以存活,好的想法、产品、解决方案才能存活,我们可以用viabl
- 可变剪接
evolisgreat
什么是可变剪接?可变剪接(AlternativeSplicing,AS)是指从一个mRNA前体中通过不同的剪接方式(选择不同的剪接位点组合)产生不同的mRNA剪接异构体的过程。可变剪接是调节基因表达和产生蛋白质组多样性的重要机制。可变剪接事件产生不同转录本和蛋白可变剪接事件的分类可变剪接可分为7种基本类型:image.pngES(Exonskipping,外显子跳跃)指一个外显子从初始转录物上被剪
- CentOS7 配置JAR包开机自启动
weixin_39865
CentOSjarjava开发语言
文章目录一、查看CentOS7中java的安装路径二、创建脚本jar_auto.sh,设置开机自启动一、查看CentOS7中java的安装路径whichjavall/usr/bin/javall/etc/alternatives/javaCentOS7中Java的默认安装路径是:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/j
- ubuntu下命令行安装指定版本的jdk,并在多jdk时指定默认版本
JIngles123
Linuxubuntujavalinux
1、命令行安装指定版本的jdk:$sudoaptupdate$sudoaptinstallopenjdk-xx-jdk#其中xx为指定的版本号码2、选择默认jdk版本step1、打印当前系统中已安装jdk的相关信息$sudoupdate-alternatives--configjava$sudoupdate-alternatives--configjavacstep2、选择需要的jdk版本操作:分
- 安装ORACLE 11g 弹窗不显示或者显示太小
雨花石~
Oracle学习笔记oraclevnc
背景:redhat7.9下利用vnc安装oracle的时候,发现安装过程中弹窗非常小,有时甚至出现一条横线,鼠标也没有拉大,具体显示效果如下:解决办法:在安装的时候后面添加-jreloc/etc/alternatives/jre即可如下:最终解决问题,如下所示可以正常弹框:
- 【Antlr】Antlr must label all alternatives or none
九师兄
语法分析-Antlrantlr
1.概述今天写G4文件的时候,发现报错这个error122mustlabelallalternativesornone错误信息如下:这个报错翻译为:必须标记所有的选择还是没有意思是要么都加动作,要么都不加动作,不能一部分加,一部分不加。改成如下就好了stat:exprNEWLINE{System.out.println($e.v);}
- ubuntu update-alternatives命令详解
weixin_34273479
java开发工具python
2019独角兽企业重金招聘Python工程师标准>>>这个命令相当于windows下的选择文件的打开方式(或者叫关联文件类型),比如要编辑一个文件,可以用notepad也可以用notepad++,editplus等等,那么ubuntu下是用update-alternatives来管理的,他的原理是在/etc/alternatives目录下为每个管理的程序建立一个软连接,man他可以找到为什么要这么
- 多线程编程之卫生间
周凡杨
java并发卫生间线程厕所
如大家所知,火车上车厢的卫生间很小,每次只能容纳一个人,一个车厢只有一个卫生间,这个卫生间会被多个人同时使用,在实际使用时,当一个人进入卫生间时则会把卫生间锁上,等出来时打开门,下一个人进去把门锁上,如果有一个人在卫生间内部则别人的人发现门是锁的则只能在外面等待。问题分析:首先问题中有两个实体,一个是人,一个是厕所,所以设计程序时就可以设计两个类。人是多数的,厕所只有一个(暂且模拟的是一个车厢)。
- How to Install GUI to Centos Minimal
sunjing
linuxInstallDesktopGUI
http://www.namhuy.net/475/how-to-install-gui-to-centos-minimal.html
I have centos 6.3 minimal running as web server. I’m looking to install gui to my server to vnc to my server. You can insta
- Shell 函数
daizj
shell函数
Shell 函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:
[function] funname [()]{
action;
[return int;]
}
说明:
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回
- Linux服务器新手操作之一
周凡杨
Linux 简单 操作
1.whoami
当一个用户登录Linux系统之后,也许他想知道自己是发哪个用户登录的。
此时可以使用whoami命令。
[ecuser@HA5-DZ05 ~]$ whoami
e
- 浅谈Socket通信(一)
朱辉辉33
socket
在java中ServerSocket用于服务器端,用来监听端口。通过服务器监听,客户端发送请求,双方建立链接后才能通信。当服务器和客户端建立链接后,两边都会产生一个Socket实例,我们可以通过操作Socket来建立通信。
首先我建立一个ServerSocket对象。当然要导入java.net.ServerSocket包
ServerSock
- 关于框架的简单认识
西蜀石兰
框架
入职两个月多,依然是一个不会写代码的小白,每天的工作就是看代码,写wiki。
前端接触CSS、HTML、JS等语言,一直在用的CS模型,自然免不了数据库的链接及使用,真心涉及框架,项目中用到的BootStrap算一个吧,哦,JQuery只能算半个框架吧,我更觉得它是另外一种语言。
后台一直是纯Java代码,涉及的框架是Quzrtz和log4j。
都说学前端的要知道三大框架,目前node.
- You have an error in your SQL syntax; check the manual that corresponds to your
林鹤霄
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option,changed_ids ) values('0ac91f167f754c8cbac00e9e3dc372
- MySQL5.6的my.ini配置
aigo
mysql
注意:以下配置的服务器硬件是:8核16G内存
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir=D:/mysql-5.6.21-win
- mysql 全文模糊查找 便捷解决方案
alxw4616
mysql
mysql 全文模糊查找 便捷解决方案
2013/6/14 by 半仙
[email protected]
目的: 项目需求实现模糊查找.
原则: 查询不能超过 1秒.
问题: 目标表中有超过1千万条记录. 使用like '%str%' 进行模糊查询无法达到性能需求.
解决方案: 使用mysql全文索引.
1.全文索引 : MySQL支持全文索引和搜索功能。MySQL中的全文索
- 自定义数据结构 链表(单项 ,双向,环形)
百合不是茶
单项链表双向链表
链表与动态数组的实现方式差不多, 数组适合快速删除某个元素 链表则可以快速的保存数组并且可以是不连续的
单项链表;数据从第一个指向最后一个
实现代码:
//定义动态链表
clas
- threadLocal实例
bijian1013
javathreadjava多线程threadLocal
实例1:
package com.bijian.thread;
public class MyThread extends Thread {
private static ThreadLocal tl = new ThreadLocal() {
protected synchronized Object initialValue() {
return new Inte
- activemq安全设置—设置admin的用户名和密码
bijian1013
javaactivemq
ActiveMQ使用的是jetty服务器, 打开conf/jetty.xml文件,找到
<bean id="adminSecurityConstraint" class="org.eclipse.jetty.util.security.Constraint">
<p
- 【Java范型一】Java范型详解之范型集合和自定义范型类
bit1129
java
本文详细介绍Java的范型,写一篇关于范型的博客原因有两个,前几天要写个范型方法(返回值根据传入的类型而定),竟然想了半天,最后还是从网上找了个范型方法的写法;再者,前一段时间在看Gson, Gson这个JSON包的精华就在于对范型的优雅简单的处理,看它的源代码就比较迷糊,只其然不知其所以然。所以,还是花点时间系统的整理总结下范型吧。
范型内容
范型集合类
范型类
- 【HBase十二】HFile存储的是一个列族的数据
bit1129
hbase
在HBase中,每个HFile存储的是一个表中一个列族的数据,也就是说,当一个表中有多个列簇时,针对每个列簇插入数据,最后产生的数据是多个HFile,每个对应一个列族,通过如下操作验证
1. 建立一个有两个列族的表
create 'members','colfam1','colfam2'
2. 在members表中的colfam1中插入50*5
- Nginx 官方一个配置实例
ronin47
nginx 配置实例
user www www;
worker_processes 5;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 8192;
events {
worker_connections 4096;}
http {
include conf/mim
- java-15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环
bylijinnan
java
//use recursion
public static void mirrorHelp1(Node node){
if(node==null)return;
swapChild(node);
mirrorHelp1(node.getLeft());
mirrorHelp1(node.getRight());
}
//use no recursion bu
- 返回null还是empty
bylijinnan
javaapachespring编程
第一个问题,函数是应当返回null还是长度为0的数组(或集合)?
第二个问题,函数输入参数不当时,是异常还是返回null?
先看第一个问题
有两个约定我觉得应当遵守:
1.返回零长度的数组或集合而不是null(详见《Effective Java》)
理由就是,如果返回empty,就可以少了很多not-null判断:
List<Person> list
- [科技与项目]工作流厂商的战略机遇期
comsci
工作流
在新的战略平衡形成之前,这里有一个短暂的战略机遇期,只有大概最短6年,最长14年的时间,这段时间就好像我们森林里面的小动物,在秋天中,必须抓紧一切时间存储坚果一样,否则无法熬过漫长的冬季。。。。
在微软,甲骨文,谷歌,IBM,SONY
- 过度设计-举例
cuityang
过度设计
过度设计,需要更多设计时间和测试成本,如无必要,还是尽量简洁一些好。
未来的事情,比如 访问量,比如数据库的容量,比如是否需要改成分布式 都是无法预料的
再举一个例子,对闰年的判断逻辑:
1、 if($Year%4==0) return True; else return Fasle;
2、if ( ($Year%4==0 &am
- java进阶,《Java性能优化权威指南》试读
darkblue086
java性能优化
记得当年随意读了微软出版社的.NET 2.0应用程序调试,才发现调试器如此强大,应用程序开发调试其实真的简单了很多,不仅仅是因为里面介绍了很多调试器工具的使用,更是因为里面寻找问题并重现问题的思想让我震撼,时隔多年,Java已经如日中天,成为许多大型企业应用的首选,而今天,这本《Java性能优化权威指南》让我再次找到了这种感觉,从不经意的开发过程让我刮目相看,原来性能调优不是简单地看看热点在哪里,
- 网络学习笔记初识OSI七层模型与TCP协议
dcj3sjt126com
学习笔记
协议:在计算机网络中通信各方面所达成的、共同遵守和执行的一系列约定 计算机网络的体系结构:计算机网络的层次结构和各层协议的集合。 两类服务: 面向连接的服务通信双方在通信之前先建立某种状态,并在通信过程中维持这种状态的变化,同时为服务对象预先分配一定的资源。这种服务叫做面向连接的服务。 面向无连接的服务通信双方在通信前后不建立和维持状态,不为服务对象
- mac中用命令行运行mysql
dcj3sjt126com
mysqllinuxmac
参考这篇博客:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html 感觉workbench不好用(有点先入为主了)。
1,安装mysql
在mysql的官方网站下载 mysql 5.5.23 http://www.mysql.com/downloads/mysql/,根据我的机器的配置情况选择了64
- MongDB查询(1)——基本查询[五]
eksliang
mongodbmongodb 查询mongodb find
MongDB查询
转载请出自出处:http://eksliang.iteye.com/blog/2174452 一、find简介
MongoDB中使用find来进行查询。
API:如下
function ( query , fields , limit , skip, batchSize, options ){.....}
参数含义:
query:查询参数
fie
- base64,加密解密 经融加密,对接
y806839048
经融加密对接
String data0 = new String(Base64.encode(bo.getPaymentResult().getBytes(("GBK"))));
String data1 = new String(Base64.decode(data0.toCharArray()),"GBK");
// 注意编码格式,注意用于加密,解密的要是同
- JavaWeb之JSP概述
ihuning
javaweb
什么是JSP?为什么使用JSP?
JSP表示Java Server Page,即嵌有Java代码的HTML页面。使用JSP是因为在HTML中嵌入Java代码比在Java代码中拼接字符串更容易、更方便和更高效。
JSP起源
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。
如果使用Servl
- apple watch 指南
啸笑天
apple
1. 文档
WatchKit Programming Guide(中译在线版 By @CocoaChina) 译文 译者 原文 概览 - 开始为 Apple Watch 进行开发 @星夜暮晨 Overview - Developing for Apple Watch 概览 - 配置 Xcode 项目 - Overview - Configuring Yo
- java经典的基础题目
macroli
java编程
1.列举出 10个JAVA语言的优势 a:免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用 2.列举出JAVA中10个面向对象编程的术语 a:包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型 3.列举出JAVA中6个比较常用的包 Java.lang;java.util;java.io;java.sql;ja
- 你所不知道神奇的js replace正则表达式
qiaolevip
每天进步一点点学习永无止境纵观千象regex
var v = 'C9CFBAA3CAD0';
console.log(v);
var arr = v.split('');
for (var i = 0; i < arr.length; i ++) {
if (i % 2 == 0) arr[i] = '%' + arr[i];
}
console.log(arr.join(''));
console.log(v.r
- [一起学Hive]之十五-分析Hive表和分区的统计信息(Statistics)
superlxw1234
hivehive分析表hive统计信息hive Statistics
关键字:Hive统计信息、分析Hive表、Hive Statistics
类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中。
表和分区的统计信息主要包括:行数、文件数、原始数据大小、所占存储大小、最后一次操作时间等;
14.1 新表的统计信息
对于一个新创建
- Spring Boot 1.2.5 发布
wiselyman
spring boot
Spring Boot 1.2.5已在7月2日发布,现在可以从spring的maven库和maven中心库下载。
这个版本是一个维护的发布版,主要是一些修复以及将Spring的依赖提升至4.1.7(包含重要的安全修复)。
官方建议所有的Spring Boot用户升级这个版本。
项目首页 | 源