Chrome 插件vimium —— vim党的福音

使用vimium已经很长时间了,然而每次应用仅限于hjkl几个上下左右键和KJ标签页操作这种最低级的操作。实际上vimium有很多实用的快捷键。 这几天换了新的办公地点,除了熟悉vimium这个插件外,索性给自己再来点新的感觉——使用左手鼠标。三天过去了,慢慢习惯了,确实不错。倒不是因为效率上带来的提高,而是由此带来的新鲜感,将平日的疲惫和懈怠感一扫而空。

最常用

hjkldu 页面内移动 JK 标签页切换 HL 后退前进

Command Note
O 在新标签页中打开 URl、书签或历史记录
t 创建一个新标签页
x 关闭当前标签页

页面导航

Command Note
j, <c-e> 向下滚动
k, <c-y> 向上滚动
h 向左滚动
l 向右滚动
gg 滚动到页面顶部
G 滚动到页面底部
zH 滚动到页面最左边
zL 滚动到页面最右边
d 向下滚动(相当于 PageDown 键)
u 向上滚动(相当于 PageUp 键)
r 重载页面
gs 查看页面源代码
yy 复制当前 URL 到剪贴板
yf 复制一个 URL 链接到剪贴板
p 打开剪贴板中的 URL 到当前标签页
P 打开剪贴板中的 URL 到新标签页
gu 跳转到当前 URL 的上一层
gU 跳转到当前 URL 的最高层
i 进入插入模式
v Enter visual mode (beta feature) (enterVisualMode)
V Enter visual line mode (beta feature) (enterVisualLineMode)
gi 焦点第一个文本输入框。使用 tab 可以在文本输入框之间循环跳转
f 在当前标签页中打开一个链接
F 在新标签页中打开一个链接
<a-f> 在新标签页中打开多个链接
[[ Follow the link labeled previous or < (goPrevious)
]] Follow the link labeled next or > (goNext)
gf Cycle forward to the next frame on the page (nextFrame)
gF Select the tab’s main/top frame (mainFrame)
m 创建新标记

使用 Vomnibar

Command Note
o 打开 URl、书签或历史记录
O 在新标签页中打开 URl、书签或历史记录
T 搜索已打开的标签页
b 打开书签
B 在新窗口中打开书签
ge 编辑当前 URL
gE 编辑当前 URL 并在新标签页中打开

使用查询

Command Note
/ 进入查询模式
n 下一个已查询到的值(页面内循环查找)
N 上一个已查询到的值(页面内循环查找)

导航历史

Command Note
H 根据浏览历史后退一页
L 根据浏览历史前进一页

标签操纵

Command Note
K, gt 向右移动一个标签页
J, gT 向左移动一个标签页
g0 移动到第一个标签页
g$ 移动到最后一个标签页
t 创建一个新标签页
yt 复制当前标签页
x 关闭当前标签页
X 恢复已关闭的标签页
W 将标签页移动到新窗口
<a-p> 固定/取消固定当前标签页
« 向左移动标签页
» 向右移动标签页

其他

Command Note
? 显示帮助

参考资料


postgresql 连接报错 - no pg_hba_conf entry for host

最近换了办公环境,发现内部测试时使用 postgres 无法正常连接数据库。 使用工具连接时报错

connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "4X.XXX.XX.XXX", user "userXXX", database "dbXXX".

在维护 PostgreSQL 库时,pg_hba.conf 属于认证文件,在业务服务器出现调整,或增加应用服务器时,需要增加 pg_hba.conf 的 IP 签权信息。 另外pg_hba.conf 文件的更改对当前连接不影响,仅影响更改配置之后的新的连接。

如果 Postgresql 在 windows 下安装,使用安装时附带的 pgAdmin 进行修改即可。

一般该文件位于

C:\my_pp\PostgreSQL\9.4\data\pg_hba.conf

如果是 Linux 环境,使用 find 全局查找也能查出来。按照文件example修改即可。因为内网环境,也就没所谓了,让所有链接都能通过,即 0.0.0.0/0

local   all             all                                     peer
# IPv4 local connections:
host    all             all             0.0.0.0/0            trust
host    all             all             samenet                 trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

pg 的几个基本概念

pg 的几个基本概念

  • 实例(instance):一台机器上可以跑多个实例,每个实例要占用单独的端口,默认只跑一个实例,默认端口是5432
  • 数据库(database):一个实例可以包含多个数据库
  • 模式(schema):一个数据库可以包含多个模式,模式之间的命名不会冲突,默认模式是public
  • 对象(object):模式里包含的所有东西都是对象,包括表、视图、索引、函数等等

参考资料


composer install 无法下载

如下图。

your configuration does not allow to connection to `http://xxxxxxx`,see the https://getcomposer.org/doc/06-config.md#secure-http for details.

按照提示打开 https://getcomposer.org/doc/06-config.md#secure-http

secure-http#

Defaults to true. If set to true only HTTPS URLs are allowed to be downloaded via Composer. If you really absolutely need HTTP access to something then you can disable it, but using Let's Encrypt to get a free SSL certificate is generally a better alternative.

默认是必须使用https的,而默认配置使用的镜像是http的。

所以,解决办法有两个,一个是,在本项目的composer.json 中添加 secure-http 配置:

  "config": {
    "secure-http": false
  }

composer的配置分为全局和各个项目的。针对当前项目是可以以第一种方式实现。而如果我们需要使用 composer 创建项目时当然不可行了。例如 composer create-project --prefer-dist laravel/lumen blog

于是第二个解决的办法就是在 composer 的全局配置文件 config.json 中添加 secure-http 配置。 在 win10 中这个配置文件位于 C:\Users\xxx\AppData\Roaming\Composer\config.json 中。

    "config": {
	    "secure-http": false
	},
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "http://packagist.phpcomposer.com"
        }
    }

参考资料


php include()和 require() 的区别说明

这也是个老生常谈的东西了,今天在阅读laravel的源代码,顺手记一下。

在php中引用文件有两种办法,require(_once) 及 include(_once)。

他们最主要的不同点在于

  • 使用include时,一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。当包含的文件不存在时,系统会报出警告级别的错误(warning),程序会继续往下执行。
  • 使用require时,通常放在 PHP 程序的最前面,使得 PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。当包含的文件不存在时,系统会先报出警告级别的错误(warning),接着又报一个致命级别的错误(Fatal error)。程序终止执行。
  • incluce在用到时加载,require在一开始就加载,_once后缀表示已加载的不加载
  • require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。

      对include()语句来说,在执行文件时每次都要进行读取和评估;
      而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。
      这就意味着如果可能执行多次的代码,则使用require()效率比较高,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。
    
  • include有返回值,而require没有。

    例如laravel的index.php文件中通过 require_once 对 app 进行赋值:

      // index.php
          <?php
          require __DIR__.'/../bootstrap/autoload.php';
          $app = require_once __DIR__.'/../bootstrap/app.php';
    
      // app.php
    
          <?php
          $app = new Illuminate\Foundation\Application(
              realpath(__DIR__.'/../')
          );
            
          ...
    
          return $app;
    

参考资料


composer install update 报错需要 vendor autoload.php

先说一下背景。这些天在整一些laravel底层架构。今天composer update了某个包,报错。因为是实验性的,所以也没怎么注意,删掉vendor重新install一下呗。转念一想,顺便把composer.lock也重新构建一下吧。

然后。

就嗝屁了。

Warning: require(vendor/autoload.php): failed to open stream: No such file or directory in 

总之得出来的一个教训就是,composer.lock和vendor不能同时删除。

也找到了之前一个配置谜之被删的原因了:Remove-pre-update-cmd

参考资料