Nitro's

Nov 12, 2015 - Comments - dev

Linux Shell (1)-基础、文件、监控进程

0) 脚本文件 # 为注释行shell不处理,但第一行#!/bin/bash为特例,标示着采用何种shell运行 `` 将内部命令行的执行结果赋值 > 输出重定向,覆盖 >> 输出重定向,追加 < 输入重定向 << 指定一个结束符,并以此结束符结束输入 | 管道符 exit 退出状态  0 命令完成  1 未知错误  127 无法找到命令  130 Ctrl+C终止 1) shell 提示符由变量PS1、PS2控制,通过格式符可以进行定制:PS1=”\h\t\w$” Ubuntu中的sh默认指向为dash而非bash,这个需要注意。 2) ls -R 文件以及文件夹缩略信息 -l 文件类型+权限+硬链接数+所属用户+所属组+大小+修改时间+名字 dr–r–r–: 1:文件类型 d目录、-文件、c字符设备、b块设备、l链接、n网络设备 rwx分别为读、写、执行权限 2-4: 针对文件所有者 5-7: 针对用户组成员 8-10:针对其他任何人 -i 显示文件索引号 -S 按大小排序、ls -X按扩展名排序 3) **touch ** 除了新建文件还可以修改文件信息,比如时间戳 4) cp -r 递归复制文件 -R 递归复制文件夹 -p 保留文件属性 -l 在同一挂载点下创建硬连接(索引号一致) -s 创建软连接

Oct 27, 2015 - Comments - tech internet

博客正式启动HTTPS服务

博客从今天开始正式迁移至HTTPS服务,虽然国内各种阻挠SSH登录,但还是配置好了。 COMODO Positive SSL+Apache Httpd2.4+Wordpress配置,抽空详细写一下这个过程,在G面前你不得不用各种奇怪的办法曲线救国,实属无奈~ 环境:Ubuntu+Apache httpd+Wordpress 写一下具体的步骤: 1、选择SSL证书类型 namecheap上列出了四家证书注册商。以Comodo为例,它提供多达14个类型的证书,证书的差别在是否为单证书认证单域名、单证书认证多级域名,单证书认证多二级域名,多域名认证以及担保金额差异、服务支持差异、是否显示Trust Logo、128bit或者256bit加密区别等等。对于个人博客网站可能只需要单二级域名或者单三级域名的SSL认证,所以使用PositiveSSL、PositiveSSL Wildcard是最佳选择,如果是企业支付、电子商务服务就需要更高级别的SSL证书,nitrohsu.com使用的是PositiveSSL,价格上也是Comodo中最便宜的每年10刀。 2、生成CSR(Certificate Signing Request) 使用OpenSSL生成,键入: openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr 需要输入请求的相关认证信息, Country Name (2 letter code) [CN]—国家代码 State or Province Name (full name) [Some-State]—省、自治区名称 Locality Name (eg, city) []—城市名称 Organization Name (eg, company) [Internet Widgits Pty Ltd]—公司名称 Organizational Unit Name (eg, section) []—组织名称 Common Name (e.g. server FQDN or YOUR name) []—完整域名 Email Address []—联系邮箱

Jul 9, 2015 - Comments - internet life

善始善终

