LYNX

Links

Home Archives Github Link Knife Tags Categories

Tags

Categories

问题求解 操作系统 数理逻辑 概率论与数理统计
Cubism3-SDK-for-web功能扩展

全局跟踪鼠标

修改事件监听(只针对鼠标)

lappdelegate.js

LAppDelegate.prototype.initialize = function () {
...
else {
canvas.onmousedown = onClickBegan;// 执行动画
// canvas.onmousemove = onMouseMoved;
canvas.onmouseup = onClickEnded;// 需要执行动画
// document.onmouseenter = onClickBegan;
document.onmousemove = onMouseMoved;
document.onmouseleave = onMouseLeave;// 回头
}
};

在鼠标移出后回头

lappdelegate.js中自定义回头函数

/**
* 回头,不触发点击事件
*/
function onMouseLeave(e) {
if (!LAppDelegate.getInstance()._view) {
_lapppal__WEBPACK_IMPORTED_MODULE_3__["LAppPal"].printLog("view notfound");
return;
}
var live2DManager = _lapplive2dmanager__WEBPACK_IMPORTED_MODULE_5__["LAppLive2DManager"].getInstance();
live2DManager.onDrag(0.0, 0.0);
}

调整位置和大小

比例放缩

  1. 现在lappdefine.js定义比例
  2. lapplive2dmanager.js中比例放缩
LAppLive2DManager.prototype.onUpdate = function () {
var scale_rate = _lappdefine__WEBPACK_IMPORTED_MODULE_3__["LAppDefine"].ScaleRate;
projection.scale(scale_rate, width / height * scale_rate);// 调整放缩倍数
};

点击位置比例放缩

lapplive2dmanager.js

LAppLive2DManager.prototype.onTap = function (x, y) {
var scale_rate = _lappdefine__WEBPACK_IMPORTED_MODULE_3__["LAppDefine"].ScaleRate;
x /= scale_rate;
y /= scale_rate;
...
};

背景透明

位于lappdelegate.jsrun

LAppDelegate.prototype.run = function () {
...
gl.clearColor(0.0, 0.0, 0.0, 0.0);// 背景颜色
...
}

切换模型

删除原切换按钮

删除的位置(TODO)

  • lappview.js
    • initializeSprite
    • onTouchesEnded

如果只删除图片会报错

讲切换模型绑定到按钮

lappdelegate.jsrun

LAppDelegate.prototype.run = function () {
// 自定义切换模型
var btnChange = document.getElementById("btnChange");
btnChange.addEventListener("click", function () {
var live2DManager = _lapplive2dmanager__WEBPACK_IMPORTED_MODULE_5__["LAppLive2DManager"].getInstance();
live2DManager.nextScene();
});
}

拖拽元素

引入jquery-ui

新建js文件JsManager.js

function myDrag()
{// 使模型能够拖拽
$(".drag").draggable(
{
containment: document.body
});
}

注意调整drag类的大小

修正鼠标点击位置

lappdelegate.jsonClickBegan

function onClickBegan(e) {
...
// LAppDelegate.getInstance()._captured = true;
// var posX = e.pageX;
// var posY = e.pageY;
// 修正鼠标点击位置判定
var rect = e.target.getBoundingClientRect();
var posX = e.clientX - rect.left;
var posY = e.clientY - rect.top;
...
}

修正鼠标跟随

lappdelegate.jsonMouseMoved

function onMouseMoved(e) {
// if (!LAppDelegate.getInstance()._captured) {// TODO
// return;
// }
if (!LAppDelegate.getInstance()._view) {
_lapppal__WEBPACK_IMPORTED_MODULE_3__["LAppPal"].printLog("view notfound");
return;
}
var tempDrag = document.getElementById("drag_" + "0");// TODO 获取拖拽元素
// var rect = document.body.getBoundingClientRect();
// var posX = e.clientX - rect.left;
// var posY = e.clientY - rect.top;
var posX = e.clientX - tempDrag.offsetLeft;
var posY = e.clientY - tempDrag.offsetTop;
console.log("lappdelegate onMouseMoved (" + posX + ", " + posY + "), target: " + e.target);
LAppDelegate.getInstance()._view.onTouchesMoved(posX, posY);
}

直接计算拖拽元素在body上的相对偏差

多重canvas

修改鼠标的事件监听

lappdelegate.jsinitialize中将原sdk的=赋值改为addEventListener

else {// TODO 绑定到特定canvas
var tempNum = this._num;
if (tempNum == null) { tempNum.fuckshit(); };
canvas.addEventListener("mousedown", function () {
onClickBegan(window.event, tempNum);
}, false);
canvas.addEventListener("mouseup", function () {// 需要执行动画
onClickEnded(window.event, tempNum);
}, false);
// document.onmouseenter = onClickBegan;

document.body.addEventListener("mousemove", function () {// TODO
onMouseMoved(window.event, tempNum);
}, false);// 全局鼠标跟随

document.body.addEventListener("mouseleave", function () {// TODO
onMouseLeave(window.event, tempNum);
}, false);// 回头
}

调整速度

由于原版sdk在增加模型后会严重减慢动画速度,需要对sdk进行修改

可能的位置:

  • motion/cubismmotionqueuemanager.jsdoUpdateMotion(model, userTimeSeconds)

投影到多个canvas

点击事件修改

添加tips

Cubism3 SDK for web笔记

