咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

原文
Android P 为用户和开发者引入众多新特性和新功能。

本文重点介绍面向开发者的新功能。 要了解新 API,请阅读 API 差异报告或访问 Android API 参考 — 为醒目起见,将突出显示新 API。 请务必查阅 Android P 行为变更以了解平台变更可能给您的应用带来哪些方面的影响。

利用 Wi-Fi RTT 进行室内定位

Android P 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,从而让您的应用可以利用室内定位功能。
在提供硬件支持的 Android P 设备上,应用可以使用全新的 RTT API 来测量与附近支持 RTT 的 Wi-Fi 接入点 (AP) 的距离。 设备必须已启用定位并开启了 Wi-Fi 扫描(在 Settings > Location 下),同时您的应用必须具有 ACCESS_FINE_LOCATION 权限。 设备不需要连接至 AP 即可使用 RTT。 为保证隐私性,只有手机可以确定与 AP 的距离;AP 不具备该信息。

如果您的设备测量与 3 个或更多 AP 的距离,您可以使用一个多点定位算法来预估与这些测量值最相符的设备位置。 结果通常精准至 1 至 2 米。

阅读全文 »

参考:request-custom

在Android中,使用Volley来请求JSON数据,Volley自带 StringRequest JsonObjectRequest JsonArrayRequest JsonRequest

GET示例

自定义Request,就是在Request中使用Gson把数据处理为对象,返回给调用者。示例 GsonRequestSample.java (GET Request):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//代码来自:https://developer.android.google.cn/training/volley/request-custom
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

import java.io.UnsupportedEncodingException;
import java.util.Map;

public class GsonRequestSample<T> extends Request<T> {

private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Response.Listener<T> listener;


/**
* Make a GET request and return a parsed object from JSON.
*
* @param url URL of the request to make
* @param clazz Relevant class object, for Gson's reflection
* @param headers Map of request headers
*/

public GsonRequestSample(String url, Class<T> clazz, Map<String, String> headers,
Response.Listener<T> listener, Response.ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}

@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}

阅读全文 »

摘录: https://developer.android.google.cn/training/articles/security-ssl

安全套接字层 (SSL)(现在技术上称为传输层安全协议 (TLS))是一个通用构建块,用于在客户端与服务器之间进行加密通信。应用很可能以错误的方式使用 SSL,从而导致恶意实体能够拦截网络上的应用数据。为了帮助您确保您的应用不会出现这种情况,本文重点介绍了使用安全网络协议的常见陷阱,并解决对使用公钥基础结构 (PKI) 关注较多的问题。

概念

在典型的 SSL 使用场景中,会使用一个包含公钥及与其匹配的私钥的证书配置服务器。作为 SSL 客户端与服务器握手的一部分,服务器将通过使用公钥加密签署其证书来证明自己具有私钥。

不过,任何人都可以生成他们自己的证书和私钥,因此,一个简单的握手只能说明服务器知道与证书公钥匹配的私钥,除此之外什么都证明不了。解决此问题的一个方法是让客户端拥有其信任的一个或多个证书集。如果证书不在此集合中,则不会信任服务器。

阅读全文 »

对于已知的 TLS/SSL 漏洞和错配置,可以通过 Nogotofail 轻松确认您的应用程序是否安全。它是一款自动执行的工具,功能强大并且可扩展,用于测试通过它传送网络流量的任意设备的网络安全问题。

Nogotofail 可用于三个主要用例:

  • 查找错误和漏洞。
  • 验证修复并监测回归。
  • 了解哪些应用和设备正在生成哪些流量。

Nogotofail 适用于 Android、iOS、Linux、Windows、Chrome 操作系统、OSX。事实上,任何用于连接互联网的设备都可以使用 Nogotofail。在 Android 和 Linux 上提供了一个易于使用的客户端来配置设置和获取通知,同时还提供了一个本身可作为路由器、VPN 服务器或代理部署的攻击引擎。

您可以在 Nogotofail 开源项目网站上访问此工具。

阅读全文 »

标你妹

地址
在线,自动生成标注,上传psd自动生成标注。

蓝湖

地址
在线,自动生成标注/切图,还有原型制作/逻辑连线,支持Sketch 和 Photoshop 设计图,通过插件上传即可实现自动标注。

  1. spring-boot-examples

    Github

  2. spring-boot-quick
    Github
    基于springboot的快速学习示例,整合各种LZ遇到的开源框架,如:
    rabbitmq、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包等等

摘:可能很多人正在犹豫,在服务治理的时候应该选择那个框架呢?如果公司对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 HTTP 高很多;如果团队不想对技术架构做大的改造建议使用 Dubbo,Dubbo 仅仅需要少量的修改就可以融入到内部系统的架构中。但如果技术团队喜欢挑战新技术,建议选择 Spring Cloud,Spring Cloud 架构体系有有趣很酷的技术。如果公司选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一。——出自《阿里Dubbo疯狂更新,关Spring Cloud什么事?

Dubbo性能高(RPC ),轻量级,设计的也很自由,开发者可以各种DIY,比如,他的注册中心,甚至可以用Redis来做。

