Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

Python文本文件编码格式批量转换

发表于 2023-07-11 | 更新于 2023-08-17

最近获得一个Matlab高版本的项目代码,其文本文件时utf8编码格式,而我的Matlab版本比较低,只支持gbk编码格式,于是采用Python批量转换文本编码格式。代码如下:

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
import os,sys

extArray=(".m",".txt")

def convert( filename, in_enc = "UTF-8", out_enc="GBK" ):
try:
print("convert " + filename)
targetFile = open(filename,'r',encoding=in_enc)
content = targetFile.read()
targetFile.close()

targetFile = open(filename,'w',encoding=out_enc)
targetFile.write(content)
targetFile.close()
except:
targetFile.close()


def explore(dir):
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.join(root, file)
if(path.endswith(extArray)):
convert(path)

def main():
for path in sys.argv[1:]:
if os.path.isfile(path):
convert(path)
elif os.path.isdir(path):
explore(path)

if __name__ == "__main__":
main()

运行时采用如下命令:

1
2
3
python -m venv env
.\env\Scripts\activate
python utf8_to_gbk.py filepath

参考链接

  1. Python遍历路径下文件并转换成UTF-8编码,by weixin_33826268.
  2. Python 批量转换文件编码格式,by huang_0430.
  3. GB2312、GBK、GB18030 这几种字符集的主要区别是什么?,by zhihu.
  4. 一图弄懂ASCII、GB2312、GBK、GB18030编码,by horstxu.
  5. Unicode、UTF-8、UTF-16 终于懂了,by LinuxThings.

提取安卓已安装应用APK文件的方法

发表于 2023-06-15

需要从安卓系统中已安装的APP中提取出APP的安装包,因此研究了以下。

安装adb

下载adb:

https://dl.google.com/android/repository/platform-tools-latest-windows.zip

配置环境变量PATH

提取Apk

提取Apk的步骤如下:

  • 用usb数据线连接手机和电脑,启用手机开发模式,设置usb调试模式
  • 在cmd窗口中输入命令adb devices,查看手机和电脑是否连接成功
  • 执行 adb shell pm list packages 命令,查看需要提取的APP
  • 执行 adb shell pm path package_name 命令,获取APP安装路径
  • 执行 adb pull 安装包路径 输出路径 命令,生成APP的apk安装文件

参考链接

  1. windows下载安装adb(极其简单),by x2584179909.
  2. adb的安装和使用,by GX8010.
  3. 安卓提取apk安装包,by juejin.
  4. 从Android 手机取出已安装apk文件,by 雨打芭蕉.

ADS-B数据解析方法

发表于 2023-06-09 | 更新于 2025-04-26

广播式自动相关监视(英语:Automatic dependent surveillance – broadcast,缩写ADS–B)是一种飞机监视技术,飞机通过卫星导航系统确定其位置,并进行定期广播,使其可被追踪。空中交通管制地面站可以接收这些信息并作为二次雷达的一个替代品,从而不需要从地面发送问询信号。其他飞机也可接收这些信息以提供姿态感知和进行自主规避。

ADS-B地面接收设备系统结构

请参考ADS-B数据报文采集与解析系统的设计与实现。

ADS-B数据解析

请参考以下链接:

  • ADS-B数据格式解析
  • Cat021 报文解析
  • asterix
  • jASTERIX
  • EUROCONTROL Specification for Surveillance Data Exchange ASTERIX

Virtual Radar Server

Virtual Radar Server 是一个运行本地 Web 服务器的开源 .NET 应用程序。

参考链接

  1. ADS-B数据格式解析,by 陈晓伟.
  2. Cat021 报文解析,by 刘佳华.
  3. 接口和解析软件——ADS-B数据解析软件,by 北京通航电科.
  4. 广播式自动相关监视,by wikipedia.
  5. ADS-B数据报文采集与解析系统的设计与实现,by 索国伟,王金锁,郭荣华,赵 盼.
  6. asterix,by CroatiaControlLtd.
  7. jASTERIX,by hpuhr
  8. EUROCONTROL Specification for Surveillance Data Exchange ASTERIX,by eurocontrol.

Wireshark分析私有网络协议的方法

