姜文在《邪不压正》中,究竟布了多大的一个局! | 顾子明

上周承诺了,这周要写《邪不压正》的影评。

相信已经上映一周之后,也不涉及啥剧透了。因此今天,就从姜文设置的种种细节当中,来看看姜文到底讲的是一个什么样的故事。

读这篇影评前,建议先读


以下是正文:

姜文很有趣的是,“某地是曹雪芹当年写红楼梦的地方”这句话,这部片子提到了三次。而红楼梦开篇,就通过甄士隐和贾雨村两个线索人物,说明了这部小说是“真事隐、假语存”,通过叙述一个假的故事,来描绘那些被隐藏了的故事。

就像一开始很多人都以为,主角是彭于晏饰演的李天然,但真正琢磨就会发现,男主角是那个影片英文名的Hidden Man,也就是那个隐藏在李天然后面的蓝青峰。

而蓝青峰与片中所有人物之间的隐藏关系,则是解读这部片子的关键。

继续阅读“姜文在《邪不压正》中,究竟布了多大的一个局! | 顾子明”

《让子弹飞》的秘密,都在《邪不压正》里面 | 顾子明

八年后的今天,姜文民国三部曲的终部《邪不压正》正式上映,姜文兑现了承诺,又是一列火车的驶入四九城,带来了这一场张麻子式酣畅淋漓的复仇之战。

又是枪与火车,又是武士道与鸿门宴,又是真情与背叛。

这部《邪不压正》将张麻子、汤师爷、黄老爷、老三等人的历史宿命与感情纠缠,再一次展现在我们面前。

继续阅读“《让子弹飞》的秘密,都在《邪不压正》里面 | 顾子明”

微软完成75亿美元收购GitHub交易

微软周五宣布,该公司已经完成了收购代码托管平台GitHub的交易,这项收购交易的程序是从6月开始的。微软此前宣布以75亿美元的价格收购GitHub,交易完成后GitHub团队将被纳入微软旗下,欧盟委员会在一周以前批准了这项交易,该委员会判定合并后公司不会带来任何重大的竞争忧虑。

也许,我们终将变成自己曾经厌恶的模样 | 顾子明

这几天在家重玩大航海时代,两代游戏中西班牙无敌舰队,是大多数角色最终的挑战目标,而在拥有着全球广阔殖民地而称霸全球的西班牙,也是当年央视拍摄《大国崛起》系列片中,一个描绘的国家。

而当年国力远胜西班牙的大明王朝,虽然在郑和的带领下建立起了极其庞大的远洋舰队,甚至一度远征至非洲,向全世界传播文明和技术的中国,最终选择了闭关锁国,将霸主的地位拱手相让。

数百年之后,随着为了开拓殖民市场的八国联军攻入北京,取代了大明王朝的清朝廷已然摇摇欲坠,而我们仔数这八国联军,却已无法找到西班牙这个曾经一度统一欧洲的超级列强。

继续阅读“也许,我们终将变成自己曾经厌恶的模样 | 顾子明”

GMS Package 10月份更新已释放

谷歌已于10月26日释放新版本GMS包。

在新版本中,更新了应用程序,makefile和配置文件,适配出欧盟设备符合 GMS EEA要求(EEA Google Search和Chrome放置要求)。 

更多详细信息,请参阅Android GMS 2018年10月更新发行说明文档。

参考文档:Android GMS October 2018 Update Release Notes

继续阅读“GMS Package 10月份更新已释放”

基因的力量有多么可怕 | 紫竹张先生

有这么一句话,叫人人生而平等,这句话用于人权方面是正确的,但是很多人把这句话错误的应用到了基因和天赋身上,认为大家真的是完全平等的。
但是实际上,基因的力量是非常可怕的,可怕到你目瞪口呆,虽然大家都是人类,基因几乎是完全一样的,但是有时候亿分之一的区别,就会导致能力的巨大差异。

继续阅读“基因的力量有多么可怕 | 紫竹张先生”

“有力度”的对外发声,底气在这里! | 顾子明

本文为近期文章的一个梳理,把如“弹性防御”、“先干为敬”、“美股下跌”等逻辑串联起来,作为一个阶段性的总结,

近期国内的政经领域,颇有点“中国特色”,我国政府“有力度”的对外发声的频率突然大幅提升。

继续阅读““有力度”的对外发声,底气在这里! | 顾子明”

[CTS] CTS Verifier 测试结果的迁移 | Sukha

有时候测试完大部分项目而由于测试机的硬件缺陷,无法通过某些项目,可以把测试结果进行迁移,备份恢复到另一台机器然后出报告。

