<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ckc的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/ckc</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ckc]]></copyright><item><title><![CDATA[openresty 使用第三方模块]]></title><link>https://blog.csdn.net/ckc/article/details/120875647</link><guid>https://blog.csdn.net/ckc/article/details/120875647</guid><author>ckc</author><pubDate>Wed, 20 Oct 2021 21:34:00 +0800</pubDate><description><![CDATA[openresty自带的模块使用过程中经常需要一些第三方模块，比如posix这样的模块openresty都没有，需要使用第三方的。
openresty使用第三方模块其实很简单，即不需要编译openresty，也不需要编译别的什么模块，在nginx.conf里设置一下路径就可以了。
一般使用的模块主要有两种来源，一个是操作系统打包好的，比如debian系可以使用apt安装，rh系可以使用yum安装，另一个是luarocks这样的lua包管理系统带来的。
不管是哪一种，按照标准的方法安装好第三方模块。使用相应的]]></description><category></category></item><item><title><![CDATA[pro*c 的code和parse编译参数]]></title><link>https://blog.csdn.net/ckc/article/details/118098766</link><guid>https://blog.csdn.net/ckc/article/details/118098766</guid><author>ckc</author><pubDate>Tue, 22 Jun 2021 07:35:34 +0800</pubDate><description><![CDATA[真是羞愧，用了这么久的pro*c，一直对这两个参数到底是怎么回事一知半解，只是知道code用cpp的时候parse必须用none或者是partial，而且这个时候所有的宿主变量必须在专门的定义部分定义。
这就造成在写cpp代码的时候挺麻烦的，比如要写一个函数，函数中需要将参数传递给oracle做查询使用，结果不行，宿主变量需要重新定义，那就只能重新定义一个新的宿主变量，把参数复制过去，再传递给oracle使用。又麻烦效率又低。有的时候为了绕过这个麻烦，只好定义一些全局变量，避免通过参数传递，全局变量用多了也]]></description><category></category></item><item><title><![CDATA[PL/SQL Developer 的autoselect]]></title><link>https://blog.csdn.net/ckc/article/details/113530616</link><guid>https://blog.csdn.net/ckc/article/details/113530616</guid><author>ckc</author><pubDate>Mon, 01 Feb 2021 22:06:45 +0800</pubDate><description><![CDATA[pl/sql developer里有autoselect功能，就是在按下f8的时候自动选中当前光标所在行，并执行此行内容。

日常工作中打开这个功能可以大大提高工作效率，因为不需要再把手从键盘上移开，拿起鼠标标记选中需要执行的行了。

不过这个功能有些小问题，在写了中文注释的时候经常会错误选中上一行的一些数据导致执行失败。

有人写文章建议这样安排编辑区：


-- 中文注释

;

select sysdate from dual;

就是说在中文注释下面加一行只有分号，这样光标位于下面的sql行时就可以]]></description><category></category></item><item><title><![CDATA[cygwin 下的 iconv.h 错误处理]]></title><link>https://blog.csdn.net/ckc/article/details/109036920</link><guid>https://blog.csdn.net/ckc/article/details/109036920</guid><author>ckc</author><pubDate>Mon, 12 Oct 2020 21:12:28 +0800</pubDate><description><![CDATA[cygwin 当前版本下的iconv.h有点问题。

那一天编译一个小项目，用到了iconv.h，因为我的源代码是gbk编码的，所以编译参数用到了

-finput-charset=gbk

结果编译就报错如下：

错误：无法从 gbk 转换到 UTF-8
#include &lt;iconv.h&gt;

