咸鱼

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

0%

shadcn-ui

https://github.com/shadcn-ui/ui 是一套可以自定义、扩展和构建的精美组件。使用它来构建你自己的组件库。完全基于 Tailwind CSS 实现,其核心设计哲学就是将 Tailwind CSS 的原子化特性发挥到极致。

shadcn-admin

https://github.com/satnaing/shadcn-admin

阅读全文 »

如何编辑 crontab?

运行以下命令编辑当前用户的 crontab:

1
crontab -e

然后添加你的任务并保存即可。

crontab 中设置每小时执行一次任务,可以使用以下语法:

阅读全文 »

fail2ban 是一个用于防止暴力破解攻击的工具,它可以监控系统日志文件,当检测到异常的登录尝试时,会自动封禁对应的 IP 地址。以下是使用 fail2ban 的基本步骤和示例:

1. 安装 fail2ban

在不同的 Linux 发行版上,安装 fail2ban 的命令有所不同。

在 Ubuntu/Debian 上

1
2
sudo apt-get update
sudo apt-get install fail2ban
阅读全文 »

Hydra 是一个强大的网络登录破解工具,可以用于对 MySQL 数据库进行暴力破解测试。以下是使用 Hydra 测试 MySQL 安全性的方法和注意事项:

基本语法

1
2
3
4
5
hydra -l username -P password_list.txt mysql://target_IP


$ hydra 8.134.92.223 rdp -l administrator directory-list-lowercase-2.3-small.txt -P /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt -V

常用参数

-l-L: 指定单个用户名或用户名列表文件
-p-P: 指定单个密码或密码字典文件
-s: 指定非标准端口(MySQL 默认是 3306)
-t: 设置并发线程数(默认16)
-vV: 显示详细输出
-f: 找到第一个匹配后停止

阅读全文 »

1
2
3
4
5
# 删除包含 "username" 的所有记录(Debian/Ubuntu)
sudo sed -i '/username/d' /var/log/auth.log

# 删除包含 "username" 的所有记录(CentOS/RHEL)
sudo sed -i '/username/d' /var/log/secure
1
2
3
4
5
6
7
# 查看 SSH 日志
journalctl -u sshd

# 清除所有日志(谨慎使用!)
sudo journalctl --vacuum-time=1s # 删除 1 秒前的所有日志
# 或
sudo journalctl --rotate && sudo journalctl --vacuum-time=1d # 保留最近 1 天的日志

  • Theme.MaterialComponents
    基于 ​​Material Design 2 (MD2)​​,是早期版本的 Material Design 规范,强调卡片、阴影和明确的层级结构。

  • Theme.Material3
    基于 ​​Material Design 3 (MD3)​​,是更新的设计规范,强调动态颜色(Dynamic Color)、圆角设计、更柔和的阴影和现代化的组件样式。

特性 MaterialComponents.DayNight.DarkActionBar Material3.DayNight.NoActionBar
​Design 版本​ Material Design 2 (MD2) Material Design 3 (MD3)
​ActionBar​ 包含深色 ActionBar 无默认 ActionBar(需自定义)
​动态颜色支持​ 不支持 支持(需 API 31+)
​组件风格​ 传统阴影、直角 圆角、柔和阴影、动态主题
​推荐场景​ 传统应用,快速开发 现代化应用,Jetpack Compose 项目

Bottom Navigation Views Activity

Theme.MaterialComponents​基于 ​​Material Design 2 (MD2)​​,是早期版本的 Material Design 规范,强调卡片、阴影和明确的层级结构。
==所以不推荐用这个模板创建项目==

default

阅读全文 »

https://docs.flutter.cn/platform-integration/platform-channels

对比 Kotlin

Dart Kotlin
null null
bool Boolean
int (<=32 bits) Int
int (>32 bits) Long
double Double
String String
Uint8List ByteArray
Int32List IntArray
Int64List LongArray
Float32List FloatArray
Float64List DoubleArray
List List
Map HashMap

对比Java

Dart Java
null null
bool java.lang.Boolean
int (<=32 bits) java.lang.Integer
int (>32 bits) java.lang.Long
double java.lang.Double
String java.lang.String
Uint8List byte[]
Int32List int[]
Int64List long[]
Float32List float[]
Float64List double[]
List java.util.ArrayList
Map java.util.HashMap
阅读全文 »

Flutter 与 Vue.js/React.js 在编程思想上有许多相似之处,尤其在组件化开发状态管理响应式编程等核心概念上。以下是具体对比分析:


1. 组件化设计

相似点
• Flutter 的 Widget 和 React/Vue 的组件(Component)都是 UI 的原子单元,通过组合嵌套构建界面。
• 都遵循 单向数据流(父组件向子组件传递 props/参数)。
• 支持生命周期概念(如 Flutter 的 initState/dispose,React 的 useEffect,Vue 的 created/mounted)。

差异点
• Flutter 的 Widget 分为 StatelessStateful 两类,类似 React 的函数组件和类组件,但 Flutter 的 StatefulWidget 通过 setState 触发重建,而 React 使用虚拟 DOM 差分更新。
• Vue 的模板语法更接近 HTML,而 Flutter 的 UI 完全用 Dart 代码声明(类似 React 的 JSX,但更彻底)。