安装(编译后即扔)

  1. 终端npm install

  2. vscode

    • windows/linux:ctrl+shift+p:Task: run Task->build-all
    • 会有一堆报错,再在终端把所有缺的用npm install补上
    • 关于build-all:grep "build-all" -nr .
  3. 如果只管使用的话,接下来的事就和typescriptnpm没关系了,文件可以全部删掉

重构

  • 顺序
    • ./Framework/cubismdefaultparameterid.ts,// 1
    • ./Framework/cubismframeworkconfig.ts,// 2
    • ./Framework/cubismmodelsettingjson.ts,// 3
    • ./Framework/effect/cubismbreath.ts,// 4
    • ./Framework/effect/cubismeyeblink.ts,// 5
    • ./Framework/effect/cubismpose.ts,// 6
    • ./Framework/icubismmodelsetting.ts,// 7
    • ./Framework/id/cubismid.ts,// 8
    • ./Framework/id/cubismidmanager.ts,// 9
    • ./Framework/live2dcubismframework.ts,// 10
    • ./Framework/math/cubismmath.ts,// 11
    • ./Framework/math/cubismmatrix44.ts,// 12
    • ./Framework/math/cubismmodelmatrix.ts,// 13
    • ./Framework/math/cubismtargetpoint.ts,// 14
    • ./Framework/math/cubismvector2.ts,// 15
    • ./Framework/math/cubismviewmatrix.ts,// 16
    • ./Framework/model/cubismmoc.ts,// 17
    • ./Framework/model/cubismmodel.ts,// 18
    • ./Framework/model/cubismmodeluserdata.ts,// 19
    • ./Framework/model/cubismmodeluserdatajson.ts,// 20
    • ./Framework/model/cubismusermodel.ts,// 21
    • ./Framework/motion/acubismmotion.ts,// 22
    • ./Framework/motion/cubismexpressionmotion.ts,// 23
    • ./Framework/motion/cubismmotion.ts,// 24
    • ./Framework/motion/cubismmotioninternal.ts,// 25
    • ./Framework/motion/cubismmotionjson.ts,// 26
    • ./Framework/motion/cubismmotionmanager.ts,// 27
    • ./Framework/motion/cubismmotionqueueentry.ts,// 28
    • ./Framework/motion/cubismmotionqueuemanager.ts,// 29
    • ./Framework/physics/cubismphysics.ts,// 30
    • ./Framework/physics/cubismphysicsinternal.ts,// 31
    • ./Framework/physics/cubismphysicsjson.ts,// 32
    • ./Framework/rendering/cubismrenderer.ts,// 33
    • ./Framework/rendering/cubismrenderer_webgl.ts,// 34
    • ./Framework/type/csmmap.ts,// 35
    • ./Framework/type/csmrectf.ts,// 36
    • ./Framework/type/csmstring.ts,// 37
    • ./Framework/type/csmvector.ts,// 38
    • ./Framework/utils/cubismdebug.ts,// 39
    • ./Framework/utils/cubismjson.ts,// 40
    • ./Framework/utils/cubismstring.ts,// 41
    • ./Sample/TypeScript/Demo/src/lappdefine.ts,// 42
    • ./Sample/TypeScript/Demo/src/lappdelegate.ts,// 43
    • ./Sample/TypeScript/Demo/src/lapplive2dmanager.ts,// 44
    • ./Sample/TypeScript/Demo/src/lappmodel.ts,// 45
    • ./Sample/TypeScript/Demo/src/lapppal.ts,// 46
    • ./Sample/TypeScript/Demo/src/lappsprite.ts,// 47
    • ./Sample/TypeScript/Demo/src/lapptexturemanager.ts,// 48
    • ./Sample/TypeScript/Demo/src/lappview.ts,// 49
    • ./Sample/TypeScript/Demo/src/main.ts,// 50
    • ./Sample/TypeScript/Demo/src/touchmanager.ts,// 51
    • ./node_modules/whatwg-fetch/fetch.js// 52

文件分析

src

lappdefine.js

  • ModelDir()

对于每个模型文件夹,其model2.json命名必须和文件夹一样

lappview.js

  • onTouchesEnded()

lapplive2dmanager.js

  • nextScene():切换模型
  • onDrag():跟踪鼠标
  • onTap()

lappdelegate.js

  • onClickBegan()
  • onTouchBegan()

lapptexturemanager.js

  • createTextureFromPngFile()

main.js

  • main():入口函数

math

cubismmatrix44

  • scale(x, y):模型的长和宽

引用关系

lappdelegate.js

函数名 引用位置
LAppDelegate.getInstance() main.js,lappmodel.js,lappview.js

lappmodel.js

lappview.js

sublime笔记

windows

  • 多行增加光标ctrl+alt+up/down

  • 多行同时生成光标ctrl+shift+l

  • 绑定quartus

"E:\Sublime Text 3\sublime_text.exe" %f:%l
  • 上次编辑位置alt+-

  • 括号匹配ctrl+m

插件位置

  • windows:C:/Users/$username/AppData/Roaming/Sublime Text 3/Packages
  • ubuntu:/home/lynx/.config/sublime-text-3/Packages
  • mac:/Users/lynx/Library/Application Support/Sublime Text 3/Packages

无法安装插件

安装package control

  • 直接从github上考到Installed Packages
  • 控制台安装(我觉得不行)

channel_v3.json地址

