上一篇:技术的极限(8): 集成与分离
目录:
** 0x01 颜色空间
** 0x02 最好的机器学习书籍
** 0x03 如何阅读一篇科学研究的新闻
** 0x04 Why software projects take longer than you think – a statistical model
** 0x05 数据库基础
** 0x06 State-of-the-Art
** 0x07 Manager
** 0x08 Founder's Guide to Building a Developer Tools Business
0x01 颜色空间
原文: color-spaces
这篇文章通过页面内的交互操作和分节解说,只在RGB颜色模型内解释了颜色空间的概念,以及不同颜色空间之间的相互转换的概念。图文交互俱佳,推荐阅读原文。
简略注记:
一个RGB颜色空间,由RGB构成。RGB通过公式可以转换到强度,例如:
- 线性强度:I = (intensity value) = (encoded value of R, G, B)
- 非线形强度:I = (intensity value) = (encoded value of R, G, B )^2.0
一个颜色空间的强度转换公式下,同一个颜色,例如灰色从亮到暗,人眼看到的差别是不同的。这种差别叫做tone response curve(TCR)。
为什么要选择不同的强度转换公式呢?
因为不同的强度转换公式形成的TCR不同。
因此就会形成不同的颜色空间。
为什么不直接使用线性转换呢?
因为人眼对光线的感知是非线性的。
选择不同的TCR可以获得不同舒适度的颜色感知。
而不同的转换公式决定了不同的颜色空间。
这些颜色空间之间可以相互转化。
假设有颜色空间A,和颜色空间B。那么可以分别计算颜色空A里的R、G、B用颜色空间B的R、G、B如何表示:
R(A) = w11* R(B) + w12 * G(B) + w13* B(B)
G(A) = w21* R(B) + w22 * G(B) + w23* B(B)
B(A) = w31* R(B) + w32 * G(B) + w33* B(B)
从而,根据格拉斯曼原则:
两个颜色空间中色光一样的颜色CA,CB。各自混合上另一个在两个颜色空间中色光一样的颜色CA’,CB’。得到的还是在两个色光一样的颜色。
因此,就可以获得从颜色空间B到颜色空间A的转换矩阵W:
w11 w12 w13
w21 w22 w23
w31 w32 w33
反过来,要求从颜色空间A到颜色空间B的变换矩阵,只要求逆矩阵S即可:
s11 s12 s13
s21 s22 s23
s31 s32 s33
也就是说WxS=I
。
颜色空间的R、G、B取值都在[0-255]时,颜色空间形成了一个正方体。
从颜色空间A转换到颜色空间B,则可能A空间中的点到B里面就不在裁剪后到颜色空间正方体内。
常见的RGB颜色空间有:
- sRGB颜色空间
- XYZ颜色空间
常见的一种模型将亮度(光亮)和色度(颜色)分离开,它被称为 YCbCr,转换公式如下:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
反过来,从YCbCr转换到RGB:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
[1] pastel is a command-line tool to generate, analyze, convert and manipulate colors
[2] 一份循序渐进的视频技术介绍
0x02 最好的机器学习书籍
原文: best-deep-learning-books-updated-for-2019
如果打算系统学习机器学习,两个路径,一个是从书籍入手。另一个是从工具链入手。从书籍入手又存在书籍茫茫多,如何选择的问题,这篇博文给出了TopN推荐。
- Deep Learning by Ian Goodfellow, Yoshua Bengio, Aaron Courville
- Grokking Deep Learning by Andrew W. Trask
- Deep Learning with Python by Francois Chollet
- Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron
- The Hundred-Page Machine Learning Book by Andriy Burkov
- Reinforcement Learning: An Introduction (2nd Edition) by Richard S. Sutton, Andrew G. Barto
- Deep Reinforcement Learning Hands-On by Maxim Lapan
- Learning From Data by Yaser S. Abu-Mostafa, Malik Magdon-Ismail, Hsuan-Tien Lin.
- The Book of Why by Judea Pearl, Dana Mackenzie.
- Machine Learning Yearning by Andrew Ng.
- Interpretable Machine Learning by Christoph Molnar.
- Neural Networks and Deep Learning by Michael Nielsen.
0x03 如何阅读一篇科学研究的新闻
- Where did the story come from?
- What kind of research was this?
- What did the research involve?
- What were the basic results?
- How did the researchers interpret the results?
- Conclusion
[1] https://www.nhs.uk/news/cancer/drinking-very-hot-tea-linked-risk-1-type-oesophageal-cancer/
0x04 Why software projects take longer than you think – a statistical model
从统计的角度看为什么估计总是比实际时间长,有一定道理。实际上在估计时间里面,我们连简单的列出耗时的单元做累加都十分困难。
0x05 数据库基础
人们总是忘记数据库给软件世界带来的巨大作用,计算机技术里面,数据库技术占有十分重要的一席,数据库技术背后是关系代数,虽然我们学会了SQL后,SQL本身就比关系代数更为直观。
0x06 State-of-the-Art
原文:https://en.wikipedia.org/wiki/State_of_the_art
术语State-of-the-Art表示一个领域研究的当前最高水平。
State-of-the-art (sometimes cutting edge or leading edge) refers to the highest level of general development, as of a device, technique, or scientific field achieved at a particular time.
0x07 Manager
说一个计算机含义上的“manager”,manager一般发生在同一种对象有N个的情况下,如果代码里只有一个某种类型的对象,你是不需要对它做manager的,例如mysqlClient,这个client只会有一个,没什么好“manager”的。但是如果你有一些session,这些session就需要被manager,你会自然有一个SessionManager。但manager也有强、弱之分,如果只是持有session,简单的add/remove,做点批处理,就是弱manager。而如果你要对session做一堆策略调度,就稍微重型点,例如做garbage collection,超时清空,做LRU剔除之类,就稍微中度一点。Manager有不同的数据结构,不同的数据结构会带来不同的插入、搜索效率,没有经过设计的Manager结构是不加思考的,没有效率的,被Manager的单元总是会膨胀的,以及,即使只有区区3-4个单元,不经适当的结构设计,也是无法有适应复杂度的增长。在计算机中,我们需要耗费大量的智力在控制复杂度上。
0x08 Founder's Guide to Building a Developer Tools Business
- Understanding the developer persona:
- The most valuable features are the ones that automate the dull stuff and do what they say they do
- Offer multiple/tiered pricing models
- They look at the pricing model of your product to see if you offer a free tier so that they can test your platform without investing anything
- Offer easy-to-navigate docs
- Docs should be detailed, easy to read, and packed with examples
- Offer demos, previews, and trials
- You can still offer demos, trials, or quick screencasts to showcase your product.
- Offer integrations and CLI tools
- CLI tools and language libraries enhance your chances of success in developers’ circles
- Offer community support
- Word spreads fast if users can get support and resolve their issues quickly, and your product becomes more and more popular
这些道理说起来都懂,但是我们总是很难严格执行,以及把简单的6个步骤做到极致,我们很难看到对策略的彻底贯彻,以至于我们总是只能把东西做到普通的水平,也就是很难产出卓越的软件。普通水平的策略实行效率,让我们无法在软件制造上获得10x的成长,以至于我们自己都会失望。有很多种人们难以把握的力,其中之一就是执行力。
--end--