- Spring AI 项目实战(十八):Spring Boot + AI + Vue3 + OSS + DashScope 实现高效语音识别系统(附完整源码)
程序员岳彬
SpringAIspring人工智能springboot语音识别后端aijava
系列文章序号文章名称1SpringAI项目实战(一):SpringAI核心模块入门2SpringAI项目实战(二):SpringBoot+AI+DeepSeek深度实战(附完整源码)3SpringAI项目实战(三):SpringBoot+AI+DeepSeek打造智能客服系统(附完整源码)4
- Anime.js 超级炫酷的网页动画库详解
伍哥的传说
前端源码分享javascript开发语言ecmascriptanime.jstimelineanimate
简介Anime.js是一个轻量级的JavaScript动画库,它提供了简单而强大的API来创建各种复杂的动画效果。以下是Anime.js的主要使用方法和特性:安装npminstallanimejs示例基本用法import{animate,createScope,createSpring,createDraggable}from"animejs";import{useEffect,useRef,us
- elementUI中el-table增加序号列
周不凢
elementUIelementuivue.js
{{scope.$index+1}}
- Java使用Langchai4j接入AI大模型的简单使用(四)--整合Springboot
moxiaoran5753
javaspringbootspring
一、在Maven中引入依赖核心配置如下,这里使用的是Springboog3,jdk17,注意版本,如果启动不起来很有可能是版本冲突:17UTF-8UTF-83.4.31.0.0-beta1dev.langchain4jlangchain4j-community-dashscope-spring-boot-starterorg.springframework.bootspring-boot-star
- Spring Ioc Bean 到底是什么
Bean到底是什么?简单来说,SpringBean就是一个由SpringIoC容器负责创建、管理和装配的Java对象。它不是一种新的技术,它本质上还是一个普普通通的Java对象(POJO-PlainOldJavaObject),但它的“户口”被注册到了Spring容器中,从此它就不再是一个“野生”的对象,而是一个受容器管理的“公民”。最核心的区别:Beanvs.普通的Java对象为了彻底理解Bea
- 面试官:Spring 如何控制 Bean 的加载顺序?
在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能。核心原则:依赖驱动加载SpringIoC容器会构建一个依赖关系图(DependencyGraph)。如果BeanA依赖于BeanB(例如,A的构造函数需要一个B类型的参数),Spring会保证在创建BeanA之前,BeanB已经被完全创建和初始化好了。@ServicepublicclassServiceA{
- 学习日记-spring-day45-7.10
永日45670
学习springjava
知识点:1.初始化Bean单例池完成getBeancreateBean(1)知识点核心内容重点单例词初始化在容器初始化阶段预先创建单例对象,避免在getBean时动态创建单例词必须在容器初始化时完成加载,否则会触发异常getBean方法逻辑1.从beanDefinitionMap查询BeanDefinition2.根据scope判断单例/多例3.单例:直接从单例词获取4.多例:反射动态创建新对象多
- LLaMA 学习笔记
AI算法网奇
深度学习基础人工智能深度学习
目录LLaMA模型结构:模型微调手册:推理示例:指定位置加载模型测试ok:模型下载:llama-stack下载modelscope下载LLaMA优化技术RMSNormSwiGLU激活函数旋转位置编码(RoPE)LLaMA模型结构:llama3结构详解-CSDN博客模型微调手册:大模型微调LLaMA详细指南(准备环境、数据、配置微调参数+微调过程)_llama微调-CSDN博客显存占用:FP16/B
- Kotlin协程使用
一、开启协程的方式1、顶层开启协程的函数基本使用://方法一,使用runBlocking顶层函数runBlocking{ getImage(imageId)}//方法二,使用GlobalScope单例对象// 可以直接调用launch开启协程,或者aysnc需要await接收结果GlobalScope.launch{ getImage(imageId)}//方法三,自行通过Coro
- kotlin - 协程 launch 源码分析
kotlin-协程launch源码分析CoroutineScope(Dispatchers.Main).launch{}1.launch函数入口launch是CoroutineScope的扩展函数,定义在kotlinx.coroutines库中:publicfunCoroutineScope.launch(context:CoroutineContext=EmptyCoroutineContext
- 基于MCP协议使用python实现天气预报接口实时查询全国各地天气情况
@Ma
python开发语言
Mcp_Server端:python脚本importjsonfromfastmcpimportFastMCPfromdashscopeimportGenerationimporthttpxfromtypingimportAny#初始化服务器mcp=FastMCP('WeatherServer')defchat(system_prompt:str,user_prompt:str)->str:mess
- vue3 element plus table 使用固定列,滑动滚动会错位、固定列层级异常、滑动后固定列的内容看不到了
源码-->{{scope.row.category_name}}-->{{scope.row.end_time=="0"?"永久有效":scope.row.end_time}}{{scope.row.mer_state==1?"开启":"关闭"}}登录店铺修改密码营业执照编辑查看-->效果滚动条滑动后分类名称会盖住商家名称说明1、table-layout=“auto”2、el-table-colu
- @RefreshScope 注解深入解析
1.引言随着微服务架构的日益普及,应用程序的配置管理变得越来越复杂。在传统的单体应用中,配置通常是静态的,任何配置的更改都需要重启整个应用程序才能生效。然而,在由众多独立服务组成的微服务环境中,频繁的服务重启不仅会影响系统的可用性,还会增加运维的复杂性。为了解决这一挑战,动态配置管理应运而生,它允许在运行时修改和加载配置,而无需中断服务。SpringCloud作为一套基于SpringBoot的微服
- python中vars()的作用
m0_45093979
python开发语言
在Python中,vars()是一个内置函数,用于返回对象的属性和属性值的字典。它可以用于获取一个对象的命名空间中的所有变量和属性,然后以字典的形式返回这些变量和属性的名称及其对应的值。如果没有提供参数给vars(),它会返回当前作用域(scope)的变量和属性。通常在函数内部调用vars(),它将返回函数的局部命名空间中的所有变量和属性。在模块级别调用vars(),它将返回当前模块的全局命名空间
- vue3 + element-plus el-table表格二次封装,支持复选框,排序,分页。
前端vue.js
一、customTable.vue组件{{(currentPage-1)*pageSize+scope.$index+1}}{{btn.text}}import{ref,onMounted}from"vue";letloading=defineModel("loading");constemits=defineEmits(["selection-change","sort-change"]);co
- 深入探讨Qt智能指针的用法
码农飞飞
QT+QMLqt智能指针指针转换内存泄漏内存管理QSharedPointerQPointer
文章目录QPointerQSharedPointerQWeakPointerQScopedPointerQScopedArrayPointer类型转换qSharedPointerCastqSharedPointerDynamicCastqSharedPointerConstCastqWeakPointerCastqSharedPointerObjectCastQt的智能指针提供了方便的资源管理工具
- Kotlin协程中的Job详解
小李飞飞砖
kotlinjava服务器
Kotlin协程中的Job详解Job是Kotlin协程中表示协程任务的核心概念,它提供了对协程生命周期的控制和管理的功能。Job的基本概念Job是协程的句柄,具有以下特点:每个协程都会返回一个Job对象用于控制协程的生命周期可以建立父子关系,形成结构化的并发Job的创建方式1.通过launch创建Jobvaljob=GlobalScope.launch{//协程体}2.通过async创建Defer
- AI初学者如何对大模型进行微调?——零基础保姆级实战指南
仅需8GB显存,三步完成个人专属大模型训练四步实战:从环境配置到模型发布步骤1:云端环境搭建(10分钟)推荐使用阿里魔塔ModelScope免费GPU资源:#注册后执行环境初始化pip3install--upgradepippip3installbitsandbytes>=0.39.0gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.
- 1、uniapp开发微信小程序遭遇的那些事(持续收集中)
打不着的大喇叭
微信小程序uniappuni-app微信小程序小程序前端
可恶,我用了开发h5思维去开发小程序1、插槽加了slot-scope就不显示??什么情况时间{{slotProps.time}}时间{{slotProps2.time2}}发现这样写,插槽是不会显示的,原因是包裹slot必须直接作为组件的子节点,不能被template包裹,否则微信小程序端slot机制会失效。slot必须直接作为自定义组件的子节点,不能被template/v-if包裹。修正后写法:
- Oracle 查看需要recover的datafile v$recover_file 需要哪些归档日志
jnrjian
数据库oracle
Toeasilyandquicklyfindoutiftheonlineredologfilescanbeusedtorecoveradatabase.ScopeThisdocumentisaddressedtoDBAsthatwanttoquicklyfindthebestrecoverysolutionincaseofadatabasecrash.DetailsManydatabasestod
- Maven核心概念
文章目录1.Maven核心概念1.1**什么是Maven**1.2**Maven的核心思想**2.Maven项目结构2.1**标准目录结构**2.2**POM文件结构**3.Maven生命周期3.1**三大生命周期**3.2**生命周期详解**3.3**生命周期绑定**4.依赖管理4.1**依赖坐标**4.2**依赖范围(Scope)**4.3**依赖传递**4.4**依赖冲突解决**5.Mave
- spring面试题【持续更新ing】
spring面试题一、什么是循环依赖(高频)?二、Spring如何解决循环依赖?三、Spring都有哪些重要的模块?四、什么是SpringIOC?五、SpringIOC有什么好处?六、Spring中的DI是什么?七、什么是SpringBean?八、Spring中的BeanFactory是什么?九、Spring中的FactoryBean是什么?十、Spring中的ObjectFactory是什么?十
- 常见构建工具使用与原理浅析
1.初版构建工具1.1.GruntGrunt是前端第一个正式的构建工具,它基于Node.js开发。Grunt同样是基于插件实现功能拓展增强,但对于像Webpack上很多能力,如HMR、ScopeHoisting等都是不支持的,可以作为学习Webpack前的了解。Grunt更像是一种自动化的配置工具集,就如官方所说,Grunt是TheJavaScriptTaskRunner,每个Grunt任务通常必
- uniapp开发微信小程序,选择地理位置uni.chooseLocation
zhuà!
uni-app微信小程序小程序
点击选择位置toCommunity(){constthat=thisuni.getSetting({success:(res)=>{conststatus=res.authSetting//如果当前设置是:不允许,则需要弹框提醒客户,需要前往设置页面打开授权if(!status['scope.userLocation']){uni.showModal({title:"是否授权当前位置",conte
- vue3 el-table回显选中的数据
凉xiao薄
vue.jselementuijavascript
html部分:{{scope.$index+1}}添加删除js部分:letmatchLists=ref([{source_id:1,title:'比赛1'},{source_id:2,title:'比赛2'},{source_id:3,title:'比赛3'},{source_id:4,title:'比赛4'},{source_id:5,title:'比赛5'},])letsource_ids=r
- 可观测性大脑:Pyroscope+Tempo实现代码级根因定位
Star_Sea_77
云原生可观测性根因分析性能剖析分布式追踪智能运维
可观测性大脑:Pyroscope+Tempo实现代码级根因定位摘要本文针对传统可观测性方案“指标、链路、性能数据割裂”的痛点(某电商故障定位平均耗时3.5小时),提出基于Pyroscope+Tempo的“可观测性大脑”方案。通过Prometheus告警触发性能热点与分布式链路的智能关联,实现从“指标异常”到“代码级根因”的一键定位:Pyroscope生成CPU火焰图锁定耗时代码方法,Tempo追溯
- 在 Spring 的世界里,Bean 到底是什么?它和一个普通的 Java 对象(POJO)有什么区别和联系?
Bean到底是什么?在Spring的世界里,一个Bean是一个由SpringIoC容器实例化、组装、和管理的对象。简单来说,它不再是一个普通的、孤立的对象,而是一个被“收编”进Spring大家庭、有“户口”、接受统一管理的“公民”。这个“管理”意味着什么?它的创建不归你管:你不用再写newMyService(),Spring容器会帮你创建。它的依赖不归你管:它需要什么其他对象(比如MyReposi
- js代码中的作用域
好的,我们来详细梳理一下JavaScript中的变量作用域(VariableScope)。这是一个非常核心的概念,尤其是在ES6(2015年)引入let和const之后,理解作用域变得更加重要。什么是作用域(Scope)?简单来说,作用域就是一套规则,用来规定变量和函数在代码中的可访问范围。你可以把它想象成变量能够“存活”和被访问的“地盘”或“领地”。一旦离开了这个地盘,你就无法访问它了。作用域的
- 【Maven】Maven核心机制的 万字 深度解析
夜雨hiyeyu.com
mavenjavaspringspringbootmvc系统架构后端
Maven核心机制的万字深度解析一、依赖管理机制全解(工业级依赖治理方案)1.坐标体系的本质与设计哲学2.依赖传递与仲裁算法的工程实现**冲突仲裁核心算法**企业级仲裁策略3.Scope作用域的类加载隔离原理4.多级仓库体系架构设计二、构建生命周期底层原理(工业级流水线解析)1.生命周期模型架构2.Default生命周期核心阶段详解3.插件执行机制内核剖析三、企业级工程化实践(千亿级项目的解决方案
- C#.NET Autofac 详解
c#.net
简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注入支持、基于约定的程序集扫描等特性。核心组件ContainerBuilder:用于注册服务的构建器IContainer:服务容器,负责解析依赖ILifetimeScope:生命周期作用域,管理对象生命周期M
- html
周华华
html
js
1,数组的排列
var arr=[1,4,234,43,52,];
for(var x=0;x<arr.length;x++){
for(var y=x-1;y<arr.length;y++){
if(arr[x]<arr[y]){
&
- 【Struts2 四】Struts2拦截器
bit1129
struts2拦截器
Struts2框架是基于拦截器实现的,可以对某个Action进行拦截,然后某些逻辑处理,拦截器相当于AOP里面的环绕通知,即在Action方法的执行之前和之后根据需要添加相应的逻辑。事实上,即使struts.xml没有任何关于拦截器的配置,Struts2也会为我们添加一组默认的拦截器,最常见的是,请求参数自动绑定到Action对应的字段上。
Struts2中自定义拦截器的步骤是:
- make:cc 命令未找到解决方法
daizj
linux命令未知make cc
安装rz sz程序时,报下面错误:
[root@slave2 src]# make posix
cc -O -DPOSIX -DMD=2 rz.c -o rz
make: cc:命令未找到
make: *** [posix] 错误 127
系统:centos 6.6
环境:虚拟机
错误原因:系统未安装gcc,这个是由于在安
- Oracle之Job应用
周凡杨
oracle job
最近写服务,服务上线后,需要写一个定时执行的SQL脚本,清理并更新数据库表里的数据,应用到了Oracle 的 Job的相关知识。在此总结一下。
一:查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行
- 多线程机制
朱辉辉33
多线程
转至http://blog.csdn.net/lj70024/archive/2010/04/06/5455790.aspx
程序、进程和线程:
程序是一段静态的代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的
- web报表工具FineReport使用中遇到的常见报错及解决办法(一)
老A不折腾
web报表finereportjava报表报表工具
FineReport使用中遇到的常见报错及解决办法(一)
这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、address pool is full:
含义:地址池满,连接数超过并发数上
- mysql rpm安装后没有my.cnf
林鹤霄
没有my.cnf
Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,
至于为什么没有这个文件而MySQL却也能正常启动和作用,在这儿有两个说法,
第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动,
第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于r
- Kindle Fire HDX root并安装谷歌服务框架之后仍无法登陆谷歌账号的问题
aigo
root
原文:http://kindlefireforkid.com/how-to-setup-a-google-account-on-amazon-fire-tablet/
Step 4: Run ADB command from your PC
On the PC, you need install Amazon Fire ADB driver and instal
- javascript 中var提升的典型实例
alxw4616
JavaScript
// 刚刚在书上看到的一个小问题,很有意思.大家一起思考下吧
myname = 'global';
var fn = function () {
console.log(myname); // undefined
var myname = 'local';
console.log(myname); // local
};
fn()
// 上述代码实际上等同于以下代码
m
- 定时器和获取时间的使用
百合不是茶
时间的转换定时器
定时器:定时创建任务在游戏设计的时候用的比较多
Timer();定时器
TImerTask();Timer的子类 由 Timer 安排为一次执行或重复执行的任务。
定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定
- JDK1.5 Queue
bijian1013
javathreadjava多线程Queue
JDK1.5 Queue
LinkedList:
LinkedList不是同步的。如果多个线程同时访问列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方
- http认证原理和https
bijian1013
httphttps
一.基础介绍
在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更加安全。
Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后
- 【Java范型五】范型继承
bit1129
java
定义如下一个抽象的范型类,其中定义了两个范型参数,T1,T2
package com.tom.lang.generics;
public abstract class SuperGenerics<T1, T2> {
private T1 t1;
private T2 t2;
public abstract void doIt(T
- 【Nginx六】nginx.conf常用指令(Directive)
bit1129
Directive
1. worker_processes 8;
表示Nginx将启动8个工作者进程,通过ps -ef|grep nginx,会发现有8个Nginx Worker Process在运行
nobody 53879 118449 0 Apr22 ? 00:26:15 nginx: worker process
- lua 遍历Header头部
ronin47
lua header 遍历
local headers = ngx.req.get_headers()
ngx.say("headers begin", "<br/>")
ngx.say("Host : ", he
- java-32.通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小(两数组的差最小)。
bylijinnan
java
import java.util.Arrays;
public class MinSumASumB {
/**
* Q32.有两个序列a,b,大小都为n,序列元素的值任意整数,无序.
*
* 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
* 例如:
* int[] a = {100,99,98,1,2,3
- redis
开窍的石头
redis
在redis的redis.conf配置文件中找到# requirepass foobared
把它替换成requirepass 12356789 后边的12356789就是你的密码
打开redis客户端输入config get requirepass
返回
redis 127.0.0.1:6379> config get requirepass
1) "require
- [JAVA图像与图形]现有的GPU架构支持JAVA语言吗?
comsci
java语言
无论是opengl还是cuda,都是建立在C语言体系架构基础上的,在未来,图像图形处理业务快速发展,相关领域市场不断扩大的情况下,我们JAVA语言系统怎么从这么庞大,且还在不断扩大的市场上分到一块蛋糕,是值得每个JAVAER认真思考和行动的事情
- 安装ubuntu14.04登录后花屏了怎么办
cuiyadll
ubuntu
这个情况,一般属于显卡驱动问题。
可以先尝试安装显卡的官方闭源驱动。
按键盘三个键:CTRL + ALT + F1
进入终端,输入用户名和密码登录终端:
安装amd的显卡驱动
sudo
apt-get
install
fglrx
安装nvidia显卡驱动
sudo
ap
- SSL 与 数字证书 的基本概念和工作原理
darrenzhu
加密ssl证书密钥签名
SSL 与 数字证书 的基本概念和工作原理
http://www.linuxde.net/2012/03/8301.html
SSL握手协议的目的是或最终结果是让客户端和服务器拥有一个共同的密钥,握手协议本身是基于非对称加密机制的,之后就使用共同的密钥基于对称加密机制进行信息交换。
http://www.ibm.com/developerworks/cn/webspher
- Ubuntu设置ip的步骤
dcj3sjt126com
ubuntu
在单位的一台机器完全装了Ubuntu Server,但回家只能在XP上VM一个,装的时候网卡是DHCP的,用ifconfig查了一下ip是192.168.92.128,可以ping通。
转载不是错:
Ubuntu命令行修改网络配置方法
/etc/network/interfaces打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.
1. 以D
- php包管理工具推荐
dcj3sjt126com
PHPComposer
http://www.phpcomposer.com/
Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
中文文档
入门指南
下载
安装包列表
Composer 中国镜像
- Gson使用四(TypeAdapter)
eksliang
jsongsonGson自定义转换器gsonTypeAdapter
转载请出自出处:http://eksliang.iteye.com/blog/2175595 一.概述
Gson的TypeAapter可以理解成自定义序列化和返序列化 二、应用场景举例
例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都
- JQM控件之Navbar和Tabs
gundumw100
htmlxmlcss
在JQM中使用导航栏Navbar是简单的。
只需要将data-role="navbar"赋给div即可:
<div data-role="navbar">
<ul>
<li><a href="#" class="ui-btn-active&qu
- 利用归并排序算法对大文件进行排序
iwindyforest
java归并排序大文件分治法Merge sort
归并排序算法介绍,请参照Wikipeida
zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
基本思想:
大文件分割成行数相等的两个子文件,递归(归并排序)两个子文件,直到递归到分割成的子文件低于限制行数
低于限制行数的子文件直接排序
两个排序好的子文件归并到父文件
直到最后所有排序好的父文件归并到输入
- iOS UIWebView URL拦截
啸笑天
UIWebView
本文译者:candeladiao,原文:URL filtering for UIWebView on the iPhone说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以想把javascript文件打包在app里,当UIWebView需要加载该脚本时就从app本地读取,但UIWebView并不支持加载本地资源。最后从下文中找到了解决方法,第一次翻译,难免有
- 索引的碎片整理SQL语句
macroli
sql
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL
--设置最大允许的碎片数量,超过则对索引进行碎片
- Angularjs同步操作http请求with $promise
qiaolevip
每天进步一点点学习永无止境AngularJS纵观千象
// Define a factory
app.factory('profilePromise', ['$q', 'AccountService', function($q, AccountService) {
var deferred = $q.defer();
AccountService.getProfile().then(function(res) {
- hibernate联合查询问题
sxj19881213
sqlHibernateHQL联合查询
最近在用hibernate做项目,遇到了联合查询的问题,以及联合查询中的N+1问题。
针对无外键关联的联合查询,我做了HQL和SQL的实验,希望能帮助到大家。(我使用的版本是hibernate3.3.2)
1 几个常识:
(1)hql中的几种join查询,只有在外键关联、并且作了相应配置时才能使用。
(2)hql的默认查询策略,在进行联合查询时,会产
- struts2.xml
wuai
struts
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache