自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xxNull的专栏

机遇是从耐心中产生的,越有耐心,就越有机遇

  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

原创 提交库到pypi

LICENSE授权文件。可以从挑选一个你喜欢的授权。为包的源码目录注意:改成你自己包的名称。README.md在这里写上库的详细描述。通常,写一下基本介绍,如何使用等等。

2023-10-02 20:25:57 80

原创 GTK+helloword详解

麻雀虽小五脏俱全,一个简单的helloword也包含的很多细节,通过分析这个简单的程序源码,可以了解到GTK+图形程序的基本结构以及诸多背景知识。

2022-07-02 21:12:57 744 1

原创 Windows下搭建GTK3开发环境

本文记录了如何在Windows下一步一步搭建GTK3的开发环境。

2022-07-01 00:28:27 2295 1

原创 Linux下Vim

安装见: https://www.cnblogs.com/highway-9/p/5984285.html也可以直接搜索vimplus。真心强大。

2017-11-30 11:41:33 290

原创 树莓派之SSH连接经验

打开SSH服务执行raspi-configsudo raspi-config选择InterfacingOptions选项,回车 选择SSH,回车 Windows下客户端推荐使用putty这个免费开源的SSH客户端。下载地址 在红框处填入树莓派的IP地址,点击右下角的Open即可。 不过,putty的默认配置并非最优,需要做以下修改: 1. 解决无法使用小键盘的问题 2. 自动

2017-10-19 09:41:49 6033

原创 10、Lua使用C++中的类——调用类方法并访问类变量

在上篇文章中我讲到如何在Lua中调用C++的类方法。但是,并没有讲如何调用类变量。其实,有两种方法访问类变量,一个中方法是直接写一个函数去访问,这个没啥好说的,但是相对来说比较麻烦。还有没有更好的办法呢?其实,是有的。那就是借助__index和__newindex这两个元方法来实现。 在上篇文章中,我们把类的__index设置成的元表自己。也就是说是用lua自身默认的机制去访问Table中

2017-10-12 14:12:56 1573 1

原创 9、Lua使用C++中的类——调用方法

背景知识本以为在Lua中使用C++的类一件非常复杂的事情。毕竟C++的类与Lua有那么多的不同。但是,困难都是纸老虎,只要想办法问题很容易就解决了。 首先,我们要搞明白C++中类和对象的概念。这个概念想要表述清楚是很难的。但是,下面的表达式却道出了类和对象的本质: 类 = 公共数据 + 公共方法 对象 = 私有数据 + 类 其中,类中的公共方法又分为与对象相关的

2017-10-12 14:12:19 1282 1

原创 8、Lua中调用C++函数

来往来往,有来有往才能叫做来往。既然C/C++和lua是好亲戚,那就会有来有往。之前,我们一直在讨论在C/C++中如何使用Lua提供的变量和函数。从这篇文章开始,咱们来讨论一下如何在Lua中使用C/C++提供的变量、函数甚至类。 当然,我们还是假设lua是嵌入C/C++程序里面的。所以,使用lua依然是为了扩展C/C++。这个目的一定要先明确了。接下来的事情就比较容易了。 既然,

2017-10-12 14:11:41 2008 1

原创 7、C++处理Lua中的存在嵌套(循环)的Table

我一直在回避一个事情,那就是对嵌套Table的处理。例如在Lua中有如下定义:luat_Nest= {a=123, b=456, c={1,2,3}}其中,成员C就是嵌套的。在C/C++中如何处理呢?其实,对于这种仅仅嵌套一层的表还是比较容易处理的。下面的代码就可以:代码NestTable.cpp #include static void ReadNestTable(lua

2017-10-12 14:11:00 1976 1

原创 6、C++修改Lua中Table的内容

在C/C++中修改Table和读取Table差别不大。也是非常简单。还是直接上代码:代码WriteLuaTable.lualuat_Test1={a=123, b=456, c=789}luat_Test2={123, 456, 789}WriteLuaTable.cpp#include static void WriteTableFromKey(lua_State *L, co

