日期: 2021 年 3 月 25 日

蓝桥杯算法之成绩分析

问题引入:
小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。
请计算这次考试的*高分、*低分和平均分。

输入格式:
输入的*行包含一个整数n,表示考试人数。
接下来n行,每行包含一个0至100的整数,表示一个学生的得分。

输出格式:
输出三行。
*行包含一个整数,表示*高分。
第二行包含一个整数,表示*低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分

样例输入:
7
80
92
56
74
88
99
10
样例输出:
99
10
71.29

解题思路:
首先当输入n个数字(代表成绩)的时候,那么就要求将这几个数字都提取到,此时可以使用List集合。(使用List集合的原因:因为List集合是有序可重复的集合,可重复指代当输入一个数字的时候,可以继续输入另一个相同的数,那么这和输入成绩的情况相似,因为输入成绩可能重复输入)。接着就可以将List集合排序,然后取到*个和*后一个数字代表*低和*高分了。

具体代码如下:
————————————————
%title插图%num

%title插图%num

python类方法的使用

python类方法的使用

分类专栏: python编程 文章标签: python类方法的使用 python中@classmethod使用 @classmethod使用 isinstance()函数判断对象类型 python判断对象类型
版权
python类方法的使用
一、python类方法的特性
二、测试示例
三、使用isinstance()函数判断对象类型
一、python类方法的特性
1、与静态方法一样,类方法可以通过类名调用类方法。
2、与静态方法一样,类成员方法无法访问对象实体变量,可以访问类的静态变量。
3、类方法需要传入代表本类的cls参数。
4、使用@classmethod定义类方法。

二、测试示例
class ClassFunc:
var1 = “string1” #类的静态变量

def __init__(self):
self.var2 = ‘string2’ # 实例变量,在类方法中无法访问

@classmethod
def class_func(cls):
print(str(cls)+” can visit var1:”+cls.var1)
print(str(cls)+” can’t visit var2″)
1
2
3
4
5
6
7
ClassFunc.class_func()

cFunc = ClassFunc() cFunc.class_func()

运行结果如下:%title插图%num

三、使用isinstance()函数判断对象类型
1、使用isinstance()函数可以检测给定的对象是否属于或者继承于某个类或者类型,如果是返回True,否则返回False。

2、测试示例:

class MyIsInstance:
def init(self):
pass

myInstance = MyIsInstance() print(isinstance(myInstance,MyIsInstance))

运行结果:%title插图%num

说明:如有错误,欢迎指正。。。

在阿里云防火墙屏蔽 mysql 端口(mysql 拒*一切外网 IP),为什么还是可以扫描出漏洞?

阿里云防火墙的配置规则是:
1.默认拒*一切连接,只开放 80,443,ssh (换高位端口号)
2.ssh 只允许阿里云局域网内另一台跳板机进行连接,公网是无法直连 ssh 的

我们的主营业务都是一些事.业单位的网站以及公众号,前些天合作方管信息安全的部门说我们的网站有漏洞,都集中在 mysql 和 ssh

我们的系统都是部署在阿里云的,难道阿里云的防火墙还能放行某种连接,让别人获得 mysql 和 ssh 版本信息?求网络安全的大佬解答。。。。

鉴于单.位.领.导必须要求修补漏洞,不然会影响他们的年度政~绩

目前解决办法:

1.对 mysql 打补丁 or 升级版本,因为那台主机配置高,承载的业务也很多,重度依赖 mysql,对其升级,可能会带来不可预料的事情发生

2.除了阿里云的防火墙,Centos 内的 iptable 也开启

3.开跳板机(上面的软件和系统*新),修改域名解析地址指向跳板机,而跳板机转发 http/https 流量到业务主机,让扫描者扫描跳板机

codehz 104 天前 via Android ❤️ 2
说明已经进入到内网渗透的步骤了
agdhole 2
agdhole 104 天前
也可能是网站程序被黑了?
jptx 3
jptx 104 天前
是不是他们把扫描程序放到你的服务器里了,可能是别人配合放的
ericwood067 4
ericwood067 104 天前
你的 mysql 既然要拒*一切外网 ip,直接监听 127.0.0.1 好了。有内网访问需要都话,在机器上也要启用自己都防火墙,只允许特定 ip 访问。
阿里云的防火墙没用过,不知道能不能阻止内网其他机器对你的攻击;你的客户请的测试团队可能通过阿里内网对你进行了攻击测试;所以不能完全依赖阿里的防火墙。
ice2016 5
ice2016 104 天前
这个漏扫设备就可以扫描到,
mysql 不是*新版的话,漏洞很多,
在就是 ssl 和 ssh 升级到*新版,还有各种配置。。
joyhub2140 6
joyhub2140 104 天前
@codehz
@ericwood067

