- Android Camera--hw_get_module获取camx模块接口
嵌入式_笔记
Androidandroid
我们知道,google为了保护硬件厂商的信息,在Android中添加了一层,也就是大名鼎鼎的HAL层。在看HAL的编写方法的过程中,会发现整个模块貌似没有一个入口。一般说来模块都要有个入口,比如应用程序有main函数,可以为加载器进行加载执行,dll文件有dllmain,而对于我们自己写的动态链接库,我们可以对库中导出的任何符号进行调用。问题来了,Android中的HAL是比较具有通用性的,需要上
- vue3+ant design vue实现表格导出(后端返回文件流类型导出)
炒毛豆
vue.js前端javascript
1、之前的博客介绍了,依据页面展示的table表格数据为基础展示表格导出,今天介绍下后端返回文件流来实现表格导出。导出import{ExportTheEmployeesTab}from'@/api/import';//导出import{downExcelUrl}from'@/utils/downloadFile';constsearchRef=ref();constexportData1=()=>
- Python青少年简明教程:模块
学习&实践爱好者
青少年编程入门系列Python学习python开发语言
Python青少年简明教程:模块Python模块是一种组织代码的方式,用于将相关的函数、类和变量分组在一起,从而提高代码的可重用性和可维护性。一个模块通常是一个包含Python代码的文件,文件名以.py作为扩展名。使用模块,可以在不同的Python脚本之间共享代码,而不需要重复编写相同的代码。概述Python模块可以分为以下几类:内置模块Python标准库中自带的模块,如math、os、sys、t
- Django中遇到的问题(持续更新)
Hi,你好啊
Pythondjangopython后端
问题一:url导入不成功导入:fromdjango.conf.urlsimporturl报错:ImportError:cannotimportname'url'from'django.conf.urls'原因:Django在4.0以上版本将其废弃。解决办法:#使用新的函数进行替代fromdjango.urlsimportre_pathasurl
- Python之Tkinter包的filedialog模块介绍
学习&实践爱好者
Python学习python
Python之Tkinter包的filedialog模块介绍在程序运行该过程中,当你需要手动选择文件或手动选择文件存储路径时,就需要用到tkinter库中filedialog提供的函数。tkinter的filedialog模块提供了一个简单的对话框界面,用于让用户选择文件或目录。它通常与tkinter一起使用,用于创建图形用户界面(GUI)应用程序。Tkinter库是python默认的GUI库,它
- Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数
2401_85154737
javalinux开发语言
进程创建函数进程就是pcb,意味着创建一个进程,就是创建一个pcbpid_tfork(void)–通过复制调用进程(父进程)创建一个新的进程(子进程)创建一个新的pcb,然后从父进程pcb中复制了很多数据过来复制的主要信息有内存指针,程序计数器,上下文数据。内存指针:子进程与父进程运行的代码其实是一样的–指向同一块物理内存中的数据及指令程序计数器/上下文数据:子进程被创建出来后,运行位置与父进程是
- 学习记录——day43 C++ 异常处理
子座
学习
一、异常处理的格式1、在可能产生异常的地方使用关键字:throw抛出异常2、try{可能会抛出异常的语句}catch(接收异常的形参){处理异常}任何函数在定义时,可以指定能抛出的异常格式如下返回值类型函数名(形参列表)throw(异常类型1,异常类型2,。。。。)定义时throw没有不影响函数体内throw的使用,系统会自动匹配,如果有,内外类型要一致,不能缺少对于一定不会抛出异常的函数,可用n
- 【vue3】钩子函数详细介绍
纳米小川
vueJavaScriptvue3前端javascriptvue.jsvue
1、setup()这不是一个传统的钩子函数,但它是最主要的入口点,其为我们使用Vue3的CompositionAPI新特性提供了统一的入口,用于初始化组件的状态和定义组合逻辑。setup()函数可以接收两个参数:props和context。然而,在使用语法糖时,props可以直接解构,而不需要显式地接收context。1)基本示例://使用普通script标签exportdefault{name:
- python之eval函数使用详解
吴少凡
python开发语言自动化
eval()是Python内置的一个函数,它可以将字符串最外侧的引号去掉,并且按照python语句方式执行去掉引号后的代码(去掉引号后,代码可能还是字符串,可能是数字,可能是列表,可能是执行函数的代码块等等),---用于执行字符串表达式。1.eval()函数的语法eval()函数的语法如下:eval(expression,globals=None,locals=None)参数:expression
- Python 处理config.ini文件
web521_wu
Pythonpython
在做一个自动化测试框架中需要根据不同设备修改IP、username、password等信息,开始使用excel,单使用下来发现excel较死板,不方便后续维护。且功能自动化只针对单台设备,后续需要在UI上实现。确定使用config文件,放在程序中,使用时UI直接修改即可。先了解ini文件的格式[common]-----sectionip_addr=192.168.25.71------option
- python读取EXCEL的方式
Carol_Chen6
python初级pythonnumpy开发语言
用python读并取出数据有两种方式,2022年7月22日运行亲测可行。1.读将文件地址保存在path中path=r'D:\26968\PycharmProjects\caculator\型号数据.xlsx'读取有两个方法:pd.read_excel(path,None)pd.read_excel(path)方法1data=pd.read_excel(path,None)#读取数据,设置None可
- Python JSON - 奇客谷qikegu.com
八狐云|酷画册|二维码生成
pythonPython教程python
Python介绍Python开发环境搭建Python语法Python变量Python数值类型Python类型转换Python字符串(String)Python运算符Python列表(list)Python元组(Tuple)Python集合(Set)Python字典(Dictionary)PythonIf…ElsePythonWhile循环PythonFor循环Python函数PythonLambd
- Python函数
1024节
Pythonpython函数
Python函数1.概念2.语法3.无参函数1.无返回值2.有返回值4.有参函数1.无返回值2.有返回值3.形参和实参4.位置参数5.关键字参数6.默认值参数7.不定长参数1.加一个*号(元组tuple)2.加入两个**号(字典dict)5.函数调用可以放在函数定义的前面吗?6.练习题1.利用函数打印四边形2.有参,无参练习3.求三个数的和平均值1.概念函数:把重复利用的代码块封装起来,多次利用起
- swap function & copy-and-swap idiom
leon4ever
在C++中,一个资源管理类(例如含有指向堆内存的指针)中需要重新定义拷贝构造函数、赋值运算符以及析构函数(BigThree),在新标准下还可能需要定义移动构造函数和移动赋值预算法(BigFive)。但实际上,这条规则还可以有一个小拓展。就是在资源管理类中,往往需要重新定义自己的swap函数来作为优化手段。1.Swap函数首先考察如下例子,假设类HashPtr中含有一个指向string的指针*ps和
- python闭包的作用
hzw0510
pythonpython开发语言
python闭包的作用Python中的闭包是一种强大的编程概念,它在处理函数和作用域时提供了灵活性和便利性。下面是闭包的一些主要作用和应用:1.封装数据和函数闭包可以将数据和操作这些数据的函数封装在一起,使得外部无法直接访问这些数据。这有助于创建数据的私有性。defmake_counter():count=0defcounter():<
- Python——json的封装与解析
hjhkkkl
pythonjson
SON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写。JSON函数使用JSON函数需要导入json库:importjson。函数描述json.dumps将Python对象编码成JSON字符串json.loads将已编码的JSON字符串解码为Python对象json.dumpsjson.dumps用于将Python对象编码成JSON字符串。语法jso
- Python使用函数封装简易ATM(V1.0)
_遥瑾_
python
这篇文章是一个简单的存取款账户实现,包括了账户的创建、存款、取款、查询余额和注销功能。账户类通过definit()方法初始化一个空的用户列表,然后通过addaccount()方法创建账户,如果用户列表为空,则提示先添加账户。deposit()方法用于存款,程序会遍历用户列表,将所有用户的余额相加,然后更新用户的余额。withdrawal()方法用于取款,程序会遍历用户列表,将所有用户的余额相减,然
- Python使用函数封装简易ATM(V2.0)
_遥瑾_
pythonpython
Python使用函数封装简易ATM(V1.0)https://mp.csdn.net/mp_blog/creation/editor/127511047该文章的代码是在V1.0的基础上进行升级,使得功能更加完善print('***********欢迎使用智汇ATM***********')print('1.注册2.登录3.查询余额4.存款5.转账6.取款7.退卡')#定义一个列表,存放用户注册信息
- 深入解析:【window】对象在多文件 JavaScript 环境中的作用与调用机制
OEC小胖胖
JavaScriptjavascript开发语言ecmascript前端web
1.window对象:JavaScript的全局对象在浏览器环境中,window对象是所有全局对象的载体。每个浏览器页面都有一个对应的window对象,代表浏览器的窗口或框架。所有全局作用域中的变量、函数、以及其他对象都自动成为window对象的属性。varglobalVar="Hello,world!";functionglobalFunction(){console.log("Thisisag
- Python常用模块
xbgordon
Python脚本PythonOS正则表达式F#C
Python常用模块I1.内置模块(不用import就可以直接使用)常用内置函数:help(obj)在线帮助,obj可是任何类型callable(obj)查看一个obj是不是可以像函数一样调用repr(obj)得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝eval_r(str)表示合法的python表达式,返回这个表达式dir(obj)查看obj的namespace中可见的
- python 解析数据后保存到excel
星寂樱易李
pythonpythonexcel
openpyxl特点:支持读写Excel2010xlsx/xlsm/xltx/xltm文件格式。可以操作Excel的几乎所有功能,如样式、图表、图片等。适用于复杂的Excel操作,例如公式、数据验证和条件格式。社区支持较好,文档比较完善。优点:功能全面,能够处理复杂的Excel文件。可以读取和修改现有的Excel文件。支持较新的Excel特性。缺点:内存消耗较大,对于非常大的Excel文件可能不太
- 20240829软考架构-------软考81-85答案解析
杨诚实
软考架构架构
每日打卡题81-85答案81、【2014年真题】难度:一般某公司欲开发一个用于分布式登录的服务端程序,使用面向连接的TCP协议并发地处理多客户端登录请求。用户要求该服务端程序运行在Linux、Solaris和WindowsNT等多种操作系统平台之上,而不同的操作系统的相关API函数和数据都有所不同。针对这种情况,公司的架构师决定采用“包装器外观(WrapperFacade)”架构模式解决操作系统的
- python可以嵌在vba中吗_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
简内特
python可以嵌在vba中吗
以前,Excel和PythonJupyterNotebook之间我们只能选择一个。但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用。在本文中,我将向你展示如何设置在Excel中运行的JupyterNotebook。在这两者之间共享数据,甚至可以从Excel工作簿调用Jupyter笔记本中编写的Python函数!开始首先,要在Excel中运行Python代码,你需要使用PyXL
- python sum函数代码_python pandas实现excel中的sum函数功能
weixin_39906245
pythonsum函数代码
pythonpandas实现excel中的sum函数功能mp.weixin.qq.comsum函数是excel中经常用到的函数,那么在pandas中也存在这样的函数,下面详细了解一下这个函数:>>>importpandasaspd>>>importnumpyasnp>>>df=pd.read_excel(r'D:/myExcel/1.xlsx')>>>dfABCD031.01.1hello13Na
- c++利用ado操作excel(.xls)或(.xlsx)文件
三无人员9630
//ConnectionString=_T("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=");ConnectionString=_T("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=");ConnectionString+="E:\\周报\\222.xlsx";//excelfilename//Connect
- python tkinter tkintertable
不羁绊Delta风
pythontkinter可视化
pythontkintertkintertableExcel数据显示到GUI上本文适用于tkinterGUI显示Excel数据pythonExcel数据显示pythontkintertkintertableExcel数据显示到GUI上前言一、创建GUI界面二、使用步骤1.引入库三、效果图总结前言本文主要使用是将Excel数据显示到pythontkinterGUI界面上进行展示,主要使用的方法为pa
- jdk8新特性
五_六柒
默认方法。一个在接口里面有了一个实现的方法。只需在方法名前面加个default关键字即可实现默认方法。lambda表达式。Lambda允许把函数作为一个方法的参数传递进方法中。它实际上是个匿名函数。方法引用。java8允许使用::关键字来传递方法或者构造函数引用。函数式接口。一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。可以使用lambda表达式作为接口中唯一一个抽象方法的具体实现。@
- java用poi操作excel .xls和.xlsx格式
躁动的青年
poijava操作excelpoixlsx
jxl主页http://www.andykhan.com/jexcelapi/index.htmljxl似乎不支持2007,2010jxl读取excel2010报错jxl.read.biff.BiffException:UnabletorecognizeOLEstreamatjxl.read.biff.CompoundFile.(CompoundFile.java:116)atjxl.read.b
- Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A
baidu_17201253
excel
问题:Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A原因:原数据和匹配的数据格式不一致解决办法:把格式都设置为文本。例如添加一列,输入英文符号',然后把数据源拼接起来,转换为文本。如有其他更好的方式,欢迎补充!
- 数据可视化pythonexcel表格,python对excel数据可视化
M3666789
信息可视化数据分析数据挖掘人工智能
大家好,小编来为大家解答以下问题,数据可视化pythonexcel表格,python对excel数据可视化,现在让我们一起来看看吧!本篇文章给大家谈谈一个有趣的事情,以及一个有趣的事情,希望对各位有所帮助,不要忘了收藏本站喔。近段时间由于工作中需要对一些数据的整理和可视化显示,故记下使用python操作Excel可视化操作,方便后续查阅python自学有用吗。一、数据导入ExcelDemo:#!/
- 异常的核心类Throwable
无量
java源码异常处理exception
java异常的核心是Throwable,其他的如Error和Exception都是继承的这个类 里面有个核心参数是detailMessage,记录异常信息,getMessage核心方法,获取这个参数的值,我们可以自己定义自己的异常类,去继承这个Exception就可以了,方法基本上,用父类的构造方法就OK,所以这么看异常是不是很easy
package com.natsu;
- mongoDB 游标(cursor) 实现分页 迭代
开窍的石头
mongodb
上篇中我们讲了mongoDB 中的查询函数,现在我们讲mongo中如何做分页查询
如何声明一个游标
var mycursor = db.user.find({_id:{$lte:5}});
迭代显示游标数
- MySQL数据库INNODB 表损坏修复处理过程
0624chenhong
tomcatmysql
最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时候,出现Waiting for N instance(s) to be deallocated 信息。查了下,大概就是程序没有对数据库连接释放,导致Connection泄露了。因为用的是开元集成的平台,内部程序也不可能一下子给改掉的,就验证一下咯。启动Tomcat,用户登录系统,用netstat -
- 剖析如何与设计人员沟通
不懂事的小屁孩
工作
最近做图烦死了,不停的改图,改图……。烦,倒不是因为改,而是反反复复的改,人都会死。很多需求人员不知该如何与设计人员沟通,不明白如何使设计人员知道他所要的效果,结果只能是沟通变成了扯淡,改图变成了应付。
那应该如何与设计人员沟通呢?
我认为设计人员与需求人员先天就存在语言障碍。对一个合格的设计人员来说,整天玩的都是点、线、面、配色,哪种构图看起来协调;哪种配色看起来合理心里跟明镜似的,
- qq空间刷评论工具
换个号韩国红果果
JavaScript
var a=document.getElementsByClassName('textinput');
var b=[];
for(var m=0;m<a.length;m++){
if(a[m].getAttribute('placeholder')!=null)
b.push(a[m])
}
var l
- S2SH整合之session
灵静志远
springAOPstrutssession
错误信息:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cartService': Scope 'session' is not active for the current thread; consider defining a scoped
- xmp标签
a-john
标签
今天在处理数据的显示上遇到一个问题:
var html = '<li><div class="pl-nr"><span class="user-name">' + user
+ '</span>' + text + '</div></li>';
ulComme
- Ajax的常用技巧(2)---实现Web页面中的级联菜单
aijuans
Ajax
在网络上显示数据,往往只显示数据中的一部分信息,如文章标题,产品名称等。如果浏览器要查看所有信息,只需点击相关链接即可。在web技术中,可以采用级联菜单完成上述操作。根据用户的选择,动态展开,并显示出对应选项子菜单的内容。 在传统的web实现方式中,一般是在页面初始化时动态获取到服务端数据库中对应的所有子菜单中的信息,放置到页面中对应的位置,然后再结合CSS层叠样式表动态控制对应子菜单的显示或者隐
- 天-安-门,好高
atongyeye
情感
我是85后,北漂一族,之前房租1100,因为租房合同到期,再续,房租就要涨150。最近网上新闻,地铁也要涨价。算了一下,涨价之后,每次坐地铁由原来2块变成6块。仅坐地铁费用,一个月就要涨200。内心苦痛。
晚上躺在床上一个人想了很久,很久。
我生在农
- android 动画
百合不是茶
android透明度平移缩放旋转
android的动画有两种 tween动画和Frame动画
tween动画;,透明度,缩放,旋转,平移效果
Animation 动画
AlphaAnimation 渐变透明度
RotateAnimation 画面旋转
ScaleAnimation 渐变尺寸缩放
TranslateAnimation 位置移动
Animation
- 查看本机网络信息的cmd脚本
bijian1013
cmd
@echo 您的用户名是:%USERDOMAIN%\%username%>"%userprofile%\网络参数.txt"
@echo 您的机器名是:%COMPUTERNAME%>>"%userprofile%\网络参数.txt"
@echo ___________________>>"%userprofile%\
- plsql 清除登录过的用户
征客丶
plsql
tools---preferences----logon history---history 把你想要删除的删除
--------------------------------------------------------------------
若有其他凝问或文中有错误,请及时向我指出,
我好及时改正,同时也让我们一起进步。
email : binary_spac
- 【Pig一】Pig入门
bit1129
pig
Pig安装
1.下载pig
wget http://mirror.bit.edu.cn/apache/pig/pig-0.14.0/pig-0.14.0.tar.gz
2. 解压配置环境变量
如果Pig使用Map/Reduce模式,那么需要在环境变量中,配置HADOOP_HOME环境变量
expor
- Java 线程同步几种方式
BlueSkator
volatilesynchronizedThredLocalReenTranLockConcurrent
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 1.同步方法&
- StringUtils判断字符串是否为空的方法(转帖)
BreakingBad
nullStringUtils“”
转帖地址:http://www.cnblogs.com/shangxiaofei/p/4313111.html
public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是 str==
null
或 str.length()==
0
- 编程之美-分层遍历二叉树
bylijinnan
java数据结构算法编程之美
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LevelTraverseBinaryTree {
/**
* 编程之美 分层遍历二叉树
* 之前已经用队列实现过二叉树的层次遍历,但这次要求输出换行,因此要
- jquery取值和ajax提交复习记录
chengxuyuancsdn
jquery取值ajax提交
// 取值
// alert($("input[name='username']").val());
// alert($("input[name='password']").val());
// alert($("input[name='sex']:checked").val());
// alert($("
- 推荐国产工作流引擎嵌入式公式语法解析器-IK Expression
comsci
java应用服务器工作Excel嵌入式
这个开源软件包是国内的一位高手自行研制开发的,正如他所说的一样,我觉得它可以使一个工作流引擎上一个台阶。。。。。。欢迎大家使用,并提出意见和建议。。。
----------转帖---------------------------------------------------
IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言
- 关于系统中使用多个PropertyPlaceholderConfigurer的配置及PropertyOverrideConfigurer
daizj
spring
1、PropertyPlaceholderConfigurer
Spring中PropertyPlaceholderConfigurer这个类,它是用来解析Java Properties属性文件值,并提供在spring配置期间替换使用属性值。接下来让我们逐渐的深入其配置。
基本的使用方法是:(1)
<bean id="propertyConfigurerForWZ&q
- 二叉树:二叉搜索树
dieslrae
二叉树
所谓二叉树,就是一个节点最多只能有两个子节点,而二叉搜索树就是一个经典并简单的二叉树.规则是一个节点的左子节点一定比自己小,右子节点一定大于等于自己(当然也可以反过来).在树基本平衡的时候插入,搜索和删除速度都很快,时间复杂度为O(logN).但是,如果插入的是有序的数据,那效率就会变成O(N),在这个时候,树其实变成了一个链表.
tree代码:
- C语言字符串函数大全
dcj3sjt126com
cfunction
C语言字符串函数大全
函数名: stpcpy
功 能: 拷贝一个字符串到另一个
用 法: char *stpcpy(char *destin, char *source);
程序例:
#include <stdio.h>
#include <string.h>
int main
- 友盟统计页面技巧
dcj3sjt126com
技巧
在基类调用就可以了, 基类ViewController示例代码
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[MobClick beginLogPageView:[NSString stringWithFormat:@"%@",self.class]];
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
flyvszhb
javajdk
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7.
安装jdk1.6前,执行java -version得到
C:\Users\liuxiang2>java -version
java version "1.7.0_21&quo
- Java在创建子类对象的同时会不会创建父类对象
happyqing
java创建子类对象父类对象
1.在thingking in java 的第四版第六章中明确的说了,子类对象中封装了父类对象,
2."When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the sam
- 跟我学spring3 目录贴及电子书下载
jinnianshilongnian
spring
一、《跟我学spring3》电子书下载地址:
《跟我学spring3》 (1-7 和 8-13) http://jinnianshilongnian.iteye.com/blog/pdf
跟我学spring3系列 word原版 下载
二、
源代码下载
最新依
- 第12章 Ajax(上)
onestopweb
Ajax
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- BI and EIM 4.0 at a glance
blueoxygen
BO
http://www.sap.com/corporate-en/press.epx?PressID=14787
有机会研究下EIM家族的两个新产品~~~~
New features of the 4.0 releases of BI and EIM solutions include:
Real-time in-memory computing –
- Java线程中yield与join方法的区别
tomcat_oracle
java
长期以来,多线程问题颇为受到面试官的青睐。虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。
&nb
- android Manifest.xml选项
阿尔萨斯
Manifest
结构
继承关系
public final class Manifest extends Objectjava.lang.Objectandroid.Manifest
内部类
class Manifest.permission权限
class Manifest.permission_group权限组
构造函数
public Manifest () 详细 androi
- Oracle实现类split函数的方
zhaoshijie
oracle
关键字:Oracle实现类split函数的方
项目里需要保存结构数据,批量传到后他进行保存,为了减小数据量,子集拼装的格式,使用存储过程进行保存。保存的过程中需要对数据解析。但是oracle没有Java中split类似的函数。从网上找了一个,也补全了一下。
CREATE OR REPLACE TYPE t_split_100 IS TABLE OF VARCHAR2(100);
cr