基于 Eclipse 的 IDE 下进行 Android项目的创建

创建 Android 工程

1)启动 Eclipse,菜单栏选择 File -> New -> Project…。

新建工程

2)在 New Project 窗口的列表中找到 Android,选择 Android Application Project。

选择 Android Application Project

3)填写创建 Android 项目所需的基本信息。

  • Application Name (Android 应用的名称)
  • Project Name (在 Eclipse 中的项目名称)
  • Package Name (存放 Java 类的包名称,其实质是存放的文件夹路径,“.”号为文件分隔符,编写的 Java 文件都会放在项目的 src 目录下,com.example.firstandroidapp 表示类放在 src/com/tencent/helloworld 文件夹中)
  • Minimum Required SDK (应用程序所支持*低的 SDK 版本及所对应的 Android 平台版本)
  • Target SDK (应用程序的目标 SDK 版本及所对应的 Android 平台版本,即测试过的*高版本)
  • Compile SDK (表示在编译时的应用程序的 SDK 版本及所对应的 Android 平台版本, 这个一般为默认或者同 Target SDK)
  • Theme (指定适用于该应用程序的 Android UI 风格)

输入前三项项目信息,之后选项可根据需要修改,本文操作中保持默认选项,点击 Next。

填写基本信息

4)进行项目配置。

  • Create custom launcher icon (用户自定义应用图标)
  • Create Activity (创建主程序 Activity 的 Java 类)
  • Mark this project as a library (将该项目作为其他项目的引用库)
  • Create Project in Workspace (创建项目到 Eclipse 工作区)
  • Add project to working sets (添加项目到 Eclipse 工作集)

保持默认选项,点击 Next。

项目配置

5)由于在之前勾选了 Create custom launcher icon,这里需要进行应用程序的图标配置,在这里可以选择原图库的备选图标,也可以选择目标文件目录下的图片,并能对图标进行样式的调整。

保持默认选项,点击 Next。

应用图标配置

6)由于在之前勾选了 Craete Activity,这里可以对 Activity 创建,在勾选”Craete Activity“的状态下可以选择一种界面风格进行自动创建。

保持默认选项,点击 Next。

创建 Activity

7)接着上一步,定义 Activity 相关文件名。

  • Activity Name (应用程序主界面所对应 Activity 的 Java 文件名)
  • Layout Name (应用程序主界面界面布局的 xml 文件名)

保持默认配置,点击 Finish 完成工程的创建。

定义 Activity

 

iOS开发-调试网络限速(真机和模拟器)

在iOS开发中,针对不同网络状况做一下测试处理是很有必要的。但是我发现还是有一些iOS开发者不太注意到不同网络环境下的调试问题,或者说不清楚如何调试这种情况。

下面我将针对真机和模拟器分别做简单的说明。告诉大家如何模拟不同的网络状况。

1.真机情况下

其实Apple在iOS系统中预置了网络调试工具,但是只有添加过测试设备,并使用XCode连接下设备才能激活.

%title插图%num

注意中间的那行NETWORK LINK CONDITIONER

%title插图%num

上图中的Status是表示网络限制是否开启,点击进去就可看到详细设置

%title插图%num

可以看到系统默认配置的网络条件还是很多的,其中:

100%Loss是全丢包,

3G这个就不用说了吧

DSL是电话线上网,

Edge是2G网络,

High Latency DNS是高延迟,

Very Bad Network是网络状况不稳定。

并且底部还有一个添加额外配置的选项可以自定义网络状况。

2.模拟器

由于模拟器是在电脑上的,mac上也有和iOS设备中一样的调试工具,并且在Apple官网工具中有哦。

该工具的Apple官方地址:https://developer.apple.com/downloads/index.action?q=Network%20Link%20Conditioner#
输入搜索:Hardware IO Tools for Xcode 下载自己需要的版本就好了

%title插图%num

打开DMG文件,里面包含了许多调试工具,其他的工具有兴趣的可以自己去看一下。这里我们只打开Network Link Conditioner.prefPane这个文件

%title插图%num

在系统偏好中出现了工具:

%title插图%num

打开工具,看一下。

%title插图%num

几乎和手机一样。可以看到系统默认配置的网络条件还是很多的,其中:

100%Loss是全丢包,

3G这个就不用说了吧

DSL是电话线上网,

Edge是2G网络,

High Latency DNS是高延迟,

Very Bad Network是网络状况不稳定。

阿里云无影靠谱么?技术方案是什么?

