mysql 8.0修改密码

环境:

1.修改配置文件:进入/etc/mysql/mysql.conf.d/ ,在配置文件mysqld.cnf下添加 skip-grant-tables

2.在终端输入命令:sudo service mysql restart来重新启动mysql服务

3.输入:mysql -u root -p,回车进入mysql(此时不需要密码即可直接进入)

4.输入:use mysql;

5.输入:update user set authentication_string=‘’ where user=‘root’;,将authentication_string 置空;

6.输入:alter user ‘root’@‘localhost’ identified by ‘newpassword’;,newpassword为要修改的新密码;

此时提示错误:ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement

输入:FLUSH PRIVILEGES;

再重新alter user ‘root’@‘localhost’ identified by ‘newpassword’;

此时错误提示为:ERROR 1524 (HY000): Plugin ‘auth_socket’ is not loaded

输入select user,plugin from mysql.user;来查看plugin

这里输入update user set plugin=‘mysql_native_password’ where user=‘root’;将plugin改为以前版本的密码认证方式

然后输入:FLUSH PRIVILEGES;

再重试alter user ‘root’@‘localhost’ identified by ‘newpassword’;即可修改密码

7.修改完成后输入FLUSH PRIVILEGES;

将第一步的skip-grant-tables注释掉;
9.输入service mysql restart重启mysql

ubuntu 22使用InStock

环境:ubuntu22

g\

apt-get install -y wget 
apt-get install -y vim 
apt-get install -y make
apt-get install -y openssl
apt-get install -y iw
apt-get install -y usbutils
apt-get install -y v4l-utils
apt-get install -y ntfs-3g
apt-get install -y zip
apt-get install -y unzip
apt-get install -y cpio
apt-get install -y pkg-config
apt-get install -y automake
apt-get install -y gcc 
apt-get install -y gimp
apt-get install -y swig 
apt-get install -y libtool
apt-get install -y nasm 
apt-get install -y autoconf 
apt-get install -y automake 
apt-get install -y git 
apt-get install -y mercurial 
apt-get install -y libcurl4
apt-get install -y cmake
apt-get install -y yasm
apt-get install -y chkconfig

安装PIP3

sudo apt-get install -y python3-pip

安装talib

mkdir -p /var/www/setup/talib
cd /var/www/setup/talib
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xvf ta-lib-0.4.0-src.tar.gz
cd /ta-lib
./configure --prefix=/usr/local/ta-lib
make
sudo make install

安装pip里的插件

pip3 install --upgrade SQLAlchemy
pip3 install --upgrade bokeh
pip3 install --upgrade tornado
pip3 install --upgrade akshare
pip3 install --upgrade TA_Lib
pip3 install --upgrade pandas
pip3 install --upgrade APScheduler
pip3 install --upgrade numpy
pip3 install --upgrade pytz
pip3 install --upgrade pymysql
pip3 install --upgrade pipreqs

安装mysql数据库

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

修改数据库密码

1.修改配置文件:进入/etc/mysql/mysql.conf.d/ ,
在配置文件mysqld.cnf下添加 skip-grant-tables
2.在终端输入命令:sudo service mysql restart来重新启动mysql服务
3.输入:mysql -u root -p,回车进入mysql(此时不需要密码即可直接进入)

use mysql;
update user set authentication_string='' where user='root';,
alter user 'root'@'localhost' identified by '123456';
FLUSH PRIVILEGES;
alter user 'root'@'localhost' identified by '123456';
select user,plugin from mysql.user;
update user set plugin='mysql_native_password' where user='root';
FLUSH PRIVILEGES;
alter user 'root'@'localhost' identified by '123456';
FLUSH PRIVILEGES;

5.将第一步的skip-grant-tables注释掉;
6.输入service mysql restart重启mysql

安装git

sudo apt-get install git

sudo apt-get install -y git
mkdir -p /var/www/develop/InStock
cd /var/www/develop/InStock
git clone https://github.com/myhhub/InStock.git

修改目录 下 \instock\lib\database.py 数据库连接这符文件

