Windows 监控 iPhone 上的 HTTP 访问记录

有些测试场景需要知道在真实实体手机上访问我们开发的页面时产生了哪些不同的请求、访问了哪些链接。这个事情在 Windows 上做起来很简单,工具也有很多。浏览器自带的监控工具、HttpWatch 等工具都可以实现,今天介绍的主角 charles-proxy 也可以实现,但是 charles-proxy 强大的地方在于它可以建立一个临时代理服务器,手机上设置使用这个代理即可在 charles-proxy 中查看所有的浏览记录。

继续阅读

一步一步教你自己来编译 wxsqlite3 静态库

wxsqlite3 相比普通的 sqlite3 的好处就是可以对数据库进行加密,但这个 wxsqlite3 的编译过程真的是非常曲折,我自己也是折腾了几个小时才真正编译出来一个可用的 wxsqlite3 的静态库文件。那么接下来废话不多说开始准备环境。

继续阅读

使用 docker 快速搭建一个 VPN 服务器

你还在一条条命令复制粘贴搭建 SVN 服务器?快别麻烦了,一个 docker 镜像就都帮你搞定了。如果你的服务器安装了 docker,直接使用以下命令(要修改你自己的账户和密码信息哦)拉取一个已经配置好的 VPN 镜像就可以直接使用了,不用那么那麻烦的自己又改配置文件又要安装软件。

docker run \
    --name ipsec-vpn-server \
    --restart=always \
    -e VPN_IPSEC_PSK=你的PSK密码 \
    -e VPN_USER=你的VPN用户名 \
    -e VPN_PASSWORD=你的VPN密码 \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -v /lib/modules:/lib/modules:ro \
    -d --privileged \
    hwdsl2/ipsec-vpn-server

递归删除文件(支持通配符)

一直想做一个类似 Windows 命令行中 del 命令删除文件的功能,它支持 环境变量通配符可以递归,后来发现自己写这么一个小功能还真的不是一件容易的事情,没办法为了着急使用先临时做了一个小版本。代码有些缺憾。

  • 不支持环境变量
  • 不支持固定后缀文件递归删除
// example.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <iostream>


BOOL DeleteFiles(const std::wstring file_full_path)
{
    BOOL no_error = TRUE;
    WIN32_FIND_DATA win32_find_data = { 0 };

    std::wstring dir = file_full_path.substr(0, file_full_path.rfind(_T("\\"))).c_str();
    std::wstring file = file_full_path.substr(file_full_path.rfind(_T("\\")) + 1, file_full_path.length());

    if (dir.size() == 0 || file.size() == 0)
    {
        return FALSE;
    }

    HANDLE handle = FindFirstFile(file_full_path.c_str(), &win32_find_data);
    if (INVALID_HANDLE_VALUE == handle)
    {
        return no_error;
    }

    do
    {
        // 如果是目录递归操作
        if (win32_find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            // 排除 . 和 .. 两个文件夹
            if (_tcsicmp(_T("."), win32_find_data.cFileName) != 0 &&
                _tcsicmp(_T(".."), win32_find_data.cFileName) != 0)
            {
                // 根目录加上搜索出来的目录
                std::wstring new_full_path = dir;
                new_full_path += _T("\\");
                new_full_path += win32_find_data.cFileName;

                // 备份搜索出来的目录完整路径用以删除
                std::wstring new_dir = new_full_path;

                // 再加上要删除的文件名
                new_full_path += _T("\\");
                new_full_path += file;

                // 开始删除
                if (DeleteFiles(new_full_path))
                {
                    // 删除子文件后删除整个目录
                    RemoveDirectory(new_dir.c_str());
                }
            }
        }
        else
        {
            std::wstring full_file_name = dir;
            full_file_name += _T("\\");
            full_file_name += win32_find_data.cFileName;

            // 去除只读文件的只读属性
            DWORD file_attr = GetFileAttributes(full_file_name.c_str());
            if ((file_attr & FILE_ATTRIBUTE_READONLY) != 0)
            {
                SetFileAttributes(full_file_name.c_str(), file_attr & (~FILE_ATTRIBUTE_READONLY));
            }

            BOOL del_res = DeleteFiles(full_file_name.c_str());
            if (del_res)
            {
                std::wcout << full_file_name.c_str() << std::endl;
            }

            // 如果有一个文件删除失败则返回上层,上层若发现有删除失败的文件则不删除其斧文件夹
            if (del_res == FALSE && no_error == TRUE)
            {
                no_error = FALSE;
            }
        }
    } while (FindNextFile(handle, &win32_find_data) != 0);

    FindClose(handle);
    return no_error;
}