2017-10-12 14:10:13 921 1

原创 5、C++读取Lua中Table的内容

背景知识首先,我们来简单了解一下lua中的Table。Table是lua中唯一内置的数据结构类型。也就是说,它没有内置list、array、map、set等等数据结构类型。在lua里面那些数据类型都是通过Table来实现的。在lua中的,Table是非常强大和重要的。当我们需要将lua嵌入到应用程序里面的时候,不可避免的需要操作Table。本文就来讨论一下如何在C语言中读取Lua中Table

2017-10-12 14:09:36 1033 1

原创 4、C++程序读取Lua的Table——2

在Lua中存在两种访问Table成员的方法。一种是Table.ItemNamed,这个我们在《C程序操作Lua的Table——1》中介绍过了。下来我们来介绍另一种访问Table成员的方法——Table[index]。 也简单,废话少说,上代码。代码LuaTable2.lua luat_Test = {123, 456}LuaTable2.cpp#include int

2017-10-12 14:08:51 387 1

原创 3、C++程序读取Lua的Table——1

Table是Lua里面特有的数据结构。要想在C语言中访问这种数据结构需要使用lua提供的一系列函数才行。其实,很简单,仅仅涉及到几个小函数。废话少说,上代码。代码LuaTable.lua luat_Test={a=123, b=456,c=789}LuaTable.cpp #include <lua.hpp>// 获取Table的Itemstatic void GetTableItem(lua_

2017-10-12 14:08:11 512

原创 2、C++程序中调用Lua函数

还是很简单,直接上源代码。代码CallLuaFunction.lua function luaf_Add(x, y) print("luaf_Add: x=" .. x .. ", y=" .. y .. ", x+y=" .. x+y) return x + yendCallLuaFunction.cpp#include int main (void){

2017-10-12 14:07:23 333 1

原创 C++调用lua

代码很简单,直接上代码: simple.lua print("hello word")simple.cpp#include int main (void){ lua_State *L = lua_open(); // 打开一个lua状态机 luaopen_base(L); // 加载基本的lua库

2017-10-12 14:06:07 239 1

原创 6.我是输入法

// 告诉系统,我是输入法Bool InitXIM (Window im_window){ XIMStyles *input_styles; XIMTriggerKeys *on_keys; XIMEncodings *encodings; char *p, *imname; // 获取环境变亮XMODIFIERS的值

2017-10-10 11:01:58 546 1

原创 5.界面的处理

​ fcitx是使用xlib写的界面。我们知道,xlib在linux下是最底层的图形库。QT和GTK都是基于xlib写的。所以,理论上讲,fcitx完全可以在没有QT和GTK的情况下运行。但是,也正是这个原因,fcitx的界面非常的简单。连基本的配置界面都没有。从程序的易用性方面讲,有一个配置窗口是非常合理而且合情的。但是,直接使用xlib处理界面实在不是太好的主意。尤其是用它来处理复杂一些的界

2017-10-10 11:00:45 544

原创 3.LoadConfig及LoadProfile函数

