262 Matching Annotations
  1. Feb 2022
    1. Overall, VBR produces better quality streams, and on-demand video transcoding provides the flexibility to use VBR, so it’s a no-brainer.

      VBR能提供更好的画质。

  2. Oct 2021
    1. 距离观察者越远顶点坐标就会越小。

      这个说法靠谱吗? 仔细理解了一下是的,坐标缩放。

  3. Mar 2021
    1. This is because the overarching purpose of Tesla Motors (and the reason I am funding the company) is to help expedite the move from a mine-and-burn hydrocarbon economy towards a solar electric economy, which I believe to be the primary, but not exclusive, sustainable solution.

      15 years passed, the goal still existed.

  4. Feb 2021
    1. while it is strongly NP-complete if the weights and profits are given as rational numbers.[12] However, in the case of rational weights and profits it still admits a fully polynomial-time approximation scheme.

      实数怎么解决

    1. One of the most notable is the status of the largest stablecoin, Tether (USDT).

      Tether?

    2. initial coin offerings

      ?

    3. Both paths, in our view, suggest the Bitcoin price roller-coaster ride could continue for some time.

      why?

  5. Jan 2021
    1. One primary limitation of using P/E ratios emerges when comparing P/E ratios of different companies. Valuations and growth rates of companies may often vary wildly between sectors due both to the differing ways companies earn money and to the differing timelines during which companies earn that money.

      行业差异很大

    2. the PEG ratio allows investors to calculate whether a stock's price is overvalued or undervalued by analyzing both today's earnings and the expected growth rate for the company in the future.

      有点意思

    3. As a historical example, let's calculate the P/E ratio for Walmart Stores Inc. (WMT) as of November 14, 2017, when the company's stock price closed at $91.09.2 The company's profit for the fiscal year ending January 31, 2017, was US$13.64 billion, and its number of shares outstanding was 3.1 billion. Its EPS can be calculated as $13.64 billion / 3.1 billion = $4.40.

      这个时间差有点过分

    4. This is the company's best-educated guess of what it expects to earn in the future.

      为什么是最好的?

    5. A high P/E ratio could mean that a company's stock is over-valued, or else that investors are expecting high growth rates in the future.

      facebook上市的时候市盈率如何?yahoo?

    1. 净收益是税后净利,股份数是指流通在外的普通股股数。

      要对定义清晰明确。

  6. Jun 2020
    1. 圣何塞州立大学的计算机科学系为该校最出名科系。其毕业生薪资远高于加州任何一所高校毕业生薪资。其地理位置位于世界硅谷中心,拥有大量世界顶级计算机及软件公司为其毕业生提供良好的就业背景。该系也成为美国高校中排名前三的科系。每年有大量的学生从世界各国慕名而来。

      这点很重要

  7. May 2020
    1. Rendering to a texture or offscreen framebuffer acts similarly

      纹理不也要依赖于framebuffer吗

    2. but now a texture is allocated and attached to the color attachment point.

      RenderBuffer和texture附着到color attachment的区别是什么?

    1. Adaptive Playback Support

      一脸茫然

    2. When using an input Surface, there are no accessible input buffers, as buffers are automatically passed from the input surface to the codec.

      谁负责把数据传递给InputSurface呢?

    3. If you want to process raw input video buffers natively with a video consumer – a codec that processes raw video input, such as a video encoder – create a destination Surface for your input data using createInputSurface() after configuration. Alternately, set up the codec to use a previously created persistent input surface by calling setInputSurface(Surface).

      input video buffer直接交付给底层surface。

    4. short[] getSamplesForChannel(MediaCodec codec, int bufferId, int channelIx) {  ByteBuffer outputBuffer = codec.getOutputBuffer(bufferId);  MediaFormat format = codec.getOutputFormat(bufferId);  ShortBuffer samples = outputBuffer.order(ByteOrder.nativeOrder()).asShortBuffer();  int numChannels = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT);  if (channelIx < 0 || channelIx >= numChannels) {    return null;  }  short[] res = new short[samples.remaining() / numChannels];  for (int i = 0; i < res.length; ++i) {    res[i] = samples.get(i * numChannels + channelIx);  }  return res; }

      懵逼,不知道要干嘛

    5. Surface uses native video buffers without mapping or copying them to ByteBuffers; thus, it is much more efficient

      用surface的原因解释得很清楚。不需要映射和拷贝Video的数据。

    6. but you should use a Surface for raw video data to improve codec performance.

      why surface

    1. 得到标准的透视视图矩阵

      来日方长,慢慢消化理解。别人能理解,我也能理解。我不信邪。

    2. 同时每次SurfaceTexture刷新的时候,都必须刷新GLSurfaceView。

      requestRender具体作用是什么。是通知绘制界面吗?

    3. Renderbuffer只是一个包含可渲染内部格式的单个映像的数据存储对象。它用于存储没有相应纹理格式的OpenGL逻辑缓冲区,如模板或深度缓冲区。

      一头雾水

    4. 初始化FullFrameRect。它是OpenGl绘制命令等的封装。

      靠,原来是封装OpenGL命令的。

    5. 申请一个RenderBuffer,并且挂载GL_DEPTH_ATTACHMENT上。

      为什么需要还是很模糊。

    6. 通常情况下,我们把绑定FrameBuffer和绘制这个新的OffscreenTextureId代表的纹理的过程,称为离屏绘制。

      离屏绘制

    7. 绘制图像的话,同之前相同,只需要绘制一个长方形就可以了。

      为什么绘制一个长方形就可以了。Camera的数据呢。

    8. GL_TRIANGLE_STRIP

      GL_TRIANGLE_STRIP和GL_TRIANGLE有什么区别。

    1. The combination of these buffers is stored somewhere in GPU memory and is called a framebuffer.

      也就是说,framebuffer包含3中buffer。其实准确地说是存储了他们的指针。

    2. The rendering operations we've done so far were all done on top of the render buffers attached to the default framebuffer.

      对应屏幕。画完直接显示到屏幕。

    3. Renderbuffer

      和普通的framebuffer有什么区别。

    4. stencil

      这里的stencil是个什么鬼

    1. 然后将这些标准化设备坐标传入光栅器(Rasterizer),再将他们转换为屏幕上的二维坐标或像素。

      光栅是个什么鬼。

    1. 卷积算子和相关算子在核上是180度翻转的矩阵,请不要搞混

      这个注意没搞懂。

    2. 低通滤波是指仅允许低频率信号通过。一张图像上的大部分能量聚集在低频和中频上,而高频大多是图像中物体的边缘部分,也有可能是高频噪声点。在单通道中,各像素点的取值都在(0~255)中,因此,低通滤波通过一定的阙值设置,有去除高频信号和平缓边缘的效果。

      实在不懂和信号有什么关系

    3. 从数学的角度来看,高斯滤波的过程是图像与高斯正态分布做卷积操作。

      简单明了

    4. 平滑图像与图像模糊处理是相同的含义。平滑处理即是通过操作后,使得图像的像素值与邻域内其他像素值的的变化程度减小。

      soga

    1. 有两种类型的可附着的 framebuffer;纹理(Texture)和renderbuffer。如果纹理被附加到FBO,OpenGL将执行“渲染到纹理”。如果renderbuffer被附加到FBO,则OpenGL会执行“离屏渲染”。

      似懂非懂

    2. 通过使用FBO,OpenGL 应用可以重定向渲染输出,让它输出到FBO而不是传统的窗口系统提供的 framebuffer.

      输出到FBO最终展示到屏幕是如何处理的呢?

    1. 不同的是,我们是不希望直接显示到屏幕上的,而且在后续我们还会对这个图像做其他处理。所以我们时将相机的当前帧数据渲染到一个2d的texture上,作为后续处理过程的输入。所以在渲染时,需要绑定FrameBuffer。

      一脸懵逼。

    1. 目前市面上的滤镜有很多,但整体归类也就几样,都是在fragment shader中进行处理。

      如何理解

    2. 如何理解?

  8. Apr 2020
    1. // virtual function, binded at runtime     bptr->print();        // Non-virtual function, binded at compile time     bptr->show();

      解释简单明了

    1. 这里需要注意的一点是关键帧的处理,如果不处理关键帧那么在手机端播放时就有可能会出现马赛克问题。

      为什么

    2. 为什么

    1. 软件的非功能性需求主要是软件系统的性能、可靠性、运行限制等多个方面。

      性能

  9. Mar 2020
    1. Update the texture image to the most recent frame from the image stream.

      更新最新的帧到texture

    1. 一,持续地刷同个类型的题目,可以不断地巩固和加深理解。二,可以更全面地接触这个数据结构,算法的各个变种,这会促使你对这个数据结构,算法的理解更加全面和深刻,学习的效率会更高。所以在一段时间内,持续地刷特定类别的题目,可以带来事半功倍的效果。当然,在能力已经比较强的时候,可以采用打散的方式来刷题,可以更好地锻炼思维的灵活性和应变能力,但初期或能力较弱的时候,按分类选题,是比较好的。

      和我的领悟不谋而合

    2. 算法是一种技能,是可以通过科学合理的方式训练出来的能力。

      喜欢这个定义

    1. focus on a single topic. If it can be parsed down to a single method, even better.

      难度可控

    2. Mental models are built piece by piece. Code should be read the same way.

      piece by piece

    3. While every programmer should be reading code, they aren’t. The reason many programmers choose to avoid it is because it’s hard, frustrating, and makes them feel stupid. I know because that’s how it made me feel.

      说到我心里去了

    1. Not all the interfaces we want to use play nice together. Glue is the plumbing connecting things together. Middleware, promises vs callbacks binding code, inflating arguments into objects or breaking objects apart. All that's glue.

      还是不太理解glue

    2. When they were maintaining software, they'd do almost anything to avoid reading the source code.

      这就是我在vesdk的写照

    3. 我在vesdk就是这么干的

    1. 动态规划的核心思想避免重复计算在01背包问题中体现得淋漓尽致。第i件物品装入或者不装入而获得的最大价值完全可以由前面i-1件物品的最大价值决定,暴力枚举忽略了这个事实。

      避免重复计算, 一语道破.

    2. 关于这个问题, 我在印象笔记中做了详细的阐述. 见https://app.yinxiang.com/shard/s5/nl/707022/ad14b24c-fec2-4754-b41e-886f30e3969c/

    1. there was a lot of boilerplate code I had to write in its creation. Therefore, I put together this framework that encapsulates a lot of the common tasks you'll encounter when processing images and video and made it so that you don't need to care about the OpenGL ES 2.0 underpinnings.

      opengl的基础代码真的难受啊

    2. For massively parallel operations like processing images or live video frames, GPUs have some significant performance advantages over CPUs. On an iPhone 4, a simple image filter can be over 100 times faster to perform on the GPU than an equivalent CPU-based filter.

      卧槽, 100倍

    3. GPUImage allows you to write your own custom filters

      最主要的是滤镜

    1. 怎样才能加速你学习的过程呢?答案就是,先写再看书。对于像编译原理这种略微高深的知识,总要自己写过几遍,吃了一些苦头,才能知道为什么书里非要把算法那么设计结构那么安排。对于像设计模式这种需要大量经验才可以领悟到的知识,如果你从来没独立写过一个上万行的程序,你觉得你能理解设计模式在讲什么吗?我觉得这种时候能做的也就是背下来,理解什么的都是扯淡。诸如此类,学习程序,如果要加速那个过程,肯定要花大量的时间写代码。当你把项目做得越大、越复杂、算法越扭曲、界面越华丽、尺寸已经大到你觉得不学习新的方法论就肯定会让代码失控的时候,这个时候你来看设计模式的书,保证是每看到一个模式都觉得人家说到你心坎里去了。那你不仅可以迅速理解,而且以后还可以不由自主的想起来使用它。

      醍醐灌顶

    2. 醍醐灌顶

    1. 你看看武侠小说里,段誉就是一个傻逼,仗着有时发出有时发不出的脉冲波和绕圈圈就能快跑直线的bug技就加上一门佛学能独步武林最终迎娶了白富美,出任了CEO,走向了人生巅峰,乔峰永远是一招降龙十八掌,更夸张。而慕容复文武双才,基本精通天下武学,每天读书4时辰练功4时辰,论用功谁能和他比啊。。。可到了30多岁还是一事无成,pk连段誉这种新手都搞不过,最后被人抢了老婆,就是因为方向不对,而且太不专注了。

      卧槽

    1. 怎么提高系统编程能力呢?土办法:多造轮子。就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触。所以,自己多写点东西吧。写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么?

      多造轮子

    1. 工作要用的事情就应该占用工作时间去研究,课余的时间当然是花在提高自己的元编程水平上:大概就是算法啊、架构啊、设计模式啊、单元测试啊各种任何语言都用得上的东西了。

      在理

    1. 项目搞完回过头来系统地学习语法基础,不但不再枯燥,而且理解也会更加深刻。

      卧槽

    2. 有多少人从大一刚入学立志将来做一个IT大佬,抱着一本《C++ Primer》开始啃,最后啃不到200页就去LOL上分冲段位了。所以我的建议是,一开始只要会点儿基础语法,就定一个小目标去实现就好了,不必强求每一行代码都是亲自手写。遇到问题就查,百度也可以查书也可以,我一开始写个五子棋小游戏的时候,连数组的声明语法都是查书的。把你遇到的问题从业务逻辑定位成代码逻辑,然后知道从哪儿可以找到想要的答案,这个能力在未来的工作、编程和面试中非常重要。一两个完整的程序做下来之后,再回过头来从变量、语法、表达式、流程控制、函数....重新去学习这门编程语言,这时候你会不断地发现原来这个地方这么写的原因是这样?原来这个地方是这么实现的,那个地方我还可以这么写。一本枯燥的语法书籍你会很流畅地读下来,甚至还可能读出快感和兴趣,这样一顿操作之后,你可以算真正掌握了一门编程语言,有了自己的理解在里面,并且有对应的应用经验,未来的面试中也可以讲的头头是道。

      看书一定要看能运行的书籍, 因此《编程之美》就比《剑指offer》要差不少.

    3. 对编程能力本质最好的比喻就是弹琴。但是有了编程能力还不能算优秀的程序员,优秀的程序员是作曲家,他们不仅能想出优美的旋律,并且能弹奏出来,就像优秀的程序员不仅能想出优美的算法架构,而且能把它变成可执行代码。你很难想像作曲的人不会任何乐器。

      钢琴学习法

    4. 编程是手艺,不是知识。

      精辟

    5. 以动手练习为主,看书学习为辅,甚至极端点,初学的时候除了看必要的文档都可以不看书,等有了一定编程基础后再去看书,看完书立刻动手编程去验证书上的理论知识。

      这点有体会, 看了屈老师的《算法设计与分析》, 在leetcode上发现还是做不了相关题目.

    6. 只有大量的阅读别人的代码才能显著的提高你自己的编程能力。

      对, 自己的想法是非常有局限性的.

    1. the SDK Canvas application programming interface (API) is a powerful 2D API that you can use in combination with OpenGL ES but is otherwise limited to 2D and requires new code to use.

      requires new code to use如何理解.

    1. P = Problem: 文章要解决什么问题A = Approach: 文章用得是什么方法解决提出的问题R = Results: 解决了问题得到了些什么结果I = Impacts: 这些结果有什么具体理论或者实际的影响

      解释简单清晰

    1. * 凡可配置的参数,一律提供配置,比如:摄像头参数、编解码参数、美颜参数、混音参数等等* 凡可回调的数据,一律提供回调,比如:摄像头采集的视频帧、纹理 ID,麦克风采集的音频帧等等* 凡运行过程中的状态,一律提供通知,比如:拍摄状态、转码进度、取消事件等等另外,还需要尽可能地跟 SDK 上下游厂商建立良好的合作关系,比如 美颜、滤镜、人脸贴纸特效、大眼瘦脸等供应商,让客户可以随时快速接入和替换任意一家厂商,从而加快产品迭代和上线的速度。

      值得借鉴

    2. * 尽一切努力使用 Android/iOS 系统原生的 API,不怕难用,不怕踩坑* 良好的模块划分,不同的功能生成不同的动态库,客户可选择性的拆卸和裁剪* 所使用的第三方库,充分配置编译选项和功能裁剪,只打包必须的功能、单独抽离所需的模块.

      不错

    3. 解决了我的一些疑惑

    1. In short, we can say: A declaration can be done any number of times but definition only once. the extern keyword is used to extend the visibility of variables/functions. Since functions are visible throughout the program by default, the use of extern is not needed in function declarations or definitions. Its use is implicit. When extern is used with a variable, it’s only declared, not defined. As an exception, when an extern variable is declared with initialization, it is taken as the definition of the variable as well.

      一个简单的extern, 就有5条规矩.

    1. 左定值,右定向,const修饰不变量

      这顺口溜不错

    2. Volatile 关键字跟 const 对应相反,是易变的,容易改变的意思。所以不会被编译器优化,编译器也就不会改变对 a 变量的操作。

      感觉意义不大, 都加了const还要啥volatile.

    3. 如果不想让编译器察觉到上面到对 const 的操作,我们可以在 const 前面加上 volatile 关键字。

      volatile关键字

    1. 字面上的意思是帧缓存,在OpenGL中,帧缓存的实例被叫做FBO。个人理解:如果texture是罐头上的内容,那framebuffer就是那张裹在罐头上的纸,它负责对纹理内容进行缓存并渲染到屏幕上,这个过程就叫做render to texture。当然framebuffer中不仅可以缓存原始的纹理内容,还可以是经过OpenGL处理后的内容。比如照片中牛奶罐头上除了有本身的名字、图案和说明这些内容,我们看上去还有相应的质感和反光效果,这个就可以通过获取反光中的实际影像进行透明、拉伸、雾化等效果处理后得到与实际反光一模一样的图,最终渲染到牛奶罐上。从这个角度理解的话,可以把texture看作是framebuffer的一部分,因此在GPUImage中把指向texture的地址作为GPUImageFramebuffer的一个属性。当然也有不需要创建frambuffer的情况,比如在初始化输入源时例如GPUImagePicture类型对象,载入图片资源时只需要创建texture即可,GPUImageFramebuffer的其中一个初始化方法的其中一个参数onlyGenerateTexture为YES时,就可以只创建texture,把图片信息转化成纹理,而没有进行framebuffer的创建。

      非常有力的解释

    2. 非常贴切

    1. 实际上就是两个OpenGL Thread共享一个Texture,不再需要数据导入导出,从Camera采集的数据直接在GPU中完成转换和渲染。

      不太理解

  10. Dec 2019
    1. 寻找感受点并引导异性去分享她自己的感受

      寻找感受点并引导异性去分享她自己的感受

  11. May 2019
    1. Don't forget to Release the strings you Get. The string functions return jchar* or jbyte*, which are C-style pointers to primitive data rather than local references. They are guaranteed valid until Release is called, which means they are not released when the native method returns.

      咱们代码里就是这么干的。

    2. One unusual case deserves separate mention. If you attach a native thread with AttachCurrentThread, the code you are running will never automatically free local references until the thread detaches. Any local references you create will have to be deleted manually. In general, any native code that creates local references in a loop probably needs to do some manual deletion.

      不是特别理解这段的含义。

    3. All threads are Linux threads, scheduled by the kernel. They're usually started from managed code (using Thread.start), but they can also be created elsewhere and then attached to the JavaVM. For example, a thread started with pthread_create can be attached with the JNI AttachCurrentThread or AttachCurrentThreadAsDaemon functions. Until a thread is attached, it has no JNIEnv, and cannot make JNI calls.

      这个理解非常重要啊。

    4. The JNIEnv is used for thread-local storage.

      thread local忘记了。

    5. If you do need to utilize thread pools in both the Java and C++ languages, try to keep JNI communication between the pool owners rather than between individual worker threads.

      不太理解具体含义。

    6. Minimize marshalling of resources across the JNI layer.

      能问问为什么吗?

    7. LLDB:Android Studio 用于调试原生代码的调试程序。

      还没用过LLDB呢。

    1. 新手篇——飞鸟夹胸动作详解

      向前弓步

      上: 向下拉到腹部位置,肘应该尽量平行,避免背部发力; 错误: 向后拉扯到背肌 中: 对准腹部位置 下: 拉到眼睛平行的位置。 错误: 💪不能伸得太值

    1. 当一个新帧到达时,我们告诉 SurfaceTexture 获取它并使它可以作为 GLES texture 使用,然后在每个 EGLSurface 上通过 GLES 命令渲染它(从 SurfaceTexture 转发转换和时间戳)。

      有点迷糊。

    2. 当你由 SurfaceTexture 创建 Surface 时,你正在做的事情是创建一个对象表示 SurfaceTexture 的 BufferQueue 的生产者端。

      为什么说创建Surface是生产端?

    3. 为什么说是粗糙的组合?

    4. 能否举例说明应该如何理解呢?

    1. Captures frames from an image stream as an OpenGL ES texture.

      这个定义简洁又清晰。

    1. 人只有先学会爱自己,才有能力爱他人。如果你不学着与自己对话,便更难和别人交流。越能独处的人,越能面对和理解困境,也越能与他人相处。

      先爱自己

    2. 要经得起challenge

    1. 学习高手常常会有意识地把不同领域甚至不同学科的知识摆放在一起,然后尝试去分析、比对它们的潜在关联,甚至于当异质的素材堆叠在一起时,仅仅是潜意识的推动,就可以让这种隐蔽的关系浮出水面。

      学习书法的练习方法也同样是可以应用到工作当中的。

    2. 下完一局后去复盘

      复盘。打麻将的人经常会做的一件事情。

    3. 1、写作式操练。它是一种典型的知识建构活动,或者更准确地说,是一种对知识的重构活动。【书写是更好的思考,教是最好的学】。2、游戏式操练。这种操练会具有相当高的参与性、互动性和投入性。比如棋牌,24点训练心算,更还有《大航海时代》这样的游戏斩获丰富的地理和文化知识。3、设计师操练。【设计就是解决问题】,因此设计式操练的好处,就是迫使学习者为了解决某一个现实的问题,来综合性、创造性的调用知识。比如:编程,设计游戏软件,开发程序。

      貌似好像就这几种,😂。

    4. 反复练习的价值,在于使某些认知活动可以自动化进行,从而为思考时所用的工作记忆腾出宝贵的空间,以用于更策略性的活动。

      书法也是如此,之所以要大量练习笔画,就是要把每一笔自动化,而不是在写的时候每次去思考运笔。

    5. 你掌握了多少知识,并不取决于你记忆了多少知识以及知识的关联,而是取决于你能调用多少知识及其关联。

      刘未鹏在《暗时间》里也阐述了这个观点。

    6. 你心中有什么样的问题,其实也决定了你观察的视角,从而就可能做出不同的解码。

      你的问题定义了你。

    7. 即学习者的知识不是简单地吸收而来,而是主动的建构而来,学习者必须充分地调用他们的已有知识,在一个主动性目标的指引下,在一个丰富的情景中去探索甚至撞击那些新接触到的知识,在经过一系列复杂的交互之后,把这些知识纳入到原有的知识体系之中

      不过如果只是用现有知识,往往解决不了问题。

    8. 仿佛唤醒了我的记忆一般。

    1. 向全党提出系统地周密地研究周围环境的任务。依据马克思列宁主义的理论和方法,对敌友我三方的经济、财政、政治、军事、文化、党务各方面的动态进行详细的调查和研究的工作,然后引出应有的和必要的结论。

      如果你要租房,就要对海淀区的小区情况、房租价格情况、有细致的了解。只有深入的了解,才能做出正确的决策。

    2. 墙上芦苇,头重脚轻根底浅; 山间竹笋,嘴尖皮厚腹中空。

      基础要扎实

    3. 许多同志的学习马克思列宁主义似乎并不是为了革命实践的需要,而是为了单纯的学习。所以虽然读了,但是消化不了。

      学习理论的最终目的,是为了解决现实问题。

    4. 但是对于国内和国际的各方面,对于国内和国际的政治、军事、经济、文化的任何一方面,我们所收集的材料还是零碎的,我们的研究工作还是没有系统的。二十年来,一般地说,我们并没有对于上述各方面作过系统的周密的收集材料加以研究的工作,缺乏调查研究客观实际状况的浓厚空气。“闭塞眼睛捉麻雀”,“瞎子摸鱼”,粗枝大叶,夸夸其谈,满足于一知半解,这种极坏的作风,这种完全违反马克思列宁主义基本精神的作风,还在我党许多同志中继续存在着。马克思、恩格斯、列宁、斯大林教导我们认真地研究情况,从客观的真实的情况出发,而不是从主观的愿望出发;我们的许多同志却直接违反这一真理。

      收集材料,再得出结论,绝对不能主观臆断。

    1. 这些阶段被分割成数个硬件实现的阶段,这些阶段支持不同程度的可配置性或可编程性的。下图中通过不同的颜色展示了其可编程性和可配置性。在这里可能和之前的概念模型略有不同。

      在初始顶点的基础上,会产生更多的图元,光栅化就是讲这些图元转化成像素,每一个图元的片段着色器分别对每个图元着色?那是如何实现对同一个片元的不同像素着不同的色呢?

    1. 验证事实是我们要信任,但是要验证,要从多个渠道验证我们的假设。我有一个私人银行的朋友,几年前的时候他并没有什么钱,但是他却经常租豪华跑车,出入高尔夫球场和那些富商交往,有一个富商还借了几百万给他,他现在的业务越来越大,为什么?他跟我说,其实人们都会通过你开什么车、去什么场合来推断你是什么收入水平的人,因此,和富商会建立信任的关系。但是,如果我们从间谍思维的角度看,它就违反了一个重要的原则,信任但验证。因为你只有一个渠道,也就是你看到他开了跑车,看到他出入高尔夫球会所这一个信息,你就判断他是和你一个圈子的人,而间谍的基本原理是要多渠道验证我们获得的信息。我们看到很多骗子也是利用这一个方法去诱骗别人的。

      我们容易受欺骗,是因为我们没有想如何去验证我们认识的人。

    2. 在湖南一个小镇,有一个理发店,老板的爱人长得非常有姿色,所以很多人对她垂涎三尺,但是这个理发店老板他是一个举重出身,胳膊非常非常粗,一拳头挥过来,可能就把人打晕,所以很多人都不敢招惹。结果有一天下午,理发店的人很多,来了一个很潇洒的小伙子,推门就问,老板,我理发还要排多久的队啊?老板看了看说,前面有七个人,大概得两个半小时吧,那算了,我改天再来,过了几天,那小伙子又来了,又是这样问,一问要排队,转身又走了,如此这般,一个月来了五六次,每次一来一问就走了,这个小店老板他就有点奇怪,然后他就给这个门口擦鞋的小孩三块钱,说你去看看,那个小伙子去哪儿?过了半小时,那个小孩回来报告说,那个叔叔去您家里了,正跟您的阿姨在亲嘴呢。所以我们可以看,这个潇洒的小伙子,他用了一个方法,策略性诱导,他没有直接问,你还要多长时间回家?他是问,我如果要理发,还要排多长时间的队?我们可以看到,他就很好地运用了策略性诱导,通过一个侧面的信息来推导出他想要到的信息。当然这是一个很简单的例子,我们在生活中可能要遇到的问题会更复杂一些,需要拼凑出更多的信息,但是你要做到的是,通过旁敲侧击获得信息,而当事人并不知道你在做什么。

      😂

    3. 他们最常用的是策略诱导,策略诱导就是避免直接问问题,而是要让在对方浑然不知的情况下,侧面提供信息,你通过对信息的碎片拼接,而推导出你想要的信息。

      蔡康永的提问方式颇像这一点。

    4. 看起来并不新鲜。如果共党不是地下组织的谍报,对国民党的军事行动不可能那么了解。

    1. 因为上面讲到的大多数方法,都与我们的本能相违背——比如大脑会自动把熟练工作归到『自动完成』,而不是继续刻意提高。

      做违背本能的事情,肯定是痛苦的。我们希望成功,却不愿意违背本能。我们想享受假期,却不愿意承受不断地练习的苦。

    2. 在你的刻意练习计划中,一定要加入持续的反馈。

      不是闷头练习。

    3. 要想在某些领域刻意联系并最终成为专家,就需要对某些关键技能进行细分,并且进行大量的重复性训练。

      不要说专家。就稍稍专业一点的爱好健身的人,都会针对性训练自己局部的肌肉。

    4. 同样,对商业分析感兴趣,看几本商业分析的有趣书籍(比如我常推荐的《好战略坏战略》),这和我把『扬长避短』『行动协同』等基本原则练到吐,并逼迫自己一天诊断3个困难的商业案例是两码事。

      那些表现自然的演讲,那些行文流畅的作品,背后反而是痛苦的磨砺,不是简简单单处于兴趣。

    5. 在任何一个领域内的刻意练习本身,都毫无任何兴趣可言——因为那意味着你需要经常去做自己不能做的事情,并且经常遇到失败、挫折。

      遇到挫折是人生常事。这才是人生常态。

    6. 而长时间停留在舒适区,能力基本上很难成长。

      在头条无事可做的时候,反而是难受的,也容易浪费时间。

    7. 你今天的工作,是有意识地刻意提升,还是在自动完成?

      我在头条所做的事情,多数情况下是比较轻松的,或者说是和别人共同完成,自己做了轻松的工作。自己不是害怕挑战,而是害怕挑战完不成,被否定。但只有挑战,才能带来个人能力的提升。

    8. 它要求一个人离开自己的熟练和舒适区域,不断地依据方法去练习和提高。

      这种练习不是简单的练习。例如我的童年时代,我在练习书法时,会专门避开难写的笔画,这种练习的坏处是我永远只关心自己擅长的笔画。这种思想贯穿了我的学习。我通常只做自己做起来轻松的事情。而对自己做起来痛苦的事情,却总是不去做。这就导致我始终提不上去。

    9. 为什么你年纪不大,经验并不多,但却能擅长复杂的商业策略和文案写作,是如何做到的?

      东炎的观点很受启发。这个行业讲究的是加速度。

    1. 写东西是整理思路最好的方法,把所思所想出来与他人分享才能变成自己的。

      但是这种写作,不是碎碎念,而是对特定主题的表达。

    2. 深刻是一种态度,事事不求细节

      我常常对繁琐的细节比较反感。掌握细节不是说一定要记住每一个细节。

    3. 把一招练100遍往往可以一招致命。

      田雪松仅仅笔画就练了2年,这就是为什么田氏能延续至今。

    4. 曾国藩读书的原则是一本不读完决不读下一本书。

      一切速读都是没有意义的。除非你能理解。

    5. 不能深刻思考的根本原因是见识少,知识积累量不够。

      爱因斯坦说想象力比知识更重要,是建立在他的知识量基础上的。例如你要思考战争,如果你缺乏基本的地理知识,你是没办法思考战争的。

    6. 比如“秦始皇是哪年统一六国的”,这种知识是不可繁殖的,但像“深度思考比勤奋更重要”就是可繁殖的,它可以让你提高、进步,让你变得更深刻。

      我就掌握了很多不可繁殖的知识。例如初中时代,高中时代,就看了很多名人传记,但我主要关注他们的轶事,而没有关注他们好的学习习惯。

  12. Apr 2019
    1. 片元着色器主要处理每个片元的最终颜色,这里我们只要根据传进来的贴图数据,进行纹理采样即可。

      也就是说,片元着色器的依据是纹理。也就是片元着色器的输入是纹理。

    2. 可以这么理解,GLSurfaceView就是前面我们说的用来显示OpenGL图形的窗口。

      窗口一般就是屏幕吗?

    3. 顶点着色器主要用来处理图形中每个顶点的最终位置。

      既然只是确定最终位置,为什么叫顶点着色器。只是顶点,有着色的必要吗?

    4. 光栅化就是把顶点数据转换为片元的过程。

      为什么只是转换顶点的数据?其余部分的数据呢?

  13. Jan 2019
  14. Dec 2018
    1. If the MVP pattern meant that the Presenter was telling the View directly what to display, in MVVM, ViewModel exposes streams of events to which the Views can bind to. Like this, the ViewModel does not need to hold a reference to the View anymore, like the Presenter is. This also means that all the interfaces that the MVP pattern requires, are now dropped.

      ViewModel不持有View的对象。

  15. Nov 2018
    1. However, on the JVM you can have members of companion objects generated as real static methods and fields, if you use the @JvmStatic annotation.

      在注解帮助下,可以建立真正的static字段。

    2. Sometimes we need to create an object of a slight modification of some class, without explicitly declaring a new subclass for it. Java handles this case with anonymous inner classes. Kotlin slightly generalizes this concept with object expressions and object declarations.

      Object Expressions and Declarations类似于 anonymous inner classes。

    1. If you need to write a function that can be called without having a class instance but needs access to the internals of a class (for example, a factory method), you can write it as a member of an object declaration inside that class. Even more specifically, if you declare a companion object inside your class, you'll be able to call its members with the same syntax as calling static methods in Java/C#, using only the class name as a qualifier.

      终于明白Object和Companion Object的涵义了。

    2. Any is not java.lang.Object; in particular, it does not have any members other than equals(), hashCode() and toString(). Please consult the Java interoperability section for more details.

      Any和Object并不是一回事

    3. All classes in Kotlin have a common superclass Any, that is the default superclass for a class with no supertypes declared:

      相当于Java的超级父类为Object

    4. If the constructor has annotations or visibility modifiers, the constructor keyword is required, and the modifiers go before it:

      @Inject有什么鸟用

    1. 有62%的用户会在这段时间内刷,10.9%用户会在碎片化时间如卫生间和挺勤路上刷。尤其是睡前和周末、节假日这种整段时间。

      时间节点

    2. 但如果两个场景的过度转场做得好,最后视频的效果就会很酷炫。

      过渡很重要

    3. 快慢速度调整和分段拍摄是抖音最大的特点。利用好这两个功能就能玩出很酷炫的抖音效果。

      快慢调整 分段拍摄

    4. 如果作为一个新手,实在不知道自己应该创作什么内容,可以参考抖音的模板库,抖音保持更新模板库,提供很多有意思的音乐和拍摄示例,比如,可以对口型,什么都不做只要张张嘴就行。而且还会有一些拍视频的话题和方向,可以去模仿一些有趣的视频,不会不知道自己要拍什么。这个在发现页面能看到很多话题的分类,分类下有许多用户创作的话题相关的视频。

      从模仿开始

    5. 抖音之所以能超越,这归功于抖音拍摄小视频可以添加很多玩法和特效,用户可以通过视频拍摄的快慢,以及原创特效(反复、闪一下、慢镜头)、滤镜、场景切换等技术让视频更具创造性,一秒变大片。用户制作难度低易上手,普通用户也可以做出好玩、炫酷的短视频。

      特点。特点。特点

    1. Array<out T>.

      忘了<out t="">的涵义了。</out>

    2. Overriding methods always use the same default parameter values as the base method. When overriding a method with default parameters values, the default parameter values must be omitted from the signature:

      有默认值的函数参数在overide时不能再设置默认值。

    1. The by-clause in the supertype list for Derived indicates that b will be stored internally in objects of Derived and the compiler will generate all the methods of Base that forward to b.

      如何理解forward to b?

    1. it has two other things: declaration-site variance and type projections.

      什么玩意,不太理解。

    1. It's often the case that we need to copy an object altering some of its properties, but keeping the rest unchanged.

      要理解copy的应用场景是需改改变部分属性值的时候。

    2. If a supertype has the componentN() functions that are open and return compatible types, the corresponding functions are generated for the data class and override those of the supertype. If the functions of the supertype cannot be overridden due to incompatible signatures or being final, an error is reported;

      不太懂这段话要表达什么意思

    3. The primary constructor needs to have at least one parameter; All primary constructor parameters need to be marked as val or var; Data classes cannot be abstract, open, sealed or inner;

      三大件

    1. Note that, since extensions do not actually insert members into classes, there's no efficient way for an extension property to have a backing field. This is why initializers are not allowed for extension properties. Their behavior can only be defined by explicitly providing getters/setters.

      注意

    2. Kotlin, similar to C# and Gosu, provides the ability to extend a class with new functionality without having to inherit from the class or use any type of design pattern such as Decorator. This is done via special declarations called extensions. Kotlin supports extension functions and extension properties.

      动态给原有的类增加功能

    1. internal — any client inside this module who sees the declaring class sees its internal members;

      类似于Java的包访问权限

    1. 接口与抽象类的主要区别是接口不能存储状态,简单说就是接口只能存储常量。

    1. On the Java platform, numbers are physically stored as JVM primitive types, unless we need a nullable number reference (e.g. Int?) or generics are involved. In the latter cases numbers are boxed.

      Int?起了包装作用。

  16. Jul 2018
    1. 1)第一种情况:如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理;2)第二种情况:如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

      ARP协议的主要作用是通过IP地址得到MAC地址。

    2. 单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义? 这就是"链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。

      链接层是为物理层服务的。

    1. 其中LBS服务用于帮助客户端SDK选取最合适自己的网关接入点,优化网络效率;而API服务则直接提供来自第三方服务器的业务请求;

      要能够准确地分清楚每层的功能。

    1. 并不能适应公司的办公室政治,不知道如何权衡不同部门之间的利益关系,创造和其他部门双赢的结果,说白了就是不知道如何和其他部门合作。 习惯了亲力亲为之后,对每个小细节管得太多,反而让自己团队里的其他人觉得没有发挥空间,从而导致整个团队的效率非常低下,士气低落。因为以前是 CEO,所以习惯了每件事儿都自己拍板,现在当了产品经理之后,在行政关系上并不是设计师或者是工程师的老板,当然别人也就不会听你发号施令。而以前初创公司的产品高管们,并不能适应通过鼓舞他人,通过影响来管理团队的方式。 在大公司,非常重要的是知道如何管理和领导们的关系,什么事情该汇报,什么事情该自己决定,以及如何汇报工作的进度。因此,他们反而可能处理不好和自己上司之间的关系,或者锋芒过露,导致不受器重。

      这点要反省。要知道这种区别。

    1. If conflicts occur between multiple AAR libraries, then the resource from the library listed first in the dependencies list (toward the top of the dependencies block) is used.

      这个优先级是如何指定的呢

  17. Apr 2018
  18. Mar 2018
    1. Make a list of all the things you don’t know, assign priorities to them, and start each of them one by one every week. After a few months, you will find yourself way ahead of where you started.

      我现在用的一直是我的老知识,没更新过。我现在只是工作态度变了,但是在安卓上却没有持续学习。

    2. Thinking about something before starting to work on it is good (very good, actually), but overthinking and overanalyzing lead to unnecessary confusion, delay, and anxiety.

      理论指导实践是没错,但是教条主义就不好了。过度工程是一件非常危险的事情。

    3. If you want to be successful as a developer (or anything else in life), you need to be consistent.

      2个月时间学习设计模式,然后再看自定义控件。 我的学习的连续性受影响,往往跟自己大脑活跃有关。总是在找更适合自己的方向。实质并不存在所谓更好的方向。长期扑在一个目标上非常重要。这是一种非常重要的能力。之前我已经算是学习过很多东西的人了,但却一无所成。原因就是急于求成,总是转换方向。关于这点,我还没有很好地分析总结。目前的《算法设计与分析》执行得就很好。这才是非常正确的学习方法。斯科特·杨的方法从本质上就是错误的。那种策略学习方法适合短期突破。并不适合成为一个行业的专家。成为一个行业的专家,需要耐心的投入。在这点上,李笑来可以说是极端强大。他意识到耐心的重要性。我自己总结为在开放的世界中保持自律和专注,对我来说更加贴切。

    4. "Perfect" is a subjective term, but as a rule of thumb, try to achieve the best possible version of the product that you are required to deliver, all the time.

      在当前的工作里,我逐步开始这样做,这使我收获非常大。但要明确一点。首要的是严格要求自己,而不是别人。只有对自己的要求提高了,别人才会信服。我们的基本要求是把事情做好。要想做好,就要力求完美。但完美,并不是一次可达的。真正的完美是需要多次修改的。咖啡98%是水。

    5. It is very important to adopt a good architecture for your app, such as MVP or MVVM. Separate your app’s business logic, view interactions, and data interactions into different layers so that they're easy to manage and test.

      非常幸运的是心神采用了这样的架构让,让我有了学习的机会。

    6. Get familiar with keyboard shortcuts

      做得还不够,还需要增加。还需要增加。

    1. 在最终代码中,关联对象通常是以成员变量的形式实现的

      简单粗暴。

    2. 这种说法也不完全正确。例如发动机、轮胎等组成汽车,但是汽车拆了,发动机和轮胎依然是存在的。