使用netcat调试TCP/UDP

前言

最近开发用到了 socket ,然后开发好了之后,会按照一定的规则发送数据,但是客户端还没开发。

这时候我想要连上 socket 去调试,看看都发了什么,有没有按照规则发送数据。却由于客户端没有开发好却没法调试。

经过一番查找,找到了 netcat(使用的命令是nc) , 它可以用来连接 TCP ,恰好能满足我的需要,这样就非常方便,而不用等到客户端开发好了,才能调试。

Mac 体验ChatGLM2-6B

前言

前不久换了新 Mac ,性能还可以,于是就想试着体验一下 ChatGLM ,看看能不能跑起来。

所以今天就来体验一下 ChatGLM2-6B

C++ Lambda捕获局部变量与成员变量

前言

近来,在使用 C++ 写代码的时候经常会使用 Lambda 作为回调函数进行使用,在使用的过程中发现有些东西没弄懂。

就比如今天要说的,在 Lambda 中使用值捕获的情况下,捕获成员变量和局部变量是否一样,在 Lambda 内修改是否会影响外面的变量。

废话不多说,下面开始。

golang提取zip中的文件

前言

近来有个需求,需要从 zip 中提取一个文件出来,因为只用到其中的一个,其它的用不到,如果全部提取出来就有点多余了,在经过一番摸索发现还真可以。

实现

Go 标准库里有 archive/zip 这个包,所以我们可以直接使用

简化DNS管理:使用CoreDNS打造高效基础设施

前言

做网络开发的时候如果服务端没开发好,通常会在本地搭一个简单的数据服务,这时候又不想改代码里的域名,就可以通过自定义 DNS 服务器来把对应的域名改为本地主机。

有时候有些广告非常恶心,不想看,可以通过自定义 DNS 把对应的域名的 IP 改为本地,由于本地没有对应的服务所以就加载不出来,也就看不到广告了。这也是广告拦截的原理。

有些域名和 IP 之间相对固定,这时候自建 DNS 服务还能起到加速的作用,避免域名劫持。

这些都可以通过改 /etc/hosts 文件来实现,但是如果你有多台设备都想做到一样的效果,每台机器都要配置一下就非常麻烦,所以,我们就希望搭建一个 DNS 服务来让局域网内的所的所有设备都可以享受到同样的待遇。

我经过一番搜索后发现了 CoreDNS ,它配置简单是一个灵活、可扩展的 DNS 服务器,旨在简化 DNS 管理并提供高性能的解析服务。它不仅具备传统 DNS 服务器的功能,还支持插件机制,可以轻松地集成到各种现代化的网络环境中。于是就试着用它搭建了 DNS 服务。

Cocos2d加载网络图片

前言

Cocos2d-x 默认不支持加载网络图片,而加载网络图片是一个常见的需求,本文简单的实现了加载网络图片。

加载网路图片

加载一张网络图片需要以下几个步骤

  1. 从网络上把图片的二进制数据下载下来
  2. 使用图片的二进制数据创建 Image 对象
  3. 用创建好的 Image 对象初始化 Texture2D 对象
  4. 使用 Texture2D 对象创建一个精灵
  5. 把精灵添加到节点中
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
auto request = new cocos2d::network::HttpRequest();
request->setUrl(url);
request->setRequestType(cocos2d::network::HttpRequest::Type::GET);
request->setResponseCallback([=](cocos2d::network::HttpClient* client,
cocos2d::network::HttpResponse* response) {
    if (!response) {
        return;
    }

    if (!response->isSucceed()) {
        return;
    }

    std::vector<char> data;
    auto responseData = response->getResponseData();
    data.assign(responseData->begin(), responseData->end()); // 获取二进制数据

    auto image = new Image(); // 创建 Image对象
    image->initWithImageData(reinterpret_cast<unsigned char*>(data.data()), data.size()); // 填充图片数据

    auto texture = new Texture2D();
    bool isImage = texture->initWithImage(image); // 使用 Image 初始化 Texture2D
    if (!isImage) {
        texture->release();
        image->release();
        return ;
    }

    auto sprite = Sprite::createWithTexture(texture); // 使用 Texture2D 创建精灵
    sprite->setContentSize(Size(200, 200));
    sprite->setAnchorPoint(Vec2(0, 0));
    addChild(sprite); // 把精灵添加到节点中

    texture->release();
    image->release();
});

cocos2d::network::HttpClient::getInstance()->sendImmediate(request);
request->release();

总结

通过以上的步骤,就可以在 Cocos2d 中加载网络图片并显示出来。

