菜鸟公园
  • 编程技能
    • PHP
    • CPP
    • Golang
    • MySQL
    • 工具分享
  • 英语学习
  • 信文随笔
  • 关于本站
sign in/up

分类目录归档:工具分享

2020-11-30 作者:菜鸟DJ 0
工具分享, 编程技能

让浏览器自动移除知乎的登录弹窗(已更新)

由于某些原因,我注销了知乎的账号。但是在网页的搜索中,会出现一些知乎的内容。当我点进去会发现,知乎会强制登录才能查看内容。以前会有一个关闭的按钮,最近关闭的按钮被去除了。

作为程序员,肯定不希望阅读体验这么差,所以用 油猴工具 制作了如下脚本,自动移除弹窗,并恢复页面的滚动条。

// ==FeHelperMonkey==
// @reminder        请不要删除这部分代码注释,这是FeHelper油猴脚本能正常工作的基本条件!当然,你可以按需修改这里的内容!
// @id              mf_1606719966367
// @name            关闭知乎登录
// @url-pattern     https://*.zhihu.com/question/*
// @enable          true
// @require-js      
// @auto-refresh    0
// @updated         2020-12-01 10:03:30
// ==/FeHelperMonkey==


// 在这里,可以随便写你的代码,并且,你的代码中
// 1. 可以进行页面上的所有DOM操作
// 2. 可以访问页面上原本已挂载的所有Js变量,比如页面上已经有了jQuery,你可以直接使用
// 3. 可以依赖注入一个第三方js脚本,然后在你的代码中直接使用,如:依赖jQuery后直接使用
// 4. 好了,你的代码可以这样写:
var toast = (content,time) => {
    return new Promise((resolve,reject) => {
      let elAlertMsg = document.querySelector("#fehelper_alertmsg");
      if (!elAlertMsg) {
          let elWrapper = document.createElement('div');
          elWrapper.innerHTML = '<div id="fehelper_alertmsg" width="100%" style="position:absolute;top:10px;left:50%;-webkit-transform:translateX(-50%);z-index:100">' +
              '<tb style="background:red;display:inline-block;color:white;text-align:center;' +
              'padding:10px 10px;margin:0 auto;font-size:20px;border-radius:8px;">' + content + '</tb></div>';
          elAlertMsg = elWrapper.childNodes[0];

        document.body.appendChild(elAlertMsg);
        // elAlertMsg = document.getElementById("fehelper_alertmsg");
        // elAlertMsg.style.left=(document.body.clientWidth-elAlertMsg.offsetWidth)/2+"px";
      } else {
          elAlertMsg.querySelector('p').innerHTML = content;
          elAlertMsg.style.display = 'block';
      }

        window.setTimeout(function () {
          elAlertMsg.style.display = 'none';
            resolve && resolve();
      }, time || 1000);
  });
};

(()=>{
  toast("【菜鸟公园】关闭知乎登录弹窗",2000).then(()=>{
    let a = document.getElementsByClassName('Modal-wrapper');
    for (i=0;i<a.length;i++){
      a[i].parentNode.removeChild(a[i]);
    }
    document.documentElement.style.overflow='visible';
  });
})();

js zhihu 弹窗 油猴 登录 知乎 脚本

2020-11-11 作者:菜鸟DJ 0
工具分享, 编程技能

如何在Windows中体验极致的Linux开发环境

1. 背景

相当长的一段时间,我的工作平台都是MAC,清爽干净的界面,没有广告烦扰,方便的快捷键,好用的触摸板等等。但是换了工作之后,公司配备的是一台Windows台式机,虽然可以带自己的笔记本工作,但是总有些不便。于是一直在折腾Windows下的Linux开发环境。

之前一直是用 vm 搭建,也没有觉得不方便的地方。但是最近一直被安利 wsl2 。于是就安装试用了一番。发现在我的开发环境下完全可以抛弃 vm 了。那么对比 vm 有哪些优势劣势呢。

优势

  • 不用每次点击启动vm,然后点开机或者恢复。直接在终端中选择打开。
  • 不用配置网络,实际上wsl2 你也没有机会配置。wsl2深度融合Windows环境,在wsl启动的服务,在Windows 可以直接 localhost:port 访问
  • 挂载了本地磁盘,虽然vm也可以共享,但是没有这个方便。