1.漏洞报告书是市.网.信.办那边出具的,不知道他们那边有无特.权绕过防火墙做这个漏洞扫描。
2.阿里云每周都会发送安全报告邮件给我,或许,是上.层那边有权力直接从阿里云获取这部分安全报告?
longaiwp 7
longaiwp 104 天前
我记得每一台标准的阿里云服务器内部都有一个阿里云的安全进程,所以能扫描出漏洞不奇怪吧,应该说是一件很正常的事情。
est 8
est 104 天前
因为阿里云的漏洞扫描请求是 127.0.0.1 发起的。每个主机都跑着个远控进程。。。(黑方便!
joyhub2140 9
joyhub2140 104 天前
@est
@longaiwp 对!有个 aliyundun 的进程和 watchdog 进行
Xusually 10
Xusually 104 天前
阿里云有看门狗在你主机里。
在里面扫描的,不是从外面。
wunonglin 104 天前
用阿里云的 mysql 呗,有漏洞就赖阿里云
AIFNI45Mdxn 12
AIFNI45Mdxn 104 天前
禁止外网只能防止被任意用户通过外网访问到,但是你本身业务是需要访问数据库,也会连接 mysql 。如果是网站本身有漏洞,从而会影响数据库的安全性,赶紧修复你自己网站的漏洞并可以搭配使用安全防护产品哈哈哈哈

单个 Activity 控件过多,对手机影响大么?

单个 Activity 控件过多,对手机影响大么?
以小米 8 为例

现在有个 Activity 用于显示设备的某些信息,设备有好几项属性需要显示,所以我在一个 Activity 里面使用 ViewPager 来显示设备信息,用户左右滑动就能查看设备的信息。

但随着需求越来越多,导致 ViewPager 所在的 Activity 控件越来越多,比如*个页面时设备基本信息,大概有近 20 个信息,每个信息都至少需要一个 TextView 和 TextEdit,有些条目还要 Spinner,多个 RadioButton 等。这样 ViewPager 的一个页面就有 50 多个各种控件

第二个页面是设备连接其他设备的列表,大概 60 多个页面

第三个页面是设备的当前支持的一些协议信息,控件 100+。。。。

然后因为小公司,也没有架构师,所以导致需求不断增加,ViewPager 的页面不断增加,而 ViewPager 所在的 Activity 里的控件非常多,目前各种 TextView,TextEdit,Spinner,Radiobutton,Button 等已经超过 700 个了

我向问下以小米 8 为例,这样一个包含这么多控件的 Activity,对手机的硬件压力大吗?

• 2021-03-04 09:27:17 +08:00
SwiftFrank 1
SwiftFrank 24 天前
建议了解下 Android UI 的渲染相关知识,简单点讲效率跟你单个 Layout(XML)的嵌套层级有关系,推荐使用 ConstrainLayout,页面尽量解耦,方便维护和测试。另外建议看看 Jetpack Compose 的 Navigation 组件,应用单 Activity 的设计。
ssynhtn 2
ssynhtn 24 天前 via Android
太长的页面可以换成 recyclerview
QBugHunter 3
QBugHunter 24 天前
@ssynhtn
每个页面的显示设备某个方面的信息,每个页面之间的信息没有太多的关联以及共同点,用 recyclerview 这种滚动页面用户体验不太好
QBugHunter 4
QBugHunter 24 天前
@SwiftFrank
ViewPager 的每个页面嵌套非常简单,每个页面都是诺干行,每行一个都是 TextView+TextEdit/RadioButton/Spinner 等
QBugHunter 5
QBugHunter 24 天前
@SwiftFrank
每个页面布局文件就 2-3 层嵌套,就是控件的数目比较大。。。
coolesting 6
coolesting 24 天前 via Android
viewpager 里面放的是 fragment,每次翻页都 replace 掉,不会有太大的性能消耗。

如果你数据是一直加载却一直用 add 的方式来添加内容,那估计肯定消耗内存的。
KNOX 7
KNOX 24 天前 via Android
考虑下 ViewPager2? 因为是基于 RecyclerView 实现的,可以利用复用来减轻实时渲染压力,而且不应该只看一个设备。
NexTooo 8
NexTooo 24 天前
@QBugHunter #3 纯好奇,单个页面如果要全塞下几十个 View 显示信息的话,那字体应该不能大到哪儿去,这种情况下用户体验好么……
QBugHunter 9
QBugHunter 24 天前
@NexTooo
没有,比如设备状态,需要 TextView+2 个 RadioButton(开和关)+RadioGroup,总计 4 个控件
然后一个设备信息页面,有十几条这样的信息,一个屏幕可以显示 10 条+,用一个 ScrollView 滚动*多半个屏幕就可以显示全部信息了,对于用户来说不算糟糕,但这样一个页面十几条信息,每条 3-5 个控件,总计就 40+了

一个页面向下滚动*长的都没有超过 1 个屏幕,但那个页面控件 100+。。。

然后这个 ViewPager 有 6 个 view,现在还要加。。。。。

因为设计一改再改,所以 ViewPager 所在的 Activity 的控件数量就非常多了(加上刚提的需求,可能会超过 800 )
mcluyu 10
mcluyu 24 天前
不是 Android 开发,有类似性能调试工具的直接看下渲染,滑动时性能消耗什么样?总的来说你这些东西看起来都不如随便拉出个游戏消耗的 1/10 多。。

Arthur5 11
Arthur5 24 天前
@QBugHunter 一屏就 40 个控件还好吧。不显示的控件又不会绘制到屏幕上,上下滑动的页面用 RecyclerView 复用,左右滑动的 ViewPager 默认只保留当前和左一右一的 3 个页面。
StrorageBox 12
StrorageBox 24 天前
看你怎么写的了,如果 google 建议写法,正确添加的 fragment,没有任何问题。
不过看你所说“一个页面向下滚动*长的都没有超过 1 个屏幕,但那个页面控件 100+。。”,就知道不容乐观了,会有问题的,建议先学习一下 Android 绘制相关知识还有 viewpager1 的机制及 Android 界面的内存使用这三方面知识,然后再着手进行优化。
QBugHunter 13
QBugHunter 24 天前
@Arthur5
一个页面 40-100 个控件,然后这个 ViewPage 目前 6 个页面,现在还要再加 3 个。。。。
NexTooo 14
NexTooo 23 天前
@QBugHunter 我是觉得你可能需要先确定目前的绘制性能消耗如何,有必要了再优化吧,比如*限开到 9 个界面之后的情况。因为感觉如你这么说,要么不动,动起来是个蛮大的工程了。但我感觉若是基本的绘制优化做到位,应该不会有太大的问题,毕竟都是很简单的 View 而不是一些带复杂动画、大内存控件。
你可以看看绘制层级、View 嵌套层级这两块的优化模式,以及 ViewPager1 的机制进一步优化 Fragment 的回收与重建。细节的话我不清楚具体的情况就想不到别的,能想到的就是多个格式不同的文本可以通过富文本拼接的方式合并成一个 TextView
lwlizhe 15
lwlizhe 23 天前
我感觉控件数量跟渲染没啥关系吧

如果卡的话应该是控件本身的问题,或者层级结构什么的,或者说一个控件里面有个 xml 需要解析这种,总之应该是 xml 的锅;
要是直接 textView 那帮没啥 xml 内容的东西应该不影响渲染吧;无非就是 canvas 本身的操作,这块应该没啥问题吧;

我觉的现在你们这更大的问题反而是维护成本问题……假如来个人接手代码,会不会看一眼直接爆炸~
QBugHunter 16
QBugHunter 23 天前
@lwlizhe
这是我接手别人的代码。。。。。
QBugHunter 17
QBugHunter 23 天前
@lwlizhe
想换成碎片,但项目太赶了,我还有别的事情要处理,实在没时间把这个 ViewPager 里的 View 全部换成碎片了,所以只能暂时再加几个 View
pekki 18
pekki 23 天前
屏幕总共就那点大,怎么可能放下几十个控件,详细了解一下 android 屏幕绘制的机制,只不过是不断的重复绘制罢了,性能上影响不大,你看视频每秒都在重绘几十次也不卡啊。
lwlizhe 19
lwlizhe 23 天前
@QBugHunter 略表同情……感觉除了这块,还有其他地方的坑在等着你……这应该是个大坑项目~
hongch 20
hongch 21 天前
如果几十个控件 tv 、et 都会影响到性能的话,你让那些做游戏的怎么办?

C调用python类的正确方法

C或C++调用python一般都可以使用python自带的库完成,首先添加python.h的头文件,链接时加上对应的库即可。

但是在C/C++程序中使用到python的类时会遇到很多坑,网上搜会得到很多相似的方法如下所示

首先声明,以下的方法是有问题的,有问题的地方我会使用红字标出

注: 下述所有导入方法在导入失败时不会报错, 只会返回空指针.

*步是导入.py文件:

使用PyObject* pModule来存储导入的.py文件模块, 调用的方法是PyImport_ImportModule(path):  PyObject* pModule = PyImport_ImportModule(“testpy”); 
使用PyObject* pDict来存储导入模块中的方法字典, 调用的方法是PyModule_GetDict(module):  PyObject* pDict = PyModule_GetDict(pModule); 
这样就完成了.py文件的导入.

第二步是导入已导入模块中的方法或类:

获取方法, 调用的方法是PyDict_GetItemString(dict, methodName): PyObject* pFunHi = PyDict_GetItemString(pDict, “sayhi”); 
获取类, 调用的方法同上, 注意红体部分的字符串对应于.py文件中的类/方法名:  PyObject* pClassSecond = PyDict_GetItemString(pDict,”Second”); 
第三步是使用导入的方法或类:

使用方法, 调用PyObject_CallFunction(pFunc, “s”, args)即可:  PyObject_CallFunction(pFunHi, “s”, “lhb”); 
使用类构造对象, 调用PyInstance_New(pClass, NULL, NULL)即可:  PyObject* pInstanceSecond = PyInstance_New(pClassSecond, NULL, NULL); , 注意其中的pClassSecond为第二步.2中获取的类指针
使用类对象的方法, 调用PyObject_CallMethod(pInstance, methodname, “O”, args)即可:  PyObject_CallMethod(pInstanceSecond,”invoke”, “O”, pInstancePerson); 
上述调用中的”s”和”O”代表的是参数列表的类型, 我们可以在 Py_BuildValue 找到所有的类型, 本文*后也附了此表.
PyInstance_New是python2使用的函数,python3则使用新的函数PyInstanceMethod_New,国内很多文章都认为这两个函数返回的是类的实例对象,其实不然,它们返回的是该类的构造函数对象。

按照上面文章的步骤做在不涉及修改类的成员变量时是没有问题的,如果有python类

class Test:
def __init__(self):
self.i = 1
print(“init!”)

def modify(self):
self.i+=1

def do(self):
print(self.i)
如果使用上面的方法使用这个类,调用do方法是不会有问题的,可以成功打印,但是如果调用modify则会报错,PyErr_Print打印错误信息则会提示i不存在。

并且在PyInstance_New或PyInstanceMethod_New时并不会打印init!,说明构造函数根本没有被调用。

正确的调用方式则应该是

PyObject* pConstruct = PyInstanceMethod_New(pClass);
PyObject* pIns = PyObject_CallObject(pConstruct,nullptr);
PyObject_CallMethod(pIns,”modify”, nullptr); 
PyObject_CallMethod(pIns,”do”, nullptr); 
使用PyInstanceMethod_New获得构造函数后才能构造对象,并且调用时不需要传递自身。

Hadoop分布式和伪分布式下NameNode和DataNode的分布

今天布置了有关hadoop分布式与伪分布式的作业,经过资料的查询,了解了很多概念,以下为整理的相关信息。

概念的理解:
(1)分布式
利用分而治之的思想:
随着数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统(HDFS)。

(2)伪分布式
Hadoop的伪分布式:
伪分布式就是假分布式,假就假在只有一台机器而不是多台机器来完成一个任务,但是模拟了分布式的这个过程,所以伪分布式下Hadoop也就是虽然在一个机器上配置了hadoop的所有节点,但伪分布式完成了所有分布式所必须的事件。伪分布式Hadoop和单机版*大区别就在于需要配置HDFS。

Hadoop伪分布式模式是指在一台机器上同时启动NameNode,DataNode, JobTracker, TaskTracker等进程(一般都是1个),并没有真正分布到集群内的不同机器上,所以这种模式叫伪分布式模式。

NameNode的组成:
Namenode整个内存结构大致可以分成四大部分:Namespace、BlockManger、NerworkTopology及其他;Namespace是维护整个文件系统的目录树结构及目录树上的状态变化;BlockManger维护整个文件系统中与数据块相关的信息及数据块的状态变化;NetworkTopology维护机架拓扑及Datanode信息,机架感知的基础;其他部分包括用以实现读写互斥同步的LeaseManger、支持集中式缓存管理的CacheManager、用于数据备份,回滚的SnapshotManager、管理HDFS安全访问的DelegationTokenSecretManager等。

如图:即为NameNode的有关组成部分:
————————————————
%title插图%num

NameNode的介绍:
(1)是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
(2)文件包括:
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存*近一次checkpoint的时间
(3)以上这些文件是保存在linux的文件系统中。

(4)、NameNode是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成事件,副本数,文件权限),以及每个文件的块列表和块所在的DataNode信息等等。

