热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:技术的极限(11):有趣的编程

本文由编程笔记#小编为大家整理,主要介绍了技术的极限(11):有趣的编程相关的知识,希望对你有一定的参考价值。目录:**0x01达夫设备**0x02switch
本文由编程笔记#小编为大家整理,主要介绍了技术的极限(11): 有趣的编程相关的知识,希望对你有一定的参考价值。

目录:
** 0x01 达夫设备
** 0x02 switch+goto
** 0x03 硬件加速
** 0x04 O(1)大数据传输
** 0x05 C语言的异常跳转
** 0x06 非欧几里得引擎
** 0x07 为什么现代软件开发令人伤心
** 0x08 设计/内容/商业的交集=付费社区
** 0x09 高阶初学者的系统设计介绍
** 0x0A 概率统计可视化教程
** 0x0B Flash已死,Flash不死
** 0x0C 最快的大数乘法算法
** 0x0D 深度SVG动画生成
** 0x0E why GNU grep is fast

0x01 达夫设备

https://www.cnblogs.com/lihuidashen/p/13253337.html

void send( int * to, int * from, int count){
int n = (count + 7 ) / 8 ;
switch (count % 8 ) {
case 0 : do { * to ++ = * from ++ ;
case 7 : * to ++ = * from ++ ;
case 6 : * to ++ = * from ++ ;
case 5 : * to ++ = * from ++ ;
case 4 : * to ++ = * from ++ ;
case 3 : * to ++ = * from ++ ;
case 2 : * to ++ = * from ++ ;
case 1 : * to ++ = * from ++ ;
} while ( -- n > 0 );
}
}

混合switch-case和do-while循环,我从来没用过这种写法,有点两种不同齿轮混合的味道。

0x02 switch+goto

技术图片

parser代码里常见到这种路径:switch-case里多个case分支的代码有重复部分,常见的把重复的部分作为一个独立的case,例如这里的VK 这个case,那么VKINT和VKFLT只是预处理部分和VK不同,就会用switch-case来做成两个case处理不同的部分,再goto到VK这个case。 只是switch-case本来就可以上一个case直接FALLTHROUGH到下一个case,因此VKFLT里面就不需要goto,但是VKINT里需要加个goto,否则会走 VKINT+VKFLT+VK 三处代码的合并逻辑,就不对了。

0x03 硬件加速

软件写多了,会发现很多物理世界的做法能解决很多看上去麻烦的问题。上周去了一家芯片设计小公司看,我们很多算法,他们可以把一些固定参数,固定流水的算法,直接设计进固化的芯片里。减少了用通用CPU指令写算法的时间消耗,非常高性能。当然,这是非通用芯片,都是定制用的。这个让我脑洞大开,我们被通用CPU限制了很多脑洞。整个算法就是一个指令输入数据,异步等待数据返回即可,算法代码变成了IO代码。硬件加速大概是这样:芯片定制 > FPGA > GPU > CPU,每一级都有数量级的性能差异,通用性则反过来。这就是那些做AI芯片是在干什么,所谓AI芯片,就是把深度神经网络的算法,把某些底层的算法控制流,直接设计到芯片的逻辑们控制流里去。

0x04 O(1)大数据传输

https://www.cnblogs.com/AllenMaster/p/13237362.html

Azure Data Box

Azure直接寄硬盘盒给客户,客户把需要上传到Azure的数据直接写硬盘,再把硬盘寄回给Azure,后者帮你直接把硬盘数据导入云存储。

涨见识了,这么做最“高效传输”。

0x05 C语言的异常跳转

技术图片

这个是c里面setjmp和longjmp模拟异常跳转的代码,非常规控制流。不过和上面的那个“达夫设备”代码还是不一样。

0x06 非欧几里得引擎

github: https://github.com/HackerPoet/NonEuclidean

技术图片
技术图片
技术图片

从外面看很短的墙,进去后很长。从外面看很长的墙,进去后看很短。在里面绕几圈后,外面的其他房子越变越大,反向绕几圈后,外面的房子越变越小。非欧几何的很多定理都跟欧几里得几何不一样。例如:三角形的内角和小于180度,或者三角形的内角和大于180度,两条平行线会相交等等。

A NonEuclidean rendering engine for Windows, written in C++ OpenGL. To see what this code is about, check out this video: https://youtu.be/kEB11PQ9Eo8

0x07 为什么现代软件开发令人伤心

https://www.roguelazer.com/2020/07/etcd-or-why-modern-software-makes-me-sad/

etcd 共识算法最早是为一个并不成功的项目CoreOS Container Linux编写的,并且提供了简单的HTTP API,这个作者用它写了很多项目。然后,自从K8S用了etcd之后,etcd的接口被加入了gRPC的复杂接口,内部实现也加了了很多侵入式的数据结构。作者认为,这之后etcd就变的不正交了,不再简洁友好。作者认为K8S是自从systemd之后又一个令系统变的复杂的系统,一个显著的特点就是它对etcd库本身的影响。此外,K8S迫使你编写一堆YAML配置系统,在一个Mesh里编写代码,令现代软件开发变的更糟糕,令人(特别是作者)伤心。

这就是作者写这篇文章的全部。一句话:作者不喜欢K8S,更不喜欢K8S影响了etcd项目,让它变得不再正交和简洁。

0x08 设计/内容/商业的交集=付费社区

https://subpixel.space/entries/come-for-the-network-pay-for-the-tool/
技术图片

0x09 高阶初学者的系统设计介绍

Systems design for advanced beginners:
https://robertheaton.com/2020/04/06/systems-design-for-advanced-beginners/

技术图片

0x0A 概率统计可视化教程

https://seeing-theory.brown.edu/basic-probability/cn.html

顺便记录下,有一天朋友发了个图说他买的棘轮螺丝套筒套件,他无聊排序了下,发现漏了,于是找卖家补发了货物:
技术图片

我想起了这是个贝叶斯统计的好题材,出了个题:


  • 一个棘轮螺丝套筒工厂,组装漏掉零件的概率是1%,组装不漏零件的概率是99%;

  • 一个棘轮螺丝套筒图片识别AI,在零件丢失的情况下,检测成功的概率是90%,在零件不丢失的情况下,有5%的概率会误报;

  • 现在,一个棘轮螺丝套筒套装被AI检测为漏装了零件,请问这个棘轮螺丝套筒实际漏装了零件的可能性多大?


0x0B Flash已死,Flash不死

http://www.flashgamehistory.com/

FLASH
GAMES

shaped the video game industry

Flash is dead. But the influence of Flash games on modern gameplay is inescapable.

技术图片

0x0C 最快的大数乘法算法

https://www.quantamagazine.org/mathematicians-discover-the-perfect-way-to-multiply-20190411/
技术图片

0x0D 深度SVG动画生成

https://github.com/alexandre01/deepsvg

技术图片

0x0E why GNU grep is fast

作者回复:https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

Summary:


  • Use Boyer-Moore (and unroll its inner loop a few times).

  • Roll your own unbuffered input using raw system calls. Avoid copying
    the input bytes before searching them. (Do, however, use buffered
    output. The normal grep scenario is that the amount of output is
    small compared to the amount of input, so the overhead of output
    buffer copying is small, while savings due to avoiding many small
    unbuffered writes can be large.)

  • Don‘t look for newlines in the input until after you‘ve found a match.

  • Try to set things up (page-aligned buffers, page-sized read chunks,
    optionally use mmap) so the kernel can ALSO avoid copying the bytes.

The key to making programs fast is to make them do practically nothing. ??

--end--





























推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
author-avatar
尘世聚散
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有