发表于 2023-06-06 | 更新于 2023-10-20

协议分析

使用WireShark分析私有网络协议的难度很高,具体方法可以参考以下链接:

  • 一次私有协议的流量分析
  • 私有协议的解密游戏:从秘文到明文

WireShark使用方法

请参考wireshark抓包新手使用教程。

协议分析插件开发

请参考以下链接:

  • Wireshark录取自定义报文的方法
  • 实战编写 wireshark 插件解析私有协议
  • Wireshark C 插件开发之插件框架
  • wireshark插件开发 - 自定义协议

注意事项:

  • 一个端口只能绑定一个协议解析器,不管改端口下有多少中报文格式
  • 解析树的TreeItem添加协议字段时,应使用TvbRange数据类型,否则对应hex数据无法高亮显示,示例如下:
1
2
3
4
local t = tree:add( proto_foo, buf() )
t:add_le( proto_foo.fields.bytes, buf(0,4) )
# 实现日期字段的显示
t:add_le( proto_foo.fields.string, buf(0,8), datetime)

数据包回放

wireshark以pcap格式保存抓取的流量。pcap的具体格式请参考Wireshark文件pcap的格式详细解析有实例(Global Header、Packet Header)

可使用tcpreplay、scap、xcap、netassisnt等工具回放pcap文件。

参考链接

  1. wireshark抓包新手使用教程,by Beng Dou.
  2. 一次私有协议的流量分析,by 聚铭网络.
  3. 私有协议的解密游戏:从秘文到明文,by Smoke0901.
  4. Wireshark文件pcap的格式详细解析有实例(Global Header、Packet Header),by Hollake.
  5. 实战编写 wireshark 插件解析私有协议,by 信安之路.
  6. Wireshark C 插件开发之插件框架,by 大川搬砖.
  7. Tcpreplay安装和使用,by lanyou1900.
  8. tcpreplay 快速入门使用,by CAPTIAN船长.
  9. pcap回放——tcpreplay,by zhuxian2009.
  10. Pcap,by wikipedia.
  11. 两款造包工具,科来和xcap,by 周中山.
  12. 报文回放工具:xcap的使用方法,by 荭知.
  13. wireshark插件开发 - 自定义协议,by m0w3n.
  14. Wireshark录取自定义报文的方法,by 卓_然.
  15. Adding Information To The Dissection Tree,by wireshark.

如何看待绩效考核

发表于 2023-06-06

陈浩大神关于绩效考核的观点我很认同,可惜大神已仙逝,无缘一见。以下是他的主要观点:

1)制定目标和绩效,目的不是用来考核人的,而用来改善提高组织和人员业绩和效率的。

2)人是复杂的,人是有状态波动的,任何时候都不应该轻易否定人,绩效考核应该考核的是事情,而不是人。

背景知识

OKR – Objectives, Key Result
KPI – Key Performance Indicator

重要观点

绩效分应该打给项目,打给产品,打给部门,打给代码,而不是打给人。

OKR 三大特性:0)由员工提出,1)以目标为导向。2)全员共享。

KPI 最大的问题就是用 OKR 里的 Key Results 拿来当目标,从而导致员工只知道要做什么,不知道为什么,不知道为什么,不能理解目标,工作也就成了实实在在的应付!

KPI本身是一种被动的、后置的考察,在工作完成之后考察员工的行为是否符合标准。因此,员工对于公司的目标漠不关心,只关心自己的KPI,因为这才是自己的最大的利益,为了达到KPI,有的员工开始不思考,并使用一些简单粗暴的玩法,其实这样既害了公司,也害了自己。自己的成长和进步也因为强大的 KPI 而抛在了脑后。

当然,KPI 绩效考核一般来说,不一定会毁掉公司的,相反,对于喜欢使用蛮力的劳动密集型的公司来说,可能还有所帮助,然而,KPI毁掉的一定是团队的文化和团队的挑战精神,以及创新和对事业的热情,甚至会让其中的人失去应有的正常的判断力(分不清充分和必要条件,分不清很多事的因果关系)。

参考链接

  1. 我看绩效考核,by 陈浩.

Vue.js封装echarts的方法

发表于 2023-04-15