微信微博慢慢占据了我们的琐碎时间,当夜晚下公交车不小心撞到前面妹子时,自己才突然发现,原来我没有抬头看前面的路。两个月的加班,5、6月在“996”模式中安全度过,7月在疲惫与心累中存活下来,是该找个时间休息一下了。 上周关系不错的一个同事离职,满心欢喜,一个新的起点,一个新的开始,结果换来的是BOSS可怕的压制与阻挠,因为新公司与我们公司为兄弟公司,BOSS们之间的某些关联,导致他最后也没能进入那家公司。当听到这个消息时还是特别惊愕,一来公司如果好心相留,那便和平分手,以后业务往来也会更加顺畅;二来自己的未来职业规划,作为一个前任公司应该是祝福而不是背后下黑刀,而且还是兄弟公司,业务线与经营范围根本不冲突,不存在竞业关系,俗话说的好:肥水不留外人田,可真到这一步,无论是HR还是BOSS,做出这个决定真是让每个人都感到心寒与惧怕。也希望同事尽早找到心仪的工作。 到现在为止,自己也经历了满满4年的职业之路,历经4家公司,从济南到北京,从传统IT到互联网。当谈到互联网这个行业,非同行都会对我们高频度的跳槽感到困惑与不解,哈哈。其实说到骨子里谁都不想离职,每个人都想追求安逸的环境与稳定的工作,但有时却是事与愿违,你要么继续忍受下去,你要么改弦更张换份工作。当然也不排除“被离职”的可能,对于刚刚毕业工作还没3个月的人来说,经历这样的一场突变,也算是给我的上了一次职场课堂。第一家公司是当时毕业设计导师介绍去的,电力行业,在济南软件行业也算可以,导师带团队,从开始实习就一直呆在公司,毕业顺理成章留在了公司。但事情总在流动中变化,不久就接到了软件团队面临解散的消息,果不其然,先是我们两个年轻人被离职,再是老同事主动出走,直到导师也离职,其他团队也开始解散。在经历了这一波离职潮后大家再聚首,发现之前的很多同事都已经慢慢离开了。就是这一次我才明白,工作没有永久的,你要自己把握一切。 第二份工作还是在济南,虽然没第一家公司规模大,但业务还算可以,这一做就是1年半。从C语言开发、出差运维到Android转身,这一年半既改变了我的工作方向,也改变了我的职业思维。当初毕业有的同学选择了iOS开发、有的选择了先找一份工作,也有的转行从事了销售,但我依然坚守在自己所认为有前途的后端基础性研发,因为我相信基础服务虽然门槛高需求少,但是它相比前端更具有挑战性,无论是对Linux C网络编程还是WEB开发,此时我对于Android还只是停留在爱好与好奇的层面。有几个同学毕业之后直接选择北上,来北京发展,虽然毕业之时思考过这个问题,但最终还是没有给自己一个十足的理由选择北京,也许和家庭环境有关吧。从正式接手公司第一个Android应用开始,那才算正式开始走上Android之路。第一个单机应用成功上线并部署到两个试点机房,第二个正式调研开发上线应用,到此这才算是对自己Android开发的认可与阶段性里程碑,虽然多少出现一些偏差,但整体还是按照自己的路线在走。2013年经历过川藏骑行之后,愈发感觉在济南的Android开发将会有诸多受限,而且接触的知识面与业务线没有那么丰富,而且需求比较狭窄,此时开始催生我人生第一次离职的想法。在临走之前的一个月,找了一个时间和老板坐下来聊了聊当下公司的现状、公司的发展以及公司的问题,虽然我已准备离职,但是作为一个自己呆了将近2年的公司,感情放在今天依然在,我希望美好的事情发生,公司越走越远,发展越来越好。当你想要离开的时候才发现那么多的不舍与依恋,看着自己一手开发的应用上线、开放下载,自己内心除了喜悦还有那份自豪,真的好比是自己的孩子。当孩子长大了,或许也就是我要离开的时间了,在又接手了另外一个项目行将结尾时我走近了老板的办公室,正式提出了离职。没有遗憾,没有缺憾,自己尽力做到了自己能做的工作,一切祝好。 第二周启程北京,川藏、离职、家庭、婚姻、压力,或许这一切才真正促成了我的北京之旅。北京算是除了老家、济南,来过次数最多的城市,但它对我依然陌生,因为它变化太大了,曾经打工的微软研发大厦早已竣工入住,就连周边也已换了模样。幸好好哥们在这里能够接济一下,暂时免于居住之困。顺利入职第三家公司也算是偶然,去哥们公司拿东西巧遇老板,恰巧公司正在考虑发展Android业务,一拍即合。理想的丰满都免不了面对现实的骨感,在经历了两个项目的开发之后,公司依然处于招人的状态,让我一个光杆司令一做就是半年,此时的我才发现有些事情尽力做好但你无法苛求完美,我能够面试到合适的人选,但公司无法满足面试者的薪资要求,公司对于学历的苛刻却又将能力渴求的人拒之门外,这就是现实。在经历了半年的波折之后,毅然提出辞职,虽然老板尽力挽留,但无意在此继续耗费时间,只能就此作别,相互祝好。 在来北京之前就职目标就是互联网行业,所以最新的工作也就奔着这个方向去了,但碰壁在所难免,二进百度再次被拒绝,当然自己也承认技术不够全面,问到的技术问题有些难以驾驭。后来再面试了几次才来到当下这家公司-酒类电商。虽然每天上班远了一些但还是自己喜欢的职业与方向,没有改变初心… 每次的离职都要面对工作交接、各种签字、同事告别,虽然感伤但无遗憾,幸运于自己选择了正确的时间做了正确的事情。 勿忘初心,尽求完美~