prof · 205 天前 · 18023 次点击
这是一个创建于 205 天前的主题,其中的信息可能已经有所发展或是发生改变。
[#阿里巴巴发布*款云电脑#:“无影” 可线上无限扩容升级] 在阿里巴巴 2020 云栖大会上,阿里云智能总裁张建锋发布了*台云电脑“无影”。这是一台长在云上的“超级电脑”, 在本地没有主机,也看不见电脑 CPU 和硬盘,因为这些硬件设备都集中在云端的数据中心里。

电脑 可线 云栖 阿里巴巴186 条回复 • 2020-10-10 17:17:40 +08:00
1 2
2
❮ ❯
MaiKuraki 101
MaiKuraki 203 天前
知乎上全是水军啊,铺天盖地地刷
https://www.zhihu.com/question/421536150
这玩意儿和 vps 有啥区别?而且现在已经有很多商业化云电脑了,相当于云网吧,价格 3 到 5 元每小时,你觉得这个价格很便宜?
sunorg 102
sunorg 203 天前 via Android ❤️ 12
“无影” 潮汕话翻译成普通话就是没有的事。

可以退了。
a1478882500 103
a1478882500 203 天前 via iPhone
vps 一个道理
blogfeng 104
blogfeng 203 天前 via Android
这不就是某南大学的透明计算吗
echo314 105
echo314 203 天前 via iPhone ❤️ 1
跟技术员不要讨论什么商业模式,你不从中小企业角度、不从成本角度、不从性价比角度来分析可行性。那自然会得出与显示相差甚远的结论。
这种模式有局限性,但并非无用武之地,只要在它限定的场景下(主打中小团队办公)提供稳定可靠的商业价值,自然有人买单。
murmur 106
murmur 203 天前
@echo314 所以说这个是公有云还是私有云?公有云就逃不出内容审核,而且你去翻看各类云厂商的 EULA,各种免责条款等着你,无论多少个备份都要求用户有备份数据的义务。

至于私有云,我看不太现实,至少从宣传上。
Osk 107
Osk 203 天前 via Android ❤️ 1
这种云电脑,用途还是有的,并非一无是处。

为什么会被喷:和 5G 营销一样,看知乎上软文遍地,秒天秒地秒宇宙。拯救世界万物。

过了。

作为一个常年 rdp 回家的用户表示:不信忽悠。
rdp 协议总体来说不错了,起码比串流对网络要求低,然而,常常会出现不跟手的情况,偶尔网络不佳而你又急着办事儿时心态会爆炸的。

到*后,有时会把任何搞到本地来进行,本地计算机的性能也不能太弱了。

别把 5G 带进来,就 5G 现在这覆盖,这波动,我手机上远程进行 “透明计算” 难用到爆,5G 延迟小又如何?又不能一直保证这么低的延迟,快又如何,又不能保证一直这么快,随着 5G 用户越来越多,5G 也搞不定像 4G 那样被挤爆。

另外还有一个问题:隐私。
twl007 108
twl007 203 天前 via iPhone
不知道楼主知不知道一个词 瘦客户机
bookit 109
bookit 203 天前
你真买了,不知名攻击,买高防,一堆事情等着你付钱

什么业务都依赖它,你的公司也就是它能决定生死了。人家挖断一根光缆,你公司就关门歇业呗,连写个 word 都没办法了
echo314 110
echo314 203 天前 via iPhone
@murmur 现在不少公司就是用在线协作功能的,如果对自己的公司秘密那么在乎,那一切依赖他方的网络服务是不是要被打死?只要能建立信任,那就有人买单。至于数据安全的,备份必然不会缺席。

murmur 111
murmur 203 天前
@echo314 不是隐私,是关键字审查,你如果不审查,就有可能通过云电脑传播资源
acupnocup 112
acupnocup 203 天前 via iPhone
有多少人 RDP 回家的,给你一个稳定的网络环境、高配 PC 、永不停机,难道真的不需要吗?
murmur 113
murmur 203 天前
@acupnocup 因为稳定的网络环境很贵啊,电信宽带一个月都上百了,我就为了一个云电脑办一个电信宽带,然后我不买自己的电脑,我图的是啥呀
echo314 114
echo314 203 天前
@murmur #111 你想太多了,不通过公开网络分享到外界,不会有很严苛的审查的,但基本审查都会有的。基本审查比如儿童色情,哪个网络服务提供商都会做一定的审查的。
murmur 115
murmur 203 天前
@echo314 那除非阿里云提高准入门槛,比如说必须购买多少钱的产品,或者说凭多少人的营业执照才能申请,只要给个人开放,肯定有利用的口子
echo314 116
echo314 203 天前
@murmur #115 人家本来就是面向中小企业、工作室宣传的。。。至于会不会对个人提供服务,我不了解。。。经你这么说,可能不会吧。
T0m008 117
T0m008 203 天前
不就是个远程桌面么,网络质量差或者没网络的时候是硬伤。
hackerbus 118
hackerbus 203 天前
不是很清楚,应该还是可以的
murmur 119
murmur 203 天前
我总结下我的隐忧

1 、审查问题

2 、带宽,当你所有东西上云之后,真的是呼吸都要钱,首先高质量的企业宽带很贵,如果你是性能需求用户,想必要处理的东西也很大,以前你往电脑上拷贝几百 g,可以走 usbc,可以走雷电,也可以走千兆网,慢就慢点可以等,但是现在你用了云之后,这就成了上传了,如果你平时买的带宽不够,还得付弹性带宽的钱,等处理完,你还得下载回来,二次付费,如果你改的东西比较多,带宽就是个无底洞

3 、迁移问题,企业迁移不是只迁移电脑的,还要迁移内部系统,平时自己用垃圾东西多一点无所谓,加硬盘就可以了,现在你要按云标准收费,既然是上了别人的云,安全、堡垒机这些也少不了,等你用久了,签不回来的时候,人家就可以让你以各种理由添加套餐。

4 、*方便也是经济的,随时拥有一套键盘、鼠标、显示器的配置就是笔记本,现在你让我出差带个电脑棒,合着我还得满地找网吧?
murmur 120
murmur 203 天前
5 、云计算的本质盈利方式就是超售,赌并发不会同时来,比如白天生产力在搞创作,晚上大家开始打游戏,这样一份硬件摆成两份用,但是硬件的老化速度也在加倍,尤其是 cpu 和 gpu 同时高并发,供电也产生巨大热量,也会加快老化速度,那别人就只能加钱来弥补成本。同时,以前的云是有没有 qos 的用户的,比如学生机,打折机,高负载欺负他们就可以了,但是这次全是生产力用户,打游戏的可能比你花的钱还多,你欺负谁?*重要的是,并发可以预测,但是也有失算的时候,比如前几天,米哈游的塞尔达 pc 版上线,苹果和 nv 都开了发布会,我们假设打游戏的都用云电脑(实际上网易的云电脑已经崩了),创意者在通宵肝视频,你的错峰卖钱就失败了,这个时候你选择欺负谁呢
s2555 121
s2555 203 天前
@gaorenhua 没有那么贵,一个月 80 够我用了,还是香港的 VPS,本身我不需要多高配置,能开浏览器,用 notepad 和 ssh 就够了。因为我不上班的时候都不干活的,只是偶尔应急。
s2555 122
s2555 203 天前
@acupnocup 我要啊,我等着这个,以后就买个可以接鼠标键盘的大平板,或者用安卓电视远程爽歪歪。就不用带个笨重的笔记本了。
我想大家反感的原因是把远程桌面的概念炒成这样,这是以程序员的眼光看事情了。把他包装成一个新概念,能让更多人了解这个东西,才更容易推广开。
yuluo01 123
yuluo01 203 天前
拒*道德绑架,我爱国,但是我不看好。云电脑使用效果就是网速决定的,那么硬件就……
Rxianbei 124
Rxianbei 203 天前 via Android
@realpg 这其实是悖论,一个精通电脑的人一般都是电脑领域的专业工作者,他们不会满足于基本的办公需求
aru 125
aru 203 天前
对小微企业,一个笔记本+wps 共享文件不香么?
jones2000 126
jones2000 203 天前
买硬件对一个企业来说是固定资产,而且还能退税做账。
Leon6868 127
Leon6868 202 天前
等 3080 发布后,我要你这东西有何用?
nozer 128
nozer 202 天前
没卵用, 十年前就有人搞这玩意儿
airplayxcom 129
airplayxcom 202 天前 via iPhone
什么 无人驾驶落地啦?
ioiioi 130
ioiioi 202 天前
云桌面适合于企业用户,而且是那种集中式的,应用需求比较单一的场景,譬如多媒体教室,营业网点等。它强调的是统一的管理和可控。如果从单机来进行对比,云桌面电脑的初次投资是要高于个人电脑的。

不接受反驳,这是多个云桌面厂家一直的对我洗脑的话术。
yulihao 131
yulihao 202 天前
这大概就是 KVM 罢
realpg 132
realpg 202 天前
@Rxianbei #124
并不一定啊
只是有高级需求的爱嘚瑟而已
而且你可能自己就在需要密集 CPU 应用的工作场景的圈子而已
Rxianbei 133
Rxianbei 202 天前
你是不是觉得精通电脑的人都用 vim 敲代码?你精通电脑,需要工作吧。工作用的软件( adobe 系列,各种 ide )得更新的吧。这不用更高的性能加以处理?
xiadong1994 134
xiadong1994 202 天前 via iPhone
@locoz Geforce Now 想要 1080p 60hz 至少要 50mbps 带宽,不然会频繁卡顿,降画质
iceheart 135
iceheart 202 天前 via Android
1.个人用户有足够带宽,但是花同样的钱升级自己的硬件他不香么?
2.企业用户用云电脑,你是不了解企业的带宽有多贵!云电脑花钱,增加消耗的带宽花钱,然后还要把数据放到别家服务器上,图啥呢?发个笔记本给员工用,还能算公司固定资产,这不好么?

投食把鱼引来,再撒网捞鱼,阿里这套路用的也不是一次两次了。这次吃到鱼食的成本太高,食之无味,弃之不可惜,很难产生鱼群效应吧。
locoz 136
locoz 202 天前
@xiadong1994 #134 那是码率拉太高了,降低点不就好了…1080P 的话 20Mbps 码率就差不多够了
whypool 137
whypool 202 天前
其实就是抢赛道,赌一波 5G 起飞
当芯片性能达到物理*限的时候,未来一定是低功耗的芯片+云电脑

至少目前国内的 5g 肯定要起飞的,就看飞到什么高度,3-5 年应该有结果了

芯片的制程达到 3nm 应该是*限了,除非有新材料

电池能量密度估计有生之年难有突破,除非有新材料

现在有一定规模的企业,电脑是除了办公室租金之外的第二大重资产了,比如一个 1w 人的公司,全部标配 MBP+2K
显示器,就要 3w/人,总资产就是 3 亿(这只是说明电脑也属于重资产了,不要杠标配 MBP,只是举例)

如果未来有个终端,低功耗芯片+5G+显示屏+IO,借助云电脑可以突破芯片性能的物理*限
这个本地的瘦客户机,才有价值

按现有的 MBP 来设计,也就弄个名片大小一样的主板,只负责显示屏和 5G 数据,其他全是电池
用云电脑玩游戏估计 2 周不用充电吧
wiix 138
wiix 202 天前
@bzw875 光在光纤里是折线传播的,速度是光速的 2/3 。
需要交互的应用,延迟是双向的。
这样算下来每百公里 1 毫秒延迟。
mm2x 139
mm2x 202 天前
都买吧买吧 同事之间传个软件上传 2 小时全网都卡就要你命。。商宽那么贵。谁能给这玩意买单。。带宽才是大头。 公司要花钱搞商宽 还要花钱买云电脑 然后再买一遍带宽。谁用这玩意纯属发疯。
mm2x 140
mm2x 202 天前
那你知道这稳定网络你要付出多少钱嘛。。知道上传带宽有多贵嘛?你因为只买了个云计算资源?带宽才是更贵的大头。
visualbasic 141
visualbasic 202 天前 via iPad
居然有人说办公带宽几十 K 就够了,你上班不摸?的吗?就没有突发情况需要高带宽,这样几十人用一个百兆宽带还够?
darson 142
darson 202 天前
福报已经够辛苦了,连本地存小电影的能力都要被剥夺了。
gclm 143
gclm 202 天前 via Android
无影就是一台桌面云,但是作为一个桌面云的深度使用者来说,感觉桌面云就是一个坑,研发的 idea 等 jb 全家桶卡成翔。目前我们公司的桌面云目前市场占有率还是前几的,还这样是在不看好这玩意
murmur 144
murmur 202 天前
@whypool

×5g 起飞
√5g 降价

现在 80 多一个月的套餐才 20g 不到吧,够远程多久的,尤其是对于图像视频 3d 创作者,怕不是每分每秒都在看 1080p 甚至 2k 无损直播,而且这东西还不能走 cdn

然后上传一个 50g 的素材,哦豁,瞬间这个月工资给运营商了
murmur 145
murmur 202 天前
好像也没那么夸张,不过可以算一下 100g 的素材现在要多少钱才能传到服务器上
ccsexyz 146
ccsexyz 202 天前
猴为:比我还能吹,恐怖如斯
whypool 147
whypool 202 天前
@murmur 非要来杠,我说了是现在么?

5G 的小树苗才种下就要拿来当顶梁柱?

当初 5 元 30m 刷 wap 的时候有想过看直播短视频?

任何行业的试水都是值得鼓励的,v2 直接一个瘦客户端就拍死了,难道阿里的人都是蠢货?
v2 有几个摸鱼的摸进阿里出来喘口气

在高大上的办公室摸鱼吹空调,有想到过脚下的砖也是人搬来的么?
murmur 148
murmur 202 天前
@whypool 怎么讨论一下就是杠了,为什么那么多人只看到 5g 的未来看不到硬件的发展,5 元 30m 刷 wap 不假,那个年代也没人想到在手机上可以玩 3d 射击游戏,但是现在我们知道了,网络可以发展,硬件也可以发展啊,甚至硬件发展的更快一些(除了某个挤牙膏的外国电脑厂家)

现在 16+512+8c16t 的笔记本已经控制到 5000 档位了,这个本用个 5 年办公甚至 8 年都不成问题吧,我们公司的财会还在用 3 代 i5 呢,没给他们换 i5 之前,有人还是 G8400 这种垃圾电脑,都不知道多少年前的开发机淘汰下来的,这叫普通办公,这种低成本是云给的了的么。

阿里的人是不是蠢货我不知道,但是阿里的人包装东西忽悠人的却有一套,尤其是区块链上,知乎水军买的那叫一个多。

然后呢,阿里跟带宽有关的东西都不便宜,尤其是防护套餐,上云之后你肯定得买个堡垒机吧,然后带宽有多少,内部防护你得配吧,不配说你攻击其他机房的机器直接号都给 ban 了。有兴趣可以去看一下,阿里云固定 100m 的带宽一年多少钱,这个钱差不多只能够 20 个人流畅远程桌面吧,要求不高,1080p30fps 就可以。
ccsexyz 149
ccsexyz 202 天前
@whypool 这不是试水,这是把一个行之多年的旧东西搬出来吹牛逼忽悠人。早就大规模使用瘦客户机的猴为都放弃了,可见此路的确不通。
whypool 150
whypool 201 天前
@murmur
@ccsexyz
按现有场景,带宽流量瘦客户机确实是有硬伤,但也是局限于当前的网络和硬件环境
云电脑未来还是很有市场的
芯片有制程的天花板,摸到天花板也只是时间问题

流量计费从 MB 进化到 GB,以后进化到 TB,相信时间会更短
带宽从拨号到光纤,5g 说不定还能突破千 g 带宽

现在高配电脑导出一个 4k 片子,也要花几个小时,如果用云电脑,调用几千甚至几万的显示核心,导出 8K 片子估计只要几分钟,我只需要支付这几分钟使用高性能的开销就行,同理,我要上传一个 2TB 的拍摄素材,只需要支付 2TB 流量费用就行,给你 50 块钱 30TB 够不够用?不要以为 50 块 30TB 夸张,如果按 5 块 30m 来算,今天的流量要花多少钱?
shijingshijing 151
shijingshijing 201 天前
2020 年了,软件是越来越大,系统是越来越卡,无盘站、瘦客户机这种以前局域网都勉强才能应付的场景,现在居然还有人觉得 5G 魔该就能扛下这些玩意儿,现在搞技术的都太脱离底层了。
ccsexyz 152
ccsexyz 201 天前
@whypool 建议了解下服务端的带宽是怎么计费的,或许你就能想通了
xqtx 153
xqtx 201 天前 via Android
5g 没普及,远程网吧你确定受得了那个延迟?
ReallllQCloud 154
ReallllQCloud 201 天前
@murmur 人家吹的是云办公,又不是云游戏,阿里虽然一顿瞎吹,这里还是有点自知之明
ReallllQCloud 155
ReallllQCloud 201 天前
@MaiKuraki 是啊,真是恶心,还有水军说这个能节省 3A 游戏开发公司们好几亿开发成本。。。然后我喷了几句,被知乎禁言了
ReallllQCloud 156
ReallllQCloud 201 天前
@locoz 云游戏本来就是血亏啊,你逻辑思维有问题,不是有人搞就=赚钱
ReallllQCloud 157
ReallllQCloud 201 天前
@whypool 50 块钱 30TB ???按阿里云官网价格大陆流量定价,你只能买 63GB
Tink 158
Tink 201 天前
很多公司其实都已经在用了。。。。
murmur 159
murmur 201 天前
@ReallllQCloud 云办公的话那办公电脑更便宜了啊,而且内网系统上云也是需要成本的,云游戏实际上是云渲染、云设计的降级版,可以接受短时间排队不能使用,可以接受一些卡顿和画质劣化,不需要永久存储,不需要多少上传带宽。
ReallllQCloud 160
ReallllQCloud 201 天前
@murmur 上传很快的,云厂商一般都大几百 M,主要下载,50G 按流量计费 40 块钱,按带宽计费,看你开多大的水管,5M 得 100 块钱 /月
murmur 161
murmur 201 天前
@ReallllQCloud 不不不,我的意思是说办公的软件,比如说 oa,这些软件一般都缺少维护,设计遭烂,甚至是换个别的机器都起不来。比如我这机器有 500g 的附件,这都是几年前的陈旧文档,本地磁盘够大扔那就扔那长毛也就算了,上云的时候我还得挑出来哪些要迁移哪些不迁移,等等等等一堆问题。
ReallllQCloud 162
ReallllQCloud 201 天前
@murmur 升级版吧,云游戏实时性、独占性要求太高了,比这云办公、云渲染还不靠谱 N 倍
ReallllQCloud 163
ReallllQCloud 201 天前
@murmur 你这还是上传场景(对云服务器来说是下载),下载不限速(大几百 M )也不收费,没必要挑
locoz 164
locoz 201 天前
@ReallllQCloud #156 血亏是因为没铺开,导致成本没摊薄。这种需要投入资金部署的东西本来就不是一开始就能赚钱的,如果一开始就能赚钱那也不叫投资、布局了。
locoz 165
locoz 201 天前
@ReallllQCloud #157 他说的是以后,而且说的是运营商给用户的蜂窝网络流量,不是说机房流量。
jousca 166
jousca 201 天前
@ioiioi 你说对,这东西是固定场景使用比较合适,比如就是开个网页或者跑个什么固定程序之类的。大量高发数据传输是不合适的。比如渲染个几个 G 的高清视频,下载成品和上载素材那都是能把网络拖死的。
jousca 167
jousca 201 天前
@shijingshijing 主要是没有能忽悠客户的话题了,又把十多年前的 NET PC 套上 5G 的新包装拿来炒冷饭
jousca 168
jousca 201 天前
@terence4444 我记得,天猫盒子删程序,直接退货了,买了海美迪盒子……哈哈哈
jousca 169
jousca 201 天前
@Tink 我这边用过深信服的私有云主机,客户反映还是卡。主要是网速瓶颈。总不能全部配万兆交换机把。问题是我就是上了万兆,服务器的成本又翻 N 翻了,还不如本地机。而且服务器你要做灾备。不做的话,出现问题数据丢光损失更惨重。
xiadong1994 170
xiadong1994 201 天前
@locoz 再低就基本不要想玩游戏了,画质太拉胯
lmmortal 171
lmmortal 201 天前 via iPhone
一个电脑棒,键盘鼠标要自备 显示器要自备 而且云电脑不便宜 那为什么不直接背个笔记本电脑?要说云电脑用个 Intel 电脑棒 自己开个 vps,rdp 上去他不香吗?而且没有隐私问题
jimmy3780 172
jimmy3780 201 天前
我比较关心的是我在上面逛 YouTube 用 Google 滑 Twitter 会不会被抓 ❀?
soulzz 173
soulzz 201 天前
商业宽带这么贵还想发展起来?
开玩笑吧
看看谷歌的网络 1Gbps 商业上下行对等 $250/mo 13 个固定 IP
对比下国内的商宽价格,真的没法比
abc0123xyz 174
abc0123xyz 201 天前
到时候像百度云一样,不充钱 1 核 215M 内存 1Mbps 带宽,然后远程限制 360p 分辨率。
xwhxbg 175
xwhxbg 201 天前
没想到 v2 的很多老司机用云服务还是停留在把云服务当个远程虚拟主机这个级别,看了一下大家的言论,可能 elb+container 这种组合是完全没用过的,用的还是租 EC2 然后自己搭 nginx,五台服务器就得五个公网 IP 。

讲道理云服务器没公网 IP 的情况下是比自己组台式机要便宜的,EC2 贵不是因为服务器贵,是公网 IP 和带宽贵,而阿里的这个无影是完全不需要公网 IP 的,几百台服务器完全可以公用一个入口,价格可以压得很低。

就像某些老哥说的,这个东西*大的问题是隐私,如果阿里不审核用户上传的文件内容,分分钟就会变成 pornhub,如果审核,用户就不会想用。

第二个问题是远程桌面的码率和速度问题,这个跟网络速度有关,也许过两年主干网络提速到可以支持,也许阿里可以通过超发包的形式降低延迟,总之目前使用确实是不太靠谱,但是也不是一无是处。
zhangyangkam1 176
zhangyangkam1 201 天前
这种东西不都是面向生产力吗,人家演示也是进行各种画面渲染,为啥都往什么服务器和游戏机上套。对于那些买不起好电脑又需要高算力的人挺好的吧,想拿来打游戏估计会延迟感人。
lmmortal 177
lmmortal 201 天前 via iPhone
@zhangyangkam1 画面渲染有显卡农场吧,其他密集计算有云计算,可选还很多
no1xsyzy 178
no1xsyzy 201 天前
再谈个会计的内容
发台电脑算固定资产投资,资产负债表同时加一份减一份没影响,成本靠年度折旧,6 年后后折到 3% 还能继续用 10 年。
用个云电脑算支出,资产负债表只减一份,不好看。
locoz 179
locoz 201 天前
@xiadong1994 #170 不至于,1080P@60 20Mbps 就能获得很舒服的画面了,拉高码率并不会产生太大的差距,还不如把分辨率拉到 4K…实测过的。
locoz 180
locoz 201 天前
@lmmortal #171 不一样的,无影不是纯粹的云电脑
locoz 181
locoz 201 天前
@abc0123xyz #174 不至于,百度云是普惠型,会员也卖不了多少钱,而且不管免费还是会员都是一样的烧钱,所以只能限制免费用户。
但无影这种不一样,它生态部分可以很赚钱,而低端的云电脑反正也吃不了多少资源,压根就无所谓,甚至直接免费给用都是可以的。
locoz 182
locoz 201 天前
@xwhxbg #175 隐私问题其实和云服务器差不多,愿意用的就用,不愿意用的也没办法。
网络方面其实大可不用担心,根本不是问题 hhh,带宽占用和延迟都是早已有成熟解决方案的东西了。
walkerwzy 183
walkerwzy 200 天前
价格出来了吗?
morphyhu 184
morphyhu 197 天前
就是桌面虚拟化。
initd 185
initd 196 天前
远程连接也是要求终端的, 这手机 平板这屏幕尺寸, 这输入设备, 妥妥没戏.
用电脑连接, 都电脑了还云桌面?
scriptsboy 186
scriptsboy 181 天前
阿里应该还是基于 KVM 搞的虚拟化,这个去年就已经在进行了。不奇怪了,普通的低级公司只能搞搞假的虚拟云桌面,阿里的这个架构才是真正的云桌面。

Git 【Mac 系统下搭建本地 Git 服务器】

一、准备原料

① jdk

下载地址:jdk

② gitblit

下载地址:gitblit.com

二、配置

jdk 直接安装即可。

gitblit 需要进行一些小配置:

① 解压下载好的 gitblit 文件,我这里的版本为 1.8.0。

%title插图%num

② 配置本地 Git 服务器仓库存储数据的根目录。

打开文件 ~/gitblit-1.8.0/data/defaults.properties

修改本地 Git 服务器仓库根目录:

git.repositoriesFolder = GitRepository
我这里用的文件夹名称为 GitRepository。

修改 HTTP 协议端口号:

server.httpPort = 1234
这里可以随便自定义一个不重复的端口号。保存。

③ 启动 gitblit 服务。

./gitblit.sh

你会看到如下命令行输出:

1 wangzhongyao:gitblit-1.8.0 wangzhongyao$ ./gitblit.sh
2 2017-11-02 16:09:50 [INFO ]
3   _____  _  _    _      _  _  _
4  |  __ \(_)| |  | |    | |(_)| |
5  | |  \/ _ | |_ | |__  | | _ | |_
6  | | __ | || __|| ‘_ \ | || || __|  http://gitblit.com
7  | |_\ \| || |_ | |_) || || || |_   @gitblit
8   \____/|_| \__||_.__/ |_||_| \__|  1.8.0
9
10 2017-11-02 16:09:50 [INFO ] Running on Mac OS X (10.13)
11 2017-11-02 16:09:50 [INFO ] Logging initialized @389ms
12 2017-11-02 16:09:55 [INFO ] Using JCE Standard Encryption Policy files, encryption key lengths will be limited
13 2017-11-02 16:09:55 [INFO ] Setting up HTTPS transport on port 8443
14 2017-11-02 16:09:55 [INFO ]    certificate alias = localhost
15 2017-11-02 16:09:55 [INFO ]    keyStorePath   = /Users/wangzhongyao/Desktop/gitblit-1.8.0/data/serverKeyStore.jks
16 2017-11-02 16:09:55 [INFO ]    trustStorePath = /Users/wangzhongyao/Desktop/gitblit-1.8.0/data/serverTrustStore.jks
17 2017-11-02 16:09:55 [INFO ]    crlPath        = /Users/wangzhongyao/Desktop/gitblit-1.8.0/data/certs/caRevocationList.crl
18 2017-11-02 16:09:55 [INFO ] Setting up HTTP transport on port 20202
19 2017-11-02 16:09:55 [INFO ] Shutdown Monitor listening on port 8081
20 2017-11-02 16:09:55 [INFO ] jetty-9.2.13.v20150730
21 2017-11-02 16:09:56 [INFO ] NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
22 2017-11-02 16:09:57 [INFO ]
23 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IRuntimeManager]—-
24 2017-11-02 16:09:57 [INFO ] Basefolder  : /Users/wangzhongyao/Desktop/gitblit-1.8.0/data
25 2017-11-02 16:09:57 [INFO ] Settings    : /Users/wangzhongyao/Desktop/gitblit-1.8.0/data/gitblit.properties
26 2017-11-02 16:09:57 [INFO ] JVM timezone: Asia/Shanghai (CST +0800)
27 2017-11-02 16:09:57 [INFO ] App timezone: Asia/Shanghai (CST +0800)
28 2017-11-02 16:09:57 [INFO ] JVM locale  : zh_CN
29 2017-11-02 16:09:57 [INFO ] App locale  : <client>
30 2017-11-02 16:09:57 [INFO ]
31 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.INotificationManager]—-
32 2017-11-02 16:09:57 [WARN ] Mail service disabled.
33 2017-11-02 16:09:57 [INFO ]
34 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IUserManager]—-
35 2017-11-02 16:09:57 [INFO ] ConfigUserService(/Users/wangzhongyao/Desktop/gitblit-1.8.0/data/users.conf)
36 2017-11-02 16:09:57 [INFO ]
37 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IAuthenticationManager]—-
38 2017-11-02 16:09:57 [INFO ] External authentication disabled.
39 2017-11-02 16:09:57 [INFO ]
40 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.transport.ssh.IPublicKeyManager]—-
41 2017-11-02 16:09:57 [INFO ] FileKeyManager (/Users/wangzhongyao/Desktop/gitblit-1.8.0/data/ssh)
42 2017-11-02 16:09:57 [INFO ]
43 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IRepositoryManager]—-
44 2017-11-02 16:09:57 [INFO ] Repositories folder : /Users/wangzhongyao/Desktop/gitblit-1.8.0/GitRepository
45 2017-11-02 16:09:57 [INFO ] Identifying repositories…
46 2017-11-02 16:09:57 [INFO ] 1 repositories identified with calculated folder sizes in 166 msecs
47 2017-11-02 16:09:57 [INFO ] Lucene will process indexed branches every 2 minutes.
48 2017-11-02 16:09:57 [INFO ] Garbage Collector (GC) is disabled.
49 2017-11-02 16:09:57 [INFO ] Mirror service is disabled.
50 2017-11-02 16:09:57 [INFO ] Alias ‘UTF8’, UTF-9 & UTF-18 encodings as UTF-8 in JGit
51 2017-11-02 16:09:57 [INFO ] Preparing 14 day commit cache. please wait…
52 2017-11-02 16:09:57 [INFO ]   cached 1 commits for Git/CoderZYWang.git:refs/heads/master
53 2017-11-02 16:09:57 [INFO ] built 14 day commit cache of 1 commits across 1 repositories in 16 msecs
54 2017-11-02 16:09:57 [INFO ]
55 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IProjectManager]—-
56 2017-11-02 16:09:57 [INFO ]
57 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IFederationManager]—-
58 2017-11-02 16:09:57 [INFO ]
59 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.tickets.ITicketService]—-
60 2017-11-02 16:09:57 [INFO ] NullTicketService started
61 2017-11-02 16:09:57 [INFO ]
62 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IGitblit]—-
63 2017-11-02 16:09:57 [INFO ]
64 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IServicesManager]—-
65 2017-11-02 16:09:57 [INFO ] Federation passphrase is blank! This server can not be PULLED from.
66 2017-11-02 16:09:57 [INFO ] Fanout PubSub service is disabled.
67 2017-11-02 16:09:57 [INFO ] Git Daemon is listening on 0.0.0.0:9418
68 2017-11-02 16:09:57 [INFO ] SSH Daemon (NIO2) is listening on 0.0.0.0:29418
69 2017-11-02 16:09:57 [INFO ]
70 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IFilestoreManager]—-
71 2017-11-02 16:09:57 [INFO ] No filestore metadata file found
72 2017-11-02 16:09:57 [INFO ]
73 2017-11-02 16:09:57 [INFO ] —-[com.gitblit.manager.IPluginManager]—-
74 2017-11-02 16:09:57 [INFO ] PF4J version 1.8.0 in ‘deployment’ mode
75 2017-11-02 16:09:57 [INFO ] Enabled plugins: []
76 2017-11-02 16:09:57 [INFO ] Disabled plugins: []
77 2017-11-02 16:09:57 [INFO ] No plugins
78 2017-11-02 16:09:57 [INFO ]
79 2017-11-02 16:09:57 [INFO ] All managers started.
80 2017-11-02 16:09:57 [INFO ]
81 2017-11-02 16:09:58 [INFO ] [GitBlitWebApp] init: Wicket core library initializer
82 2017-11-02 16:09:58 [INFO ] [GitBlitWebApp] init: Wicket extensions initializer
83 2017-11-02 16:09:58 [INFO ] [GitBlitWebApp] Started Wicket version 1.4.22 in deployment mode
84 2017-11-02 16:09:58 [INFO ] Started o.e.j.w.WebAppContext@4e3a6f94{/,file:/Users/wangzhongyao/Desktop/gitblit-1.8.0/data/temp/webapp/,AVAILABLE}{file:/Users/wangzhongyao/Desktop/gitblit-1.8.0/gitblit.jar}
85 2017-11-02 16:09:58 [INFO ] Started ServerConnector@725746c{SSL-HTTP/1.1}{0.0.0.0:8443}
86 2017-11-02 16:09:58 [INFO ] Started ServerConnector@67f7fd0{HTTP/1.1}{0.0.0.0:20202}
87 2017-11-02 16:09:58 [INFO ] Started @8927ms

