月度归档: 2021 年 3 月

如何快速入门Python

如何快速入门Python

学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人*终能精通语言,成为执牛耳者,他们是金字塔的*顶层。虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门 Python。只要方向对了,就不怕路远。

设定目标

当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求:

做 Python 开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通 Python Web 开发工程师需要掌握的技能包括至少一个Web框架,比如:Django、Flask、Tornado,做业务系统离不开数据库的支撑,另外,还需要对Linux系统的基本操作和常用命令有所了解,因为以后你写到程序基本上都会运行在Linux平台上。

接下来我从这几个方面逐一介绍

Python3?

不少新手总是纠结是学 Python2 还是 Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼,因为它们是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在用 Python2,但是 Python3 逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势,官方也在力推Python3。所以毫不犹豫地选择 Python3 吧,*多花一天的时间能把 Python2 中特有的内容搞懂。

开发工具

工欲善其事必先利其器,做 Python 开发的 IDE(编辑器)层出不穷,我只推荐 Pycharm 和 Sublime,两个工具都可以免费使用,而且它们的学习成本非常低,网上找一篇教程看了基本就能上手,Vim、Emacs 这样的远古神器还是放以后再去了解吧。另外,今后你所遇到的 90% 的问题都有可能通过Google和StackOverflow来解决。

学习资源

网上入门资源琳琅满目,一本好书能为你指点迷津。快速了解 Python 可以看一下 Learn Python in Y minutes 这篇文章。但千万不要被标题所迷惑,一门语言不可能几分钟就能学会,看完之后应该会对Python 有个初步的印象,照着示例操作完之后,你就要选择一本合适入门的教程,《A Byte of Python》是一本值得推荐的书籍,来说说我推荐这本书的理由。

《A Byte of Python》的中文名叫《简明 Python 教程》,这本书的*新版已经是第10版,基于 Python3.5,所以不担心是否知识落后的问题,其次,这本书的厚度152页非常适合入门,涵盖了 Python 入门所有内容,相对那些五六百页的大部头书来说非常精简了,2个星期能啃完。

这本书看完之后,你应该能设计出简单程序出来。再推荐一本书《Python学习手册》作为进阶学习,内容相对要更深入,适合有一定编程基础的人阅读。

做Web开发,HTML、JS、CSS 是必须有所了解的,作为前端技能,不一定要深入了解,做到能写基本的HTML代码就够了,此外,你还需要了解 HTTP 协议(推荐《图解HTTP协议》)。目前比较主流的Web框架有 Django、Flask、Tornado,各自都有各自的特点,Django 文档丰富、Flask 短小精悍、Tornado 异步并发。这里推荐使用 Flask,推荐书目《Flask Web开发:基于Python的Web应用开发实战》

Linux 推荐《快乐的 Linux 命令行》,同样是一本非常经典的入门迷你书,没有太多理论,范围也不太宽

MySQL只推荐一本《MySQL必知必会》,不到250页的小册子,实践性很强,没有什么艰深晦涩的理论堆砌,看完这本书基本入门数据库了。

*后

只看书不会进步,思考和实践才有成长,自学编程是一个比较枯燥的过程,如果没有正向反馈,学习的积*性很容易被打压下来,所以你应该积*参与到相关的技术圈子中去,尝试去解答力所能及的新手问题,向圈子中的大牛们寻求帮助,善于总结自己所学到的东西,分享给更多的人

MCBE 服务器

开了个 MCBE 服务器,之前用的飞儿云(阿里云)的机子,一个月 62,小服务器都没什么人玩,不划算,吃不消。 有无推荐的,靠谱点的服务器供应商,穷学生就和朋友一起玩玩,配置要求不高。