Jul 1, 2015 - Comments - internet tech

Burp Suite简明教程及代理配置

What Is Editions Preconditions Tutorial One: Host Binding Tutorial Two: SSL Pass Tutorial Three: Proxy Config Proxy-Windows Config Proxy-OS X Config Proxy-Android Config Proxy-iOS Config Proxy-Windows Phone What Is WEB攻击工具? 网络爬虫? 漏洞检测工具? 代理服务器? 冷兵器? 这些它都可以完成,功能的区别在于内心的底线,你懂得! Editions Free Edition包含部分功能,对一般开发测试人员完成可以完成工作:HTTP代理服务、解码工具、HTTP包分析、站点地图等; Professional Edition包含所有功能,包括Free Edition的站点扫描、重放攻击、站点分析、任务调度、访问请求响应缓存等。PS:坐等土豪出手200刀购买一套,求试用。 Preconditions 中文乱码问题: “Options”Tab页->”Display“二级Tab页->“HTTP Message Display”->“Change font”->修改为支持中文的系统字体,Windows用户建议“Microsoft Yahei”,Mac建议修改为“Roboto”或者“STIXIntegralIsSm”。 中文界面 目前没有很好的汉化版,还请适应英文界面,? Tutorial One: Host Binding 测试、线上环境的切换一般是通过绑定HOST来完成,BurpSuite通过修改本机DNS解析结果来实现这一功能。

May 5, 2015 - Comments - tech dev

PHPStorm配置Debugger模式

开发环境: MacOS+PHPStorm Httpd2.4+PHP5.5+MySQL5.6 机器已经安装MySQL5.6、使用Mac原生PHP5.5,由于原生httpd权限各种问题,直接通过brew全新安装。 1、安装Apache Httpd 2.4 brew install httpd24 brew会自动查询依赖关系,下载相关依赖包。在下载过程中可能会遇到apr不存在但又没有下载的情况,通过 //首先升级当前brew brew update //更新brew中的依赖关系包 brew upgrade //诊断当前问题所在 brew doctor 诊断过程中可能会出现某些依赖包已经安装但是并没有关联到brew中,使用 brew link XXX(包名) 此时可能会由于权限问题,无法读写/usr/local目录,但是brew又不建议使用root用户来link,此时要修改/usr/local的所有权来解决这个问题, sudo chown -R whoami /usr/local 一切顺利httpd24就能下载完成。 安装包默认目录 /usr/local/Cellar/http24/2.x.x/ 配置文件默认目录 /usr/local/etc/apache2/2.4/ 2、配置Httpd 打开/usr/local/etc/apache2/2.4/httpd.conf 配置Module: 添加 LoadModule php5_module /usr/libexec/apache2/libphp5.so 此处的libphp5.so的位置为Mac原生PHP5的mod路径,如果额外安装的话需要做相应的修改。 解注释: LoadModule session_module libexec/mod_session.so LoadModule rewrite_module libexec/mod_rewrite.so 以及其他要用到的mod。 修改DocumentRoot到你的工程目录下: DocumentRoot “/Users/PhpstormProjects/xxx” 这样修改后期就可以免于映射麻烦。 brew安装的httpd默认开启8080端口,如果特殊需求,在此一并修改完成。 执行apachectl configtest检查httpd配置,成功后重启服务apachectl restart。 3、Zend Debugger配置 从Zend官网下载Zend Debugger,解压,根据PHP版本将ZendDebugger.so放置在服务器可以访问的路径下,例如/usr/local/Cellar/http24/2.x.x/。  更改php.ini,当前使用的Mac原生PHP,此时文件位于/etc/php.ini 添加以下内容:

May 4, 2015 - Comments - tech dev

Android Studio编译NDK工程