劣势

  • 只有Ubuntu可以选择
  • 没有systemd,需要自己些reload脚本
  • 启用hyper v之后,影响vm和模拟器运行

2. 安装WSL2

  1. 从启用或关闭 Windows 功能里勾选适用于 Linux 的 Windows 子系统和虚拟机平台,重启电脑
  2. 以管理员身份启动 powershell ,输入下面指令

    wsl --set-default-version 2

  3. 如果提示要升级内核,按照提示走
  4. 从 Microsoft Store 下载最新 Linux 分发版, 下载完后点击启动,安装
  5. [ 可选 ] 换源,使用阿里Ubuntu镜像。 换完之后执行sudo apt update
  6. [ 可选 ] 从 Microsoft Store 安装 Windows Terminal

3. 搭建开发环境

nginx,php,fpm,mariadb,redis,golang,openssh 等软件均可以通过 apt install 来安装。
通过 service xxx start|restart|stop 来控制状态

  • 特别说明
    mariadb安装完后需要配置root账号密码,参考文章
# 第一次设置密码
sudo mysql_secure_installation

# 控制台登录, 如果有报错,记得使用sudo
sudo mysql -u root -p

# 修改mysqld 绑定IP
sudo vim /etc/mysql/my.cnf
# 注释下面的语句
bind-address  = 127.0.0.1

# php连mysql需要安装扩展
sudo apt install php-mysql

# fastcgi listen字段,需要跟nginx.conf 对应
sudo vim /etc/php/7.4/fpm/pool.d/www.conf
  • Ubuntu20.04 apt install 的服务配置文件目录整理
服务 默认路径 默认配置文件名
nginx /etc/nginx/nginx.conf nginx.conf
maraiadb /etc/mysql/mariadb.conf.d/50-server.cnf my.conf
redis /etc/redis/redis.conf redis.conf
php-fpm /etc/php/7.4/fpm/php-fpm.conf
/etc/php/7.4/fpm/pool.d/www.conf
php-fpm.conf
php /etc/php/7.4/cli/php.ini php.ini
sshd /etc/ssh/ssh_config ssh_config

4. 总结唠嗑

关于wsl2的使用说明,建议阅读官方文档
在 windows 宿主机使用 localhost 就能登录wsl2,不要被国内博客误导!!! 前提是重新安装 openssh 服务。

最后两个安装步骤虽然是可选,但是强烈建议做完,能很大程度的提升使用体验。
换源的好处自然是加快包安装速度
使用 windows Terminal 时让我有点在 MAC 下工作的感觉。总结下有几点:
– 支持多标签页
– 能快捷进入wsl,下拉菜单中点选进入
– 界面重新设计,很清爽,有 Linux 终端的味道,离 MAC 还差点
– 支持 Ctrl C 复制,Ctrl V 粘贴,我很喜欢这个设定。并且 Ctrl C原本的中断功能不受影响

wsl 不支持 systemd ,所以不用折腾开机启动了。需要的服务建议通过 sudo service 服务启动,或者写一个 shell 脚本。

wsl把 windows 磁盘挂载在 /mnt/ 目录下,可以对该目录下文件进行读写操作。

配合 VS CODE 敲代码,只需要安装一个Remote - WSL插件。在 远程资源管理器里选择 WSL Targets 一键连接。 本地开发,即在服务器上开发。NICE

测试过 php 项目 和 golang 的 web 项目,目前没有发现任何功能上的问题。

5. 目前遇到的?坑?

由于我装 ohmyzsh 了,它在git的目录会有额外的操作,所以进入到挂载在 /mnt/ 下面的目录时,会有一段时间读取过程,耗时较长。不用 ohmyzsh 不会有问题。

linux macos terminal ubuntu vm windows wsl

2020-09-05 作者:菜鸟DJ 0
信文随笔, 工具分享

一个方便的数据库操作shell脚本

用法说明

这个脚本可以方便的备份和恢复数据库,而且通过show参数可以用来查看该实例中有多少个数据库。
唯一需要手动操作的是到脚本里配置账号密码。账号密码放在脚本的目的是为了避免每次输入。

导出文件格式是tar.gz。导入的文件格式是zip。这部分跟我的习惯有关系,我备份的数据库都会在本地进行处理压缩成zip上传,就是为了防止没有经过处理的数据库直接拿去导入。

