- Android 10适配获取设备信息
2401_89791130
android
}作者在对待Android10及以上的用户进行了return""的操作,但我们在开发的过程中是需要去适配这个型号的用户的,查找了错误描述。heuser10553doesnotmeettherequirementstoaccessdeviceidentifiers.通过查看GoogleAndroid开发者官方文档《唯一标识符最佳做法》发现自Android10(API级别29)起,您的应用必须是设备或
- 12 分布式事务
40岁的系统架构师
分布式
分布式事务产生的原因我们拿mysql数据库来说,当数据库为单体数据库的时候,我们打开事务,执行sql为预执行阶段,最后commit时通过日志控制最终全部提交后存储到磁盘中,如果commit失败,可以通过日志控制回滚回来,但是当我们的数据库实例为多个的时候,不同的数据源,我们的日志已经无法控制落入磁盘的数据正常的回滚。当我们分库的时候旧无法通过传统的方式控制事务的正常运转,这个时候就产生了分布式事务
- 多版本并发控制:MVCC的作用和基本原理
koping_wu
mysql数据库
多版本并发控制:MVCC的作用和基本原理1、MVCC简介1.1快照读与当前读的区别1.1.1快照读1.1.2当前读1.2数据库的读写问题1.3MVCC的作用2、MVCC实现原理之ReadView2.1什么是ReadView2.2ReadView的设计思路2.3MVCC整体操作流程1、MVCC简介1.1快照读与当前读的区别mysql在读数据的场景下,根据是否加锁分为了2种读的方式:1.1.1快照读不
- 【JAVA 基础 第(20)课】JDBC JAVA 连接 MySql 数据库
黑口罩
【JAVA】系列java
pom.xml导入MySqljar包mysqlmysql-connector-java5.1.30数据库驱动、连接封装成一个工具类DBUtil类importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.State
- 分布式微服务搭建
Xi-Tong
微服务架构云原生linuxcentosbashjdk
分布式微服务架构搭建(举出一个项目搭建的例子,其他项目可参考本文档)基于Nginx作为web服务器、JDK作为Java运行环境、MySQL作为关系型数据库、Nacos作为服务发现和配置中心、Maven作为项目管理工具、Redis作为缓存和消息中间件(视具体需求而定)、Node.js与npm作为某些微服务(如前端服务或特定业务逻辑服务)的开发和依赖管理工具,可以搭建一个完整的分布式微服务架构项目。以
- map转换成JSON的方法
web18296061989
javajava后端
第一种alibabafalstjson:1.Map转JSONMapmap=newHashMap();map.put("a","a");map.put("b","123");JSONObjectjson=newJSONObject(map);2.map转stringMapmap=newHashMapmap=(Map)json;5.String转JSONStringstr="{"username":"
- Mac上安装多个版本的Python
冷读者
技术PythonPythonMac
简介利用Mac包管理工具brew安装pyenv,pyenv用来管理所有python版本。如果没有安装brew,先安装一下吧。安装pyevn$brewinstallpyenv$pyenv-vpyenv1.2.6查看所有的python版本(pyenv管理的所有版本)$pyenvversions*system(setby/Users/xxx/.pyenv/version)*表示当前正在使用的版本,sys
- MySQL四种隔离级别
猿小喵
mysql数据库
MySQL的隔离级别是在事务这个大主题下面产生的说法。那么什么是事务,事务就是一组sql语句,要么全部执行成功,要么都不执行,不能只执行成功其中的部分sql。事务的最终目的是为了保证数据库数据的完整性、一致性和可用性。要保证数据库在并发情况下的数据完整性、一致性和可用性,事务需要满足如下4个特性,简称ACID:A(Automicity):原子性,事务中对数据库的所有修改要么全部完成,要么都全部回滚
- Kubernetes网络
qichengzong_right
linuxkubernetes云原生linux云原生kubernetes
Kubernetes网络Kubernetes网络模型相关概念链接Kubernetes网络模型Kubernetes网络模型由多个关键部分构建而成:在Kubernetes集群中,每个Pod都会被分配一个独一无二的、在集群范围内有效的IP地址。Pod拥有自己独立的私有网络命名空间,该命名空间由Pod内的所有容器共享。这意味着,在同一Pod中运行的不同容器进程能够通过localhost进行便捷的相互通信。
- Tomcat日志文件详解及catalina.out日志清理方法
m0_74824802
tomcatjava
目录前言1.Tomcat日志文件详解1.1catalina.out1.2localhost_access_log1.3catalina..log1.4host-manager..log和manager..log1.5localhost..log2.catalina.out文件管理与清理方法2.1为什么不能直接删除catalina.out文件2.2正确清空catalina.out文件的方式2.3自动
- c#连接MySql数据库
一 一
数据库mysqlc#
1.右击引用点击管理NuGet程序包2.下载MySql.Data数据包3.引用usingMySql.Data.MySqlClient;4.利用ADO.NET技术就可以连接到MySql数据库了
- Mac上Flutter开发环境搭建
Coder Leo Wang
MobileAppflutter
安装DartSDKbrewtapdart-lang/dartbrewinstalldart配置VSCode安装Dart、CodeRunner插件下载FlutterSDK解压FlutterSDK压缩包到目标路径配置flutter的PATH环境变量比如我的,在.zshrc文件中增加下面一行:exportPATH="$PATH:/Users/wlm/workspace/development/flutt
- C#连接MySQL操作详解
TechPr
c#mysqlandroidC#
C#连接MySQL操作详解在这篇文章中,我们将详细介绍如何使用C#连接和操作MySQL数据库。我们将提供完整的源代码和相应的描述,以帮助您更好地理解。步骤1:引用MySQLConnector/Net首先,您需要安装并引用MySQLConnector/Net,这是一个官方提供的用于在C#中连接MySQL数据库的库。您可以从MySQL官方网站上下载并安装这个驱动程序,然后在您的项目中添加对MySQLC
- 前端一次性在接口中给后端传多个文件流的集合作为参数
柠檬花开_
前端javascript上传文件文件流
前端上传文件后,文件流暂存在数组中。保存时,接口传参多个文件流一、前端暂存文件流//上传附件,attachFiles前端暂存文件流为一个数组httpSuggestionRequest:function(param){console.log(param,'param')if(this.attachFiles.length===10){this.$message.error('上限10个文件!');r
- [C#]C#连接MySql数据库
赵闪闪168.
C#数据库c#mysql
1、要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#downloads,下载平台选择.Net&Mono,下载ZIP免安装版。2、解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个版本选择,在这里我
- 【MySQL】C# 连接MySQL
m0_74824802
面试学习路线阿里巴巴mysqlc#数据库
C#连接MySQL1.添加MySQL引用安装完MySQL之后,在安装的默认目录C:ProgramFiles(x86)MySQLConnectorNET8.0中查找MySQLData.dll文件。在VisualStudio中为项目中添加引用。2.引入命名空间usingMySql.Data.MySqlClient;3.构建连接privatestaticMySqlConnectionm_Connect=
- 驾驭MySQL性能优化利器:八大工具助您告别低效SQL
墨瑾轩
一起学学数据库【一】mysql性能优化sql
已列出工具的使用说明:1.mysqltuner.pl安装与使用:下载最新版本的mysqltuner.pl脚本(通常通过wget或curl命令获取)。为脚本赋予执行权限(chmod+xmysqltuner.pl)。运行脚本,提供MySQL服务器的用户名、密码以及端口号(如有必要)。示例:Code./mysqltuner.pl--user=root--password=your_password--h
- 【Flink 实战系列】Flink CDC 实时同步 Mysql 全量加增量数据到 Hudi
JasonLee实时计算
Flink实战系列hbasespark大数据
【Flink实战系列】FlinkCDC实时同步Mysql全量加增量数据到Hudi前言FlinkCDC是基于Flink开发的变化数据获取组件(Changedatacapture),简单的说就是来捕获变更的数据,ApacheHudi是一个数据湖平台,又支持对数据做增删改查操作,所以FlinkCDC可以很好的和Hudi结合起来,打造实时数仓,实时湖仓一体的架构,下面就来演示一下同步的过程。环境组件版本F
- nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000
BiuBiu__A
后端node.js运维javascriptnode.js后端
nodejs启动项目报错Error:listenEACCES:permissiondenied0.0.0.0:5000,截图如下:解决方法在管理员权限下打开CMD(命令行)并运行:netstopwinnatnetstartwinnat执行完成后在此通过nodejs启动项目即可成功!
- 出现 Error: listen EACCES: permission denied 0.0.0.0:80 解决方法
码农研究僧
BUGBug端口占用Vue
目录1.问题所示2.原理分析3.解决方法1.问题所示执行VUE项目的时候,出现如下问题errorwhenstartingdevserver:Error:listenEACCES:permissiondenied0.0.0.0:80atServer.setupListenHandle[as_listen2](node:net:1468:21)atlistenInCluster
- Javascript和jquery事件-鼠标移入移出事件
weixin_30740295
javascriptViewUI
javascript使用mouseover和mouseout,只在css中支持hoverjquery支持mouseover和mouseout,封装了mouseenter、mouseleave事件函数和hover函数1、有关js中的mouseover和mouseout原生js的事件类型是mouserout和mouseover,之前提到的事件冒泡的缺陷就在这里,之前说的使用阻止冒泡就行,大概说得太轻易
- MySQL Connector/Python 接口 (一)
weixin_33750452
python数据结构与算法数据库
这里仅介绍MySQL官方开发的Python接口,参见这里:https://dev.mysql.com/doc/connector-python/en/Chapter1IntroductiontoMySQLConnector/Python这个接口是用纯Python写成的,仅依赖PythonStandardLibrary。MySQLConnector/Python支持以下几点:1、MySQLServe
- vue前端运行报错 Error: listen EACCES: permission denied 0.0.0.0:3100
qq_38204247
前端
报错原因:端口占用解决方法:重启nat服务netstopwinnatnetstartwinnat
- 如何从Oracle Autonomous Database加载文档
fGVBSAbe
数据库oraclepython
OracleAutonomousDatabase是一种云数据库,利用机器学习来自动化数据库调优、安全性、备份、更新以及其他传统由数据库管理员(DBAs)执行的例行管理任务。在本文中,我们将演示如何从OracleAutonomousDatabase加载文档。我们将使用连接字符串或TNS配置来进行连接。技术背景介绍OracleAutonomousDatabase通过自动化的方式极大地简化了数据库管理的
- Windows10环境vagrant+VirtualBox虚拟机无法创建私有网络的解决方案。
XiaoYu_3328
运维操作系统
报错信息==>default:Clearinganypreviouslysetnetworkinterfaces...Therewasanerrorwhileexecuting`VBoxManage`,aCLIusedbyVagrantforcontrollingVirtualBox.Thecommandandstderrisshownbelow.Command:["hostonlyif","cr
- 如何使用 Python 连接 MySQL 数据库?
程序员黄同学
Python面试题Python数据库数据库pythonmysql
在Python开发中,连接MySQL数据库是一个常见的需求。我们可以使用多种库来实现这一功能,其中最常用的是mysql-connector-python和PyMySQL。下面我将详细介绍如何使用这两个库来连接MySQL数据库,并提供一些实际开发中的建议和注意事项。1.使用mysql-connector-python连接MySQL数据库mysql-connector-python是MySQL官方提供
- MySQL实战之数据管理
云计算老王
mysql数据库
MySQL实战之数据管理文章目录MySQL实战之数据管理前言一、数据库的管理1.1新建数据库二、数据表管理1.1选择数据库库三、数据管理3.1插入行数据3.2查询数据前言本文主要介绍MySQL中数据的增删改查。一、数据库的管理1.1新建数据库##新建数据库createdatabaserundb;##如果当前库已存在会报错,为避免报错添加子句【ifnotexists】避免报错createdataba
- 【MySQL】在MySQL中STR_TO_DATE()以及其他用于日期和时间的转换
m0_74825260
面试学习路线阿里巴巴mysqlandroid数据库
1.在MySQL中STR_TO_DATE()在MySQL中,STR_TO_DATE()函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。1.1语法STR_TO_DATE()函数的基本语法如下:STR_TO_DATE(date_string,format_string)date_string:要转换的字符串。format_string
- SQLDatabase Toolkit: 搭建基于SQL数据库的智能问答系统
azzxcvhj
数据库sqljvmpython
技术背景介绍SQLDatabaseToolkit是一个非常有用的工具集,旨在与SQL数据库进行交互。它的常见应用场景是通过数据库数据构建问答系统,特别是在需要迭代处理和错误恢复的情况下。此工具包在LangChain社区包中提供,支持多种大型语言模型(LLM)或聊天模型的集成。核心原理解析SQLDatabaseToolkit的核心功能包括查询执行、模式查找以及查询检查等。借助这些工具,可以构建一个智
- C#中get和set方法
踹断瘸子那条好腿.
c#java开发语言
在C#中,get和set是属性(Property)的访问器(Accessor)。它们用于控制对属性的读取和写入操作。当您定义一个属性时,可以使用get和set关键字定义属性的访问器。以下是属性的基本结构,包括get和set访问器:publicclassMyClass{ privateintmyField;//私有字段 //属性 publicintMyProperty { get {
- [黑洞与暗粒子]没有光的世界
comsci
无论是相对论还是其它现代物理学,都显然有个缺陷,那就是必须有光才能够计算
但是,我相信,在我们的世界和宇宙平面中,肯定存在没有光的世界....
那么,在没有光的世界,光子和其它粒子的规律无法被应用和考察,那么以光速为核心的
&nbs
- jQuery Lazy Load 图片延迟加载
aijuans
jquery
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载。
对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度。
版本:
jQuery v1.4.4+
jQuery Lazy Load v1.7.2
注意事项:
需要真正实现图片延迟加载,必须将真实图片地址写在 data-original 属性中。若 src
- 使用Jodd的优点
Kai_Ge
jodd
1. 简化和统一 controller ,抛弃 extends SimpleFormController ,统一使用 implements Controller 的方式。
2. 简化 JSP 页面的 bind, 不需要一个字段一个字段的绑定。
3. 对 bean 没有任何要求,可以使用任意的 bean 做为 formBean。
使用方法简介
- jpa Query转hibernate Query
120153216
Hibernate
public List<Map> getMapList(String hql,
Map map) {
org.hibernate.Query jpaQuery = entityManager.createQuery(hql);
if (null != map) {
for (String parameter : map.keySet()) {
jp
- Django_Python3添加MySQL/MariaDB支持
2002wmj
mariaDB
现状
首先,
[email protected] 中默认的引擎为 django.db.backends.mysql 。但是在Python3中如果这样写的话,会发现 django.db.backends.mysql 依赖 MySQLdb[5] ,而 MySQLdb 又不兼容 Python3 于是要找一种新的方式来继续使用MySQL。 MySQL官方的方案
首先据MySQL文档[3]说,自从MySQL
- 在SQLSERVER中查找消耗IO最多的SQL
357029540
SQL Server
返回做IO数目最多的50条语句以及它们的执行计划。
select top 50
(total_logical_reads/execution_count) as avg_logical_reads,
(total_logical_writes/execution_count) as avg_logical_writes,
(tot
- spring UnChecked 异常 官方定义!
7454103
spring
如果你接触过spring的 事物管理!那么你必须明白 spring的 非捕获异常! 即 unchecked 异常! 因为 spring 默认这类异常事物自动回滚!!
public static boolean isCheckedException(Throwable ex)
{
return !(ex instanceof RuntimeExcep
- mongoDB 入门指南、示例
adminjun
javamongodb操作
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默
- CUDA 5 Release Candidate Now Available
aijuans
CUDA
The CUDA 5 Release Candidate is now available at http://developer.nvidia.com/<wbr></wbr>cuda/cuda-pre-production. Now applicable to a broader set of algorithms, CUDA 5 has advanced fe
- Essential Studio for WinRT网格控件测评
Axiba
JavaScripthtml5
Essential Studio for WinRT界面控件包含了商业平板应用程序开发中所需的所有控件,如市场上运行速度最快的grid 和chart、地图、RDL报表查看器、丰富的文本查看器及图表等等。同时,该控件还包含了一组独特的库,用于从WinRT应用程序中生成Excel、Word以及PDF格式的文件。此文将对其另外一个强大的控件——网格控件进行专门的测评详述。
网格控件功能
1、
- java 获取windows系统安装的证书或证书链
bewithme
windows
有时需要获取windows系统安装的证书或证书链,比如说你要通过证书来创建java的密钥库 。
有关证书链的解释可以查看此处 。
public static void main(String[] args) {
SunMSCAPI providerMSCAPI = new SunMSCAPI();
S
- NoSQL数据库之Redis数据库管理(set类型和zset类型)
bijian1013
redis数据库NoSQL
4.sets类型
Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是O(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。
sadd:向名称为key的set中添加元
- 异常捕获何时用Exception,何时用Throwable
bingyingao
用Exception的情况
try {
//可能发生空指针、数组溢出等异常
} catch (Exception e) {
 
- 【Kafka四】Kakfa伪分布式安装
bit1129
kafka
在http://bit1129.iteye.com/blog/2174791一文中,实现了单Kafka服务器的安装,在Kafka中,每个Kafka服务器称为一个broker。本文简单介绍下,在单机环境下Kafka的伪分布式安装和测试验证 1. 安装步骤
Kafka伪分布式安装的思路跟Zookeeper的伪分布式安装思路完全一样,不过比Zookeeper稍微简单些(不
- Project Euler
bookjovi
haskell
Project Euler是个数学问题求解网站,网站设计的很有意思,有很多problem,在未提交正确答案前不能查看problem的overview,也不能查看关于problem的discussion thread,只能看到现在problem已经被多少人解决了,人数越多往往代表问题越容易。
看看problem 1吧:
Add all the natural num
- Java-Collections Framework学习与总结-ArrayDeque
BrokenDreams
Collections
表、栈和队列是三种基本的数据结构,前面总结的ArrayList和LinkedList可以作为任意一种数据结构来使用,当然由于实现方式的不同,操作的效率也会不同。
这篇要看一下java.util.ArrayDeque。从命名上看
- 读《研磨设计模式》-代码笔记-装饰模式-Decorator
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.Fi
- Maven学习(一)
chenyu19891124
Maven私服
学习一门技术和工具总得花费一段时间,5月底6月初自己学习了一些工具,maven+Hudson+nexus的搭建,对于maven以前只是听说,顺便再自己的电脑上搭建了一个maven环境,但是完全不了解maven这一强大的构建工具,还有ant也是一个构建工具,但ant就没有maven那么的简单方便,其实简单点说maven是一个运用命令行就能完成构建,测试,打包,发布一系列功
- [原创]JWFD工作流引擎设计----节点匹配搜索算法(用于初步解决条件异步汇聚问题) 补充
comsci
算法工作PHP搜索引擎嵌入式
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况(http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支
- Linux中用shell获取昨天、明天或多天前的日期
daizj
linuxshell上几年昨天获取上几个月
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
#
- 我所理解的云计算
dongwei_6688
云计算
在刚开始接触到一个概念时,人们往往都会去探寻这个概念的含义,以达到对其有一个感性的认知,在Wikipedia上关于“云计算”是这么定义的,它说:
Cloud computing is a phrase used to describe a variety of computing co
- YII CMenu配置
dcj3sjt126com
yii
Adding id and class names to CMenu
We use the id and htmlOptions to accomplish this. Watch.
//in your view
$this->widget('zii.widgets.CMenu', array(
'id'=>'myMenu',
'items'=>$this-&g
- 设计模式之静态代理与动态代理
come_for_dream
设计模式
静态代理与动态代理
代理模式是java开发中用到的相对比较多的设计模式,其中的思想就是主业务和相关业务分离。所谓的代理设计就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。比如我们在进行删除操作的时候需要检验一下用户是否登陆,我们可以删除看成主业务,而把检验用户是否登陆看成其相关业务
- 【转】理解Javascript 系列
gcc2ge
JavaScript
理解Javascript_13_执行模型详解
摘要: 在《理解Javascript_12_执行模型浅析》一文中,我们初步的了解了执行上下文与作用域的概念,那么这一篇将深入分析执行上下文的构建过程,了解执行上下文、函数对象、作用域三者之间的关系。函数执行环境简单的代码:当调用say方法时,第一步是创建其执行环境,在创建执行环境的过程中,会按照定义的先后顺序完成一系列操作:1.首先会创建一个
- Subsets II
hcx2013
set
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not conta
- Spring4.1新特性——Spring缓存框架增强
jinnianshilongnian
spring4
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- shell嵌套expect执行命令
liyonghui160com
一直都想把expect的操作写到bash脚本里,这样就不用我再写两个脚本来执行了,搞了一下午终于有点小成就,给大家看看吧.
系统:centos 5.x
1.先安装expect
yum -y install expect
2.脚本内容:
cat auto_svn.sh
#!/bin/bash
- Linux实用命令整理
pda158
linux
0. 基本命令 linux 基本命令整理
1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar.gz #把a.tar.gz解压成a
2. vim小结 2.1 vim替换 :m,ns/word_1/word_2/gc  
- 独立开发人员通向成功的29个小贴士
shoothao
独立开发
概述:本文收集了关于独立开发人员通向成功需要注意的一些东西,对于具体的每个贴士的注解有兴趣的朋友可以查看下面标注的原文地址。
明白你从事独立开发的原因和目的。
保持坚持制定计划的好习惯。
万事开头难,第一份订单是关键。
培养多元化业务技能。
提供卓越的服务和品质。
谨小慎微。
营销是必备技能。
学会组织,有条理的工作才是最有效率的。
“独立
- JAVA中堆栈和内存分配原理
uule
java
1、栈、堆
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放字符串常量和基本类型常量(public static f