此时表示 Git 本地服务器仓库建立连接,你可以用服务器 IP + 端口号来访问:

%title插图%num

要注意的是,启动 gitblit.sh 服务的终端不要关闭,保持长连接,这样才可以持续访问 gitblit 本地服务器。

三、测试

我们可以直接在自己电脑上去拉取我们自己电脑作为 Git 服务器的 Git 仓库,如下:

%title插图%num

如此, 基于 Gitblit 的本地 Git 服务器搭建完毕。

要注意的是,虽然我们向自建本地 Git 服务器仓库提交代码。但是在我们本地服务器也是进行了加密处理过的。所以是看不到详细内容的。

具体提交的加密内容在 objects 文件夹下可以看到。而分支可以在 refs/heads 文件夹下查看。如下图:

%title插图%num

%title插图%num

iOS 【OC 封装网络请求业务类(AFHTTPSessionManager)】

由于AFNetworking底层请求由NSURLConnection更新为NSURLSession,管理者对象也由AFHTTPRequestOperationManager更新为AFURLSessionManager。

本文重点讲述如何封装AFN业务类,将第三方为程序带来的污染减小到*低。

读者可以结合老版本AFHTTPRequestOperationManager的封装去理解,具体请参考:

iOS 【network-封装业务类AFNetworking(AFHTTPRequestOperationManager 废弃)】