CEBBCAT 159 天前 via Android
怎么把标题当 tag 用啊?
locoz 2
locoz 159 天前 via Android
给你开个虚拟机…?
DevHuaJi 3
DevHuaJi 159 天前
@locoz 啥意思
locoz 4
locoz 159 天前
@DevHuaJi #3 我家服务器闲置着,可以给你开个虚拟机跑服务端,出点电费就行了
DevHuaJi 5
DevHuaJi 158 天前
@locoz 可以啊
DevHuaJi 6
DevHuaJi 158 天前
@locoz 企鹅 2981144675 来 py 吗
goyiyi 7
goyiyi 158 天前 via Android
info2s 上看看,很多闲置的云服务器
DevHuaJi 8
DevHuaJi 158 天前 via Android
@goyiyi 看了下,对我来说还是有点贵了。不过谢谢哈
stranger75 9
stranger75 157 天前
可以看看套路云的香港轻量,24 一个月,1h1g30M 带宽,每月 1TB 流量
locoz 10
locoz 156 天前 via Android

@DevHuaJi #6 加你了

Stictonotus 156 天前
Minecraft 类服务器, 可以考虑试试国内 Minecraft 生态的特色,通过 QQ 售卖的 NAT VPS 。
这类 oneman idc 在 MC 圈里非常多,而且名字参差不齐,随便加一个 MC 开服之类的 QQ 群就能看到。
如果想要被坑或者想对服务器有更深刻的经验的话,可以试试购买这种服务器。

或者,你可以试试 MCBE 的面板服务器,本质上是 docker 的容器,外加一个类似于 cPanel 的管理面板。位置在国内的价格大概也就在 10-20rmb/mo 左右,共享 CPU,2GB~容器内存。非常适合基友服。
m2idk 12
m2idk 135 天前
你要用 Falixnodes 也可以,只是經常停機
登入方面應該要翻牆(Discord 登入法)

iOS开发 — 获取网络状态

之前用的根据状态栏获取的,iOS 13貌似不行了。。。

#import <Foundation/Foundation.h>
typedef enum {
NETWORK_TYPE_NONE = 0,
NETWORK_TYPE_WIFI,
NETWORK_TYPE_2G,
NETWORK_TYPE_3G,
NETWORK_TYPE_4G,
NETWORK_TYPE_5G, // 5G目前为猜测结果

} NETWORK_TYPE;

@interface BaseTooles : NSObject

