分类目录归档:未分类

Android Studio插件整理

现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行,毕竟你乐意怎么样都行)。使用好Android Studio插件能大量的减少我们的工作量。

1.GsonFormat

快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。

使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat

2.Android ButterKnife Zelezny

配合ButterKnife实现注解,从此不用写findViewById,想着就爽啊。在Activity,Fragment,Adapter中选中布局xml的资源id自动生成butterknife注解。

使用方法:Ctrl+Shift+B选择图上所示选项

3.Android Code Generator

根据布局文件快速生成对应的Activity,Fragment,Adapter,Menu。


4.Android Parcelable code generator

JavaBean序列化,快速实现Parcelable接口。

5.Android Methods Count

显示依赖库中得方法数

6.Lifecycle Sorter

可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K


7.CodeGlance

在右边可以预览代码,实现快速定位


8.findBugs-IDEA

查找bug的插件,Android Studio也提供了代码审查的功能(Analyze-Inspect Code…)

9.ADB WIFI

使用wifi无线调试你的app,无需root权限
也可参考以下文章:
Android wifi无线调试App新玩法ADB WIFI

10.AndroidPixelDimenGenerator

Android Studio自动生成dimen.xml文件插件

11.JsonOnlineViewer

在Android Studio中请求、调试接口

12.Android Styler

根据xml自动生成style代码的插件



Usage:

a. copy lines with future style from your layout.xml file
b. paste it to styles.xml file with Ctrl+Shift+D (or context menu)
c. enter name of new style in the modal window
d. your style is prepared!

13.Android Drawable Importer

这是一个非常强大的图片导入插件。它导入Android图标与Material图标的Drawable ,批量导入Drawable ,多源导入Drawable(即导入某张图片各种dpi对应的图片)








14.SelectorChapek for Android

通过资源文件命名自动生成Selector文件。



15.GenerateSerialVersionUID

实现Serializable序列化bean

Adds a new action ‘SerialVersionUID’ in the generate menu (alt + ins). The action adds an serialVersionUID field in the current class or updates it if it already exists, and assigns it the same value the standard ‘serialver’ JDK tool would return. The action is only visible when IDEA is not rebuilding its indexes, the class is serializable and either no serialVersionUID field exists or its value is different from the one the ‘serialver’ tool would return.

16.genymotion

速度较快的android模拟器

17.SQLScout

在 Android Studio 上调试数据库 ( SQLite )

详细使用参考:在 Android Studio 上调试数据库 ( SQLite )

18.Android Postfix Completion

可根据后缀快速完成代码,这个属于拓展吧,系统已经有这些功能,如sout、notnull等,这个插件在原有的基础上增添了一些新的功能,我更想做的是通过原作者的代码自己定制功能,那就更爽了

19.Android Holo Colors Generator

通过自定义Holo主题颜色生成对应的Drawable和布局文件

20.dagger-intellij-plugin

dagger可视化辅助工具

21.GradleDependenciesHelperPlugin

maven gradle 依赖支持自动补全

22.RemoveButterKnife

ButterKnife这个第三方库每次更新之后,绑定view的注解都会改变,从bind,到inject,再到bindview,搞得很多人都不敢升级,一旦升级,就会有巨量的代码需要手动修改,非常痛苦
当我们有一些非常棒的代码需要拿到其他项目使用,但是我们发现,那个项目对第三方库的使用是有限制的,我们不能使用butterknife,这时候,我们又得从注解改回findviewbyid
针对上面的两种情况,如果view比较少还好说,如果有几十个view,那么我们一个个的手动删除注解,写findviewbyid语句,简直是一场噩梦(别问我为什么知道这是噩梦)
所以,这种有规律又重复简单的工作为什么不能用一个插件来实现呢?于是RemoveButterKnife的想法就出现了。

具体介绍

23.AndroidProguardPlugin

一键生成项目混淆代码插件,值得你安装~(不过目前可能有些第三方项目的混淆还未添加完全)

24.otto-intellij-plugin

otto事件导航工具。


25.eventbus-intellij-plugin

eventbus导航插件(对于最新版的 EventBus 3.0.0 好像无效,请替换为eventbus3-intellij-plugin此插件地址在本文第51个)

26.idea-markdown

markdown插件

27.Sexy Editor

设置AS代码编辑区的背景图

首先点击界面的设置按钮 进入设置界面,选中Plugins,右边选择 Browser … ,输入Sexy … 下面自动弹出候选插件,右边点击Install 安装

安装成功 后需要重启AS

重启完成之后 进入设置界面 选择other Setting 下的Sexy Editor , 右侧 insert 一张或多张图片即可,上面的其他设置可以设置方位 间隔时间 透明度等等,设置完成后,要关闭打开的文件,重新打开项目文件即可在代码编辑区显示插入的图片,作为代码编辑区的背景图。

28.folding-plugin

布局文件分组的插件

29.Android-DPI-Calculator

DPI计算插件

使用:

或者

30.gradle-retrolambda

在java 6 7中使用 lambda表达式插件

修改编译的jdk为java8:

31.Android Studio Prettify

可以将代码中的字符串写在string.xml文件中

选中字符串鼠标右键选择图中所示

这个插件还可以自动书写findViewById

32.Material Theme UI

添加Material主题到你的AS

33..ignore

我们都知道在Git 中想要过滤掉一些不想提交的文件,可以把相应的文件添加到.gitignore 中,而.gitignore 这个Android Studio 插件根据不同的语言来选择模板,就不用自己在费事添加一些文件了,而且还有自动补全功能,过滤文件再也不要复制文件名了。我们做项目的时候,并不是所有文件都是要提交的,比如构建的build 文件夹,本地配置文件,每个Module 生成的iml 文件,但是我们每次add,commit 都会不小心把它们添加上去,而gitignore 就是解决这种痛点的,如果你不想提交的文件,就可以在创建项目的时候将这个文件中添加即可,将一些通用的东西屏蔽掉。

34.CheckStyle-IDEA

CheckStyle-IDEA 是一个检查代码风格的插件,比如像命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,你们可以遵从像Google Oracle 的Java 代码指南 ,当然也可以按照自己的规则来设置配置文件,从而有效约束你自己更好地遵循代码编写规范。

35.Markdown Navigator

github:Markdown Navigator
Markdown插件

36.ECTranslation

Android Studio Plugin,Translate English to Chinese. Android Studio 翻译插件,可以将英文翻译为中文。

37.PermissionsDispatcher plugin

github:PermissionsDispatcher plugin
自动生成6.0权限的代码

38.WakaTime

github:WakaTime
记录你在IDE上的工作时间

39.AndroidWiFiADB

无线调试应用

40.AndroidLocalizationer

可用于将项目中的 string 资源自动翻译为其他语言的 Android Studio/IntelliJ IDEA 插件

41.TranslationPlugin

又一翻译插件,可中英互译。

42.SingletonTest

快速生成单例模式的预设

43.BorePlugin

Android Studio 自动生成布局代码插件

代码生成规则

a.自动遍历目标布局中所有带id的文件, 无id的不会识别处理
b.控件生成的变量名默认为id名称, 可以在弹出确认框右侧的名称输入栏中自行修改
c.所有的Button或者带clickable=true的控件, 都会自动在代码中生成setOnClickListener相关代码
d.所有EditText控件, 都会在代码中生成非空判断代码, 如果为空会提示EditText的hint内容, 如果hint为空则提示xxx字符串不能为空字样, 最后会把所有输入框的验证合并到一个submit方法中
e.会自动识别布局中的include标签, 并读取对应布局中的控件