代码描述:
① 封装业务类

1 //
2 //  WZYAFNTool.h
3 //  0716-02AFN上传下载GETPOST-01
4 //
5 //  Created by 王中尧 on 16/7/16.
6 //  Copyright © 2016年 wzy. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10 @class AFNetWorking;
11
12 @interface WZYAFNTool : NSObject
13
14 + (void)get:(NSString *)url parameters:(id)params success:(void (^)(id object))success failure:(void (^)(NSError *error))failure;
15
16 + (void)post:(NSString *)url parameters:(id)params success:(void (^)(id object))success failure:(void (^)(NSError *error))failure;
17
18 + (void)unload:(NSString *)uploadUrl parameters:(id)params filePath:(NSString *)filePath name:(NSString *)name progress:(void (^)(NSProgress *))progress success:(void (^)(id object))success failure:(void (^)(NSError *))failure;
19
20 + (void)download:(NSString *)url progress:(void (^)(NSProgress *progress))progress destination:(NSURL *(^)(NSURL *targetPath, NSURLResponse *response))destination failure:(void (^)(NSURLResponse * response, NSURL * filePath, NSError * error))failure;
21
22 @end

 

 

1 //
2 //  WZYAFNTool.m
3 //  0716-02AFN上传下载GETPOST-01
4 //
5 //  Created by 王中尧 on 16/7/16.
6 //  Copyright © 2016年 wzy. All rights reserved.
7 //
8
9 #import “WZYAFNTool.h”
10 #import “AFNetworking.h”
11
12 @implementation WZYAFNTool
13
14 + (void)get:(NSString *)url parameters:(id)params success:(void (^)(id object))success failure:(void (^)(NSError *error))failure {
15
16     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
17
18     [manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
19
20         if (success) {
21             success(responseObject);
22         }
23
24     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
25
26         if (failure) {
27             failure(error);
28         }
29
30     }];
31 }
32
33 + (void)post:(NSString *)url parameters:(id)params success:(void (^)(id object))success failure:(void (^)(NSError *error))failure {
34
35     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
36
37     [manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
38
39         if (success) {
40             success(responseObject);
41         }
42
43     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
44
45         if (failure) {
46             failure(error);
47         }
48
49     }];
50 }
51
52 + (void)unload:(NSString *)uploadUrl parameters:(id)params filePath:(NSString *)filePath name:(NSString *)name progress:(void (^)(NSProgress *progress))progress success:(void (^)(id object))success failure:(void (^)(NSError *error))failure {
53
54     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
55
56     [manager POST:uploadUrl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
57
58         /*
59          *个参数:要上传的文件的URL
60          第二个参数:后台接口规定
61          第三个参数:错误信息
62          */
63         [formData appendPartWithFileURL:[NSURL fileURLWithPath:filePath] name:name error:nil];
64     } progress:^(NSProgress * _Nonnull uploadProgress) {
65
66         if (progress) {
67             progress(uploadProgress);
68         }
69
70     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
71
72         if (success) {
73             success(responseObject);
74         }
75
76     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
77
78         if (failure) {
79             failure(error);
80         }
81
82     }];
83 }
84
85 + (void)download:(NSString *)url progress:(void (^)(NSProgress *progress))progress destination:(NSURL *(^)(NSURL *targetPath, NSURLResponse *response))destination failure:(void (^)(NSURLResponse * response, NSURL * filePath, NSError * error))failure {
86     // 1 创建会话管理者
87     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
88
89     // 2 创建请求路径 请求对象
90     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
91
92     // 3 创建请求下载操作对象
93     NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
94
95         if (progress) {
96             progress(downloadProgress);
97         }
98
99     } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
100
101         if (destination) {
102             return  destination(targetPath, response);
103         } else {
104             return nil;
105         }
106     } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
107         if (failure) {
108             failure(response, filePath, error);
109         }
110     }];
111
112     // 4 执行任务发送下载操作请求
113     [downTask resume];
114 }
115
116 @end

 