由于现在的开发都是基于AS的,但是当前AS对NDK的支持还不是特别完善,再切换ADT略显别扭,简单根据NDK文档写了一个Gradle脚本,来调用NDK ENV来编译。 目前的脚本仅能实现对*.c的编译,对NativeActivity的支持还不是特别完善。 主要分为3个步骤: 1)NDK编译链环境检查 2)编译 3)迁移编译后so文件、清理文件夹 //新建NDK compile任务 task compileNDK << { // TAG String TAG = ":" + project.getProject().name + ":ndk:" // Check NDK environment Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') if (ndkDir == null) { System.err.println("ndk not found,please set (ndk dir) in local.properties") System.exit(-1) } else { println TAG + ndkDir // NDK build command String NDK_CMD = ndkDir + "/ndk-build" // NDK target project path def env = ["NDK_PROJECT_PATH=${project.

Apr 18, 2015 - Comments - tech dev hot

Android Gradle相关浅析

开发环境:Mac OS(10.10)+Android Studio(1.0) Android Studio(下称“AS”)目前在安装包中已经集成了Gradle的编译运行时环境,安装完成后会在AS的gradle文件夹下。 在介绍Gradle前,先看一下AS创建工程与导入工程的过程分析: 1、AS create project: AS在创建new project时会根据$Android_SDK_HOME/tools/lib/templates/projects下的模版创建默认project,依次创建Intellij Project Structure、Launcher Icon以及AndroidMainfest.xml,同时拷贝gradle wrapper(settings.gradle、build.gradle、gradle wrapper文件夹、gradlew)环境,此时android project的结构已经有了,但是还没有包含Gradle运行时环境的定义,下一步就是将$Android_SDK_HOME/tools/lib/templates/gradle中的内容复制到Android Project中,至此一个完整的Android Application+Gradle编译运行时环境就构建完成了。 2、AS import project: AS在导入时会先检查导入的工程根目录是否含有settings.gradle\build.gradle,如果有,可以确定是一个gradle编译工程,再寻找是否含有gradle文件夹,这个文件夹下默认是gradle wrapper的描述文件(gradle-wrapper.properties\gradle-wrapper.jar),如果文件缺失或者不完整会弹出如下对话框: 同时第二个选项就说明了此工程下不存在gradle wrapper,第三选项是开发者自己指定本地的gradle运行时环境,但这样不好,因为当多人协作开发时不能保证gradle版本的一致性,所以首选还是使用gradle wrapper方式,在创建完工程提交版本管理时一定要将gradle文件夹添加到版本中,这样可以保证Gradle编译环境的一致,以免造成混乱。 不管是创建新工程还是导入工程, 1)如果选择使用外部Gradle那么这个工程的编译可以脱离AS直接编译打包,只要配置好GRADLE_HOME就OK; 2)如果选择使用gradle wrapper方式这个工程的编译就会交给AS来代理托管,简单说我们无须关注gradle的安装位置、依赖库缓存路径等等,只需要通过AS集成的Gradle插件就可以编译维护工作。后者比较简单尤其是对初学者来说,更加关注代码而不是编译环境的配置,其实AS的代理托管是将gradle下载放置在当前用户文件夹下的.gradle文件夹下,在这个文件夹下wrapper/dist/能够找到在工程wrapper中定义的版本的gradle编译运行时环境,其次这里还缓存了一系列的maven库缓存。 Gradle编译脚本使用Groovy,大部分的封装函数和使用方法可以参考官方文档 另外还有一些不错的文章: http://tech.meituan.com/mt-apk-adaptation.html http://zhengxiaopeng.com/2015/02/02/%E4%BD%BF%E7%94%A8Gradle%E5%8F%91%E5%B8%83%E9%A1%B9%E7%9B%AE%E5%88%B0JCenter%E4%BB%93%E5%BA%93/

Apr 18, 2015 - Comments - dev internet

浅析宽带运营商劫持

