ubuntu22.04中在收藏夹添加图标

笔者在使用ubuntu的过程中,经常需要在使用过程中启动某些程序,例如chrome,pycharm等。虽然在桌面创建了快捷方式,但是每次启动都需要切换到桌面点击该图标,所以仍然不是特别方便。

笔者在网上搜索之后,发现一个比较实用的方法是将相关的快捷方式复制到/usr/share/applications/ 目录下。

例如 pycharm的快捷方式,即在桌面创建pycharm.desktop的文件,然后里面内容为:

[Desktop Entry]
Name=Pycharm
Comment=Pycharm IDE
Exec=/usr/pycharm/bin/pycharm.sh
Icon=/usr/pycharm/bin/pycharm.png
Terminal=false
Type=Application
Categories=Development;
StartupNotify=true
NoDisplay=true
shangs 

并赋予该文件 可执行权限。

但是复制到/usr/share/applications 文件夹之后,在系统左下角的图标所展示的所有应用程序列表中,并没有找到该图标。

经过分析发现,是因为上述desktop文件中多写了一行,即 NoDisplay=true

将该行删除之后,就可以在程序列表中看到了。点击右键,选择添加到收藏夹,即可达成所愿。

发表在 Ubuntu | 标签为 | 留下评论

Ubuntu休眠之后再唤醒出现黑屏的解决方法

笔者在使用ubuntu 22.04LTS点过程中,时不时的遇到一些小的bugu,只能见招拆招。

这不,今天系统休眠之后,重新唤醒发现电源键是亮着的,但是屏幕黑乎乎一片,所有的键盘按键和鼠标按键都不起作用。

笔者上网搜索了一番,发现这个问题好像还挺普遍的。

有的说是显卡驱动问题,有的说是需要安装相关的软件之类的。

笔者照着操作一番,例如安装 laptop_mode并进行配置,结果发现还是不起作用。

最终笔者觉得折腾一下 显卡驱动。

原本笔者安装驱动是首先使用的如下命令进行查看:

py312) root@st:~/Desktop# ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002820sv00001558sd0000A650bc03sc00i00
vendor : NVIDIA Corporation
driver : nvidia-driver-545 – distro non-free
driver : nvidia-driver-535-server – distro non-free
driver : nvidia-driver-545-open – distro non-free
driver : nvidia-driver-530 – third-party non-free
driver : nvidia-driver-535 – distro non-free recommended
driver : nvidia-driver-535-server-open – distro non-free
driver : nvidia-driver-535-open – distro non-free
driver : xserver-xorg-video-nouveau – distro free builtin

然后按照提示安装的驱动,也就是其中标注了recommended的 nvidia-driver-535 ,具体命令如下:

apt-get install nvidia-driver-535

之后就可以使用nvidia-smi等命令了,而且用着还行,没有发现什么异常,直到出现休眠唤醒之后屏幕黑屏问题。

所以此次笔者更换了驱动程序,使用的是:nvidia-driver-545 具体命令如下:

apt-get install nvidia-driver-545

之后再测试,发现黑屏问题居然奇迹般的给解决了。

发表在 Ubuntu | 标签为 | 留下评论

pip安装torch过程中下载速度太慢的问题

笔者重新安装了ubuntu系统,然后配置python环境的时候,需要安装pytorch,直接按照官方给出的命令进行安装:

pip3 install torch torchvision torchaudio

结果发现下载速度很慢,需要好几个小时才能下载

Collecting mpmath>=0.19 (from sympy->torch)
Using cached mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Downloading torch-2.3.0-cp310-cp310-manylinux1_x86_64.whl (779.1 MB)
━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━ 406.3/779.1 MB 17.9 kB/s eta 5:46:15

上网搜索之后,有给出如下建议的:

pip3 –trusted-host http://pypi.tuna.tsinghua.edu.cn install torch torchvision torchaudio

但是笔者实际测试,效果并不明显,仍然速度很慢。

最终通过如下命令解决:

pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

发表在 Ubuntu, 其他 | 标签为 , | 留下评论

Ubuntu系统中安装搜狗输入法—解决无法输入中文的问题

在Ubuntu系统中安装输入法,网上比较多 的教程用的是 搜狗输入法,因此笔者也在系统中安装了搜狗输入法,结果按照网上的教程安装之后发现,虽然安装过程很顺利,但是无法使用该输入法输入中文。

纠结了好久,找了好几篇文章,最终找到了解决办法,废话少说,直接上酸菜:

