Other

Oracle Instant Client(即时客户端) 安装与配置

一、下载 下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html 这是Oracle Instant Client的下载首页,有很多种版本可供下载。 但要注意第三方工具如:PL/SQL Developer和Toad的版本,32位的要对应32位的OracleInstant Client,不要因为系统是64位的就下载64位的,这个要注意。  二、配置 把下载的instantclient-basic-windows.x64-21.3.0.0.0.zip压缩包解压,放到 C:\instantclient_21_3目录下。 在“环境变量”的“系统变量”中增加: ORACLE_HOME = C:\instantclient_21_3TNS_ADMIN = C:\instantclient_21_3NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK修改Path变量,在后面添加 C:\instantclient_21_3  三、新建tnsnames.ora文件 在C:\instantclient_21_3 新建一个tnsnames.ora文件,增加自己的数据库别名配置。 示例如下: MyDB= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST= 172.16.1.16)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) 注意格式要排列好 主要改 = 前面的别名,Host为IP地址, SERVICE_NAME为数据库服务器的实例名。  四、卸载方法 “环境变量”中的“系统变量”中: 删除 ORACLE_HOME,TNS_ADMIN, NLS_LANG 三个变量,修改path变量,去掉C:\instantclient_21_3目录删除C:\instantclient_21_3目录  五、第三方工具使用 上面的任何一种客户端配置好后,都可以安装Toad 或者PL/SQL Developer 工具,不需要再额外进行任何设置,即可使用。

ubuntu——环境安装 docker mongo redis jdk

1、安装 docker Ubuntu使用 APT 安装docker 1.安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common 1 2 2.安装 GPG 证书 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 1 3.写入软件源信息 sudo add-apt-repository deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable 1 4.更新并安装 Docker CE sudo apt-get -y update sudo apt-get -y install docker-ce  2、安装单实例 mongodb docker run -d --name mongo27017 \ -p 27017:27017 \ -v /root/data/soft/mongo/mongo27017:/data/db \ -m 1G --memory-swap 1G \ mongo:4.

图文解说ChinaCock高德地图组件采集坐标 (二)

前文介绍了如何快速在uniGUI项目中引用ChinaCock地图组件,为应用增加地图功能。本文从实战出发,继续介绍为项目增加实战功能:让用在项目中可以采集指定实体的坐标。 假设,你已经参阅了前文,在项目中已经集成进TCCuniGUIAMap地图控件,所以本文不再说明这些细节。 先来看一下用户的实际需求: 1.当前用户管理着所辖区域的企业资料,现在想在地图中显示这些企业的位置 2.用户需要为这些企业在地图中标注出来,以满足第一条的实现 3.用户在标注的时候,可以拖放标注,进行微调并重新按新指定的地址进行保存 4.用户鼠标指向一个标注的时候,能在上面显示企业的名称,离开后自动隐藏企业名称 5.用户单击一个标注的时候,能显示详细信息 6.自动隐藏企业详细信息,分两种情况: a.上一步当显示详细信息时,用户不进入详细信息区域情况下,信息显示3秒后自动隐藏 b.上一步显示的信息,即当户鼠标进入这个详细信息区域,一直显示,当离开时,信息显示3秒后自动隐藏,在这期间,如果用户鼠标又回到详细信息区域,则保持显示,离开自动隐藏,这一过程可重复执行 7.用户在知道企业名称的情况下,能在地图上按企业名称查询并快速标注该企业 8.用户可以重新标注指定企业,即当前编辑一个企业的标注时,打开地图,显示所编辑企业旧的标注点,并允许重新标注。 9.用户标注企业时,要取得经纬度及详细地址 开发者想到的需求: 1.用户编辑一个企业位置,当用户进入这个功能界面时,在地图正中心显示该企业标注,这样方便用户查看并重新标注 2.地图要显示的简洁,当前用进入时,只显示所辖区域 3.实现结果,功能界面与地图尽量整合为一体,让用户感觉就是地图上操作,没有突兀的感觉 4.尽量与业务分开,实现一个与业务分开的功能,在类似的需求中可以直接使用(这一条跟用户需求无关了) 综上,基本上把与用户的需求交流都整理出来了。现在开始动工,制作一个通用的窗口,来满足上面的需求:  

linux - 安装 libreoffice7.3.2

将包下载到自己指定位置的指令wget -P /home/plug/libreoffice7.3.2 https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.2/rpm/x86_64/LibreOffice_7.3.2_Linux_x86-64_rpm.tar.gz   如果不喜欢这个版本,这里还有好多版本 https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable 继续在该版本里找到 _rpm_sdk.tar.gz 和 _rpm_langpack_zh-CN.tar.gz 下载下来 我用的的是这两个 wget -P /home/plug/libreoffice7.3.2 http://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.2/rpm/x86_64/LibreOffice_7.3.2_Linux_x86-64_rpm_sdk.tar.gz wget -P /home/plug/libreoffice7.3.2 http://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.2/rpm/x86_64/LibreOffice_7.3.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz 注意了,版本号 7.3.2 ,需要统一 然后解压,我放在文件夹 setup 里 ,新建文件夹指令 mkdir setup tar -zxvf LibreOffice_7.3.2_Linux_x86-64_rpm.tar.gz -C /home/plug/libreoffice7.3.2/setup tar -zxvf LibreOffice_7.3.2_Linux_x86-64_rpm_sdk.tar.gz -C /home/plug/libreoffice7.3.2/setup tar -zxvf LibreOffice_7.3.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz -C /home/plug/libreoffice7.3.2/setup 进入 /home/plug/libreoffice7.3.2/setup/LibreOffice_7.3.2_Linux_x86-64_rpm/RPMS 后执行 yum localinstall *.rpm指令cd /home/plug/libreoffice7.3.2/setup/LibreOffice_7.3.2_Linux_x86-64_rpm/RPMS yum localinstall *.rpm  进入 /home/plug/libreoffice7.3.2/setup/LibreOffice_7.3.2.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS 后 yum localinstall *.rpm 就可以汉化 指令 cd /home/plug/libreoffice7.3.2/setup/LibreOffice_7.3.2.2_Linux_x86-64_rpm_langpack_zh-CN/RPMSyum localinstall *.rpm  然后将 Windows中的字体文件夹font,复制进软件目录具体操作看我这篇随笔 继续安装工具  yum -y install cairo yum -y install libSM

首次使用docker有感

已经知道docker很久,但一直未去使用,今天由于要搭建测试模拟环境(RabbitMQ),固首次使用,如下为历程信息: 首先:个人常年使用windows开发环境,新本测试使用时,发现安装软件过多,很多东西不是太好管理。安装RabbitMQ时,还需要安装Erlang,固不愿意在本机装了,因此想尝试使用docker; 过程: 1、看了部分docker介绍的资料后,决定使用docker进行测试; 2、本机windows10家庭版,由于之前使用过Hyper-V,固安装docker是比较轻松,虚拟环境已经开启(说明:家庭版开启虚拟支持,需要特殊处理一下); 3、启动docker后,做了如下操作,便可轻松使用RabbitMQ;  1、安装版本: docker pull rabbitmq:3.10.0 2、运行MQ(套用官方端口): docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10.0 3、启用管理界面: 1、找到容器ID: docker ps 2、进入容器: docker exec -it 78077b3b6a94 /bin/bash 3、启用管理界面 rabbitmq-plugins enable rabbitmq_management 4、即可使用RabbitMQ界面来管理消息。 总结:使用过程还是比较舒适的,体会到了docker的便捷性,有时间了,也会把自己之前项目打包python环境及程序部署、java环境及程序部署做镜像与之前的做法进行对比,进一步感受一下不同方式的差异性。  

16px的宋体和微软雅黑的对比

16px 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。 14px 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。 12px 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。 左右对比,很明显,小号字体(16px及以下),点阵字体具有明显的优势——清晰度高。  

【C# 数据结构与算法】线性表

线性表的实现方式 线性表的实现方式有下面几种 顺序表 :数组 单链表:list<> 单向循环链表 双向链表:linkedlist<> 循环链表:   自定义顺序表 public class SequenceList<T> { private T[] items; private int count; private bool empty; private bool full; int capacity; //列表的元素个数 public int Count { get => count; set => count = value; } //判断列表是否为空 public bool Empty { get => count == 0; } public bool Full { get => count == items.

STM32 timer实现pwm输出

简介 以stm32f103rct6为例,下面说明如何使用通用定时器实现pwm输出 详细 stm32的定时器有多种类型,有RTC、基本定时器、通用定时器、高级定时器。下面我们选择通用定时器来实现pwm输出功能。 这里我选择TIM2定时器。 第一步:选择哪几个引脚输出pwm信号,这里我选择PA1、PA2,如下图: 第二步:使能外设时钟;使能GPIO的时钟,使能TIM2的时钟。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA 第三步:初始化GPIO功能(配置工作模式、io引脚、IO响应速度) //PA1引脚GPIO初始化 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); //PA2引脚GPIO初始化 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); 第四步:初始化timer(配置时钟分频、计数方式、自动重装值、预分频值) //定时器初始化,时间基准是500微秒 TIM_TimeBaseInitTypeStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitTypeStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数方式 TIM_TimeBaseInitTypeStruct.TIM_Period = arr;//自动装载值 TIM_TimeBaseInitTypeStruct.TIM_Prescaler = psc;//预分频系数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitTypeStruct); 第五步:初始化OC(OUTPUT COMPARE)(配置输出比较的模式、输出是否使能、输出的极性、比较值) //channel2 初始化输出比较参数 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高电平有效 TIM_OCInitStruct.TIM_Pulse = s_timer2_duty; //计时500ms后翻转一次 TIM_OC2Init(TIM2, &TIM_OCInitStruct); //channel3 初始化输出比较参数 TIM_OCInitStruct.

LeetCode 221 Maximal Square DP

Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. Solution 设 \(dp[i][j]\) 表示能到达位置 \((i,j)\) 的最大正方形边长。对于初始化,即 \(i=0 \text{ or } j=0\),最大的边长就是该位置的数字;否则的话考虑转移: \[dp[i][j] = 1+\min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) \] 即由周围的来进行限制,只能选最小的边长 点击查看代码 class Solution { private: int dp[303][303]; int ans = 0; public: int maximalSquare(vector<vector<char>>& matrix) { if(matrix.empty())return 0; int n = matrix.size(), m = matrix[0].size(); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if((i==0)||(j==0)||(matrix[i][j]=='0')){ dp[i][j] = matrix[i][j]-'0'; } else{ dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1; } ans = max(ans, dp[i][j] * dp[i][j]); } } return ans; } };

稀疏数组

需求:编写五子棋游戏中,有存盘退出和续上盘的功能。 分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。 解决:稀疏数组   public class Demo04 { //稀疏数组 public static void main(String[] args) { System.out.println(==============================); int[][] nums1 = new int[11][11]; //0:无子;1:黑子;2:白子; nums1[1][2]=1; nums1[2][3]=2; //输出原棋盘 printArrays(nums1); System.out.println(==============================); //有效棋子数 int count=0; for (int i = 0; i < nums1.length; i++) { for (int j = 0; j < nums1[i].length; j++) { if (nums1[i][j]!=0){ count++; } } } //稀疏数组 //count+1是因为多存了一个头,记录棋盘横坐标长度、纵坐标长度和有效记录数。 //头下面就开始记录横纵坐标和该位置的值。 int[][] nums2 = new int[count+1][3]; //第一列存横坐标,第二列存纵坐标,第三列存值 nums2[0][0]=11; nums2[0][1]=11; nums2[0][2]=count; //稀疏数组游标row int row=0; for (int i = 0; i < nums1.