adb backup -f com.android.cts.verifier.backup -apk com.android.cts.verifier     # backup on one device
adb restore com.android.cts.verifier.backup                              # restore to the same or any other device
 

旧版本到新版本升级也是支持的。

以8.1r7为例:

继续阅读“[CTS] CTS Verifier 测试结果的迁移 | Sukha”

[CTS] android.app.cts.SystemFeaturesTest#testSensorFeatures

android.app.cts.SystemFeaturesTest#testSensorFeatures fail
junit.framework.AssertionFailedError: PackageManager#hasSystemFeature(android.hardware.sensor.compass) returns true but SensorManager#getSensorList(2) shows sensors [] expected:<true> but was:<false>

解决方案

继续阅读“[CTS] android.app.cts.SystemFeaturesTest#testSensorFeatures”

[CTS] android.app.cts.SystemFeaturesTest#testCameraFeatures

run cts -m CtsAppTestCases -t android.app.cts.SystemFeaturesTest#testCameraFeatures --skip-preconditions  --precondition-arg skip-media-download 

android.app.cts.SystemFeaturesTest#testCameraFeatures    fail junit.framework.AssertionFailedError: PackageManager#hasSystemFeature should NOT return true for android.hardware.camera.level.full

解决方案

继续阅读“[CTS] android.app.cts.SystemFeaturesTest#testCameraFeatures”

[CTS] CtsBluetoothTestCases fail

android.bluetooth.cts.BluetoothLeScanTest#testBasicBleScan    fail junit.framework.AssertionFailedError: Scan results shouldn't be empty
android.bluetooth.cts.BluetoothLeScanTest#testOpportunisticScan    fail junit.framework.AssertionFailedError: Scan results shouldn't be empty    打开Location到High accuracy, Scanning/bt scanning
android.bluetooth.cts.BluetoothLeScanTest#testScanFilter    fail junit.framework.AssertionFailedError: Scan results shouldn't be empty
android.bluetooth.cts.BluetoothLeScanTest#testStartScanPendingIntent fail junit.framework.AssertionFailedError: Scan results shouldn't be empty
android.bluetooth.cts.BluetoothLeScanTest#testStartScanPendingIntent_nullnull    fail junit.framework.AssertionFailedError: Scan results not received

解决方案

继续阅读“[CTS] CtsBluetoothTestCases fail”

[CTS] CtsVideoTestCases,CtsMediaTestCases | Sukhu

android.video.cts.VideoEncoderDecoderTest#testVp8Goog0Perf1280x0720    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.google.vp8.encoder video/x-vnd.on2.vp8 1280x720: [32.0, 32.0].

run cts -m CtsVideoTestCases -t android.video.cts.VideoEncoderDecoderTest#testVp8Goog0Perf1280x0720

CtsMediaTestCases

android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf0720x0480    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.google.h264.decoder video/avc 720x480: [142.0, 142.0].
android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf1280x0720    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.google.h264.decoder video/avc 1280x720: [52.0, 52.0].
android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf1920x1080    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.google.h264.decoder video/avc 1920x1080: [17.0, 17.0].
android.media.cts.VideoDecoderPerfTest#testH263Other0Perf0176x0144    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.qti.video.decoder.h263sw video/3gpp 176x144: [760.0, 760.0].
android.media.cts.VideoDecoderPerfTest#testH263Other0Perf0352x0288    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.qti.video.decoder.h263sw video/3gpp 352x288: [560.0, 560.0].
android.media.cts.VideoDecoderPerfTest#testMpeg4Other0Perf0480x0360    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.qti.video.decoder.mpeg4sw video/mp4v-es 480x360: [482.0, 482.0].
android.media.cts.VideoDecoderPerfTest#testVp9Goog0Perf1280x0720    fail    junit.framework.AssertionFailedError: Expected achievable frame rates for OMX.google.vp9.decoder video/x-vnd.on2.vp9 1280x720: [63.0, 63.0].

run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf0720x0480
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf1280x0720
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testAvcGoog0Perf1920x1080
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testH263Other0Perf0176x0144
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testH263Other0Perf0352x0288
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testMpeg4Other0Perf0480x0360
run cts -m CtsMediaTestCases -t android.media.cts.VideoDecoderPerfTest#testVp9Goog0Perf1280x0720

解决方案

继续阅读“[CTS] CtsVideoTestCases,CtsMediaTestCases | Sukhu”

[CTS] CtsServicesHostTestCases | Sukhu

android.server.cts.ActivityManagerDisplayTests#testConsequentLaunchActivityFromSecondaryDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

