成为程序员
准备把这些年总结的,关于程序员的一些零散的经验汇总成一本书,书名暂定为:《成为程序员》
在线阅读地址:
https://become-a-programmer.2baxb.me
github地址:
http://github.com/qdaxb/become-a-programmer
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
准备把这些年总结的,关于程序员的一些零散的经验汇总成一本书,书名暂定为:《成为程序员》
在线阅读地址:
https://become-a-programmer.2baxb.me
github地址:
http://github.com/qdaxb/become-a-programmer
比如某天接到一个电话:
”喂?是秦迪吗?你那边负责微博视频是吧?现在上传流程里不能自定义xxxx,你那边的接口能不能加一个XXX功能?“
或者某天收到一封邮件:
秦老板:
需要开通a.b.c.d机器权限,请确认。
或者突然有个人过来找我:
“我这边有三个方案,blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla,你觉着哪个好?”
或者突然被拉到一个群里:
@axb 看一下吧。
或者遇到了紧急问题。
axb:@xxx 现在什么情况?
xxx:在看
….30分钟后….
axb:@xxx 怎么样了?
xxx:还在看
沟通不畅不但浪费时间,而且特别影响一个人的心情,有时候甚至会怀疑到底是自己还是世界出了问题。
微博上前些天有人让我分享一下如何沟通,这我觉着很难以理解,就像我难以理解为什么有人能把几句话就说明白的事情搞的跟天体物理学公式一样。想要通过沟通说服一个人(比如销售商品)确实很难,但是仅仅是日常交流想要把话说明白的话,根本没有那么多所谓的技巧啊?… Read the rest
前些天,我在各种论坛里发招聘贴,遇见X君,前来问我道,“你可曾为招聘贴写过什么软文吗?”我说“没有”。他就正告我,“那还是写一点罢;现在的招聘贴不写点鸡汤文是没有人转发的。”
于是我思考许久,想起去年大约也是这个时候,写过一篇名为《如何从菜鸟程序员成长为(伪)高手》的技术鸡汤文,反响还不错。一年过去,似乎自己又成长了不少,就干脆再写个续吧。
工作了挺久,发现有个挺有意思的现象,从程序员、高级程序员,到现在挂着架构师、专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了。这些疑问有些来自于跟小伙伴交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题。
上篇文章谈到很多新人程序员学习没有方向的问题,在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来。… Read the rest
记录一下最近的状态。
2012-02-27 23:44
嵌入式就【】【】是个坑啊【】【】!!!
闲着没事看嵌入式的【】【】你伤不起啊!!!
哼着小曲儿屁颠屁颠的买了开发板!!!
买回来以后我就震惊了啊!!!
这尼玛买开发板送 14 张 DVD 有木有啊!!!
14 张 DVD 啊!!!不知道的以为我买的是苍老师合集啊!!!
花了一晚上才尼玛把片儿。哦不,教学资料拷完啊!!!
本来以为这就能开始玩开发板了。
后来才知道这【】【】是白日做梦啊!!!!
接线就接了一整夜啊!!!
接上以后尼玛计算机不认啊!!!
白屏啊!!!
黑屏啊!!!
叹号啊!!!
问号啊!!!
输入没反应啊!!!
尼玛插个串口线还要前戏啊!!
开发板湿没湿不知道,反正我是湿了啊!!!
劳资做足了 4 个钟头的前戏!!!
好不容易有反应,超级终端开始刷屏了!!!
我妈进门一看还说你们这些搞程序的真厉害。… Read the rest
主题摘要:
很多开发者都会有这种经验:伴随着系统的规模扩大、性能不断提高,在系统运行的过程会出现很多意料之外的情况,影响服务的质量。在这些意料之外的情况当中,有相当一部分属于高性能、高并发、高负载环境下特有的问题,这类问题出现条件苛刻,难以发现和排查,并且往往会引起整个系统崩溃的严重后果。
微博平台作为典型的大规模、高性能系统,在不断改进架构以应对各类极端峰值的同时,也需要面对高负载系统出现的各类问题,并且积累了一些此类问题的经验。本次演讲中,会和大家聊一聊在大规模、高性能、高负载系统中特有的几类问题和解决思路。
主要提纲:
有哪些问题:结合案例,介绍大规模、高负载系统的几类典型问题 如何解决问题:在排查此类问题时总结出的一些方法和思路 如何避免问题:从系统设计到上线维护的过程中,避免此类问题发生的一些原则… Read the rest
今年2月还是3月的时候,tim突然问我想不想去qcon做一次关于高性能方面的技术分享,因为之前在公司分享过挺多次,又是过年前后,正好在做各种灵异问题的排查,头脑一热就答了句“当然没问题”,周末用了几个小时写了个提纲,然后就乐呵呵的产生了自己要走上人生巅峰的错觉。直到最近才深刻的意识到想做一次技术分享要难于之前所有写过的代码、设计过的方案、排查过的问题,这篇文章就算是这几个月来的流水账吧。
之前写的提纲交上去之后就一直没再改过,内容是这样的:
—
《微博在大规模、高负载系统中的典型问题》
很多开发者都会有这种经验:伴随着系统的规模扩大、性能不断提高,在系统运行的过程会出现很多意料之外的情况,影响服务的质量。在这些意料之外的情况当中,有相当一部分属于高性能、高并发、高负载环境下特有的问题,这类问题出现条件苛刻,难以发现和排查,并且往往会引起整个系统崩溃的严重后果。… Read the rest
有几个需求:
折腾了几个方案,一直有各种各样的小毛病:
nas网线直连笔记本:
但这样笔记本关机以后nas连不了网,nas没法挂迅雷,mac也访问不了nas。
买了个一个tp-link的wr1041n路由器(千兆有线,300M无线),nas连1041n,路由用官方固件的bridge模式:
但是这样mybooklive就暴露在家里的内网里了,室友用电脑的话mybooklive就会被唤醒,并且珍藏多年的爱情片暴露在外总觉得心理不踏实……
想要用client模式,但在wr1041n的设置页面里翻了半天也没找到怎么设成client方式连接,一怒之下怒刷了open-wrt,折腾了一下午,总算是比较完美了,记录一下过程。
先上一下现在的网络图:
wr1041n同时作为client和ap,接受无线接入的同时通过无线连接到公用无线路由。… Read the rest
变换是这样一种操作:将点、矢量或颜色之类的用某种方式转换它们。对于计算机图像从业者,掌握变换非常重要。使用变化,你可以定位、变形和动画物体、光源和镜头。所有运算都是在相同坐标系统中,使用不同方式将物体被投影在平面上。
线性变换(liner transform)保持矢量和或标量乘积的变换:
f(x)+f(y+=f(x+y)
kf(x)=f(kx)
例如,f(x)=5x变换取一个标量x并将x中每个元素乘5,这种变换是线性的,任何两个矢量乘5后相加与先加再成结果相同。这个函数叫做缩放变换(scaling transform),它改变了物体的大小。旋转变换是另一种变化,它从起点旋转一个矢量。缩放和旋转,事实上所有3元素矢量的线性变换都可以用一个3*3矩阵表示。
但是这个矩阵一般不够大。一个3元素向量的函数f(x)=x+(7,3,2)不是线性的,将这个函数应用在两个独立向量上,形成结果时将增加(7,3,2)两次。[f(x)+f(y)≠f(x+y)]。为一个矢量增加固定矢量执行了一次平移(translation),例如,它将所有位置移动了相同的数量。这是一种有用的变换,我们将这几种变化联合起来。… Read the rest
历史上,图形硬件加速最早从管线的最后一步,光栅化开始,逐步管线前端发展,如今已经包括了程序阶段的算法。相较于软件,硬件的优点在于速度快,速度是至关重要的。
1999年NVIDIA Geforce256是第一块包括硬件顶点处理的显卡,NIVDIA发明了新词图形处理单元(graphics processing unit,GPU)来区分GeForce 256与之前只能做光栅化的显卡。
之后的几年,GPU从可配置的复杂的固定功能管线发展到了高度可编程的“白板”,开发者可以实现他们自己的算法。多种可编程的shader是控制GPU的主要手段。
vertex shader可以对每个顶点做多种操作;pixel shader处理每一个像素,允许对每一个像素执行着色方程; geometry shader允许GPU创建和销毁几何图元(点、线、三角形)on the fly。运算结果可以被写入高精度缓冲器并被重复使用。
渲染管线的主要功能是通过给定一个虚拟摄像机,三维空间内的物体,光影,着色方程(shading equation),纹理和其他信息,创建或渲染一张二维图像。
绘制线条的算法:Bresenham’s line-drawing algorithm、symmetric double-step algorithm
有关基础绘图算法参考书《计算机图形学的算法基础]. Procedural Elements of Computer Graphics》(Rogers)
实时渲染管线大致可以分三个阶段:程序(application)、几何体(geometry)、光栅器(rasterizer)
程序阶段(Application stage)由程序驱动,因此由软件实现并在cpu上执行。Cpu通常包括多个核心,所以可以并行执行多个线程。在cpu上执行的任务包括碰撞检测(collision detection)、全局加速算法(global acceleration algorithms),动画(animation),物理仿真(physics simulation)等。… Read the rest