int _tmain(int argc, _TCHAR* argv[])
{
    _wsetlocale(LC_ALL, L"chs");

    DeleteFiles(_T(R"(C:\Users\ADMINI~1\AppData\Local\Temp\*)"));

    return 0;
}

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

Notepad++ 默认的制表符宽度是 4 个空格的大小,一个规模比较大的代码段或者 xml 等文件,小屏幕打开时看到的情景真的和让人着急,拖来拖去!有两种方案可以解决这种情况。

修改缩进为空格

这种我们不太推荐,但是有些公司或者团队会刻意要求就使用空格作为缩进。在一些前端开发的团队中比较多见。

修改缩进为2个空格的大小(依然使用 Tab 缩进)

这种情况是缩进依然使用制表符,但是宽度明显减小。

以上两种设置方法,都可以通过 设置->首选项->语言 界面中,通过勾选是否使用空格替换制表符和设置缩进宽度来达到你的需求。如下图:

当漏 – 针对技术人员的软件下载站

你有没有遇到过这样的一些场景,在某些时候你需要给一个新系统部署一些自己需要的软件和运行环境,而系统磁盘中有这个软件曾经下载的多个安装包副本,不知道安装哪个最好,每次都要从网络上重新下载。还有一些时候更换了自己不熟悉的环境,自己电脑又不在身边,想找一个自己习惯使用的软件到处搜索都搜索不到,不是版本不对就是下载地址失效了。因为以上种种情况和一些其他的重要原因,我打算开发一个自己使用的软件下载站,由自己更新和维护里面的软件,确保软件只有一份,只保留最新(但可以看到历史版本),需要的时候去下载安装就好,不怕病毒、不怕下载地址失效、不怕找不到某个软件。我想每个人都需要一个这样属于自己的下载站,所以就产生了“当漏”。与此同时,我也希望能帮助一些不愿意或者不熟悉软件更新流程的人,提供一个安全、稳定的下载站点。

站点地址

当漏:https://download.mycode.net.cn/

使用资源

因为需要一个稳定的下载服务器资源,同时该服务器要支持我们上传文件,国内无疑就只有阿里云 OSS、七牛对象储存等类似这些资源了,因为七牛有成熟的 SDK 封装(qiniu4js)和每个月免费的流量,所以我选择了七牛作为资源管理服务器。不用为资源丢失等情况烦心了。

站点截图

站点功能

目前站点已经开发完成了基本的上传和下载功能,但部分功能还不完善,计划中我将实现以下功能来丰富和完善这个下载站:

  • 周边社交功能(软件评论、分享等)
  • 管理员后台管理功能(用户管理、软件添加更新等)
  • 历史版本功能
  • 用户积分系统

代码托管

该下载站所有代码均托管在 github 上,代码完全开放,也希望有志之士能与我们一起参与到开发的队伍中,完善这个下载站。

查看视音频格式工具 MediaInfo

初期做音视频开发的开发人员经常需要查看某些视频文件的封装格式、压缩编码标准等信息,一般音视频播放工具就可以看到这些信息,但有些是没有这样的功能的,MediaInfo 是专门用于查看音视频文件的详细信息的,通过该工具的不同试图可以让将音视频的各类数据一览无余。

下载地址

https://mediaarea.net/en/MediaInfo/Download

相关截图

RESTful API 调试工具 insomnia

在开发 RESTful API 相关的工作中,经常需要测试我们的接口是否可以正常使用,或通过传递测试数据来验证接口的输出。本文介绍的工具可以说就是为了 RESTful API 测试而生。工具功能强大,多种试图模式。没有 Postman 的多余功能。

下载地址

https://insomnia.rest/download/

相关截图

使用七牛云对象储存缓存 wordpress 静态文件加速网站

最近博客的访问量越来越大,导致使用阿里云的限制流量的云服务器超出了流量备关停,分析了以后大部分是一些下载的资源和图片资源占用的流量比较大。所以希望能把这些资源缓存起来,刚好最近经常用七牛云,发现有类似的功能。所以自己做了一下顺便记录一下步骤(网上大部分教程已经比较老,不太好与现在七牛云的对应了)

继续阅读