② 调用

1 //
2 //  ViewController.m
3 //  0716-02AFN上传下载GETPOST-01
4 //
5 //  Created by 王中尧 on 16/7/16.
6 //  Copyright © 2016年 wzy. All rights reserved.
7 //
8
9 #import “ViewController.h”
10 #import “AFNetworking.h”
11
12 #import “WZYAFNTool.h”
13
14 @interface ViewController ()
15
16 @end
17
18 @implementation ViewController
19
20 – (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
21     // 使用AFN原生方法
22 //    [self getAFN];
23 //    [self postAFN];
24 //    [self upload];
25 //    [self download];
26
27     // 使用WZYAFNTool业务类
28 //    [self wzyGET];
29 //    [self wzyPOST];
30 //    [self wzyUpload];
31 //    [self wzyDownload];
32 }
33
34 // AFN GET请求
35 – (void)getAFN {
36
37     // 1 封装会话管理者
38     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
39
40     // 2 拼接请求参数
41     NSDictionary *dict = @{
42                            @”username” : @”xxx”,
43                            @”pwd” : @”xxx”,
44                            @”type” : @”JSON”
45                            };
46     // 3 发送请求
47     /*
48      *个参数:请求路径(!不包含参数) 类型是NSString
49      以前:http://120.25.226.186:32812/login?username=xxx&pwd=xxx&type=JSON
50      现在:http://120.25.226.186:32812/login
51      第二个参数:参数(用字典来保存参数)
52      第三个参数:progress 进度回调
53      第四个参数:success成功之后的回调
54      responseObject:注意此参数是响应体(内部已经完成了反序列化处理:JSON—>OC,此处类型为id,也就是OC对象)
55      task.response:响应头
56      第五个参数:failure 失败之后的回调
57     */
58     [manager GET:@”http://120.25.226.186:32812/login” parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
59
60         NSLog(@”success—%@—%@”, responseObject, [responseObject class]);
61     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
62         NSLog(@”failure—%@”, error);
63     }];
64
65 }
66 // WZYAFNTool GET请求
67 – (void)wzyGET {
68     NSDictionary *dict = @{
69                            @”username” : @”xxx”,
70                            @”pwd” : @”xxx”,
71                            @”type” : @”JSON”
72                            };
73
74     [WZYAFNTool get:@”http://120.25.226.186:32812/login” parameters:dict success:^(id object) {
75         NSLog(@”success—%@”, object);
76     } failure:^(NSError *error) {
77         NSLog(@”error—%@”, error);
78     }];
79 }
80
81
82 // AFN POST请求
83 – (void)postAFN {
84     // 1 封装会话管理者
85     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
86
87     // 2 拼接请求参数
88     NSDictionary *dict = @{
89                            @”username” : @”xxx”,
90                            @”pwd” : @”xxx”,
91                            @”type” : @”JSON”
92                            };
93     // 3 发送请求
94     /*
95      *个参数:请求路径(!不包含参数) 类型是NSString
96      以前:http://120.25.226.186:32812/login?username=xxx&pwd=123&type=JSON
97      现在:http://120.25.226.186:32812/login
98      第二个参数:参数(用字典来保存参数)
99      第三个参数:progress 进度回调
100      第四个参数:success成功之后的回调
101      responseObject:注意此参数是响应体(内部已经完成了反序列化处理:JSON—>OC,此处类型为id,也就是OC对象)
102      task.response:响应头
103      第五个参数:failure 失败之后的回调
104      */
105     [manager POST:@”http://120.25.226.186:32812/login” parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
106
107         NSLog(@”success—%@—%@”, responseObject, [responseObject class]);
108     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
109         NSLog(@”failure—%@”, error);
110     }];
111 }
112 // WZYAFNTool POST请求
113 – (void)wzyPOST {
114     NSDictionary *dict = @{
115                            @”username” : @”xxx”,
116                            @”pwd” : @”xxx”,
117                            @”type” : @”JSON”
118                            };
119     [WZYAFNTool post:@”http://120.25.226.186:33122/login” parameters:dict success:^(id object) {
120         NSLog(@”success—%@”, object);
121     } failure:^(NSError *error) {
122         NSLog(@”error—%@”, error);
123     }];
124 }
125
126
127 // AFN 上传
128 – (void)upload {
129     // 1 创建请求者对象
130     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
131
132     // 2 发送POST请求上传数据文件
133     NSDictionary *dict = @{@”wzy” : @”wangzhongyao”};
134
135     /*
136      *个参数: 请求路径
137      第二个参数: 非文件参数 (字典)
138      第三个参数: constructingBodyWithBlock 处理上传的文件
139      第四个参数: progress 进度回调
140      第五个参数: success 成功之后的回调
141      responseObject 响应体
142      第六个参数: failure 失败之后的回调
143      */
144
145     [manager POST:@”http://120.25.226.186:31112/upload” parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
146
147         /*
148          *个参数:要上传的文件的URL
149          第二个参数:后台接口规定
150          第三个参数:错误信息
151          */
152         [formData appendPartWithFileURL:[NSURL fileURLWithPath:@”/Users/wangzhongyao/Desktop/Snip20160716_17.png”] name:@”file” error:nil];
153     } progress:^(NSProgress * _Nonnull uploadProgress) {
154
155         // 上传进度
156         NSLog(@”unload — %f”, 1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
157
158     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
159
160         //JSON—>OC 反序列化
161         NSLog(@”响应体 — %@”,responseObject); // responseObject 响应体 在方法内部就反序列化成功
162     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
163
164         // 输出错误信息
165         NSLog(@”%@”, error);
166     }];
167 }
168 // WZYAFNTool 上传
169 – (void)wzyUpload {
170     NSDictionary *dict = @{@”wzy” : @”wangzhongyao”};
171
172     [WZYAFNTool unload:@”http://120.25.226.186:32812/upload” parameters:dict filePath:@”/Users/wangzhongyao/Desktop/Snip20160716_17.png” name:@”file” progress:^(NSProgress *progress) {
173
174         // 上传进度
175         NSLog(@”unload — %f”, 1.0 *progress.completedUnitCount / progress.totalUnitCount);
176     } success:^(id object) {
177
178         //JSON—>OC 反序列化
179         NSLog(@”响应体 — %@”,object); // responseObject 响应体 在方法内部就反序列化成功
180     } failure:^(NSError *error) {
181
182         // 输出错误信息
183         NSLog(@”%@”, error);
184     }];
185
186 }
187
188
189 // AFN 下载
190 – (void)download {
191
192     /*
193      *个参数: 请求对象
194      第二个参数: progress进度回调
195      第三个参数: destination URL处理的回调
196                targetPath:文件下载到沙盒中的临时路径
197                response:响应头信息
198      返回值: 告诉AFN文件应该剪切到什么地方
199      第四个参数: completionHandler完成之后的回调
200                filePath:就是文件的*终保存位置
201      */
202
203     // 1 创建会话管理者
204     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
205
206     // 2 创建请求路径 请求对象
207     NSURL *url = [NSURL URLWithString:@”http://www.bz55.com/uploads/allimg/150326/140-150326141213-50.jpg”];
208     NSURLRequest *request = [NSURLRequest requestWithURL:url];
209
210     // 3 创建请求下载操作对象
211     NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
212
213         // 计算进度
214         NSLog(@”downloading — %f”, 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
215
216     } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
217
218         // 获得文件下载保存的全路径
219         NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
220         NSLog(@”fullPath — %@, tmpPath — %@”, fullPath, targetPath); // 打印需要修改的全路径 & 临时路径
221
222         // 该方法会拼接上协议头 file:// 成为一个完整的URL,而URLWithString不会自动拼接协议头
223         return [NSURL fileURLWithPath:fullPath]; // 该block是有返回值的,返回文件剪切保存的路径
224
225     } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
226         NSLog(@”filePath — %@”, filePath);
227     }];
228
229     // 4 执行任务发送下载操作请求
230     [downTask resume];
231 }
232 // WZYAFNTool 下载
233 – (void)wzyDownload {
234     [WZYAFNTool download:@”http://www.bz55.com/uploads/allimg/150326/140-150326141213-50.jpg” progress:^(NSProgress *progress) {
235
236         // 计算进度
237         NSLog(@”downloading — %f”, 1.0 * progress.completedUnitCount / progress.totalUnitCount);
238
239     } destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
240
241         // 获得文件下载保存的全路径
242         NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
243         NSLog(@”fullPath — %@, tmpPath — %@”, fullPath, targetPath); // 打印需要修改的全路径 & 临时路径
244
245         // 该方法会拼接上协议头 file:// 成为一个完整的URL,而URLWithString不会自动拼接协议头
246         return [NSURL fileURLWithPath:fullPath];
247
248     } failure:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
249
250         NSLog(@”filePath — %@”, filePath); // filePath — (null)
251
252     }];
253 }
254
255 @end

 