本地,jsdelivr,raw.github都可以.来源:

package control的设置文件中

{
"channels":
[
"https://raw.githubusercontent.com/fayou147/GitOrder/master/json/channel_v3.json"
]
}
Linux从0开始配置

git

  1. 全局设置
git config --global user.name "Lynx" # your student ID and name
git config --global user.email "1197225628@qq.com" # your email
git config --global core.editor vim # your favorite editor
git config --global color.ui true

powerline

  1. python安装pip

菜鸟教程

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py
# or
sudo apt-get install python3-pip
  1. pip安装powerline

详细

pip install powerline-status
pip3 install powerline-status
  1. pip安装powerline-gitstatus

github

sudo apt install powerline-gitstatus
# or
pip install powerline-gitstatus
pip3 install powerline-gitstatus
  1. 复制配置文件

    git clone https://github.com/aaaatrox/powerline.git
    mv powerline .config/
  2. 安装powerline字体

详细

git clone https://github.com/powerline/fonts.git
cd fonts
./install.sh
  1. 修改终端字体设置

  2. 找不到powerline-config

export PATH=$PATH:/home/lynx/.local/bin/
# export PATH=$pathtopowerline-config:$PATH

vim

  1. 转移.vimrc,修改powerline相对路径

安装支持python的vim(查看vim --version),详细:

  • macOS
brew install vim --with-python
  • Linux
sudo apt install vim-gnome

如果需要使用系统剪切板功能,必须安装vim-gnome

  1. 复制插件(branch clean)
    git clone https://github.com/aaaatrox/my_vim.git
    mv my_vim .vim
  • 注意:

    • ubuntu默认只装了vi而不是vim
    • 如果出现无法写入.vim/view的问题,直接把文件夹删掉
  • 插件包含:推荐插件

  1. 修改rtp

zsh

  1. 安装zsh

  2. wget安装oh-my-zsh

    sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
  3. 转移.zshrc,修改powerline相对路径

  4. 安装zsh-syntax-highlighting

    详细

    • macOS
    brew install zsh-syntax-highlighting

    然后将source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh加到.zshrc

    • oh-my-zsh
     git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
    mv zsh-syntax-highlighting ~/zsh-syntax-highlighting

    然后将source $HOME/zsh-syntax-highlighting/zsh-syntax-highlighting.git加到.zshrc

ubuntu使用

零散笔记

在文件夹中执行脚本

文件$\to$首选项$\to$行为$\to$可执行文本文件

快捷键

不要出现fn+super的组合

截屏

  • 复制截图到剪切板:ctrl+print
  • 复制窗口截图到剪切板:ctrl+alt+print
  • 复制选区截图到剪切板:shift+ctrl+print
  • 保存截图到图片:print
  • 保存窗口截图到图片:alt+print
  • 保存选区截图到图片:shift+print
  • 录屏:shift+ctrl+alt+r

禁用快捷键

backspace

热点

nm-connection-editor

设置$\to$wifi$\to$打开wifi热点

误删PATH救急

  • Linux通用?
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:$PATH

不要忘记加:PATH

安装字体

sudo mkdir /usr/share/fonts/{name}
sudo cp {font}.ttf /usr/share/fonts/{name}
cd /usr/share/fonts/{name}
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv

文件编码


功能性软件

文件管理器

由于ubuntu自带的文件管理器太睿智,推荐以下文件管理器

  • pcmanfm
  • nemo
  • thunar
  • dolphin

修改默认文件管理器

TODO:/etc/gnome/defaults.list(直接修改好像没用)

# what's the current default file manager?
xdg-mime query default inode/directory

# set nautilus as a default file manager
xdg-mime default nautilus.desktop inode/directory # application/x-gnome-saved-search

软件对应/usr/share/applications下的desktop

mathematica

报错

CRITICAL FAILURE: PrintIntroduction() Error
$ProductTitle not defined.

路径不能有空格

一个解决包依赖问题的软件

sudo apt install aptitude
  • (示例)卸载libreoffice
sudo aptitude purge libreoffice6.0

字体编辑

sudo add-apt-repository ppa:fontforge/fontforge
sudo apt-get update
sudo apt-get install fontforge

图像编辑

sudo apt install gimp
sudo apt install krita
sudo apt install krita-l10n

图像转换

sudo apt install sam2p
sam2p shit.png shit.gif

gif录屏

  • byzanz
sudo apt install byzanz 
byzanz-record --duration=50 --delay=3 --x=1030 --y=100 --height=500 demo1.gif

桌面便签(Indicator Stickynotes)

sudo add-apt-repository ppa:umang/indicator-stickynotes
sudo apt-get update
sudo apt-get install indicator-stickynotes

基本没用

屏幕管理

  • arandr
sudo apt install arandr

镜像源

/etc/apt/sources.list

  • 中科大
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  • 清华
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
  • 网易
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
  • 阿里
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

apt

系统监视器安装

sudo apt install gnome-system-monitor
百度网盘资料

已经挂掉的软件

部分内容来自

BaiduPCS-Go

DU盘解析下载器

highspeed_downloader

老毛子Aria2

Pandownload

Proxyee_down

YunDownload重置版

win10配置

软件

  • 起步

  • 核心

    • Dukto R6: 4平台传输文件
    • Disklnternals Linux Reader: 查看Linux系统的文件
    • balenaEtcher/rufus: 启动盘制作
  • 媒体

    • PopSub: 字幕
    • GoldWave: 声音
    • Easy GIF Animator: gif
    • xdown: 下载器
  • 垃圾

    • FreeSSHd

