- NiFi Processors概述
一个老冯
为了能够创建一个高效的NiFi数据数据流程,我们需要了解有哪些Processor类型可以使用。每个新的NiFi版本Processor数量都会增加,当前NiFi版本为1.12.1,内置了288个类型的Proccessor,这些Processor提供从多个不同系统接收数据、路由、转换、处理、拆分和聚合数据以及将数据分发到多个系统的功能。按照功能分类:image.png.procesor分类说明1.1数
- python并发执行_Python的并发并行[0] -> 基本概念
weixin_39940253
python并发执行
基本概念/BasicConcept快速跳转0简介与动机/WhyMulti-Thread/Multi-Process/Coroutine在多线程(multithreaded,MT)编程出现之前,计算机程序的执行是由单个步骤序列组成的,该序列在主机的CPU中按照同步顺序执行。即无论任务多少,是否包含子任务,都要按照顺序方式进行。然而,假定子任务之间相互独立,没有因果关系,若能使这些独立的任务同时运行,
- python线程嵌套线程_Python中的嵌套并行性
weixin_39923262
python线程嵌套线程
1)WhatamImissinghere;whyshouldn’taPoolbesharedbetweenprocesses?并不是所有的对象/实例都是可挑选的/可序列化的,在这种情况下,池使用的是不可挑剔的thread.lock:>>>importthreading,pickle>>>pickle.dumps(threading.Lock())Traceback(mostrecentcallla
- python 多线程拍照
NO1212
python开发语言
相机为basler,logicbalser相机识别条码,进行拍照args[0]为logging的参数保证log实时传输到GUI界面调用方法:main_process(args[0]).camera_run()importsysimporterrnoimportcv2importnumpyasnpimportjsonimportloggingimportthreadingimportlogging.
- 【iOS】编译和链接、动静态库及dyld的简单学习
名字不要太长 像我这样就好
ios学习cocoaobjective-cmacos笔记
文章目录编译和链接1️⃣核心结论:一句话区分2️⃣编译过程:从源代码到目标文件(.o)2.1预处理(Preprocessing):“替换变量+复制粘贴”2.2编译(Compilation):“翻译成机器能懂的语言”2.3汇编(Assembly):“翻译成机器指令”2.4实战:用命令行观察编译过程动态库和静态库1️⃣关于动态库和静态库核心结论:一句话区分2️⃣底层原理:编译链接过程的差异2.1静态库
- 【iOS】编译和链接、动静态库及dyld的简单学习
名字不要太长 像我这样就好
ios学习cocoaobjective-cmacos笔记
文章目录编译和链接1️⃣核心结论:一句话区分2️⃣编译过程:从源代码到目标文件(.o)2.1预处理(Preprocessing):“替换变量+复制粘贴”2.2编译(Compilation):“翻译成机器能懂的语言”2.3汇编(Assembly):“翻译成机器指令”2.4实战:用命令行观察编译过程动态库和静态库1️⃣关于动态库和静态库核心结论:一句话区分2️⃣底层原理:编译链接过程的差异2.1静态库
- nodejs中process讲解
虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程(线程)参与工作。进程模块process模块允许你获得或者修改当前node进程的设置,不想其他的模块,process是一个全局进程(node主进程),你可以直接通过process变量直接访问它。proc
- Node.js:process模块
process是Node.js中的一个全局对象,提供了与当前Node.js进程相关的信息和控制能力。它不需要通过require()引入即可使用。一、进程信息1.基础信息属性process.pid;//当前进程的PIDprocess.ppid;//父进程的PID(Node.jsv10+)process.title;//进程名称(可修改)process.arch;//CPU架构,如'x64','arm
- TCP的socket编程
TCP客户端逻辑voidUsage(conststd::string&process){std::cout4字节IP2.网络序列intn=connect(sockfd,CONV(&server),sizeof(server));//自动进行bindif(n0){charbuffer[1024];ssize_tm=read(sockfd,buffer,sizeof(buffer)-1);if(m>0
- Nodejs中process有哪些常用方法?
在Node.js中,process是一个全局对象,提供了与当前Node.js进程互动的接口。它包含了一系列的方法和属性,可以帮助你获取系统信息,处理命令行参数,以及控制进程的行为等。以下是一些process对象的常用方法:process.argv:这不是一个方法,而是一个包含命令行参数的数组。第一个元素是’node’,第二个元素是正在执行的JavaScript文件的路径,接下来的元素则是任何其他命
- nodejs值process.kill
在Node.js中,process.kill()是一个核心方法,用于向指定进程发送信号以控制其行为(如终止、暂停或恢复)。它不仅限于终止进程,还能通过不同信号实现精细化的进程管理。以下从功能、参数、信号类型、使用场景、注意事项及示例等方面进行全面解析:一、核心功能process.kill(pid[,signal])的主要作用是向目标进程(通过pid指定)发送信号,从而控制其生命周期或状态。其名称中
- Camera HAL/ISP 专业术语大全
生活需要深度
ISP+NPU接口隔离原则网络
不断更新,建议收藏,快速检索SOC,SystemOnChip,片上系统HAL,HardwareAbstractionLayer,硬件抽象层ISP,ImageSignalProcessor,图像信号处理器KMD,KernelModeDriver,内核模式驱动程序MCU,MicrocontrollerUnit,微控制器OSAL,OperatingSystemAbstractionLayer,操作系统抽
- python安装火山引擎volcengine-python-sdk环境遇到的问题
安装环境的时候遇到安装volcengine-python-sdk(setup.py)报错Buildingwheelforvolcengine-python-sdk(setup.py)...errorerror:subprocess-exited-with-error×pythonsetup.pybdist_wheeldidnotrunsuccessfully.│exitcode:1╰─>[3791
- [spring6: BeanPostProcessor & BeanFactoryPostProcessor]-生命周期
idolyXyz
spring6-源码阅读spring
BeanFactoryPostProcessorBeanFactoryPostProcessor接口允许在Spring容器初始化完所有的bean定义之后,但还未实例化任何bean时,修改应用上下文的内部bean工厂。通过实现postProcessBeanFactory方法,你可以覆盖或添加属性,甚至是对急切初始化的beans进行修改。//AspectJWeavingEnabler,Configur
- ARMv8架构
weizhideshenghuo
ARMarm
ARMarchitecturePE(processingelement):采取ARM架构的处理器RISC(reducedinstructionsetcomputer):精简指令集架构:AArch64:64位架构,地址和指令都是64位寄存器提供31个64位通用寄存器,X30用作过程链接寄存器提供1个64位程序计数器PC(programcounter),栈指针SPs(stackpointers),异常
- HAProxy实现负载均衡及高可用集群(corosync+pacemaker
}}}else{echo“Invalidfile”;}?>注意:需要重启httpd **测试:** *2wprker_cla
- Python 线程与进程在实际项目中的问题及应对策略
女码农的重启
pythonjava线程进程
一、引言在Python编程里,线程(Thread)和进程(Process)是实现并发与并行计算的关键工具,能有效提升程序执行效率与资源利用率。然而,实际项目应用中,因二者特性及Python运行环境(如GIL,全局解释器锁)等因素,会遭遇诸多问题。本文深入剖析这些问题,并给出应对方案。二、Python线程的问题与解决(一)GIL引发的性能瓶颈Python的全局解释器锁,限制了同一进程内多个线程并行执
- yolov5推理简单代码(网上找了好多,最终找到了)
a2488220557
YOLO计算机视觉opencv
#yolov5#导包importtorchimportcv2frommultiprocessingimportProcess,Manager,Value#下面两个是yolov5文件夹里面的代码fromutils.generalimportnon_max_suppressionfrommodels.experimentalimportattempt_load#确保在进行对象检测时,边界框的位置可以与
- Python 进程间的通信:原理剖析与项目实战
女码农的重启
java进程通信python
在Python编程中,当涉及多进程编程时,进程间的通信(Inter-ProcessCommunication,简称IPC)是一个重要的课题。多个进程在运行过程中,常常需要交换数据、传递状态或协同工作,这就离不开进程间通信机制。本文将深入讲解Python进程间通信的原理,并结合实际项目案例,展示其在项目中的具体使用方法。一、Python进程间通信原理操作系统为进程提供了多种通信机制,Python在标
- rust最低什么显卡能游戏_腐蚀Rust配置要求汇总 腐蚀Rust游戏配置要求是什么_游侠网...
微尘-黄含驰
rust最低什么显卡能游戏
腐蚀Rust游戏配置要求是什么?体验版本发售了有四年之久,如今正式版终于有了新消息,将于2月8号发售正式版,今天给大家带来的是腐蚀Rust配置要求汇总,一起来看下吧。配置要求汇总Windows最低配置:Requiresa64-bitprocessorandoperatingsystem操作系统:Windows764bit处理器:2ghz内存:8GBRAM图形:NVIDIAGTX6702GB/AMD
- 操作系统笔记:进程调度(Process Scheduling)
笑衬人心。
操作系统笔记笔记os进程调度
一、什么是进程调度进程调度(ProcessScheduling)是操作系统中负责选择下一个要运行的进程的一项核心功能。在多道程序设计系统中,多个进程竞争CPU资源,调度器根据特定策略选择一个进程运行。目标:提高CPU利用率提高系统吞吐量减少平均等待时间保证响应时间实现公平性与优先级二、调度类型调度类型说明长程调度(Long-term)决定哪些进程进入就绪队列中程调度(Mid-term)暂停/恢复进
- 深入解析Battelle/movfuscator项目的后处理技术
邹滢朦
深入解析Battelle/movfuscator项目的后处理技术项目概述Battelle/movfuscator是一个独特的编译器项目,它能够将C代码转换为仅使用MOV指令的汇编代码。而其后处理器(post-processor)组件则提供了更多强大的功能扩展,可以将这些汇编代码进一步转换为使用特定指令集的版本,实现更深层次的代码混淆和优化。后处理器工作原理后处理器的工作流程分为以下几个关键步骤:首
- 用Flink实现的一个实时订单对账功能, Flink的双流实时对账
1.为什么业务订单数据不用Mysql之类的强事务性数据库监控反而用Flink的实时?一般这种涉及到订单的数据流都要用mysql监控实现,但是鉴于减少mysql的数据库压力和提高更实时性,可以考虑用Flink实时的数据流做实时的参考2.如何处理乱序数据?使用watermark水位保证第一层数据延迟.PS:这里的水位不能设置太长延迟使用processfuntion更加灵活的处理迟到数据,设置一个定时器
- Flink 多流转换 (三)CoProcessFunction合流操作案例
Alienware^
#FlinkFlink
文章目录下面是CoProcessFunction的一个具体示例:我们可以实现一个实时对账的需求,也就是app的支付操作和第三方的支付操作的一个双流Join。App的支付事件和第三方的支付事件将会互相等待5秒钟,如果等不来对应的支付事件,那么就输出报警信息。程序如下:Gitee源代码如下publicclassBillCheckExample{publicstaticvoidmain(String[]
- 多租户SaaS系统中设计安全便捷的跨租户流程共享
Alex艾力的IT数字空间
安全功能测试架构中间件微服务网络安全代码规范
四维协同架构,结合动态授权、加密传输、行为审计和智能策略一、权限控制体系1.动态权限模型2.授权策略实现RBAC+ABAC混合模型在流程表增加shared_tenants字段存储授权信息,结合属性动态校验:CREATETABLEworkflow_process(process_idVARCHAR(36)PRIMARYKEY,tenant_idVARCHAR(36)NOTNULL,shared_te
- 手撕Spring底层系列之:后置处理器“PostProcessor”
Xxtaoaooo
Spring底层系列java开发语言后端Spring底层源码剖析
人们眼中的天才之所以卓越非凡,并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。————马尔科姆·格拉德威目录一、后置处理器的概念1.1核心定义1.2两大核心对比1.3设计价值二、Bean生命周期扩展时机2.1执行步骤与实例化体现三、内置后置处理器解析3.1五大核心处理器职责3.2AOP代理创建流程四、总结嗨,我是Xxtaoaooo!本系列将用源码解剖+拆分
- 系统学习Python——并发模型和异步编程:进程、线程和GIL
分类目录:《系统学习Python》总目录在文章《并发模型和异步编程:基础知识》我们简单介绍了Python中的进程、线程和协程。本文就着重介绍Python中的进程、线程和GIL的关系。Python解释器的每个实例都是一个进程。使用multiprocessing或concurrent.futures库可以启动额外的Python进程。Python的subprocess库用于启动运行外部程序(不管使用何种
- c++ 编译链接时 报错找不到 某个函数,如何排查?
sun007700
c++chrome开发语言
在C++开发中,链接时出现“undefinedreferenceto”错误是常见问题,以下是系统化的排查流程和解决方案:1.确认基础问题(30秒检查)#检查函数声明是否存在grep"function_name"include/*.hsrc/*.cpp#检查是否包含实现文件ls-lsrc/#确认包含实现的.cpp文件在编译列表中2.签名匹配检查(最常见问题)//头文件声明-voidprocess_d
- 安装uwsgi
安装uWSGIpip3installuwsgi启动命令/usr/local/python3/bin/uwsgi--socket0.0.0.0:8889--workersrun_server:app_server--master--processes4--threads2--stats0.0.0.0:9191在项目目录下新建[uwsgi]#web应用的入口模块名称module=run_server:
- 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