Java findViewById
Kotlin findViewById
1 | private val button by bindView<Button>(R.id.button) |
你可能会好奇,有那么多“黑科技”,像自动驾驶、深度学习、混合现实,为什么得到的第一门前沿科技课,会是一个连名字都特别陌生的 “脑机接口”课程?答案是,没有哪项技术像脑机接口一样,会彻底颠覆我们人类文明的进程。脑机技术的颠覆性在于,它在试图替代五万年来我们赖以为生的协作工具:语言。它要绕过语言,建立一个能让大脑和外界直接沟通的全新界面。
这可不仅仅是会改变我们交流的方式。它会赋予我们人类一系列“科幻级别”的新能力,比如用意识操控机器、移植记忆、用机械骨骼代替人体、以及全面提升大脑的算力。用一句话来说,脑机技术一旦实现,人类将一跃成为超人。
前沿技术的演进,其实是遵循着一些最为朴素的底层逻辑。
在人类的技术史上,很多创新,都是因为我们把已经存在的技术,用一种全新的方式组合在了一起。比如说,喷气机,其实是压缩机、涡轮增压机、点火系统的组合,用新的方式呈现了出来。再比如机关枪,其实是组合了火药、弹簧、灭火器以及水冷系统的技术。
脑机技术就是一个超级跨界组合,囊括了脑科学、神经科学、材料科学、心理学、计算机科学等等多个学科的研究,也高度依赖于这些学科的协同进化。
如果我告诉你,对于自行车为什么能向前滚动而不倒的原理,直到现在都没有定论。如果我再告诉你,蒸汽机的发明,要比科学家提出热力学三定律,要早上100年呢?你会不会很惊讶?
对于有工程师思维的科学家来说,技术的突破走在理论前面,这毫不令人意外。虽然大脑的工作方式仍然是个谜团,但是并不妨碍我们在实验室里,用脑机技术操控机械手臂、激发心流、治疗中风、瘫痪。这难道不是,技术先行于理论的最佳案例吗?
我们知道,苹果公司是全世界第一个市值突破万亿美金的公司。我认为最关键的原因在于,移动互联网,为人类活动创造了全新的空间。这种“拓荒式”的突破,就像哥伦布发现新大陆一样,必然会带来巨大的机会。
你会看到,脑机接口将会开发出一片我们从未涉足的无人之地。如果我们的交流是通过意识,如果我们能把思想、情感、记忆都上传到云端,那么,我们人类完成协作和创造价值的界面,就会彻底改变。这个新界面,现在还是一片荒原,但是未来必将被开拓。
所以你看,脑机接口之所以值得我们花时间,不仅是因为它很“黑科技”。我希望你从这门前沿课收获的,是关于科技发展最普适的道理。
脑机接口的四层金字塔,这是一个从出发点到终极目标的清晰路径。通过攀登这个金字塔,你会看到脑机技术如何能让人成为超人。
在金字塔的最底层是“修复”,这指的是脑机技术如何修复身体机能。举例来说,让瘫痪病人重新站起来行走,让失明的人获得视觉的功能。这是脑机接口的初衷,因此也是实验室里研究最深入的一项应用。不过你一定可以想到,这一层的技术复杂性非常高。
在金字塔的第二层是“改善”,这指的是,利用脑机技术改善我们的精神状态,比如提高注意力、提升睡眠质量,甚至激发心流体验等。这是脑机技术目前离商业化最近的应用。
金字塔的第三层是“增强”。埃隆马斯克曾经做过这样一个论断:他说脑机接口,相当于给人类的大脑,添加了一个叫做“数字化第三层”的新结构。这个新结构,会让我们的智能大幅度增长,超越我们的生物极限。这是什么意思?能实现吗?
登上金字塔的最顶层是“沟通”。如果我们把思考的尺度,从人类个体放大到群体会怎么样呢?在顶层,我们一起看看,脑机接口将如何颠覆“语言”这种低效的沟通方式,以及为什么这件事可能会创造出一种全新的“群体智能”。
这四层金字塔的应用,要是都实现了,那我们人类真的就靠技术的力量,实现了下一步的进化。不过,这一定是好事吗?和机器完美融合之后,我们到底是“人类”,还是“机器人”呢?我们的脑数据安全,又如何保障呢?
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
1 | { |
1 | db.mycol.aggregate([ |
knuth解释:协程就是多入多出的子程序,就是可以协同运行的程序。
通常在Python中我们进行并发编程一般都是使用多线程或者多进程来实现的。
对于计算型任务由于GIL的存在我们通常使用多进程来实现;而对于IO型任务我们可以通过线程调度来让线程在执行IO任务时让出GIL,从而实现表面上的并发。
对于IO型任务我们还有一种选择就是协程,协程是运行在单线程当中的“并发”,协程相比多线程的优势:
两者从系统层面来说:
Python的协程是基于generator实现的,Python中的asyncio也是基于协程来进行实现的。
在generator中,我们不但可以通过for循环来迭代,还可以不断调用next()函数获取由yield语句返回的下一个值。但是Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。
Python中的协程大概经历了如下三个阶段:
1 | def consumer(): |
输出结果1
2
3
4
5
6
7
8
9
10
11
12
13
14
15produce() producing 1
consumer() 1
produce() receive msg from consumer: ok
produce() producing 2
consumer() 2
produce() receive msg from consumer: ok
produce() producing 3
consumer() 3
produce() receive msg from consumer: ok
produce() producing 4
consumer() 4
produce() receive msg from consumer: ok
produce() producing 5
consumer() 5
produce() receive msg from consumer: ok
实际执行过程如下:
1 | def gen_yield(): |
输出结果1
2
3
4
5
6
7range(0, 5)
====================
0
1
2
3
4
两者的区别:yield直接将range这个generator返回,而yield from解析range,将每个item返回。
特别注意:yield from后面必须跟iterable对象(可以是生成器,迭代器)。
1 | def fab(max): |
输出结果1
2
3
4
51
1
2
3
5
1 | @asyncio.coroutine |
输出结果1
2
3
4
5
6
7
8
9
10
11Stupid think 0.08516295175908538 secs to get 1
Smart think 0.1537956191924291 secs to get 1
Smart think 0.12929758554701115 secs to get 1
Stupid think 0.2892256222928606 secs to get 1
Smart think 0.17164449165156828 secs to get 2
Smart think 0.16220980840025945 secs to get 3
Stupid think 0.27210541712117337 secs to get 2
Smart think 0.1715009248020697 secs to get 5
Stupid think 0.2023469563932653 secs to get 3
Stupid think 0.3009223257835448 secs to get 5
All fib finished.
1 | async def smart_fib(n): |
输出结果1
2
3
4
5
6
7
8
9
10Smart think 0.00882750921810851 secs to get 1
Smart think 0.04897605243502872 secs to get 1
Stupid think 0.14133676443250204 secs to get 1
Smart think 0.09460081340195459 secs to get 2
Smart think 0.10392360738913782 secs to get 3
Stupid think 0.15655241126836938 secs to get 1
Stupid think 0.07286491653845838 secs to get 2
Smart think 0.18776425866569166 secs to get 5
Stupid think 0.1964418153612619 secs to get 3
Stupid think 0.010708925895951162 secs to get 5
This module defines names for some object types that are used by the standard Python interpreter
types.BuiltinFunctionType
types.BuiltinMethodType
types.CodeType
types.DynamicClassAttribute
types.FrameType
types.FunctionType
types.GeneratorType
The type of generator-iterator objects, created by generator functions.
types.GetSetDescriptorType
types.LambdaType
The type of user-defined functions and functions created by lambda expressions.
types.MappingProxyType
types.MemberDescriptorType
types.MethodType
The type of methods of user-defined class instances.
types.ModuleType
types.SimpleNamespace
types.TracebackType
types.new_class
types.prepare_class