关闭防火墙

需要来自system的权限

属性->安全->高级->(所有者)更改->高级->立即查找->选择一个用户(非system)->确定->替换子容器和对象的所有者->使用可从此对象继承的权限项目替换所有子对象的权限项目->确定->确定

office2016镜像版破解

mathematica破解

Adobe photoshop CC2014破解

首次破解

  1. 断网,运行注册机
  2. 安装时输入序列号
  3. 安装后,帮助->登录->链接Internet出现问题->脱机激活->保证注册机的序列号和安装时的一样,并输入请求码->输入激活码
  4. 在防火墙中禁用出站规则
    • C:\Program Files (x86)\Common Files\Adobe\OOBE\PDApp\core\PDapp.exe
    • C:\Program Files (x86)\Common Files\Adobe\OOBE\PDApp\P6\adobe_licutil.exe
    • C:\Program Files (x86)\Common Files\Adobe\OOBE\PDApp\P7\adobe_licutil.exe

序列号被注销

  1. 同上
  2. 由注册机生成新的序列号并输入
  3. 同上

路径笔记

注册表位置:C:Windows/System32/config/

ubuntu配置

分盘

  1. 安装失败
  • swap:1024M,主分区
  • /:10G,主分区
  • /boot:128M,主分区
  • /home:剩余,主分区
  1. 安装成功
  • swap:4096M,逻辑分区
  • /:剩余,主分区
  1. 未知
  • swap:4096M,逻辑分区
  • /boot:200M,主分区
  • /:10G,主分区
  • /home:剩余,逻辑分区
  1. 未知
  • /:全部,主分区

安装软件

基本

  • sublime
  • chromium:注意数据备份.config/chromium
    • tamper monkey
    • Adblock Plus
    • SwitchyOmega
    • crxMouse Top Gestures
  • dukto:3系统互传软件
  • hyper:配置文件~/.hyper.js
  • vscode
  • gnome-tweak:如果还在用gnome
    • dash to panel
    • topicons plus
    • user themes
  • 搜狗输入法:CSDN
    • 官网下载deb
    • sudo apt install -f && sudo dpkg -i sougou.deb
    • 设置->区域和语言->键盘输入法系统
  • gparted:磁盘分区

非基本

  • Indicator Stickynotes
  • QQ(见wine)
  • wps

deepin wine软件

  • QQ
  • TIM
  • QQ轻聊版
  • 微信
  • Foxmail
  • 百度网盘
  • 360压缩
  • WinRAR
  • 迅雷极速版

详细,github

软件的文件存放位置

  • QQ:

/home/lynx/.deepinwine/Deepin-QQ/dosdevices/c:/users/lynx/My Documents/Tencent Files/$account/FileRecv

系统设置

笔记本行为设定

  • 合盖不休眠:/etc/systemd/logind.conf
HandleLidSwitch=ignore

CSDN

密钥环

密码和密钥$\to$默认密钥环$\overset{\mbox{右键}}{\to}$更改密码$\to$空白

grub配置

  • 位置

/etc/default/grub

  • 内容修改
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
  • 生效设置
sudo grub-set-default 2
sudo update-grub

数字任意

时间配置

sudo apt-get install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc

gnome-shell-entensions

chrome扩展

sudo apt-get install chrome-gnome-shell

chrome浏览器插件

重启gnome-shell

alt+f2$\to$r

extension位置

  • ~/.local/share/gnome-shell/extensions
  • /usr/share/gnome-shell/extensions

解决显示应用程序2个dock

cd /usr/share/gnome-shell/extensions
sudo rm -rf ubuntu-dock@ubuntu.com

解决桌面图标在重启后乱序

安装一个新的桌面图标扩展,关闭gnome-tweaks的桌面图标显示

外观修改

修改登录背景图片

/etc/alternatives/gdm3.css:

#lockDialogGroup {
background: url(file:///usr/share/backgrounds/Aatrox.jpg);
background-position: center;
background-size: cover; }

默认开机动画

sudo update-alternatives --config default.plymouth

修改开机动画

ubuntugeek
更多

  1. 创建新文件夹
sudo mkdir /usr/share/plymouth/themes/myTheme
  1. vi myTheme/myTheme.plymouth
[Plymouth Theme]
Name=MyTheme
Description=随你
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/myTheme
ScriptFile=/usr/share/plymouth/themes/myTheme.script
  1. 复制png(必须)图片到myTheme

  2. vi myTheme/myTheme.script

wallpaper_image = Image("Aatrox_1080.png");
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
resized_wallpaper_img = wallpaper_image.Scale(screen_width, screen_height);
wallpaper_sprite = Sprite(resized_wallpaper_img);
wallpaper_sprite.SetZ(-100);
  1. 安装主题
sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/myTheme/myTheme.plymouth 100
sudo update-alternatives --config default.plymouth
sudo update-initramfs -u

修改grub主题

  1. /boot/grub/themes文件夹创建
  2. 配置文件/etc/grub.d/00_header:
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.

GRUB_THEME="/boot/grub/themes/Vimix/theme.txt"
GRUB_GFXMODE="1920x1080x32"

可按照尺寸修改背景图片

  1. 更新配置
sudo update-grub
ubuntu配置sublime

