Android通过点击按钮改变Activity的背景颜色_个人笔记

今天学习了通过两个按钮的点击监听事件。

private Button button1; 

private Button button2; 

private LinearLayout layout;

先声明按钮、布局LinearLayout

package com.example.cong.colorbutton;
import android.graphics.Color;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    private Button button1;
    private Button button2;
    private Button button3;
    private LinearLayout layout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1= (Button) this.findViewById(R.id.button1);
        button2= (Button) this.findViewById(R.id.button2);
        button3= (Button) this.findViewById(R.id.button3);
        layout= (LinearLayout) this.findViewById(R.id.layout);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                layout.setBackgroundColor(Color.RED);

            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                layout.setBackgroundColor(Color.BLUE);

            }
        });
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                layout.setBackgroundColor(Color.GREEN);

            }
        });
    }
}

以下是xml的代码

在这里需要注意的是要明确LinearLayout的ID

android:id=“@+id/layout”

实现出来就是点哪个按钮,背景就变什么色。

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

更改pip源至国内镜像,显著提升下载速度

经常在使用python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的烦恼。

网上有很多可用的源,例如豆瓣:http://pypi.douban.com/simple/

清华:https://pypi.tuna.tsinghua.edu.cn/simple

最近使用得比较多并且比较顺手的是清华大学的pip源,它是官网pypi的镜像,每隔5分钟同步一次,地址为 https://pypi.tuna.tsinghua.edu.cn/simple

临时使用:

可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent,这样就会从清华这边的镜像去安装gevent库。

永久修改,一劳永逸:

linux下,修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至tuna,内容如下:

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

#教程# 获取免费的Let’s Encrypt泛域名野卡证书

前言

去年就听说 Let’s encrypt 要出野卡证书了,刚刚看到消息,本博主也来尝鲜。本教程会使用 acme.sh 来获取,暂定只支持 DNS 记录的方式来获取,不支持 Standalone。有任何问题欢迎讨论。根据 Let’s Encrypt 的尿性,证书要每隔90天续期一次哦。

普通DV证书:一般颁发给单个域名或者多个单域名。

野卡证书:支持 *.abc.com 旗下所有的域名,仅需这一张证书。

准备工作

  • 需要申请证书的域名在以下解析商解析:
    • CloudFlare
    • DNSPod.cn
    • CloudXNS
    • GoDaddy.com
    • PowerDNS
    • 更多请 点击这里
  • 一台Linux VPS

步骤

本教程以在 CloudFlare 解析的 zhujiboke.com 域名为例。其他解析商请参考 这里 设置一下本地的解析API

首先去 CloudFlare 找到自己的 API KEY,地址:https://www.cloudflare.com/a/profile

http://wx2.sinaimg.cn/large/005tNuVtly1fpc841hbgvj31j40uswiv.jpg

然后我们连接到VPS上,运行以下命令安装 curl

Debian / Ubuntu:

Centos / RHEL:

然后我们安装 acme.sh 程序:

我们输入自己的CloudFlare信息:

然后我们开始获取证书:

如果出现 500 错误,那应该是 Let’s Encrypt 服务器暂时无法连接,过一段时间再看看。

注意事项:第一个 -d 后面不可以直接写 *.xx.com ,一定要写个普通单域名,第二个 -d 后面可以写泛域名。

建议使用3个 -d,即 @,www,和*.

感谢 Leonn 修正本文错误。

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

VPS修改DNS

VPS里提供的VPS一般是自己搭建的,有时不够稳定好用。

修改VPS里的默认DNS文件

修改其中的内容为:

或者可以直接执行下面的命令:

直接替换resolv.conf的内容。重启以后生效。

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

基于Minio和Thumbor搭建独立图片服务

多数应用系统都会用到图片存储,从系统架构角度来说,像图片存储这样的服务应该尽量从核心业务中剥离出来。很多人会选择在线云存储服务,比如七牛云存储之类的。但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。

自己开发实现一套图片存储服务系统,会花不少功夫,但如果有现成的方案何乐而不为呢?我在Github上发现Minio和Thumbor这两个项目可以帮我们达成需求。

Minio

Minio Cloud Storage是一个分布式对象存储系统。它是一个基于Go的开源项目,并且实现了Amazon S3的API。也就是说Minio相当于一个开源的Amazon S3。

使用docker安装可能是最省事的方式,两行命令即可安装下载并且运行起来。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。生产环境下的安装部署请参考文档。

docker pull minio/minio
docker run -p 9000:9000 minio/minio server /export

启动之后,命令行中就会显示一堆系统信息。

Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000
AccessKey: PT7TIDXEV7KH7S5R91JH
SecretKey: 17hdYH0mF2Ljd3ahZ7JGyi5l/ZPjunLlldUMY/A0
Region:    us-east-1
SQS ARNs:  