44.jimu Mirror

能够实时预览Android布局,它会监听布局文件的改动,如果有代码变化,就会立即刷新UI。

45.jRebel For Android

不仅能够做到UI布局的实时预览,它甚至做到了让你更改java代码后就能实时替换apk中的类文件,达到应用实时刷新,官网的介绍是:Skip build, install and run,因此它可以节约我们很多很多的时间,它的效果也十分不错。

46.sdk-manager-plugin

SDK管理插件,自动检测更新并下载。(图片与插件无关哈)

47.Codota

搜索最好的Android代码。(Studio里面直接可以搜到此插件)

48.LayoutFormatter

drakeet 开发一个一键格式化你的 XML 文件的 Android Studio 插件,至于为什么不用 Android Studio 自带的格式化功能而用这个插件,可以看下作者的一篇 Blog -> 当我们谈 XML 布局文件代码的优雅性

49.android-strings-search-plugin

一个可以通过输入文字找到strings.xml资源的插件

50.ideaVim

vim 本身就是一款很优秀的文本编辑器,而Android Studio 更是一款编写APP应用的神器。如果两个款优秀的软件结合在一起感觉会怎样呢?
详细请看文章:Android Studio +Vim

51.eventbus3-intellij-plugin

引导 EventBus 的 post 和 event(对于最新版的 EventBus 3.0.0 有效)
主要Bug修复工作:
修改包名和方法名以适应 EventBus 3.X
替换一个在新版的 intellij plugin SDK 已经不存在的类
增加若干 try-catch ,防止插件崩溃

52.Exynap

Exynap 一个帮助开发者自动生成样板代码的 AndroidStudio 插件

53.gradle-cleaner-intellij-plugin

Force clear delaying & no longer needed Gradle tasks.

54.MVPHelper

一款Intellj IDEA 和Android Studio的插件,可以为MVP生成接口以及实现类,解放双手。
具体请查看Android Studio插件之MVPHelper,一键生成MVP代码一文

55.Matchmaker

这是一款专为微信小程序开发的插件,目前可在 IntelliJ IDEA 中使用。它可以帮你完成重复机械无趣麻烦的绑定方法的过程,自动的将需要新建的方法注入到 js 文件中去。

56.Emoji Support Plugin

让 Intellij 支持 Emoji 输入提醒

57.Open-Uploader

上传apk文件到指定的地址,提供自定义参数

58.MultiTypeTemplates

生成MultiType和itemviewprovider(关于MultiType请查看Android 复杂的列表视图新写法 MultiType)

59.Android-ButterKnife-Plugin-Plus

Android Studio 的插件,方便快速实现ButterKnife注解框架,包含了android-butterknife-zelezny 1.6版本的所有功能,并在此基础上新增如下功能:

1.可以自由选择是否在当前类中对ButterKnife进行初始化,避免了原版本只要使用插件初始化控件会自动在onCreate中进行ButterKnife.bind(this)的尴尬。

这样就可以在基类中进行ButterKnife的初始化,不必要每个类中都要初始化,对开发框架的搭建更加方便。

2.在Android Studio的设置界面,对在当前类中是否强制初始化提供了默认值设置,这样就可以让插件使用更符合自己的操作习惯。

60. ApkMultiChannelPlugin

这是一个为了方便 Android 多渠道打包的 Android Studio / IDEA 插件

安装:

  • 打开 Android Studio: 打开 Setting/Preferences -> Plugins -> Browse repositories 然后搜索 ApkMultiChannel 安装重启

或者

  • 下载 ApkMultiChannelPlugin.jar 然后 Setting/Preferences -> Plugins -> Install plugin from disk 选择 ApkMultiChannelPlugin.jar 安装重启

使用方式:

  1. 选择 apk

    选择一个 apk 然后右键,点击 Build MultiChannel

  2. 配置

    配置签名信息,打包方式和渠道等

    配置说明:

    Key Store Path: 签名文件的路径

    Key Store Password: 签名文件的密码

    Key Alias: 密钥别名

    Key Password: 密钥密码

    Zipalign Path: zipalign文件的路径(用于优化 apk;zipalign 可以确保所有未压缩的数据均是以相对于文件开始部分的特定字节对齐开始,这样可减少应用消耗的 RAM 量。)

    Signer Version: 选择签名版本:apksigner 和 jarsigner

    Build Type: 打包方式

    Channels: 渠道列表,每行一个,最前面可加 > 或不加(保存信息的时候,程序会自行加上)

  3. 开始打包

    配置完成之后按 OK 就会开始进行渠道打包,文件会输出在选中的apk的当前目录下的channels目录中

61.CodeMaker

一个 IDEA 的代码生成插件,通过 Velocity 支持自定义代码模板来生成代码。详细介绍IDEA代码生成插件CodeMaker

62.adb-idea

可以一键清理缓存并重启APP

此插件来自[email protected]的分享,感谢[email protected]的分享

63.JVM Debugger Memory View

Android Studio和IDEA中一个很有用的内存调试插件

详细可参考说一说Android Studio和IDEA中一个很有用的内存调试插件一文。

64.TinyPic

功能:压缩图片资源,一次最多压缩500张 压缩的核心功能是TinyPng这个网站提供的

https://tinypng.com/

但是这个网站一次只能上传20张图片,所以你需要上传下载,上传下载重复工作。 好在这个网站提供了api可以压缩图片。

在开发者页面下申请api key。对于一个key,每月有500次的免费压缩额度,如果压缩超过了 500张图片,就不能使用了。需要另外付费。但是申请这个api特别简单,填下邮箱,用户名就行,多申请 两个邮箱。1000张图片也妥妥够了。 这里推荐google个十分钟邮箱,不需要注册,只能使用十分钟,用来收一下验证码很方便。

使用方式:
1.在File->Settings->Plugins里下载插件 TinyPic

2.安装完后重启,在Tools目录下找到TinyPic

3.输入在 https://tinypng.com/developers 申请的api key

4.选择图片,可以选择图片,或者选择文件夹或者同时选中,反正是遍历文件夹下的图片,筛选jpg和png ,key的剩余次数

5.压缩进度

6.超过500次的提示(后续会考虑加入 生成压缩的信息的文件,因为大家都用git,其实也不是很必要)

65.ReciteWords

这是一个androidStudio翻译与陌生单词记录插件

你所翻译的单词会被记录在你当前用户目录下的ReciteWords.md文件中(如:C:\Users\Bolex\ReciteWords.md)。可以通过Markdown编辑器打开它进行学习。效果如下:

66.TemplateBuilder

TemplateBuilder是一款能够帮助我们快速生成Android Studio Template的AS插件,将通过逐个文件去配置模板的方式改进为通过插件来实现,对于简单的模板制作,只需要一键即可生成。

