Code Monkey home page Code Monkey logo

everyday_github's People

Stargazers

 avatar

Watchers

 avatar

everyday_github's Issues

0228日志

今天我真的好无聊,荒废了好多东西,但是也还是配置了一些电脑的东西,等下还要敲一下代码,现在就是大致回顾一下今日干的活,发现我思维的习惯是跳跃的,然后一直就会跟着自己跳跃的思维走,不管时间,有时候真的,自己有点迷恋使用工具,这种感觉还是不太行,所以以后,要经常想着时间成本。
最好要精于计算,算着自己的时间过日子,不然真的会很浪费,自己学会省钱,还不如学会省时间,把时间用在该用的地方

  1. 换了一张壁纸,写了个sh换壁纸的程序
  2. 写了一个v2ray的节点订阅程序
  3. 把电脑的新标签换成了infinity
  4. 尝试zsh这个shell
  5. 了解shell和终端的区别,原来shell就是就是面向内核的,终端负责输入输出

快速获取Mardown格式的网址链接

mardown的网址链接格式是New Issue · iAoe444/EveryDay_GitHub,平时要拼接这个好麻烦,我用的firefox没有chrome的插件copytab,所以自己动手丰衣足食,不多说,直接贴代码,使用tampermonkey这个神器就可以了

// ==UserScript==
// @name         复制markdown格式链接
// @namespace    http://iaoe.xyz/
// @version      0.1
// @description  使用ctrl+shift+m键来复制
// @author       iAoe
// @match        http*://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var title = document.title;
    var url = location.href;      // 获取文档标题和链接
    document.onkeydown = function(e) {      //监听按键按下
        var keyCode = e.keyCode || e.which || e.charCode; 
        var shiftKey = e.shiftKey ;
        var ctrlKey = e.ctrlKey ;
        var content = "["+title+"]"+"("+url+")";
        if(ctrlKey && shiftKey && keyCode == 77) {
            const input = document.createElement('input');
            document.body.appendChild(input);
            input.setAttribute('value', content);
            input.setSelectionRange(0, 9999);
            input.select();
            if (document.execCommand('copy')) {
                document.execCommand('copy');
                console.log('复制成功, 内容:'+content);
            }else{
                console.log('该浏览器不支持此功能');
            }
            document.body.removeChild(input);
            e.preventDefault();
            return false;
        }
    }
})();

使用说明

按住ctrl+shift+m就可以完成复制

代码解剖

  1. 复制到剪贴板
    网上看到一些方法,发现不能适配所有的浏览器,于是使用了以下巧妙的方法:
            document.body.appendChild(input);
            input.setAttribute('value', content);
            input.setSelectionRange(0, 9999);
            input.select();
            if (document.execCommand('copy')) {
                document.execCommand('copy');
                console.log('复制成功, 内容:'+content);
            }else{
                console.log('该浏览器不支持此功能');
            }
            document.body.removeChild(input);

首先使用到了document.execCommand(),这个方法的定义如下

which allows one to run commands to manipulate the contents of the editable region.

就是用来控制可编辑区域的内容,所以使用了一个巧妙的方法,创建一个输入框,给输入框放置内容,聚焦到输入框,执行复制命令,删除输入框

  1. 监听按键
    监听按键是对document的onekeydown方法的重写
        document.onkeydown = function(e) {
            var keyCode = e.keyCode || e.which || e.charCode;    //对浏览器做了兼容,从而获取keycode
            var altKey = e.altKey ;    //e.altKey和e.shiftKey|ctrlKey|metaKey是功能键,如果这些键按下了,就变成了key
           if(ctrlKey && shiftKey && keyCode == 77) {
                alert("复制成功")
                e.preventDefault();   //阻止默认的按键组合效果
                return false;            //阻止默认的按键组合效果,适配ie
            }
        }

关于keycode的查询,可以看这篇文章js键盘监听事件_weixin_43608538的博客-CSDN博客,这里的keycode和xmodmap的不一样

Linux修改键位

安装xrog

pacman -S xrog

这个工具可以改很多硬件方面的东西,这里我们使用xmodmap来改键位

生成键位表

xmodmap -pke > ~/.xmodmap

