Jaqen's Blog

Jaqen's Blog

读《韭菜的自我修养》
近来读到李笑来老师的一本书,光书名就很有意思,叫做《韭菜的自我修养》。 李笑来不亏是曾经当过名师的人,整本书的内容浅显易懂,可读性很高。非常适合大多数新入门的投资者好好读读。 我挑重点概要总结了一些精要,和你们分享下。 什么是韭菜?书中一开始的定义是:“在交易市场中没赚到钱甚至赔钱的势单力薄的散户”,他们一般是缺乏基本的阅读能力,比如购买所有的产品都不会去看说明书的人,他们拒绝学习,拿来主义,伸手党,他们一进场不管三七二十一就买买买。 一买就跌,一卖就涨?交易市场有个诡异的定律就是: 你一买,它就开始跌;你一卖,它就开始涨。 为什么? 因为每一次行情结束的根本原因是”入场资金枯竭“。换言...
Android 应用启动速度优化
应用启动时间的长短,影响到用户体验。对研发人员来说,启动速度是我们的“门面”。 本文主要分析如下几个问题: 应用启动有哪些流程? 如何检测应用启动耗时操作? 如何优化应用启动速度? 应用启动流程应用的启动流程即从点击图标到用户可操作的全部过程。 启动分为三种类型: 冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用。 热启动:当启动应用时,后台已有该应用的进程,比如按下 home 键。 温启动:当启动应用时,后台已有该应用的进程,但是启动的入口 Activity 被干掉了,比如按了 back 键,应用虽然退出了,但是该应用的进程是依然...
Android 性能分析工具 TraceView
在做应用启动、卡顿优化时,经常会用到 Android 性能分析工具 TraceView,这里简单介绍下 TraceView 的基础使用。 TraceView 是什么TraceView 是 Android SDK 内置的一个工具,它可以加载 trace 文件,用图形的形式展示代码的执行时间、次数及调用栈,便于我们分析。 生成 trace 文件trace 文件是 log 信息文件的一种,可以通过代码,Android Studio,或者 DDMS 生成。 使用代码生成 trace 文件在想要记录的地方调用 Debug.startMethodTracing("sample")...
程序员成长离不开的技能
很多人,在学生阶段习惯了被动、填鸭式学习,进入社会后,不知道如何去自我学习,严重限制了提升自己的知识和技能的机会。 在这个飞速发展的世界里,做一个终身学习者,自我学习的能力越强越好。 最近看了一本书《软技能: 代码之外的生存指南》,里面的一个主题,讲述了技术人员如何在新技术发展日新月异的世界里,如何快速高效学习技术,以下是我整理的「十步学习法」笔记,供大家参考。 十步学习法的基本思想就是: 要对自己要学的内容有个基本的了解:了解自己不知道什么就足矣。然后,利用这些信息勾勒出学习的范围,即需要学哪些内容,以及学成之后又会获得什么。依靠这些知识,你可以找出各种资源来帮助自己学习。最后,你们可...
如何使用 Python 爬取微信公众号文章
我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章。但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦。 于是便想着能不能把某个公众号所有的文章都保存下来,这样就很方便自己阅读历史文章了。 话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。 主要有以下步骤: 1 使用 Fiddler 抓取公众号接口数据 2 使用 Python 脚本获取公众号所有历史文章数据 3 保存历史文章 Fiddler 抓包Fiddler 是一款抓包工具,可以监听网络通讯数据,开发测试过程中非常有用,这里不多做介...
使用 MediaExtractor 和 MediaMuxer 分离合成音视频
一个音视频文件是由音频和视频组成的,Android 中可以通过 MediaExtractor API 把音频或视频给单独抽取出来,通过 MediaMuxer 合成新的视频。 MediaExtractorMediaExtractor 的作用就是将音频和视频分离。 主要是以下几个步骤: 1. 创建实例 1MediaExtractor mediaExtractor = new MediaExtractor(); 2. 设置数据源 1mediaExtractor.setDataSource(path); 3. 获取数据源的轨道数,切换到想要的轨道 1234567891011121314151...
YUV 格式详解
一般的视频采集芯片输出的码流一般都是 YUV 格式数据流,后续视频处理也是对 YUV 数据流进行编码和解析。所以,了解 YUV 数据流对做视频领域的人而言,至关重要。 在介绍 YUV 格式之前,首先介绍一下我们熟悉的 RGB 格式。 RGBRGB 分别表示红(R)、绿(G)、蓝(B),也就是三原色,将它们以不同的比例叠加,可以产生不同的颜色。 比如一张 1920 * 1280 的图片,代表着有 1920 * 1280 个像素点。如果采用 RGB 编码方式,每个像素点都有红、绿、蓝三个原色,其中每个原色占用 8bit,每个像素占用 24bit,也就是 3 个字节。 那么,一张 1920 *...
使用 Camera 和 Camera2 采集视频数据
Android 中预览相机画面主要用 SurfaceView 和 TextureView。 SurfaceView:SurfaceView 是一个有自己 Surface 的 View。界面渲染可以放在单独线程而不是主线程中。它更像是一个 Window,自身不能做变形和动画。 TextureView:TextureView 同样也有自己的 Surface。但是它只能在拥有硬件加速层的 Window 中绘制,它更像是一个普通 View,可以做变形和动画。 更多关于 SurfaceView 和 TextureView 的知识可以看这篇文章 Android 5.0(Lollipop)中的Surf...
使用 AudioTrack 播放 PCM 音频
Android 中播放声音可以用 MediaPlayer 和 AudioTrack,两者都提供了 Java API 供应用开发者使用。 虽然都可以播放声音,但两者还是有很大的区别的。 其中最大的区别是 MediaPlayer 可以播放多种格式的声音文件,例如 MP3,AAC,WAV,OGG,MIDI 等。MediaPlayer会在 framework 层创建对应的音频解码器,而 AudioTrack 只能播放已经解码的 PCM 流,如果对比支持的文件格式的话则是 AudioTrack 只支持 wav 格式的音频文件,因为 wav 格式的音频文件大部分都是 PCM流。AudioTrack ...
使用 AudioRecord 采集音频
AudioRecord 类是 Android 系统提供的用于实现录音的功能类。 可以看一下 Android 官方文档中对 AudioRecord 的描述: AndioRecord 类的主要功能是让各种 Java 应用能够管理音频资源,以便它们通过此类能够录制平台的声音输入硬件所收集的声音。此功能的实现就是通过 “pulling 同步”(reading读取)AudioRecord 对象的声音数据来完成的。在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取 AudioRecord 对象的录音数据。 AudioRecord 类提供的三个获取声音数据的方法分别是 read(...
avatar
Jaqen Ng