#!/bin/bash

# 这是一个自动化导出MySQL数据库的脚本

# 修改此处
user="root"
passwd="123456"
port=3306
host="127.0.0.1"
dblist=(
"test"
)
root=`pwd`"/"
function printUsage {
    echo "Usage:"
    echo "$0 [-t dump|import|show] [-f file]"
    echo "导出/导入数据库脚本 v1.1"
    echo "导出的sql以数据库命名。"
    echo "导入的文件同样是提取sql文件名!"
    echo "show 参数可以打印数据库名,用于替换dblist"
    echo "dump文件是tar.gz的压缩包,import的文件是zip的压缩包"
}
function printParaErr {
    echo "参数错误!"
}

function printFileNotExist {
    echo "文件不存在!"
}

function printFileNotSupport {
    echo "仅支持压缩文件!(zip)"
}

function cleanOutDir {
    if [ -d $outDir ]; then 
        echo "清理临时目录:" $outDir
        rm -rf $outDir
    fi
}

function addNote {
    echo "是否添加备注文件?[回车跳过]"
    read note

    if [ ${#note} -gt 1 ];then 
        cd $root$outDir
        echo $note > note.txt
    fi
}

if [ $# == 0 ]; then 
    printUsage
    exit 0
fi

GETOPTOUT=`getopt t:f: "$@"`
    set -- $GETOPTOUT
    while [ -n "$1" ]
    do
    case $1 in
        -t)
            type=$2
            shift
            ;;
        -f)
            inputfile=$2
            shift
            ;;
        --)
            shift
            break
            ;;
        *)
            printParaErr
            printUsage;
            exit 1;
            ;;
    esac
    shift
    done
if [ $type == 'dump' ]; then
    echo "目标数据库为 $user@$host:$port"
elif [ $type == 'import' ]; then
    if [ ! -f "$inputfile" ]; then
        printFileNotExist
        printUsage
        exit 0
    fi

    ext_name="${inputfile##*.}"

    if [ $ext_name != 'zip' ]; then
        printFileNotSupport
        printUsage
        exit 0
    fi


    echo "导入源数据为: $inputfile"
    echo "目标数据库为: $user@$host:$port"
elif [ $type == 'show' ]; then
    echo "当前实例存在的数据库:(已排除系统数据库)"
else
    printParaErr
    printUsage;
    exit 1;
fi

# echo "请输入数据库密码,按回车键结束"
# stty -echo # 设置输入字符不回显
# read passwd
# stty echo  # 取消不回显状态

runTime=`date '+%Y%m%d%H%M'`
outDir="./sqlHandler_$runTime/"

cleanOutDir

if [ $type == 'dump' ]; then
    echo "创建导出目录:" $outDir
    mkdir -p $outDir

    for db_name in ${dblist[*]}; do
        cmd="mysqldump -h $host -u $user -P $port -p$passwd $db_name"
        echo $cmd | sed "s/-p$passwd/-p****/g";
        $cmd > "$outDir$db_name.sql";
    done
    cd $outDir
    tar cvzf "dbbak_$runTime.tar.gz" *
    rm -rf *.sql
    addNote
    echo "导出文件为:"
    echo $root$outDir"/"`ls|grep tar`|sed -e "s/\/\//\//g" -e "s/\/\.\//\//g"

elif [ $type == 'import' ]; then
    echo "创建临时目录:" $outDir
    mkdir -p $outDir
    unzip -d $outDir $inputfile
    files=$(ls $outDir)
    cd $outDir
    echo "mysql command:"
    for file in ${files[*]}; do
        db_name="${file%.*}"
        # ext_name="${file##*.}"
        cmd="mysql -h $host -u $user -P $port -p$passwd --default-character-set=utf8 $db_name"
        echo -e "\t"$cmd " < $file" | sed "s/-p$passwd/-p****/g";
        $cmd < $file
    done
    cd $root
    cleanOutDir
    # $cmd < $inputfile
elif [ $type == 'show' ]; then
    rm -rf $outDir
    cmd="mysql -h $host -u $user -P $port -p$passwd "
    $cmd -e "show databases;" |grep -v -E 'Database|mysql|information_schema|performance_schema'|sed -e 's/^/"/g' -e 's/$/"/g'
    # echo $result
fi