安装

Install the GPG key:

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -

Ensure apt is set up to work with https sources:

sudo apt-get install apt-transport-https

Select the channel to use:

  • Stable
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
  • Dev
echo "deb https://download.sublimetext.com/ apt/dev/" | sudo tee /etc/apt/sources.list.d/sublime-text.list

Update apt sources and install Sublime Text

sudo apt-get update
sudo apt-get install sublime-text

sublime-merge

在之前的基础上

sudo apt-get install sublime-merge

不能输入中文

在终端输入subl后能输入中文

简书

固定到收藏夹

参考:CSDN

创建sublime.sh:

#!/bin/bash
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so subl

创建my_sublime.desktop:

[Desktop Entry]
Name = my_sublime
Icon = 还没有
Type = Application
Exec = path_to/sublime.sh

修改my_sublime.desktop的权限,然后

sudo cp my_sublime.desktop /usr/share/applications/

my_sublime添加到收藏夹

latex

  1. 安装texlive

  2. 安装latex-tools

  3. Preference$\to$Packages Settings$\to$LaTeXTools

"linux" : {
// Path used when invoking tex & friends; MUST include $PATH
"texpath" : "$PATH:/usr/local/texlive/2018/bin/x86_64-linux",
}
  1. 如果编译错误,在latex语法下按ctrl+shift+b选择用xelatex编译
Qt笔记

QMainWindow

  • 完全透明:this->setWindowOpacity(0)

QWebEngineView

  • 监听非特殊鼠标事件
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
}}
}

关于调试

  • qDebug() << __FUNCTION__

软件打包

使用debreate

Debreate Usage

参考

手动dpkg

思否

gnome笔记

调试

使用log

  • 在终端接收log:
journalctl /usr/bin/gnome-shell -f
  • js中使用log(message)打印log

卡死(没用,TODO)

  1. ctrl+alt+f3切换终端
  2. DISPLAY=:0 gnome-shell

函数

关于箭头运算符=>

TODO

  • set_position(int, int):TODO(数据类型)
  • set_chlild(?)
  • connect(String e, function f):监听事件e,之后执行f
  • insert_child_at_index(?, int):TODO
  • remove_child()

const St = imports.gi.St

  • St.Bin({}):按钮
    • style_class
    • reactive
    • can_focus
    • x_fill
    • y_fill
    • track_hover
  • St.Icon({}):图标
    • icon_name
    • style_class
  • St.Label({}):TODO
    • style_class
    • text

const Main = imports.ui.main

  • Main.uiGroup.add_actor():TODO
  • Main.uiGroup.remove_actor():TODO
  • Main.layoutManager.primaryMonitor:TODO

Tweener = imports.ui.tweener

  • Tweener.addTween(?, {}):TODO
    • opacity
    • time
    • transition
    • onComplete:回调函数

元素

  • pannel:状态栏
    • _rightBox
    • _leftBox
ubuntu空间扩展

参考

CSDN

查看

  • 文件系统使用情况
df -T -h # 查看文件系统类型
  • 查看分区
sudo fdisk -l

不会显示未分配的空间

扩展

  • 创建新的分区
sudo fdisk /dev/sda
命令(输入 m 获取帮助): n
分区号 (11-128, 默认 11):
第一个扇区 (92237824-500118158, 默认 213557248):
上个扇区,+sectors 或 +size{K,M,G,T,P} (213557248-315959295, 默认 315959295):
命令(输入 m 获取帮助): w
# 分区表已调整
# 正在同步磁盘
  • 挂载新的分区
sudo mkfs -t ext4 /dev/sda11 # -t:指定格式化何种文件系统
sudo e2label /dev/sda11 ubuntu_mount # 重命名
sudo mount /dev/sda11 fuck_mount
powerline配置

本文中的powerline指的是

sudo apt-get install python3-pip
{
"colors":
{
"0": 0,
"1": 1,
"2": 2,
"3": 3,
"4": 4,
"5": 5,
"6": 6,
"7": 7,
"8": 8,
"9": 9
}
}
  • vim显示信息:.config/powerline/themes/vim/default.json
{
"segments": {
"left": [
{
"function": "powerline.segments.vim.plugin.capslock.capslock_indicator",
"include_modes": ["i", "R", "Rv"],
"priority": 10
},
{
"function": "branch",
"exclude_modes": ["nc"],
"priority": 30
},
{
"function": "readonly_indicator",
"draw_soft_divider": false,
"after": " "
},
{
"function": "file_scheme",
"priority": 20
},
{
"function": "powerline.segments.shell.cwd",
"priority": 60
}
]
}
}
  • vim颜色设定:.config/powerline/colorshemes/vim/default.json

    • ic,ix:补全模式
  • 符号设定:.config/powerline/themes/powerline.json

ssh笔记

Linux

准备

sudo apt-get install openssh-server
sudo apt-get install net-tools
sudo ifconfig

配置文件:/etc/ssh/sshd_config

检查

netstat -tlp
ps -e|grep ssh

mac

设置$\to$共享$\to$远程登录

termux

pkg install openssh
sshd
sshd -p 22222
whoami
passwd

windows

  • 安装freeSSHd
  • Users$\to$Add,设置密码
  • 开启Shell
  • powershell:ipconfig

windows真他妈没卵用

shell脚本笔记

传参

zsh ./fuck.sh $1 $2 $3 ...

