- 【HarmonyOS NEXT】实现电话拨打功能
奔跑的露西
鸿蒙HarmonyOSharmonyos
一、背景在现代移动应用中,直接拨打电话是一个常见且重要的功能。无论是电商应用的客服热线、社交应用的联系人拨打,还是企业应用的快速联系功能,都需要便捷的电话拨打能力。二、实现思路API调用:使用@ohos.telephony.call模块的makeCall方法三、具体实现importcallfrom'@ohos.telephony.call';import{BusinessError}from'@k
- 探索PyRDP:远程桌面协议的瑞士军刀
彭宏彬
探索PyRDP:远程桌面协议的瑞士军刀pyrdpRDPmonster-in-the-middle(mitm)andlibraryforPythonwiththeabilitytowatchconnectionsliveorafterthefact项目地址:https://gitcode.com/gh_mirrors/py/pyrdp在网络安全领域,攻防两端的对决不断推动着工具的创新。今天,让我们聚
- Python采集淘宝商品评论API接口概述,json格式数据参考
ID_18007905473
pythonAPIpythonjson前端
一、淘宝商品评论API接口概述淘宝开放平台提供了taobao.item.reviews.get接口,用于获取指定商品的评论数据。该接口支持分页查询、多条件筛选(如时间范围、评分等级)和自定义返回字段,适用于电商数据分析、竞品研究和用户行为洞察等场景。核心功能:分页获取评论:支持通过page_no和page_size参数控制返回数据的分页。多维度筛选:可按时间范围(start_date、end_da
- SQL Server 等待数据库引擎恢复句柄失败
y523648
数据库服务器运维
用管理员身份运行PowerShell,模拟扇区大小为4KbNew-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device"-Name"ForcedPhysicalSectorSizeInBytes"-PropertyTypeMultiString-Force-Value"*4095"验
- 模板函数使用is_same的注意事项
Ethan Wilson
C++c++
在模板函数中使用is_same判断类型的话,编译器会实例化所有路径,即使某些路径在运行时不会被执行。这意味着编译器会检查所有的分支,确保它们都是有效的。例如如果存在从string转为int的路径,即便T为string时不会进入该路径,依旧会编译失败。templatevoidf(){if(is_same::value){Ta=1;}else{Ts="23";//errorC2440:“初始化”:无法
- nlp遇到的问题
1.AttributeError:'CodeGenTokenizer'objecthasnoattribute'encoder'pipinstalltransformers==4.33.22.ImportError:Using`low_cpu_mem_usage=True`ora`device_map`requiresAccelerate:`pipinstallaccelerate`pipinst
- 创建线程的常见方式
HansenPole825
java开发语言
一、继承Thread类继承Thread类重写run()方法。publicclassmyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("线程启动了");}publicstaticvoidmain(String[]args){myThreadmyThread=newmyThread();myThread.start();
- QFramework v1.0 Guide: 工具篇2——UIKit,AudioKit,FluentAPI,SingletonKit,FSMKit,PoolKit,TableKit
WX呦
unity游戏引擎c#QFramework
目录一、UIKit界面管理&快速开发解决方案1、用法(1)界面创建与层级管理(2)代码生成与组件绑定(3)打开与关闭界面(4)自定义界面加载方式2、应用场景3、示例代码二、AudioKit音频管理解决方案1、属性2、用法(1)播放音频(2)音频设置(3)音量调整(4)自定义音频加载3、应用场景4、案例(1)播放背景音乐(2)播放音效(3)播放人声三、FluentAPI链式API介绍1、属性2、用法
- Parse error: syntax error, unexpected end of file in
jaray
PHP
Parseerror:syntaxerror,unexpectedendoffilein上面的这个错误提示是因为在写的代码中哪个大括号没有闭合!当死活也找不出问题所在的时候,就用那超级妙用的注释吧,一段一段的找,不行就一行一行的找。
- MaxRetryError: HTTPConnectionPool(host=‘127.0.0.1‘, port=51379): Max retries exceeded with url: /ses
卢卡平头哥
Pythonpython
1.…暗示调用self.driver.close()方法失败引发MaxRetryError。2.有几件事:首先,根据讨论max-retries-exceeded异常令人困惑,回溯有些误导请求包装异常以方便用户。原始异常是显示消息的一部分请求永远不会重试(它为urllib3的HTTPConnectionPool设置retries=0)因此如果没有MaxRetryError和HTTPConnectio
- PHP错误:Parse error: syntax error
Wss0130
PHP学习
今天在写PHP程序的时候总是出现这样的错误:Parseerror:syntaxerror,unexpectedendoffilein*.phponline*,然后我就根据提示,找到那个文件,然后错误中总是提示最后一行出错,我找到最后一行发现是,晕的,这能有什么错误,找了好久才找到问题所在,拿来分享。出现这个错误的原因就是语法错误,肯定是PHP程序的书写不规范造成,我后来一条一条看才发现,原来是PH
- 错误处理
Bainily
问题一1.Parseerror:syntaxerror,unexpectedendoffileinE:\phpstudy\phpStudy\WWW\wish\view\index.htmlonline63**解析错误:语法错误,第63行的E:\phpstudy\phpStudy\WWW\wish\view\index.html中的文件意外结束问题原因:是因为在html文件中用PHP语法是php语法
- 战神授权后台报错:Parse error: syntax error, unexpected end of file in解决办法
qq_502428990
运维传奇手游架设
问题现象分析当您在战神授权后台遇到"Parseerror:syntaxerror,unexpectedendoffile"这个错误时,说明PHP解析器在解析脚本文件时遇到了意外结束的情况。这种错误通常发生在PHP代码结构不完整时,比如缺少闭合的大括号、分号或者PHP结束标记不完整等。错误原因深度解析这个特定错误的核心原因是PHP的short_open_tag配置问题。PHP支持两种形式的开始标记:
- 鸿蒙应用开发 自定义组件属性访问限定符
yj235532
鸿蒙harmonyos鸿蒙开发移动开发harmonyos鸿蒙鸿蒙开发UI组件化
在鸿蒙Next开发中,ArkTS对自定义组件的成员变量使用的访问限定符private/public/protected有特定的校验规则,当不按规范使用时会产生相应的日志信息。一、使用限制概述(一)private修饰相关限制1.对于@State/@Prop/@Provide/@BuilderParam/常规成员变量(不涉及更新的普通变量),使用private修饰时,在自定义组件构造时不允许进行赋值传
- jmeter中变量的作用范围_Jmeter 的变量类型和作用域
weixin_39789525
jmeter中变量的作用范围
Jmeter的有多种变量类型,有其各自的作用域。有时候不小心就会使它们之间相互冲突或者覆盖,本文梳理各种类型变量的生成方法、使用特点、作用范围。目录变量类型Jmeter中的变量分别有以下几种:UserDefinedVariablesUserParameters属性Properties运行中创建的变量我们分开单独研究各自的特点。UserDefinedVariables(UDV)UserDefined
- Qt界面编程(五)
明阿明
qtlinux
一、Qt的网络通信使用网络通信模块前,要在.pro文件中添加network模块。QUdpScoket类是Qt对UDP协议的封装:1、创建QUdpSocket对象2、绑定IP的端口号3、发送数据:qint64writeDatagram(constchar*data,qint64len,constQHostAddress&host,quint16port);data:待发送数据的首地址len:待发送数
- C++法则15:匹配失败并不是一种错误(Substitution Failure Is Not An Error)。
C++法则15:匹配失败并不是一种错误(SubstitutionFailureIsNotAnError)。应用例子:SFINAE:关于is_class,is_base_of,C++编译器的魔法器,如何实现,is_class,is_base_of。_c++isclass-CSDN博客C++SFINAE(SubstitutionFailureIsNotAnError)SFINAE是C++模板元编程中的
- webdriver常用方法+鼠标键盘事件+浏览器高级操作
要站在顶端
UI自动化selenium
文章目录webdriver操作元素、获取元素常用方法浏览器控制浏览器cookies鼠标事件键盘事件**常用方法**上传文件内嵌网页iframe切换浏览器标签页切换页面滚动截图警告框处理下拉框处理webdriver操作元素、获取元素常用方法常用方法clear():清除文本。send_keys(value):模拟按键输入(被操作元素需要是个文本输入框)。click():单击元素。其他方法#size:返
- nt!MiFlushSectionInternal函数分析从nt!IoSynchronousPageWrite函数到Ntfs!NtfsFsdWrite函数
sitelist
nt4源代码分析MiFlushSectionNtfsFsdWrite
第一部分:while(TRUE){KeClearEvent(&IoEvent);Status=IoSynchronousPageWrite(FilePointer,Mdl,(PLARGE_INTEGER)&StartingOffset,&IoEvent,IoStatus);1:kd>pnt!MiFlushSectionInternal+0x6f6:80a72410e8c74bfbffcallnt!
- CentOS网络配置与管理完全指南
Sally璐璐
运维运维centos
1.网络状态查看与诊断1.1ifconfig命令(传统方式)#安装net-tools(CentOS7/8默认可能未安装)sudoyuminstallnet-tools-y#基础查看命令ifconfig#显示所有接口的IP、MAC、收发包统计等完整信息ifconfigeth0#查看eth0网卡的详细状态,包括:#-RX/TXpackets:收发包数量#-errors/dropped:错误和丢包统计#
- 服务网格和 Istio 简介
蹇之途
容器化微服务istiokubernetes服务网格微服务servicemesh
文章目录一、什么是服务网格ServiceMesh1.1主要概念1.1.1、容器组织框架(Containerorchestratiobframework)1.1.2、Service与Service实例(ServiceInstance)1.1.3、Sidecar代理(SidecarProxy)1.1.4、服务发现(Servicediscovery)1.1.5、负载均衡(Loadbalancing)1.
- 基于级联深度学习算法在双参数MRI中检测前列腺病变的评估| 文献速递-AI辅助的放射影像疾病诊断
有Li
人工智能深度学习算法
Title题目EvaluationofaCascadedDeepLearning–basedAlgorithmforProstateLesionDetectionatBiparametricMRI基于级联深度学习算法在双参数MRI中检测前列腺病变的评估Background背景MultiparametricMRI(mpMRI)improvesprostatecancer(PCa)detectionc
- memory_info:Flutter 插件助力鸿蒙生态,精准获取设备内存信息
harmonyos
memory_info:Flutter插件助力鸿蒙生态,精准获取设备内存信息帮助您获取设备内存信息(ram&rom)本项目作者:王阳科/坚果您可以使用这个Flutter插件来更改应用程序图标上的角标作者仓库:https://github.com/MrOlolo/memory_info/tree/master/memory_info在数字化浪潮的推动下,跨平台开发框架如Flutter凭借其高效、便捷
- OpenAI-Compatible Edge-TTS API 使用教程
马琥承
OpenAI-CompatibleEdge-TTSAPI使用教程openai-edge-ttsFree,high-qualitytext-to-speechAPIendpointtoreplaceOpenAI,Azure,orElevenLabs项目地址:https://gitcode.com/gh_mirrors/op/openai-edge-tts1.项目介绍本项目提供了一个本地化的、与Ope
- 开源项目安装与配置指南:OpenAI-Compatible Edge-TTS API
霍虹情Victorious
开源项目安装与配置指南:OpenAI-CompatibleEdge-TTSAPIopenai-edge-ttsFree,high-qualitytext-to-speechAPIendpointtoreplaceOpenAI,Azure,orElevenLabs项目地址:https://gitcode.com/gh_mirrors/op/openai-edge-tts1.项目基础介绍OpenAI-
- IDEA:程序编译报错:java: Compilation failed: internal java compiler error
天黑请闭眼
intellij-ideaJava异常处理intellij-ideajava
目录简介异常信息排查原因解决简介代码无法编译、无法打包异常信息java:Compilationfailed:internaljavacompilererror排查1、代码近期没有改动过,原先是可以正常编译的2、查看程序JDK,是JDK1.8没错,与原先JDK一致3、出现无法编译的情况是在升级IDEA版本之后4、使用IDEA-2024版本无法编译5、使用IDEA-2019、IDEA-2022版本可正
- 9-STM32的ADC采样和DAM配置
水果里面有苹果
嵌入式软件stm32单片机嵌入式硬件
STM32的ADC采样和DAM配置Adc_Init();//ADC初始化My_DMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)&ADC1_Value,ADC_CHANNEL_NUM*ADC_C_VAL_TIMES);//配置DMA通道DMA_Cmd(DMA1_Channel1,ENABLE);//启动DMA通道ADC_SoftwareStartConvCm
- STM32F407 步进电机梯形加减速
smallerlang
STM32电机stm32单片机arm
/*USERCODEBEGINHeader*//*********************************************************************************@file:main.c*@brief:Mainprogrambody************************************************************
- 基于 Kintex UltraScale 系列 2 路 QSFP+40G 光纤 PCIe 数据传输卡 / 光纤适配器(5GByte/s 带宽KU060光纤 PCIe 数据传输卡)
F_white
数据中心视频与图像采集处理机器视觉
PCIE732是一款基于PCIE总线架构的高性能数据传输卡,板卡具有1个PCIex8主机接口、2个QSFP+40G光纤接口,可以实现2路QSFP+40G光纤的数据实时采集、传输。板卡采用Xilinx的高性能KintexUltraScale系列FPGA作为实时处理器,板载2组独立的72位DDR4SDRAM大容量缓存。板卡具有1个RJ45千兆以太网口以及若干IO信号。一般应用于基于服务器的雷
- next-hexagonal-starter:前端六边形架构的简约实践
翟珊兰
next-hexagonal-starter:前端六边形架构的简约实践next-hexagonal-starter项目地址:https://gitcode.com/gh_mirrors/ne/next-hexagonal-starter项目介绍在软件开发中,六边形架构(HexagonalArchitecture)是一种设计模式,它通过将应用程序的业务逻辑与外部关注点(如UI、数据库、框架等)解耦,
- 解读Servlet原理篇二---GenericServlet与HttpServlet
周凡杨
javaHttpServlet源理GenericService源码
在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte
- MySQL性能优化
bijian1013
数据库mysql
性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:
a.优化查询
b.优化数据库结构
- ThreadPool定时重试
dai_lm
javaThreadPoolthreadtimertimertask
项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。
由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。
为了解决不定间隔的重试,选择Timer和TimerTask来完成
package threadpool;
public class ThreadPoolTest {
- Oracle 查看数据库的连接情况
周凡杨
sqloracle 连接
首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。
select * from dict where table_name like '%SESSION%';
就可以查出一些表,然后根据这些表就可以获得会话信息
select sid,serial#,status,username,schemaname,osuser,terminal,ma
- 类的继承
朱辉辉33
java
类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends
格式:public class 类名(子类)extends 类名(父类){ }
子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和
protected属性,但要使用private属性仍需通过调用。
子类的方法可以重写,但必须和父类的返回值类
- android 悬浮窗特效
肆无忌惮_
android
最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在styl
- hadoop伪分布式搭建
林鹤霄
hadoop
要修改4个文件 1: vim hadoop-env.sh 第九行 2: vim core-site.xml <configuration> &n
- gdb调试命令
aigo
gdb
原文:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令简介
r run 运行.程序还没有运行前使用 c cuntinue 
- Socket编程的HelloWorld实例
alleni123
socket
public class Client
{
public static void main(String[] args)
{
Client c=new Client();
c.receiveMessage();
}
public void receiveMessage(){
Socket s=null;
BufferedRea
- 线程同步和异步
百合不是茶
线程同步异步
多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法
多线程和异步:多线程可以做不同的事情,涉及到线程通知
&
- JSP中文乱码分析
bijian1013
javajsp中文乱码
在JSP的开发过程中,经常出现中文乱码的问题。
首先了解一下Java中文问题的由来:
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,
- js实现页面跳转重定向的几种方式
bijian1013
JavaScript重定向
js实现页面跳转重定向有如下几种方式:
一.window.location.href
<script language="javascript"type="text/javascript">
window.location.href="http://www.baidu.c
- 【Struts2三】Struts2 Action转发类型
bit1129
struts2
在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configurat
- 【HBase十一】Java API操作HBase
bit1129
hbase
Admin类的主要方法注释:
1. 创建表
/**
* Creates a new table. Synchronous operation.
*
* @param desc table descriptor for table
* @throws IllegalArgumentException if the table name is res
- nginx gzip
ronin47
nginx gzip
Nginx GZip 压缩
Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule
常用配置片段如下:
gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q
- java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交
bylijinnan
java
public class LinkListTest {
/**
* we deal with two main missions:
*
* A.
* 1.we create two joined-List(both have no loop)
* 2.whether list1 and list2 join
* 3.print the join
- Spring源码学习-JdbcTemplate batchUpdate批量操作
bylijinnan
javaspring
Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装
JDBC的batch操作:
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
- [JWFD开源工作流]大规模拓扑矩阵存储结构最新进展
comsci
工作流
生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........
竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....
- base64编码和url编码
cuityang
base64url
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
- web应用集群Session保持
dalan_123
session
关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
dcj3sjt126com
数据库
public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCo
- solr StatsComponent(聚合统计)
eksliang
solr聚合查询solr stats
StatsComponent
转载请出自出处:http://eksliang.iteye.com/blog/2169134
http://eksliang.iteye.com/ 一、概述
Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能
二、参数
- 百度一道面试题
greemranqq
位运算百度面试寻找奇数算法bitmap 算法
那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字.
我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。
还有人觉得应该用算法xxx,我是没想到用啥算法好...!
还有觉得应该先排序...
还有觉
- Spring之在开发中使用SpringJDBC
ihuning
spring
在实际开发中使用SpringJDBC有两种方式:
1. 在Dao中添加属性JdbcTemplate并用Spring注入;
JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度
- JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节
justjavac
json
2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&
- 网站项目建设流程概述
macroli
工作
一.概念
网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析
项目立项
我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。
客户的需求说明书
第一步是需
- AngularJs 三目运算 表达式判断
qiaolevip
每天进步一点点学习永无止境众观千象AngularJS
事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。
var b = "{{",
a = "}}";
this.startSymbol = function(a) {
- Spark算子:统计RDD分区中的元素及数量
superlxw1234
sparkspark算子Spark RDD分区元素
关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。
可以利用RDD的mapPartitionsWithInd
- Spring 3.2.x将于2016年12月31日停止支持
wiselyman
Spring 3
Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。
请大家及时准备及时升级到Spring
- fis纯前端解决方案fis-pure
zccst
JavaScript
作者:zccst
FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。
1,fis-pure的安装
$ fis install -g fis-pure
$ pure -v
0.1.4
2,下载demo到本地
git clone https://github.com/hefangshi/f