debbbbie Writings

深藏功与名

Follow me onGitHub

Ruby China Android 客户端

Ruby China Android 客户端

看到 React Native 的特性,真是倍感兴奋,又恰逢 Ruby China 没有新鲜的 Android 客户端好久没有更新了,变折腾了个版本。

参考了很多前辈的源代码,再此一一致谢,源代码也会很快开源。

对 React Native 的评价是,很强大,期待 React Native 有更好的发展。

点此下载

TODO

  • 登录
  • 评论
  • 更好的loading效果
  • Splash Screen
  • Cache
  • 用户页面
  • 缓存
Read More »

ZSH – Writing own completion functions

ZSH – Writing own completion functions

To be honest it wasn’t easy for me to get from the ZSH man pages how to make own completion functions. Sharing my modest achievement in that area here.

The main source of info is man zshcompsys.

Zsh completion system loads completion functions from the directories listed in $fpath variable:

~ $ echo $fpath
/usr/share/zsh/site-functions /usr/share/zsh/4.3.4/functions

I created a separate directory for my functions: ~/.zsh/completion So, to initialize the compsys add the following code into your .zshrc file:

# COMPLETION SETTINGS
# add custom completion scripts
fpath=(~/.zsh/completion $fpath) 

# compsys initialization
autoload -U compinit
compinit

# show completion menu when number of options is at least 2
zstyle ':completion:*' menu select=2

Then in the ~/.zsh/completion folder create file for your future function. Filename has to start with underscore, otherwise it won’t be loaded. Let’s create file _hello for completion hello command. Doesn’t matter you don’t have such a command, completion will work though.

#compdef hello

_arguments "1: :(World)"

Now restart your zsh, type “”hello “, press TAB key. Done. Won’t dwell on _arguments function in very details. Example of it’s usage with options exists in the linux-mag article. Also read description of _arguments on man page zshcompsys.

1: :(World) means that the 1st argument will be completed from the list of one element – World. Space between the conlons means that there will be no message in completion menu. We don’t need any message here because no menu will be shown as there is only one option.

Another example of _hello:

#compdef hello

_arguments "1: :(World)"\
    "2:Countries:(France Germany Italy)"\
    "*:Cities:((Paris\:France Berlin:\Germany Rome:\Italy))"

Here the fourth line means that the second parameter will be completed from the list of three countries. The message in the completion menu will be “Countries”. To see it you may need to add the following line into your .zshrc:

1 zstyle ":completion:*:descriptions" format "%B%d%b" The fifth line in the listing means that every next argument should be completed from the list of cities. Every city will be shown in a separate line of completion menu with the description.

The _arguments function suits very well for static completion. But what if you need to complete the second parameter depending on the first one? Let’s try to understand some more about zsh completion system.

The _hello script is executed every time you try to complete smth in hello command. Zsh completion system sets a number of internal variables you can test for their value. I’ll describe only two of those I use in the next example. $words contains list of words from current command line $state is a variable you can set in a special _arguments format ->value. For example “1: :->test” means that if completion happens for the first argument then the $state variable will have value “test”.

So the last example:

#compdef hello

_hello() { 
    local curcontext="$curcontext" state line
    typeset -A opt_args

    _arguments \
        '1: :->country'\
        '*: :->city'

    case $state in
    country)
        _arguments '1:Countries:(France Germany Italy)'
    ;;
    *)
        case $words[2] in
        France)
            compadd "$@" Paris Lyon Marseille
        ;;
        Germany)
            compadd "$@" Berlin Munich Dresden
        ;;
        Italy)
            compadd "$@" Rome Napoli Palermo
        ;;
        *)
            _files 
        esac
    esac
}

_hello "$@"

Won’t describe every line of code here. Just will say that the lines 4 and 5 are mandatory if you use “->value” option in the _arguments command. It just declares the local variables in order to avoid altering global environment. The rest should be clear enough (knowledge of bash scripting is needed of course). Surely in the real functions you shouldn’t declare static options and command and to use command help output to add options dynamically. But this is up to you how to get it and parse. More info and tricks you pick up from the existing built-in completion functions placed at $fpath. Good luck with you completion frunctions.

https://askql.wordpress.com/2011/01/11/zsh-writing-own-completion/

Read More »

优秀短信认证平台

短信平台比较鱼龙混杂,千万不可盲目选择便宜的。知乎上推荐的较优秀短信验证平台有Luosimao, SUBMAIL容联云通讯。其中容联云通讯尤其优秀。

Read More »

ncdu 磁盘占用分析器

