技术无界

不忘初心,永不止步

Skinned Mesh原理解析和一个最简单的实现示例

Skinned Mesh原理解析和一个最简单的实现示例 作者:n5 本文的github地址:https://github.com/happyfire/SkinnedMeshDemo

2008-10-19 23:24:00

阅读数:26439

评论数:24

着色模型和光照模型

#着色模型: 高洛德着色(Gouraud shading):即基于顶点计算颜色后在渲染的图元内部进行线性插值。当光照模型中有非线性的计算时(如计算高光反射),这种逐顶点的光照就会出问题。另外由于是图元内部线性插值,会导致渲染图元内部的颜色总是暗于顶点处,在某些情况下会产生明显的棱角现象。 Pho...

2018-11-27 17:30:37

阅读数:24

评论数:0

密码技术科普

密码学家的六个工具:对称密码,公钥密码,单向散列函数,消息认证码,数字签名,伪随机数生成器。 单向散列函数(也称消息摘要): 单向散列函数可以实现完整性的检查,可以辨别出“篡改”,但无法辨别出“伪装”。 当我们不仅需要确认消息的完整性,同时还需要确认消息是否真的来自发送者,紧靠完整性检查是不...

2018-06-11 15:33:20

阅读数:310

评论数:1

[go] binary.Write 小坑一个兼论go的错误处理哲学

有如下go代码: const ( foo = 123 ) buffer := new(bytes.Buffer) binary.Write(buffer, binary.BigEndian, foo) fmt.Println(buffer.Len()) 输出结果是0,foo没有写入到bu...

2018-01-23 18:16:12

阅读数:441

评论数:0

[go] Socket创建之后,listen/connect之前无法执行操作?

使用go的net库去创建一个tcp客户端连接,使用net.Dial就行,问题是Dial返回的是一个创建好且连接上的connection。如果需要在连接之前对socket做一些操作,就不行了。 比如这个问题: https://github.com/golang/go/issues/21820#i...

2018-01-11 17:24:29

阅读数:329

评论数:0

使用nc & pv测试发送速度

最近写了一个用于测试网络速度的发包工具,再工具发布之前,我使用nc配合pv对工具进行了测试,即确认工具发送的数据流量和nc/pv接收到的是一致的,确认工具是按设定参数发送数据。先说一下发送数据的工具的工作原理 对于TCP,参数为每次写入的数据块的大小,以及数据块的数量,比如每次写入1M,共发送10...

2017-12-29 20:04:16

阅读数:1089

评论数:0

TCP理论带宽计算