db_host = "localhost"  # 数据库服务主机
db_user = "root"  # 数据库访问用户
db_password = "root"  # 数据库访问密码
db_database = "instockdb"  # 数据库名称
db_port = 3306  # 数据库服务端口
db_charset = "utf8mb4"  # 数据库字符集

初始货数据库,生成instock数据库与对应的表

python3 /var/www/develop/InStock/instock/job/init_job.py

获取上一交易日的数据

python3 /var/www/develop/InStock/instock/job/execute_daily_job.py

启动web服务器

python3 /var/www/develop/InStock/instock/web/main.py

浏览器输入 http://localhost:9999

查看 某一股票的数据

vmware 出现错误,重新注册DLL

regsvr32.exe adjperm.dll
regsvr32.exe basichttp.dll
regsvr32.exe DIFXAPI.dll
regsvr32.exe diskLibWrapper.dll
regsvr32.exe elevated.dll
regsvr32.exe expat.dll
regsvr32.exe glib-2.0.dll
regsvr32.exe glibmm-2.4.dll
regsvr32.exe gmodule-2.0.dll
regsvr32.exe gobject-2.0.dll
regsvr32.exe gthread-2.0.dll
regsvr32.exe gvmomi.dll
regsvr32.exe iconv.dll
regsvr32.exe intl.dll
regsvr32.exe libcds.dll
regsvr32.exe libcurl.dll
regsvr32.exe libeay32.dll
regsvr32.exe libxml2.dll
regsvr32.exe nfc-types.dll
regsvr32.exe pcre.dll
regsvr32.exe sigc-2.0.dll
regsvr32.exe ssleay32.dll
regsvr32.exe ssoclient.dll
regsvr32.exe sysimgbase.dll
regsvr32.exe TPClnRDP.dll
regsvr32.exe TPClnt.dll
regsvr32.exe TPClntdeu.dll
regsvr32.exe TPClntjpn.dll
regsvr32.exe TPClntloc.dll
regsvr32.exe TPClnVM.dll
regsvr32.exe tppcoipw32.dll
regsvr32.exe tprdpw32.dll
regsvr32.exe vim-types.dll
regsvr32.exe vix.dll
regsvr32.exe vixDiskMountApi.dll
regsvr32.exe vmacore.dll
regsvr32.exe vmappcfg.dll
regsvr32.exe vmappsdk.dll
regsvr32.exe vmapputil.dll
regsvr32.exe vmauthd.dll
regsvr32.exe vmclientcore.dll
regsvr32.exe vmdbCOM.dll
regsvr32.exe vmdkShellExt.dll
regsvr32.exe vmeventmsg.dll
regsvr32.exe vmnetBridge.dll
regsvr32.exe vmomi.dll
regsvr32.exe vmPerfmon.dll
regsvr32.exe vmware-tray-helper.dll
regsvr32.exe vmwarebase.dll
regsvr32.exe vmwarecui.dll
regsvr32.exe vmwarestring.dll
regsvr32.exe vmwarewui.dll
regsvr32.exe vnetinst.dll
regsvr32.exe vnetlib.dll
regsvr32.exe vnetlib64.dll
regsvr32.exe zlib1.dll

【解决】sys.stderr.write(f“ERROR: {exc}”)

环境:notebook +ubuntu +python3.5

在安装了pip之后发现出现如下错误:

解决办法:

方法一:重新安装pip, 这里有时可以http 换成 https

wget http://bootstrap.pypa.io/pip/3.5/get-pip.py
python3 get-pip.py

安装的时候它提示python3.5在2020年9月13号停止维护,pip 21.0在2021年一月将停止对python 3.5的支持。

下面就是自动卸载老版的pip 8.1.1然后成功的安装了pip 20.3.4。再次pip list的时候,已经没有错误

wget下载地址可能会发生变化,当发生变化的时候,执行上述命令下方会自动提示这个地址已经失效,会给出最新有效地址,将下载地址替换即可。

方法二:直接更改pip文件如下(不推荐)

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