使用file /usr/include/iconv.h看了一下：
/usr/include/iconv.h: C source, UTF-8 Unicode text
打开/usr/include/..]]></description><category></category></item><item><title><![CDATA[c程序在cygwin、linux下输出乱码问题解决]]></title><link>https://blog.csdn.net/ckc/article/details/105307053</link><guid>https://blog.csdn.net/ckc/article/details/105307053</guid><author>ckc</author><pubDate>Sat, 04 Apr 2020 10:55:49 +0800</pubDate><description><![CDATA[最近在写一个小工具，跑在linux和windows下，因为没有界面，是后台处理，就直接在linux下开发了，windows下就在cygwin下编译，不需要做任何修改就可以正常工作。美中不足的是在cygwin下输出汉字会乱码。
 
 cygwin编译出来的代码可以在cygwin环境下运行，也可以脱离cygwin环境直接在windows下运行，这两种情况实际运行效果有些差异，在cygwin...]]></description><category></category></item><item><title><![CDATA[linux守护程序一点体会]]></title><link>https://blog.csdn.net/ckc/article/details/102827106</link><guid>https://blog.csdn.net/ckc/article/details/102827106</guid><author>ckc</author><pubDate>Wed, 30 Oct 2019 21:09:50 +0800</pubDate><description><![CDATA[这几天遇到一个比较奇怪的故障。
一个程序从shell里执行是正常的，可以正常初始化之后转入守护程序然后正常运行。可是如果在守护程序里使用execvp重启动就不能正常工作。
今天仔细研究了一下，才发现了问题所在。
程序转为守护进程有这样一段代码：

for(int i=0;i&lt;3;i++)close(i);

这段代码的目的是关闭标准输出、标准输入和标准错误。然后在守护程序使用execvp重新...]]></description><category></category></item><item><title><![CDATA[mxml的mxmlDelete似乎不能很好释放内存]]></title><link>https://blog.csdn.net/ckc/article/details/102790202</link><guid>https://blog.csdn.net/ckc/article/details/102790202</guid><author>ckc</author><pubDate>Mon, 28 Oct 2019 22:24:18 +0800</pubDate><description><![CDATA[mxml的mxmlDelete似乎不能很好释放内存
第一次使用mxml库来读写一些xml消息，偶尔发现内存占用不断增加，测试了一下，感觉mxmlDelete函数好像不能很好释放内存。
···
#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
#include &lt;mxml.h&gt;
void mymxmlDelete(mxml_node_t...]]></description><category></category></item><item><title><![CDATA[github 中文处理情况记录]]></title><link>https://blog.csdn.net/ckc/article/details/84332964</link><guid>https://blog.csdn.net/ckc/article/details/84332964</guid><author>ckc</author><pubDate>Thu, 22 Nov 2018 07:25:30 +0800</pubDate><description><![CDATA[中文文件名
支持utf8格式较好，gbk格式可以上传，可以下载，但是在github网站上无法显示，无法预览

文件内容中有中文
utf8可以正常在github网站上显示，gbk格式如果内容比较少，显示不正常，如果内容比较多，也可以正常显示

注释有中文
utf8和gbk都可以正常工作

git version 2.1.4

git config -l 内容（部分）
push.default=sim...]]></description><category></category></item><item><title><![CDATA[crontab小技巧]]></title><link>https://blog.csdn.net/ckc/article/details/84059656</link><guid>https://blog.csdn.net/ckc/article/details/84059656</guid><author>ckc</author><pubDate>Wed, 14 Nov 2018 08:52:18 +0800</pubDate><description><![CDATA[有一些机器因为应用软件不稳定，需要定期重启，计划每月重启一次。
为防止影响业务运行，设置在周日凌晨3点重启，这个时间段对业务的影响最小，同时也避开了备份、维护等夜间工作。
开始的时候想着很简单，在crontab里这样加一条就好了：

0 3 1-7 * 7 /sbin/reboot
就是说每个月1到7号，如果是周日，就在3点重启一下。
结果发现这个脚本每到周日必定重启，不管是不是1-7号。
man...]]></description><category></category></item><item><title><![CDATA[代码大全读后感]]></title><link>https://blog.csdn.net/ckc/article/details/79944800</link><guid>https://blog.csdn.net/ckc/article/details/79944800</guid><author>ckc</author><pubDate>Sat, 14 Apr 2018 21:59:53 +0800</pubDate><description><![CDATA[读书千万不要教条！ 
工程上我们总结的规则、教条全部都是在一定的生产实践中总结出来的，全部都是有适用范围的，有些规则适用范围比较广，有些规则适用范围比较窄。

适用范围比较窄的规则在它的适用范围内是靠谱的，脱离了这个适用范围就可能是不靠谱的，是不合适的。我们在实践中有时候会遇到一些矛盾的规则，这很大可能就是这些规则的适用范围并不相同造成的。