之后就可以在浏览器中访问 http://127.0.0.1:9000 并且使用AccessKey和SecretKey登录。

其核心功能很简单,创建bucket,上传文件。其所有的文件链接都是含有过期时间的私有链接。然后我们就可以使用其提供的SDK使用了,就是这么简单。

minio专注于文件存储,并没有什么图片处理功能,但是我们可以使用thumbor这个服务来做图片处理。

Thumbor

Thumbor是一个非常强大的图片处理服务,可以实现图片裁剪、缩放、滤镜,甚至是人脸识别。

它是一个基于Python的开源项目,在python环境下可以通过pip安装。

pip install thumbor

然后使用下面命令即可运行。

thumbor-config > ./thumbor.conf # 生成配置文件
thumbor --port=8888 --conf=thumbor.conf 

该服务运行在本地的8888端口,之后可以就可以直接通过url调用服务了。

比如这张图片 https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpg

就可以使用 http://localhost:8888/unsafe/300x200/https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpg 这个url使其缩放到300×200大小。

Thumbor AWS

Thumbor处理图片很强大,但是只提供了很弱的图片存储功能。其图片上传修改接口没有做验证,所以默认情况下没有开启。但是Thumbor有一些社区支持,第三方开发者做了一些扩展。其中Thumbor AWS 这个扩展可以把Thumbor后端跟Amazon S3整合起来。在url上提交图片文件的key,Thumbor的后端会从Amazon S3中取出文件做处理。而之前Minio兼容Amazon S3的Api。所以意味着只需要做一点改动,就可以整合这两个服务。最终就可以达成,利用Minio上传存储图片,利用Thumbor取出图片做处理。

我们利用pip来安装这个扩展。

pip install tc_aws

Thumbor AWS这个扩展利用Boto3连接Amazon S3的SDK,根据Boto3文档中的配置,我们需要创建 ~/.aws/credentials 这个文件,并且填写刚才Minio提供的AccessKey和SecretKey,授权这个服务访问Minio。

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

之后在刚才利用thumbor_conf生成的thumbor.conf中修改一些配置。

TC_AWS_REGION='us-east-1' #填写minio提供的Region
TC_AWS_ENDPOINT='http://127.0.0.1:9000' #将默认的Amazon S3地址换成minio运行地址
LOADER = 'tc_aws.loaders.s3_loader' #将Thumbor的loader换成tc_aws.loaders.s3_loader

重新启动Thumbor,然后就可以在浏览器中通过Thumbor访问Minio中的图片了。

比如,在Minio的docker这个bucket中上传了一张aaa.jpg,然后我们就可以通过 http://localhost:8888/unsafe/docker/aaa.jpg 这个地址访问到这张图片的原图。当然,我们可以通过 http://localhost:8888/unsafe/300x200/docker/aaa.jpg 这种方式对这张图片进行300×200的缩放。

这样我们就大功告成了。

总结

各种服务都有其专精的一面,幸好Amazon S3在云服务API层面上形成了某种事实上的标准,所以这点能够帮助我们将一些服务整合在一起。

实现效果上来看,最终达成了图片存储和提取缩放需求,对于一些项目也足够使用。不过图片通过Thumbor处理后,其私有链接的属性也没了。这在一些要求高的企业服务项目中也是蛮尴尬的。

简单看了下Thumbor的源码,其图片输出是tornado实现的,相信有时间hack一下源码,实现私有链接也不会太困难的。

Enjoy it!

本文来自:Segmentfault

感谢作者:fengluo

查看原文:基于Minio和Thumbor搭建独立图片服务

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

v2ray

个人用的配置,直接装Nginx,然后用v2ray的一键脚本(v2ray.com)
ws+tls的配置参考