键位查看器

xev

这个是键位查看器,可以看到的是,你按下键盘,就可以看到对应哪颗键的信息

KeyPress event, serial 34, synthetic NO, window 0x2c00001,
    root 0x6ab, subw 0x0, time 2256878, (370,668), root:(1017,725),
    state 0x40, keycode 24 (keysym 0x71, q), same_screen YES,
    XLookupString gives 1 bytes: (71) "q"
    XmbLookupString gives 1 bytes: (71) "q"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2c00001,
    root 0x6ab, subw 0x0, time 2257044, (370,668), root:(1017,725),
    state 0x40, keycode 24 (keysym 0x71, q), same_screen YES,
    XLookupString gives 1 bytes: (71) "q"
    XFilterEvent returns: False

像是在这里,按下的是q键,keycode是24,可以在之前的.xmodmap文件里面找到

修改键位表

比如说,我们要修改里面的caps键和esc键,只需要将keycode9和keycode66的内容换一下就行

生效键位表

这里我们需要做的是输入一下命令

xmodmap .xmodmap

这样就生效了

开机不自动生效

之前发现一个问题,就是开机不会自启动,i3wm使用xmodmap命令启动没用,后来查了一下资料,其实这个是这样根本没用,需要使用.xinitrc这个文件,将.xmodmap放在用户根目录就行了
https://www.kutu66.com//ubuntu/article_157124

mysql

查看建表语句

show create table <table_name> \G;

修改字段

alter table <table_name> modify column <>

Manjaro安装配置

更换软件源

  1. 查看现有软件源
sudo pacman-mirrors -i -c China -m rank

这里可以看到有几个软件源可以选,一般是下面三个

  0.479 China          : https://mirrors.tuna.tsinghua.edu.cn/manjaro/
  0.301 China          : https://mirrors.sjtug.sjtu.edu.cn/manjaro/
  0.301 China          : https://mirrors.ustc.edu.cn/manjaro/
  1. 修改/etc/pacman.conf,在后追加一下文本
[archlinuxcn]
SigLevel = Never
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

3 . 更改为**镜像源

sudo pacman-mirrors -c China

4.安装archlinuxcn-keyring

sudo pacman -Syy
sudo pacman -S archlinuxcn-keyring 
sudo pacman -Syyu

修改主目录下的中文目录改为英文

  1. 将现有的中文文件夹重命名为英文文件夹(如,桌面改为Desktop)
mv 桌面 Desktop
mv 下载 Download
..........
  1. 编辑~/.config/user-dirs.dirs文件,安装对应的将中文替换为刚才重命名后的文件夹,注销,重新登录

sudo的vim和用户下的vim不同

原因是sudo的环境变量和root的,vim的配置是在当前用户下的,所以可以这样:摘抄自Sudo (简体中文) - ArchWiki

当前用户的环境变量不会应用到sudo启动的程序,除非使用-E选项:

$ sudo -E pacman -Syu

如果经常需要这样做,可以在~/.bashrc(或其他shell配置文件)中加入命令别名:

alias sudo="sudo -E"

在/etc/sudoers中添加以下内容作用相同:

Defaults !env_reset

可以把需要传递环境变量的命令设置到env_keep:

Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Manjaro 终端或图形化系统工具

  1. 设置蓝牙的工具

    • 图形化—blueman

    • 终端—bluetoothctl

  2. 设置wifi的工具

    • 图形化 — nm-connection-editor
  3. 设置亮度的工具

    • 终端—xbacklight
  4. 设置音量的工具

    • 终端—alsamixer
  5. 查看系统资源

    • 终端—htop

vim配置

让vim拥有自动切换输入法的能力

我用的是fcitx+manjaro+vim,用这个脚本可以简单的在退出插入模式的时候切换输入法,放在,vimrc就行,需要注意的是,需要在输入法里面多配一个英语输入法的方案

function! Fcitx2en()
     let l:a = system("fcitx-remote -o")
 endfunction
 
 set timeoutlen=150
 autocmd InsertLeave * call Fcitx2en()

Vertx学习相关