学习规则的时候千万要注意适用范围，不然教条主义说的就是...]]></description><category></category></item><item><title><![CDATA[敏捷方法]]></title><link>https://blog.csdn.net/ckc/article/details/79515979</link><guid>https://blog.csdn.net/ckc/article/details/79515979</guid><author>ckc</author><pubDate>Sun, 11 Mar 2018 14:10:11 +0800</pubDate><description><![CDATA[敏捷是一种方法论。基本上有竞争的方法论都有适用范围，所有情况下都好的方法论和所有情况下都不好的方法论不需要讨论，也不会有争议，也不会和别的方法论互相竞争。 
敏捷是一种应对需求快速多变的方法论，它用用户的实际体验和反馈替代用户提出需求开发方根据需求进行开发的传统模式，它在一些情况下是有效的，同时在另一些情况下是不太有效的。 
真正高水平的实施是抛开敏捷和非敏捷这些争议，根据具体情况有针对性采用合适...]]></description><category></category></item><item><title><![CDATA[使用ps检查命令是否只有一个实例]]></title><link>https://blog.csdn.net/ckc/article/details/79463394</link><guid>https://blog.csdn.net/ckc/article/details/79463394</guid><author>ckc</author><pubDate>Tue, 06 Mar 2018 20:36:32 +0800</pubDate><description><![CDATA[有一个业务脚本，用lua写的，运行在debian linux下面，要求不可以启动多次。