直接安装相关的依赖程序包:

apt install libqt5qml5 libgsettings-qt1
apt-get install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2

运行上述 两个命令之后就完全可以正常使用了。

发表在 Ubuntu | 标签为 | 留下评论

Linux系统中查询当前目录下占用空间最大的目录

Linux系统中查询当前目录下占用空间最大的目录,就一条命令,如下:

du -h –max-depth=1 | sort -hr

发表在 Ubuntu | 标签为 | 留下评论

python程序内存泄漏的解决方法

笔者在实际应用过程中,利用python解析交易数据,其中的方法是对文件夹进行遍历,然后根据里面的每个文件进行单独的解析,也就是用到了多层循环,结果导致内存占用越来越大,以至于最终内存满了而程序崩溃退出。

笔者查询了好多方法,包括直接使用gc进行内存回收, gc.collect()

但是还是不起作用。而很明显的一个现象就是程序人工中断退出之后,内存快速回收。

所以最终想了个办法就是使用python进行单独调用,具体方法如下:

import os

dataDir="d:/gjqmt/userdata_mini/datadir/SH/0/"
for root,dirs,files in os.walk(dataDir):
    for i in len(dirs):
        os.system("python parseHisDaily.py")

在上述代码中,每次使用os.system进行调用之后,都会自动进行内存资源的回收。

所以上面的解决办法也只能算是一种折中办法。

之前还看到一篇文章说的是利用 pympler进行查找内存泄漏的位置。但是因为笔者的程序调用了外部API,这个相对比较难查找,因此弃用。

发表在 其他 | 标签为 | 留下评论

virtualbox中windows11开机自动登录设置

笔者在实际应用过程中,使用了Vritualbox系统安装windows11,然后在windows11中部署了相关应用,需要在开机之后自动启动该应用。

但是实际测试发现,必须windows11的用户登录该系统之后该应用才能启动,否则尽管windows11系统启动了但是用户没有登录的情况下还是没有启动该应用。

因此需要设置该windows11系统启动之后用户自动登录该系统,从而使得该应用也能随之自动启动。

ok,闲言少叙,接下来说说具体如何设置。

在windows11中进行设置用户自动登录,需要用到注册表,因此在运行输入框 输入 regedit 回车,启动注册表界面

在注册表编辑窗口中,按照以下路径依次打开: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

设置上面三个值

右键“新建”——“DWORD(32位)值” AutoAdminLogon 键值为1

右键“新建”——“字符串值” DefaultPassword 键值为默认用户名的密码

右键“新建”——“字符串值” DefaultUserName 键值为默认用户名

保存之后重启系统应该就可以生效了。

发表在 其他 | 标签为 , | 留下评论

利用python实现文件压缩打包的功能

主要是利用了zipfile实现文件压缩打包,简单实例代码如下:

import zipfile

with zipfile.ZipFile("archive.zip",'w') as zipf:
    zipf.write("config.ini")
    zipf.write("test.py")

其中的模式 w表示如果没有该文件则创建该文件,如果有该文件则覆盖。

那么如果已经存在该压缩文件,现在想往该压缩文件里面追加文件,是否可以?

实际上肯定可以的,只需要将w改成a即可。

import zipfile

with zipfile.ZipFile("archive.zip",'a') as zipf:
    zipf.write("mylist.pkl")

需要注意的是,上面的代码实际上只执行了一个打包的功能,根本没有对文件进行压缩,所以打包之后的文件大小没有什么变化,这显然不是我想要的。

这就需要对ZipFile函数的具体参数有所了解

  • ZipFile(filename, mode=’r’, compression=ZIP_STORED, allowZip64=True):创建或打开Zip文件。filename为文件名,mode为打开文件的模式,compression为压缩模式,allowZip64为是否支持Zip64格式。
  • ZipFile.write(filename, arcname=None, compress_type=None):将文件写入Zip文件中。filename为文件名,arcname为写入Zip文件中的文件名,compress_type为压缩模式。
  • ZipFile.extractall(path=None, members=None, pwd=None):将Zip文件中的所有文件解压到指定目录下。path为解压目录,members为要解压的文件列表,pwd为解压密码。

按照上面的提示,将关键代码进行修改如下:

import zipfile

with zipfile.ZipFile("archive.zip",'a',compression=zipfile.ZIP_STORED, allowZip64=True) as zipf:
    zipf.write("mylist.pkl")