一、读取配置文件/* * 读取用户的配置文件 */void LoadConfig (Bool bMode){ FILE *fp; char buf[PATH_MAX], *pbuf, *pbuf1; Bool bFromUser = True;// 用以标识配置文件是用户家目录下的,还是从安装目录下拷贝过来的。 int group_i

2017-10-10 10:56:24 4007

原创 2.main函数

int main (int argc, char *argv[]){ XEvent event; // 见解说1 int c; // 用于保存用户输入的参数 Bool bBackground = True;// 见解说2 // 解析命令行参数,见解说2、3 while((

2017-10-10 10:51:54 449

原创 1.源码中文件用途说明

今天从http://fcitx.net上面找到了源代码各个文件的说明,很不全。以后有时间一点一点的填补吧。转载如下: 描述 fcitx 源码文件的用处。AutoEng.h/AutoEng.c自动切换到英文输入状态。void LoadAutoEng (void) 从 ~/.fcitx/AutoEng.dat (如果不存在,则从 /usr/local/share/fcitx/data/AutoEn

2017-10-10 10:42:46 857

原创 0.引子

fcitx是一个输入法。linux下的输入法。做得很好。用起来很方便,很舒服。可惜,已经停止开发。但是,已经快1年了吧。个人感觉,它依然是最好的。Ubuntu7.10自带的是scim。可是,刚一装上就有文件夹重命名问题。虽说,可以通过改配置文件解决。但是,总是感觉很不舒服,各种各样的问题,太烦了。没办法,一上来就换成fcitx。 可惜,fctix已经停止了。而且已经停止很久了。接替者,好像也一直没

2017-10-10 10:39:53 382

原创 3、源码级跨平台开发——选择运行时库2

有时候选择太多了反而不好。因为光是了解这些选择就需要花费很多时间。花时间也就罢了,往往到最后还选择了个错的。实在是冤枉。在选择采用哪种运行时库的时候一定要遵循一个原则:不好选择好的,只要适合就好。     但是,这话说起来容易做起来却并不容易。一般来说,我们都希望功能越多越好,效率越快越好,用起来越简单越好…结果发现没有一个合适的。因为wxWidgets不能换肤,QT和GTK又太庞大,FLTK和F

2017-10-10 10:35:19 271

原创 2、源码级跨平台开发——选择运行时库1

​ 在各种跨平台开发中,源码级跨平台开发其实是最适中的。这种方式兼顾了灵活性和跨平台。显然,效率也会是最好的。但是,调试起来会比较的不容易。尤其重要的是开发难度比较高。所以,很多人宁愿选择效率有损失的二进制级别跨平台。但是,很多时候程序的运行效率还是放在第一位的。此时,我们就不得不采用源码级跨平台开发。比如游戏引擎、强数据运算的算法、传输算法等等。 ​ 源码级跨平台开发的

2017-10-09 15:07:17 430

原创 1、跨平台开发——分类

​ 一般来说,提到跨平台开发的时候指的都是写一个可以在多个不同系列的操作系统中运行程序。但是,我们这儿值得跨平台相对比较广义一些。我们认为“平台”这个词本身是比较模糊的,它至少包含硬件平台和软件平台两种,所以,所谓的跨平台也就分跨硬件平台和跨软件平台之分。跨硬件平台最典型的例子就是Linux内核了。它既可以在x86架构的CPU上运行也可以在ARM平台(手机使用的Android系统就使用了Linu

2017-10-09 15:02:01 559

原创 0 关于跨平台开发

​ 一直以来都比较关注跨平台开发,无论是GUI还是CUI,想跨平台都不是一件容易的事。但是,跨平台开发都是一个难以避免的事情。没有人可以保证10年后大家电脑里面使用的都是什么操作系统,或许PC已经不再是主流的都有可能,更不用说Windows和Linux之争了。 ​ 毋庸置疑,跨平台很多很多的好处。但是,从程序员的角度看,跨平台却是个大麻烦。因为那样做,意味着程序员要考虑更多与程序逻辑无关的

2017-10-09 14:56:04 224

原创 为Bochs添加新的虚拟硬盘格式

1.1、问题的引出​ 对于虚拟机来说,硬盘其实就是一个文件。虚拟机里面的操作系统对硬盘的所有操作都是对该硬盘的操作。说白了就是虚拟机欺骗的操作系统,让它认贼作父。当然这个贼并没有任何的恶意,相反对于用户来说,反而是好事。比如我们备份虚拟机的硬盘就非常方便,把虚拟硬盘文件备份一下就可以了。当然,虚拟机也可以使用真实硬盘。这可是千真万确的呦。但是,很不幸的是Bochs并没有提供这种支持。 ​

2017-10-09 14:49:14 4706

原创 1.4 数据的接收 之 UDP解析

​ 对于UDP协议的处理是从udp_handler()函数开始的。我们知道,这个函数是从tcp_tick()调过来的,其参数就是要处理的数据指针。此时,我们已经可以确定这个数据包使用的是UDP协议。接下来就是判断一下该数据包是否是发送给我们的包。很简单,我们仅仅处理我们感兴趣的包就可以了。其中,包括广播包和明确发给我们的数据包(当然,还应该有我们加入的组播组的数据包,但是WatTCP并不支持组播

2017-10-09 10:39:34 2501

原创 1.2 数据的接收 之 数据粗加工

​ 当一个人从远方走来的时候,你是不是先分辨他是男是女,是认识还是不认识呢?肯定是这样的。WatTcp也是这样,当接到数据以后,它也会先判断一下是认识还是不认识,是UDP数据还是TCP数据,抑或是其他类型的数据。它会在两个函数中进行判断,一个是: ​ _eth_arrived():判断数据是PD_ETHER类型还是PD_SLIP类型。如果是其他类型就不认识,抛弃。 代码如下:

2017-10-09 10:12:49 325

原创 1.1 数据的接收 之 初来乍到

​ 暂且不说这个数据块是从哪儿来的,是怎么传到网卡上面来的。咱们先在要说的是,数据到达网卡以后会发生什么事情。很简单,网卡将数据交给需要该数据的程序就可以了。网卡是如何知道谁需要这个数据呢?难道是吼一嗓子,“喂,大家注意了,我这儿接到一个数据,有没有需要的?”。当然不是。它会告诉它的秘书──网卡驱动程序。网卡驱动程序再从他的笔记本中找到,都是谁告诉过他需要这些数据,然后调用对应的回调函数来拷贝这

2017-10-09 10:08:28 382

原创 0 WatTcp源码分析

一、什么是WatTCP​ 应该说很多人都没有听说的WatTCP。因为它是太古老了──dos时代的东西。简单的说,它是dos底下使用的一个网络库。它实现了UDP和TCP协议。UDP和TCP是TCP/IP协议族中最主要的协议。也就是说,用它我们就可以写dos下的网络通信程序了。二、WatTCP都是可以干什么​ WatTCP是一个网络编程库,使用它可以实现网络通信。比如我们可以使用它写局域网内传输

2017-10-09 10:03:44 378

原创 1.3 数据的接收 之 数据接收全程实例分析

#include <stdio.h> #include <mem.h> #include <wattcp.h> int main(int argc, char *argv[]) { unsigned long host = -1;//默认是广播地址,即可以接收一切主机发送来的消息 udp_Socket s; char myaddr[20], hisaddr[20

2017-10-09 09:54:30 541

原创 错误的返回值

错误的返回值  做为函数的最常见的输出方式,函数的返回值往往扮演者非常重要的角色。然而,在写程序的过程中,却经常不注意返回值的使用。遇到一些错误或者稀奇古怪的写法。下面就是一个经典案例。UINT ReadDisk(ULONG64 nSectorOff, LPVOID lpSectorData, UINT nCount){ if(m_nDiskIndex == INVALID_DISK_IN

2017-10-09 09:39:45 1258

JS调用C++的webbrowser

这是一个c++内web实现模拟登陆,还有获取web事件,以及c++与js的交互。 http://blog.csdn.net/nanjun520/article/details/53024503

2018-01-16

JeroMQ的jar包

JeroMQ是libzmq(ZeroMQ)的纯Java实现。这个是Android可用的jar包。 4.1.7版

2017-11-27

机器学习实战 非扫描版

机器学习实战 非扫描版 带书签 完整版 机器学习是人工智能研究领域中的一个极其重要的方向。在现今大数据时代的背景下捕获数据并从中萃取有价值的信息或模式使得这一过去为分析师与数学家所专属的研究领域越来越为人们瞩目。本书通过精心排的实例切入日常工作任务摒弃学术化语言利用高效可复用的Python 代码阐释如何处理统计数据进行数据分析及可视化。读者可从中学到一些核心的机器学习算法并将其运用于某些策略性任务中如分类、预测及推荐等。本书适合机器学习相关研究人员及互联网从业人员学习参考。

2017-10-19

putty 0.70 64bit

64位版本的putty,Windows下最好用的ssh客户端。 远程连接linux、树莓派等等

2017-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除