具体使用请参考TemplateBuilder(中文版)](TemplateBuilder

67.intellij-java2smali

将Java & Kotlin编译成smali

68.innerbuilder

InnerBuilder 一款Intellj IDEA 和Android Studio自动生成内部类Builder代码的插件。

69.Statistic

统计代码行数

使用可参考:Android studio插件Statistic的使用

70.create-intent-inspection

创建intent

71.color-manager

颜色管理

72.new-instance-inspection

创建fragment实例

73.Exynap

exynap是一个可以帮助你查找并实现您需要的代码的插件

74.databinding-support

一个可以快速实现databinding的插件

75.pomodoro-tm

番茄工作法的 Android Studio / IDEA 插件

76.freeline

Freeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品

77.svgtoandroid

Intellij Platform插件,通过其可以完成从svg文件到Android VectorDrawable的自动化转换

78.instapk-studio-plugin

分享apk文件

79.here-be-dragons

加上@SideEffect注解的方法,在调用的地方会出现一只鸟

80.android-studio-proteus-plugin

将xml转化为json

*最后:推荐梯子:(Github上的star数13000+)

XX-Net
具体使用请参考里面文档已经写得很清楚了,按照文档一步步操作即可。关键是免费的!免费的!免费的!速度也快!

本文也可以访问简书内容是一样的

本文会持续更新(如果发现有好玩,好用的插件,欢迎通过Email:[email protected]告诉我),请持续关注。哈哈!

说一说Android Studio和IDEA中一个很有用的内存调试插件

JetBrains JVM Debugger Memory View plugin

在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使Android Studio的生活更轻松,我发现一个有用的插件,我从来没有听说过。 这就是为什么,我决定写这个强大的工具,它如何帮助我与内存调试我的应用程序。

What is the plugin about?

根据plugin page:

此插件扩展了内置的JVM调试器,具有在调试会话期间观察JVM堆中的对象的功能。

内存视图按照类名称分组来显示堆中的对象总数

当你一步步调试代码时,“Diff”列显示调试器停靠点(debugger stops也就是debug点)之间对象数量的变化。 这种方式你可以很容易地看到你的步进代码如何影响堆。

双击类名称,打开一个包含该类实例的对话框。 该对话框允许您通过计算表达式过滤实例。 所有调试器操作(如检查,标记对象,评估表达式,添加到观察等)都可以应用于此对话框中的实例。

How to install this wonderful plugin?

打开Android Studio Plugins页面:

  • 快捷键:command/ ctrl shift A,类型 插件 随后,按enter键:
  • 或打开 Preferences/Settings:(Mac:Android Studio – >Preferences / Windows和Linux:File – >Settings)并找到Plugins页面:

Install jetBrains plugin… 按钮,搜索 JVM Debugger Memory View 然后 Install 

装完重新启动Android Studio。

At first glance:

回到Android Studio后,您会发现Memory View Tool Window已经添加到工具栏的右侧。

Memory View Tool Window

内存视图工具窗口

如果没有看到内存视图,打开工具窗口,使用主菜单:ViewTool Windows Memory View

首先,这个工具只有在打了调试断点并在debug模式运行期间才会显示数据。

其次,我要提到的是,我阅读了Android Studio可能会发生的一些警告和错误,不过,我并没有碰到过。

警告:Android Studio版本包含以下限制:

  • 由于Android内存限制,获取大量的实例可能会失败,并会停止VM。
  • Android Studio可能会停止响应,请参阅此错误

Let’s debug!

在调试模式下运行应用程序并在BreakPoint上暂停后,您会看到很神奇的画面:

这个表让我们最感兴趣的地方是Diff ”列,当你一步步调试代码行时,你将看到会有多少新的对象实例被创建或销毁!

我想寻找我自己的对象(即ProfileModel类),所以我搜索它:

正如你可以看到我已经在这行代码更新了ProfileModel vairable,在GC删除旧对象之前我得到差异是+1 ,也可以访问之前不可能访问到的旧的对象。 通过双击这条记录,我将在窗口中获取ProfileModel类的实例:

此窗口还允许你使用类方法通过计算的表达式过滤实例,例如,您可以使用 OkHttp Response 类的 isSuccessful 方法来过滤筛选在内存中加载不成功的响应:

实例过滤器功能

另一个有用的功能是跟踪新实例,您可以通过Memory View Tool窗口中的右键菜单启用:

此功能可帮助您跟踪已生成类的新实例的代码!

你可以在JetBrains blog中阅读有关此插件的更多信息.

TL;DR:

这篇文章是关于一个JetBrains插件,可能会帮助你在使用Android Studio是对应用程序进行内存调试和对在应用程序运行的所有加载对象进行访问。

本文翻译自:hackernoon.com/a-useful

注:IDEA版本请选择2016.3以上

  • 原文链接:一叶知秋
  • 作者:知秋
  • [ 转载请保留原文出处、作者。]

IDEA中一个很有用的内存调试插件

JetBrains JVM Debugger Memory View plugin

在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使Android Studio的生活更轻松,我发现一个有用的插件,我从来没有听说过。 这就是为什么,我决定写这个强大的工具,它如何帮助我与内存调试我的应用程序。

What is the plugin about?

根据 plugin page :

此插件扩展了内置的JVM调试器,具有在调试会话期间观察JVM堆中的对象的功能。

内存视图按照类名称分组来显示 堆中的对象总数 。

当你一步步调试代码时, “Diff”列显示调试器停靠点(debugger stops也就是debug点)之间对象数量的变化 。 这种方式你可以很容易地看到你的步进代码如何影响堆。

双击类名称,打开一个包含该类实例的对话框。 该对话框允许您 通过计算表达式过滤实例 。 所有调试器操作(如检查,标记对象,评估表达式,添加到观察等)都可以应用于此对话框中的实例。

How to install this wonderful plugin?

打开Android Studio Plugins 页面:

  • 快捷键: 按 command/ ctrl + shift + A, 类型 插件 随后,按 enter 键:
  • 或打开 Preferences/Settings: (Mac:Android Studio – >Preferences / Windows和Linux:File – >Settings)并找到 Plugins 页面:

按 Install jetBrains plugin… 按钮,搜索 JVM Debugger Memory View 然后 Install 。

装完重新启动Android Studio。

At first glance:

回到Android Studio后,您会发现 Memory View Tool Window 已经添加到工具栏的右侧。

Memory View Tool Window

内存视图工具窗口

如果没有看到内存视图,打开工具窗口,使用主菜单: View → Tool Windows → Memory View。

首先,这个工具只有在打了调试断点并在 debug模式 运行期间才会显示数据。

其次,我要提到的是,我阅读了Android Studio可能会发生的一些警告和错误,不过,我并没有碰到过。

警告:Android Studio版本包含以下限制:

  • 由于Android内存限制,获取大量的实例可能会失败,并会停止VM。
  • Android Studio可能会停止响应,请参阅 此错误

Let’s debug!

在调试模式下运行应用程序并在BreakPoint上暂停后,您会看到很神奇的画面:

这个表让我们最感兴趣的地方是 Diff ”列,当你一步步调试代码行时,你将看到会有多少新的对象实例被创建或销毁!

我想寻找我自己的对象 (即ProfileModel类) ,所以我搜索它:

正如你可以看到我已经在这行代码更新了ProfileModel vairable,在GC删除旧对象之前我得到差异是+1 ,也可以访问之前不可能访问到的旧的对象。 通过双击这条记录,我将在窗口中获取ProfileModel类的实例:

此窗口还允许你使用类方法通过计算的表达式过滤实例,例如,您可以使用 OkHttp Response 类的 isSuccessful 方法来过滤筛选在内存中加载不成功的响应:

实例过滤器功能

另一个有用的功能是跟踪新实例,您可以通过Memory View Tool窗口中的右键菜单启用:

此功能可帮助您跟踪已生成类的新实例的代码!

Android Studio 掌握这些调试技巧,Debug 能力不能再高啦

Android Studio 掌握这些调试技巧,Debug 能力不能再高啦

Debug断点跟踪调试是软件开发过程中分析代码、解决BUG的一个重要手段,不同IDE下的Debug工具的使用有所不同,但提供的调试功能一定是应有尽有。很多程序员的Debug能力都停留在基本的单步执行、断点跳跃上,殊不知还有很多鲜为人知但非常方便的调试技巧。本文就以Android Studio工具为例,展示一些一般人不知道的Debug调试技巧,掌握这些,你也算是Debug调试大师了。

基本使用


Debug App有两种途径,第一种是直接点击下图运行按钮右侧的小虫状图标,运行并调试当前Project,这个我想大家都知道。

Debug App.png

第二种就是调试当前已经处于运行状态下的App,这也是我们用的更多的一种调试手段,即Attach debugger to Android process。点击运行按钮右侧第三个按钮,弹出Choose Process窗口,选择对应的进程,点击OK按钮即可进入调试模式,此时,我们便可以在需要的地方直接下断点调试代码了:

Attach debugger to Android process.png

接下来就是常见的调试方法了,在Debug窗口顶部工具栏有一排操作按钮,比如Step Over(单步执行)、Step Into(进入方法)等,如图所示:

Debug窗口.png

打断点和取消断点最直接的方式就是单击目标代码行的行号右侧空白处,然后在Debug窗口左侧有个断点浏览按钮View Breakpoints,位于停止按钮下方第一个,可以浏览Project中的所有断点,同时可以添加删除断点:

View Breakpoints.png

条件断点


有时候,我们的断点打在了循环体里面,但是我们只想看某一特定循环次数下的运行情况,难道要使用Run to Cursor功能不停地跳至下一次断点直至满足我们的要求吗?

循环里的断点.png

如果你知道条件断点的话,一定会悔不当初。条件断点可以满足开发人员自己输入条件,比如fori循环中输入i == 5即可让程序直接运行至第六次循环,for each循环中针对list某一元素下的断点调试。只需要右键点击断点,在弹出的窗口中输入Condiction条件,点击Done按钮,然后当程序执行到循环体时,会在满足条件的一次循环中停下来,供我们调试:

条件断点.png

日志断点


打印日志也是跟踪程序分析问题的一个非常有效的手段,但是如果我们的程序已经运行并且处于调试模式,此时如果想打印日志更加直观的分析代码,难道还要停止调试、添加Log代码并重新编译运行吗?

如果你知道日志断点,就不用如此大费周折,费时费力了。还是右键点击断点,在弹出的窗口中取消勾选Suspeng复选框(即表示程序运行至此断点时不会停下来供开发者调试),然后勾选Log evaluated expression:,并输入打印语句即可。这样,当Debug模式下的程序执行至此,不会停下来,而是在控制台中打印对应信息,如:

日志断点.png

变量赋值


比如,我们的代码里有一个变量,这个变量的值会影响到程序的执行结果。如果我们想观察这个变量在不同的赋值下程序的执行结果怎么办呢?难道要一遍遍的在代码里修改变量值,然后重新运行程序吗?显然这是非常麻烦的操作。其实,如果利用Debug模式下的变量赋值(Set Value),只需要运行一次,就能达到我们的观察效果。在使用该变量的代码处打个断点,然后在Variables窗口找到对应的变量,修改变量值并执行即可。

Set Value.png

变量观察


Variables变量区和Watches观察区可以查看Debug模式下,程序执行到断点处的变量值或者对象的各属性值,但是多多少少查看起来还是有些不方便。其实可以通过弹出窗口的形式查看属性值,只要将光标定位至断点代码行所用到的变量,IDE会自动弹出一个小窗口,如下图所示,此时,使用对应的快捷键或者点击这个小窗口里的变量即可弹出变量属性值窗口,Mac下的快捷键位command + F1,如图所示:

变量观察01.png

变量观察02.png

对象求值


在断点处,如果有变量对象,系统提供了表达式求值功能,针对Variables视图中的变量对象,我们可以输入任何计算语句,实时查看表达式计算结果。具体操作为,右键Variables视图中的变量对象,选择Evaluate Expression,弹出表达式窗口,输入任何你想要的计算语句,点击Evaluate计算按钮,即可显示Result结果:

Evaluate Expression01.png

Evaluate Expression02.png

方法断点


通常我们会对方法里的代码添加断点调试,很少对方法本身调试。其实,如果只是为了看到方法的参数和返回结果,我们可以在定义方法的第一行打断点,直接对方法本身调试,此时断点的展示图标样式也会与众不同:

方法断点.png

变量断点


有时候,我们想知道自定义的变量的何时何地发生了改变,就可以使用变量断点。变量断点的图标样式也与众不同,在变量定义行打断点,开启Debug模式,在程序执行的过程中,如果该变量的值发生改变,程序会自动停下来,并定位在改变变量值的地方,供开发者调试:

变量断点.png

异常断点


程序在执行的过程中可能会出现各种各样的未知性异常,如果能在发生异常的时候第一时间让程序停下来,并定位到异常出现的地方,供开发者调试,那当然是极好的。而万能的Android Studio就提供了这样的功能。

打开断点管理器,这里有两种方式打开:点击工具栏菜单Run,选择View Breakpoints;在Debug窗口直接点击View Breakpoints图标。点击左上角加号按钮,可以添加各种断点,包括前文提到的Method BreakpointsField Watchpoints断点,这里我们选择Exception Breakpoints异常断点,在弹出的Enter Exception Class窗口中输入需要监控的异常类别即可:

Breakpoints.png

Exception Breakpoints.png

欢迎补充


以上便是使用Android Studio工具的开发过程中很是实用但却少见的Debug调试技巧,当然所有这些操作都可以通过快捷键打开,将鼠标光标移到对应图标处,都会显示对应快捷键组合,大家自行酌情使用。

当然,如果你还有更好的调试技巧,欢迎留言补充,让我们一起在分享中学习,交流中进步。

启用 https 简单免费的 Let’s Encrypt SSL证书配置

Let’s Encrypt简介

Let's Encrypt 是一个免费、开放,自动化的证书颁发机构。

如果我们要启用 HTTPS,就需要从证书授权机构(以下简称 CA ) 处获取一个证书,Let's Encrypt 就是一个 CA。本文是 Debian 8 + Nginx 下的配置过程。

Let’s Encrypt 安装

Let’s Encrypt 官方 推荐我们使用 certbot 客户端

注:letsencrypt 或者 letsencrypt-auto 这种方式从2016年5月开始已经过时了。

certbot 客户端要求安装 Python 要有 root 权限

clipboard.png

如上图,我们在 certbot 的官网选择自己使用的服务器和操作系统。网站就会给出对应的安装文档。

安装客户端

sudo apt-get install certbot -t jessie-backports

获取证书

证书的获取有两种方式

第一种,web 服务器已经在运行了,不能关闭端口和服务器,可以使用 --webroot 模式

sudo certbot certonly --webroot -w /var/www/example -d example.com  --agree-tos --email 你的@邮箱.com

这个命令会为 example.com 域名生成一个证书,使用 –webroot 模式会在 /var/www/example 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,letsencrypt 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。--agree-tos 参数是你同意他们的协议。

第二种,如果我们的项目没有根目录,只是一个微服务,可以使用 --standalone 模式。
这种模式会自动启用服务器的 443 端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。

sudo certbot certonly --standalone -d example.com --agree-tos --email 你的@邮箱.com

证书生成目录在 /etc/letsencrypt/live/,该目录下可以看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。

证书申请成功后会提示证书的文件路径,以及证书到期时间:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will

expire on 2018-02-08. To obtain a new version of the certificate in

the future, simply run Let's Encrypt again.

- If you like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt:  https://letsencrypt.org/donate

Donating to EFF:                    https://eff.org/donate-le

Nginx 配置

server {
        server_name example.com www.example.com;
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem;

        location / {
           proxy_pass http://localhost:4000;
        }
    }

重启 Nginx 服务就可以使用 https 了

证书自动更新

Let's Encrypt 提供的证书只有 90 天的有效期,我们必须在证书到期之前,重新获取这些证书。

我们可以在服务器添加一个 crontab 定时任务来处理

crontab -e

注:如果要执行的脚本需要 root 权限, 那就用 root 用户创建 crontab

添加下面的内容

10 1 * */2 * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

这个 cron 计划,意思是 每隔两个月的凌晨 1:10 执行更新操作。

--pre-hook 这个参数表示执行更新操作之前要做的事情,因为我用的 --standalone 模式的证书,所以需要停止 nginx服务,解除端口占用。

--post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用。

验证 https

使用 ssllabs 在线测试服务器证书强度及配置正确性

参考扩展

Let’s Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS

微信H5手机网页开发—快速入门

序言

随着微信(WeChat)的盛行,一个流行的开发工作也随之诞生——微信公众号开发,而其中最主要的部分,当属微信H5网页开发。
虽然网页开发大家并不陌生,但层出不穷的手机型号,导致了微信网页开发中遇到的最难的问题——手机分辨率适应。
实际上,针对手机分辨率的问题,也有相应的设置来解决,下面由我带领大家来揭秘这让人头疼的微信H5网页开发。希望各位能够享受这段文字旅程并有所收获。

前言

为什么写本文
本人在微信开发这条路也已经走了将近3年了,在H5网页制作方面也曾希望有高人能指点一番,然而并没有遇到。很多问题虽然网上有各种资料可以查询,但是都不够系统,因工作问题,没有时间系统的去学习一番,故而一致都是在摸索中前进,经点滴积累,现在我希望把我的经验分享给大家,希望大家阅读愉快。
本文的主要内容和特色
本文将以介绍为基本开篇,逐步引出在微信浏览器下开发我们的H5网页,以一个微信商城案例,循序渐进,一步步为大家剖析在微信浏览器下的H5网页设计原理和方法。
本文面向的读者
本书希望面向的读者可以是已经从事web开发的各类开发人员和对web开发感兴趣的初学者。

第一章 了解HTML5

1.1 什么是HTML5

HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。
HTML 的上一个版本诞生于 1999 年。自从那以后,Web 世界已经经历了巨变。
HTML5 仍处于完善之中。然而,大部分现代浏览器已经具备了某些 HTML5 支持。

1.2 HTML5是如何起步的

HTML5 是 W3C 与 WHATWG 合作的结果。
编者注:W3C 指 World Wide Web Consortium,万维网联盟。
编者注:WHATWG 指 Web Hypertext Application Technology Working Group。
WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。在 2006 年,双方决定进行合作,来创建一个新版本的 HTML。
为 HTML5 建立的一些规则:

  • 新特性应该基于 HTML、CSS、DOM 以及 JavaScript。
  • 减少对外部插件的需求(比如 Flash)
  • 更优秀的错误处理
  • 更多取代脚本的标记
  • HTML5 应该独立于设备
  • 开发进程应对公众透明

1.3 新特性

HTML5 中的一些有趣的新特性:

  • 用于绘画的 canvas 元素
  • 用于媒介回放的 video 和 audio 元素
  • 对本地离线存储的更好的支持
  • 新的特殊内容元素,比如 article、footer、header、nav、section
  • 新的表单控件,比如 calendar、date、time、email、url、search

1.4 HTML5的一个实例

<!DOCTYPE HTML>
<html>
<body>
<video width="320" height="240" controls="controls">
  <source src="movie.ogg" type="video/ogg">
  <source src="movie.mp4" type="video/mp4">
  Your browser does not support the video tag。
</video>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

1.5 本章小结

本章先带领大家了解html5的基本来历,接下来以案例“微信商城”分模块,一步一步揭开HTML开发的神秘面纱。

第二章 header里标签的奥秘

2.1 HTML head 元素

head 元素是所有头部元素的容器。head 内的元素可包含脚本,指示浏览器在何处可以找到样式表,提供元信息,等等。
以下标签都可以添加到 head 部分:title、base、link、meta、script 以及 style。

2.2 HTML title 元素

title 标签定义文档的标题。
title 元素在所有 HTML/XHTML 文档中都是必需的。
title 元素能够:

  • 定义浏览器工具栏中的标题
  • 提供页面被添加到收藏夹时显示的标题
  • 显示在搜索引擎结果中的页面标题

2.3 HTML base 元素

base 标签为页面上的所有链接规定默认地址或默认目标(target):

<head>
<base href="http://www.w3school.com.cn/images/" />
<base target="_blank" />
</head>
  • 1
  • 2
  • 3
  • 4
  • 5

link 标签定义文档与外部资源之间的关系。
link 标签最常用于连接样式表:

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>
  • 1
  • 2
  • 3
  • 4

2.5 HTML style 元素

style 标签用于为 HTML 文档定义样式信息。
您可以在 style 元素内规定 HTML 元素在浏览器中呈现的样式:

<head>
<style type="text/css">
body {background-color:yellow}
p {color:blue}
</style>
</head>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.6 HTML meta 元素

元数据(metadata)是关于数据的信息。
meta 标签提供关于 HTML 文档的元数据。元数据不会显示在页面上,但是对于机器是可读的。
典型的情况是,meta 元素被用于规定页面的描述、关键词、文档的作者、最后修改时间以及其他元数据。
meta 标签始终位于 head 元素中。
元数据可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

2.7 本章小结

本章为大家简单的罗列了在网页开发中head部分常见的标签,在下一章节中,我们将详细为大家解释meta标签的奥秘。

第三章 HTML Meta 常用的元素

3.1 meta 语法

定义和用法:name 属性把 content 属性连接到 name。
语法:name=author|description|keywords|generator|revised|others

3.2 meta之keywords元素

说明:为搜索引擎提供的关键字列表
用法:<meta name="keywords" content="关键词1,关键词2,关键词3,关键词4,……">

3.3 meta之description元素

说明:用来告诉搜索引擎你的网站主要内容
用法:<meta name="description" content="你网页的简述">

3.4 meta之author元素

说明:标注网页的作者或制作组
用法:<meta name="author" content="K神,K神工作室">
注意:content可以是:你或你的制作组的名字,或Email

3.5 meta之copyright元素

说明:标注版权
用法:<Meta name="copyright" content="本页版权归K神工作室所有。All Rights Reserved">

3.6 meta之generator元素

说明:编辑器的说明
用法:<meta name="generator" content="PCDATA|FrontPage|">

3.7 meta之revisit-after

说明:用来控制搜索引擎抓取网站的频率,告诉搜索引擎多长时间来网站抓取一次
用法:<meta name="revisit-after" content="7 days">

3.8 本章小结

本章详细给出了常用的HTML种meta标签和用法。这些都是web开发中的基本知识,为手机网页开发做准备,下面我们先直接进入手机网页开发,看看需要对head进行哪些特殊的定义呢?

第四章 手机网页开发之head必修课

4.1 你知道手机的分辨率吗?

在手机参数中,往往会看到,手机屏幕分辨率这一个参数,这个参数是一个怎么样的意思呢,关于分辨率你又了解多少呢?
屏幕物理尺寸:屏幕对角线的实际尺寸,如2.4寸,3.5寸等等。
屏幕分辨率:屏幕所能显示的像素的多少,如320*480等。
屏幕密度(pix per inch):以每英寸的像素数。每英寸的分辨率数。如160dpi。
物理尺寸决定了屏幕的实际尺寸,而分辨率可以表示屏幕上可以呈现的像素点数,屏幕密度决定了屏幕的精细程度。
相同的屏幕大小如果分辨率高,则屏幕元素更精细,一个界面元素在屏幕里的实际尺寸,在密度较小的屏上,界面元素的实际尺寸就会更大一些,反之亦然。
所以在手机界面布局中,除了元素的像素值外,考虑元素的实际尺寸也非常重要,因为人眼看到的是实际尺寸。
下面列出了常用的手机分辨率:

  • 3.5英寸,480×320(HVGA),165PPI
  • 3.5英寸,800×480(WVGA),267PPI
  • 3.5英寸,854×480(WVGA),280PPI
  • 3.5英寸,960×640(DVGA),326PPI(苹果iphone4)
  • 3.7英寸,800×480(WVGA),252PPI
  • 3.7英寸,800×480(WVGA),252PPI
  • 3.7英寸,960×540(qHD),298PPI
  • 4.0英寸,800×480(WVGA),233PPI
  • 4.0英寸,854×480(WVGA),245PPI
  • 4.0英寸,960×540(qHD),275PPI
  • 4.0英寸,1136×640(HD),330PPI(苹果iphone5)
  • 4.2英寸,960×540(qHD),262PPI
  • 4.3英寸,800×480(WVGA) ,217PPI
  • 4.3英寸,960×640(qHD),268PPI
  • 4.3英寸,960×540(qHD),256PPI
  • 4.3英寸,1280×720(HD),342PPI
  • 4.5英寸,960*540(qHD),245PPI
  • 4.5英寸,1280×720(HD),326PPI

4.2 如何编写自适应各种手机分辨率的网页呢?

案例一:2010年,Ethan Marcotte提出了“自适应网页设计”(responsive web design),指可以自动识别屏幕宽度、并做出相应调整的网页设计。
案例二:利用@media screen实现网页布局的自适应,就是针对不同的分辨率调用不同的样式文件。
案例三:使用body的zoom属性,对网页进行缩放。
案例四:使用viewport的initial-scale值,对网页进行缩放。
我想对以上的做法表示无奈,真的什么招都用尽了,下面我来给大家详细分析一下网页开发中遇到的坑吧!

4.3 手机网页必学标签meta之viewport

viewport 语法介绍

<meta name="viewport"
content="
    height = [pixel_value | device-height] ,
    width = [pixel_value | device-width ] ,
    initial-scale = float_value ,
    minimum-scale = float_value ,
    maximum-scale = float_value ,
    user-scalable = [yes | no] ,
    target-densitydpi = [dpi_value | device-dpi | high-dpi | medium-dpi | low-dpi]
"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

width
控制 viewport 的大小,可以指定的一个值或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
height
和 width 相对应,指定高度。
initial-scale
初始缩放。即页面初始缩放程度。这是一个浮点值,是页面大小的一个乘数。例如,如果你设置初始缩放为“1.0”,那么,web页面在展现的时候就会以target density分辨率的1:1来展现。如果你设置为“2.0”,那么这个页面就会放大为2倍。
maximum-scale
最大缩放。即允许的最大缩放程度。这也是一个浮点值,用以指出页面大小与屏幕大小相比的最大乘数。例如,如果你将这个值设置为“2.0”,那么这个页面与target size相比,最多能放大2倍。
user-scalable
用户调整缩放。即用户是否能改变页面缩放程度。如果设置为yes则是允许用户对其进行改变,反之为no。默认值是yes。如果你将其设置为no,那么minimum-scale 和 maximum-scale都将被忽略,因为根本不可能缩放。
所有的缩放值都必须在0.01–10的范围之内。
示例1:设置屏幕宽度为设备宽度,禁止用户手动调整缩放
<meta name="viewport" content="width=device-width,user-scalable=no" />
示例2:设置屏幕密度为高频,中频,低频自动缩放,禁止用户手动调整缩放
<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>

target-densitydpi
一个屏幕像素密度是由屏幕分辨率决定的,通常定义为每英寸点的数量(dpi)。Android支持三种屏幕像素密度:低像素密度,中像素密度,高像素密度。一个低像素密度的屏幕每英寸上的像素点更少,而一个高像素密度的屏幕每英寸上的像素点更多。Android Browser和WebView默认屏幕为中像素密度。

  • device-dpi –使用设备原本的 dpi 作为目标 dp。 不会发生默认缩放。
  • high-dpi – 使用hdpi 作为目标 dpi。 中等像素密度和低像素密度设备相应缩小。
  • medium-dpi – 使用mdpi作为目标 dpi。 高像素密度设备相应放大, 像素密度设备相应缩小。 这是默认的target density.
  • low-dpi -使用mdpi作为目标 dpi。中等像素密度和高像素密度设备相应放大。
  • dpi-value – 指定一个具体的dpi 值作为target dpi. 这个值的范围必须在70–400之间
    编者注:可惜的是目前手机浏览器已经放弃了target-densitydpi属性

4.4 未完待续

VULTR各节点测试地址[官方]

Location
地理位置
Hostname
官方测试服务器ip
Download Test File
下载测试文件
(Asia)Tokyo, Japan[日本 东京] hnd-jp-ping.vultr.com 100Mb 1000Mb
Singapore[新加坡] sgp-ping.vultr.com 100Mb 1000Mb
(AU) Sydney, Australia[悉尼] syd-au-ping.vultr.com 100Mb 1000Mb
(EU) Frankfurt, DE[德国 法兰克福] fra-de-ping.vultr.com 100Mb 1000Mb
(EU) Amsterdam, NL[荷兰 阿姆斯特丹] ams-nl-ping.vultr.com 100Mb 1000Mb
(EU) London, UK[英国 伦敦] lon-gb-ping.vultr.com 100Mb 1000Mb
(EU) Paris, France[法国 巴黎] par-fr-ping.vultr.com 100Mb 1000Mb
Seattle, Washington[美东 华盛顿州 西雅图] wa-us-ping.vultr.com 100Mb 1000Mb
Silicon Valley, Ca[美西 加州 硅谷] sjo-ca-us-ping.vultr.com 100Mb 1000Mb
Los Angeles, Ca[美西 加州 洛杉矶(推荐)] lax-ca-us-ping.vultr.com 100Mb 1000Mb
Chicago, Illinois[美东 芝加哥] il-us-ping.vultr.com 100Mb 1000Mb
Dallas, Texas[美中 德克萨斯州 达拉斯] tx-us-ping.vultr.com 100Mb 1000Mb
New York / New Jersey[美东 新泽西] nj-us-ping.vultr.com 100Mb 1000Mb
Atlanta, Georgiaa[美东 乔治亚州 亚特兰大] ga-us-ping.vultr.com 100Mb 1000Mb
Miami, Florida[美东 佛罗里达州 迈阿密] fl-us-ping.vultr.com 100Mb 1000Mb

如何在 CentOS 7上部署 Google BBR

轉貼來源
https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7

 

BBR(瓶頸帶寬和 RTT)是一種新的擁塞控制算法,由 Google 提供給 Linux 內核 TCP 堆棧。
使用 BBR,Linux 服務器可以顯著增加吞吐量並減少連接的延遲。
此外,由於該算法只需要在發送方更新,而不是在網絡中或在接收端,所以很容易部署 BBR。

在本文中,我將向您展示如何在 Vultr CentOS 7 KVM 服務器實例上部署 BBR。

先決條件

Vultr CentOS 7 x64 服​​務器實例。
一個 sudo 用戶。
第1步:使用ELRepo RPM存儲庫升級內核

為了使用 BBR,您需要將 CentOS 7 機器的內核升級到 4.9.0。您可以使用 ELRepo RPM 存儲庫輕鬆完成此操作。

升級之前,您可以查看當前的內核:
uname -r

這個命令應該輸出一個類似於:

3.10.0-514.2.2.el7.x86_64

如你所見,目前的內核是 3.10.0。

安裝 ELRepo repo:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

使用ELRepo repo安裝4.9.0內核:
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

確認結果:
rpm -qa | grep kernel

如果安裝成功,您應該 kernel-ml-4.9.0-1.el7.elrepo.x86_64 在輸出列表中看到:

kernel-ml-4.9.0-1.el7.elrepo.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-514.2.2.el7.x86_64
kernel-tools-3.10.0-514.2.2.el7.x86_64
kernel-3.10.0-514.2.2.el7.x86_64

現在,您需要通過設置默認的 grub2 引導項來啟用 4.9.0 內核。

顯示grub2菜單中的所有條目:
sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

結果應該類似於:

CentOS Linux 7 Rescue a0cbf86a6ef1416a8812657bb4f2b860 (4.9.0-1.el7.elrepo.x86_64)
CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-bf94f46c6bd04792a6a42c91bae645f7) 7 (Core)