TCP理论上的有效带宽计算(即每秒可以传输多少负载数据) 以千兆网为例,首先要明确千兆网的速度为1000Mbps,即每秒可传输1000M个bit,且这儿1M = 1000 K = 1000000。那么千兆网的速度就是125MB/s,即每秒传输125000000个字节。(如果按MiB计算,就是119...

2017-12-29 20:03:12

阅读数:1181

评论数:0

go语言的类型断言(Type Assertion)

x.(T) 检查x的动态类型是否是T,其中x必须是接口值。 * 如果T是具体类型 类型断言检查x的动态类型是否等于具体类型T。如果检查成功,类型断言返回的结果是x的动态值,其类型是T。换句话说,对接口值x断言其动态类型是具体类型T,若成功则提取出x的具体值。如果检查失败则panic。 例如:...

2017-12-14 17:31:27

阅读数:796

评论数:1

linux c开发: 关于malloc(0)

因为有一个bug栽在malloc(0)上,所以有必要记录一下。先说结论: * malloc(0)是允许的,并且返回一个非NULL的指针,至少在我工作的linux系统上是这样的。man文档里面说: malloc() allocates size bytes and returns a point...

2017-09-01 15:03:22

阅读数:616

评论数:0

linux c开发: 程序崩溃时保存堆栈信息并解析具体代码行

写服务器程序最怕的是百分之一的概率崩溃了,你却不知道为啥,想重现又重现不出来。所以在崩溃时将当时的堆栈保存下来非常重要。网上有很多文章讲解怎么保存,但我使用了发现可以保存,但是没有函数名称和行号,仍然没法定位问题。在stack overflow上有人说只有动态库的代码才能显示出函数名和行号,想完整...

2017-08-28 17:17:51

阅读数:2744

评论数:0

linux c开发: 在程序退出时进行处理

有时候,希望程序退出时能进行一些处理,比如保存状态,释放一些资源。c语言开发的linux程序,有可能正常退出(exit),有可能异常crash,而异常crash可能是响应了某信号的默认处理。这里总结一下这些情况,如何获取一个统一的退出处理的点,说白了就是写一个回调函数,让他在程序正常或异常退出时调...

2017-08-28 16:40:47

阅读数:2806

评论数:2

linux c开发: 处理命令行参数

在Linux c语言开发时,可使用getopt_long获取命令行参数,这个方法同时支持短选项和长选项,比较方便。(因为选项可以带参数,为了不和命令行参数混淆,这里命令行参数称为选项) 边看代码,边做分析:#include <stdio.h> #include <getopt....

2017-08-17 19:23:24

阅读数:1129

评论数:0

app扩展输出log到文件并从containing app读取

app扩展,即appex,如today widget,network extension之类。现在有个需求是在开发扩展时,将log输出到文件,在必要的时候获取文件内容进行查看。此处不讨论将log通过网络传输到服务器的情况,也不讨论使用类似CocoaLumberjack这样的第三方库的情况,我们简单...

2017-08-17 18:31:40

阅读数:594

评论数:0

(libev) cannot allocate xxx bytes, aborting 问题的一种触发条件

最近在项目中使用了libev,遇到一个很奇怪的crash,服务器运行随机时间后有一定的概率奔溃,输出的最后一行log是: (libev) cannot allocate xxx bytes, aborting。 因为捕捉了SIGINT信号,所以可以确定崩溃就是由于libev的这个abort。开...

2017-08-01 11:15:56

阅读数:806

评论数:0

ss-libev 源码解析udp篇 (4)

本篇分析remote_recv_cb,这是整个udp转发的反方向,即读取从后端发送过来的数据再发送给前端。对于ss-server,读取到的数据是目标地址的udp服务器发送回来的响应数据,ss-server需要将其包装成ss的格式并加密发送给ss-local;对于ss-local接收到的数据就是ss...

2017-06-26 18:57:00

阅读数:2090

评论数:1

ss-libev 源码解析udp篇 (3)

本篇分析server_recv_cb,这个是udp转发中最重要的函数。server_recv_cb: 当ss-local或ss-server接收到来自前端的udp数据包时调用。这个函数代码比较多,除了local和remote(即ss-server),还有redir, tunnel,android的...

2017-06-23 18:19:45

阅读数:1224

评论数:0

ss-libev 源码解析udp篇 (2)

UDP relay的代码基本都在udprelay.c中,无论ss-local还是ss-server的代码都在一起,使用宏MODULE_LOCAL,MODULE_REMOTE等区分开。代码虽然不是很多,但是由于ss-local和ss-server以及ss-redir,ss-tunnel等夹杂在同一个...

2017-06-23 17:12:37

阅读数:1354

评论数:0

ss-libev 源码解析udp篇 (1)

shadowsocks-libev udp转发原理简介 ss_local作为一个sock5服务器,接收来自socks5客户端的数据包。在ss_local启动后,即创建一个udp socket,并bind到一个端口。该udp socket用于接收所有来自socks5客户端的udp包。 根据socks...

2017-06-23 15:56:08

阅读数:3240

评论数:1

ss-libev 源码解析local篇(5):ss-local之remote_send_cb

remote_send_cb这个回调函数的工作是将从客户端收取来的数据转发给ss-server。在之前阅读server_recv_cb代码时可以看到,在STAGE_STREAM阶段有几种可能都会开启remote->fd的写事件的监听,从而当有写事件触发时调用remote_send_cb。从代...

2017-06-21 14:30:22

阅读数:1167

评论数:0

ss-libev 源码解析local篇(4): server_recv_cb之STAGE_STREAM

继续探索server_recv_cb,我们已经来到了STAGE_STREAM状态。如果在0.05秒的timer来之前客户端就有数据过来,server_recv_cb被调用,此时已经在stream状态就会读入数据到remote的buf中;如果timer先到了就是直接调用的server_recv_cb...

2017-06-14 10:21:52

阅读数:1271

评论数:0

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