(5)、Namenode是一个中心服务器,单一节点,负责管理文件系统的名字空间,以及客户端对文件的访问。文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈。副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时候NameNode尽量让用户先读取*近的副本,降低带块消耗和读取延时。NameNode全权管理数据块的复制。它周期性的从集群中每个DataNode接受心跳信号和块状态报告(Blocreport)。接受到心跳信号意味着该DataNode节点正常工作。块状态报告包含一个该DataNode上所有数据块的列表。
NameNode工作特点:
(1)Namenode始终在内存中保存metedata,用于处理“读请求”
(2)到有“写请求”到来时,namenode会首先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回
(3)Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。Secondary namenode就是用来合并fsimage和edits文件来更新NameNode的metedata的。

DataNode的介绍:
DataNode是以块的形式存储数据,默认为128M。

(1)提供真实文件数据的存储服务。
(2)文件块(block):*基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
dfs.block.size
(3)不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
(4)Replication。多复本。默认是三个。hdfs-site.xml的dfs.replication属性。

(5)、DataNode在本地文件系统存储文件块数据,以及块数据的校验和。

(6)、DataNode,一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。DataNode启动后NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或者删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。集群运行中可以安全加入和退出一些机器。

以下为我的一些整理:
一、Hadoop分布式下Namenode和Datanode的分布
Namenode整个内存结构大致可以分成四大部分:Namespace、BlockManger、NerworkTopology及其他;Namespace是维护整个文件系统的目录树结构及目录树上的状态变化;BlockManger维护整个文件系统中与数据块相关的信息及数据块的状态变化;NetworkTopology维护机架拓扑及Datanode信息,机架感知的基础;其他部分包括用以实现读写互斥同步的LeaseManger、支持集中式缓存管理的CacheManager、用于数据备份,回滚的SnapshotManager、管理HDFS安全访问的DelegationTokenSecretManager等;Namenode常驻内存,主要被Namespase和BlockManager使用,其他部分内存开销较小且相对固定。
Datanode以块的形式存储数据,一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,另一个是元数据(包括数据块的长度,块数据的校验和,时间戳);
Namenode周期性的从集群中的每个datanode接受心跳信号和块状态报告。而datanode会周期性的向namenode上报所有的块信息。
Namenode和Datanode以管理结点-工作结点模式运行,一个namenode结点和多个datanode结点,其中客户端(client)用户通过与namenode和datanode交互来访问整个文件系统,客户端提供了一些列的文件系统接口。
其中NameNode和secondary namemode、jobtracker运行在Master节点上,而DataNode和TaskTracker在Slave节点上。