什么叫无状态协议,什么叫有状态协议

    // 无状态协议
    public String noStateProtocol(String userName){
        return String.format("%s 登陆成功", userName);
    }


    // 有状态协议:协议本身会帮你记录一些状态,比如用户状态
    List<String> userList = new ArrayList<>();
    public String haveStateProtocol(String userName){
        if(userList.contains(userName)){
            return String.format("%s 登陆过了", userName);
        } else{
            userList.add(userName);
            return String.format("%s 登陆成功", userName);
        }
    }

Manjaro使用问题

双系统时间不同步

在装双系统之后,windows的时间和linux的时间都会不同步,具体时间就相差了8小时,这个小毛病的修改方式如下,参考链接

硬件时钟和系统时钟。

  • 硬件时钟(即实时时钟 RTC 或 CMOS 时钟)
    仅能保存:年、月、日、时、分、秒这些时间数值,无法保存时间标准(UTC 或 localtime)和是否使用夏令时调节

  • 系统时钟(即软件时间)
    与硬件时间分别维护,保存了:时间、时区和夏令时设置。Linux 内核保存为自 UTC 时间 1970 年1月1日经过的秒数。初始系统时钟是从硬件时间计算得来,计算时会考虑/etc/adjtime的设置。系统启动之后,系统时钟与硬件时钟独立运行,Linux 通过时钟中断计数维护系统时钟

localtime和UTC

localtime指的是本地时间,UTC指的是与时区无关的全球时间标准。

windows默认使用的是localtime,而linux使用的是UTC,当登录了linux后,软件时间一样,硬件时间就是现在的时间减掉8小时,而windows登录后,就把这个时间当作是本地时间,所以才出现这种偏差

怎么修复

第一种方法:linux输入以下命令,使用localtime

timedatectl set-local-rtc true

第二种方法:windows使用UTC

使用 regedit,新建如下 DWORD 值,并将其值设为十六进制的 1。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

也可以用管理员权限启动命令行来完成:

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

如果以上操作不起作用,并且你使用的是 Windows 64位系统,将 DWORD 修改为 QWORD。

Manjaro如何控制蓝牙文档

除了图形化界面外,还可以使用命令行来进行控制,需要安装两个包,第一个是bluez还有一个是bluez-utils,接着就可以使用以下命令来进行控制了

bluetoothctrl

Manjaro如何控制触摸板文档

电源管理

解决终端卡住的问题

解决方案

卡死是因为LIUNX安全设置问题,在一段时间内没有使用数据的情况下会自动断开,解决方法就是让本地或者服务器隔一段时间发送一个请求给对方即可

  1. 编辑配置配置文件/etc/ssh/ssh_config,添加如下参数
ServerAliveInterval 50 #每隔50秒就向服务器发送一个请求
ServerAliveCountMax 3  #允许超时的次数,一般都会响应
  1. 修改完之后重启一下ssh服务
sudo /etc/init.d/ssh restart

参考链接

解决终端SSH连接服务器一段时间不操作之后卡死的问题 - 一个潘达 - 博客园

Windows命令

系统变量

  1. 查看系统变量
echo %GOPATH%
  1. 设置系统变量
set GOPATH="D:\Go\"

Windows如何改键?

脚本

# https://zhuanlan.zhihu.com/p/29581818

import sys
import os

save_format = "bat"    #这个值可以修改,有两个选项(bat和reg),可选择生成bat批处理文件或者reg注册表脚本文件,功能一样

class CountError(Exception):    #文本文件格式错误异常
    pass

class FileFormatError(Exception):    #save_format值异常
    pass


if save_format not in ["bat","reg"]:
    raise FileFormatError("The variable 'save_format'`s value must be 'bat' or 'reg'.")


