树莓派zero连接wifi

这是一篇记录树莓派连接wifi的文章。

这里我们使用wpa_cli的交互环境来连接无线网,这比直接使用配置要方便得多。注意,wpa_cli需要在root环境下执行

终端下面执行: sudo wpa_cli -iwlan0

-i参数表示使用哪个网卡,我们需要指定只用wlan0这个网卡。具体可以执行ifconfig看看都有哪些网卡可以使用,如果你的树莓派带有wifi模块,那么一般是wlan0

进入交互模式之后,首先需要执行scan命令,该命令能扫描附近的热点。然后输入scan_result列出扫描出来的热点

> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
> scan_result
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2412 -37 [WPA2-PSK-CCMP][ESS] chao

上面扫描出了我的一个手机热点。

我们知道了热点的ssid之后就可以连接了,首先增加一个网络连接,执行add_network

> add_network
3

输出的结果是一个数字,这个是增加的id。然后后面需要用这个id配置一些网络参数,就和可视化的连接网络一样,最简单的就是需要配置网络的ssid,密码。

> set_network 3 ssid "chao"
OK
> set_network 3 psk "yourpassword"
OK

做好了之后就可以启用这个连接了,输入:enable_network 2。下面就会提示连接的信息了

> enable_network 3
OK
<3>Trying to associate with 00:00:00:00:00:00 (SSID='chao' freq=2412 MHz)
<3>Associated with 00:00:00:00:00:00
<3>CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully (based on lower layer success)
<3>WPA: Key negotiation completed with 00:00:00:00:00:00b[PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed [id=2 id_str=]

最后,不要忘了save_config,让这个配置后面可以继续使用

休眠后mac点击wifi图标卡死的解决方法

最近遇到一些问题,休眠后的mac点击wifi图标导致整个顶部的导航栏全部卡死,十分崩溃。

最开始分析是导航栏的问题,想着重启一下导航栏。

killall SystemUIServer

然而并不管用,导航栏是不卡死了,但是点击wifi图标依旧会卡死。那就重启一下网络吧。

ps -ef | grep airportd

然后sudo kill 掉就可以了。不过mac还有一个比较简单的killall命令

sudo killall airportd

git设置全局ignore

git可以设定全局ignore,这样就不用在每一个项目里面设置ignore文件。

具体的方法是首先更改git全局配置

git config --global core.excludesfile ~/.gitignore_global

然后编辑~/.gitignore_global 文件

这个文件和gitignore写法完全一致

解决sqlite中union的子句不能使用order by和limit问题

有一种场景,我们需要在同一张表中找出几个分类的文章,并且按照时间排序,通常我们会这样写(假设表名称是post):

SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10

如果有多个分类,我们会考虑将几个语句使用union all连接

SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10
UNION ALL
SELECT * FROM post WHERE category_id=2 ORDER BY create_time DESC LIMIT 10

但是这个语句在sqlite是行不通的,sqllite的order和limit不能在union子句执行,这个时候可以使用子查询实现,比如:

SELECT * FROM (SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10)
UNION ALL
SELECT * FROM (SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10)

使用expect之后无法使用rz和sz的解决方法

在机器太多的时候,我们会使用expect来自动化登录,然而使用expect之后就不能使用rz和sz了。

经过一番寻找之后,发现有一个解决方案,在脚本之前增加一个

export LC_CTYPE=en_US

注意,这个语句放到登录脚本里面就可以了,不要放到.bash_profile里面,如果放到bash_profile里面可能你当前的终端语言都变了,中文可能会乱码。

这个缺点是远程机器里面的中文可能会乱码了,如果有更好的解决方案,我会在这里更新。

mac下git配置beyondcompare作为合并冲突工具

首先安装beyond compare,下载地址: http://www.scootersoftware.com/download.php

设置为默认的merge工具

git config --global merge.tool bc

设置为默认的diff工具

git config --global diff.tool bc

在使用git megetool 来解决冲突后,会生成 备份文件 (*.orig),大多数情况下不是我们想要的,在终端中配置:

git config --global mergetool.keepBackup false

这样就不会每次在解决冲突后生成对应的 .orig文件了.

 

php开发者的sublime插件和配置

作为一个php开发者,换工作环境的时候可能会重新配置编辑器,这里给出一个比较好的环境(也是我的常用环境)。

配置篇

每家公司都会有内部的规范,但是只要公司不是特别奇葩,那么规范一般是大同小异。根据规范来设定编辑器,那么写出来的代码则很容易符合规范了。此外,一个设置好的编辑器能够大大提高编码效率!

下面是我的配置,可以根据注释自行调整

{
    // 粗体文本
    "bold_folder_labels": true,
    // 显示所有的空白字符,这样可以看出空格和tab
    "draw_white_space": "all",
    // 设置字体
    "font_size": 15,
    "ignored_packages": [
        "Vintage"
    ],
    // 全屏打开
    "remember_full_screen": true,
    // 记住打开的文件
    "remember_open_files": true,
    // 标尺
    "rulers": [
        80
    ],
    // 显示文件的编码
    "show_encoding": true,
    // 在标题栏显示完整路径
    "show_full_path": true,
    // 关闭拼写检查
    "spell_check": false,
    // 设置tabsize为4个空格
    "tab_size": 4,
    // 转换tab为空格
    "translate_tabs_to_spaces": true,
    // 避免自动拆行
    "word_wrap": false
}

一个通用配置的意义在于无论在那些机器上,都能有一个熟悉的环境来安心写代码。不会因为编辑器的别扭带来的不适感。 (更多…)

布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法

引言

在介绍布隆过滤器之前我们首先引入几个场景。

场景一

在一个高并发的计数系统中,如果一个key没有计数,此时我们应该返回0,但是访问的key不存在,相当于每次访问缓存都不起作用了。那么如何避免频繁访问数量为0的key而导致的缓存被击穿?

有人说, 将这个key的值置为0存入缓存不就行了吗?确实,这是一个好的方案。大部分情况我们都是这样做的,当访问一个不存在的key的时候,设置一个带有过期时间的标志,然后放入缓存。不过这样做的缺点也很明显,浪费内存和无法抵御随机key攻击。

场景二

在一个黑名单系统中,我们需要设置很多黑名单内容。比如一个邮件系统,我们需要设置黑名单用户,当判断垃圾邮件的时候,要怎么去做。比如爬虫系统,我们要记录下来已经访问过的链接避免下次访问重复的链接。

在邮件很少或者用户很少的情况下,我们用普通数据库自带的查询就能完成。在数据量太多的时候,为了保证速度,通常情况下我们会将结果缓存到内存中,数据结构用hash表。这种查找的速度是O(1),但是内存消耗也是惊人的。打个比方,假如我们要存10亿条数据,每条数据平均占据32个字节,那么需要的内存是64G,这已经是一个惊人的大小了。

一种解决思路

能不能有一种思路,查询的速度是O(1),消耗内存特别小呢?前辈门早就想出了一个很好的解决方案。由于上面说的场景判断的结果只有两种状态(是或者不是,存在或者不存在),那么对于所存的数据完全可以用位来表示!数据本身则可以通过一个hash函数计算出一个key,这个key是一个位置,而这个key所对的值就是0或者1(因为只有两种状态),如下图:

(更多…)