Cocos2d Layer 中点击事件穿透的最佳解决方案

前言

熟悉 Cocos2d 开发的应该都知道,在一个场景中如果有多个 Layer ,这些 Layer 一个一个的叠在上面,当我们点击 Layer 上的按钮的时候可以正常的触发对应的事件。

但是,当点击的位置所在的 Layer 没有事件要响应,这时候触摸事件就会传递到下面的 Layer ,这是我们所不希望的,在经过一番搜索之后,找到了一个不错的方案,分享一下。

高效文件共享:使用Caddy打造快速、安全的File Server

前言

跨平台文件同步利器:使用Caddy搭建WebDav实现多设备间的无缝文件共中讲了如何使用 caddy 搭建 WebDav 服务,今天就来学一下如何在 caddy 中搭建静态文件服务器。

静态服务器

搭建一个静态服务器需要使用到 file_server 这个插件,这个插件是内置的,只要安装好了 caddy 就能够直接使用。

C语言字符串\0的截断陷阱

前言

字符串在 C 语言中是一种常见的数据类型,以字符数组的形式存储。而 C 语言中的字符串以 \0 (空字符)作为结束符。然而, \0 的存在可能导致一些问题,特别是在处理包含 \0 的字符串时,常见的字符串处理函数可能会出现截断的情况。

最近就在字符串上踩了坑。

跨平台文件同步利器:使用Caddy搭建WebDav实现多设备间的无缝文件共享

前言

我在 iOS 上使用 beorg 来管理日程,所以经常需要在电脑和手机之间同步。

beorg 支持 iCloudDropboxWebDav 等方式同步,使用 iCloud 是最简单的,但是我不想数据放到别人的服务器上面,所以我就不考虑了, Dropbox 就你懂的,所以就只剩下 WebDav 了。

WebDav 是一种基于 HTTP 协议的文件访问和管理技术,它提供了一种标准化的方式,使我们可以在网络上进行文件操作,如上传、下载、删除和重命名等。

我找了一圈看上了 Caddy ,它是一个功能强大且易于使用的 Web 服务器,它为搭建 WebDav 服务器提供了简洁而灵活的解决方案。所以今天就要用 Caddy 来搭建 WebDav 服务。

Cocos2d监听TextField输入

前言

Android 开发中,要监听 EditText 输入内容的变化,可以通过 addTextChangedListener 方法来实现,非常方便。

但是在 Cocos2d 中要监听 TextField 却没有那么容易,我经过实验发现有两种方法可以达到同样的目的,一种是监听文本的输入事件、另一种是在每一帧里监听文本变化。

Cocos2d-x之LoadingView

前言

Cocos2d-x 中实现加载动画可以提高用户体验和应用程序的交互性。加载动画通常会显示在网络通信或资源加载等操作期间,以告知用户当前操作正在进行中。

可惜的是 Cocos2d 并没有提供这种操作,不像 Android 提供了 ProgressDialog

所以今天就来自己实现一个。

Cocos2d-x之网络请求

前言

网络编程是开发中必不可少的一环, Cocos2d-x 提供了一个简单易用的网络模块,包括 HTTPWebSocketSocket 三种协议的支持。

它们都是基于标准的网络协议和 API 实现的,因此可以很容易地与其他网络库或服务端进行通信。

今天就来学习一下 HTTP 的使用。

Cocos2d-x环境搭建(Mac)

前言

是的我最近在学习 Cocos2d-x 。你可能会有疑问,已经 2023 年了为什么还要学习 Cocos2d-x ?

Cocos2d-x 最新一次发布是在 2019-12-04,已经 3 年没更新了,这时候学习不是明智之举。

我最初知道 Cocos2d-x 的时候还是上大学那会,在极客学院学了不少知识,后面没什么场景会用到,就再也没使用过了。

我最近又学了是因为我们有个项目要提供 Cocos2d-x 的版本,这么多年过去我也没想到还会有一天要用到。

我在搭建环境碰到了一些问题,记录一下。

让Hugo支持音频和视频

前言

前段时间写 MoviePy 系列博客的时候,要把处理的视频效果展示出来,我按照图片的写法去写视频发现并不能渲染出来,然后又用 HTML 的方式发现还是不行,经过一番研究找到了办法。

MoviePy: 使用MoviePy裁剪一个区域

前言

之前的几篇文章讲了 MoviePy 的一些基本使用,发现没有裁剪视频中的一个区域的功能,然后去搜文档发现要使用 fx 函数进行变换,我经过实验发现了可以直接使用 crop 方法直接进行裁剪。