+ (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar;
/*!
* 获取当前网络类型
* 通过statusBar的网络subview获取具体类型
*/
+ (NETWORK_TYPE)SDKgetNetworkTypeFromStatusBar{

NSArray *subviews;

if([[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] isKindOfClass:NSClassFromString(@”UIStatusBar_Modern”)]) {
// iPhone X
subviews = [[[[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”foregroundView”] subviews];
} else{
subviews = [[[[UIApplication sharedApplication] valueForKeyPath:@”_statusBar”] valueForKeyPath:@”foregroundView”] subviews];
}

// NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@”statusBar”]valueForKey:@”foregroundView”] subviews];
NSNumber *dataNetworkItemView = nil;
for (id subview in subviews) {
if ([subview isKindOfClass:[NSClassFromString(@”UIStatusBarDataNetworkItemView”) class]]) {
dataNetworkItemView = subview;
break;
}
}
NETWORK_TYPE nettype = NETWORK_TYPE_NONE;
NSNumber *num = [dataNetworkItemView valueForKey:@”dataNetworkType”];
switch ([num intValue]) {
case 0:
nettype = NETWORK_TYPE_NONE;

break;
case 1:
nettype = NETWORK_TYPE_2G;

break;
case 2:
nettype = NETWORK_TYPE_3G;

break;
case 3:
nettype = NETWORK_TYPE_4G;

break;

default:
nettype = NETWORK_TYPE_WIFI;
break;
}

return nettype;
}

上市之后,青云存储平台QingStor也要“进军”云原生

3 月 16 日,北京青云科技股份有限公司(以下简称“青云科技”)登录科创板,昔日里频频出现在公众视野的云计算企业,终于作为“中国混合云*股”成功上市,股票代码 688316。

在国内迅速崛起的大大小小的云计算企业中,青云科技规模不算*大,却从公有云切入市场,旗帜鲜明地以“混合云”为卖点,在财报仍为亏损的状态下冲出重围成功上市。

%title插图%num

 

三年内有望实现盈利,是青云科技CEO黄允松对外界做出的承诺,他的底气来源于青云科技亏损的唯一来源是公有云业务,而私有云业务年增长率持续高位,以这个速度,三年内转亏为盈应该不是问题。

青云科技上市,明示了市场对于云计算未来空间的遐想。而在上市第三天,青云科技在媒体沟通会上即宣布,其旗下存储平台 QingStor 将迎来品牌及战略升级。

QingStor战略升级,将成独立、开放运营品牌

按照青云科技的设想,接下来的一年,QingStor 重点是要打造更强的商业服务能力,服务企业数字化转型。在过去,青云科技认为 QingStor 在技术上的积累已经足以支撑业务的运转,但技术实力仍然需要保持,除了原来北京和武汉的研发中心,今年年初还新增了成都研发中心。未来,QingStor还会加大技术投入,研发团队在人数上将有大幅增长。

除了保持技术*,QingStor 还要在商业、生态和落地上发力。对于品牌的定位,QingStor 的总结是三个词:专业、独立和开放。

专业不用多做解释,如今的 QingStor 在对象存储、文件存储、块存储和融合存储上都有完整的产品线;独立是指 QingStor 的运营方式,就是将 QingStor 作为一个独立运营的产品品牌,这是青云科技希望向外界传递的重要信息之一;开放则是指QingStor除了开源产品和开放政策之外,在市场策略上将比以前更加开放,要建立自己的“朋友圈”。

2021年新产品&新功能预告

除了大的战略定位,QingStor 产品和研发团队的负责人王煜还预告了 QingStor 将在 2021 年进行的重大新产品和功能发布,主要包括两个云原生块存储新产品/功能优化,和一个文件存储系统。

*,QingStor 将强化分布式块存储产品 NeonSAN 在超大规模云计算平台的底层支撑能力,推出全新的存储访问协议 NVMe Over Fabric。在 RDMA 网络互联上,QingStor 之前已经实现了在存储内部数据副本之间通过 RDMA 进行复制,今年则将允许客户端层也通过 RDMA 网络协议访问存储,以降低企业关键业务的存储网络延迟,使之能够挑战 FC-SAN 类似的传统访问协议,并探索大吞吐网卡支持,以及非易失内存 SCM 在软件架构中的应用等。第二是优化对超大规模集群的支持,NeonSAN 本身在数据层面的设计是 Share-nothing 架构,天然可以无线横向水平扩展,而在管理层今年会在控制平面做一个 partition 分区,允许大规模集群横向水平扩展。在特性和功能层面,NeonSAN 今年也会进行增强,比如同步备灾、一致性卷组、读写快照、跨存储池迁移等。在平台支持层面,NeonSAN 不仅服务于青云QingCloud云平台,还支持市面上主流的虚拟化和云计算平台,包括 VMware、OpenStack、Hyper-V 等,今年 QingStor 会关注这些平台的迭代升级,并进行同步匹配。

第二个今年上半年的重磅发布,一个是云原生分布式块存储产品,它基于 NeonSAN 架构,在此基础上进行全栈存储组件容器化改造,全面兼容市面上主流的 K8s 平台,包括青云的 KubeSphere,红帽的 OpenShift,Rancher 等。此次,这一产品还会全面接入容器平台监控运维体系,并将利用 K8s 平台本身 operator 自动化运维机制管理存储系统。开发者喜闻乐见的是,这是一款完全免费的产品,可以通过主流应用市场进行分发、下载,并支持企业级客户平滑迁移到企业版 NeonSAN。

第三款正式对外发布的产品,是已经在青云内部孵化多年的全新云原生分布式文件系统,它是采用 Rust 实现的插件式分布式文件系统。更重要的是,这个文件系统将完全开源,并采用社区开发和运营的模式。

%title插图%num

除此之外,今年QingStor 对象存储和文件存储产品也将在架构层面迎来全新升级,对象存储将升级至 4.0,文件存储升级至 3.0,底层存储引擎将完全替换成将要全新发布的分布式文件系统。也就是说,这款云原生分布式文件系统将成为下一代 QingStor 商业版本存储底层新一代的存储引擎。

*后,QingStor还会在今年发布一个厂商中立的数据服务框架,为上层提供统一的数据管理和操作接口,实现新功能和数据迁移、管理、数据备份等,加入框架后可以在各个厂商之间无缝进行数据迁移、数据管理、数据备份等。

%title插图%num

存储的机会在哪里?

除了品牌升级和重要产品发布预告之外,在沟通会上,QingStor还从市场和技术两个层面,分享了他们看到的未来与存储相关的机会所在,供读者朋友们参考。

在市场层面,QingStor认为存储的*个机会在于大量数据,数据量爆炸增长背后,存储解决方案会发生巨大的改变,包括数据湖、人工智能中大数据产生后的一些存储方式,以及备份归档等方面的市场需求增长将非常迅猛;

第二是细分场景,即用户对于数据的科学处理将使数据发挥更大的作用,第二存储、混合云存储、边缘存储将更加满足用户的细分场景需求;

第三是以云原生为代表的的全新模式,将迎来爆炸性增长,未来三年会看到以云原生为代表的全新存储模式有非常明显的市场机会。

而从技术层面上讲,QingStor 产品和研发团队的负责人王煜分享了他对于存储在 2021 年将出现的几个明显技术趋势的观察。

%title插图%num

他认为,存储将在 2021 年出现四大趋势,首先是存储池化。顾名思义,企业在过去几十年构建存储的方式是围绕业务,根据不同的应用和业务采购存储系统,但这样会导致底层存储系统冗杂,引起“数据孤岛”和管理难的问题。而现在企业倾向于围绕数据中心构建统一的存储资源池,为上层提供应对不同业务的服务,这对技术提出了更高的要求,比如高性能、高并发,并由此催生对于硬件性能、新的协议的要求,除此之外对于大规模水平扩展能力,以及多租户多隔离的要求也会相应提高。

第二个趋势是服务化,这会加速存储用户与服务提供方的解耦,所谓花多少钱买多少服务,开发者通过天然开放的API接口,可以简单地集成 SDK 在应用代码中调用相应的存储服务,实现存储功能,用户无需关系存储和扩容能力,按需付费,把企业采购存储资源变成采购服务,这是存储服务化的一个重要标志,可以*大地降低企业成本。

第三个趋势是云原生化,云原生的本质是应用系统*大化或全面地使用云平台提供的能力,与云计算相比,云原生除了提供 IaaS 和 PaaS 的服务之外,还提供了平台级的集群管理能力。实现云原生,应用系统架构需要改造,从单体应用变成容器部署。另一个实现云原生的手段是无状态化,让逻辑代码可以无限快速伸缩扩容,提升系统的承载能力。另外,数据库计算存储分离,也是在存储层解决数据保护问题的有效手段。

第四个趋势是数据价值化,也就是更好地利用数据,围绕存储本身将会出现很多新兴场景,比如第二存储、数据湖、数据统计、元数据检索等,形成完整的数据挖掘解决方案。

结语

2020 年,AWS 在云存储服务成为全球*可以被视为一个标志性事件,证明了如今云存储已经是一个市场足够大的盘子。而青云科技在上市后的第三天,就宣布了存储品牌 QingStor 的品牌升级和未来规划,从中足见其对于存储业务的重视,以及想要挖掘存储市场潜力的决心。

作为一家独立的云服务商,青云科技的上市本身也证明了市场对于国内云计算发展空间的认可,相信对于这家以自主创新、以混合云为亮点的企业来说,上市也只是一个新的起点,未来是否还能实现自我突破,更多的还是要思考上市的意义,以及经营模式是否已经做好了作战的准备。

————————————————

python类中函数调用

#类及函数的定义
Class A:
#构造函数:
def __init__(self,var1,var2):
self.var1 = var1
self.var2 = var2

def b(self,var1,var2):
return var1+var2

#类内函数调用:
var1=1
var2=2
#创建对象:
a = A(var1,var2);
#调用函数:
a.b(var1,var2)
首先每个类的构造函数名称相同(__init__(self[,形参表])),用于初始化成员变量。

调用类内函数,首先构造对象,然后用‘.’(点)调用。

数据库设计的 10 个*佳实践

以下为译文:

数据库是应用及计算机的核心元素,负责存储运行软件应用所需的一切重要数据。为了保障应用正常运行,总有一个甚至多个数据库在默默运作。我们可以把数据库视为信息仓库,以结构化的方式存储了大量的相关信息,并合理分类,方便搜索及使用。

因此,数据库设计成为软件开发中的重要一环,对于开发者来说,设计一个高效的数据库至关重要。那么,为什么数据库设计很重要,“好”的标准又是什么?本文将做以介绍。

%title插图%num

为什么数据库设计很重要?

用我们订购衬衫的在线商城网站举例。如今,从网站上订购衬衫的过程似乎很简单,但涉及了很多信息交换。例如:*次浏览网页时,系统会展示给你一系列信息,包含产品分类,所有可用商品、相应价格、可用尺码、颜色以及其他相关信息。网站会从存储数据的数据库中检索,当用户选中所需商品并继续操作购买时,网站会询问个人详细信息、送货地址、付款详细信息,并确认订单。目前在此过程中产生的新数据,如用户详细信息、订单详细信息、购买及付款都会在同一个数据库中添加及更新。

数据库设计很重要,因为对构建可伸缩且能够在高工作负载下运行的软件应用来说,它是至关重要的。设计数据库首先来说,选择数据库软件很关键。目前可用于构建应用的数据库软件有数百种可供选择,我们可以从一些*好的免费数据库软件中选择,之后便是设计符合要求的数据库了。下面列出了10个*优的数据库设计实践。

%title插图%num

数据库设计的10个*佳实践

将所有人的观点列入考量

要设计好的数据库,必须考虑所有相关利益者的观点。在构建数据库之前,先去收集信息,了解他们对数据库的期望以及对数据库的操作熟练度。这样就能得出数据库应当采用的技术水平,以及是否要就数据库的功能来训练用户。

选择符合需求的数据库类型

数据库有多种类型,选择正确类型则是数据库设计的关键。我们可以将数据库以两种方式分类。一是基于数据库用以定义和操作数据的查询语言。使用SQL的数据库是结构化数据*常用的类型。然而,由于NoSQL数据库的可伸缩性、灵活性和速度更优,它们更适合机器学习、网络分析以及物联网(IoT)使用。

第二种分类方式则是基于数据模型。这样分类会有四种类型:关系数据库、分层数据库、网络数据库以及面向对象的数据库。

研究数据库的不同类型,并针对应用需求作出选择,这是必要的初始步骤。

以一致的方式来定义与标记表和列

在定义数据项以及标记表与列时,遵从一致性原则非常重要,可以帮助我们更好地理解数据。命名表与列的*佳实践之一便是使用简单的名字来定义其包含的数据。比如:只需将包含用户名称的列标记为“CustomerName”(“用户名”)即可。

应当避免使用复数名(如CustomerNames)、缩写(如CN),并且名称中不得使用空格(如Customer Name)。如果坚持遵守这些规则,则将来的用户在使用数据库时会更容易。

规范化是关键

数据库的规范化指的是将数据库中的所有信息组织起来,避免数据重复和冗余。简单来说,规范化是将数据打散分配到多个较小的相关表中,而不是统统存在一个大表里。

将数据规范化是很好的数据库设计实践,有助于提高效率。但是请确保不要过度规范化,否则将会把数据分散到太多的小表中,反而造成混乱。

数据库设计的文档化很重要

事实上,文档化并非人见人爱,因为实在太烦了。但要记得,文档化对于良好的数据库设计至关重要,可以追踪所有的小细节。数据库设计应当附有指示说明、ER图、存储过程及所有其他相关的信息。文档还应当为编程者和终端用户提供足够信息量,确保他们能够理解并使用。

隐私是首要考量

很多时候,存储在数据库中的信息是加密信息,隐私就成了一个值得关注的问题。为了获得*大程度的安全性,我们应当对密码加密,使用身份验证来限制数据库的访问,并使用另一个服务器来存放数据库,而不是应用所在的服务器。这将确保你的数据不受攻击和隐私侵犯的威胁。

考虑长期需求

优秀的数据库设计应当具备可伸缩性,即:在使用量增加的情况下,仍然能承受较高的工作负载,并保障应用的运行。对工作量可能会有所改变的企业来说,在设计数据库时牢记此项至关重要。例如:如果一个电子商务网站预计当销售量增长时,访客会在一个月内急速增加,那么在设计数据库时应当将这一点列入考量,以便数据库可以响应迅速增长的访客,并保持在高工作负载的情况下运作。

代码以及使用预存程序

数据库设计中的常见错误之一,就是不使用预存程序。预存程序指的是,在操作数据时手边随时可用的提前预存代码串。例如,如果有个SQL查询是常用的操作指令,则将它提前写入预存程序,而不是在用的时候重新来写,就会让工作简单起来。一旦有了预存程序,就可以在需要时一步执行并载入这个SQL查询了。

编写大量预存程序是个吃力的工作,但如果花时间完成并用文档记录下来的话,对终端用户来说,使用数据库就更加轻松了。

在数据库建模和设计上投入时间

优秀数据库设计的专业技巧之一是在数据库建模和设计上投入时间和精力。开发者常见的错误就是忽略这一步以节省时间,将重点放在软件开发更重要的其他方面上。但是,数据库设计对于保障应用的功能来说非常关键。如果一味想节省时间,不仔细思考设计的话,未来就会需要花费更多时间来维护数据库,甚至重新设计。

测试设计

测试也是数据库设计很关键的步骤,而且经常会被疏忽对待,甚至完全跳过,只为了赶DDL。我们应当在发布项目前,花些时间来彻底测试数据库设计,以确保其满足了所有计划中的需求,且正常运行。

%title插图%num

结语

对于以数据为中心的项目来说,数据库设计*为重要,开发过程中我们也应当慎重对待。文中提到的数据库设计实践,如针对长期需求进行适当的计划,选择正确的数据库类型,使用一致性的名称与标签,数据规范化,数据库设计文档化,并提前测试,这些都是我们在设计优秀数据库时需要考虑的关键问题。

Android webview 如何阻拦下载链接跳转

Android webview 如何阻拦下载链接跳转:

如下图,点击页面的下载按钮后跳转到了下个页面,下载触发点在 shouldOverrideUrlLoading 之后,

因此在无法 shouldOverrideUrlLoading 中阻拦。此种情况如何阻拦页面跳转?

%title插图%num

 

webview 使用 setDownloadListener 触发下载

1 条回复    2021-02-25 17:21:34 +08:00
还有个 shouldInterceptLoadRequest

让python类直接被调用

让python类直接被调用

之前在pytorch和keras中经常发现一个类model被直接调用,发现很有意思。于是就去看了看pytorch中nn.Module的源码,发现是定义了__call__(self)函数再去调用forward()函数。举个例子如下:

import math
class Pow(object):
def __init__(self,n=2):
self.n=n
super(Pow,self).__init__()
def forward(self,x):
return math.pow(x,self.n)
def __call__(self,x):
return self.forward(x)
l=Pow(2)
y=l(10)
print(y) #输出结果是100
l=Pow(3)
y=l(10)
print(y) #输出结果是1000

iphone手机上的抓包流程和原理概述

在ios应用开发过程中,为了进行端到端的分析,很多时候我们需要对手机的抓包进行分析。

对手机的抓包我们要在手机上安装抓包工具:tcpdump

前提:手机越狱;安装tcpdump    这样一部iphone就具备了抓包能力。

方法1:手机直接抓包(在手机上安装terminal用于输入命令)
不受网络条件制约,但由于是在终端上操作抓包,对ios设备来讲,MobileTerminal切至后台就不再工作,因此该抓包方法可行性较低,尽管如此,MobileTerminal对终端测试人员来说依然是一款很实用的工具;命令控推荐此方法。

方法2:通过pc/mac连接到手机(iPhoneTunnel软件,有mac和pc版本),通过在pc/mac下输入抓包命令,在手机上抓包。

pc下:用USB线缆连接终端与PC,确保手机终端正确,启动iPhoneTunnel,绿灯表示Tunnel Status正常,此时点击Launch Terminal按钮即可SSH进入终端,输入root密码,然后执行命令抓包

mac下:用USB线缆连接终端与mac,确保手机终端正确,启动iPhoneTunnel并开启后,点击tools->ssh(root) 菜单调出一个命令行界面,此时有可能报一个连接错误,输入ssh-keygen -R [127.0.0.1]:2222清除下里面的一个配置,即可正常连接。连接以后执行命令抓包,同pc。(tip:mac下终端输入密码时没有占位符,需要保证正确,注意)
WiFi下抓包tcpdump -i en0 -X -s0 -w data.pcap

2G/3G下抓包 tcpdump -i pdp_ip0 -X -s0 -w data.pcap 或 tcpdump -X -s0 -w data.pcap  (两个都可以试下,我一般用前者)
抓包结束命令:ctl+c
敲此命令抓包的默认路径在var->root文件夹内。
总结:两个方法本质一样,都是利用tcpdump在手机上抓包,方法二通过ssh连接到手机去执行抓包命令(此时iphone充当一个server角色,pc/mac作为client连接到该server进行远程控制),因为抓到的包一般需要在pc/mac下用wireshark进行分析,所以pc/mac基本是必须的,推荐方法2。

请教一下 libyuv 转换问题

请教一下 libyuv 转换问题

我在 Android 使用 imagereader 读出来的 argb8888 的数据,然后使用 libyuv 中的 argbtoi420 去转换成 yuv420p,存下来的数据怎么都不对,但是我把 argb8888 的数据存为 bitmap 再转换为 jpeg,打开就是正确的
第 1 条附言  ·  26 天前

搞定了,确实大小端的问题:
  •  2021-03-08 15:46:24 +08:00
1 no1xsyzy   28 天前 随便地搜索了一下,看到这个: //注意这儿有个坑,ARGBToI420 内存顺序是 BGRA //BGRAToI420 内存顺序是 ARGB 不知道是否有关
2 fengwei23   28 天前 @no1xsyzy #1 谢谢哈,我也看到这个了,我都试过了,好像还是不行,我在研究一下
3 darer   28 天前 只是说数据不对也判断不出是什么问题吧 还是再补充一些信息吧
4 AX5N   28 天前 你把 argb 映射到 srgb 了吗
5 fengwei23   28 天前 @darer #3 确实是这样的,但是我不是很好描述 “` Image image = reader.acquireLatestImage(); if (image != null) { Image.Plane[] planes = image.getPlanes(); Image.Plane plane = planes[0]; ByteBuffer buffer = plane.getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes, 0, bytes.length); if (mDataThread != null) { mDataThread.addData(bytes); } image.close(); } “` 上面是我从 image 中取出来的数据,然后把这个数据送给的 libyuv 去转换的,iamgereader 用的是 PixelFormat.RGBA_8888,libyuv 用的是 ABGRToI420
6 fengwei23   28 天前 @AX5N #4 没有也,需要这样做吗
7 AX5N   28 天前 @fengwei23 没在手机上开发过这些东西,但我觉得就是色域的问题。 理论上你应该声明 2 次,一次是转成 yuv 的时候,一次是转回 rgb 的时候。如果你不清楚你这个解码器的工作原理,那你*好直接转成 srgb 一劳永逸,缺点是会压缩色彩空间。如果你编码解码都是自己负责,那你可以自己捣鼓下相关参数。
8 qieqie   28 天前 这个代码意思是取 Y 平面然后清空,然后转换? 地铁老人看手机.jpg
9 qieqie   28 天前 看上去你这样只是拿到了一个灰度图
10 LouisLiu   28 天前 Android 读取的 argb8888 是大端对齐,而 c/c++对应的是 abgr,例如 libyuv::ABGRToI420
11 newmlp   27 天前 argb 顺序不对,用过 libyuv 的基本都踩过这个坑
12 elonmask   27 天前 改 renderscript 吧
13 rabbitknight   17 天前 imagereader 可以直接获取 YUV420_888 数据。然后拿 libyuv::Android420ToI420 转换。 rgb<->yuv 转换资源消耗太大了。     14 fengwei23   17 天前 @rabbitknight #13 我是用 Mediaprojection 来配合使用的,YUV420_888 这种格式使用的时候显示不支持。

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