15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

分类标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

分类归档 编程语言

【nodejs】如何在 Ubuntu 22.04 LTS 上安装 Node.js【nodejs】

Node.JS 是一个基于 Google V8 引擎构建的开源后端 Javascript 运行时环境。它允许开发人员利用 JavaScript 创建命令行工具和服务器端脚本,包括在将页面发送到用户浏览器之前在服务器上运行脚本。Node.js 适用于大多数现代操作系统,包括 Ubuntu Linux。

步骤 1. 首先,通过在终端中运行以下命令,确保所有系统包都是最新的。

sudo apt update
sudo apt upgrade
sudo apt install build-essential curl

步骤 2. 在 Ubuntu 22.04 上安装 Node.js。

1、从 NodeSource 存储库安装 Node.js。

默认情况下,Node.js 在 Ubuntu 22.04 基础存储库中不可用。现在运行以下命令将 NodeSource 存储库添加到您的 Ubuntu 系统:

wget -qO- https://deb.nodesource.com/setup_16.x | sudo -E bash

将 NodeSource 存储库添加到系统后,使用 Apt 包管理器安装 Node.js:

sudo apt install nodejs

2、使用 NVM 安装 Node.js。

现在使用 bash 脚本在你的 Ubuntu 系统上安装 NVM:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

接下来,关闭并重新打开终端或运行以下命令将 nvm 加载到当前会话:

source $HOME/.bashrc

使用 NVM,您可以检查当前可用的 Node.js 版本:

nvm install --lts
nvm install node

确认已安装最新的 LTS 版本,运行命令:

node -v

此外,您可以使用以下命令检查 NPM 的版本:

npm -v

【golang】go版本上级

一、删除旧版本

sudo rm -rf /usr/local/go
sudo apt-get remove golang
sudo apt-get remove golang-go
sudo apt-get autoremove

二、方法一

sudo add-apt-repository ppa:longsleep/golang-backports 
sudo apt-get install golang-go

如果要安装指定版本:
sudo apt-get install golang-1.11-go

如果add-apt-repository不存在,通过以下命令安装进行按照:

sudo apt-get install software-properties-commonsudo 
apt-get update

三、方法二

sudo snap install go --classic

【C语言】删除文件尾部N个字节

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc,char **argv) 
{ 
	char filename[128]="";
	
	strcpy(filename,argv[1]);
	printf("filename:%s\r\n",filename);
	
	FILE *fp = fopen(filename, "rb+"); 
	if (fp == NULL) 
	{
		printf("文件打开失败\n"); return -1; 
	} 
	int num_bytes = 10; // 要删除的字节数 
	fseek(fp, -num_bytes, SEEK_END); 
	ftruncate(fileno(fp), ftell(fp)); 
	fclose(fp); 
	return 0; 
}

【shell】脚本实现字符串操作

1、获取字符串长度

