<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SHI-L]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/rick_geek</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; rick_geek]]></copyright><item><title><![CDATA[sqlalchemy 分表实现方案]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/138504399</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/138504399</guid><author>rick_geek</author><pubDate>Mon, 06 May 2024 18:48:32 +0800</pubDate><description><![CDATA[现有系统中因历史数据量过大，产生了将历史数据进行按月存储的要求，系统和数据库交互使用的是sqlalchemy，假设系统的原来的历史记录表（record）如下：为了将历史数据按月分表存储，我们需要以此表为基础按月创建对应的月表来进行分表存储，同时又要使用orm的功能。面对这样的需求我们很自然的会想到创建如下模型这样当然可以，但是我们不可能每月手动去创建这个模型，然后重启自己的服务，这明显有问题， 那如何解决呢，下面就介绍一种在这种场景下基于sqlalchemy实现的分表存储方案。]]></description><category></category></item><item><title><![CDATA[结构体在内存中的对齐规则及#pragma pack(n)应用]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/122416352</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/122416352</guid><author>rick_geek</author><pubDate>Mon, 10 Jan 2022 21:55:11 +0800</pubDate><description><![CDATA[最近在看之前项目上的代码，发现了#pragma pack(n)这个预处理语句，就看不太懂，自己的C语言基础还停留在大学学的那半学期的水平，一通扒拉，发现了这么一个知识点，记录一下。

那这个预处理语句的作用是什么呢，其实就是要求编译器对结构体进行分配内存时按照我们要求的规则进行对齐并分配内存。那这是什么意思呢，这就要从结构体的默认对齐规则开始说起。假设我们要定义了一个这样两个结构体：


struct aa {
       char x;
       int y;
       double z;
} ]]></description><category></category></item><item><title><![CDATA[Docker学习笔记1-（安装和基本操作）]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/112428987</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/112428987</guid><author>rick_geek</author><pubDate>Sun, 10 Jan 2021 16:20:33 +0800</pubDate><description><![CDATA[因为项目上的需要用到Docker，这里将在学习过程整理一些笔记和问题记录一下，当作是复习了。

概念性的东西，像如什么是Docker，为什么要使用Docker这些内容就不写了，这里就从使用的角度进行一下整理。我使用的环境的是Ubuntu16.04，

1.安装Docker

安装docker有以下3步

1.检查系统版本，看看是否支持docker

2.更新系统源

3.执行安装命令



4.检查是否安装成功



2.Docker基本使用

1.修改仓库源地址，（因为关方的仓库是国外的，拉去镜像很慢，且]]></description><category></category></item><item><title><![CDATA[Ubuntu如何动过命令行设置IP, 掩码，默认网关及DNS]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/108264488</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/108264488</guid><author>rick_geek</author><pubDate>Thu, 27 Aug 2020 17:24:36 +0800</pubDate><description><![CDATA[1、停止network-manager的服务:sudo service network-manager stop

2、ifconfig查看网卡信息

3、设置IP及子网掩码： ifconfig 网卡名称 IP地址 netmask 子网掩码

4、设置默认网关：route add default gw 网关

5、设置DNS:echo "nameserver DNS"&gt;&gt;/etc/resolv.conf

6、启动network-manager服务：sudo service network-ma]]></description><category></category></item><item><title><![CDATA[Ubuntu搭建NTP服务，提供对时服务]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/108264125</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/108264125</guid><author>rick_geek</author><pubDate>Thu, 27 Aug 2020 16:56:02 +0800</pubDate><description><![CDATA[在项目中有这样一种场景就是：在局域网里，有多台设备需要同步时钟，为了实现这个需求，我们可以在局域网里的一台设备上搭建NTP服务，其他设备通过NTP协议和这台设备进行时钟同步。

首先说明一下什么是ntp，所谓ntp(network time protocol)是用来使计算机时间同步化的一种协议。

我的环境的ubuntu16.04.

1.首先在选定作为服务端的设备上安装ntp，来提供对时服务


sudo apt-get install ntp

2.在其他设备上安装ntpdate，这个工具是用来和服务端]]></description><category></category></item><item><title><![CDATA[python开发中使用redis的发布订阅功能]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/106714971</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/106714971</guid><author>rick_geek</author><pubDate>Fri, 12 Jun 2020 14:41:20 +0800</pubDate><description><![CDATA[我们知道redis不仅可以用来存储数据，还可以用来作为消息中间件来进行进程间的通讯，最近项目中也有用到，这里整理一下，作为记录。

首先，安装redis的python依赖。


pip install redis

   然后是创建连接


import redis
rc = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)

消息发布，这个比较简单，就是传入主题和信息


rc.publish("channel", "ha...]]></description><category></category></item><item><title><![CDATA[python虚拟环境迁移]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/106591295</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/106591295</guid><author>rick_geek</author><pubDate>Sun, 07 Jun 2020 15:09:39 +0800</pubDate><description><![CDATA[之前我们介绍了如何安装及使用python虚拟环境。在开发过程中如果我们想在其他电脑上新建和当前使用的虚拟环境一致的虚拟环境，当然，我们可以一条条的执行pip命令进行安装，但是如果我们以来十几个安装包，想想就头大了。那我们该怎么办呢。以易用性著称的python当然会给出好的解决方案，仅需几行命令我们就可以实现将现有的虚拟环境就进行备份和还原。这里我们考虑两种情况，一种是新建虚拟环境的那台主机可以联网，一种是新建虚拟环境的那台主机不能联网。

其实，我们要做的事情十分简单，就是将我们正在使用的虚拟环境进行一次备]]></description><category></category></item><item><title><![CDATA[小程序通过stomp操作activemq]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/106516265</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/106516265</guid><author>rick_geek</author><pubDate>Wed, 03 Jun 2020 19:52:18 +0800</pubDate><description><![CDATA[pass
]]></description><category></category></item><item><title><![CDATA[ffmpeg安装方式及配合python使用]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/106305483</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/106305483</guid><author>rick_geek</author><pubDate>Sun, 24 May 2020 10:50:58 +0800</pubDate><description><![CDATA[最近的项目中有这样一个功能需求，就是通过海康的摄像头录制一段视频，其实，海康官方提供的提供的SDK中有关于视频录制的接口，但是SDK都是x86和64的，没有支持arm的版本。为了实现这个录制视频功能，考虑了这样一个实现方案就是利用ffmpeg将摄像头的rtsp视频流存储为mp4文件。这里就用到一个工具ffmpeg。这篇文章主要分为几个部分吧：

1.介绍一下什么时ffmpeg。

2.再windows,ubuntu,及arm版linux上如何安装ffmpeg。

3.介绍一下ffmpeg的简单使用。

4.]]></description><category></category></item><item><title><![CDATA[ubuntu16.04安装virtualenv及使用]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/106242583</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/106242583</guid><author>rick_geek</author><pubDate>Wed, 20 May 2020 19:35:00 +0800</pubDate><description><![CDATA[最近特别健忘，与其说是健忘还不如说是做事不过脑子。之前翻过的好些日志都忘了，也许只有自己动手整理一下才能忘得没有那么快。最近一个项目是用python开发的，之前也自己搭建过virtualenv的环境，但是，现在忘得一干二净了，而且找到之前收藏的博客，按照人家的方法，一步步安装居然不行，也不知道当时是怎么搭起来的，这次，自己记录一下免得明天就忘了。文章主要介绍一下virtualenv的安装，创建，激活及退出操作。

1、安装

翻了之前收藏的博客里面介绍的安装方法是使用pip


pip install...]]></description><category></category></item><item><title><![CDATA[python-onvif库基本使用]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/105657810</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/105657810</guid><author>rick_geek</author><pubDate>Tue, 21 Apr 2020 15:23:02 +0800</pubDate><description><![CDATA[最近新项目中要把一套现有的系统移植到华为Atlas终端上，因为现在这套系统里关于摄像头预置位跳转，抓图等功能是调用海康SDK实现的；但是Atlas终端是ARM平台的，海康的SDK是x86平台的，并没有提供ARM版本的，所以考虑使用onvif协议实现预置位跳转和抓图功能，这样就不用考虑平台差异了。

onvif接口说白了就是webservice接口的调用，各个语言也都提供了相关的类库，大致看了一下C...]]></description><category></category></item><item><title><![CDATA[分页功能实现思路]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/105431521</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/105431521</guid><author>rick_geek</author><pubDate>Fri, 10 Apr 2020 14:28:27 +0800</pubDate><description><![CDATA[最近项目中开发了分页功能，开发过程中一边开发一边梳理思路，虽然马马虎虎开发完成了，但是总感觉有什么地方没有考虑到。写这篇博客的目的主要还是想再理顺一下思路，如果有考虑不到的地方还希望大家批评指正。再有就是当个知识点记录一下，以便日后查用。

功能需求很简单，我们有一个数据集，里面有很多条目，需要分页展示再我们的程序中，每页只显示固定的条目数，可以通过“首页”，“上一页”，“下一页”，“尾页”等类似...]]></description><category></category></item><item><title><![CDATA[使用qcustomplot绘制柱状图]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/105201489</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/105201489</guid><author>rick_geek</author><pubDate>Mon, 30 Mar 2020 18:07:20 +0800</pubDate><description><![CDATA[最近开发的项目中有对数据进行柱状图展示的功能要求，维护的项目里也有类似的功能需求，是使用qcustomplot这个库实现的，这次对于这个功能也使用这个库来实现，对此做一下简单记录，方便以后查阅。

这个控件功能比较强大，使用也比较方便，不仅可以绘制柱状图，还可以绘制曲线等，这里仅记录绘制柱状图过程中可能使用的接口，更多接口的使用可以参考qcustomplot官网。

1.添加从官网下载的两个文件(...]]></description><category></category></item><item><title><![CDATA[JAVA读写配置文件（.properties）及注意问题]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/104188622</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/104188622</guid><author>rick_geek</author><pubDate>Thu, 06 Feb 2020 11:55:47 +0800</pubDate><description><![CDATA[在编程过程中配置文件读写操作是很常用的一项知识点，在java中也不例外。抛开编程语言的差异不说，对配置文件的操作的基本流程包括以下几个部分：

1.获取配置文件的资源，直白点说就是我们得找到这个配置文件，很容易碰到的一个问题就是文件的路径问题。

2.创建程序中对应配置文件的操作对象，像如java中的Properties，Qt中Qsetting等，然后调用它们相应的方法加载文件资源。

3.获配置...]]></description><category></category></item><item><title><![CDATA[UML类图基础入门]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/103296801</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/103296801</guid><author>rick_geek</author><pubDate>Thu, 28 Nov 2019 18:05:59 +0800</pubDate><description><![CDATA[UML类图的作用是摆脱编程语言的限制，描述程序中类的信息及各个类之间的关系，通过类图我们可以很直观的了解程序中类的关系，方便我们的开发维护工作。这篇文章主要分为两部分，第一部分介绍主要介绍类图的基本属性，第二部分介绍类与类之间的关系。对于任何一张类图，对照这篇文章的说明，我们解读出它的含义。

1.类图的基本属性

下图是一个UML类图，它一般由3部分组成，如下所示：



1.类名：普通类的类名...]]></description><category></category></item><item><title><![CDATA[C++实现双向循环链表模板类]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/103163108</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/103163108</guid><author>rick_geek</author><pubDate>Wed, 20 Nov 2019 21:16:35 +0800</pubDate><description><![CDATA[最近在维护项目时发现了项目中有这样一个功能需求：程序需要发送许多指令到下位机，在这些指令中，有的指令需要循环发送到下位机，有的指令则需要根据需求进行发送。如果我们要使用某个容器来管理这些指令，对于那些临时发送的指令这个容器需要满足动态插入和删除的功能，程序使用双向循环链表满足了这个需求，在这里作为一个知识点记录一下，然后把代码里面的双向循环链表模板类的代码整理出来，进行一下说明。

首先，我们说明...]]></description><category></category></item><item><title><![CDATA[Qt以编译方式安装子模块（submodules），以qmqtt模块安装为例]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/103051829</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/103051829</guid><author>rick_geek</author><pubDate>Thu, 14 Nov 2019 10:19:44 +0800</pubDate><description><![CDATA[在使用Qt开发时我们经常会遇到这种情况：我们维护的老项目用的Qt版本比较旧，因为qt新老版本之间的差异比较大，直接把开发环境升级到新版本的Qt不太现实，可是我们在维护老项目的时候又会有使用新版本某个功能模块的情况。比方说，Qt5.10之前是不支持mqtt的，我们项目使用的Qt版本5.5，为了在我们项目中使用mqtt功能是不是就得把我们的开发环境升级到Qt5.10?答案当然是否定的，为了避免这种情况...]]></description><category></category></item><item><title><![CDATA[QT在当前进程界面中嵌入其他进程的界面]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/102975078</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/102975078</guid><author>rick_geek</author><pubDate>Mon, 11 Nov 2019 09:11:47 +0800</pubDate><description><![CDATA[最近接触到外协厂家的一套系统，这套系统的主界面由几个功能界面组成的，他的实现方式并不是将所有的功能界面设计在这一个主界面程序上，而是将各个功能界面做成单独的界面程序（单独的进程），每个程序都可以独立运行，然后通过将这几个程序嵌入到主界面中，形成一个完整的主界面。这种模块化的实现方式耦合度不高，各个模块比较独立。因为外协厂家的源码是没有开放给我们，所以从网上翻了几篇博客，对可能的实现方式有了基本的了...]]></description><category></category></item><item><title><![CDATA[浮点数为什么不能用“==”比较]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/102728105</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/102728105</guid><author>rick_geek</author><pubDate>Thu, 24 Oct 2019 17:39:28 +0800</pubDate><description><![CDATA[本文尝试着将以下内容做一个浅显的解释，主要包括浮点数为什么是不精确的，浮点数为什么不能用==和！=直接比较，以及浮点数的比较方法等几个方面。如果那个地方说的不对还请各位看官不吝赐教！欢迎大家评论区讨论。

IEEE 754 --- 二进制浮点数算术标准

浮点格式是一种数据结构，用于指定包含浮点数的字段，这些字段的布局及其算术解释。自计算机发明以来，出现了许多种不同的浮点数表达方式，目前最通用的是...]]></description><category></category></item><item><title><![CDATA[JAVA定时任务调度工具-Timer篇]]></title><link>https://blog.youkuaiyun.com/rick_geek/article/details/93756886</link><guid>https://blog.youkuaiyun.com/rick_geek/article/details/93756886</guid><author>rick_geek</author><pubDate>Wed, 26 Jun 2019 21:43:14 +0800</pubDate><description><![CDATA[目录

一、介绍    

二、基本使用

三、Timer和TimerTask其他方法介绍

四、schedule和scheduleAtFixedRate的区别

一、介绍    

    JAVA中实现定时任务调度主要有两种方式，一种时JDK自带的Timer，一种是使用第三方Quartz。比较来说Quartz的功能更加强大，由浅入深，本篇先介绍下Timer的使用。...]]></description><category></category></item></channel></rss>