由於 0 行計數開始,4.9.0 內核條目位於第二行,請將默認引導項設置為 1:
sudo grub2-set-default 1

重啟系統:
sudo shutdown -r now

當服務器重新聯機時,請重新登錄並重新運行 uname 命令,以確認您正在使用正確的內核:
uname -r

你應該看到如下結果:

4.9.0-1.el7.elrepo.x86_64

步驟2:啟用 BBR

為了啟用 BBR 算法,您需要修改 sysctl 配置如下:
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

現在,您可以使用以下命令確認啟用 BBR:
sudo sysctl net.ipv4.tcp_available_congestion_control

輸出應該類似於:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

接下來,驗證:
sudo sysctl -n net.ipv4.tcp_congestion_control

輸出應為:

bbr

最後,檢查內核模塊是否加載:
lsmod | grep bbr

輸出將類似於:

tcp_bbr 16384 0

步驟3(可選):測試網絡性能提升

為了測試 BBR 的網絡性能增強,您可以在 Web 服務器目錄中創建一個文件進行下載,然後從台式機上的 Web 瀏覽器測試下載速度。
sudo yum install httpd -y
sudo systemctl start httpd.service
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
cd /var/www/html
sudo dd if=/dev/zero of=500mb.zip bs=1024k count=500

最後,http://[your-server-IP]/500mb.zip 從桌面計算機上的 Web 瀏覽器訪問 URL,然後評估下載速度。

 


 