如何彻底销毁 KVM 的服务器上的数据?

naoh1000 · 188 天前 · 5252 次点击
这是一个创建于 188 天前的主题,其中的信息可能已经有所发展或是发生改变。
DD 成 Windows 的大盘机不小心同步了好多身份证之类的敏感数据下来,吓得我赶紧下了个 Eraser 抹盘,但是石头盘抹起来太慢了。请问 KVM 的机器不抹的话有可能被下一个用户恢复出来吗?

kvm 大盘机 eraser VPS24 条回复 • 2020-10-07 21:46:25 +08:00
lpts007 1
lpts007 188 天前 via Android ❤️ 2
没事,中国人愿意用一些隐私换取便利。

已经泄露给你了,再泄露给下一个人又有什么呢
opengps 2
opengps 188 天前 via Android
云硬盘本身就是虚拟硬盘,而且是基于 raid 等方案之上的
下一个用户的硬盘并不是完整的用你的那部分物理区域,能恢复的概率*低
FS1P7dJz 3
FS1P7dJz 188 天前 ❤️ 1
下一个用户的虚拟硬盘,在软件层面上也是一个”全新”的硬盘

恢复软件工作原理是”删除”动作只是将文件标记为”删除”,因此才有恢复的可能
下一个用户的虚拟硬盘,从分区到文件系统都是全新的,并不存在上一个用户的数据

能够对你 VM 进行数据恢复的只可能是管理员
FS1P7dJz 4
FS1P7dJz 188 天前
如果对管理员也不放心
那么开启 windows 的 bitlocker 功能,全盘加密,输入一个 16 位以上大小写数字混合密码,在全盘加密完成后,关机
删除 VM
理论上已无恢复可能
lmmortal 5
lmmortal 188 天前 via iPhone
@FS1P7dJz 全盘 bitlocker 加密是需要 bios 支持的,不知道云计算能不能搞
MaiKuraki 6
MaiKuraki 188 天前
去找到哪家云计算公司,物理消灭硬盘
starsriver 7
starsriver 188 天前 via Android
kvm 数据很难恢复。。不必担心
kerro1990 8
kerro1990 188 天前
开启硬盘加密就行了,不然肯定是可以恢复的
Hallujah 9
Hallujah 188 天前 via Android ❤️ 1
基本不可能有人会选择恢复,而且下一个人的分配扇区分几乎不可能刚好是你存文件的那一部分。。。
no1xsyzy 10
no1xsyzy 187 天前
@FS1P7dJz 恢复软件是底层读块找文件特征啊
只有回收站和 unix 下进程保留算软删除(进程保留可以从 /proc/$PID/fd 里找出来),所有数据恢复软件都要求*时间锁硬盘写,避免后续的写覆盖被删除的文件。

访问层级只到文件系统的情况下恢复软件是不可能工作的。

ntgeralt 11
ntgeralt 187 天前
据我所知,下三滥 vps 都会 1-2s 随机填零

首先楼主可以说说你用哪家 kvm,还能偏偏不保存垃圾文件,而是身份证,然后还能同步回来,挺故事
patx 12
patx 187 天前
用大文件填满磁盘
FS1P7dJz 13
FS1P7dJz 187 天前
@lmmortal bitlocker 与 BIOS 无关,我猜你说的可能是 TPM 硬件,但是这个可以修改组策略跳过,虽然会略微降低安全性,但是在大部分情况下也是足够安全

@no1xsyzy 我描述不算准确,实际上删除也看文件系统,所以快速扫描情况下只需要几秒钟分析硬盘文件系统就能找到被删除的文件,如果文件系统里也被删除,那么才会需要你说的那种全盘扫描匹配了.
总体而言,新的虚拟硬盘对于用户来说就是一个新的”物理硬盘”
kangsheng9527 14
kangsheng9527 187 天前 ❤️ 1
@lpts007 大多数农村人没啥电脑技术,跟不知道自己隐私会被人拿去收割摘瓜。。。
不是他们愿意用隐私换便利,而是他们不知道偷拍、隐私类居然可以用来赚钱的。。。就是没防范意识而已。。。
lpts007 15
lpts007 187 天前
@kangsheng9527 *句话其实是李彦宏说的。
我还想质疑一下楼主的这些敏感数据是哪里来的呢,不过有可能是网上爬来的呢,关我屁事,我自己的数据还不知道躺在几个硬盘上呢。
ysc3839 16
ysc3839 187 天前 via Android
@lmmortal #5 不需要 BIOS 支持。你说的可能是不需要输入密码自动解密,这是依赖 TPM 的,而不是 BIOS 。手动输入密码的话不需要其他硬件支持。
lmmortal 17
lmmortal 187 天前 via iPhone
@ysc3839 操作系统盘加密记得以前提示是需要主板有 tpm 模块的
@FS1P7dJz *次听说可以组策略跳过?
ryd994 18
ryd994 187 天前 via Android ❤️ 1
1. bitlocker 就是为了防这种事情的。哪怕没有 tpm 也有价值。
2. 如果是 VPS,那不好说储存是怎么分配怎么重用的。如果是云,基本没可能。云服务器储存后端是储存服务,而不是本地的硬件。使用的时候是写入才分配空间。直接读取会读到 0,因为实际空间没有分配过。

