Flutter开发-启动页
Flutter开发-启动页
https://flutter.cn/docs/development/ui/advanced/splash-screen
安卓启动页
在android\app\src\main\res\drawable-v21\launch_background.xml
12345678910111213<?xml version="1.0″ encoding="utf-8″?><!– Modify this file to customize your launch splash screen –><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/white" /> <!– You can insert your own image assets here –> ...
Flutter开发-修改App的名称和图标
Flutter开发-修改App的名称和图标
https://www.uedbox.com/post/66040/
Flutter新创建的项目默认的图标是Flutter icon,需要修改成我们自己的App的名称和图标。
在线生成Icon的网站
https://appiconmaker.co/Home/
https://icon.wuruihong.com
Android修改名称和图标修改名称
图标是放在mipmap文件下的,mipmap目录如下图:
注意有好几个mipmap文件夹,这和ios是一样的,这几个是适配不同分辨率的手机。只需让美工出相应尺寸的图标放到相应的文件夹就可以了。注意图片需要是png格式。
IOS修改名称和图标CFBundleName下面的字符串就是app的名称
图片的名称可以自己命名,不过要在Contents.json文件中相对应,这些图片也是为了适配不同的ios手机和ipad。
Flutter应用图标自适应方案
标准规范自动圆角不变形
当下手机品牌众多,各家手机所使用的OS又都不相同,针对应用图标的处理也有差异,如IOS系统下会强制进行圆角处理, ...
Flutter常用插件
Flutter常用插件video_player 2.1.15
flutter_launcher_icons: ^0.9.2
Flutter插件包开发
Flutter插件包开发创建包Android Studio: Create New Flutter Project>Flutter Plugin>命名(flutter_xxxx)>next>finish
Intellij IDea: File>New>Project>Flutter>Next>Project type select Plugin>Finish
flutter create --org com.baidu.www --template=plugin -i objc -a java flutter_package_app
说明:
--org选项指定组织(反向域名),Android和iOS的标识符
-a指定android语言 java、kotlin(默认)
-i指定iOS语言 objc、swift(默认)
平台通道(platform channel)“平台特定”或“特定平台”中的平台指的就是Flutter应用程序运行的平台,如Android或IOS。
一个完整的Flutter应用程序实际上包括原生代码 ...
Flutter包开发和发布以及使用
Flutter包开发和发布以及使用
https://dart.cn/guides/libraries/create-library-packages
创建一个包项目1.Android Studio: File>New>New Flutter Project 来创建一个Package工程
2.intellij Idea: File>New>Project>Flutter>Project type select package
3.flutter create --template=package hello
包含 : lib/hello.dart:Package的Dart代码 test/hello_test.dart:Package的单元测试代码。
实现功能例(shelf Package的目录结构)
Package中主要的功能的源码都在src目录下。shelf Package也导出了一个迷你库: shelf_io,它主要是处理HttpRequest的。在lib根目录下的“shelf.dart”中,导出了多个 ...
Flutter包依赖的四种方法
Flutter包依赖的四种方法
https://dart.dev/tools/pub/dependencies
概念依赖是一个pub包管理的核心概念,它在pubspec.yaml文件中被指定。开发人员只需要把自己直接依赖的包列出来,不需要写间接依赖的包,pub会帮我们处理那些间接依赖,可以使用pub deps命令或者flutter packages pub deps命令查看包依赖信息。
用法12345dependencies: [依赖的包名]: [source]: 告诉pub这个包如何被定位,不是一个具体的pub siet或者是git url, 而是获取包的方式,这些方式有sdk、Hosted packages、Git packages、Path packages [description]: 让pub定位到source的额外信息 version: 包的版本号
不同source的写法SDK(表明这个包来自于哪个sdk,使用这个参数要求dart版本必须在1.19.0之上)
1234dependencies: flutter_driver: ...
Wireshark过滤器表达式
过滤器表达式
Wireshark Version 3.4.7 (v3.4.7-0-ge42cbf6a415f)
Wireshark 提供了一种显示过滤语言,使您能够精确控制显示哪些数据包。 它们可用于检查协议或字段的存在、字段的值,甚至可以将两个字段相互比较。 这些比较可以与逻辑运算符(如“and”和“or”)以及括号组合成复杂的表达式。
以下部分将更详细地介绍显示过滤器功能。
更多操作提示 Wireshark Wiki 显示过滤器页面 上有许多显示过滤器示例: https://gitlab.com/wireshark/wireshark/wikis/DisplayFilters
过滤器字段最简单的显示过滤器是单个协议的过滤器。要显示包含特定协议的数据包,请在 Wireshark 的显示过滤器工具栏中键入协议。 例如,要仅显示 TCP 数据包,请在 Wireshark 的显示过滤器工具栏中键入 tcp。 同样,要显示包含特定字段的数据包,请在 Wireshark 的显示过滤器工具栏中键入该字段。 例如,要仅显示 HTTP 请求,请在 Wireshark 的显示过滤器工具栏中键入 ...
细数TS中那些奇怪的符号
细数 TS 中那些奇怪的符号
https://segmentfault.com/a/1190000023943952
TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
本文阿宝哥将分享这些年在学习 TypeScript 过程中,遇到的 10 大 “奇怪” 的符号。其中有一些符号,阿宝哥第一次见的时候也觉得 “一脸懵逼”,希望本文对学习 TypeScript 的小伙伴能有一些帮助。
好的,下面我们来开始介绍第一个符号 —— ! 非空断言操作符。
一、! 非空断言操作符在上下文中当类型检查器无法断定类型时,一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非 undefined 类型。具体而言,x! 将从 x 值域中排除 null 和 undefined 。
那么非空断言操作符到底有什么用呢?下面我们先来看一下非空断言操作符的一些使用场景。
1.1 忽略 undefined 和 null 类型123456function myFunc(maybeStr ...
Nginx Ingress注解Annotations
Nginx Ingress注解Annotations
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
Nginx Ingress 注解使用在 Ingress 资源实例中,用以设置当前 Ingress 资源实例中 Nginx 虚拟主机的相关配置,对应配置的是 Nginx 当前虚拟主机的 server 指令域内容。在与 Nginx Ingress 配置映射具有相同功能配置时,将按照所在指令域层级遵循 Nginx 配置规则覆盖。
Nginx Ingress注解按照配置功能有如下分类。
1、Nginx原生配置指令支持在注解中添加 Nginx 原生配置指令。配置说明如下表所示。
注解
类型
功能描述
nginx.ingress.kubernetes.io/server-snippet
string
在 server 指令域添加 Nginx 配置指令
nginx.ingress.kubernetes.io/configuration- ...
Nginx Ingress配置映射ConfigMap
Nginx Ingress配置映射ConfigMap
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
通过 Helm 安装 Nginx Ingress 的默认关联配置映射实例名称为 nginx-ingress-controller,用户可以通过修改资源对象 Deployment/DaemonSet 实例 nginx-ingress-controller 中的参数 --configmap 自定义关联配置映射实例的名称。
Nginx Ingress 控制器约定 Nginx Ingress 配置映射实例中的键值只能是字符串,即便是数字或布尔值时也要以字符串的形式书写,比如 "true"、"false"、"100","[]string" 或 "[]int" 的 Slice 类型则表示内部数据是以 "," 分隔的字符串。根据配置涉及的功能可以有 ...
k8s暴露服务的方式
k8s暴露服务的方式hostNetwork: true这是一种直接定义Pod网络的方式。
如果在Pod中使用hostNetwork:true配置的话,在这种pod中运行的应用程序可以直接看到pod启动的主机的网络接口。在主机的所有网络接口上都可以访问到该应用程序。以下是使用主机网络的pod的示例定义:
123456789apiVersion: v1kind: Podmetadata: name: influxdbspec: hostNetwork: true containers: - name: influxdb image: influxdb
部署该Pod:
1$ kubectl create -f influxdb-hostnetwork.yml
访问该pod所在主机的8086端口:
1curl -v http://$POD_IP:8086/ping
将看到204 No Content的204返回码,说明可以正常访问。
注意每次启动这个Pod的时候都可能被调度到不同的节点上,所有外部访问Pod的IP也是变化的,而且调度Pod的时候还需要考虑是否与宿主 ...
k8s集群三种IP
k8s集群三种IPKubernetes集群里有三种IP地址,分别如下:
Node IP:Node节点的IP地址,即物理网卡的IP地址。
Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。
Cluster IP:Service的IP地址,此为虚拟IP地址。
Node IP可以是物理机的IP(也可能是虚拟机IP)。每个Service都会在Node节点上开通一个端口,外部可以通过NodeIP:NodePort即可访问Service里的Pod,和我们访问服务器部署的项目一样,IP:端口/项目名
在kubernetes查询Node IP
kubectl get nodes
kubectl describe node nodeName
显示出来的InternalIP就是NodeIP
Pod IPPod IP是每个Pod的IP地址,他是Docker Engine根据docker网桥的IP地址段进行分配的,通常是一个虚拟的二层网络
同Service下的pod可以直接根据PodIP相互通信
不同Service下的pod在集群间pod通信要借助于 clu ...
k8s端口解析
k8s端口解析nodePort外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),即nodeIP:nodePort是提供给外部流量访问k8s集群中service的入口。比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort,nodePort=30001。其他用户就可以通过浏览器http://node:30001访问到该web服务。而数据库等服务可能不需要被外界访问,只需被内部服务访问即可,那么我们就不必设置service的NodePort。
portk8s集群内部服务之间访问service的入口。即clusterIP:port是service暴露在clusterIP上的端口。mysql容器暴露了3306端口,集群内其他容器通过33306端口访问mysql服务,但是外部流量不能访问mysql服务,因为mysql服务没有配置NodePort。对应的service.yaml如下:
12345678910apiVersion: v1kind: Servicemetadata: ...
ArgoCD持续部署
ArgoCD持续部署Argo CD是用于Kubernetes的声明性GitOps连续交付工具。
Argo CD实现为kubernetes控制器,它持续监视运行中的应用程序,并将当前的活动状态与期望的目标状态进行比较(如Git repo中指定的那样)。如果已部署的应用程序的活动状态偏离了目标状态,则认为是OutOfSync。Argo CD报告和可视化这些差异,同时提供了方法,可以自动或手动将活动状态同步回所需的目标状态。在Git repo中对所需目标状态所做的任何修改都可以自动应用并反映到指定的目标环境中。
安装ArgoCD123456789101112131415161718192021222324kubectl create namespace argocdkubectl delete namespace argocdwget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -O argocd.yaml# 修改dev-server镜像 containers: ...
k8s高可用集群部署
k8s高可用集群部署
https://jimmysong.io/kubernetes-handbook
https://kubernetes.feisky.xyz/
https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/
环境&介质
虚拟化平台: VMWare Workstation 16 Pro
操作系统: CentOS Linux release 7.9.2009 (Core)
操作用户: root
电脑型号: Lenovo Legion Y7000P 2020H
CPU: Intel(R) Core(TM) I7-10750H CPU @2.60HZ
RAM: 16G
Kubernetes: 1.20.5
Docker: 20.10.5
Flannel: 0.14.0
注: etd/coredns等版本信息可以使用命令kubeadm ...
https双向认证
https双向认证GO 1.15 以上版本解决GRPC X509 Common Name field, use SANs or temporarily enable Common Name matching
第1步:生成 CA 根证书1openssl genrsa -out ca.key 2048
1234Generating RSA private key, 2048 bit long modulus (2 primes).............+++++..................................................................................................................+++++e is 65537 (0x010001)
1openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
1234567891011121314You are about to be asked to enter informat ...
复杂度分析
复杂度分析
https://blog.csdn.net/Baron_ND/article/details/115492059
从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
如何分析、统计算法的执行效率和资源消耗?大 O 复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间。但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行时间呢?
这里有段非常简单的代码,求 1,2,3…n 的累加和。现在,我就带你一块来估算一下这段代码的执行时间。
1234567func cal(n int) int { sum := 0 for i := 1; i < n; i++ { sum = sum + i } return sum}
从 CPU 的角度来看,这段代码的每一行都执行着类似的操作:读数据-运算-写数据。尽管每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样,为 unit_time。在这个假 ...
GitHub Actions入门教程
GitHub Actions入门教程
https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
https://www.cnblogs.com/i-code/p/12869046.html
https://segmentfault.com/a/1190000022360769
一、GitHub Actions 是什么?大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。
很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。
如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。
GitHub 做了一个官方市场,可以搜索到他 ...
图解设计模式
图解设计模式
http://tigerb.cn/2021/03/07/patterns-picture/
前言常常听别人说设计模式不太容易理解,以及学习设计模式到底能帮我们解决什么问题,今天我们就用几张图来看看:
设计模式到底是什么?
为什么我们需要学习设计模式?
我也写过烂代码是的,没什么,我也写过烂代码,刚毕业时业务逻辑也会一个函数干到底,只知道能实现功能就可以了。
12345package demo func YourFunc() { // 所有的逻辑代码一股脑写完......}
知道了拆分函数自然而然知道了需要合理拆分函数。
然后把各个函数组织起来。
面临新的困境某一天产品的需求需要支持新的场景,发现某一处的代码逻辑有变动需要支持新的场景,怎么办?
整个代码拷贝一份?不会有人这么干吧?(其实我还真见过,你们呢😏)
把绿色变动的代码块,复制成一个新的函数,修改为新场景使用的函数?
把变动的代码再提为两个新函数,一个绿色为老代码,一个蓝色为新场景代码?
上面这种解决问题的方式就是面向过程的编程思想。
我们都在变优秀随着我们不断的学习,学会 ...
面向对象的设计过程
面向对象的设计过程
http://tigerb.cn/2019/10/11/oop/
前言我一直认为分享的目的不是炫技。
一是,自我学习的总结。
二是,降低他人的学习成本。
三是,别人对自己学习结果的审核。
同时,本次分享有下面四个要素:
观点
本次分享的观点是一个软件工程中的思维方法,不限于编程语言
探讨
我可能理解错的,或者大家没理解的,欢迎大家积极评论,尽可能多互动,目的增加理解
理解
真的希望大家能理解
运用
最重要的,如果你觉着有帮助,一定要去在实际业务中实战
背景工作中,几乎大家经常抱怨别人写的代码:
没法改
耦合高
无法扩展
今天就来探讨如何克服上面的问题~
场景首先问个问题:
平常工作中来了一个业务需求,我们是如何开始写代码的?
我推测大多数人可能:
1、梳理业务
2、设计数据库、接口、缓存
3、评审
4、于是就开始了 怎么怎么样...如果怎么怎么样...怎么怎么样...愉快的码代码的过程
此处有人觉着有啥问题么?
1备注:说出来问题的,本次分享就可以略过了~
一个简单的业务场景123456789101112比如产品 ...