今天请求公司主站裸域会导致莫名奇妙的跳转到yiqifa.com然后再跳转回www域的诡异问题,清理Cookies、更换DNS均无效,郁闷!在公司群里讨论了一下大概可以锁定为宽带运营商劫持,由于之前安装了Wireshark也没怎么用,正好出现类似问题,使用HTTP抓包工具分析再好不过了。关闭大部分的可能产生网络连接的软件,Start&Action! 去掉正常的请求响应包,锁定到302请求,依次向下查看,果然发现了一些猫腻。截图如下: 96号 百度HM请求包61.135.185.140 URL:http://hm.baidu.com/h.js?ca88bf7b092f300a228b2c153a0a9fc8 97号 百度HM响应包61.135.185.140 HTTP 302 Location=http://122.141.234.60:51234/bdpop.sl.php?http://hm.baidu.com/h.js?ca88bf7b092f300a228b2c153a0a9fc8 当浏览器302跳转上述地址时响应Cookie里面增加了一个DIANSHANG=54 100号 跳转URL请求包122.141.234.60 URL:http://122.141.234.60:51234/bdpop.sl.php?http://hm.baidu.com/h.js?ca88bf7b092f300a228b2c153a0a9fc8 103号TCP超时快速重传包61.135.185.140 HTTP 304 106号跳转URL响应包122.141.234.60 HTTP 200 window.location=‘http://p.yiqifa.com/n?k=2mLErn2OWE3lrI6H2mLErI6H6ljqWmLm6lwLWN6HWl3FWNtsrI6HkQLErnWLWlDO39MErBXpgZUfgmL-&e=c&t=http://www.wangjiu.com'; 117号浏览器加载上述Location请求包 我们所看到的劫持发生在96号请求包和97号响应包之间,大致过程如下: 1)浏览器将/h.js的请求(96号)发送到百度; 2)宽带运营商嗅探到这个请求后,会将百度的302响应进行篡改,然后转发至用户浏览器(97号),与此同时对百度TCP连接的响应直接给予超时处理; 3)此时真正的响应(来自百度)可能还未到达用户。这就导致了百度服务器认为响应没有送达用户浏览器-发起TCP快速重传(103号),但是用户浏览器在这个过程已经确认收到响应(来自宽带运营商); 4)根据响应结果,浏览器触发302跳转,然后就是我们所看到的先跳转yiqifa.com(117号)然后yiqifa将它的CPSID带上再跳转回主站(后续包)。

Apr 10, 2015 - Comments - life music

恋恋小事

