LinuxNetwork Linux
2023-03-03
线上环境,有一个服务启动时,四个进程只成功了三个,检查发现端口被占用。
再一看,是被另外三个进程中的一个连接 MongoDB 占用了。
# 查看
cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
PS:查了一下,个人机器(Ubuntu)上配置的是:32768 60999
把下限往上提到 20000,避开服务常用接口:
# 临时配置
echo "20000 65000" > /proc/sys/net/ipv4/ip_local_port_range
sysctl -w net.ipv4.ip_local_port_range="20000 65000"
# 持久配置
vim /etc/sysctl.conf
个人
2023-03-01
本来是想回忆一下青少年时期的各种事情,取了个名字叫我的青春。
但是细想想,我自己的青少年时光实在是乏善可陈。没有什么值得一提的事情。
或者说,和大多数人一样,我没有青春,只是在别人的青春中当个群演,跑下老套而已。
甚至,我觉得青春期的自己是个二百五,这让我感觉还不如不曾出现在别人的世界里,让这个世界更加美好一些。
所以这里还是就说一下那些年听过的歌、看过的电视吧。
Golang
2023-02-27
主要是参考一下这个目录,对照着查漏补缺。
Python 时间 Cygwin
2023-02-24
Cygwin 下执行一个 Python 脚本,其中 datetime.now()
获取到的时间居然是 UTF 时间。
执行 date 命令也是如此。
执行 tzselect,三次分别选 Asia,China,Beijing Time,然后就好了。
命令中有提示:如果要永久有效,需要在 ~/.profile 中加入 TZ='Asia/Shanghai'
。
关键是,TZ 其实有配置:
export | grep TZ
declare -x TZ="Asia/Shanghai"
运维
2023-02-24
概念
ITSM,CMDB,IPAM 和 DCIM 都是 IT 领域中的管理工具和框架,各自有不同的功能和应用场景。下面是它们的详细解释和关联:
- ITSM(IT Service Management,IT 服务管理):ITSM 是一种基于 ITIL(IT Infrastructure Library,IT 基础设施库)框架的 IT 服务管理方法论,它强调通过对服务管理全生命周期的规划、设计、交付、运营和持续改进,提高 IT 服务的质量和价值。ITSM 可以涉及到服务台管理、问题管理、变更管理、配置管理、发布管理等多个方面。
- CMDB(Configuration Management Database,配置管理数据库):CMDB 是一个用于存储 IT 资产、配置项以及它们之间关系的数据库,它可以帮助 IT 组织管理和控制 IT 环境。CMDB 可以用于支持 ITSM 的各个方面,如问题管理、变更管理、发布管理等。
- IPAM(IP Address Management,IP 地址管理):IPAM 是一种用于管理 IP 地址和网络设备的工具,它可以帮助 IT 组织准确掌握 IP 资源的分配和使用情况,避免 IP 地址冲突和浪费。IPAM 可以与 CMDB 集成,以便更好地管理 IP 资源的使用和配置。
- DCIM(Data Center Infrastructure Management,数据中心基础设施管理):DCIM 是一种用于管理数据中心设备和资源的工具,它可以帮助 IT 组织实现数据中心的资源规划、设备监控、电力管理、机柜布局等功能,提高数据中心的效率和可靠性。DCIM 可以与 CMDB 和 IPAM 集成,以便更好地管理数据中心的资源配置和使用。
总的来说,ITSM、CMDB、IPAM 和 DCIM 都是 IT 管理工具和框架,它们各自有不同的功能和应用场景,但也有一些关联和共同点。例如,CMDB 可以用于支持 ITSM 的各个方面,IPAM 和 DCIM 可以与 CMDB 集成,以便更好地管理 IT 资源的使用和配置。
相关项目
- RackTables:RackTables 是一个开源的机房资产管理系统,它可以管理 IT 资产的位置、网络、电源、硬件等信息,并提供了各种视图、报表和 API 接口等功能。
GPL
- i-doit:i-doit 是一个开源的 ITSM 和 CMDB 系统,它可以管理 IT 资产的硬件、软件、文档、业务关系等信息,并提供了各种报表、图表、导出和 API 接口等功能。
AGPL
- NetBox:NetBox 是一个开源的 IPAM 和 DCIM 系统,它可以管理网络设备、IP 地址、机柜、电源、连接等信息,并提供了各种视图、报表和 API 接口等功能。
Apache 2.0
- OpenDCIM:OpenDCIM 是一个开源的 DCIM 系统,它可以管理机房、机柜、设备、电源、网络等信息,并提供了各种视图、报表和 API 接口等功能。
GPL
Java
2023-02-23
遇到一个这样的问题,总数是 t,由 a,b,c 三部分组成。计算 a 的比例,结果算出来一个负数。
原来是 a * 100
这一步溢出了。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
double a = (double) (22890851 * 100) / 26487012;
System.out.println(a);
BigDecimal b = new BigDecimal(a);
System.out.println(b);
// 警告: [deprecation] BigDecimal中的ROUND_HALF_UP已过时
// [deprecation] BigDecimal中的setScale(int,int)已过时
// ROUND_HALF_UP is int
BigDecimal c = b.setScale(2, RoundingMode.HALF_UP);
System.out.println(c);
double d = c.doubleValue();
System.out.println(d);
BigDecimal result = new BigDecimal(22890951)
.multiply(new BigDecimal(100))
.divide(new BigDecimal(26487012), 2, RoundingMode.HALF_UP);
System.out.println(result);
System.out.println("HELLO WORLD");
}
}
OUTPUT:
86.42
-75.73078443125257
-75.7307844312525730856577865779399871826171875
-75.73
-75.73
HELLO WORLD
育儿
2023-02-22
三个月
- 侧头
- 大概每三个小时喝一次奶,每次 30 ~ 60ml
六个月
九个月
一岁
一岁半
两岁
新生儿期(出生后0-1周):此阶段主要特征是适应生活外界环境,体重会有一定的下降,进一步完善各项器官的功能,开始有了自己的生物节律。标志性能力包括眨眼、吸吮、哭声反应等。新生儿的饮食主要是母乳或配方奶粉,每次喂养量为30-90毫升,每天喂养次数为8-12次。
1个月(1-4周):在这个阶段,婴儿开始对声音和光线有反应,能够逐渐掌握头部的控制,能够看到5-6米以内的物体。标志性能力包括抬头、伸手抓取等。饮食方面需要注意,每次喂养量为90-120毫升,每天喂养次数为7-8次,同时也可以逐渐开始尝试母乳以外的辅食。
2个月(5-8周):在这个阶段,婴儿的视力逐渐提高,能够追随物体移动,开始逐渐掌握侧卧和俯卧的能力,开始有意识地笑出声音。标志性能力包括抓握、哭声表达等。饮食方面需要注意,每次喂养量为120-150毫升,每天喂养次数为6-7次,逐渐开始增加辅食的种类和量。
3个月(9-12周):在这个阶段,婴儿开始逐渐掌握翻身、坐起来的能力,开始能够有意识地玩耍和观察周围的环境。标志性能力包括控制头部、抬手等。饮食方面需要注意,每次喂养量为150-180毫升,每天喂养次数为5-6次,同时逐渐增加辅食的种类和量。
4-6个月:在这个阶段,婴儿开始能够掌握爬行、翻滚、坐立等能力,开始逐渐有意识地迎合自己的名字和关注周围的人和事物。标志性能力包括喊叫、制造声响等。饮食方面需要注意,每次喂养量为180-210毫升,每天喂养次数为4-5次,同时逐渐增加辅食的种类和量,包括米粉、果泥等。
7-9个月:在这个阶段,婴儿开始能够掌握站立、扶墙行走等能力,开始有了一定的社交能力,能够认识和表达简单的语言。标志性能力包括发音、模仿等。饮食方面需要注意,每次喂养量为180-240毫升,每天喂养次数为3-4次,同时辅食种类和量也逐渐增加,包括鸡肉泥、蔬菜泥等。
10-12个月:在这个阶段,婴儿开始能够掌握走路、爬楼梯等能力,逐渐有了一定的独立性,开始逐渐学习简单的语言、数字等。标志性能力包括简单的语言表达、走路等。饮食方面需要注意,每次喂养量为240-300毫升,每天喂养次数为3次,同时辅食的种类和量也逐渐增加,包括鱼肉泥、水果泥等。
一岁:在这个阶段,宝宝已经能够走路,理解一些简单的语言和指令,开始展现出自己的性格和偏好。标志性能力包括行走、语言和认知能力。饮食方面需要注意,每次喂养量为240-300毫升,每天喂养次数为3次,同时辅食的种类和量也逐渐增加,包括豆腐、鸡肉等。
二岁:在这个阶段,宝宝已经可以自己穿脱衣服、使用餐具、说出自己的名字等,开始表现出独立性和自主性。标志性能力包括独立性和语言能力的提高。饮食方面需要注意,每次喂养量为240-360毫升,每天喂养次数为3次,同时逐渐加入各种蔬菜、水果、肉类等辅食。
三岁:在这个阶段,宝宝已经开始掌握一些基本的社交技能,开始学习认字、数数等,逐渐表现出更多的独立性和好奇心。标志性能力包括社交技能、认知能力和好奇心的提高。饮食方面需要注意,每次喂养量为240-360毫升,每天喂养次数为3次,同时加入更多的蔬菜、水果、肉类等辅食,多给宝宝提供一些丰富的口味和纹理。
WebFrontend
2023-02-20
Twilio Blog 的文章《Next, Nest, Nuxt… Nust?》,讲 Next.js,Nest,Nuxt 这几个名字非常相近的 NodeJS 框架到底有什么区别。
flowchart TD
A[Framework purpose?] -->|Pure Backend| B(Plain HTTP Handlers?)
B -->|Y| C(express)
B -->|N| D(nest)
A -->|Focus on Rendering| E(Rendering Type)
E -->|CSR| F(React<br>Angular<br>Vue<br>NuxtJS)
E -->|Backend light| H(Next<br>NuxtJS)
E -->|Mostly SSR| G(Gatsby<br>Next<br>NuxtJS)
流行程度对比:
- Express
- Nest
...
...
Express
Express 是 Node 圈子的老牌 HTTP Server 框架,根据 NPM 下载量来看,可以说是事实标准。
Nest
基于 Express,当然也支持替换成其他的 HTTP Server 库。
Next
Next.js 是一个基于 React 的前端应用开发框架。
Next.js 为您提供生产环境所需的所有功能以及最佳的开发体验:包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等功能 无需任何配置。
Nuxt
基于 Vue 的前端应用开发框架。
VR
2023-02-19
https://www.zhihu.com/question/39157545/answer/107911723
https://www.zhihu.com/question/39157545/answer/2744410720
- VR(虚拟现实):通过穿戴式设备或其他显示设备创建出一个完全虚拟的环境,用户可以在其中自由移动和互动。使用VR技术,用户可以在一个虚拟世界中感受到真实世界所不具备的体验和感觉,如登山、潜水等。
- AR(增强现实):通过智能设备如手机、平板电脑等增强显示出真实世界中的信息,使用户可以在真实世界中获得数字信息的增强体验。使用AR技术,用户可以将虚拟物品与真实环境结合起来,比如用AR技术实现的增强游戏、导航等应用。
- MR(混合现实):是VR和AR的结合,是将虚拟现实与现实世界相结合的一种技术。使用MR技术,用户可以在真实环境中看到和互动虚拟物品,同时虚拟物品和现实物品之间也可以互动。比如使用MR技术的可视化指导、智能家居控制等应用。
- AR 和 MR 都是将虚拟和现实融合,但是:
- AR 是用手机等移动设备的摄像头拍摄真实场景,然后在设备屏幕看到增强的数字形象,比如游戏、导航、导购等,是对现实世界的增强。
- MR 是通过穿戴设备,创造一个虚拟和现实叠加的世界,帮助人同时实现对现实世界和虚拟世界的交互。
SMTP Email
2023-02-15
Python
import smtplib
import ssl
host = 'smtp.126.com'
s = smtplib.SMTP(host)
context = ssl.create_default_context()
context.check_hostname = True
s.starttls(context=context)
s.quit()
Golang
如果服务器支持 STARTTLS,标准库 net/smtp 的 SendMail 方法就会校验主机名。
package main
import (
"crypto/tls"
"fmt"
"net/smtp"
)
func main() {
host := "smtp.126.com"
port := 25
c, err := smtp.Dial(fmt.Sprintf("%s:%d", host, port))
if err != nil {
panic(err)
}
tlsConfig := &tls.Config{ServerName: host}
if err := c.StartTLS(tlsConfig); err != nil {
panic(err) // panic: x509: certificate is valid for xxx, not yyy
}
if err = c.Quit(); err != nil {
panic(err)
}
}