结果发现,外甥打灯笼— 照舅(旧),对多个参数值进行尝试

import zipfile

with zipfile.ZipFile("archive.zip",'a',compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zipf:
    zipf.write("/root/mylist.pkl")

也就是将压缩模式改变之后发现,压缩结果有显著提升。而将allowZip64修改为False则发现与True的时候,压缩大小没有任何改变。

综上所述,还是需要将压缩模式设置为zipfile.ZIP_DEFLATED

原本写到这里就应该结束了,但是笔者将上面代码压缩的程序解压了一下发现 压缩包里面的文件是带有路径的。

如果想不带有路径,直接就是该文件名,则可以使用如下代码:

zipf.write(filename=”/root/mylist.pkl”,arcname=”mylist.pkl”) 替换zipf.write(“/root/mylist.pkl”) 即可达到上述目的。

发表在 Ubuntu, 量化交易 | 留下评论

在ubuntu系统中设置virtualbox虚拟机开机自动启动

笔者在Ubuntu系统中安装了virtalbox,然后再virtualbox中安装了虚拟机(假设虚拟机名为abc),希望在Ubuntu系统开机后,virtualbox中的虚拟机能够自动启动。则相关的修改操作如下:

vim /etc/systemd/system/abc.service​​

[Unit]
Description=abc
After=network.target virtualbox.service
Before=runlevel2.target shutdown.target
[Service]
User=root
Group=vboxusers
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/usr/bin/VBoxManage startvm abc --type headless
ExecStop=/usr/bin/VBoxManage controlvm abc acpipowerbutton
[Install]
WantedBy=multi-user.target

上述代码保存之后,使用如下命令启用生效:

​sudo systemctl daemon-reload​​

​sudo systemctl start abc​​

​sudo systemctl status abc​​

发表在 Ubuntu | 标签为 | 留下评论

利用miniQMT下载历史数据

前几篇简单介绍和测试的文章,使我们了解到miniQMT包含了xtdata(行情模块)+xttrade(实盘接口)两大模块。那么今天我们就利用miniQMT下载一下历史数据试试看。

首先啥都不说了,翠花,上代码:

import pandas as pd
from xtquant import xtdata

def onProgress(data):
    print(data)

xtdata.download_history_data2(stock_list=["688348.SH"],period='tick',start_time='20010101',end_time='',callback=onProgress)

data=xtdata.get_local_data()
print(data)
# df=pd.DataFrame(data['688348.SH'])

上面这段代码,关键在于第七行 download_history_data2函数,这是用于批量下载历史数据的。例如上面的相关参数指定的是下载 688348.SH这个票,从20010101这天开始的所有tick数据。

callback顾名思义是回调函数,可以直接赋值为None,也可以指定函数,例如上面的onProgress,需要注意用法,在调用时不需要添加参数。

执行期间可以看到该语句顺利执行,并不断打印输出data的相关信息。需要注意,上述程序执行期间需要启动miniQMT,否则直接报错。

通过回调函数打印data信息,可以看到具体的下载进展情况。下载完成之后,可以在qmt安装目录下的 \userdata_mini\datadir\SH\0中看到多了一个 688348目录,该目录下包含了很多个日期为文件名的文件。但是这些文件无法直接打开使用。因此需要调用xtquant提供的相关函数进行解析。这就执行到了第9行,第10行打印输出。但是此处输出发现是None,也就是没有数据,这怎么可能呢,明明目录下已经有数据了啊。

这可咋办,纠结之下,还是进入源代码级别看看问题在哪里吧,那就直接到xtquant的源代码来看一下,直接打开python安装目录下的Lib\site-packages\xtquant目录下,找到并打开 xtdata.py,找到get_local_data函数,发现直接了当的就一句话:

return None

My God。这是什么操作。啥都不处理直接返回None?逗我玩吗?在这个函数的return语句之前随意写入一句print语句,重新执行,的确能够打印该语句的参数,这说明这个函数的确被调用了,也的确是得偿所愿的返回了None。

笔者所用的是官网提供的最新版本 20230301版,同时在列的还有20220817和20220221两个版本,那么就接下来看看20220817版本是否也一样呢?可以看到该版本里面的get_local_data函数是有完整实现的。但是直接覆盖原有版本的话也会出错,因为python版本的不同,会调用不同的pyd库。

最终解决方案是放弃get_local_data函数,改用 get_market_data函数,该函数可以完成解析历史数据的功能。

发表在 量化交易 | 标签为 , , | 留下评论