从初中到大学每届运动会总有出现自己的身影但又不没站在领奖台上,好像最好名次也是第八名,每次开始跑我都下定决心一定要紧盯着前三名以免被他们落下太多。当站在起跑线上时除了紧张还是紧张,生怕错过发令枪啪一声的几个毫秒,幸好参加的多是长跑,对于抢跑规则的检查不是特别严格,看过100米短跑的就能感受到当裁判吹抢跑哨时郁闷,明明万事俱备了结果又来一个制造紧张气氛的。发令枪一响,运动员加速前进同时拼命的向内道聚拢抢占有利位置,十七八个人一块跑都要去挣50cm的内道,摩擦与碰撞在所难免,前面的只能再加速与后面保持距离,就这样在抢争中跑完第一圈,过后第一集团就会剩下10余人左右,因为一开始的紧张加上起跑后的加速跑就会导致第一集团的开始继续分化,能够加速跑三圈的将把原速度维持的落下,在第二三圈时基本分化完毕,第一集团只剩下四五个人,这些人后面比拼的就是耐力、中途跑变速、和最后的冲刺了。我基本属于第二集团军,但又是这里面不前不后的队员,跑下来没问题,名次没有可能,累积分勉强能算上1-3分。从运动会上的3公里、5公里再到平常的10公里、20公里,印象中里程最长的一次是高三上学期国庆放假三天,从县城跑回镇上总共25公里,那也是目前为止最折磨的一次跑步,各种坡路没有水分食物补充,幸好我还能想着带点零钱,马上要到镇上时饥饿疲累全部都堆积而来,半路买了一包马提酥,一边吃一边小步移动。那时的感觉就是给我一个馒头保证吃的连残渣都不剩,勉强最后支撑到镇上,然后又走着才回了村里。第二天起来上厕所,发现自己站不起来了,顿时有点害怕,别把腿给跑残废了啊!立马用指甲掐一下腿的各个部位,幸好都有感觉,哈哈,只是膝盖摩擦时间过长,一时不能自己支撑站立了,最后还是在老爸的搀扶下去厕所洗漱吃饭。记得刚毕业那会儿去参加一家日企面试,面试官问我喜欢什么运动,我说跑步、爬山,他笑了笑问没球类运动?我补充说,乒乓球。他略有叹息来了一句:敢情你就是独行侠啊,喜欢的没一个是集体协作类的运动啊。想了想也是,随口说了一句:还喜欢拔河,这算不算?瞬间大家都笑了。 高中的生活尤为紧张,过来人都明白,所以运动会大型演出全校动员类的活动少之又少,所以每到有这样的活动的时候,大家都会百分百的玩疯。运动会我们也就在高二时参加了一次。由于之前参加过运动会,高中运动会一开始报名就立即报了5000米长跑,但是有些项目属于无人问津的项目,尤其是女子项目,大家都忙于学习,又都处于青春期,能懒则懒的心态导致那些项目无人问津。所以班主任班长只能课下动员,课下活跃的拉去长跑,爆发力强的短跑铅球,课下窜来跳去的跳远跳高,队伍虽不整齐但多少能挣几个累计分。报名女子3000米的是班里一位性格开朗、课下特别的活跃的妹子。虽然课间活动她一会儿跑到这边一会儿跑到那边,但交集不多也谈不上熟悉,一来我属于要么是在解决数学题的状态要么是站在楼道望风景的人,对嬉笑打闹不太感兴趣。但有一首歌却慢慢改变我的心理轨迹-《王子变青蛙》的主题曲。******虽然不算相熟但多少说上几句话了。运动会那天大家全体出动,把整个班级搬到了操场,一个个项目紧张的进行着,大概是下午吧,5000米马上就要开始,我拿着号码牌去检录处报到,她喊了一句:XX,加油!看着她胸前的号码牌,好似朋友又好似战友的感觉,我在心里默念:终点见!Fighting! 半小时过后,事实就是跑完全程没名次,跑到终点,四处张望,远望寻找她的身影,没有任何踪迹,这时却被班上同学两个胳膊架起抬走了。等回到班级驻地时我才发现她正要去准备她的3000米,一身的疲惫说不出话,也不想心里到底想了什么,就这样,她去了。 我的一段旅程结束了,她的才刚刚开始,事实如此。高中的懵懂与憧憬,随着时间变淡,各自为好~ 今天听到的一首歌,熟悉的嗓音,但是没有标明什么歌曲哪位歌手。嗓音非常熟悉但怎么也想不起来,各种搜索才知道是金海心的《阳光下的星星》: 还有那首《那么骄傲》,哈哈

Mar 31, 2015 - Comments - tech dev

Android开发要点

1、自定义View如果作为ListView Item不要对View单独设置setClickable、setFocusable,如果设置后ListView的Selector会失效。 2、ListView Item中CardView如果设置cardElevation值,Item选中的ripple效果会被置为底部,造成UI效果不理想,在ListView中添加android:drawSelectorOnTop=“true”将背景前置到顶部可以解决。 3、Android WebView如果HTML内容内嵌iframe此时通过shouldOverrideLoadingUrl方法不能捕获到iframe内部跳转的URL,此时需要调用shouldInterceptRequest()来捕获,这个方法不仅仅会捕获的URL跳转,对HTML内容的HTTP资源请求也会捕获,比如css、js等。 4、微信分享时出现“分享受限,由于hit push hold!!无法分享到微信”,原因是分享用的微信账号在其他手机登录,但是本机还没有退出登录,导致没有权限分享,重新进入微信并登录就OK。 5、公私密钥对转keystore,公私密钥对:platform.x509.pem+platform.pk8 把pkcs8格式的私钥转换为pkcs12格式: openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt 生成pkcs12格式的密钥文件: openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name loginDebug 生成keystore: keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass android -alias loginDebug 6、提取APK签名密钥信息 签名时生成的RSA文件会保存在APK包中的META-INF文件夹中,名为CERT.RSA. 通过keytool读取, keytool -printcert -file CERT.RSA 可以打印MD5、SHA1、SHA256相关信息。 7、Android Canvas RecF的定义 使用drawArc画一段圆弧时,RecF确定的是圆弧所在圆的边界范围left、top、right、bottom。 8、Android Source Download Proxy Setting