设置 Git 账户及邮箱

当我们在GitHub中提交修改时,GitHub通过我们本地git配置文件中配置的邮箱地址,与我们的GitHub账户相关联,这样GitHub提交记录就可以关联提交者的GitHub账户。

那么我们怎么在本地配置我们的git邮箱呢?

#全局 git 配置

我们可以使用git config命令来修改本地git配置。设置全局用户及邮箱:

$ git config --global user.name gitaccount
$ git config --global user.email gitaccount@example.com
Show More

修改 Ubuntu 用户根目录下中文文件夹名称

安装中文版 Ubuntu 后,我们可以看到在我们的用户目录下,有一些中文名称的文件夹:

$ ls ~/
examples.desktop  公共的  模板  视频  图片  文档  下载  音乐  桌面

这些中文命名的文件夹国人看起来会比较顺眼一些;但是对于习惯用命令行的用户,每次输入目录名称,切换中英文也是件麻烦的事情。我习惯的会把这些文件夹重新修改为英文目录。

这些目录可以在如下配置文件找到:

Show More

修改 Ubuntu 主机名

在 Ubuntu 中修改主机名,需修改两个文件。

首先是 /etc/hostname 文件:

$ cat /etc/hostname
myhostname

然后是 /etc/hosts 文件:

Show More

GitHub 添加 SSH keys


上文中介绍了 SSH 密钥对的生成,下面介绍下如何在 GitHub 中使用 SSH 密钥对。


#一. 查看已有的 SSH 密钥对

首先查看我们目前已有的 SSH 密钥对:

$ ls -al ~/.ssh
# 列出我们电脑上已有的所有 SSH 密钥对文件。

默认公钥文件名为以下形式:

  • id_dsa.pub
  • id_ecdsa.pub
  • id_ed25519.pub
  • id_rsa.pub

我们可以使用本地已有的密钥对,也可以建立新的密钥对

Show More

创建 SSH 密钥对

SSH 密钥对可以让用户无需输入密码即可登录到 SSH 服务器中。由于登录的过程不需要密码,因此可以防止由于密码被拦截、破解造成的账户密码泄露。再加上密码短语(passphrase)的使用,使得 SSH 的安全性更高一层。

SSH 密钥对总是一把公钥、一把私钥的成对出现;公钥可以自由的添加到远程 SSH 服务器中用来验证用户是否合法;私钥相当于自己的身份认证,需要妥善保存不能泄露。

SSH 密钥的其使用原理很简单:用户将公钥添加到远程主机中,登录的时候,远程主机会向用户发送一段随即字符串,用户使用自己的私钥加密后,再发送到远程主机。远程主机使用本地存储的公钥进行解密,如果成功,证明用户时可信的,直接允许登录 shell ,不再要求密码。这样就保证了整个登录过程的安全,防止了中间人攻击。

Show More

免费PHP空间的申请及使用


一. 申请PHP空间

1. EcVPS

首先进入EcVps申请页面

Show More

Android Touch事件传递机制(四) -- Touch事件处理(onTouchEvent)


(本文基于android-2.3.3_r1代码研究)

前面研究了Android触屏事件的分发机制;本文继续从源码角度研究触屏事件的处理机制。


一. View.onTouchEvent

Android的触屏事件,最终分发给View的onTouchEvent方法来处理,我们来看看它是怎么处理的:

Show More

Android Touch事件传递机制(三) -- Touch事件分发(dispatchTouchEvent)


(本文基于android-2.3.3_r1代码研究)

Android Touch事件传递机制(一)Android Touch事件传递机制(二)这两篇文章中研究了Android触屏事件的分发机制;本文从源码角度继续深入研究。


一. ViewRoot

Android的所有触屏事件、按键事件、界面刷新等事件都是通过ViewRoot进行分发的。

ViewRoot实际就是一个Handler,接收native层传来的事件并进行分发。

下面看看ViewRoot对触屏事件处理的关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public final class ViewRoot extends Handler implements ViewParent,
        View.AttachInfo.Callbacks {

    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {

        case DISPATCH_POINTER: {
            MotionEvent event = (MotionEvent) msg.obj;
            try {
                deliverPointerEvent(event);
            } finally {
                event.recycle();
                if (msg.arg1 != 0) {
                    finishInputEvent();
                }

            }
        } break;

    }

}

ViewRoot接收到触屏事件,调用deliverPointerEvent方法。deliverPointerEvent方法关键代码如下:

Show More

Android Touch事件传递机制(二) -- OnTouchListener & OnClickListener & OnLongClickListener


(本文基于android-2.3.3_r1代码研究)

Android Touch事件传递机制(一) – onInterceptTouchEvent & onTouchEvent这篇文章中研究了Android触屏事件的分发机制;本文继续深入研究。


OnTouchListener & onTouchEvent

首先我们来看看View的OnTouchListener与onTouchEvent方法的区别与联系,如下布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.daemon.demo.touchdemo.widget.MyView
        android:id="@+id/my_view"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#00ff00"/>

</RelativeLayout>

设置OnTouchListener:

Show More

Android Touch事件传递机制(一) -- onInterceptTouchEvent & onTouchEvent


(本文基于android-2.3.3_r1代码研究)

onTouchEvent

onTouchEvent是View类提供的方法,其说明如下:

 /**
 * Implement this method to handle touch screen motion events.
 * <p>
 * If this method is used to detect click actions, it is recommended that
 * the actions be performed by implementing and calling
 * {@link #performClick()}. This will ensure consistent system behavior,
 * including:
 * <ul>
 * <li>obeying click sound preferences
 * <li>dispatching OnClickListener calls
 * <li>handling {@link AccessibilityNodeInfo#ACTION_CLICK ACTION_CLICK} when
 * accessibility features are enabled
 * </ul>
 *
 * @param event The motion event.
 * @return True if the event was handled, false otherwise.
 */
public boolean onTouchEvent(MotionEvent event);
Show More

—  我的个人空间 |   —