Nginx:
server {
listen 80;
listen 443 ssl http2;
error_page 400 = error.htmll;   #自行修改400页面
server_name example.com;      #自行修改域名
index index.html index.htm index.php;
root /var/www/html;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;   #自行修改RSA KEY
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;

#error_page 404 /404.html;
#error_page 502 /502.html;

location /  {
root “/var/www/html/”;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /v2ray/ {                          #你的v2ray websocket地址
proxy_redirect off;
proxy_pass http://127.0.0.1:419;  #自行修改地址,和v2ray config里的对应就行
proxy_http_version 1.1;                #另,若使用http://1.2.3.4:1234这样的,直接到其他节点了,请多配一个location和不同的目录地址用作区分
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
}
}

v2ray:

{
“log” : {
“access”: “/var/log/v2ray-access.log”,
“error”: “/var/log/v2ray-error.log”,
“loglevel”: “warning”
},

“inbound”:{                   #websocket地址,端口和上面的对应就行,可自行修改
“port”: 419,
“listen”: “127.0.0.1”,
“protocol”: “vmess”,
“allocate”: {
“strategy”: “always”
},
“settings”: {
“udp”: true,

“clients”: [
{
“id”: “”,         #uuid,自行生成,此处已空
“alterId”: 8,   #额外id,自己喜好
“level”: 1
}
]
},
“streamSettings”: {
“network”: “ws”,
“security”: “auto”,
“wsSettings”: {
“connectionReuse”: true,
“path”: “/v2ray/”                    #你的websocket地址,自行修改至和Nginx一致
}
}
},

“outbound”: {
“protocol”: “freedom”,
“settings”: {}
}
}

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

Win10彻底禁用/恢复Windows Defender方法

Windows10系统彻底禁用/恢复Windows Defender方法

Windows10系统彻底禁用Windows Defender方法

【方法一】使用reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令,可以彻底禁用Windows10系统的Windows Defender。

操作步骤:

右键点击系统桌面左下角的【开始】,在开始菜单中点击【命令提示符(管理员)】;

复制:reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令,在管理员命令提示符窗口中右键点击空白处;

 当reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令复制到窗口中以后,我们按下键盘上的回车键,显示:操作成功完成;

我们在系统设置的【更新和安全】中点击:Windows Defender,可以看到:

Windows Defender  某些设置由组织来管理

我们点击:启用Windows Defender,弹出Windows Defender对话框:

此应用已被组策略关闭(实际上不是被组策略关闭,而是在注册表中新建了DisableAntiSpyware的DWORD(32位)值,关闭了Windows Defender )

【方法二】在注册表编辑器中新建DisableAntiSpyware的DWORD(32位)值 ,可以彻底禁用Windows10系统的Windows Defender。

操作步骤:

进入注册表编辑器,复制:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径,右键点击地址栏,在右键菜单中点击【粘贴】;当HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径粘贴到地址栏中后,按下键盘上的回车键,即定位到Windows Defender键,在Windows Defender右侧窗口中,右键点击空白处 – 新建 – DWORD(32位)值 ;我们把新建#1命名为:DisableAntiSpyware,左键双击DisableAntiSpyware,在弹出的编辑 DWORD(32位)值对话框中,把DisableAntiSpyware的数值数据从“0”更改为“1”,再点击:确定;

回到注册表编辑器窗口,可以看到:

DisableAntiSpyware   REG_DWORD   0x00000001(1)

点击窗口左上角的【文件】,在下拉菜单中点击【退出】,退出注册表编辑器。

我们在系统设置的【更新和安全】中点击:Windows Defender,可以看到:

Windows Defender  某些设置由组织来管理,已经关闭Windows Defender。

Windows10系统恢复Windows Defender方法

【方法一】使用reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令,可以恢复Windows10系统的Windows Defender。

操作步骤:

复制reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令,在管理员命令提示符窗口中右键点击空白处;当reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令复制到窗口中以后,我们按下键盘上的回车键,显示:操作成功完成;

在系统设置的【更新和安全】中点击:Windows Defender,可以看到:Windows Defender已恢复,点击:打开Windows Defender,便可以打开Windows Defender窗口,显示:电脑状态 – 受保护。

【方法二】在注册表编辑器中删除Windows Defender右侧窗口中的DisableAntiSpyware键或将其数值数据从“1”更改为“0”,可以恢复Windows10系统的Windows Defender。

操作步骤:

进入注册表编辑器,复制:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径,右键点击地址栏,在右键菜单中点击【粘贴】;

当HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径粘贴到地址栏中后,按下键盘上的回车键,即定位到Windows Defender键;

 在Windows Defender对应右侧窗口中,删除DisableAntiSpyware键或将其数值数据从“1”更改为“0”;都可以恢复Windows Defender。

在系统设置的【更新和安全】中点击:Windows Defender,可以看到:Windows Defender已恢复。

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

Win10彻底禁用/恢复Windows Defender方法

Windows10系统彻底禁用/恢复Windows Defender方法

Windows10系统彻底禁用Windows Defender方法

【方法一】使用reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令,可以彻底禁用Windows10系统的Windows Defender。

操作步骤:

右键点击系统桌面左下角的【开始】,在开始菜单中点击【命令提示符(管理员)】;

复制:reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令,在管理员命令提示符窗口中右键点击空白处;

 当reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f命令复制到窗口中以后,我们按下键盘上的回车键,显示:操作成功完成;

我们在系统设置的【更新和安全】中点击:Windows Defender,可以看到:

Windows Defender  某些设置由组织来管理

我们点击:启用Windows Defender,弹出Windows Defender对话框:

此应用已被组策略关闭(实际上不是被组策略关闭,而是在注册表中新建了DisableAntiSpyware的DWORD(32位)值,关闭了Windows Defender )

【方法二】在注册表编辑器中新建DisableAntiSpyware的DWORD(32位)值 ,可以彻底禁用Windows10系统的Windows Defender。

操作步骤:

进入注册表编辑器,复制:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径,右键点击地址栏,在右键菜单中点击【粘贴】;当HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径粘贴到地址栏中后,按下键盘上的回车键,即定位到Windows Defender键,在Windows Defender右侧窗口中,右键点击空白处 -- 新建 -- DWORD(32位)值 ;我们把新建#1命名为:DisableAntiSpyware,左键双击DisableAntiSpyware,在弹出的编辑 DWORD(32位)值对话框中,把DisableAntiSpyware的数值数据从“0”更改为“1”,再点击:确定;

回到注册表编辑器窗口,可以看到:

DisableAntiSpyware   REG_DWORD   0x00000001(1)

点击窗口左上角的【文件】,在下拉菜单中点击【退出】,退出注册表编辑器。

我们在系统设置的【更新和安全】中点击:Windows Defender,可以看到:

Windows Defender  某些设置由组织来管理,已经关闭Windows Defender。

Windows10系统恢复Windows Defender方法

【方法一】使用reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令,可以恢复Windows10系统的Windows Defender。

操作步骤:

复制reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令,在管理员命令提示符窗口中右键点击空白处;当reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 0 /t REG_DWORD /f命令复制到窗口中以后,我们按下键盘上的回车键,显示:操作成功完成;

在系统设置的【更新和安全】中点击:Windows Defender,可以看到:Windows Defender已恢复,点击:打开Windows Defender,便可以打开Windows Defender窗口,显示:电脑状态 -- 受保护。

【方法二】在注册表编辑器中删除Windows Defender右侧窗口中的DisableAntiSpyware键或将其数值数据从“1”更改为“0”,可以恢复Windows10系统的Windows Defender。

操作步骤:

进入注册表编辑器,复制:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径,右键点击地址栏,在右键菜单中点击【粘贴】;

当HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender注册表路径粘贴到地址栏中后,按下键盘上的回车键,即定位到Windows Defender键;

 在Windows Defender对应右侧窗口中,删除DisableAntiSpyware键或将其数值数据从“1”更改为“0”;都可以恢复Windows Defender。

在系统设置的【更新和安全】中点击:Windows Defender,可以看到:Windows Defender已恢复。

发表在 日常 | 留下评论

Win10技巧:让任务栏时间显示“秒”

Win10任务栏右侧显示系统时间,默认格式为“时:分”,如何才能显示“秒”呢?在Windows10一周年更新版及后续版本,跟着IT之家修改注册表可以让系统时间显示精确到秒。

具体步骤如下:

1、在Cortana搜索栏输入regedit,按回车键进入注册表编辑器

2、定位到:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced

http://wx2.sinaimg.cn/large/005tNuVtly1fo38mw18o2j30go0ca3zw.jpg

3、新建DWORD(32位)值,命名为ShowSecondsInSystemClock

4、修改数值数据为1

http://wx3.sinaimg.cn/large/005tNuVtly1fo38n9hbhuj30ap06zglu.jpg

5、重启explorer.exe

http://wx3.sinaimg.cn/large/005tNuVtly1fo38nrb5waj30f60b33yv.jpg

要想改回默认设置,直接删除ShowSecondsInSystemClock,重启文件资源管理器即可。

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论

Win10使用进阶:一招让系统任务栏变得更透明

1. win10开启透明效果(设置——个性化——颜色,开启“使开始菜单、任务栏和操作中心透明”选项。)

http://wx3.sinaimg.cn/large/005tNuVtly1fo389p2c8hj30zn0lcdhy.jpg

17年11月RS3更新后的选项变成了这个,同样的把透明效果全打开

http://wx1.sinaimg.cn/large/005tNuVtly1fo38a1t7vrj30k00fm74o.jpg

2. win+R → regedit 打开注册表,进入:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced文件夹中,新建名为UseOLEDTaskbarTransparency的DWORD(32位)

http://wx2.sinaimg.cn/large/005tNuVtly1fo38ah7eykj30nf0cn0vn.jpg

双击该键值

http://wx4.sinaimg.cn/large/005tNuVtly1fo38aw037gj312n0ifadd.jpg

http://wx2.sinaimg.cn/large/005tNuVtly1fo38b3x2osj30dr089q3f.jpg

把键值改成1

3. 重启电脑

Let’s block ads! (Why?)

发表在 日常 | 标签为 | 留下评论