在C++中,

char* p = "abc";  // valid in C, invalid in C++

会跳出警告:warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

改成下面会通过warning

char* p = (char*)"abc";  // OK

或者改成下面

char const *p = "abc";  // OK

原因解析:

学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。

在上面的表达式中等号右边的”abc”是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。

像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。

C ++函数指针在类写法对比

情况一、函数指针不使用类的写法
–文件main.cpp

#include <iostream>
#include <string>

typedef void(*function)();
function assignPtr;
std::string name;
    
void Test();
void morning();
void say(std::string a);

void Test() {assignPtr = morning;}
void morning() {std::cout <<"Good morning," << name << std::endl;}
void say(std::string a) {name = a; assignPtr();};


int main() {
    Test();
    say("Miguel");
}

运行结果:

情况二、函数指针使用类的写法

#include <iostream>
#include <string>

class Test {
  public:
    
    Test() {assignPtr = &Test::morning;}
    void say(std::string a) {name = a; (this->*assignPtr)();};
  private:
    typedef void(Test::*function)();
    void morning() {std::cout <<"Good morning," << name << std::endl;}

    function assignPtr;
    std::string name;
};

int main() {
    Test a;
    a.say("Miguel");
}

运行结果:

主要区别在于

在类中需要正确的使用类型

typedef void(Test::*function)();
然后在创建指针和调用指针时都调整语法。
Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();};  // Use pointer-to-member

C ++函数指针分配无法转换类内的类型

c++classfunctionpointers

C++ Function Pointer assignment cannot convert types inside a class

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的类,该类具有指向函数的指针。 构造函数将其指向函数” morning()”,并且在编译时收到错误消息:

1
2
error: cannot convert ‘Test::morning’ from type ‘void (Test::)()’ to type ‘Test::function {aka void (*)()}’
     Test() {assignPtr = morning;}

当在函数外部声明” morning()”和typedef时,代码会编译,而我无法弄清楚如何使其在当前类中工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>class Test {
 public:
    Test() {assignPtr = morning;}
 void say(std::string a) {name = a; assignPtr();};
 private:
 typedef void(*function)();
 void morning() {std::cout <<“Good morning,” << name << std::endl;}
 void night() {};
    function assignPtr;
    std::string name;
};int main() {
    Test a;
    a.say(“Miguel”);
}

指向成员函数的指针不是常规函数指针。 该类是该类型的一部分,您需要指定要使用哪个对象进行调用。

您需要使用正确的类型

1typedef void(Test::*function)();

然后在创建指针和调用指针时都调整语法。

1
2
Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();}; // Use pointer-to-member

函数指针和成员函数指针不是一回事。 那就是编译器告诉您的内容。 类型不匹配。 您的目标定义为void(*)(),而您正尝试将其交付给void(Test::*)()。 它们甚至没有相同的调用语义。 后者具有Test*const this盲参数。

更改function的类型或为其提供常规函数以进行调用。

提示:任何时候您的编译器因无法将其转换为该错误而抱怨…您的类型不匹配。

树莓派3重新安装raspyberry lite

(更新时间 :2023-3-30)

(一、Ubuntu安装篇)
1.先下载一个系统

下载

https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-09-26/2022-09-22-raspios-bullseye-armhf-lite.img.xz

个是不带在桌面的。

2.无需要解压文件,大小约313,917KB

3.用树莓派自带的 image把文件写入TF卡

  1. 就可以启动了。

5.选择ENGLISH语言

6.连接wifi

(二、修改网络)

  1. vi /etc/dhcpcd.conf
interface eht0
static ip_address=10.8.0.88/24
static routers=10.8.0.1
static domain_name_servers=202.96.128.86

sudo reboot

(三\安装小软件)

安装 vim, gcc, wget

apt-get install -y wget vim gcc

apt-get install -y make

apt-get install -y openssl
apt-get install -y iw
apt-get install -y usbutils
apt-get install -y v4l-utils
apt-get install -y ntfs-3g
apt-get install -y zip
apt-get install -y unzip
apt-get install -y cpio
apt-get install -y pkg-config
apt-get install -y automake
apt-get install -y gcc 