阅读全文 »

一、基础线性布局

组件 方向 特点
Row 水平 子组件水平排列
Column 垂直 子组件垂直排列
Flex 自定义 通过 direction 指定方向

二、空间分配与弹性布局

组件 作用
Expanded 强制填满剩余空间,可设置 flex 权重
Flexible 类似 Expanded 但可通过 fit 控制是否填满(如 Flexible.fit: loose
Spacer 占据剩余空间(flex 默认为1)
AspectRatio 按固定宽高比约束子组件(如 16:9)
阅读全文 »

一、 参考文档

二、 下载和安装

  1. https://flutter.cn/docs/get-started/install/windows 找到最新版本的下载连接,比如 https://storage.flutter-io.cn/flutter_infra_release/releases/stable/windows/flutter_windows_3.29.2-stable.zip
  2. 解压到D盘根目录  ( 避免使用C盘,有权限问题 )
  3. 设置环境变量 , 添加
    1
    2
    3
    flutter='D://flutter/bin'  ( 这个要添加到 Path )
    FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
    PUB_HOSTED_URL="https://pub.flutter-io.cn"

备注:还有其他源可以选择。

阅读全文 »

系统内存不足OOM,挑了占用最大内存的springboot.jar 杀掉了。

springboot停止运行了,但是没有任何错误日志,怀疑被系统杀掉进程,查看内核日志。

1
2
3
4
5
6
7
8
# 查看内核日志
$ dmesg

[85900608.976839] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-0.slice/session-171735.scope,task=java,pid=871919,uid=0

[85900608.976935] Out of memory: Killed process 871919 (java) total-vm:4945540kB, anon-rss:1795188kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:3964kB oom_score_adj:0

[85900609.045077] oom_reaper: reaped process 871919 (java), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

从内核日志来看,Spring Boot应用被Linux系统的OOM(Out of Memory)杀手进程终止了。这通常是因为系统内存不足,内核为了保证系统的稳定运行,选择了终止占用大量内存的进程。

分析日志

阅读全文 »

1. 安装

在应用商店安装 Windows Terminaloh-my-posh.

2. 打开PROFILE配置文件

启动 Windows Terminal

启动文本编辑器修改配置文件

阅读全文 »

项目使用了【exoplayer3】 ,播放MP4 AAC音频硬解码不支持,切换到软解AAC效果不理想,考虑使用FFmpeg扩展来实现音频软解码 。

一、软件环境

  1. Ubuntu 24.04 Server
  2. Android SDK
  3. NDK r25b (“ndk;25.1.8937393”) 和 cmake
  4. exoplayer3 release-1.5.0-alpha01

编译所需软件

1
2
$ su
$ apt update & apt install openjdk-17-jdk unzip -y
阅读全文 »

Gitlab流水线需要使用Gitlab Runner,这里介绍Ubuntu安装Gitlab Runner的方法。
Runner允许在一台机器上安装多个Runner,但每个Runner只能运行一个项目。

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Ubuntu
$ curl -L"https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh"| sudo bash
$ sudo apt-get install gitlab-runner

# CentOS
$ curl -L"https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh"| sudo bash
$ sudo yum install gitlab-runner

# 启动runner: 交互式
sudo gitlab-runner register

# 启动runner: 无交互式
sudo gitlab-runner register \
--non-interactive \
--url "$HOST" \
--token "$RUNNER_TOKEN" \
--executor: "shell"
--description "shell runner"

参数HOST是Gitlab地址,RUNNER_TOKEN是注册时生成的token

Win PE系统盘

网上流行的很多 Win PE 系统如大白菜、老毛桃、都夹带一些私货 (修改主页/捆绑软件等)

以下是一些相对干净的免费PE系统工具:

  • (推荐)edgeless 半开源的PE,无广告、无收费、无劫持。
  • (一般)微PE 纯净无广告,网络上假的也比较多。
  • (一般)USBOS IT天空出品,跟 优启通 差不多,可能比 优启通 好一点点。
  • (不推荐)优启通 IT天空出品,无广告, 但可能会改修改你的浏览器主页和默认安装2345,而且口碑原来越不好。网络上假的比较多,比如搜索排行第一名的 https://www.uqitong.com/ 就是假的。有以前的旧版本还可以用用,新版不推荐。

USB 系统启动盘

阅读全文 »

问题:原有的索引没有 unique 唯一属性,为其添加 unique

一、查询索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mgset-44912522:PRIMARY> db.user.getIndexes()                                                                                    
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "mydb.user"
},
{
"v" : 2,
"key" : {
"username" : 1
},
"name" : "username",
"ns" : "mydb.user"
}
]

接下来,给username索引增加唯一属性,要先删除旧索引,再重新建立新的索引。

二、删除索引

阅读全文 »

依赖

1
implementation 'com.github.bumptech.glide:glide:4.16.0'

调用示例

1
2
3
Glide.with(context)
.load("http://xxx")
.into(holder.img)

androidx + kotlin 的项目中运行,会出现警告日志:

阅读全文 »