赋值

  • 不要加空格

if

示例:

if [ "${message}"x = x ]
then
echo "equal"
elif [ "${message}"x = "shitx" ] || [ "${message}"x = "SHIT" ]
then
echo "shit"
else
echo "fuck"
fi
  • 注意[``]的空格和关系运算符的空格
  • 注意字符串比较时为空的情况
  • 更多

for



while

一个修改缩进的脚本

line_num=$(wc -l $1)
echo ${line_num}
i=0
while [ ${line_num:${i}:1} != " " ]
do
((i++))# 寻找空格
done
line_num=${line_num:0:${i}}
echo ${line_num}
version=$(uname)
if [ "${version}" = "Linux" ]
then
sed -i 's/\t/ /g' $1
sed -i 's/ / /g' $1
elif [ "${version}" = "Darwin" ]
then
sed -i '' 's/<C-v><tab>/ /g' $1 #这个地方指按下ctrl+v,然后再按一下tab,输出tab字符
sed -i '' 's/ / /g' $1
fi

字符串处理

cnblogs

sed

mac(FreeBSD)

示例

sed -i '' -e '4a\
'${message} ${filename}

sed -i '' -e '4a\
shit' ${filename}

linux

sed -i '4a\shit' ${filename}

sed -i '4a\'${message} ${filename}

参数

计算字符长度

