Wisdom of Software Engineering 📌
本篇着重于收集编程和软件工程中的洞察和智慧,大部分来自业内顶尖的前辈,例如Joel Spolsky, John Carmack等等,也有个人的思考。当我这些年经历过不同行业、国内外不同公司、不同技术栈后,在真正认同这些观点对于产能带来多大提升的同时,也发现它们是多么容易被忽略。总结在这里,常看常新。 ...
本篇着重于收集编程和软件工程中的洞察和智慧,大部分来自业内顶尖的前辈,例如Joel Spolsky, John Carmack等等,也有个人的思考。当我这些年经历过不同行业、国内外不同公司、不同技术栈后,在真正认同这些观点对于产能带来多大提升的同时,也发现它们是多么容易被忽略。总结在这里,常看常新。 ...
之前曾提到过,这本写于1937年的书曾经入选日本教材,并影响了宫崎骏一生的轨迹。他曾写文解释这本书如何触发他思考当时的社会以及未来的世界:(这本书)传达出一个讯息,那就是无论处在多么艰困的时代或是残酷的时代,都要活的像一个人。我读后深感这虽是一本写给少年的读物,读起来很轻快,却非常深刻隽永,令人动容。合上书页,我仿佛也看到那远方的天空、无尽的人们。 “要成为能帮助世界进步的人(Make the world a better place)”——我再次坚定了内心的信念。 相信这本书会一直流传下去。豆瓣读书, GoodReads 舅舅的笔记片段1 所有小孩子的想法都不像地动说,而像天动说。请你观察小孩的知识,他们一切都以自己为中心。电车轨道在我们家左边,邮筒在我们家右边,菜贩在弯进转角的地方。静子家在我们家对面,阿三家在我们家隔壁。小孩子的想法就像这样,一切都以自己家为中心。人是其他人的过程也一样,例如那是我爸爸的同事、这是我妈妈的亲戚……长大之后,想法或多或少的会慢慢接近地动说……人习惯以自己为中心思考、判断事物;即使长大了,这种特性同样根深柢固。等你长大了就会明白,在广大的世界上,能完全改掉以自己为中心思考的习惯的人,其实非常稀少。尤其碰到事关利害得失的时候,要跳脱自己的立场作出正确的判断,实在很难。面对利害得失如果还能抱持像哥白尼那样的想法,可说是非常了不起。……如果人一直坚信地球是宇宙的中心,恐怕就无法了解宇宙真正的样貌,同样地,总是以自我为中心判断事物,也会让人不了解周遭事物的真相。这种人一定看不清重大的真理。 ...
在实际项目里,我们经常需要把二维坐标 (x, y)、或两个整型键合成一个“唯一”的整型键,方便做哈希表/数组索引;又希望能在需要时还原回原来的两个键。这样一个反直觉的需求真的有解决方案吗?“配对函数”(Pairing Function)隆重登场。 ...
最近一两年,用AI的方式变化得太快了。每当我指望它“一次给出完美答案”,十有八九会失望;可当我把任务拆成几步,允许它犯错、允许我随时插话校准,结果反而稳、而且更快。这件小事让我意识到:我们真正迫切需要的,或许不只是“更强的模型”,而是“更好的协作方式”。 ...
近期看了一些大佬对AI时代软件形态的探讨,记录一些感悟。 编写软件不再只是程序员可以做的酷酷的事。 过去几十年的发展,“机器”的形态发生了巨大变化,现在,LLM本身也变成了“机器”。 ...
🍎本文源自对Apple WWDC 2018 的一次公开分享的记录提炼。什么是优秀的设计,它为什么重要,如何追求品质感……这些话题不仅是设计师需要考虑的专业问题,也是每个人打造自己的生活需要知道的内在规律。Video ...
前几日参加了Unite上海2024,受益颇多。本篇先就相对感兴趣的小游戏平台WebGL技术方案为引子,引出一些关于WebAssembly, IL2CPP, 以及.NET 8对Web平台支持等话题。 ...
本文也是PhysX物理引擎系列的番外篇。介绍了笔者基于CharacterController(CCT)设计的一个新的角色控制器,在修补Unity/PhysX的CCT的缺陷外,还增添了若干和物理交互相关的有趣特性。代码已经过实际项目验证,这里仅保留和具体业务无关的部分。 背景和需求 前文结尾处提到一些PhysX自带的CCT(Unity也是基于此二次封装出CharacterController组件)在实际游戏开发中的缺点,这里再次总结: CCT不参与碰撞系统的检测。仅当CCT自身移动时会判断是否被其他刚体或CCT阻挡。这就造成一个BUG:CCT自身静止时,其他运动物体会穿过CCT且没有事件触发。官方论坛上有苦主持续8年向Unity反馈这个问题但无法解决,目前已知的唯一绕过方式是每帧给CCT附加一个微小的位移(下文中的SlightMove)。 Unity提供的接口CharacterController.isGrounded效果很不稳定。其内部只是判断CCT上次运动后底部是否触碰物体。即collisionFlags & eCOLLISION_DOWN::eCOLLISION_DOWN。但在上下坡或崎岖地形时,很容易出现侧面触碰或短暂浮空。如果用该接口驱动动画表现甚至跑跳逻辑,效果很差。需要自行基于SceneQuery封装出更加稳定的判定着地的函数。 Unity没有暴露CCT.upVector,角色总是竖直向上的。要实现反重力鞋在任意斜面上行走或像马里奥银河那样在曲面上跑跳穿梭,只能放弃使用CCT但也放弃了其在操作手感上的改善。其实拿到Unity的源码后,只用了十分钟将底层字段暴露到C#层就解决了该问题。 新的角色控制器需要增加的物理交互特性有: ...
本文主要介绍PhysX角色控制器相关的内部机制和使用方法。 PhysX物理引擎系列记录了在实际项目中使用Nvdia PhysX 3.4物理引擎(Code, Doc)的一些经验,有不少对官方资料的补充。 Warm-up Character Controller (a.k.a CCT) is a special physical object handling player movement. In PhysX, CCT is not a Rigidbody, which means it does not integrate seamlessly in collision system. However, there is a kinematic actor underlying in CCT, and you can attach custom data via PxController::getActor()->userData. ...
本文主要介绍PhysX刚体动力学相关的内部机制和使用方法。 PhysX物理引擎系列记录了在实际项目中使用Nvdia PhysX 3.4物理引擎(Code, Doc)的一些经验,有不少对官方资料的补充。 Warm-up We already know that Kinematic and Dynamic rigidbody are both PxRigidDynamic in PhysX. Use PxRigidBody::setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, true) to turn a dynamic actor into kinematic at runtime, and vice versa. Kinematic and Static actors always stay in the same location unless you move them in your code. When moving Static actors, their collisions with dynamic actors can be wrong. When moving Kinematic actors, you should always use PxRigidDynamic::setKinematicTarget in each frame rather than PxRigidActor::setGlobalPose to achieve correct collisions with other dynamic actors. In this post we focus on dynamic rigidbody movement, e.g., force and torque, gravity, sleeping and so on. ...