android.server.cts.ActivityManagerDisplayTests#testConsequentLaunchActivityFromVirtualDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testConsequentLaunchActivityFromVirtualDisplayToTargetDisplay    fail    junit.framework.ComparisonFailure: Launched activity must be focused expected:<android.server.cts[.second/.Second]Activity> but was:<android.server.cts[/.Launching]Activity>
android.server.cts.ActivityManagerDisplayTests#testContentDestroyOnDisplayRemoved    fail    junit.framework.AssertionFailedError: Activity from removed display must be destroyed
android.server.cts.ActivityManagerDisplayTests#testDisplayResize    fail    junit.framework.AssertionFailedError: Activity=android.server.cts/.ResizeableActivity must be visible.
android.server.cts.ActivityManagerDisplayTests#testExternalDisplayActivityTurnPrimaryOff    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testExternalDisplayToggleState    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testImmediateLaunchOnNewDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchActivitiesAffectsVisibility    fail    junit.framework.AssertionFailedError: Activity=android.server.cts/.VirtualDisplayActivity must be visible.
android.server.cts.ActivityManagerDisplayTests#testLaunchActivityFromAppToSecondaryDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchActivityOnSecondaryDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchExternalDisplayActivityWhilePrimaryOff    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchNonResizeableActivityFromSecondaryDisplayNewTask    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchNonResizeableActivityFromSecondaryDisplaySameTask    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testLaunchWithoutPermissionOnVirtualDisplayByOwner    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<15> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testMoveNonResizeableActivityToSecondaryDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testMoveTaskBetweenDisplays    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<21> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testMoveToDisplayOnLaunch    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testNewTaskSameDisplay    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testPermissionLaunchFromAppOnSecondary    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<3> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testPermissionLaunchFromDifferentApp    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<6> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testPermissionLaunchFromOwner    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<5> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testPermissionLaunchFromShell    fail    junit.framework.AssertionFailedError: Focused stack must be on secondary display expected:<2> but was:<0>
android.server.cts.ActivityManagerDisplayTests#testPermissionLaunchMultiUidTask    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testRotationNotAffectingSecondaryScreen    fail    junit.framework.AssertionFailedError: Sizes must not change after rotation
android.server.cts.ActivityManagerDisplayTests#testStackFocusSwitchOnDisplayRemoved3    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testStackFocusSwitchOnTouchEvent    fail    junit.framework.ComparisonFailure: Focus must be switched back to primary display expected:<android.server.cts/.[VirtualDisplay]Activity> but was:<android.server.cts/.[Test]Activity>
android.server.cts.ActivityManagerDisplayTests#testStackFocusSwitchOnTouchEventAfterKeyguard    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
android.server.cts.ActivityManagerDisplayTests#testTaskMatchAcrossDisplays    fail    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

解决方案

继续阅读“[CTS] CtsServicesHostTestCases | Sukhu”

Android Verified Boot 2.0 | thanksgining

AVB2.0简要说明

AVB2.0(Android Verified Boot2.0)是google新设计的verified boot流程用于保护boot/recovery/system/vendor等一些受保护分区的完整性。MTK平台中dtbo不使用AVB2.0保护,build出来的dtbo是avb2.0签名方式,会在调用签名脚本时将dtbo改为正常签名方式(dtbo用于初始化lcm等,如果dtbo校验失败了,无法显示yellow/orange/red state),而其他的image(preloader,lk,logo,tee等)仍然是使用MTK的verify flow。在Android P版本,如果平台使用的kernel版本大于等于4.9的话,AVB2.0是必须要开启的。

继续阅读“Android Verified Boot 2.0 | thanksgining”

Android Verified Boot 2.0简要 | thanksgining

AVB2.0被用于启动引导,此用法添加一个“vbmeta.img”镜像。public key被编译到bootloader中用于校验vbmeta数据,vbmeta.img包含应由此public key验证的签名。

vbmeta.img包含用于验证的public key,但只有bootloader验证过vbmeta.img才会可信,就好比认证一样,包含可信public key和签名。

因此,我们在AVB中有两个重要key,一个验证vbmeta.img的OEM key,一个验证其他分区(boot/system/vendor)的verity key。当然可以使用OEM key作为verity key。

我们知道OEM key用于在bootloader阶段验证vbmeta.img。这还不够,我们必须验证其他分区,vbmeta.img包含的public key用于此目的。就像avb1.0中verity key一样,此public key用于验证system、vendor分区和boot分区。这里有些不同之处,avb1.0使用OEM key验证boot分区,使用verity key验证system/vendor分区,但avb2.0使用OEM key验证vbmeta.img,并使用其中包含的public key验证其他分区(system/vendor/boot等)。

继续阅读“Android Verified Boot 2.0简要 | thanksgining”