下載 speedtest 測速文件
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

執行 speedtest 就近測速,並產生結果分享圖
./speedtest-cli --share

或是查找其他國家地區的代號
./speedtest-cli --list | grep Taiwan 台灣
./speedtest-cli --list | grep Taipei 台北

指定的伺服器測速,並產生結果分享圖
./speedtest-cli --server=3967 --share

Windows激活之路:巧用Win7为Win10申请数字许可证激活

Windows激活之路:巧用Win7为Win10申请数字许可证激活

利用Windows 7 给 Windows 10 洗白的方法,博主介绍了挺多了。

Windows激活之路:盗版Windows 7 升级到 Windows 10专业版

Windows激活之路:盗版升级到正版方法(已失效)

本文再给大家介绍一种方法,略有点麻烦!喜欢折腾的大佬可以参考一下!!

如果懒的折腾可以淘宝上直接花几块钱买一个激活码。

 

操作步骤

 

1)首先保证你的当前win7是永久激活状态的(盗版正版无所谓都可以,激活工具网上一大把)
2)然后下载和你当前win7版本对应的win10镜像,(纯净版官方原版镜像可以去i tell you下载)
3)在 Win10 镜像里的 Sources 文件夹下找到名为「gatherosstate.exe」复制到Win7的电脑运行 稍等片刻,会生成一个「GenuineTicket.xml」的文件 保存这个文件

 