在Vuejs项目中封装echarts的主要目的是简化echart的使用难度,使之不再需要编写复杂的options,只需传递需要绘制的数据即可。

请参考vue项目中封装echarts的比较优雅的方式。

参考链接

  1. vue项目中封装echarts的比较优雅的方式,by liyoro.

C#之NuGet打包和离线安装

发表于 2023-04-08 | 更新于 2023-10-26

最近研究一个C#开源项目,发现在离线的情况下无法顺利编译链接,其原因是缺乏NuGet安装的程序集。因此研究一下NuGet打包和离线安装的方法。

NuGet简介

NuGet是一个自由开源软件包管理系统。用于Microsoft开发平台。以前称NuPack。 2010年首次发布。已经进化为一个庞大的工具与服务生态系统。

下载Nuget程序包

  1. 进入Nuget官网:https://www.nuget.org/,

  2. 搜索框里搜索需要的安装包,例如MaterialDesignThemes,一个主题包,点击自己所需的安装包。

NuGet离线安装软件包

参考链接

  1. C# NuGet打包和离线安装,by mob604756fda125.
  2. NuGet是什么?理解与使用(上),by 6号咸鱼.
  3. Visual Studio NuGet离线安装包,by 苏守坤.

Java之SSH框架学习笔记

发表于 2023-04-03 | 更新于 2023-04-04

最近处理的几个项目都是用Java语言编写的,学习一下。

Web.xml配置文件

Listener

为web应用程序定义监听器,监听器用来监听各种事件,比如:application和session事件,所有的监听器按照相同的方式定义,功能取决去它们各自实现的接口,常用的Web事件接口有如下几个:

  • ServletContextListener:用于监听Web应用的启动和关闭;
  • ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
  • ServletRequestListener:用于监听用户的请求;
  • ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
  • HttpSessionListener:用于监听用户session的开始和结束;
  • HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。

主要用于监听Web应用事件,其中有两个比较重要的WEB应用事件:应用的启动和停止(starting up or shutting down)和Session的创建和失效(created or destroyed)。

Filter

Filter可认为是Servle的一种“加强版”,主要用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链。使用Filter的完整流程是:Filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet进行处理并生成响应,最后Filter再对服务器响应HttpServletResponse进行后处理。Filter与Servlet具有完全相同的生命周期,且Filter也可以通过来配置初始化参数,获取Filter的初始化参数则使用FilterConfig的getInitParameter()。

换种说法,Servlet里有request和response两个对象,Filter能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response,Filter其实是一个Servlet链。

以下是Filter的一些常见应用场合:

  • 认证Filter
  • 日志和审核Filter
  • 图片转换Filter
  • 数据压缩Filter
  • 密码Filter
  • 令牌Filter
  • 触发资源访问事件的Filter
  • XSLT Filter
  • 媒体类型链Filter

Servlet

Servlet通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。Servlet是个特殊的java类,继承于HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应则两种请求,必须重写doGet()和doPost()方法。

Bean

JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。

Web.xml加载顺序

总的来说,web.xml的加载顺序是:->->->。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

对于某类元素而言,与它们出现的顺序是有关的。以为例,web.xml中当然可以定义多个,与相关的一个元素是,注意,对于拥有相同的和元素而言,必须出现在之后,否则当解析到时,它所对应的还未定义。web容器启动初始化每个时,按照出现的顺序来初始化的,当请求资源匹配多个时,拦截资源是按照元素出现的顺序来依次调用doFilter()方法的。同类似,此处不再赘述。

Servlet里有request和response两个对象,Filter能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response,Filter其实是一个Servlet链。

Struct2

请参考Struct2 基础介绍 。

Struct2工作流程

图1 Struct2工作流程

Spring

请参考Spring MVC 解析之 DispatcherServlet。

Spring工作流程

图2 Spring工作流程