linux下控制一个程序不可以启动多次方法挺多，这一次用了从ps读进程的方法。 
很简单，只要一条语句，而且不需要特殊的权限，普通用户就可以使用。 
os.execute(“test (psax|grepluatest.lua|grep(psax|grepluatest.lua|grep(ps ax|grep...]]></description><category></category></item><item><title><![CDATA[写程序不愿意写注释的问题]]></title><link>https://blog.csdn.net/ckc/article/details/79248482</link><guid>https://blog.csdn.net/ckc/article/details/79248482</guid><author>ckc</author><pubDate>Sat, 03 Feb 2018 17:53:26 +0800</pubDate><description><![CDATA[注释的目的在于提高代码的后期维护性，也就是说花费了当前的工作时间换取以后节约更多的时间。

一次性代码、以后不需要维护的代码实际上不需要写注释。 
结构清晰简单、很容易维护的代码可以少写甚至不写注释，写多了注释反而会降低工作效率。 
代码越复杂越不容易维护，维护的人越是参差不齐，越是需要认真写注释。 
判断注释、文档写的够不够其实很容易验证。如果代码将来也还是自己维护，那就找找几年前自己的代码，看]]></description><category></category></item><item><title><![CDATA[用ultraedit管理文本文件]]></title><link>https://blog.csdn.net/ckc/article/details/78990374</link><guid>https://blog.csdn.net/ckc/article/details/78990374</guid><author>ckc</author><pubDate>Sat, 06 Jan 2018 17:35:40 +0800</pubDate><description><![CDATA[工作生活中整理了很多的经验、心得，收集了一些资料，我比较习惯用纯文本文件来记录这些东西，体积小，打开快，查找方便，容易比较文档之间的差异，甚至于我还把很多文档用版本管理工具管理起来，这样归档、备份的问题也解决了。
如果平时使用ultraedit来编辑文件文件的话，那还有一个技巧可以帮助大家在文本文件内部更高效的记录、管理资料，这就是ultraedit的“函数列表”功能。函数列表功能平时在编译比如]]></description><category></category></item><item><title><![CDATA[stc15f104实现触摸开关]]></title><link>https://blog.csdn.net/ckc/article/details/73038695</link><guid>https://blog.csdn.net/ckc/article/details/73038695</guid><author>ckc</author><pubDate>Sun, 11 Jun 2017 16:34:30 +0800</pubDate><description><![CDATA[想做个触摸打开，延时关断的小控制器
用普通的轻触开关似乎很难看，而且开关也不方便 固定，总不好把控制板放在外面吧？
想使用触摸的开关，网上搜索了好久没找到合适的，stc官方文档上有个电容感应开关
需要占用2个io，一个产生pwm信号，一个用于ad判断，另外还需要2个电阻2个二极管和1个电容。
感觉有点复杂了，尝试了一下，最后只用了一个io口，一个电阻和一个电容搞定了。
思路是这样的：
]]></description><category></category></item><item><title><![CDATA[php使用odbc访问oracle]]></title><link>https://blog.csdn.net/ckc/article/details/72621721</link><guid>https://blog.csdn.net/ckc/article/details/72621721</guid><author>ckc</author><pubDate>Mon, 22 May 2017 10:21:59 +0800</pubDate><description><![CDATA[不知道怎么回事，debian下php访问oracle一直没有官方的包
只能使用unixodbc来处理了
新版本的apache不知道怎么回事SetEnv指令没效果了，用odbc访问oracle的时候就老是报错
odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/xe/oracl]]></description><category></category></item><item><title><![CDATA[摩尔斯电码练习感想]]></title><link>https://blog.csdn.net/ckc/article/details/70546990</link><guid>https://blog.csdn.net/ckc/article/details/70546990</guid><author>ckc</author><pubDate>Sun, 23 Apr 2017 21:09:42 +0800</pubDate><description><![CDATA[学习摩尔斯电码有一年多了，进度很慢，真是有点伤心。
最开始是用那个Just learn morse code软件来练习的。这个软件使用一个叫Koch的人主张的方法，就是使用一个较高的速度，从两个字符开始练习，每次正确率到了90%就增加一个新的字母，这样直到学会所有的字母。这个方法据说比使用一个很慢的速度，从所有的字符开始练习要效果好。
这个软件我用了好久，越练越感觉有点问题。它练习的时候需要我]]></description><category></category></item><item><title><![CDATA[我对敏捷开发的理解]]></title><link>https://blog.csdn.net/ckc/article/details/70224052</link><guid>https://blog.csdn.net/ckc/article/details/70224052</guid><author>ckc</author><pubDate>Tue, 18 Apr 2017 07:10:42 +0800</pubDate><description><![CDATA[我对敏捷开发的理解就是快速影响客户的真正需求。
以前的开发是重文档的，先做需求调研，整出个需求文档出来，然后根据文档开发。我见过最厉害的需求文档连每个界面包括上面的控件大小、颜色什么的都画出来了。
生产中人们发现这种工作方式有一些问题。比如周期太长，需求文档是重要资料，修订它一般需要比较麻烦的控制流程。周期长还有一个不足就是不能适应快速变化的世界，一个需求文档搞半年，需求文档出来的时候业务已经]]></description><category></category></item><item><title><![CDATA[慎用英文变量名]]></title><link>https://blog.csdn.net/ckc/article/details/52578222</link><guid>https://blog.csdn.net/ckc/article/details/52578222</guid><author>ckc</author><pubDate>Sun, 18 Sep 2016 21:54:41 +0800</pubDate><description><![CDATA[今天为了解决一个bug折腾了大半天。
这个bug非常怪异，一个类里的一个变量，没人动它居然值就变了，gdb调试了半天找不到哪里有修改。
偶然打印出变量的地址才发现异常之处。
cc_tajk tajk;
char swrq[20];
这两行是定义的全局变量，然后swrq的地址居然和tajk类里一个成员变量的地址重合了，奇怪的是在主模块里是正常的，
tajk类在一个单独的.cpp中，在ta]]></description><category></category></item><item><title><![CDATA[sdcc 51 迁移记录]]></title><link>https://blog.csdn.net/ckc/article/details/52541556</link><guid>https://blog.csdn.net/ckc/article/details/52541556</guid><author>ckc</author><pubDate>Wed, 14 Sep 2016 21:26:32 +0800</pubDate><description><![CDATA[﻿﻿
sdcc 51 迁移记录
这是makefile中的核心内容
out.ihx:$(object)
 @echo ------------------连接$^------------------
 sdcc --iram-size 256 --xram-size 1024 -o $@ $^
%.hex:%.ihx
 packihx $^ > $@
 
%.bin:%.hex
]]></description><category></category></item></channel></rss>