4)然后正常方法安装Win10系统,安装过程中无需输入序列号 直接跳过。

 

5)安装完成后按将上面生成的「GenuineTicket.xml」复制到 ProgramData\Microsoft\Windows\ClipSVC\GenuineTicket

PS: 找不到目录?可以按下图操作搜索一下!

 

 

6)放入此文件夹中之后重启系统完成激活!

 

特别提醒

1)如果你Win7是家庭版 那么win10也要装家庭版 ,win7是旗舰版或专业版 win10就要装Win10专业版!

2)该方式激活的Win10 是永久激活,重装系统后自动激活系统。

3)获取「GenuineTicket.xml」后,可以升级安装Win10 ,也可以格式化后全新新安装Win10!

 

 

 

相关资源

Win 7 专业版:ed2k://|file|cn_windows_7_professional_x64_dvd_x15-65791.iso|3341268992|3474800521D169FBF3F5E527CD835156|/

 

Win10专业版:ed2k://|file|cn_windows_10_multiple_editions_version_1703_updated_march_2017_x64_dvd_10194190.iso|458

从 wireshark 抓包开始学习 https

导语

目前互联网大量web的应用层协议从http迁移到了https,https已经在越来越多的场合替换http协议。近期由于业务需要,我们通过Wireshark对https的请求进行了一次抓包分析,同时也了解了更多https相关知识,整理出来和大家一起学习。