if [[ $? == 0 ]]; then
    echo "操作完成!";
else
    echo "┗━━ 操作失败!";
fi

bash MySQL mysqldump shell

2020-03-28 作者:菜鸟DJ 0
工具分享

手机app https抓包步骤一揽

1. 工具准备

  • WireShark
    下载地址 开源工具,免费使用,支持WIN与OSX平台。
    Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

  • Fiddler
    下载地址 开源工具,免费试用,支持WIN平台,OSX需要自行编译。
    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。

2. 如何使用

http的抓包使用Fiddler 或者其他代理软件很直接的就可以完成。但是https的抓包因为经过了加密,所以并不能直接看到抓包的内容,只能看到密文。那么如何使用http来进行抓包呢?

设置界面-打开HTTPS抓包
设置界面-打开代理
设置完成后,关闭软件重新打开。条件允许的情况下最好是重启电脑。
然后在手机里输入网址 http://pc.ip:8080 看是否出现如下截图。出现表示fiddler设置正确。
手机安装证书
iOS只能下载该证书,要安装证书需要2个步骤。 安卓机暂不清楚。
1. 点设置-> 通用 -> 描述文件。 找到刚下载的“DO_NOT_TRUST_FiddlerRoot”点击安装
2. 点设置-> 通用 -> 关于本机 -> 证书信任设置。 点击完全信任。

然后打开浏览器,输入任意网址,能正常打开即表示完成。

3. 抓包结果

现在打开手机app,便可以看到fiddler里出现http和https的访问记录了。看下面的实例。

2019-12-26 作者:菜鸟DJ 0
工具分享

MAC & WIN 平台效率工具清单

1. 数据库GUI工具

1.1 Sequal Pro

官方的release版本已经在2016年停更了,但是master分支仍然有人在更新。我认为这是OSX平台下最轻量,使用最舒服的DB GUI工具,没有之一。
功能特色:交互简洁,免费开源,支持查询结果集增删改。
下载:这里存放的是我编译的版本

1.2 DBeaver

DBeaver 是对目前市面流行的DB支持最全面的工具,而且社区版足够用。唯一的缺点是使用java编写的,有时候会卡。

2. Redis GUI工具

2.1 Medis

Medis是一款基于electron构建的Redis 管理工具,非常的好用。在大数量key的情况下吊打RedisDesktopManager。
官方不再提供OSX平台的安装包,在MAS上有提供下载,但是版本太老。同样下面分享我的编译版本。
下载:这里存放的是我编译的版本 提取码: pan6

3. API调试

3.1 PostMan

功能很齐全的API调试工具,界面也很优化。支持配置云同步。结果json格式化。
下载请到官网

4. 绘图工具

4.1 OpenBoard —— 一款打草稿的工具

全平台的开源软件,结合绘图板,完全可以抛弃草稿本,而且带录屏功能,可以用来制作课件视频。

5. 终端工具

5.1 Mac平台

iterm2 + ohmyzsh

5.2 Win平台

XShell

XShell 有两个功能我非常喜欢。
– 对终端显示文本可以自定义高亮,支持正则表达式,并且无需更改主机的配色。
– 支持ssh通道的代理,通过代理连接梯子服务器简直太舒服了。iterm2怎么配置摸索好久还是没找到解决方案。
附上我的正则高亮配置

用途 表达式
时间 \d{4}[\-\/]\d{2}[\-\/]\d{2}\ \d{2}\:\d{2}\:\d{2}
API (?<=\[)\/(\S)*(?=(\]\[))
IPv4 ((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

6. 开发环境搭建工具

6.1 oneinstack

php,db,nosql db,nginx,还有各种组件。懒人开发必备。

5/5

天气

分类目录

热门文章

记一次和流氓软件战斗的过程0 comments
手机app https抓包步骤一揽0 comments
记一下RabblitMQ的安装和RPC的工作模式0 comments
聊一聊快排算法0 comments
MAC & WIN 平台效率工具清单0 comments
你真的会用MySQL里的max函数吗?0 comments
MySQL 分组之后如何取Top(N)?0 comments
B站代码解读 — LRUCache0 comments
解搜索二维矩阵题0 comments
解一道字符串变化题0 comments

微信公众号:菜鸟公园

微信公众号
微信公众号:菜鸟公园
隐私政策