abc="huihuiuhiihu"
echo ${#abc}

利用#号实现字符串长度统计

2、截取字符串内容

${hui:5}

利用:加数字的形式截取固定长度字符串内容

3、实现固定长度字符串拼接

hui="sssdsdsdsjkdhskhdksd"
abc="12346"
kji=${abc}${hui:${#abc}}

echo $kji

【shell】sh脚本生成二进制文件

1、叙述

脚本的好处是便捷、高效,拿起来就可以写,写完就能跑,都不用编译。但坏处也显而易见,一些敏感的、不想让外人知道的东西都是明文写在里面的。

2、安装shc编译器

下载安装:
tar xzvf shc.tar.tgz 
cd shr/
make && make install 
直接安装:
sudo apt install shc

3、使用方法

shc -r -f ./demo.sh

运行成功后会在当前目录下生成两个文件:

demo.sh.x   是脚本所对应的可执行程序
demo.sh.c   对应的c语言实现的源码

4、参数列表:

 The command line options are:

 -e date
      Expiration date in dd/mm/yyyy format [none]

 -m message
      message to display  upon  expiration  ["Please  contact
      your provider"]

 -f script_name
      File name of the script to compile

 -i inline_option
      Inline option for the shell interpreter i.e: -e

 -x comand
      eXec    command,    as    a    printf    format    i.e:
      exec(\\'%s\\',@ARGV);

 -l last_option
      Last shell option i.e: --

 -r   Relax security. Make  a  redistributable  binary  which
      executes  on different systems running the same operat-
      ing system.

 -v   Verbose compilation

 -D   Switch on debug exec calls

 -T   Allow binary to be  traceable  (using  strace,  ptrace,
      truss, etc.)

 -C   Display license and exit

 -A   Display abstract and exit

 -h   Display help and exit

【golang】go语言环境安装配置

1、下载go语言版本包,感觉不同的平台架构选择

https://golang.org/dl/

2、解压并安装

可以解压到任意目录,但需要设置环境变量

vim /etc/profile

export GOPATH=/goWorkPlace
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

生效:

source /etc/profile

3、运行测试代码

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

终端输入命令:go run main.go

【JavaScript】16位有符合整数处理

1、理解JavaScript对数据的默认逻辑

JS 中所有的数字类型,实际存储都是通过 8 字节 double 浮点型 表示的。浮点数并不是能够精确表示范围内的所有数的, 虽然 double 浮点型的范围看上去很大: 2.23x10^(-308) ~ 1.79x10^308。 可以表示的最大整数可以很大,但能够精确表示,使用算数运算的并没有这么大。

2、16位有符号整数处理

由于JavaScript默认是按照32位数据处理,那么对于16位有符合数据处理,符号位在第32位,这么理解就对了。1代表负数,0代表整数。

举例:
var value=0xff88
console.log(0xff88 | 0xffff0000)

【GOLang】golang cgo交叉编译 linux arm64

一、交叉编译工具链安装

二、设置环境变量

CGO_ENABLED=1: 因为我们的程序使用到了Cgo,因此编译打开Cgo标志,默认情况是关闭的。
CC=aarch64-linux-gnu-gcc:指定CC也就是gcc编译命令使用交叉编译工具 aarch64-linux-gnu-gcc,也就是我们之前安装的交叉编译工具。
GOOS=linux:编译目标系统为Linux
GOARCH=arm64:编译目标的指令集架构为 64位 arm 架构
-ldflags ‘-s -w’:这个选项是为了移除编译后的程序的编译调试信息,减少可执行文件的体积。
–extldflags “-static -fpic”:静态编译,也就是会把使用到的动态库,静态链接到程序中,该指令存在时候可能会有warning提示,这是因为有些库文件是不能被静态链接的,gcc 编译器不支持 参考 [6]。

【python】crcmod.predefined实现CRC校验

一、CRC简介

在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的 [1] )。发送方计算机使用某公式计算出被传送数据所含信息的一个值,并将此值 附在被传送数据后,接收方计算机则对同一数据进行 相同的计算,应该得到相同的结果。如果这两个 CRC结果不一致,则说明发送中出现了差错,接收方计算机可要求发送方计算机重新发送该数据。在计算机网络通信中运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。由于 CRC 算法检验的检错能力极强,且检测成本较低,因此在对于编码器和电路的检测中使用较为广泛。从检错的正确率与速度、成本等方面,都比奇偶校验等校验方式具有优势。因而,CRC 成为计算机信息通信领域最为普遍的校验方式。

二、python实现方法

python通过调用crcmod.predefined模块完成各种CRC校验机制。

三、参考例程

def crcFunc(self,mode,InputData):
        print(InputData)
        crcF= crcmod.predefined.Crc(mode)
        crcF.update(bytes(InputData))
        print(hex(crcF.crcValue))
        return hex(crcF.crcValue)

【Python】Tkinter GUI Toplevel多窗口模态处理

一、Python tkinter多窗口实现

此实例涉及到Tkinter的Toplevel组件应用,通过toplevel可以实现多窗口,从字面意思理解为顶层窗口。

from tkinter import *
root = Tk()
def create():
#创建一个顶级弹窗
    top = Toplevel()
    top.title('我的弹窗')
   # top.attributes('-alpha',0.5)这个可以设置弹出窗口的透明度
    msg = Message(top,text = '类似于弹出窗口,具有独立的窗口属性。',width = 150)
    msg.pack()
Button(root,text = '创建一个顶级窗口',command = create).pack(padx = 20,pady = 50)
mainloop()

二、Python窗口的模态与非模态

大家都很清楚对于多窗口应用的场景中,对主窗口与子窗口之间的关系应用不同,大多数都是希望在处理子窗口的时候,不希望使用者同时可操作主窗口的逻辑,所以模态的概念由此产生,那对于上面的实例如何实现呢,看下面改进方案:

from tkinter import *
root = Tk()
def create():
#创建一个顶级弹窗
    top = Toplevel()
    top.title('我的弹窗')
    top.grab_set()#使当前页面活跃,模态实现
    top.focus_set()#使鼠标键盘聚焦在当前页面
   # top.attributes('-alpha',0.5)这个可以设置弹出窗口的透明度
    msg = Message(top,text = '类似于弹出窗口,具有独立的窗口属性。',width = 150)
    msg.pack()
Button(root,text = '创建一个顶级窗口',command = create).pack(padx = 20,pady = 50)
mainloop()