二、Hadoop伪分布式下Namenode和Datanode的分布:
伪分布式就是一个机器既当namenode又当datanode;
Namenode、Datanode和JobTracker、TaskTracker等进程在一台机器上同时启动,并没有真正分布到集群内的不同机器上。
————————————————

android 开发只能用 gradle 吗?

个人总结 gradle 缺点:

1.api 未稳定,不同版本不兼容。
2.下载软件包用 hash 作目录,难以分辨,难以清理。不同版本的 gradle 竟然各自重复维护相同版本的软件包。
3.同样是从那三个仓库下软件包,为什么 gradle 就比 maven 慢这么多(来自 java 后端项目开发时的体验对比)?
4.出错提示太简陋,无法定位错误原因。
5.脚本编写没有约束,也就是太灵活,不利于协作。
6.耗内存,甚至超过 idea 占用的内存。这个是 gradle 特性决定的。为了节省构建时间,gradle 会在敲代码期间一直在后台对待构建内容进行缓存。所以能在构建时快于 maven (但我的实际体验感觉也没快多少)。maven 平时是不运行的。而且我不知道为啥 gradle 要另起个进程,而不是像 maven 那样内置在 idea 里通过 api 调用。难道是因为 gradle 是 groovy 写的所以没法内置到 idea 里?要知道两个 jvm 进程可不同于两个 native 进程,相当于跑在两个虚拟机里,需要两倍的虚拟层和运行时的资源开销。而如果把守护进程关掉,那么在构建时,gradle 会巨慢无比。

旧版只能用 groovy 写脚本也算个缺点,这个语言太灵活。本身 gradle 对脚本编写没有约束就很灵活了,这样一来一个构建脚本在项目复杂之后都很有可能变得难以阅读。