if __name__ == "__main__":
    
    if not os.path.isdir("layout_"+save_format):
        os.mkdir("layout_"+save_format)

    if len(sys.argv) == 1:
        if save_format == "bat":
            with open("layout_bat/recover.bat",'w') as f:
                f.write('@echo off\nreg delete "hklm\\system\\currentcontrolset\\control\\keyboard layout" /v "ScanCode Map" /f\necho "键位已恢复,重启系统后生效"\npause')
            input("恢复文件recover.bat已生成至layout_bat文件夹下,以管理员身份右键执行该文件后重启系统生效。\n按回车键退出程序...")

        else:
            with open("layout_reg/recover.reg",'w') as f:
                f.write('Windows Registry Editor Version 5.00\n[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout]\n"ScanCode Map"=hex:00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00')
            input("恢复文件recover.reg已生成至layout_reg文件夹下,双击执行该文件后重启系统生效。\n按回车键退出程序...")

    elif len(sys.argv) == 2:
        scan_code_dict = {
            "00 00":"None",
            "01 00":"Esc",    #即Esc键的扫描码是"0001"
            "02 00":"1",
            "03 00":"2",
            "04 00":"3",
            "05 00":"4",
            "06 00":"5",
            "07 00":"6",
            "08 00":"7",
            "09 00":"8",
            "0a 00":"9",
            "0b 00":"0",
            "0c 00":"-",
            "0d 00":"=",
            "0e 00":"Backspace",
            "0f 00":"Tab",
            "10 00":"Q",
            "11 00":"W",
            "12 00":"E",
            "13 00":"R",
            "14 00":"T",
            "15 00":"Y",
            "16 00":"U",
            "17 00":"I",
            "18 00":"O",
            "19 00":"P",
            "1a 00":"[",
            "1b 00":"]",
            "1c 00":"Enter",
            "1d 00":"Left Ctrl",
            "1e 00":"A",
            "1f 00":"S",
            "20 00":"D",
            "21 00":"F",
            "22 00":"G",
            "23 00":"H",
            "24 00":"J",
            "25 00":"K",
            "26 00":"L",
            "27 00":"Semicolon",    #由评论区指出,键盘上的“;”应该用其他值代替,否则会与配置文本文件中的“;”混淆
            "28 00":"'",
            "29 00":"`",
            "2a 00":"Left Shift",
            "2b 00":"\\",
            "2c 00":"Z",
            "2d 00":"X",
            "2e 00":"C",
            "2f 00":"V",
            "30 00":"B",
            "31 00":"N",
            "32 00":"M",
            "33 00":",",
            "34 00":".",
            "35 00":"/",
            "36 00":"Right Shift",
            "37 00":"n*",
            "38 00":"Left Alt",
            "39 00":"Space",
            "3a 00":"Caps Lock",
            "3b 00":"F1",
            "3c 00":"F2",
            "3d 00":"F3",
            "3e 00":"F4",
            "3f 00":"F5",
            "40 00":"F6",
            "41 00":"F7",
            "42 00":"F8",
            "43 00":"F9",
            "44 00":"F10",
            "45 00":"Num Lock",
            "46 00":"Scroll Lock",
            "47 00":"n7",
            "48 00":"n8",
            "49 00":"n9",
            "4a 00":"n-",
            "4b 00":"n4",
            "4c 00":"n5",
            "4d 00":"n6",
            "4e 00":"n+",
            "4f 00":"n1",
            "50 00":"n2",
            "51 00":"n3",
            "52 00":"n0",
            "53 00":"n.",
            "57 00":"F11",
            "58 00":"F12",

            
            "1c e0":"nEnter",
            "1d e0":"Right Ctrl",
            "37 e0":"PrtSc",
            "38 e0":"Right Alt",
            "47 e0":"Home",
            "48 e0":"Up",
            "49 e0":"Page Up",
            "4b e0":"Left",
            "4d e0":"Right",
            "4f e0":"End",
            "50 e0":"Down",
            "51 e0":"Page Down",
            "52 e0":"Insert",
            "53 e0":"Delete",
            "5b e0":"Left Windows",
            "5c e0":"Right Windows",
            }

        fun_key_dict = dict((m.upper(),n) for n,m in scan_code_dict.items())    #键值互换,键值全大写
        content = '00 00 00 00 00 00 00 00'
        
        #用于暂时保存映射前后的键位,判断这次键位修改是否有风险
        before_map_set = set()
        after_map_set = set()

        with open(sys.argv[1]) as f:
            p = f.read().strip().split(';')
            p.remove('')
            content += ' {:0>2x} 00 00 00'.format(len(p)+1)
            try:
                for i in p:
                    if len(i.strip().split(':')) == 2:
                        before_map_set.add(i.split(':')[0].strip().upper())
                        after_map_set.add(i.split(':')[1].strip().upper())
                        content += ' '+fun_key_dict[i.split(':')[1].strip().upper()]+' '+fun_key_dict[i.split(':')[0].strip().upper()]
                    else:
                        raise CountError
                content += ' 00 00 00 00'
            except KeyError:
                print("文件中键名称有误")
                
            except CountError:
                print("文件中未按格式书写")
            else:
                if before_map_set != after_map_set:
                    run = input("此次键位替换存在风险,{}键功能将在键盘上无对应按键,是否继续?(输入y继续,否则退出程序)".format(str(before_map_set-after_map_set)[1:-1]))
                    if run != 'y':
                        sys.exit()

                if save_format == "bat":
                    with open("layout_bat/"+'.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1])+'.bat','w') as g:
                        g.write('@echo off\nreg add "hklm\\system\\currentcontrolset\\control\\keyboard layout" /v "ScanCode Map" /t REG_BINARY /d "{}" /f\necho "键位已完成修改,重启系统后生效"\npause'.format(''.join(content.split())))
                    input("...\n{}文件已生成至layout_bat目录下,右键以管理员身份执行该文件后重启系统生效。\n按回车键退出程序...".format('.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1])+'.'+save_format))

                else:
                    with open("layout_reg/"+'.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1])+'.reg','w') as g:
                        g.write('Windows Registry Editor Version 5.00\n[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout]\n"ScanCode Map"=hex:{}'.format(','.join(content.split())))

                    input("...\n{}文件已生成至layout_reg目录下,双击执行该文件后重启系统生效。\n按回车键退出程序...".format('.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1])+'.'+save_format))
    else:
        input("传入参数错误,按回车键退出程序...")

DNS的配置

选择DNS

发现在家里这几天网络已有问题,具体表现是之前可以访问的现在访问不了,所以上路由器填了下广东电信的dns202.96.128.86,这个填了之后确实之前的网络好了

但是之后发现还是有网站上不了,查了一下是广东电信的dns很垃圾

那好,万能的8.8.8.8114.114.114.114可以吧,再不成可以选择阿里的dns,223.5.5.5,还是不行,发现这些dns都被运营商劫持了,晕@@

最后选择了腾讯的dns,119.29.29.29,备用的是这个1.1.1.1,下面是看到的原文—来自v2ex@vefawn1

#谷歌(被运营商劫持)
dns=8.8.8.8
#阿里(被运营商劫持)
dns=223.5.5.5
#运营商自带的都有劫持现象

无劫持的 DNS
#香港
dns=210.0.255.250
#openDNS
dns=208.67.222.222
#cf
dns=1.1.1.1
#腾讯
dns=119.29.29.29
#百度
dns=180.76.76.76
#114 (不建议使用)
dns=114.114.114.114

移动宽带用 1.1.1.1 是可以的,延迟小。不过 cf 的 DNS 对于国内 CDN 并不友好,经常把国内网站解析到香港(或国外) IP 里,比如说淘宝、v2ex。相比之下 opendns 对 CDN 就友好很多。这两 DNS 延迟一般都在 10-20ms 之间。

Linux命令

返回上一次访问的目录

cd -

软链接

ln -s /mnt/x/Document/ Document

WSL2 问题

WSL2设置公网/局网访问

netsh interface portproxy add v4tov4 listenport=port connectaddress=127.0.0.1 listenaddress=* protocol=tcp

port填写端口号,例如

netsh interface portproxy add v4tov4 listenport=80 connectaddress=127.0.0.1 listenaddress=* protocol=tcp

i3wm配置

设置容器边框颜色 4.20

加入以下配置文件

# class                 border  backgr. text    indicator child_border
client.focused          #4c7899 #285577 #ffffff #2e9ef4   #285577
client.focused_inactive #333333 #5f676a #ffffff #484e50   #5f676a
client.unfocused        #333333 #222222 #888888 #292d2e   #222222
client.urgent           #2f343a #900000 #ffffff #900000   #900000
client.placeholder      #000000 #0c0c0c #ffffff #000000   #0c0c0c

client.background       #ffffff

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.