对每个成员进行操作
dataStream.map { x => x * 2 }
例如我们将测温枪数据流中的每一行转化为样例类
原始数据
id,时间戳,温度 |
样例类
case class SensorReader(id: String, timestamp: Long, temperature: Double) |
map转化
val dataStream = inputStream |
过滤
dataStream.filter { _ != 0 } |
压平
dataStream.flatMap { str => str.split(" ") } |
合并多个流,要求数据格式一致
dataStream.union(otherStream1, otherStream2, ...) |
// Union 合并 必须同类型,但可以多个 |
按照key来分组
// aggregation 分组聚合,计算每个传感器当前的最小温度 |
keyedStream.sum(0) |
连接流,只能连接两个,但可以数据格式不同
someStream : DataStream[Int] = ... |
// Connect 合流 可以不同类型 但只能两个 |
侧向输出用于分流
假定目前有一批测温枪的体温数据,按照温度分为37°以上的高温和37°以下的正常温度
// 实现分流,按温度>37 和<=37 分为高温、常温流 |
Flink Operators
Flink Side Outputs
源码放在了Github上,见flink-scala
]]>Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理
K8s → 使容器化应用部署更加简洁和高效
分布式架构中的 Master - Node 模式
控制平面的组件对集群做全局决策
replicas
字段时,启动新的 pod
)。控制平面组件实际上也可以在任何节点上启动,也就是说可以在 Node
节点上启动
集群统一入口
存储系统
节点调度
调度决策考虑的因素包括 Pod 的
处理集群的后台任务
控制器包括:
嵌入特定云的控制逻辑入口,链接聚合到云提供商的应用编程接口中, 并分离出相互作用的组件与我们的集群交互的组件
下面的控制器都包含对云平台驱动的依赖:
Node组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。
一个在集群中每个节点上运行的代理。 它保证容器都运行在 Pod 中。
kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service)概念的一部分。
kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。
容器运行环境是负责运行容器的软件。
Kubernetes 支持多个容器运行环境: Docker、 containerd、CRI-O 以及任何实现 Kubernetes CRI (容器运行环境接口)。
插件使用 Kubernetes 资源(DaemonSet、 Deployment等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system
命名空间。
下面描述众多插件中的几种。有关可用插件的完整列表,请参见 插件(Addons)。
尽管其他插件都并非严格意义上的必需组件,但几乎所有 Kubernetes 集群都应该 有集群 DNS, 因为很多示例都需要 DNS 服务。
集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。
Kubernetes 启动的容器自动将此 DNS 服务器包含在其 DNS 搜索列表中。
Dashboard 是Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。
容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
集群层面日志 机制负责将容器的日志数据 保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。
CI
目标是使用GithubAction
构建Docker并推至自己的服务器运行具体过程如下Java
项目Push
新标签的时候,触发Github Action
构建jar
与Docker
,并推送至香港华为镜像中心,之后从自己服务器Pull
并运行。
那么为什么要使用香港华为镜像中心呢?
当然是因为 它免费 穷啊,
另一个原因就是使用香港的镜像中心速度体验非常好,从GithubAction
推一个100多M的镜像只用34s
Dockerfile
配置注意Dockerfile
文件的路径与Pom
平级
FROM openjdk:11-jre |
Pom
配置使用dockerfile-maven-plugin
插件可以直接mvn package
打出Docker Image
<build> |
Github Repository
配置在Seetings
-> Secrets
进行配置
DOCKER_ORGANIZTION # 华为镜像中的组织 e.g. di1shuai |
其中DOCKER_USERNAME
与DOCKER_PASSWORD
的值需要去华为云官网
账号 -> 我的凭证 -> 访问秘钥 -> 新增访问秘钥 -> 获得AK
和SK
DOCKER_USERNAME
=AK
DOCKER_PASSWORD
需要在Linux/Macos
机器上运行
printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//' |
将$AK
与$SK
替换为刚刚拿到的AK
和SK
Action
配置路径: .github/workflows/maven.yml
name: Java Deploy with Maven |
其中DOCKER_PROJECT: cmb-question-bank-api
替换为你自己的项目名
Git
推送一个v1.0.0
到Github
整个构建过程大约花费两分半
,还不要钱!
docker-compose
安装Elasticsearch
7.9.3
docker-compose
已经安装➜ elasticsearch-docker docker-compose version |
version: '2' |
docker-compose up -d |
config
配置文件复制到需要挂载的目录docker cp elasticsearch7.9.3:/usr/share/elasticsearch/config ~/top/data/elasticsearch/ |
docker rm elasticsearch7.9.3 kibana7.9.3 |
docker-compose.yml
中挂载目录的注释volumes: |
docker-compose up -d |
Elasticsearch: 访问9200
端口
Kibana: 访问5601
端口
ik
分词插件docker-compose exec elasticsearch elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip |
CI
目标: 使用GithubAction
发布Flutter
项目Android
- PlayStore
/GithubRelease
IOS
- AppStore
Macos
- GithubRelease
Linux
- GithubRelease
Windows
- GithubRelease
那就先来看看如何CI
发布Flutter
-Android
吧
pubspec.yaml
下的:dev_dependencies: |
flutter pub get |
pubspec.yaml
下的:dev_dependencies: |
flutter pub get |
Check
Android
- android/app/src/main/AndroidManifest.xml
IOS
- ios/Runner/Info.plist
文件路径 : android/app/src/main/AndroidManifest.xml
manifest
之后加入uses-permission
标签,e.g.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
具体权限名称参考 Manifest.permission
key.jks
,已有可忽略keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key |
keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key |
Gradle
路径: android/app/build.gradle
signingConfigs
以及 buildTypes
android { |
keystoreProperties
... |
path: macos
/linux
下 ~/.zshrc
or ~/.bashrc
## Flutter - Android |
APK
Buildflutter build apk --obfuscate --split-per-abi --split-debug-info=./info |
.apk
路径
build/app/outputs/apk/release/app-x86_64-release.apk |
AAB
Buildflutter build appbundle --obfuscate --split-debug-info=./info |
.aab
路径 build/app/outputs/bundle/release/app-release.aab
KEY_ALIAS # e.g. key |
SIGNING_KEY
加密key
得到openssl base64 -A -in ~/key.jks |
路径 .github/workflows/build.yml
name: beta-build |
git tag 1.0.0-beta1 |
助力您轻松过关招行积分答题活动,每日一搜,积分到手。
Android
IOS
Windows
Macos
Linux
定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知
多个观察者 Observer Implements
—依赖—> 数据对象 Subject Implement
构造方法传参构造Subject成员变量,并将自己注册在Subject的观察者列表
class ObserverImpl1 implements Observer{ |
数据对象变化 Subject Implement
—通知—> 多个观察者
`setXX()` `notifyObservers()`
Subject
interface Subject{ |
Subject Implement
class DataSubject implements Subject{ |
Observer
interface Observer{ |
Observer Implements
class ObserverImpl1 implements Observer{ |
气象站 – 程序入口
气象站测得数据后,要显示在显示板上
温度 当前状态显示板 |
java.util.Observable -> Subejct |
但是由于 Observable
是一个类,而Java是单继承的继承方式,耦合度太强,所以基本不建议使用
JDK 1.5 :enum、泛型,自动装箱与拆箱、可变参数、增强循环
JDK 1.6 :支持脚本语言、JDBC4.0API
JDK 1.7: 支持try-with-resources、switch语句块增加String支持、NIO2.0包
JDK 1.8: lambda表达式、Stream API、新的日期时间的API、方法引用、构造器引用
JDK 9 : 模块化系统、jshell
JDK 10 : 局部变量的类型推断
JDK 11: ZGC的引入、Epsilon GC
JDK 12: switch表达式、Shenandoah GC、增强GC
JDK 13: switch表达式引入yield、文本块
JDK14 :instanceof 模式识别、Records、启用Parallel Scavenge+Serial GC组合、删除CMS GC
System.out.println("foreach-less1.8"); |
//stream |
public static void distinctPrimary(String...numbers) { |
public interface Animal { |
public class LocalDateAndTimeAndDateTime { |
package com.diyishuai.java8.optional; |
java.util.Base64
将Base64引入工具包
package com.diyishuai.java8.base64; |
private static void classStaticFunctionReference() { |
private static void instanceFunctionReference() { |
无参构造
// 0 无参构造 |
单参构造
// 1 单参构造 |
双参构造
BiFunction<String,Double,Apple> appleBiFunction = Apple::new; |
Metaspace
替代 PermGen space
使用元空间Metaspace代替持久代(PermGen space),
JVM参数使用 -XX:MetaSpaceSize
和 -XX:MaxMetaspaceSize
设置大小。
< 9
// before 9 |
9
// after 9 |
public interface PrivateInterface { |
stream()
ifPresentOrElse()
or()
Optional<Integer> optional = Optional.of(1); |
try-with-resources
改进public static void main(String[] args) throws IOException { |
takeWhile()
返回第一次遇到false之前的元素dropWhile()
返回第一次遇到false之后的元素iterate
ofNullable
原数据
Supplier<Stream<Integer>> streamSupplier = () -> Stream.of(1, 2, 3, 4, 5); |
takeWhile()
System.out.println("takeWhile"); |
takeWhile |
dropWhile
System.out.println("dropWhile"); |
dropWhile |
iterate
System.out.println("iterate"); |
iterate |
ofNullable
Stream.ofNullable(100).forEach(System.out::println); |
ofNullable |
// Before 10 |
List,Set,Map 提供了一个新的静态方法 copyOf(Collection<? extends E> coll)
,它返回Collection集合一个不可修改的副本
var oldList = new ArrayList<String>(); |
JDK 9引入 G1 作为默认垃圾收集器,执行GC 时采用的是基于单线程标记扫描压缩算法(mark-sweep-compact)。为了最大限度地减少 Full GC 造成的应用停顿的影响,Java 10 中将为 G1 引入多线程并行 GC,同时会使用与年轻代回收和混合回收相同的并行工作线程数量,从而减少了 Full GC 的发生,以带来更好的性能提升、更大的吞吐量。
Java 10 中线程管控引入JVM安全点的概念,将允许在不运行全局JVM安全点的情况下实现线程回调,由线程本身或者JVM线程来执行,同时保持线程处于阻塞状态,这将会很方便使得停止单个线程或不停止线程成为可能。
orElseThrow()
orElseThrow()
在没有值时抛出异常
Optional<String> op; |
新增
// 判空 |
var map = new HashMap<String, Object>(); |
HttpClient client = HttpClient.newHttpClient(); |
Before 11
// 编译 |
11
java Hello.java |
ZGC ,即 Z Garbage Collector(垃圾收集器或垃圾回收器)。它是一个可伸缩的、低延迟的垃圾收集器。ZGC 主要为了满足如下目标进行设计:
支持case多个
before 12
switch (day) { |
12
switch (day) { |
NumberFormat
- 数字的格式化long number = 100000; |
//transform |
Hello Java 12 |
//indent |
Hello |
文件比较 返回第一个不匹配的位置,如果没有不匹配,则返回 -1L
Path path1 = Paths.get("/Users/shuai/Documents/GitRepo/mine/language/java-versions/java-12/src/main/java/com/di1shuai/java12/files/FilesDemo.java"); |
Teeing Collector 是 Streams API 中引入的新的收集器实用程序,它的作用是 merge 两个 collector 的结果
List<Student> students = Arrays.asList( |
31.0 : 93 |
yield可直接返回值
<13
// Before 13 |
13
return switch (day) { |
<13
String html = "<html>\n" + |
13
String html13 = """ |
传统的Java Socket API(java.net.ServerSocket 和 java.net.Socket)依赖于SocketImpl 的内部实现
在 Java 13之前,通过使用 PlainSocketImpl 作为 SocketImpl 的具体实现。
Java 13 中的新底层实现,引入 NioSocketImpl 的实现用以替换 SocketImpl 的 PlainSocketImpl 实现,此实现与 NIO(新 I/O)实现共享相同的内部基础结构,并且与现有的缓冲区高速缓存机制集成在一起。
FileSystems 类中添加了以下三种新方法,以便更容易地使用将文件内容视为文件系统的文件系统提供程序:
ZGC 是Java 11 中引入的最为瞩目的垃圾回收特性,是一种可伸缩、低延迟的垃圾收集器。但是实际使用中,它不能够主动将未使用的内存释放给操作系统。
Java 13 中对 ZGC 的改进,包括释放未使用内存给操作系统、支持最大堆大小为 16TB、JVM参数 -XX:SoftMaxHeapSize
来软限制堆大小
<14
Object obj = " hello Java 14 "; |
14
Object obj = " hello Java 14 "; |
recode
/** |
main
public static void main(String[] args) { |
14默认开启 XX:+ShowCodeDetailsInExceptionMessages
来显示详细信息
<14
java.lang.NullPointerException |
14
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toString()" because "str" is null |
封闭类 sealed
classpermits
可以允许三种类型的子类进行继承
封闭父类
public sealed class SealedDemo |
final
final class FinalClass extends SealedDemo { |
non-sealed
non-sealed class NonSealedClass extends SealedDemo { |
sealed
sealed class SealedClass extends SealedDemo permits SealedClass.SubSealed { |
隐藏类天生为框架设计的。
隐藏类只能通过反射访问,不能直接被其他类的字节码
源码已发布在Github上,欢迎Star
]]>Kafka 2.4
之前的无Key策略是循环使用主题的所有分区,将消息以轮询的方式发送到每一个分区上,2.4
之后增加了默认的粘性策略即:
对于同一批的数据,会用一个随机值对可用partition数量进行取模,然后把这个partition缓存起来
Hash key后,对partition数量进行取模
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster, |
【译】Kafka Producer Sticky Partitioner
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) { |
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) { |
当ConsumerGroupLeader收到来自CoordinatorGroup的member信息之后,会进行分区,分区策略主要有:
先用 partition
/ consumer
= 每个消费者至少要消费的分区个数
再用 partition
% consumer
= 字典序前多少个消费者需要多消费一个
int numPartitionsPerConsumer = numPartitionsForTopic / consumersForTopic.size(); |
但是当消费多个topic,并且每个topic的partition对cunsumer取余后都多一些,那么会导致靠前的消费者消费较多分区,靠后的消费者消费较少分区,出现分区不均匀
先将所有消费的的partition装在List里面,然后用一个装了consumer环形迭代器去碰撞
CircularIterator<MemberInfo> assigner = new CircularIterator<>(Utils.sorted(memberInfoList)); |
private List<TopicPartition> allPartitionsSorted(Map<String, Integer> partitionsPerTopic, |
从 0.11
版本开始
目标:
主题分区仍然尽可能均匀地分布
主题分区尽可能与其先前分配的使用者在一起
深入分析Kafka架构(三):消费者消费方式、三种分区分配策略、offset维护 - osc_8vayftu3的个人空间 - OSCHINA
从 2.4
版本开始
Rebalance(重平衡 )本质上是一种协议, 规定了一个Consumer Group下的所有 Consumer 如何达成一致, 来分配订阅Topic的每个分区。 说简单点就是 给消费组每个消费者分配消费任务的过程。
Server Client
FindCoordinator
← FindCoordinatorRequest
key
- groupId
keyType
- Group
向负载最小的Broker节点发送请求
public Node leastLoadedNode(long now) { |
→ FindCoordinatorResponse
host
port
nodeId
Hash( groupId
) % __consumer_offsets
Topic partitions
的 leader
节点
JoinGroup
← JoinGroupRequest 向Coordinator发送
groupId
memberId
-
groupInstanceId
- 静态ID
protocols
- assignors
isLeader
= false
清空subscriptions
中的topic信息
→ JoinGroupResponse
leader
memberId
members
- 成员信息,只有Leader才会有值,Follower是空列表
第一个加入的 memeberId
成为Leader
Coordinator会等待一段时间,取决于Consumer的max.poll.interval.ms
Group状态变为 PreparingRebalance
,Request会被阻塞,直到所有的member都发来JoinGroupRequest后,执行回调并修改Group状态为CompletingRebalance
SyncGroup
← SyncGroupRequest
groupId
generationId
- 年代信息
memberId
groupInstanceId
assignments
- memberId - topicPartitions
Leader进行分区,并将分区结果发送给Coordinator
→ SyncGroupResponse
assignment
- 分区结果
Leader的分区结果没有到的时候,Group状态为CompletingRebalance
,SyncGroupRequest被阻塞,直到Leader的分区结果到了之后,Group状态变为 Stable
,执行回调下发分区信息
之后Consumer根据传回来的分区结果去更新自己的订阅信息
心跳机制,主要用于确认双方是否存活,以及Group状态信息
Server
← HeartbeatRequest
groupId
generationId
memberId
groupInstanceId
→ HeartbeatResponse
errorCode
Server
group.currentState match { |
如果Group状态为 Stable
error为 None
,为其他,则有错误码
如果心跳超时,则会更新group
member
信息,踢掉超时的member
,并修改Group状态为PreparingRebalance
def onExpireHeartbeat(group: GroupMetadata, memberId: String, isPending: Boolean): Unit = { |
private def removeMemberAndUpdateGroup(group: GroupMetadata, member: MemberMetadata, reason: String): Unit = { |
Consumer
Consumer收到返回结果后,会查看是否有错误信息,如果收到正在Rebalance的错误,就会将ReJoin的标志位置为True
public void handle(HeartbeatResponse heartbeatResponse, RequestFuture<Void> future) { |
public synchronized void requestRejoin() { |
case ApiKeys.FIND_COORDINATOR => handleFindCoordinatorRequest(request) |
PreparingRebalance
Group is preparing to rebalance
CompletingRebalance
Group is awaiting state assignment from the leader
Stable
Group is stable
Dead
Group has no more members and its metadata is being removed
Empty
Group has no more members, but lingers until all offsets have expired.
UNJOINED
the client is not part of a groupREBALANCING
the client has begun rebalancingSTABLE
the client has joined and is sending heartbeats
case class SensorReader(id: String, timestamp: Long, temperature: Double) |
|
//3 文件 |
val consumerProperties = new Properties() |
场景一:测试
场景二:其他的数据源
val dataStream = env.addSource(new SensorReaderSource()) |
源码放在了Github上,见flink-scala
]]>早点睡
唯有早睡不可辜负
无奈最近因为各种事情而导致拖延晚于10:30
睡觉,
有时是mac
或者win10
上的代码,
有时是ipad
里的剧,
有时是电话
里的女友,
所以希望能有个强制性的监督管理机制,强迫自己关机睡觉
登录
注册
设备绑定
Home
Time
全部计划请移步SleepEarly查看
go-flutter
to shutdown platform windows
、linux
、mac
onlyAdd this to your package’s pubspec.yaml file:
dependencies: |
a simple usage example:
import 'package:shutdown_platform/shutdown_platform.dart'; |
Import as:
import shutdown_platform "github.com/BestBurning/shutdown_platform/go" |
Then add the following option to your go-flutter application options:
flutter.AddPlugin(&shutdown_platform.ShutdownPlatformPlugin{}), |
it’s published to pub.dev
shutdown_platform open source with Github
and the licenses is BSD-3-Clause
BIOS UUID
e.g. 99A4D301-53F5-11CB-8CA0-9CA39A9E1F01
BIOS UUID
e.g. 32a70060-2a39-437e-88e2-d68e6154de9f
IOPlatformUUID
e.g. 02662E79-E342-521C-98EA-D4C18B61FEF3
androidid
identifierForVendor
Add this to your package’s pubspec.yaml file:
dependencies: |
a simple usage example:
import 'package:platform_device_id/platform_device_id.dart'; |
Import as:
import platform_device_id "github.com/BestBurning/platform_device_id/go" |
Then add the following option to your go-flutter application options:
flutter.AddPlugin(&platform_device_id.PlatformDeviceIdPlugin{}), |
it’s published to pub.dev
platform_device_id open source with Github
and the licenses is BSD-3-Clause
flutter create --org com.example --template=plugin test_hover |
cd test_hover |
cd go |
cd ../example |
cd .. |
# test_hover |
主板 UUID
wmic csproduct get UUID |
正常返回
UUID |
概率无效,返回
UUID |
主板smBIOS UUID
dmidecode -s system-uuid |
正常返回
32a70060-2a39-437e-88e2-d68e6154de9f |
概率无效,返回
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF |
Apple 序列号
ioreg -l | grep IOPlatformSerialNumber | awk 'NR==1{print $4}' |
"C02PLRT2OVH3" |
硬件 UUID
ioreg -l | grep IOPlatformUUID | awk 'NR==1{print $4}' |
"02662E79-E342-521C-98EA-D4C18B61FEF3" |
androidid |
identifierForVendor |
docker pull redis:3.2 |
~/redis$ docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes |
-p 6379:6379
: 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data
: 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes
: 在容器执行redis-server启动命令,并打开redis持久化配置
docker exec -it 43f7a65ec7f8 redis-cli |
docker ps |
docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -p 3306:3306 -d mysql:5.7.21 |
docker run -it --rm \ |
# 不带验证 |
mongo |
docker pull wurstmeister/kafka:0.10.0.1 |
docker run --name kafka \ |
docker run -itd \ |
docker pull zookeeper |
docker run --name some-zookeeper \ |
docker run -p 8081-8110:8081-8110 -p 8200:8200 -p 9095:9095 -d --name imply imply/imply |
docker-compose.yml:
version: '2' |
run
docker-compose up |
docker run -d -p 15672:15672 -p 5672:5672 -v $PWD/rabbitmq:/var/lib/rabbitmq --name rabbitmq rabbitmq:management |
grant all privileges on *.* to 'root'@'%' identified by 'admin'; |
show variables like 'character%'; |
db.inventory.insertMany([ |
db.inventory.find( {} ) |
db.inventory.find( { status: "D" } ) |
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } ) |
use myDB |
use diyishuai |
The insertOne() operation creates both the database myNewDB and the collection myNewCollection1 if they do not already exist.
db.myNewCollection2.insertOne( { x: 1 } ) |
db.advertisement.find({"_id" : ObjectId("5b1f6e0fc365845f49a4ec2c")}) |
db.advertisement.ensureIndex({"name":1,"productId":1},{"unique":true}) |
mongodump -u shuai -p admin -d attr -o attr |
./bin/mongoimport --host localhost --port 27017 --db dbname --collection collectionName --username root --password pwd < mongo.json |
mongorestore -u shuai -p admin --db dashboard --dir data/db/dashboard |
lsof -i:3306 |
shutdown -h -t 10 |
-h
关机-t
延时多少s
hostnamectl set-hostname <newhostname> |
shutdown -s -t 10 |
netstat -ano |
osascript -e 'tell app "System Events" to shut down' |
sudo shutdown -h 22:30 |
cat file | base64 |
cat file | base64 --decode |
rabbitmqctl add_user root centirxlink123 |
nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=9000 & |
bin/supervise -c conf/supervise/quickstart.conf |
hdfs dfs -chown root:hdfs /user |
查看表
show tables; |
查看表结构
desc tableName; |
查看表分区
show partitions tableName; |
从分区中查询数据
1: |
ssh登录
ssh -i ~/.ssh/CentrixlinkMac root@di1shuai |
Scp文件传输
scp -i ~/.ssh/CentrixlinkMac knife-1.0.jar root@di1shuai:/tmp |
Copy自己的公钥到阿里云
自己的公钥path:~/.ssh/id_rsa.pub |
配置自己本地的ssh
vi .ssh/config |
启动代理
nohup ssh -ND 8157 emr & |
启动代理chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome Chrome --proxy-server="socks5://localhost:8157" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp/ |
访问http://localhost:8088
or50070
flutter channel dev |
flutter upgrade |
flutter create --org com.example --android-language java project_name |
flutter create --org com.example --template=plugin test_hover |
hover init-plugin github.com/my-organization/test_hover |
dart migrate |
dartfmt -w . |
flutter packages pub publish --dry-run |
flutter packages pub publish |
flutter pub run flutter_launcher_icons:main |
flutter config --enable-macos-desktop |
import 'package:flutter/rendering.dart'; |
cd <app dir> |
cd <app dir> |
hover init |
hover plugins get |
hover plugins |
|
hover init-packaging darwin-dmg |
hover build darwin-dmg |
博客代码
推至腾讯COS后,发现涉及云函数刷新CDN的地方计费方式过于恐怖,所以用自己的方式去刷新CDN直到刷新CDN
之前与demo保持一致
在coding
->项目
中构建
设置中添加一步刷新CDN
:
pipeline { |
java -jar ./target/tencentcloud-1.0-SNAPSHOT.jar $TENCENT_SECRET_ID $TENCENT_SECRET_KEY $TENCENT_REGION urlIndex1 urlIndex2 urlIndex3 ... |
$TENCENT_SECRET_ID
- 腾讯云SECRET_ID
$TENCENT_SECRET_KEY
- 腾讯云SECRET_KEY
$TENCENT_REGION
- 腾讯云区域>=4
的参数均为要刷新的目录
git clone https://github.com/BestBurning/tencentcloud.git |
采用MIT开源协议
]]>只是想让它快一点
阿里云仓库
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" |
阿里云镜像
linux
vi ~/.pip/pip.conf |
windows:
%HOMEPATH%\pip\pip.ini |
[global] |
创建文件
touch ~/.sbt/repositories |
修改文件
[repositories] |
淘宝镜像
npm config set registry https://registry.npm.taobao.org --global |
淘宝镜像
yarn config set registry https://registry.npm.taobao.org/ |
阿里云
ntp.cloud.aliyuncs.com |
清华大学镜像
替换
Homebrew(Mac)
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git |
Linuxbrew(Linux)
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git |
更换后测试工作是否正常
brew update |
复原
Homebrew(Mac)
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git |
Linuxbrew(Linux)
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git |
更换后测试工作是否正常
brew update |
原始链接:
https://storage.googleapis.com/flutter_infra/releases/stable/macos/flutter_macos_v1.12.13+hotfix.9-stable.zip |
将storage.googleapis.com
替换为storage.flutter-io.cn
:
https://storage.flutter-io.cn/flutter_infra/releases/stable/macos/flutter_macos_v1.12.13+hotfix.9-stable.zip |
PUB_HOSTED_URL
: Dart
依赖包FLUTTER_STORAGE_BASE_URL
: Flutter
依赖文件
Flutter中文社区
export PUB_HOSTED_URL=https://pub.flutter-io.cn |
清华大学 TUNA 协会
export PUB_HOSTED_URL=https://mirrors.tuna.tsinghua.edu.cn/dart-pub |
腾讯云
export PUB_HOSTED_URL=https://mirrors.cloud.tencent.com/dart-pub |
阿里云
go env -w GO111MODULE=on |
docker中国镜像
{ |
sudo mkdir -p /etc/docker |
阿里云
cd /etc/yum.repos.d/ |
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo |
阿里云
mv /etc/apt/sources.list /etc/apt/sources.list.bak |
/etc/apt/sources.list
写入deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse |
sudo apt update |
如果我们拥有全量的梦幻西游人物图库,那自然预测的准确率很高
很可惜,我们没有
所以只能在日常的跑镖或者打怪中去不断的积累图库,让神经网络不断的训练学习,以将准确率提高
于是我们按照预测的索引,将图片分类并保存,值得注意的是这里的分类并不一定准确,所以是预分类
screen.py
|
main.py
在获得预测索引时保存数据
min_index = dm.model_predict(c.crop_4_img_paths) |
路径如下
images |
不得不说这一步是手工确认,去两个文件夹下确认是否都是正确的,不正确的手工移动到正确目录下
于是加入两个输入确认以提醒不要忘记,等训练样本比较齐全以后可以改为自动分类
|
2020-03-21 19:12:12.623765: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll |
分类确认后,就可以将new
目录下图片移动到训练集train
目录中了main.py
sc.move_new_to_train() |
screen.py
def move_new_to_train(): |
main.py
dm.base() |
data_model.py
def base(): |
将之前的步骤组合后main.py
### 将新图加入训练集 并 训练模型 |
这样的话,每天打完以后,都可以用新的素材让自己变帅一点,哈哈哈哈哈哈
再来看看我们都经历了什么
成就感满满!!
本人无任何商业目的,仅用于学习和娱乐,源代码采用了AGPL3.0开源协议
本文为博主原创文章,任何人未经过博主同意不得转载
]]>