比起下一个用户,你更需要担心平台本身。云服务器的虚拟盘,后端储存基于分布式储存系统。为了保证分布式一致性和性能,逻辑上当作单次写入来设计的。你在虚拟机里的覆写操作靠 copy on write 实现,写到了另一个位置,然后更新块索引指向新位置。

理论上旧的块还存在于底层设备上。直到 gc 任务回收这些空间。因为块索引变了,没有块索引的话理论上没有其他人能读取或解析这些数据。

当然风险和担忧还是存在的。所以 gpdr 规定了多少天后必须保证 gc 能清理掉用户删除的数据。

bitlocker 在这种情况下还是有用的。因为储存的是加密数据。除非平台方蓄意窥探你的内存,否则数据是安全的。
no1xsyzy 19
no1xsyzy 187 天前
@FS1P7dJz 快速扫描如果我没记错的话是扫描未被覆写的 metadata 。
目前好像没有哪个文件系统会做软删除吧,只是基本都不作主动覆写罢了。
软删除通常应当保证以任意方式使用硬盘文件并不会导致文件丢失,至少数据库软删除标记是这个意思,之后无论如何往数据库填充内容不会导致数据库的这条记录被清除。
flynaj 20
flynaj 187 天前 via Android
gcp 所有硬盘都是加密的,这就是差距。
JamesR 21
JamesR 187 天前
大文件填满磁盘,这是已经是*快的办法了。
JavaIO 22
JavaIO 186 天前
彻底销毁回收站中包年包月云硬盘的方法: https://curl.qcloud.com/n8BXFXBu
tadtung 23
tadtung 186 天前 via Android
kvm 虚拟化,你删除重建后,就相当于走完删除外加重新写入过程了。都重新写入了,自然没法恢复了,除非主机上给你景象备份。
qzy168 24
qzy168 184 天前
都重建了,不用管的。要么就联系机房,物理销毁硬盘。

SQL 列转行的实现

–列转行,逗号拼接指定列的值

SQL Server中写法:
SELECT STUFF(( SELECT  ‘,’ + Field1 from TableA FOR XML PATH(”)), 1, 1, ”)

Oracle中写法:

方法一:wmsys.wm_concat
select wmsys.wm_concat(Field1) from TableA

方法二:LISTAGG()

2.1、LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)

用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来

 1 with temp as(
 2   select 'China' nation,'Beijing' city from dual union
 3   select 'China' nation,'Shanghai' city from dual union
 4   select 'China' nation,'Guangzhou' city from dual union
 5   select 'USA' nation,'New York' city from dual union
 6   select 'USA' nation,'Bostom' city from dual
 7 )
 8 select nation,listagg(city,',') within group(order by city)
 9 from temp
10 group by nation;

2.2、over(partition by XXX)

在不使用Group by语句时候,使用LISTAGG函数(当作SUM()函数来使用)

1 with temp as(
2   select 'China' nation,'Beijing' city from dual union
3   select 'China' nation,'Shanghai' city from dual union
4   select 'China' nation,'Guangzhou' city from dual union
5   select 'USA' nation,'New York' city from dual union
6   select 'USA' nation,'Bostom' city from dual
7 )
8 select nation,city,listagg(city,',') within group(order by city) over(partition by nation) rank
9 from temp;

 

IOS 开发 AFNetworking 网络工具-网络请求的三次封装 OC版

NetworkTool.h
亲测可用,能正常获取数据(已后台返回的json数据作为测试的)

1 //
2 //  NetworkTool.h
3 //
4 //  Created by zhouyu on 16/10/25.
5 //  Copyright © 2016年 mac All rights reserved.
6 //
7
8 #import <Foundation/Foundation.h>
9 #import <AFNetworking/AFNetworking.h>
10
11
12 typedef enum{
13     requestTypeGET,
14     requestTypePOST
15 }requestType;
16
17 @interface NetworkTool : AFHTTPSessionManager
18
19 //单例
20 + (instancetype)shareNetworkTool;
21
22 //*次封装参数比较多,比较长
23 – (void)requestWithType:(requestType)type URLString:(nonnull NSString *)URLString parameters:(nullable id)parameters progress:(nullable void (^)(NSProgress *_Nonnull downloadProgress))downloadProgress success:(nullable void (^)(NSURLSessionDataTask *_Nullable task, id _Nullable responseObject))success
24                 failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *_Nonnull error))failure;
25
26 //第二次封装,简化参数,把没有用的progress参数去掉
27 – (void)requestWithType:(requestType)type URLString:(nonnull NSString *)URLString parameters:(nullable id)parameters success:(nullable void (^)(id _Nullable responseObject))success  failure:(nullable void (^)(NSError *_Nonnull error))failure;
28
29 //第三次封装,直接使用类方法,外部调用单例都不用创建
30 + (void)requestWithType:(requestType)type URLString:(nonnull NSString *)URLString parameters:(nullable id)parameters success:(nullable void (^)(id _Nullable responseObject))success  failure:(nullable void (^)(NSError *_Nonnull error))failure;
31 @end

NetworkTool.m

1 //
2 //  NetworkTool.m
3 //
4 //  Created by zhouyu on 16/10/25.
5 //  Copyright © 2016年 mac All rights reserved.
6 //
7
8 #import “NetworkTool.h”
9
10 static NetworkTool *instance;
11
12 @implementation NetworkTool
13
14 + (instancetype)shareNetworkTool {
15     static dispatch_once_t onceToken;
16     dispatch_once(&onceToken, ^{
17         instance = [[NetworkTool alloc]init];
18         //  让AFN默认也支持接收text/html文件类型
19         instance.responseSerializer.acceptableContentTypes
20         = [NSSet setWithObjects:@”application/json”, @”text/json”, @”text/javascript”, @”text/html”,@”text/plain”, nil];
21     });
22     return instance;
23 }
24
25 //MARK: 一次封装的网络工具类
26 – (void)requestWithType:(requestType)type URLString:(NSString *)URLString parameters:(nullable id)parameters progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
27                 failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure{
28     if (type == requestTypeGET) {
29         [instance GET:URLString parameters:parameters progress:downloadProgress success:success failure:failure];
30     } else if (type == requestTypePOST) {
31         [instance POST:URLString parameters:parameters progress:downloadProgress success:success failure:failure];
32     }
33 }
34
35 //MARK: 二次封装的网络工具类
36 – (void)requestWithType:(requestType)type URLString:(nonnull NSString *)URLString parameters:(nullable id)parameters success:(nullable void (^)(id _Nullable responseObject))success  failure:(nullable void (^)(NSError *_Nonnull error))failure{
37     //(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
38     void (^orginalSuccess)(NSURLSessionDataTask * _Nullable, id  _Nullable) = ^(NSURLSessionDataTask * _Nullable task, id  _Nullable responseObject) {
39 //        success((NSDictionary *)responseObject);
40         success(responseObject);
41     };
42     //(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure
43     void (^orginalFailure)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull) = ^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
44         failure(error);
45     };
46     [self requestWithType:type URLString:URLString parameters:parameters progress:nil success:orginalSuccess failure:orginalFailure];
47 }
48
49 //MARK: 三次封装的网络工具类
50 + (void)requestWithType:(requestType)type URLString:(nonnull NSString *)URLString parameters:(nullable id)parameters success:(nullable void (^)(id _Nullable responseObject))success  failure:(nullable void (^)(NSError *_Nonnull error))failure {
51     [[NetworkTool shareNetworkTool] requestWithType:type URLString:URLString parameters:parameters success:success failure:failure];
52 }

项目实测

1 //网络请求
2 – (void)addNetworkData {
3     NSString *URLString = [NSString stringWithFormat:@”%@”,BaseURLString];
4
5     NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@”token”];
6
7     NSDictionary *parameters = @{
8                                  @”token”:token
9                                  };
10     //使用第三次封装的类方法–类名直接调用,简洁明了
11         [NetworkTool requestWithType:requestTypePOST URLString:URLString parameters:parameters success:^(id  _Nullable responseObject) {
12     ZYLog(@”%@”,responseObject);
13     } failure:^(NSError *_Nonnull error) {
14
15     }];
16 }

ZYLog(@”%@”,responseObject);的输出结果

%title插图%num

 

1 // MARK: 弹框
2 – (void)sendUIAlertControllerWithTitle:(NSString *)title message:(NSString *)message {
3     UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
4     [self presentViewController:alert animated:YES completion:^{
5         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
6             [alert dismissViewControllerAnimated:YES completion:nil];
7         });
8     }];
9 }

调用*次封装的效果

1 [[NetworkTool shareNetworkTool] requestWithType:requestTypePOST URLString:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nullable task, id  _Nullable responseObject) {
2 //处理返回的json
3
4 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
5 [self sendUIAlertControllerWithTitle:@”用户信息获取失败” message:@”网络延迟/系统繁忙”];
6 }];

调用第二次封装的效果

1     [[NetworkTool shareNetworkTool] requestWithType:requestTypePOST URLString:URLString parameters:parameters success:^(id  _Nullable responseObject) {
2
3         //返回的数据处理
4     } failure:^(NSError * _Nonnull error) {
5         [self sendUIAlertControllerWithTitle:@”用户信息获取失败” message:@”网络延迟/系统繁忙”];
6     }];

