Monthly Archives: January 2018

C++之无聊小技巧三

上一篇扯了一点设计模式,本文接着讨论。以下内容仅供娱乐。 先看一个朴实的例子:

Posted in 杂物间 | Tagged , | Leave a comment

C++之无聊小技巧二

接下来扯一点设计模式。一般的业务框架会包含大量的模板方法模式,它的目的主要是为了复用代码。看个简单例子:

Posted in 杂物间 | Tagged , , | Leave a comment

C++之无聊小技巧

通用编程语言的基本特性都相差不远,同时也各有各的玩法。C++特性之多首屈一指,各种其他语言看不到的玩法,当然其实用性也有限。本文简单探讨一些无聊并有趣的技巧,特性或者Idiom。演示这些的目的在娱乐,并不建议在工程中使用。 诊断 C语言本身就有assert(),不过没有输出信息。C++11又加上static_assert(),支持输出信息。 在这之前可以自己实现带输出的诊断: 或者这样:

Posted in 杂物间 | Tagged , | Leave a comment

吃饱了撑的之实现drop函数?

本篇的灵感如题来自一个常见的函数drop(),他的用法是这样的: 它在函数式或者动态语言里非常常见。一般实现是这样: 这里借助了tail()。如果用Python或者Go就是xs[1:](尾递归优化不在探讨范围)。

Posted in 无用心得 | Tagged | 107 Comments

玛格哲学之洁癖的选择

玛格是我的好友,他智商极高,而且对这个喧嚣世界有很多独到的见解。本文的灵感就来自和他的对话。接下来的内容将以问答形式呈现,希望它们能引发你对这个世界的思考。随着你的思考越来越深入,将会感受到玛格的哲学。

Posted in 生活哲学 | Leave a comment

C++,STL的小故事

一位逻辑学家Robert Kowalski说过Algorithm = Logic + Control。什么是Logic?什么又是Control?其实就是业务逻辑和控制流。 大多情况下,我们要简化的流程就是循环。有个理念叫“no raw loop”,不是说禁止你用for loop,而是将循环流程封装起来,只在业务层暴露抽象算法接口。《Effective STL》中也有过类似探讨——Item 43. Prefer algorithm calls to hand-written loops。

Posted in 杂物间 | Tagged , | 3 Comments

加密?

本文会假设你了解过密码学,接着演示一个RSA算法实例。最后试图引发一些问题。下面进入正题。 非对称加密,又叫公开密钥加密。先看一个熟悉的场景 小明同学不厌其烦地ssh到某台机器,十年如一日地敲密码。通常情况下,这种密码又复杂又长。终于,小明受不了了。他先ssh-keygen生成密钥对,再将公钥ssh-copy-id到该机器,就此进入了免输密码时代。 这里利用的当然就是非对称加密技术。逻辑上我们拿到公钥不能推导出私钥,却能推导出加密信息,是不是有点玄学?所以现实中退而求其次,只求反向推导过程超级复杂即可。这里最常见的就是RSA算法,其名源为三个图灵奖作者的姓氏首字母。

Posted in 杂物间 | Tagged | 3 Comments

Vulkan大闷锅之结局

到这里,该创建该准备的,都基本就绪了。接下来就是绘图过程。 如果没有出错,结束的之后,你可以看到这个:

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Pipeline

吸取了前几代Api设计的教训,Vulkan采用了Monolith结构的PSO(Pipeline State Objects),是不是有当年Linux内核的既視感。这段时间疯狂发展的微服务,不知道在未来会不会也走回头路。 敢说Monolith,当然是包含的巨量的状态信息: Dynamic State Vertex Input State Input Assembly State Rasterization State Color Blend State Viewport State Depth Stencil State Multisample State

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Vertex Buffer

Modern OpenGL中,我们至少需要配置VBO和VAO,不过Vulkan只需创建好Vertex Buffer,类似VAO的信息将属于后续Pipeline的一部分。

Posted in 屠龙之技 | Tagged | Leave a comment