很久以前 idea 还能用 maven,不知道现在还能不能用?
%title插图%num
• 2021-03-03 20:41:36 +08:00
fatelight 1
fatelight 26 天前 ❤️ 1
gradle 慢是你的网络问题==
CrazyBoyFeng 2
CrazyBoyFeng 26 天前
@fatelight 第 3 条,同一个项目用 maven 和 gradle 对比得出的结论。没个参照对象怎么敢说慢呢?

另外,“网络不行”、“配置不行”这类吐槽其实挺无用的。我是觉得它不好用,又不是用不了必须换网加配置。说着轻巧,难道不要成本吗,而且能带来增益多少可难说。
lionseun 3
lionseun 26 天前 via Android
maven 扩展性不如 gradle,ps:关闭 gradle Damon 不是正常操作吗
winterbells 4
winterbells 26 天前 ❤️ 1
lz 是来找认同的,不是要你们解释反驳
CrazyBoyFeng 5
CrazyBoyFeng 26 天前 via Android
@winterbells 我是来找替代解决方案的。我不需要寻求认同。
HongJay 6
HongJay 26 天前
网络不行就是不行啊。。。只能说明你不懂啥叫谷歌
pursuer 7
pursuer 26 天前
github 上可以找到 android-maven-plugin,不过我没用过。
hantsy 8
hantsy 26 天前 ❤️ 3
Maven 也有第三方维护的 Plugin (不止一个)。

https://www.vogella.com/tutorials/AndroidBuildMaven/article.html

Google 可以比较喜欢自定义的,相对比较灵活,之前很多项目如 Gwt 等用的是 Ant,现在主要 Gradle 。

国内的 Gradle 体验比 Maven 真的差太多,特别 Gradle 配置的兼容性坑爹(一年一次的大版本升级,对前面版本没法兼容,而 Maven 3 现在还可以运行十几前的 Maven 2 程序),Puglin 的名称时常改动,很多一两年内的 Plugin,在新 Gradle 版本要么找不到,要么不能运行。

Gradle Wrapper 下载 Dist 和 Gradle 的 Plugin 不支持 Maven Repo 那样 Mirror 配置, 不能从 Maven Repo 更新这是*扯蛋,国内速度慢得要命。Gradle 特别依赖的 Jcenter 国内我这里是不能访问的,本身也是龟速,而且 Jcenter 马上要关闭了,到时又是一堆 Gradle 项目 Breaking 。

即使从 Maven Repos (不管远程还是本地)下载了依赖,Gradle 自己又建立一套本地依赖库,而且 Folder 名全部用 Sha 命名。

如果用 Gradlew 来 Build 项目,它会尝试下载一个 Dist 到个人目录下(如果不存在),几个版本下来,这样硬盘很多就被掉几十 G 。

Gradle 运行过程中,Gradle Damon 一直跑后台,太吃内存了。另外在个人目录,Gradle 为配合 Damon,生成堆积如山的 Cache 文件。

我很少用 Gradle,个人目录下 Gradle 乱七八糟的文件多达 40G 。这比 5 年来下载的 Maven Deps 还多一倍。如果我是日常用 Gradle,5 年下来估计 500G 硬盘都是不够用的。
CrazyBoyFeng 9
CrazyBoyFeng 26 天前 via Android
@pursuer @hantsy 感谢分享,我也搜到了这个 plugin,不过它似乎是弃坑状态,三年未更新。我现在正尝试在 idea 上运行它。
darktiny 10
darktiny 26 天前 ❤️ 1
愿意折腾,就 Buck 吧

hantsy 11
hantsy 26 天前
@CrazyBoyFeng https://github.com/simpligility/android-maven-plugin
https://groups.google.com/g/maven-android-developers/c/QzFg158CMww/m/Z3G3ZveHIKoJ
Team 12
Team 26 天前 ❤️ 2
在这个网站上讨论一些比较严肃的问题,要注意经常屏蔽

有很大一部分人的回答,每次就几个字儿*多不超过一句话

而且讨论的问题往往也不是什么严肃的问题

所以他们的回答出现在这里基本上就是没用的,甚至还有害
fatelight 13
fatelight 25 天前
@CrazyBoyFeng 我试过,完全清理本地缓存的话,maven 和 gradle 速度下载速度没啥差距。gradle 比 maven 墙的厉害,你不代理可能下载都能出错。所以我说慢,可能是你网络问题。自己抓包看看下载包的速度就知道了。或者项目配置 gradle 镜像源或者贵司自己有专门同步的库
fatelight 14
fatelight 25 天前
@Team 对有害,请 block 我,你的非常有用
zhanlanhuizhang 15
zhanlanhuizhang 25 天前 ❤️ 1
可以使用 maven
参考项目: https://github.com/zxing/zxing
还可以使用:bazel 。
CrazyBoyFeng 16
CrazyBoyFeng 25 天前
@darktiny 感谢分享。简单了解了一下 buck,挺好的东西,已经出现好几年了,我竟不知道。
我试用了一下 buck,是比 gradle 要快,内存消耗也不多,不会卡住 idea 。不过我只是测试一下首次全量构建,没有连续使用,不知道增量的效果怎么样。害怕 daemon 随着 repo 长大会不会像 gradle 那样反客为主。不过全量构建这么快,如果不是巨大的应用,感觉平常应该不开 daemon 也可以。
脚本格式是 python 语法,不过 buck 本身是 java 写的,运行在 jvm 上。python 语法简单易读,懂的人也多。
CrazyBoyFeng 17
CrazyBoyFeng 25 天前
@zhanlanhuizhang 感谢分享。阅读 pom.xml 得知,zxing 正是使用了楼上所说的 android-maven-plugin 。不过 zxing 也是三年没更新了,我都怀疑它是 eclipse 写的遗留代码,那个目录结构也像 eclipse 。eclipse 上现在没有官方 android 支持了,kotlin 支持也不好。用第三方插件怕踩坑。
bazel 感觉跟 buck 很像。而且 idea 插件还在更新。buck 的 idea 插件两年没动了。
elonmask 18
elonmask 25 天前 via Android
放弃安卓吧,搞 AI 去
GM 19
GM 25 天前 ❤️ 1
身处墙外,装了 10000000Mbps 宽带,用着 128G 内存+9900K+10T SSD 的开发机的某些人说:
我这没问题,你网络不好不要怪 gradle 不行!你机器烂不要怪 gradle 卡!你投资生产工具的钱都不愿意花,还做什么码农?

说完一转身,云淡风轻,不带走一丝云彩,深藏功与名。

留下台下那群拿着平均线工资、用着雇主给的垃圾开发机的码畜们一脸懵逼。
newee 20
newee 25 天前
实际上只是因为网络的问题,使用的时候会出现半天下不动的情况。在海外其实不会有这种情况,几十 M,1 分钟不要就下载完了。

所以在这种网络下能正常使用,也是开发的基本操作。

另外 gradle 还是有一定优势的,只是当前的应用场景没用到这些优势,体会不到。才会简单的把这个当成一个导包工具。其实还是有一些优点的,要是没啥优点,还不早就被淘汰了。

当然很多东西,有一些优劣,比如说火狐浏览器比 chrome 更占内存,android studio 比 vs code 更占内存。但是挡不住大势,大势是什么。现在可能用着 4 核 4 线程的电脑,16G 内存。但是总有一天要升级 10 核,64G 内存,是不是?

我刚做开发的时候,天天想着给哪些低端机做适配,想方设法去改善性能。然而几年之后低端机一样还是没有人用了。
a719031256 21
a719031256 25 天前
@fatelight 国内 gradle 下载都慢,我试过公司的专线网络也慢,家里的百兆光纤也慢,以前尝试过自己弄个安卓 app 来弄,结果卡在 gradle 上了,还有一个就是 gradle 的版本问题,好像小版本不同的 gradle 兼容性也有问题,我网上下的 app 源码原本想改改来用,结果就比源码版本高两个小版本号就报错,感觉 gradle 就是谷歌强推出来的,并不好用但强制你用
janus77 22
janus77 25 天前
1 日常开发不需要做兼容,你项目制定版本号就行了
2 同上,如果你的版本号不变动,自然在清理的时候也就不费力
3 网络问题,maven 一样很多人换 aliyun 镜像
4 新系统这方面确实欠缺,主要靠经验累积和自己搜索解决。开发久了就好了
5 java 写久了不灵活也是罪?脚本语言不灵活凭啥被用于脚本啊
6 占用大这个也是新系统一直以来的缺陷,我没法回答
fatelight 23
fatelight 25 天前
@a719031256 我都挂代理,走中转专线
coolesting 24
coolesting 25 天前 via Android
除了吃内存之外,没感觉不太好的地方。
否则也不会有 kill gradle 的插件出现。
Jirajine 25
Jirajine 25 天前 via Android
不要用 gradlew,构建脚本用 kts,基本还可以。
CrazyBoyFeng 26
CrazyBoyFeng 25 天前
我试了一下 bazel,目前感觉良好。idea 里的插件也好用。google 自己做的工具也不错啊,为什么不推广呢?
我会尝试用久一点再分享我的体验。
不过,需要用到第三方 gradle 插件的项目,目前还是只能使用(指定版本的) gradle 。
systemcall 27
systemcall 25 天前 via Android
感觉 gradle 确实很垃圾,可以和 keil 礦 ision 并列的那种
一个浪费硬盘而且占的是家目录、需要强大的梯子、电脑配置要求高,一个浪费生命还时不时崩溃
怀念以前拿 vb6.0 写程序的日子,那个时候就没这么多破事,用 vs 写安卓也没这么多破事,起码安装的时候会告诉你会吃掉多少磁盘空间、方便卸载掉
HangoX 28
HangoX 25 天前 ❤️ 1
楼主说的 5 个问题对于熟悉 gradle 的人都不是问题。第 6 个是楼主自己勾选了编辑即构建,idea 可以关闭,我重来不开那个。deamon 不是这样的意思,deamon 是下次构建的时候可以重新使用虚拟机和内存达到更快的目的,不喜欢关闭即可
楼主没有对比相同项目下 maven 和 gradle 的构建时间对比,gradle 是比 maven 快很多的,官方就有对比 https://gradle.org/gradle-vs-maven-performance/ ,毕竟那么多缓存摆在那里,想不快都难。磁盘占用问题,这个东西加磁盘就能加速的事情为什么不干
hantsy 29
hantsy 25 天前
@newee 海外当然不会有问题。 在国内你用 Gradlew 编译一下,下一个 Dist 几 K 到十几 K,而且经常断。项目依赖可以借 Maven Mirror 。这东西还有它的插件系统连 Mirror 都没有,必须从官方下载。

国内的 5G,如果在开发过程的检验也就是 2G 速度而已。
chenjiajia9411 30
chenjiajia9411 24 天前
不用 Gradle 完全可以啊,自己下好配好依赖之后用 build-tools 自己编译就行了。
Anonywp 31
Anonywp 23 天前
https://maven.aliyun.com/mvn/guide
yike47 32
yike47 23 天前
俺就没有感同身受了。公司配置 32G 运存+固态。自己的是 Mac 高配。 从来都是一把梭,秒开……….
imzcg2 33
imzcg2 22 天前
as 绑定 gradle,换个好电脑和代理就好了把
systemcall 34
systemcall 21 天前
你可以换成 Harmony Studio,之后等待自主研发的分布式 5G 可形式化验证的国产软件取代 gradle。

有性价比较高的云服务器推荐吗?

了解了阿里云的云服务器价格 2 核 8G+256G 存储空间+4M 独立网络年费要 6000+,是不是太贵了

如果我要搭建一个网盘+邮件服务怎么选?存储空间 256G 是不够的

lengyihan 1
lengyihan 107 天前 via Android
买国外,
outtime 2
outtime 107 天前 via iPhone
邮件服务还是建议直接用大厂提供的企业邮箱,现在主机基本禁发邮件。网盘去买国内服务器真不值得
SuperMild 3
SuperMild 107 天前
所谓云,*大的特点是弹性。你先选个*低档的用着,不够用了再升级,一点点升上去,这才是云的意义。
imgbed 4
imgbed 107 天前 via Android
家里闲置电脑搭建,宽带开外网
westoy 5
westoy 107 天前
三四线城市托管
opengps 6
opengps 107 天前
要用阿里云时候,建议带着商业目的,而不是自用,否则的话再低的价格你*终还是会觉得贵的
stranger75 7
stranger75 107 天前
如果是个人的话,可以用家人或者朋友的信息去注册一个新用户买活动配置,过几天双十二活动就出来了,活动配置还是很便宜的,差不多是你看的价格的一半
Flourite 8
Flourite 106 天前
@lengyihan 不现实,这是给公司搭的,虽然只有十几人
ThitBiu 9
ThitBiu 106 天前
腾讯云的 云服务器 标准型 S4 4 核 8 G 5 M (+150G 数据盘)新用户专享
找代理商打完折也才 980 首年,价格也还算美丽
aliyun9898 10
aliyun9898 105 天前
阿里的双 12 活动出来了 你可以去看一看 应该来说要便宜一些
11
whirl 105 天前
买一个特价机,或者收一个特价机器。
譬如我这有个 2 核 8G+100G 存储空间+5M 独立网络,还剩下不到 1 年。
但是价格只要 800 块不到。
自己再加个磁盘不香吗?
OnethingcamMike 12
OnethingcamMike 101 天前 via Android
亚马逊云,价格低服务好,,,
hkbtele 13
hkbtele 101 天前 via Android
国内的吗?
ThitBiu 14
ThitBiu 101 天前
国内的 腾讯云还不错,4 核 8 G 5 M 3 年才 1300 元;不过就是要新用户才行,个人也可以参加
remember5 15
remember5 93 天前
@ThitBiu 大佬有联系方式吗?我也想收一个
ThitBiu 16
ThitBiu 93 天前
@remember5 小绿:MTg4OTk3NzgxMDU=
beautwill 17
beautwill 92 天前
阿里云双 12 对也是很给力的
aHR0cHM6Ly93d3cuYWxpeXVuLmNvbS9taW5pc2l0ZS9nb29kcz91c2VyQ29kZT13YzZtcGR1YQ==

tensorflowlite iOS集成实战全记录

首先:tensorflow官网的访问需要fanqiang,请注意。

step1 (*快*基础的体验,官网demo):

https://www.tensorflow.org/lite/demo_ios

这里主要做了哪些事呢?

1.github repo里面包含了demo工程。

2.github repo里面运行脚本可以生成所需要的模型,放到demo工程中。

3.运行pod会获取到tensorflow_lite.framework;通过pod可以很容易的集成库,全程傻瓜式。

那么发散一点,我们如果不想去下载github的完整repo,那么可以从别人那里获取到demo工程,找一个合适的.tflite模型文件,并且手动集成tensorflow_lite.framework(这里包含了头文件和执行文件),也可以把项目跑起来。

项目设置:C++11 support (or later) should be enabled by setting C++ Language Dialect to GNU++11 (or GNU++14), and C++ Standard Library to libc++.

实际测试中发现使用c++11的设置也是可以的,不一定非要选择GNU++(笔者自己的项目另外一个依赖需要使用c++11否则无法编译通过,所以需要研究这个)。

另外,还有一个路径相关的问题,只需要在demo中小小的修改:

//#include “tensorflow/lite/kernels/register.h”//#include “tensorflow/lite/model.h”#include “tensorflow/contrib/lite/kernels/register.h”#include “tensorflow/contrib/lite/model.h”
这是因为用户自己编译的路径和framework的路径有差异引起的,知道这个就很容易解决了,是google的问题。

step2(手动集成tensorflow_lite.framework):

这里主要是需要手动设置Framework Search paths 和 header search paths:把framework的对应路径填充进来,让project能够找到。

例:

Framework Search paths-> ‘${SRCROOT}/tensorflow_lite.framework’

header search paths-> ‘${SRCROOT}/tensorflow_lite.framework/Headers’

另外这个时候跑项目,会报一个错误 “ Undefined symbols “_cblas_sgemm”(google之后就会发现这是因为没有引入accelerate库(高性能数学运算库)引起的,引入之即可解决)。

step3(自己生成.a库,自己集成头文件到项目):

https://www.tensorflow.org/lite/ios

按照上面文章的building部分,应该就会很容易的生成所需要的.a库了;但问题还有头文件。

google建议我们做如下操作:

The Header Search paths needs to contain:

the root folder of tensorflow,
tensorflow/lite/downloads
tensorflow/lite/downloads/flatbuffers/include
首先这里的路径和实际路径是不一致的,我花了一会才找到实际的路径。重要的是这样做对于一个稳定的项目只是简单集成我认为是不科学的,我们需要的只是头文件而已。

所以我先做了如下尝试:

把tensorflow_lite.framework里面的头文件拿到这里来用,岂不是很完美?

理想很丰满,现实很骨感。实践表明不知道什么原因这两者之间是不能匹配的,当你解决了编译不通过的问题,跑起来的时候会crash:”+[CATransaction synchronize] called within transaction Loaded model 1resolved reporter”。

简单粗暴的理解,我认为生成.a库里面的lite文件夹下面所有的.h我们都要包含之,但lite文件夹里面有很多其他的文件,如果全部加入工程中,结果就是一大堆的报错无法编译通过。

因此,我尝试使用python脚本来解决:

#!/usr/bin/python

— coding: utf-8 —
import os
def gci(filepath):
#遍历filepath下所有文件,包括子目录
files = os.listdir(filepath)
for fi in files:
fi_d = os.path.join(filepath,fi)
if os.path.isdir(fi_d):
gci(fi_d)
else:
tempP = os.path.join(filepath,fi_d)
if os.path.splitext(tempP)[1]!=’.h’:
os.remove(tempP)
#print tempP

#递归遍历/root目录下所有文件
gci(’/Users/zhenweiguan/Desktop/lite’)
这个脚本的作用是去除所有除了.h以外的文件。

将之集成到工程中,还是会报一些错误,检查发现是因为里面有子工程工程文件夹和asset资源文件夹,手动删除之。

再次集成这些头文件,并引入path,bingo,终于跑起来了。

结语:以上是我个人的踩坑全记录,对于想要*快速集成tensorflowlite的同学来说,*好的方法应该就是下载*新的.framework文件来进行手动集成(当然了,如果项目支持pod会更简单)。

现在有 AI 智能接听回复的安卓系统,哪个*好?

现在有 AI 智能接听回复的安卓系统,哪个*好?
这个功能还是很方便的,我了解到的如下:

小米的 MIUI 有

华为的 EMUI 没有

蓝绿的 ColorOS 也有,OriginOS 不太清楚

魅族的 flyme 不清楚

三星的 OneUI,一加的氢 OS 、氧 OS 应该没有

• 2021-03-10 12:11:20 +08:00
goodhellonice 1
goodhellonice 18 天前
MIUI 还能在 AI 接听的过程中人工接管,手动打字,然后 AI 语音转过去
lloovve 2
lloovve 18 天前 via iPhone
这个接口我们自己能调用吗?比如自己做个程序,来电话时播放语音过去
goodhellonice 3
goodhellonice 18 天前
@lloovve 我不太清楚啊。。。。等其他 V 友能帮忙解答
RoyLaw 4
RoyLaw 18 天前
运营商有提供 AI 接听的服务,不过要收点费用。
binux 5
binux 18 天前 via Android
我想知道国外(美国)有啥类似的,现在可以用的服务吗?
jdhao 6
jdhao 17 天前 via Android ❤️ 1
vivo 的 funtouch os 也有,叫电话秘书
Biggoldfish 7
Biggoldfish 17 天前 via Android
Pixel 的 Call Screen 体验也还可,不过只支持英文
janus77 8
janus77 17 天前
经常看到有网友分享 AI 互相对话,打来电话的是一个 AI,接听的也是 AI,那场面贼搞笑
Pazakui1259 9
Pazakui1259 17 天前
@binux 运营商自带的很基础的 Voicemail 可以录一段语音,语音后请来电者语音留言。功能多一点的第三方服务也有,例如“YouMail”。
mmdsun 10
mmdsun 17 天前 ❤️ 1
之前用小米手机的小爱代接电话, 对方问她是不是机器人, 她回答不是. 吓得我赶紧拿过来自己接了.

anguiao 11
anguiao 17 天前
现在对面很多也是机器人了,没以前好玩了?
learningman 12
learningman 17 天前
@mmdsun 觉醒了也好,那小爱就是我 GF 了(
xingye163 13
xingye163 17 天前
oppo 的没有吧,你说的是那个打文字回复的?
Lemeng 14
Lemeng 17 天前
只要能很好的解决问题,啥都好说
zhuangzhuang1988 15
zhuangzhuang1988 17 天前
不是 “Daniel Povey” 大牛在小米么
现在不知道还在不在了.
aLazarus 16
aLazarus 17 天前
以前 google 在发布会上不都有这东西了么,miui 刚出这个功能的时候我以为是借鉴了谷歌,只不过谷歌这个东西有没有实装在手机里
https://www.bilibili.com/video/BV1qp411f7vP/?spm_id_from=333.788.recommend_more_video.1
JensenQian 17
JensenQian 17 天前
类似于这种的
小米的
https://www.bilibili.com/video/av882561089
https://www.bilibili.com/video/av882561089
vivo 的
https://www.bilibili.com/video/av501196854
JensenQian 18
JensenQian 17 天前
@zhuangzhuang1988 #15 应该还在,看了下领英
https://cn.linkedin.com/in/daniel-povey-95a77b9
binux 19
binux 17 天前 via Android
@Pazakui1259 这些都没有对话啊,差的有点远
qiyue0726 20
qiyue0726 17 天前
现在我一开,对面直接挂我电话
yuzhiquan 21
yuzhiquan 17 天前
@zhuangzhuang1988 在
baozhuo 22
baozhuo 17 天前 via iPhone
我用的小米,我的手机基本都是保持静音的,是不是会听到口袋里有人对话,有时候有的公司用的 AI 机器人打过来的,小爱能跟它聊好半天
Admin8012 23
Admin8012 15 天前 via Android
Docomo 和 AU 的机子有运营商自带的智能回复软件 类似 Google assistant 只不过用的是日语。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速