Spring Cloud 是一个生态,要使用各种组件来组成整个服务,因为服务之间是基于HTTP通讯的,所以没有RPC 那么高效率,求的是一个稳。

总结:

中小型项目可以用Dubbo来快速实现,而且现在Dubbo已经支持SpringBoot。

阅读全文 »

  1. spring-cloud-examples

    Github

  2. SpringCloud入门系列(第 001 篇)

    博客

  3. Spring Cloud入门到实战系列教程(猿天地尹吉欢)

    博客

  4. Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ)

    Github

  5. 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(参考实战)

    Github

  6. spring cloud 脚手架

    Github

markdown文档很多时候要流程图,不用图片,用字符就可以显示,如:

1
2
3
+--------+  request   +--------+
| client | ---------> | server |
+--------+ +--------+

那么如何画这种图?

Easy DSL的语法描述图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ apt-get install libgraph-easy-perl
$
$ graph-easy <<< '[ client ] - request -> [ server ]'
+--------+ request +--------+
| client | ---------> | server |
+--------+ +--------+
$
$
$
$ vim simple.txt
[ A ], [ B ], [ C ] --> [ D ]
$
$ graph-easy simple.txt
+---+ +---+ +---+
| A | --> | D | <-- | C |
+---+ +---+ +---+
^
|
|
+---+
| B |
+---+
阅读全文 »

环境:

  1. 客户机Winows
  2. 服务器Linux (192.168.0.66)

操作

  1. 客户端公钥

一般安装了Git,本地都有ssh公钥,在目录 C:\Users\xxx\.ssh (即 ~/.ssh )下
如果没有,执行ssh-keygen生成。

阅读全文 »

在局域网通过SSH登录Ubuntu服务器,发现很慢,10秒左右,修改SSH配置解决:

1
2
3
4
5
$ sudo vim /etc/ssh/ssh_config
#GSSAPIAuthentication yes
GSSAPIAuthentication no

$ systemctl restart sshd

GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似Kerberos 5 的通用网络安全系统接口。
该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。但该接口在目标机器无域名解析时会有问题。

截取字符串

1
2
3
str = "ABCDEFGFEE03"
print (str[10:12])
# 输出:03

分割字符串取倒数第一个

1
2
3
str = "HELLO6CF51D000003"
print(str.split('0000')[-1])
# 输出:03

列表中的字符串排序

阅读全文 »

在是否升级的考虑上,虽然不着急升级,但是要考虑以后发展的方向,比如2.0不支持的,我们在1.x中也要少用,方便以后升级。

  • Spring Boot 2.0 支持Java 9 ,最低 Java 8版本。
  • Spring Boot 1.x版本明确说明了没有对Java 9的支持计划。
  • 要求Gradle最低版本为3.4。
  • 要求Tomcat最低版本为8.5。
  • 要求Jetty最低版本为9.4。
  • spring-boot-starter-mustache和spring-boot-starter-thymeleaf不再依赖spring-boot-starter-web,现在你要自己选择并添加spring-boot-starter-web或spring-boot-starter-webflux作为依赖。

更详细的访问以下文章

在Spring Boot2中引入了 Reactor Netty ,不过名字叫 Webflux

org.springframework.boot:spring-boot-starter-webflux -> io.projectreactor.netty:reactor-netty -> io.netty:netty-all

要了解 WebFlux ,首先了解下什么是 Reactive Streams(响应式流) :

要真打算用weblux,感觉需要整体学一下Reactive响应式编程,否则很多东西不懂

Reactive Streams 是 JVM 中面向流的库标准和规范:

阅读全文 »

参考资料:

MQ产品比较-ActiveMQ-RocketMQ

MQ选型对比文档

专访RocketMQ联合创始人:项目思路、技术细节和未来规划

ActiveMQ

Java开发的,Apache的项目,是JMS规范的参考实现,也是Apache旗下的老牌消息服务引擎,在该Apache顶级项目下拥有不少子项目,包括由HornetMQ演变而来的Artemis,基于Scala号称下一代AMQ的Apollo等。

官网介绍:Apollo 是一个更快、更可靠、更容易维护的消息代理,它是由最初的ActiveMQ的基础构建的。它使用一个完全不同的线程和消息调度架构来实现这一点。与ActiveMQ一样,Apollo 是一个多协议代理,支持 STOMP、AMQP、MQTT、Openwire、SSL 和 WebSockets 。

优点:

阅读全文 »

所谓“锁仓合约”是指,用合约作为第三方托管资金,进行两方交易,并且有时间限制。

举个简单的例子:
一位老板雇佣一位工人工作10天,老板怕工人中途跑路,工人怕老板是奸商发不发工资,那么第三方托管是不错的选择,但是我们可以通过锁仓合约来实现,更加公正。

实现:老板创建一个锁仓合约,把钱转到合约上,10天后工人可以申请释放金额,但是没有到10天(如第9天)工人都无法把钱取出。

这个就是“时间锁”。

OpenZeppelin 项目已经实现了时间锁,我们可以基于它来修改适合我们的需求,来看看源码

阅读全文 »