apt-get install -y gimp

apt-get install -y swig 

apt-get install -y libtool
apt-get install -y nasm 

apt-get install -y autoconf 

apt-get install -y automake 

apt-get install -y git 


apt-get install -y mercurial 


apt-get install -y libcurl4

apt-get install -y cmake

apt-get install -y yasm


#firewall

apt-get install -y ufw
#

apt-get install -y chkconfig

用管理员来行

vi /etc/sudoers

在root ALL=(ALL:ALL) ALL 下面加一行
mee ALL=(ALL:ALL) ALL
pi ALL=(ALL:ALL) ALL

安装转码工具
apt-get install -y gpac

安装CURL

curl是一款著名的字符界面下的下载工具,支持HTTP、HTTPS、FTP、FTPS、DICT、TELNET、LDAP、FILE,和GOPHER。此外还具有cookies支持、断点续传、FTP上传、密码支持、SSL支持和代理支持等特性。curl同时还提供了一套libcurl的库,开发者可以基于这个库开发其他下载工具。
curl 的官网下载地址:http://curl.haxx.se/download/
截止2014.9月更新至7.38版本。
1.下载
wget http://curl.haxx.se/download/curl-7.38.0.tar.gz
2.解压
tar -xzvf curl-7.38.0.tar.gz
3.安装
cd curl-7.38.0
./configure
make
make install
4.完成
#修改/etc/profile
vi /etc/profile
PATH:=添加 /usr/local/curl/lib:/usr/local/curl/include:/usr/local/curl/include
source /etc/profile
#测试
echo $PATH

安装sqlite

解压命令:
tar zvxf sqlite-autoconf-3110000.tar.gz
配置
cd sqlite-autoconf-3110000
./configure --prefix=/usr/local/sqlite
编译
make        
安装
make install 

修改profile PATH变量

$PATH:=$PATH:/usr/local/sqlite/bin:/usr/local/sqlite/lib:/usr/local/sqlite/include
source /etc/profile
echo $PATH

c++ linux utf-8 编码 中文汉字分割(超简单代码)

UTF-8 编码对于英文字母,占用一个字节;
UTF-8 编码对于中文字母,占用多个字节,最大占用6个字节,其中第一个字节二进制的最高位连续1的个数来表示占用字节的个数,例如;
汉字“中”占3个字节

“中” : ‭11100100  10111000  10101101‬ // 最高位连续3个1
“国” : ‭11100101  10011011  10111101‬  // 最高位连续3个1

实现汉字的分割代码:

vector<string> list;
int strSize = str.size();
int i = 0;

while (i < strSize) {
    int len = 1;
    for (int j = 0; j < 6 && (str[i] & (0x80 >> j)); j++) {
        len = j+1;
    }
    list.push_back(str.substr(i, len));
    i += len;
}

C++ Unicode/UTF-8中文 相互转换

C++ Unicode/UTF-8中文 相互转换
需求一

中文 ”你好啊“ ———-unicode———-> \u4F60\u597D\u554A

unicode编码字符串转中文。
例: “4F60597D554A” —> “你好啊”
解决方式

需求二

unicode 字节数组转中文
例:0x89 0x7F 0x5B 0x89 0x8D 0xEF —> 西安路
解决方式

需求三 中英文转unicode

asd你好阿 —-> 0061007300644f60597d963f
解决方式

string 与 wstring 的转换


#include <codecvt>
#include <string>
std::wstring s2ws(const std::string& str{

  using convert_typeX = std::codecvt_utf8<wchar_t>;

  std::wstring_convert<convert_typeX, wchar_t> converterX;

  return converterX.from_bytes(str);

}

std::string ws2s(const std::wstring& wstr)

{

  using convert_typeX = std::codecvt_utf8<wchar_t>;

  std::wstring_convert<convert_typeX, wchar_t> converterX;

  return converterX.to_bytes(wstr);

}