参考链接

  1. web.xml 配置文件 超详细说明!!! ,by 吴川华仔.
  2. web.xml文件中加载顺序的优先级 ,by laolu0837.
  3. Spring 、SpringMVC 、Struts2之间的区别,by 刘二雄.
  4. Struct2 基础介绍 ,by shiyuan310.
  5. 深入Struts2的过滤器FilterDispatcher–中文乱码及字符编码过滤器,by 关键步就几步.
  6. Spring整合Struts2步骤及完整实例,by Star_Ship.
  7. Spring和struts2整合详解,by Damon.
  8. spring整合struts2过程详解,by 西西嘛呦.
  9. Spring MVC 解析之 DispatcherServlet,by 摆码王子.
  10. 一文读懂SpringMVC工作流程,by Wizey.
  11. servlet的url-pattern匹配规则详细描述,by 51kata.
  12. Listener,Filter,Servlet执行顺序和生命周期,by laolu0837.
  13. springmvc 的参数绑定,springmvc和 struts2的区别,by 双斜杠少年.
  14. 如何集成Struts和Spring,by gxhsnowflower.
  15. Struts2和Spring集成,by yiibai.
  16. Spring 和 Struts 集成,by 王如霜.

Vue2项目配置flow类型检查

发表于 2023-03-24

Flow 是 JavaScript 代码的静态类型检查器。它做了很多工作来提高你的工作效率。使您编码更快、更智能、更自信,并且规模更大。

Flow 通过静态类型注解检查你的代码是否有错误。这些 类型允许您告诉 Flow 您希望您的代码如何工作,Flow 将确保它确实以这种方式工作。

Vue2的源代码就使用了Flow进行静态类型检查。下面介绍在Vue2项目中安装配置使用Flow的方法。

安装步骤

  • Babel是一个支持 Flow 的 JavaScript 代码编译器。Babel 将获取您的 Flow 代码并删除所有类型注释。
1
npm install --save-dev @babel/core @babel/cli @babel/preset-flow

接下来,您需要在项目的根目录下创建一个文件,即.babelrc, 并将”@babel/preset-flow”配置在您的”presets”.

1
{ "presets": ["@babel/preset-flow"] }
  • flow可以直接通过npm或者yarn安装。
1
npm install --save-dev flow-bin

安装完成后在package.json中加入下面的脚本:

1
2
3
"scripts": {
"flow":"flow check"
}

使用方法

配置flow

首先生成flow配置文件.flowconfig:

1
.\node_modules\.bin\flow init

使用flow

新建一个文件index.js:

1
2
// @flow 
let a:number = '3';

// @flow或者 /* @flow */告诉flow检查这个文件
输入npm run flow 执行类型检查

注:在vue单文件组件使用flow需要额外配置

注:项目路径不能存在中文

请参考vue2.0项目配置flow类型检查。

参考链接

  1. vue2.0项目配置flow类型检查,by ltinyho.
  2. Flow静态类型检查及在Vue项目中的使用,by 美团点评点餐.
  3. .flowconfig,by flow.org.
  4. flow高级配置,by zhenyong.
  5. flow从零开始—-安装和配置,by advance100.
  6. npm发布以@开头命名的public包!!!,by ty41232X32.

Threejs学习笔记

发表于 2023-03-23 | 更新于 2023-03-29

Three.js是一个跨浏览器的 JavaScript 库和应用程序编程接口(API),用于使用WebGL在Web 浏览器中创建和显示动画3D 计算机图形。

Three.js 允许使用JavaScript语言创建图形处理单元(GPU) 加速的 3D 动画作为网站的一部分,而无需依赖专有浏览器插件。

Three.js入门教程

请参考一篇文章了解 threejs 在 vue 项目中的基本使用。

three.js 动画系统

参考链接

  1. 轨道控制器(OrbitControls),by threejs.
  2. 一篇文章了解 threejs 在 vue 项目中的基本使用,by wjw1014.
  3. 用封装好的threejs库快速生成全景-Panolens.js,by 乘风转舵.
  4. 关于梳理封装Threejs工具类这档事,by FlyTeng_1874.
  5. Three.js - 监听window 的 resize 事件,使浏览器窗口变动自适应,by 已注销.
  6. How to trigger an event when element is resized in Vue.js?,by stackoverflow.
  7. Resize Observer API,by mozilla.
  8. Three.js Animation in Canvas doesn’t resize properly in Vue Application,by stackoverflow.
  9. three.js 动画系统,by discoverthreejs.
上一页1…91011…53下一页

Jack Huang

521 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse