- paimon中的Branch
qzWsong
paimon大数据数据库
Branchhttps://paimon.apache.org/docs/0.9/maintenance/manage-branches/paimon借鉴了git的管理机制,在我们开发代码的时候,为了不影响主分支的功能,我们一般会新建一个分支进行迭代,待新分支完善后,合并回主分支,在新的分支做任何数据操作都不会影响主分支。在paimon中,我们也可以对表创建分支,相当于在当前数据状态下复制出来了一
- ClickHouse副本节点数据损坏恢复
旺仔_牛奶
ClickHouseclickhouse数据库java
参考链接:https://blog.csdn.net/qq_42082701/article/details/127771766参考链接:https://kb.altinity.com/altinity-kb-setup-and-maintenance/suspiciously-many-broken-parts/#背景CK配置为1分片2副本#配置参数,这里我们将max_suspicious_br
- Drool学习记录(二) Kie Session、Truth maintenance
11c170319da1
参考Drools官方文档(3.1KIESession和3.2InferenceandtruthmaintenanceintheDroolsengine),学习关于KieSession和Truthmaintenace的内容。这两节内容虽然很基础,但是感觉官方文档说的还是不够明了,尤其是StatelessSession和StatefulSession的区别,和insert()和insertLogica
- 技术译文 | MySQL 8.0.19 GA!
爱可生开源社区
作者:GeirHoydalsvik翻译:管长龙原文:https://mysqlserverteam.com/the-mysql-8-0-19-maintenance-release-is-generally-available/MySQL开发团队非常高兴地宣布,MySQL8.0.19现在可从dev.mysql.com下载。除了bug修复,此版本中还添加了一些新功能。以下是重点介绍!InnoDBRe
- 【Iceberg学习四】Evolution和Maintenance在Iceberg的实现
周润发的弟弟
Iceberg学习
EvolutionIceberg支持就底表演化。您可以像SQL一样演化表结构——即使是嵌套结构——或者当数据量变化时改变分区布局。Iceberg不需要像重写表数据或迁移到新表这样耗费资源的操作。例如,Hive表的分区布局无法更改,因此从每日分区布局变更到每小时分区布局需要新建一个表。而且因为查询依赖于分区,所以必须为新表重写查询。在某些情况下,即使是像重命名一个列这样简单的变化要么不被支持,要么可
- 独立安装qt的子模块(submodules)
mengzhi啊
qt开发语言c++
这就是独立子模块在2020以前的qt版本,我们需要下载,编译,放到qt目录才能使用1.1里面有个.pro所有可以用qt之间编译1.2也可以用mingw命令工具进行编译2.在2020以后,都是使用qt安装目录下的maintenance.exe进行添加2.1这是2020后下载的子模块,没有pro,不能用qt进行编译2.2也不能用mingw命令工具进行编译2.3使用maintence.exe在里面选择(
- 解锁高性能工具etcd大牛们常用的命令
北京-景枫
Linuxlinuxetcd注册中心etcd运维
目录1.前言2.常用命令3.总结1.前言etcd简介:etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现;ETCD官方文档:https://etcd.io/docs/v3.4.0/op-guide/maintenance/#auto-compactionET
- DAY11--learning english
Alphamilk
java
一、积累1.solitary2.maintenance3.grant4.hostage5.estimate6.critical7.shrink8.substance9.tamper10.capture11.designate12.absent13.detect14.disguise15.dental16.hostile17.resignation18.cemetery19.fiction20.br
- ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务
lsysafe
zabbixtcp/ip网络pythondjangolinux网络协议
有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务无论哪种方式(IP列表,主机描述,或IP子网)创建维护,都是向maintenance.create这个方法传递参数的过程,除了起始和终止的时间,最主要的一个参数就
- [k8s 学习笔记]
LL-Dynabook
linuxdockercentos
摘自知乎:k8s入门及实践一、k8s简介K8S是Kubernetes的全称,官方称其是:Kubernetesisanopensourcesystemformanagingcontainerizedapplicationsacrossmultiplehosts.Itprovidesbasicmechanismsfordeployment,maintenance,andscalingofapplica
- 【靶机】vulnhub靶机clover:1
Ie802.3
vulnhubvulnhub网络安全渗透测试
靶机下载地址:Clover:1~VulnHub靶机ip:192.168.174.145Kaliip:192.168.174.128靶机ip发现:sudoarp-scan-l靶机开放端口扫描分析:发现开放了21端口ftp服务,且允许匿名登录22端口ssh服务80端口和一些其他的先对ftp进行查看查看maintenance目录下的内容使用get将文件下载下来进行查看。进行locale文件的解密,猜测是
- 讲解:Comp 2013、Java/C++、Software Maintenance、CS/pythonR|
pingnanrong
Comp2013SoftwareMaintenanceCoursework1for2018MaintainableCodeReflectionPortfolioDeadline:5Nov,3pmSynopsis:Partofunderstandinghowtoimproveasasoftwaredeveloperislearninghowtoreflectonnewconceptsandonyou
- MySQL 8.0.18 GA 正式发布!
爱可生开源社区
MySQLServer8.0.18、5.7.28和5.6.46已于2019年10月14日正式发布。MySQL开发团队也第一时间发布了更新说明文章。以下是原文翻译。原文:《TheMySQL8.0.18MaintenanceReleaseisGenerallyAvailable》https://mysqlserverteam.com/the-mysql-8-0-18-maintenance-relea
- 【实战加详解】二进制部署k8s高可用集群教程系列十三 - 部署calico
YangJianYong_Geek
实战二进制部署k8s高可用集群实战k8sssl证书详解k8sssl证书详解加实战实战二进制部署k8s高可用集群
[!TIP]二进制部署k8s-node节点部署calico转载请注明出处:https://janrs.com部署calico[!NOTE]在node节点部署。1.配置网络部署calico之前需要配置一下网络。具体查看官网说明。地址:(https://projectcalico.docs.tigera.io/maintenance/troubleshoot/troubleshooting#confi
- 【Monitor, Maintenance & Operation, Script code/prgramme】
DADIAN_GONG
SkillSolutions学习
SummaryofM,M&O,ProgramJD)Monitor&M&OSymbio信必优)Jobchance/opportunitiesonDec12th,20231.1)Content招聘JDjobdescription:1.2)suggestionsfromMsLiang/WinnieonWechatapp1.3)Java微服务是什么?1.3.1)[URLJava微服务](https://w
- Oracle(2-17) RMAN Maintenance
不会编程的猫星人
Oracle学习系列oracle数据库运维linux
文章目录一、基础知识1、RetentionPolicy保留政策2、RecoveryWindow-Part1恢复窗口-第1部分3、CrossChecking交叉检查4、TheCROSSCHECKCommandCROSSCHECK命令5、OBSOLETEVSEXPIRED过时与过期6、DeletingBackupsandCopies删除备份和副本7、TheDELETECommandDELETE命令8、
- Oracle(2-16) Recovery Catalog Creation and Maintenance
不会编程的猫星人
Oracle学习系列oracle数据库linux运维
文章目录一、基础知识1、Overview概述2、RecoveryCatalogContents恢复Catalog内容3、BenefitsofUsingCatalog使用Catalog的好处4、CreatingRecoveryCatalog创建恢复Catalog5、Resynchronization同步问题6、RESYNCCATALOG手动同步命令7、Resettingaincarnation重置化
- docker安装的gitlab升级
石缝中坚韧的小草
首先查看目前的gitlab版本如果不是绿色的时候,就可以升级了。如果是红色的时候,这个时候首先需要去官方查看升级路径,不一定能够直接直接升级到最新版,因为gitlab的每个版本数据结构都会不太一样。升级路径说明:https://docs.gitlab.com/ee/policy/maintenance.html然后从https://hub.docker.com/r/gitlab/gitlab-ce
- 知识点滴 - Maintenance Release
夜流冰
软件工程师其他
WhatisaMaintenanceRelease?什么是MRrelease?维护版本是指在不改变任何核心组件或添加新功能的情况下修正安全漏洞或小错误(securityflaworminorbug)的软件版本。它们通常以十分之一或百分之一为单位进行编号,以区别于主要版本,后者的编号仅为版本1.0、版本2.0等。维护版本是软件发布生命周期中系统运行和支持阶段的一部分。每个软件应用程序都要经历软件发布
- 用事务代码查看视图的函数
Harryjing2018
ABAPSAP
文章目录1Introduction2Code1IntroductionIfwecontinuetoseeviewwithT-code.Wecanusethefunctionforit.2CodeREPORTz_websrv_con.CALLFUNCTION'VIEW_MAINTENANCE_CALL'EXPORTINGaction='U'"操作类型:U修改/S显示/T传输view_name='ZT
- etcd常用命令与备份恢复-Day03
圣圣不爱学习
Kubernetesetcd运维
1.etcd简介官方网站:etcd.io官方文档:etcd.io/docs/v3.5/op-guide/maintenance官方硬件推荐:etcd.io/docs/v3.5/op-guide/hardwaregithub地址:github.com/etcd-io/etcdetcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。e
- Etcd 常用命令与备份恢复
张志翔的博客
Etcdetcd数据库
1.etcd简介官方网站:etcd.io官方文档:etcd.io/docs/v3.5/op-guide/maintenance官方硬件推荐:etcd.io/docs/v3.5/op-guide/hardwaregithub地址:github.com/etcd-io/etcdetcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。e
- 纽约系列13:你有多少high maintenance的所谓朋友!曼哈顿生活不要太方便!-创业一起high 145
徐林Grace
离我家一个block中央公园我必须吐槽,很少情绪上被别人气恼annoyed,今天特意跑到朋友M让我取他让我带的东西的时候,彻底不愉快,一个巨沉的包和一个装着液体的包,不说路上花了我1个小时,接下来的一天我都要拎着这个大包四处走动,一瞬间我想就不帮他带回去了,因为已经有一副画寄到我家里,必须不能折叠的带回上海,真的有这样所谓的朋友toomuchtoask,suchapainwithhighmaint
- table多选右侧展示,反显,组件
会跳舞的小猴子
前端javascriptjava
import{deptTreeByUser}from'@/api/logistics'import{elTableMultiSelect}from'@/views/logistics/maintenance/hooks/shift'constprops=defineProps({maintenanceType:Number||String,//职务名称userId:[Number,String],
- Ubuntu 16.04 LTS third maintenance update release
llawliet0001
ubuntulinux运维
Ubuntu16.04LTS(XenialXerus)今天迎来的第三个维护版本更新中,已经基于LinuxKernel4.10内核,而且Mesa图形栈已经升级至17.0版本。AdamConrad表示:“像此前LTS系列相似,16.04.3对那些使用更新硬件的用户带来了硬件优化。该版本支持除32位PowerPC之外的所有架构,可使用提供的桌面镜像进行默认安装。UbuntuServer默认安装GA内存,
- Fanuc伺服焊枪配置
jqrbcts
opencv人工智能c#机器人
关于发那科机器人配置伺服焊枪配枪流程一.控制模式下,添加伺服焊枪。二.完成AUTOTUNE自动校枪三.压力校准四.配置Rip、Timer,分配IO,修改系统设置五.启用修磨补偿控制模式下。添加伺服焊枪1、在重启机器人时,选择控制启动2、在控制模式下,按MENUS按钮选择MAINTENANCE(维护),进入ROBOTMAINTENANCE界面。3、选择2ServoGunAxes0选项,按F4MANU
- 工业品商城软件java和PHP哪个好?
加速度jsudo
工业品商城开发工业品商城开发方案团队开发
互联网飞速发展的今天,网上商城系统开发已经成为了拓展业务、提升用户体验的必备之选。MRO工业品电商平台的概念及现状MRO 工业品是指工厂或企业对其生产和工作设施、设备进行保养、维护、维修,保证其运行所需要的非生产性物料。即Maintenance维护;Repair维护;Operation运行。工业品采购的传统方式存在许多问题,如信息不对称、营销成本高等。随着互联网和电子商务的发展,越来越多
- TDesign 学习const{ trigger } = e.detail
素心如月桠
前端javascript开发语言
代码理解//pages/maintenance/index.jsPage({/***页面的初始数据*/data:{},/***生命周期函数--监听页面加载*/onLoad(options){},/***生命周期函数--监听页面初次渲染完成*/onReady(){},/***生命周期函数--监听页面显示*/onShow(){},/***生命周期函数--监听页面隐藏*/onHide(){},/***生
- WordPress 正在维护故障一步解决
moyebai
开发日志wordpress
解决方案:删除WordPress根目录下的.maintenance,刷新网页即可,若没有则创建一个,再刷新网页
- WordPress 升级失败出现 WordPress出现 Briefly unavailable for scheduled maintenance. Check back in a min...
我迎风踏雪而来
WordPress插件升级失败,导致访问网站出现了:解决方法:登入FTP,然后把WordPress根目录的"Brieflyunavailableforscheduledmaintenance.Checkbackinaminute.这种情况怎么解决呢,我们只需要登录到我们的服务器下,然后删除一个".maintenance`的文件即可。网站就会恢复正常了~
- rust的指针作为函数返回值是直接传递,还是先销毁后创建?
wudixiaotie
返回值
这是我自己想到的问题,结果去知呼提问,还没等别人回答, 我自己就想到方法实验了。。
fn main() {
let mut a = 34;
println!("a's addr:{:p}", &a);
let p = &mut a;
println!("p's addr:{:p}", &a
- java编程思想 -- 数据的初始化
百合不是茶
java数据的初始化
1.使用构造器确保数据初始化
/*
*在ReckInitDemo类中创建Reck的对象
*/
public class ReckInitDemo {
public static void main(String[] args) {
//创建Reck对象
new Reck();
}
}
- [航天与宇宙]为什么发射和回收航天器有档期
comsci
地球的大气层中有一个时空屏蔽层,这个层次会不定时的出现,如果该时空屏蔽层出现,那么将导致外层空间进入的任何物体被摧毁,而从地面发射到太空的飞船也将被摧毁...
所以,航天发射和飞船回收都需要等待这个时空屏蔽层消失之后,再进行
&
- linux下批量替换文件内容
商人shang
linux替换
1、网络上现成的资料
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
linux sed 批量替换多个文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的www.admi
- 网页在线天气预报
oloz
天气预报
网页在线调用天气预报
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transit
- SpringMVC和Struts2比较
杨白白
springMVC
1. 入口
spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
参见:http://blog.csdn.net/zs15932616453/article/details/8832343
2
- refuse copy, lazy girl!
小桔子
copy
妹妹坐船头啊啊啊啊!都打算一点点琢磨呢。文字编辑也写了基本功能了。。今天查资料,结果查到了人家写得完完整整的。我清楚的认识到:
1.那是我自己觉得写不出的高度
2.如果直接拿来用,很快就能解决问题
3.然后就是抄咩~~
4.肿么可以这样子,都不想写了今儿个,留着作参考吧!拒绝大抄特抄,慢慢一点点写!
- apache与php整合
aichenglong
php apache web
一 apache web服务器
1 apeche web服务器的安装
1)下载Apache web服务器
2)配置域名(如果需要使用要在DNS上注册)
3)测试安装访问http://localhost/验证是否安装成功
2 apache管理
1)service.msc进行图形化管理
2)命令管理,配
- Maven常用内置变量
AILIKES
maven
Built-in properties
${basedir} represents the directory containing pom.xml
${version} equivalent to ${project.version} (deprecated: ${pom.version})
Pom/Project properties
Al
- java的类和对象
百合不是茶
JAVA面向对象 类 对象
java中的类:
java是面向对象的语言,解决问题的核心就是将问题看成是一个类,使用类来解决
java使用 class 类名 来创建类 ,在Java中类名要求和构造方法,Java的文件名是一样的
创建一个A类:
class A{
}
java中的类:将某两个事物有联系的属性包装在一个类中,再通
- JS控制页面输入框为只读
bijian1013
JavaScript
在WEB应用开发当中,增、删除、改、查功能必不可少,为了减少以后维护的工作量,我们一般都只做一份页面,通过传入的参数控制其是新增、修改或者查看。而修改时需将待修改的信息从后台取到并显示出来,实际上就是查看的过程,唯一的区别是修改时,页面上所有的信息能修改,而查看页面上的信息不能修改。因此完全可以将其合并,但通过前端JS将查看页面的所有信息控制为只读,在信息量非常大时,就比较麻烦。
- AngularJS与服务器交互
bijian1013
JavaScriptAngularJS$http
对于AJAX应用(使用XMLHttpRequests)来说,向服务器发起请求的传统方式是:获取一个XMLHttpRequest对象的引用、发起请求、读取响应、检查状态码,最后处理服务端的响应。整个过程示例如下:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange
- [Maven学习笔记八]Maven常用插件应用
bit1129
maven
常用插件及其用法位于:http://maven.apache.org/plugins/
1. Jetty server plugin
2. Dependency copy plugin
3. Surefire Test plugin
4. Uber jar plugin
1. Jetty Pl
- 【Hive六】Hive用户自定义函数(UDF)
bit1129
自定义函数
1. 什么是Hive UDF
Hive是基于Hadoop中的MapReduce,提供HQL查询的数据仓库。Hive是一个很开放的系统,很多内容都支持用户定制,包括:
文件格式:Text File,Sequence File
内存中的数据格式: Java Integer/String, Hadoop IntWritable/Text
用户提供的 map/reduce 脚本:不管什么
- 杀掉nginx进程后丢失nginx.pid,如何重新启动nginx
ronin47
nginx 重启 pid丢失
nginx进程被意外关闭,使用nginx -s reload重启时报如下错误:nginx: [error] open() “/var/run/nginx.pid” failed (2: No such file or directory)这是因为nginx进程被杀死后pid丢失了,下一次再开启nginx -s reload时无法启动解决办法:nginx -s reload 只是用来告诉运行中的ng
- UI设计中我们为什么需要设计动效
brotherlamp
UIui教程ui视频ui资料ui自学
随着国际大品牌苹果和谷歌的引领,最近越来越多的国内公司开始关注动效设计了,越来越多的团队已经意识到动效在产品用户体验中的重要性了,更多的UI设计师们也开始投身动效设计领域。
但是说到底,我们到底为什么需要动效设计?或者说我们到底需要什么样的动效?做动效设计也有段时间了,于是尝试用一些案例,从产品本身出发来说说我所思考的动效设计。
一、加强体验舒适度
嗯,就是让用户更加爽更加爽的用你的产品。
- Spring中JdbcDaoSupport的DataSource注入问题
bylijinnan
javaspring
参考以下两篇文章:
http://www.mkyong.com/spring/spring-jdbctemplate-jdbcdaosupport-examples/
http://stackoverflow.com/questions/4762229/spring-ldap-invoking-setter-methods-in-beans-configuration
Sprin
- 数据库连接池的工作原理
chicony
数据库连接池
随着信息技术的高速发展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速发展,都需要数据库技术支持动 态Web站点的运行,而传统的开发模式是:首先在主程序(如Servlet、Beans)中建立数据库连接;然后进行SQL操作,对数据库中的对象进行查 询、修改和删除等操作;最后断开数据库连接。使用这种开发模式,对
- java 关键字
CrazyMizzz
java
关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于保留字,用户只能按照系统规定的方式使用,不能自行定义。
Java中的关键字按功能主要可以分为以下几类:
(1)访问修饰符
public,private,protected
p
- Hive中的排序语法
daizj
排序hiveorder byDISTRIBUTE BYsort by
Hive中的排序语法 2014.06.22 ORDER BY
hive中的ORDER BY语句和关系数据库中的sql语法相似。他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间。
与数据库中 ORDER BY 的区别在于在hive.mapred.mode = strict模式下,必须指定 limit 否则执行会报错。
- 单态设计模式
dcj3sjt126com
设计模式
单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
<?phpclass Example{ // 保存类实例在此属性中 private static&
- svn locked
dcj3sjt126com
Lock
post-commit hook failed (exit code 1) with output:
svn: E155004: Working copy 'D:\xx\xxx' locked
svn: E200031: sqlite: attempt to write a readonly database
svn: E200031: sqlite: attempt to write a
- ARM寄存器学习
e200702084
数据结构C++cC#F#
无论是学习哪一种处理器,首先需要明确的就是这种处理器的寄存器以及工作模式。
ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。
1、不分组寄存器(R0-R7)
不分组也就是说说,在所有的处理器模式下指的都时同一物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用一个名字相同的物理寄存器,就是
- 常用编码资料
gengzg
编码
List<UserInfo> list=GetUserS.GetUserList(11);
String json=JSON.toJSONString(list);
HashMap<Object,Object> hs=new HashMap<Object, Object>();
for(int i=0;i<10;i++)
{
- 进程 vs. 线程
hongtoushizi
线程linux进程
我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。
首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。
如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。
如果用多线程实现
- Linux定时Job:crontab -e 与 /etc/crontab 的区别
Josh_Persistence
linuxcrontab
一、linux中的crotab中的指定的时间只有5个部分:* * * * *
分别表示:分钟,小时,日,月,星期,具体说来:
第一段 代表分钟 0—59
第二段 代表小时 0—23
第三段 代表日期 1—31
第四段 代表月份 1—12
第五段 代表星期几,0代表星期日 0—6
如:
*/1 * * * * 每分钟执行一次。
*
- KMP算法详解
hm4123660
数据结构C++算法字符串KMP
字符串模式匹配我们相信大家都有遇过,然而我们也习惯用简单匹配法(即Brute-Force算法),其基本思路就是一个个逐一对比下去,这也是我们大家熟知的方法,然而这种算法的效率并不高,但利于理解。
假设主串s="ababcabcacbab",模式串为t="
- 枚举类型的单例模式
zhb8015
单例模式
E.编写一个包含单个元素的枚举类型[极推荐]。代码如下:
public enum MaYun {himself; //定义一个枚举的元素,就代表MaYun的一个实例private String anotherField;MaYun() {//MaYun诞生要做的事情//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候:/** himself = MaYun() {*
- Kafka+Storm+HDFS
ssydxa219
storm
cd /myhome/usr/stormbin/storm nimbus &bin/storm supervisor &bin/storm ui &Kafka+Storm+HDFS整合实践kafka_2.9.2-0.8.1.1.tgzapache-storm-0.9.2-incubating.tar.gzKafka安装配置我们使用3台机器搭建Kafk
- Java获取本地服务器的IP
中华好儿孙
javaWeb获取服务器ip地址
System.out.println("getRequestURL:"+request.getRequestURL());
System.out.println("getLocalAddr:"+request.getLocalAddr());
System.out.println("getLocalPort:&quo