${#string}

sleep

read

数组

sh=()
sh+=(1)
sh+=(2)
for i in $sh
do
echo $i
done
termux从0开始配置

在home生成storage

termux-setup-storage

软链接

ln -s /data/data/com.termux/files/home/storage/shared/... 名字

某版本zsh

sh - O "$(curl -fsSL https://github.com/Cabbagec/termux-ohmyzsh/raw/master/install.sh)"

颜色及字体重新配置

$HOME/.termux/colors.sh
$HOME/.termux/fonts.sh
  • 一键配置
git clone https://github.com/NiaBie/termux.git
mv termux termux

oh-my-tmux

cd ~
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf .tmux.conf
cp .tmux/.tmux.conf.local .

修改源

export EDITOR=vi
apt edit-sources

http://mirrors.tuna.tsinghua.edu.cn/termux

Linux命令笔记

当前目录,只保留file

  • xargs
find /当前目录 -type f ! -name "file"|xargs rm -f
  • find自带命令
find /当前目录 -type f ! -name "file" -exec rm -f {} \

递归删除

.java

find ./ -name "*.java" | xargs rm -rfv

批量修改文件名

rename 's/原内容/改后内容/' *

打包

tar czvf FileName.tar DirName
  • 计算目录大小
du -h --max-depth=1 .
  • 合并文件夹
cp -frp new/* old/

-f强制覆盖,-r递归,-p保持新文件的属性不变

dpkg

  • 查找已装软件?
dpkg -l|grep filename
  • 卸载软件
dpkg -r filename

或?

dpkg -P filename
  • 彻底删除标识为rc的配置信息

rc:软件已卸载,配置文件还在

dpkg -l | grep ^rc | cut -d' ' -f3 | sudo xargs dpkg --purge

目录分析(du)

示例

du -d1 -b -a .
du -d0 -m .

cat

  • 输出固定行数
cat $file | head -n +6
```

[详细](https://blog.csdn.net/NFR413/article/details/78966085)

## curl

- 下载`$file`

```bash
curl -O $pathtofile
  • 命令行中输出表达式的值
echo $[1 == 2]

Linux的算术运算

进程

  • 切换到后台
<ctrl+z>
  • 查看后台进程
jobs
  • 使第N个进程在前台/后台运行
fg %N
bg %N

不加N默认对最后一个进程操作

ctags

  • vim设定源

固定

set tags=$path

先当前目录,后向上找

set tags=tags;
set autochdir

ln链接

  • 文件夹软链接
ln -s $exists $new

wc统计行数

find -maxdepth 10 -type f | xargs wc -l
wc -l `find -name '*.*'`

更改用户/权限

sudo chmod -R 777 *
sudo chown -R user * # sudo chown -R user:usergroup *
npm笔记

创建到发布

npm init # 创建package.json
npm login
...
npm publish

安装

参考:思否

  • 安装单个包
sudo npm i $package
sudo npm i $package --save # 记录在package.json的dependencies下
sudo npm i $package --save-dev #记录在devSependencies下
  • 按照package.json来安装
sudo npm install
  • node_modules下的包记录到package.json中(待改进),stackoverflow
npm install $(ls node_modules/) --save

关于@开头的包说明

  • 查看已安装的npm包
sudo npm list -g --depth=0

常见问题

no_perms Private mode enable, only admin can publish this module:简书,cnblogs

npm脚本

node_module使用

npm模块管理器

npm-run-all

# 继发执行
$ npm-run-all build:html build:js
# 等同于
$ npm run build:html && npm run build:js

npm使用unpkg(官网翻译)

unpkg 是什么

unpkg 是一个内容源自 npm 的全球快速 CDN.

注:它部署在cloudflare上,在大陆地区访问到的是香港节点.它支持h/2和很多新特性,如果不考虑网络延迟的原因,性能优化较为出色.在国内一些互联网公司也有镜像,例如知乎和饿了么

它能以快速而简单的方式提供任意包、任意文件,通过类似这样的URL:unpkg.com/:package@:version/:file

怎样使用unpkg

使用固定的版本号:

unpkg.com/react @16.0.0/umd/react.production.min.js

unpkg.com/react-dom @16.0.0/umd/react-dom.production.min.js

也可使用语义化版本范围,或标签来代替固定版本号,亦可忽略版本和标签,直接使用最新的版本

unpkg.com/react@^16/umd/react.production.min.js

unpkg.com/react/umd/react.production.min.js

如果忽略了文件的路径(例如,使用裸网址”bare”URL),unpkg会提供package.json里指定的文件,或降级到main

unpkg.com/d3

unpkg.com/jquery

unpkg.com/three

注:这种方式会产生一次302到最新的文件URL.好处是自动使用最新版,坏处是多一次性跳转,降低了性能

在网址最后添加斜线,可以查看一个包内的所有文件列表.

unpkg.com/react/

unpkg.com/lodash/

查询参数

?meta

JSON格式返回包的元数据(metadata)(例如: /any/file?meta)

?module

展开javascript模块里所有”bare”import为unpkg网址.此功能为初步实验性质的

具体的实现和更多介绍可参考此仓库:babel-plugin-unpkg

UNPKG上的发布流程

如果你是npm包作者,只要发布到npm仓库,unpkg替你减轻了发布到CDN的麻烦.仅需npm包中包含UMD构建即可(并非在代码仓库里包含,两者不同!)

简单来讲,通过以下步骤:

  • 添加umd(或dist)目录到.gitignore文件中
  • 添加umd目录到package.json文件数组(files)中
  • 发布的时候,使用脚本构建UMD打包文件到umd目录

就是这样了,当npm发布时,在unpkg上也会拥有一个有效的文件版本

一旦发布到npm后即可被访问到,如果按以上说明操作,将具有更好的效果.建议参考Vue的package.json帮助理解

php笔记

关于phpstorm安装

sudo apt install php7.2-cgi

phpstorm注册网站

本地php命令

本地php服务

php -S localhost:6060 -t .

Address already in use

  • 一键杀
    • killall php

html加载php

注意:

  • 分号
  • 文件加载先后

输出到console

<?
function console_log($src)
{
if (is_array($src) || is_object($src))
{
echo("console.log(" . json_encode($src) . ");");
}
else
{
echo("console.log(" . $src . ");");
}
}
console_log("fuck");

js调用php变量

<?php
function tranlate_js($src, $dest)
{
if (is_array($dest) || is_object($dest))
{
console_log("...");
return;
}
if (is_array($src) || is_object($src))
{
echo("var " . $dest . "=" . json_encode($src) . ";");
}
else
{
echo("var " . $dest . "=" . $src . ";");
}
}
$arr = array("you", 2, 3);
tranlate_js($arr, "shit"); // var shit = $array
console.log(shit);

php调用js方法

function my_log(a)
{
console.log(a);
}
$str = "'you'";
echo "my_log(" . $str . ");";
c笔记

随机数

#include<cstdlib>
#include<ctime>
int main()
{
srand((unsigned)time(NULL));
rand()%x; // 取得(0,x)的随机整数:
rand()%(b - a); // 取得(a,b)的随机整数:
rand()%(b - a) + a; // 取得[a,b)的随机整数:
rand()%(b - a + 1) + a; // 取得[a,b]的随机整数:
rand()%(b - a) + a + 1; // 取得(a,b]的随机整数:
rand()/double(RAND_MAX); // 取得0-1之间的浮点数:
return 0;
}

struct

strcut的声明

// 1
struct $struct_name
{
...;
};
struct $struct_name $variable_name;

// 2
typedef struct $struct_name
{
...;
}$struct_alias;
struct $struct_name $variable_name;
$struct_alias $variable_name;

// 3
struct $struct_name
{
...;
}$variable_name;
struct $struct_name $variable_name;

// 4
struct
{
...;
}$variable_name;

struct的创建和初始化

#define new(type, ...) ({\
type* __t = (type*) malloc(sizeof(type));\
*__t = (type){__VA_ARGS__};\
__t; })

正则表达式

#include <sys/types.h>
#include <stdio.h>
#include <regex.h>

int main()
{
int status, i;
int cflags = REG_EXTENDED;

regmatch_t time_match[1];
const size_t nmatch = 1;
regex_t reg;
const char *pattern = "s";
char *buf = "sdsdfdfdffdfdfdf";

regcomp(&reg, pattern, cflags);
status = regexec(&reg, buf, nmatch, time_match, 0);
if (status == REG_NOMATCH)
Log("No match");
else if (status == 0)
{
Log("Match:");
for (i = time_match[0].rm_so; i < time_match[0].rm_eo; i ++)
{
putchar(buf[i]);
}
putchar('\n');
}
regfree(&reg);
return 0;
}

画图

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>


void draw_rect(int color_num, int x, int y, int w, int h);
void init_screen();
void move_cursor(int direct_num, int dis);

enum colors{BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
enum direct{UP, DOWN, RIGHT, LEFT};
const int height = 30;

int
main()
{
int i = 0, j = 0;
char position[32];
system("tput clear");
init_screen();
draw_rect(RED, 7, 0, 5, 5);
draw_rect(GREEN, 17, 0, 5, 10);
draw_rect(CYAN, 0, 11, 20, 6);
while (1);
return 0;
}

void draw_rect(int color_num, int x, int y, int w, int h)
{
char offset[16];
move_cursor(RIGHT, x);
move_cursor(DOWN, y);
for (int i = 0; i < h; i ++)
{
for (int j = 0; j < w; j ++)
switch (color_num)
{
case BLACK:
printf("\033[40m \33[0m");
break;
case RED:
printf("\033[41m \33[0m");
break;
case GREEN:
printf("\033[42m \33[0m");
break;
case YELLOW:
printf("\033[43m \33[0m");
break;
case BLUE:
printf("\033[44m \33[0m");
break;
case MAGENTA:
printf("\033[45m \33[0m");
break;
case CYAN:
printf("\033[46m \33[0m");
break;
case WHITE:
printf("\033[47m \33[0m");
break;
}
printf("\n");
move_cursor(RIGHT, x);
}
move_cursor(LEFT, x + w);
move_cursor(UP, y + h);
}

void move_cursor(int direct_num, int dis)
{
for (int i = 0; i < dis; i ++)
switch (direct_num)
{
case UP:
printf("\033[A");
break;
case DOWN:
printf("\033[B");
break;
case RIGHT:
printf("\033[C");
break;
case LEFT:
printf("\033[D");
break;
}
}

void init_screen()
{
for (int i = 0; i < height; i ++)
printf("\n");
move_cursor(UP, height);
}

信号处理

mmap

void my_mmap(const char *filename)
{
struct stat sb;// statebuf
int my_fd = 0;
char *my_addr = NULL;// mmap地址

my_fd = open(filename, O_RDONLY);// 只读
if (my_fd == -1) {
handle_error("open");
}

if (fstat(my_fd, &sb) == -1) {
handle_error("fstat");
}

my_addr = mmap(
NULL, sb.st_size,// size
PROT_READ,
MAP_PRIVATE,// MAP_SHARED
my_fd,
0// offset
);
}

pthread

#include <assert.h>
#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <ctype.h>

#define GREEN(format, ...) \
printf("\033[1;32m" format "\33[0m\n", ## __VA_ARGS__)
#define YELLOW(format, ...) \
printf("\033[1;33m" format "\33[0m\n", ## __VA_ARGS__)
#define RED(format, ...) \
printf("\033[1;31m[%s, %d]" format "\33[0m\n", __func__, __LINE__, ## __VA_ARGS__)
#define MAGENTA(format, ...) \
printf("\033[1;35m[%s]" format "\33[0m\n", __func__, ## __VA_ARGS__)


struct thread_info {// thread_start的参数
pthread_t thread_id;// 存放pthread_create的返回值(id)
int thread_num;// 自己定义的线程号
char *argv_string;// 命令行的字符串
};

void *thread_start(void *arg);
// display address near top of our stack, and return upper-cased copy of argv_string

int main(int argc, char *argv[])
{
int num_threads;// 线程数
struct thread_info *tinfo;
pthread_attr_t attr;// 线程属性
void *res;

num_threads = argc - optind;// 线程数

if (pthread_attr_init(&attr) != 0) {// 初始化线程属性
RED("pthread_attr_init");
assert(0);
}

tinfo = calloc(num_threads, sizeof(struct thread_info));// 申请线程空间
if (tinfo == NULL) {
RED("calloc");
assert(0);
}

for (int i = 0; i < num_threads; i ++) {
tinfo[i].thread_num = i;
tinfo[i].argv_string = argv[optind + i];

if (pthread_create(&tinfo[i].thread_id, &attr,
&thread_start, &tinfo[i]) != 0) {// 创建线程
RED("pthread_create");
assert(0);
}
}

if (pthread_attr_destroy(&attr) != 0) {// 删除线程属性
RED("pthread_attr_destroy");
assert(0);
}

for (int i = 0; i < num_threads; i++) {
if (pthread_join(tinfo[i].thread_id, &res) != 0) {// 合并线程
RED("pthread_join");
assert(0);
}

GREEN("Joined with thread %d; returned value was %s",
tinfo[i].thread_num, (char *) res);

free(res);// 释放结构体中字符串的空间
}

free(tinfo);// 释放线程空间
exit(EXIT_SUCCESS);
}

void *thread_start(void *arg)
{
struct thread_info *tinfo = arg;// &tinfo[num]
char *uargv, *p;

YELLOW("Thread %d: top of stack near %p; argv_string=%s",
tinfo->thread_num, &p, tinfo->argv_string);

uargv = strdup(tinfo->argv_string);// 复制字符串(申请内存)
if (uargv == NULL) {
RED("strdup");
assert(0);
}

for (p = uargv; *p != '\0'; p++) {// 修改uargv
*p = toupper(*p);
}

return uargv;
}

简易http服务器

#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>

struct sockaddr_in servaddr;
char buf[4096];
const char *msg =
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: 48\n"
"\n"
"<html><body><h1>Hello, World!</h1></body></html>\n";

int main() {
int res, fd = socket(AF_INET, SOCK_STREAM, 0);
assert(fd != -1);
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8898);

res = bind(fd, (struct sockaddr*)&servaddr, sizeof(servaddr));
if (res == -1) { perror("cannot bind"); exit(-1); }

listen(fd, 10);
while (1) {
int conn = accept(fd, NULL, NULL);
if (conn != -1) {
int nread = recv(conn, buf, sizeof(buf), 0);
send(conn, msg, strlen(msg), 0);
close(conn);
}
}
close(fd);

return 0;
}

1 / 5