关于端口转发速率的疑问

nowjust · 187 天前 · 3448 次点击
这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。
请教下各位大牛,我有一台国内的 nat vps,我试过直接从 vps 上通过 scp 或 wget 的方式下载欧洲的服务器里的资源,速率可以达到 7-8M/s 。我在本地通过 scp 方式下载 nat vps 的资源,速率可达到 10M 。 可是通过 nat vps 上设置的端口转发方式,从本地下载欧洲的服务器里的资源*多只有 3M/s,我先怀疑是不是转发工具性能的问题,但我先后试了 socat 、haproxy 、realm 、firewalld 等多种转发工具,发现速度还是超不过 3m/s,这是怎么回事呢?端口转发会有这么大的损耗吗?大牛们有遇到过吗?谢谢!

VPS NAT 大牛 scp23 条回复 • 2020-10-08 11:37:58 +08:00
ericbize 1
ericbize 187 天前 via iPhone
bbr 试一下
nowjust 2
nowjust 187 天前
nat vps 和欧洲服务器都装了
heiher 3
heiher 187 天前 via Android
试试用户态转发,不是直接包转发。
laminux29 4
laminux29 187 天前
1.监视一下整个 vps 的对于每条链接的传输速度,来排查一下是不是端口转发造成损耗。

举个例子,vps 到你家里的链路传输速度为 5MB/s,但实际数据速度只有 1MB/s,那就相当于损耗了 4MB/s 的数据。

这种数据损耗的原因有很多,比如这种端口转发协议比不上直接 scp,或者端口转发协议被 gfw 或运营商识别了,等等。

2.分别测试:
欧洲服务器-vps

vps-你家

欧洲服务器-vps-你家

三种模式的延迟。我觉得问题应该卡在这里了。出现这种问题的可能原因,要不是端口转发程序的内部 bug 或业务逻辑导致产生延迟,要不是协议对这种端口转发模式支持不好造成了延迟。

3.无论是以上哪种问题,建议都别做端口转发了,做存储转发。
vszs 5
vszs 187 天前
运营商 qos 的可能比较大
flynaj 6
flynaj 187 天前 via Android
试试 gost
nowjust 7
nowjust 187 天前
@flynaj 谢谢,试过了,效果更差
nowjust 8
nowjust 187 天前
@vszs 两段的单独连接都没有问题,应该与 QOS 关系不大
nowjust 9
nowjust 187 天前
@laminux29 感谢分析,我来试一试延迟情况。另外,我在 nat 上用 iftop 做了个监测,从监测情况看,欧服到 nat 段的速率总要比 nat 到本地的速率慢个 1-200k,感觉像是欧服到 vps 段的速度限制了整个转发速率。
nowjust 10
nowjust 187 天前
@heiher 有什么现成的工具可以使用吗?

heiher 11
heiher 187 天前 via Android
@nowjust nginx stream proxy 应该也可以
nowjust 12
nowjust 187 天前
@heiher 试了 nginx,稍微好一点点,和 haproxy 差不多
nowjust 13
nowjust 187 天前
@laminux29 不知存储转发有没有现成的工具呢,还是需要自己造轮子?谢谢!
flynaj 14
flynaj 187 天前
@nowjust #7 用 kcp 协议 直接来!
mepwang 15
mepwang 186 天前 via iPhone
好像通用 Linux 转发效率本身就不高,绕过操作系统协议栈的用户态转发速度快很多,比如基于 DPDK 的包转发工具
vduang 16
vduang 186 天前 via Android
端口转发没这么大损耗。做转发的时候实际占用带宽是你下载速度的 2 倍,所以你的 vps 下行速度已经达到 6m 了,可能已经接近带宽限制了。另外 dns 解析到的 ip 也可能影响下载速度,换成直接用 ip 去 wget 试试
kangsheng9527 17
kangsheng9527 186 天前
只要能重现问题就能找出问题甚至解决问题。。。
luguiyao 18
luguiyao 186 天前
也可以尝试 nginx 反代
alect 19
alect 186 天前
这种情况下,虽然你只有 3M,但中转服务器的速率是 3+3,上下行一起跑的
nowjust 20
nowjust 185 天前
@vduang @alect nat 机是上下行分别限速的,所以还没有达到带宽限制。这两天经过反复折腾,发现应该是 scp 协议的锅,至于是被 QoS 还是协议缺陷就不知道了,后来更换了其它协议,速度就能上升到 7-8M 了,下次有人遇到类似情况也可以考虑更换协议试试。感谢各位大牛
vduang 21
vduang 185 天前 via Android
@nowjust 换成啥协议了,是基于 udp 的协议吗?
epson3333 22
epson3333 184 天前
开锐速脱胎换骨
nowjust 23
nowjust 184 天前
@vduang 不是,换成基于 HTTP 的协议了

python爬虫–验证码、cookie

python爬虫–验证码、cookie

文章目录
python爬虫–验证码、cookie、代理
基本知识
古诗文网验证码识别
代码
模拟古诗文网登陆
python爬虫–验证码、cookie、代理
基本知识
模拟登陆:

爬取基于某些用户的用户信息

点击登陆按钮之后发起post请求

post请求中会携带登陆之前录入的相关登陆信息(用户名,密码,验证码。。。)

Cookie

http/https协议特性:无状态。

没有请求到对应页码数据的原因:

发起第二次基于个人主页的页面请求的时候,服务器端并不知到本次请求是基于登陆状态下的请求。

Cookie:用来让服务器端记录客户端的相关状态

手动处理:

通过抓包工具获取Cookie值,将该值封装到headers中

自动处理:

session会话对象:

1.可以进行请求的发送
2.如果请求过程中产生了cookie,则cookie会被自动存储/携带在该Session对象中
操作步骤:

1.创建一个session对象:session = requests.Session()
2.使用sess ion对象进行模拟登录post请求的发送( cookie就会被存储在session中)
3.session对象对个人主页对应的get请求进行发送(携带了cookie)
古诗文网验证码识别
https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

代码
Classcjy

import requests
from hashlib import md5

class Chaojiying_Client(object):

def __init__(self, username, password, soft_id):
self.username = username
password = password.encode(‘utf-8’)
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
‘user’: self.username,
‘pass2’: self.password,
‘softid’: self.soft_id,
}
self.headers = {
‘Connection’: ‘Keep-Alive’,
‘User-Agent’: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)’,
}

def PostPic(self, im, codetype):
“””
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
“””
params = {
‘codetype’: codetype,
}
params.update(self.base_params)
files = {‘userfile’: (‘ccc.jpg’, im)}
r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php’, data=params, files=files, headers=self.headers)
return r.json()

def ReportError(self, im_id):
“””
im_id:报错题目的图片ID
“””
params = {
‘id’: im_id,
}
params.update(self.base_params)
r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php’, data=params, headers=self.headers)
return r.json()

主程序

%title插图%num

import requests
from lxml import etree
from Classcjy import Chaojiying_Client

def getCodeText(imgPath):
chaojiying = Chaojiying_Client(‘azb123 ‘, ‘azb123’, ‘914332’) # 用户中心>>软件ID 生成一个替换 96001
im = open(imgPath, ‘rb’).read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
img_code = chaojiying.PostPic(im, 1902)[‘pic_str’]
return img_code

if __name__ == ‘__main__’:
url = ‘https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
img_url = ‘https://so.gushiwen.cn/’+tree.xpath(‘//*[@id=”imgCode”]/@src’)[0]
img_data = requests.get(url=img_url,headers=headers).content
with open(‘./Code.jpg’,’wb’) as fp:
fp.write(img_data)
img_code = getCodeText(‘./Code.jpg’)
print(img_code)

模拟古诗文网登陆
import requests
from lxml import etree

if __name__ == ‘__main__’:
#通过Session对象记录获取cookie
session = requests.Session()
login_url = ‘https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
#获取登录页面,并建立etree对象
page_text = session.get(url=login_url,headers=headers).text
tree = etree.HTML(page_text)
#使用xpath解析验证码图片地址、动态属性
img_url = ‘https://so.gushiwen.cn/’+tree.xpath(‘//*[@id=”imgCode”]/@src’)[0]
viewstate = tree.xpath(‘//*[@id=”__VIEWSTATE”]/@value’)[0]
viewstategenerator = tree.xpath(‘//*[@id=”__VIEWSTATEGENERATOR”]/@value’)[0]
#将验证码图片存储本地
img_data = session.get(url=img_url,headers=headers).content
with open(‘./Code.jpg’,’wb’) as fp:
fp.write(img_data)
# 提示用户输入验证码
img_code = input(‘请输入验证码:’)
data = {
‘__VIEWSTATE’: viewstate,
‘__VIEWSTATEGENERATOR’:viewstategenerator,
‘from’:’http://so.gushiwen.cn/user/collect.aspx’,
’email’: ‘注册邮箱’,
‘pwd’: ‘密码’,
‘code’: img_code,
‘denglu’: ‘登录’,
}

#post请求模拟登陆
index = session.post(url=login_url, headers=headers, data=data)
detial_url = ‘https://so.gushiwen.cn/user/collectbei.aspx?sort=t’
detial_text = session.get(url=detial_url,headers=headers).text
with open(‘index.html’, ‘w’, encoding=’utf-8′) as fp:
fp.write(detial_text)

效果图

%title插图%num

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