Skip to content
Ider

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

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

Bash

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的指令操作。

2014-07-19
19 July
On July 19, 2014
In Article Collection(聚宝收藏), Knowledge Base(心得笔库), Mobile Development(移动开发)

开发Android必知的工具

tools程序开发有时候非常依赖使用的开发工具,好的完备的开发工具可以让开发人员的工作效率有大幅度的提高。开发Android也是如此,大家可能都离不开Eclipse或Android Studio这些工具,但他们其实是集成开发环境(Integrated development environment, IDE),把很多工具集成在一个里面,配合可视化界面和键盘快捷键,方面寻找和使用。

不过有时候工具集成太多了,往往让人感到迷惑容易遗忘某个工具的存在。本文就谈谈Android开发和Debug时可使用的一些工具,这些工具都可以在安装了Android SDK的Eclipse或Android Studio找到相应的菜单和按钮来打开使用。但考虑到IDE很多时候打开速度实在太慢了,还是考虑直接使用指令在终端单独开打它们吧。

如果安装了Android Studio,这些工具可以在其安装包中找到,比如在Mac下它们就保存在/Applications/Android Studio.app/sdk/tools路径下。如果是使用Eclipse,那么就需要手动下载Stand-alone Android SDK,解压之后也能在其下的tools文件夹里找到。
Read More →

2014-05-23
23 May
On May 23, 2014
In Knowledge Base(心得笔库), Language Tips(语言初试), Mobile Development(移动开发), Special Tricks(奇技妙招)

使用adb shell dumpsys检测Android的Activity任务栈

谈起Android程序开发,就需要了解其四个主要的部件:Activity、Service、ContentProvider、 BroadcastReceiver。而其中Activity是唯一直接控制程序界面呈现,直面用户操作的部件(当然BrowadCastReceiver也能通过桌面控件(App Widgets)来呈现有限的操作界面)。Android对于Activity有严格的生命周期控制,以限制开发者在适当的回调函数里的放上合适的代码。对于多个Activity的转换,Android也有非常好的管理和流畅的切换,对此Android还引入了任务栈(Task Stack)的概念,这个概念对于Android设备上得返回按键有极其重要的联系。

(大部分文档都将其表述为Tasks and Back Stack,但从官方文档的描述来看,Android的相对于Activity讲到的Task都视为一个存放Activities的Stack,所以将其称为Task Stack也不为过。)

在AndroidManifest中申明所要用到的Activity时可以设置不同的launchMode来得到不同的Activity“启动”效果。在使用startActivity开启新的Activity时,传入的Intent也可以设置不同的Flag来达到不同的效果。另一方面,在Activity启动时它可能又开启了另一个Activity,或者调用了finish()函数终结了Activity。

这使得Activity栈变得无法掌握,有时候按下返回按钮或者点击关闭当前Activity的操作,都不知道Android系统会把程序带到那个Activity,不确定这是否是最后一个Activity以致退出了整个程序。亦或者一些按钮和操作循环产生Activity而造成内存膨胀。对于这些问题,如果能够在调试期间知道当前任务栈的情况,就能很方便的观察和发现问题存在的原因,进而选择正确的launchMode,设置恰当Intent的Flag来使程序达到预期的效果。

Read More →

2013-12-26
26 December
On December 26, 2013
In Algorithm Analysis(算法分析), Data Structures(数据结构), Knowledge Base(心得笔库), Language Tips(语言初试), Special Tricks(奇技妙招)

bash中使用printf实现进制转换

最近工作中常涉及到编码转换的问题,比如发送URL的时候需要进行urlencode,上传内容的时候要对MD5进行BASE64的转换。当debug的只能看到8或者16进制的编码而想不到实际的字符是什么,就让人非常烦躁,所以总想有个什么快速的方式能帮助自己进行编码转换 。

最快的方式,应该就像小时候被乘法口诀表一样把他们的对应关系一一记住,但是可能年龄大了记住了东西,外加现在越来越依赖技术带来的便利所以总是不能也不愿意记这些进制关系,一碰到这些问题就Google搜索一下。但这显然这是很 浪费时间的。

如果是用Linux或者Mac系统,用Terminal的话就能带来很多的帮助,比如man ascii就会显出中ASCII在8、10和16进制下所有编码值了。这样子看到一个8或16进制的数,也能很快的找到对应的字符是什么了。不过这还是不过快,毕竟人眼查这样一张有序的表并不会进行二分查找。而且我们希望是能够在O(1)时间复杂度就能得到结果方法。

本文就总结怎么用printf的格式化在Bash环境中实现进制的转换,如果有那个比较好用或常用的,就可以添加到profile中在启动时载入使用。
Read More →

2013-01-02
02 January
On January 2, 2013
In Article Collection(聚宝收藏), Knowledge Base(心得笔库)

代码中的美元$

Dollar symbol
这个题目其实有点标题党了,其实本篇文章主要内容应该是说“代码中的美元符号(dollar sign)”。想总结一下我所看到的美元符号在代码中的起到的作用,当然了并不是说它作为格式化字符时出现在数字前当钱币单位的作用。
Read More →

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.