Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Terminal

2016-12-22
22 December
On December 22, 2016
In IT Products(数码产品), Knowledge Base(心得笔库), Programming Life(程序人生)

从图形界面回到终端

oh-my-zsh

电脑一开始起源于终端(Terminal),通过键盘输入简单文字,在黑白界面上输出字符。直到图形界面(Graphical User Interface, GUI)的出现,有了更加直观的视图显示,有了更简单的人际交互,电脑才真正普及成个人电脑。

在我的工作经历中,我一直从事都是前段开发。从最早的网页开发,到现在的Android开发,基本上所有代码都在本地电脑运行,所以我很少需要去使用终端来输入指令来执行操作。虽然也学习了Vim,但是绝大多数时间都是使用强大的可视化IDE,例如Visual Studio、Android Studio等等。简单的编辑也会倾向有Sublime Text之类的应用程序。

可视化的应用程序可以让人很快上手操作,通过鼠标寻找菜单目标,或者更新设置都是非常简便的操作。视图窗口也会提供更多不同的内容显示来反馈各类信息。

但是随着开发越来越深入,我越来越感到使用鼠标,以及切换各类视图让我的工作效率变得越来越慢。特别是开始使用多个屏幕进行工作时,鼠标需要被拖动的距离也变得越来越长;每当我在Chrome中打开无数个网页窗口,寻找到想要的页面也越来越难。这其实也反应了费茨法则(Fitts’ Law)。

因此我越来越希望我的手指能够保持在键盘上,而不用在键盘和Trackpad直接来回切换。于是我开始习惯通过各类程序的快捷键来操作,倾向在终端输入指令来进行操作,使用GNU Readline来移动光标。这样大大提高了我的效率,但是依然有很多时候,我花时间来回切换。再者因为我的主业在Android上,我还是不会

前阵子我上了Jim Meyering一堂关于如何高效使用终端的课,一下子又让我对终端变得非常着迷:键盘指令满屏幕地飞;无需拖动光标就能进行文字选择;随时随地都可以Vim指令……太多太多好玩又高效的功能。

于是我开始研究起终端的知识,从Mac默认的bash切换到zsh;安装了Oh My Zsh;学习tmux的指令和配置……

但是在接下来的一周里,我的效率没有提高反而降低了好多:我要花大把的力气重新为zsh配置我的初始指令;tmux完全不支持Mac专有的指令;使用Vim的页面指令并没有滚动鼠标来自自然流畅。

我渐渐怀疑使用终端是否是个退步的表现,研究这些指令是否真的对我有帮助?我想来想去,想出了一个比拟:

现代人基本都会开汽车,汽车简单的操作让更多人接受这个工具;但是仍然有很多人喜欢开摩托车,喜欢不一样的速度与激情。从效率上讲,汽车比人力要快很多,也能承载更多的人;但在交通拥堵的街道上,摩托车却又更为有效。

汽车的功能变得越来越多,然而操作变得越来越简单,让更多人可以接受和使用;摩托车的功能却被其空间所局限,操作也很复杂。

这样对比,我就变成了在想:我要学摩托车吗?于是答案就变成了:我学。而且我也真的有考了摩托车驾照。因为开摩托很酷。

所以为了酷这个原因,我也要深入研究终端指令。最近,这些指令也为我带来了极大的帮助:

我在重构一些Java代码,需要重命名某个包(package),而那个包下有数百个文件,还有很多引入(import)该包下的class也需要更新。虽然Intellij有重构的功能,但由于代码量实在太大,Intellij既不能承受这量度,也无法完全的更新所有文件,特别是一些不被Intellij识别的文本文件和资源文件。于是我花了些时间写了脚本,直接用grep来查找,用sed来修改,要是错了就用版本控制撤回,一切是如此的高效而又可重复。

现在就因为zsh那强大的路径补全,我也越来越离不开它;也渐渐地习惯了tmux的指令操作。

2016-10-04
04 October
On October 4, 2016
In Knowledge Base(心得笔库), Special Tricks(奇技妙招)

从Terminal截取Android设备的屏幕

做Android开发的时候,经常会需要截取设备的屏幕甚至录制设备屏幕,来让同事知道提交的代码实现的功能,或者让他们知道产品中出现来什么问题。截取Android设备的屏幕有很多方法,比如在Nexus系列同时按下“电源”和“音量调低”按钮来截取,也可以用第三方程序来完成。通过另一部手机来拍照录像也是可行的方案。但是这些方法还需要想办法将文件传输到电脑上,又要多一步麻烦的操作。

Mac电脑上也有一些应用程序可以截屏Android设备,但是我更喜欢用终端指令,令人开心的是Android自带的 adb 已经提供了截取屏幕和录制屏幕的指定:

[codesyntax lang=”bash” lines=”normal”]

$ adb shell screencap /sdcard/screen.png
$ adb shell screenrecord --verbose /sdcard/demo.mp4

[/codesyntax]

不过生成的文件依然保存在设备中,还需要用adb pull指定来转到电脑上

为了让整个过程更加的便捷,我将这些指令包裹在bash方法中,然后一个指令来完成截取和传输的工作。

截取Android设备当前屏幕并保存到执行指令的电脑目录上:

[codesyntax lang=”bash” lines=”normal”]

# capture screen of android device
andrdroidScreenCapture() {
    curTime=`date +%Y-%m-%d-%H-%M-%S`
    tmpeName="$curTime.png"
    [[ -n $1 ]] && fileName=$1 || fileName=$tmpeName
    devicePath="/sdcard/$tmpeName"
    adb shell screencap -p $devicePath
    adb pull $devicePath $fileName
    adb shell rm $devicePath
}

[/codesyntax]

录取Android设备屏幕活动,结束后将视频文件保存到执行指令的电脑目录上:

[codesyntax lang=”bash” lines=”normal”]

export ADB_SHELL_SCREENRECORD_ARGS='--verbose --bit-rate 2000000'
# record screen of android device
androidScreenRecord() {
    echo -e "\033[1m(press Ctrl-C to stop recording)\033[0m"
    curTime=`date +%Y-%m-%d-%H-%M-%S`
    tmpeName="$curTime.mp4"
    [[ -n $1 ]] && fileName=$1 || fileName=$tmpeName
    devicePath="/sdcard/$tmpeName"
    adb shell screenrecord $ADB_SHELL_SCREENRECORD_ARGS $devicePath
    sleep 1 # wait for video encoding finish
    adb pull $devicePath $fileName
    # Don't delete copy in device.
    # adb shell rm $devicePath
    open $fileName
}

[/codesyntax]

较短的指令别名,并通过提供的文件的扩展名来决定是截屏还是录制:

[codesyntax lang=”bash” lines=”normal”]

function asc() {
    if [[ -z $1 ]]; then
        echo "Please provide a filename."
        echo "Provideing .png extension for capturing the device screen, and providing .mp4 for recording the device screen."
        return
    fi

    if [[ $1 == *.png ]]; then
        andrdroidScreenCapture $1
    elif [[ $1 == *.mp4 ]]; then
        androidScreenRecord $1
    else
        echo "Filename with unknow extension, only .png and .mp4 are supported"
    fi
}

[/codesyntax]

完整脚本代码可以在Gist上找到,把它们加入到Mac电脑的~/.bash_profile中,连接上开启了“开发者模式”的Android设备就可以方便截图了。

http://blog.iderzheng.com/wp-content/uploads/2016/10/android-screen-capture-SD.mp4

 

References:
  1. Capture or record android screen, pull file to Mac when it’s completed
  2. ADB Shell Commands | Android Studio
  3. Android Debug Bridge | Android Studio
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.