一、概述

到底什么是HTTPS呢?简单而言,HTTPS是使用TLS/SSL加密的HTTP协议。HTTP协议通过明文进行信息传输,存在信息窃听、信息篡改和身份冒充的风险,而协议TLS/SSL具有信息加密、完整性校验和身份验证的功能,可以避免此类问题。

TLS/SSL全称为:安全传输层协议(Transport Layer Security),是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。

(注:大多数人将HTTPS和SSL(Secure Sockets Layer)联系起来,SSL是Netscape公司在90年代中期发明的。随着时间的推移这种说法就渐渐变得不准确了。由于Netscape失去了市场份额,它将SSL的维护工作移交给因特网工程任务组(IETF)。第一个后Netscape版本被重新命名为安全传输层协议(TLS),TLS1.0是在1999年1月份发布的。由于TLS诞生都10年了, 所以真正的“SSL”传输其实是几乎见不到.)

二、Wireshark看TLS握手

下面是我们抓包数据中的一次https请求的建立过程:

很明显,前3条消息对应的是TCP通信的三次握手的过程。(需要说明的是,根据RFC2818,一旦出现“https”就意味着TCP需要连接目标端的443号端口)

Client Hello

从这条消息开始,开始TLS协议的握手过程

Version

我们可以在Client Hello消息中,看到两个Version信息,根据RFC5246它们分别是:第一处表示本次通信使用的TLS版本为1.0;第二处表示客户端期望使用的TLS版本为1.2。(注:版本协商,客户端会提供它能支持的最高的TLS版本,由服务端确认最终使用的TLS版本)

Random

前面的四个字节是当前时间,它的格式是Unix时间戳。跟随其后是28字节的随机数,它将在后面过程中使用。

Session ID

在这里它是空值或者是null。如果在几秒前连接过该服务,它就可能继续使用之前的会话,不需要重新执行整个“握手”过程。在我们的抓包内容中,由于是第一次连接,所以Session ID长度为0。

Cipher Suites

它是请求发送端所支持的密码算法的一个列表。这里看到请求发起方提供了22个可供选择的选项。关于CipherSuite的解释,我们在后面篇章会有更详细的介绍。

Extension:server name

这个字段包含了我们请求要发往的服务器的域名信息,它作用有些类似HTTP协议header中的“Host”,这样就允许了Internet公司出于成本的考虑将上百个网站绑定在同一IP 地址上。