ncdu(NCurses Disk Usage)是一个基于 ncurses
界面的磁盘占用分析工具。其特点是快速、简单、且容易使用。

Read More »

用 Rails 发送邮件(各平台兼容)

用 Rails 发送邮件(各平台兼容)

因为各个邮件服务商对安全的要求等原因的不一,导致对 CSS 的支持程度也不一样,但大部分的邮件服务商都支持 inline CSS , 这就意味着我们可以用这种方法来写出 CSS 兼容的邮件。

还有一种情况,很多邮件服务商不能够显示邮件中的外链图片,原因是防止窃取 cookie 等,这个时候我们需要用 inline attachment 的方式,把图片作为附件,邮件内容中的图片地址指向这个附件。

Read More »

Ruby 如何判断字符串是否包含中文

Ruby 如何判断字符串是否包含中文

可以使用正规表达式中的 \p{}, utf 编码属性(有许多,具体有有哪些,分别代表什么,你得去查一下)

汉字的 p 属性是 Han

实例如下: 'abc汉字abc' =~ /\p{Han}/, 我在 ruby1.0.0的 irb 返回为 3 , 说明是可以的

Read More »

Capistrano 编译 assets 的时候报错

Capistrano 编译 assets 的时候报错

很多人都碰到过类似错误,就是编译及 deploy 都是正确的,但 precompile 老是报这样的错误(StackOverflow也有很多这种问题):

这个‘错误’信息是 rake assets:precompile 的默认输出内容。那么怎么避免显示这条默认内容呢。 只需在 precompile 的后边加上参数 -q即可。

Read More »

今天你参加沙龙活动了吗,帮你找个小伙伴

是不是有过这样的感受,当你参加一个沙龙、或者一次发布会的时候,你碰见现场特别精美的PPT、或者内容含金量相当高的PPT,有没有拍下来的冲动:

Read More »

12306 验证码简单识别

12306 的图形验证码非常简单,简单的程序即可识别。

Read More »

让爬虫轻松一点~(一)

在信息大爆炸的互联网,数据多的烦不胜数,想要人为的统计某类信息,恐怕越来越难了,这时候就需要爬虫的帮助了,一如 360 爬取百度的百科、知道一淘爬取各大电商的产品、用户评论百姓网从赶集网页面上收集其用户公开的 QQ 邮箱并发送推广邮件。。。

随着爬虫的发展,已经严重危害了目标网站的服务质量及数据安全,于是他们开始各种围追堵截。道高一尺魔高一丈,我们的爬虫终究能够突破层层壁垒,拿到想要的数据。

Read More »

解析 Github 的默认头像

Github 给无头像用户生成 5x5 像素的 Identicons 头像,请看 Github 官方的例子,很好看的样子啊:

Github 官方的例子

这一生成过程使用了用户ID的哈希值,然后根据哈希值每一位的奇偶值来决定对应位置上的像素的开关。这样生成 的图像,配上由哈希值决定的颜色,保证可生成大量独一无二的图像。

Read More »

Jekyll 文档翻译之插件

Jekyll 支持插件功能,你可以很容易的加入自己的代码。

Read More »

SASS 语法

学过CSS的人都知道,它不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。也就是说,CSS基本上是设计师的工具,不是程序员的工具。在程序员眼里,CSS是一件很麻烦的东西。它没有变量,也没有条件语句,只是一行行单纯的描述,写起来相当费事。

很自然地,有人就开始为CSS加入编程元素,这被叫做"CSS预处理器"(css preprocessor)。它的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。各种"CSS预处理器"之中,我自己最喜欢SASS,觉得它有很多优点,打算以后都用它来写CSS。

Read More »

《OpenCV》学习笔记 之 思维导图笔记

《OpenCV》学习笔记 之 思维导图笔记

MindManager 格式下载

Read More »

《Metaprogramming Ruby》学习笔记 之 思维导图

《Metaprogramming Ruby》学习笔记 之 思维导图

MindManager 格式下载

Read More »

《Metaprogramming Ruby》学习笔记二 之 Class Definitions

《Metaprogramming Ruby》学习笔记二 之 Class Definitions

Read More »

《Metaprogramming Ruby》学习笔记一 之 Blocks

《Metaprogramming Ruby》学习笔记一 之 Blocks

Read More »

Redis 思维导图

Redis学习笔记[思维导图]

MindManager 格式下载

Read More »

浅谈Redis数据库的键值设计

关系型数据转化为KV数据库,我的方法如下:

key 表名:主键值:列名

Read More »

《Rack》学习笔记 之 思维导图笔记

《Rack》学习笔记 之 思维导图笔记

MindManager 格式下载

Read More »