ServerHello

其中有服务端对Client Hello回应的一些关键信息:

Random

同Client Hello类似,它返回了服务端的当前时间,以及服务端产生的一个28字节随机数

Version

服务端确认通信使用的TLS版本:TLS1.2

Cipher Suite

服务端选择的通信使用的加密协议套件:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Session ID

建立的会话标识ID,有了它,随后重连服务器就不需要再执行一个完整的握手过程了。

Certificate&Server Key Exchange&Server Hello Done

在同一条消息中包含了:服务端返回证书,交换公钥以及“Server Hello”结束三部分内容。客户端收到服务证书后,会先验证证书的合法性,如果验证通过才会进行后续通信。

Client Key Exchange&Change Cipher Spec、Encrypted Handshake Message(Finished)

这里三条客户端发送的消息:交换公钥,编码改变通知 和 握手结束消息。 ChangeCipher Spec 、Multipiple Handshake Messages(Finished)

这是TLS握手过程的最后一条消息,内容为:服务端编码改变通知 和 握手结束消息。至此,TLS通信的整个握手过程已经完成。

要注意,在Finished消息中包含两部分信息,finish标识和hash校验信息。但是无论客户端还是服务端,在Change Cipher Spec之后的内容都已经通过加密方式传输了,所以Finished中具体内容已经无法通过Wireshark直接查看。 TLS通信过程可以总结为:

客户端将可支持TLS版本、加密套件列表、随机数等,通过Hello 结构体传给服务端 服务端将选定的TLS版本、使用的加密套件和服务端产生的随机数通过Hello结构体回传给客户端。同时也会把证书传给客户端,证书里面同时带有公钥 客户端验证证书后,会计算产生随机数字Pre-master secret并用证书公钥加密后发给服务器,同时通过计算获得协商密钥 服务端使用私钥解密出Pre-master secret,并通过计算获得协商密钥 最后双方使用对称加密的密钥进行加解密传输

三、CipherSuite的介绍

在基本了解TLS的通信过程之后,我们再来了解一下CipherSuite的概念。每一个CipherSuite都是4个算法类型的组合:

1个authentication (认证)算法 1个encryption(加密)算法 1个message authentication code (消息认证码 简称MAC)算法 1个key exchange(密钥交换)算法 显然,这4个算法是用于实现信息加密、完整性校验 和 身份验证的功能

从我们的抓包内容中可以看到:服务端最终选择的加密套件为:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

对应到CipherSuite算法类型后:

CipherSuite算法类型 示例中对应算法 常见算法名称 认证算法 RSA RSA(主流),DSA,ECDSA 加密算法 AES_256_GCM AES128/256 bit,加密模式gcm/ cbc/ ecb

RC4和3DES(不推荐),DES(已淘汰)

MAC算法 SHA384 SHA256, SHA384, SHA1 密钥交换算法 ECDHE DHE,ECDHE (注:关于cipher suite中各算法的流行趋势,感兴趣的同学可以自行检索)

关于CipherSuite协商过程:https消息内容是通过CipherSuite来指定过程中使用的算法的服务端大多数情况下,会从客户端Cipher Suites中按排列顺序从上往下进行选择,因为排列靠前意味着安全性越高算法的选择会一定程度上影响https连接的性能,在某些场景下服务端可以综合考虑安全性和效率问题,选择更加合适的算法组合。

四、一些数学相关的知识

对称加密 和 非对称加密

对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法。相应的非对称加密算法中加密和解密使用两种不同的密钥,其中,公钥是公开的,私钥由个人持有,必须保密。

HTTPS 的通信过程中只在握手阶段使用了非对称加密,后面的通信过程均使用的对称加密。尽管非对称加密相比对称加密更加安全,但也存在两个明显缺点:

CPU 计算资源消耗大。一次完全 TLS 握手,密钥交换时的非对称解密计算量占整个握手过程的 90% 以上,如果应用层数据也使用非对称加解密,性能开销太大,无法承受。 非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的RSA公钥长度是2048位,意味着待加密内容不能超过256字节。所以非对称加密目前只能用来作密钥交换或者内容签名,不适合用来做应用层传输内容的加解密。 非对称密钥交换算法是整个 HTTPS 得以安全的基石,充分理解非对称密钥交换算法是理解 HTTPS 协议和功能的关键。下面我们选取其中常见的两种非对称算法进行介绍:

RSA算法简介

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的”非对称加密算法”。

公钥与密钥的产生

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:

随意选择两个大的质数p和q,p不等于q,计算N=pq。

根据欧拉函数,求得r =φ(N)=φ(p)φ(q)= (p-1)(q-1)

选择一个小于 r 的整数 e,求得 e 关于模 r 的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)

将 p 和 q 的记录销毁。

(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。

加密消息

假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N,且与N互质的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c: n^e ≡ c (mod N)

计算c并不复杂。Bob算出c后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:

c^d ≡ n (mod N)

得到n后,她可以将原来的信息m重新复原。

解码的原理是

c^d ≡ n^(e·d)(mod N)

已知e·d ≡ 1 (mod r),即e·d =1 +hφ(N)。由欧拉定理可得:

n ^(e·d) =n^ (1 +hφ(N))=n·((n^φ(N))^h)≡(n(1)^h)(modN) ≡ n (mod N)

签名消息

RSA也可以用来为一个消息署名。假如Alice想给Bob传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的私钥加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。Bob获得这个消息后可以用Alice的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。

通过一次简单实践更好的了解RSA

  1. 假设p = 2,q = 5(p,q都是素数即可),则N = pq = 10;
  2. 得到:r = (p-1)(q-1) = (2-1)(5-1) = 4;
  3. 根据模反元素公式,可以得出,e·d ≡ 1 (mod 4),即e·d = 4n+1 (n为正整数);
  4. 假设n=5,则e·d = 21,且e、d为正整数,并且e与r互质,则e = 7,d = 3;
  5. 获得公钥和密钥:公钥为(N, e) = (10, 7),密钥为(N, d) = (10, 3);
  6. 假设要传输的数字为2,通过公钥加密后为:(2^7)(mod 10) = 8;
  7. 通过密钥解密:(8^3)(mod 10) = 512(mod 10) = 2,即获得结果; ECDHE

目前大部分 HTTPS 流量是使用 ECDHE进行密钥交换。

在介绍ECDHE之前,先来看一下ECDH,它其实是使用椭圆曲线加密技术(ECC)的 DH密钥交换(Diffie-Hellman)算法。DH密钥交换算法,可以让交换双方在不共享任何秘密的情况下协商出一个密钥。ECC则是建立在基于椭圆曲线的离散对数问题上的密码体制,在相同的密钥长度下,其安全性比RSA更高。

而ECDHE则是ECDH的Ephemeral version,它会为每次握手过程分配一个不同的DH key,从而提供前向安全性。实际上,在HTTP/2中允许使用的Cipher Suite必须采用具有前向安全性的密钥交换算法。

五、总结

https实际就是在TCP层与http层之间加入了TLS/SSL来解决安全问题的。

在进行应用数据传输之前,TLS需要通过握手过程来协商安全通信所需的相关参数。

整个通信过程中主要用到散列、对称加密、非对称加密和证书等相关技术,来解决客户端与服务器数据传输中各种安全风险问题,从而达到保证整个通信过程的安全。

六、参考链接

http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser

https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/

https://tools.ietf.org/html/rfc5246

https://blog.helong.info/blog/2015/01/23/ssl_tls_ciphersuite_intro/