Bash function 还能这么玩

今天看到一篇讲 Bash function 的有意思的文章,原文在这里

在 Bash 中一般我们这么定义一个函数:

function name () {
  ...
}

这是非常常见的写法,包括我自己在内,一直把他当做类似 Python、C 等语言一样的函数定义语法。实际上这里{ ... }并不代表函数体或者函数的作用域。它只是代表里面的内容是一组命令的集合。了解这点之后,接下来就有一些比较好玩的写法了。

比如下面的函数作用是测试文件是否存在,这里就没用大括号:

function fileExists () [[ -f $1 ]]

或者

function isEven () (( $1 % 2 == 0 ))

还有下面的用法:

function name () (
  ...
)

这里用小括号,当执行函数的时候,会 fork 一个子进程来执行里面的命令。子进程对环境的修改不会影响到外面的父进程,也就不需要保存现场或者恢复现场的操作了。比如设置一些参数:

function caseInsensitiveMatch () (
    shopt -s nocasematch
    ....
)

除了上面的写法,这个用法的前提是函数体仅包含一行命令,或复杂或简单,比如 while、for、if、case 等结构都是可以的:

function sleep1 () while :; do "$@"; sleep 1; done

我也开始理财了

2016 年结束的时候,我突发好奇地开始算过去一年的开销。那个下午我拉出银行卡和支付宝的消费记录,大额支付都一一核对,触目惊心啊,不知不觉一年竟然花了那么多的钱,几乎每个月都没什么节制。以前从来没有记账的习惯,日积月累,很多钱都是花在没啥用的地方。所以,年初我就开始在网上找一些理财投资的渠道,也关注了一些公众号。

网上说理财的文章和人很多,很多都是给你灌输一堆概念,比如“人不理财,才不理你”,也有反面的说法是“最好的理财就是投资你自己”。说的都是对的,个人秉持的原则是,通过理财建立金钱管理的体系,管理好自己的钱,同时理财不应该占用太多个人的时间,尤其是工作时间,她只是锦上添花的事情。理财让个人财富保值、增值。之前看理财文章了解到一个很好的概念,这些都是日常中被大家忽略的非常简单的东西,比如月结余。假设你个人月收入一万块钱,每月平均开销 2000,那么 8000 块就是你的月结余,如果你多花 3000,月结余就是 5000,月光族的月结余就是 0 。显然,理财就是要去提高月结余,合理消费。

宝宝类理财

最简单的理财方式,就是把你工资的所有钱都存入到余额宝。余额宝本质上是属于货币基金,是属于低风险(基本上也可以认为无风险)的投资品种。货币基金的理财收益比起银行活期和定期的收益高多了,最近货币资金紧张,余额宝等互联网宝宝类的年化利率已经超过 4% 了。推荐网商银行的余利宝,和余额宝同出一门,最近的年化保持在 4.1% 的水平。差不多投资一万,每天的收益 1.1 元左右。我自己有大部分的资金都是放在网商银行。

下面是招商银行存款利息和余利宝的对比,高下立见:

说起招行,招商银行 APP 上的朝朝盈也不错,年化和余利宝差不多,但是缺点是一个人最多只能投资五万。宝宝类理财的优点是可以随时取用、低风险,缺点是转入后下一个基金交易日才开始计算收益。节假日、周末就比较尴尬了。

再不济也不要把钱躺在银行卡了,活期的利率几乎可以忽略。

网贷投资

如果你不满足宝宝类理财的收益,那么想要更高的收益就需要承担额外的风险了。金融投资就是和风险搏斗,风险越大收益越高,本金损失的概率也越大。往低看,银行定存、货币基金、国债(没具体了解过)的风险较低,因此利息也相对较低,如上面所说,银行定存最低。往高看,网贷(P2P 理财)刚刚兴起的时候,大平台的投资收益都有 20% 多,但是出现了很多不合规的危险平台,过去几年跑路的平台也非常多,本金追回的概率也就非常小了。一般来说,国债的利息是理财的标尺,低于国债利率的风险就比较低,高于国债利率的风险就随之变大。

查看全文

优雅部署 Google Adsense 广告代码

去年就曾经申请过 Google Adsense 的广告,但是貌似审核没通过,一直留有遗憾(没有尝试过好奇)。今年突然起了兴致重新申请,审核持续了将近一周,意外地竟然通过了。

在申请之前,需要在页面上加上一段代码。最好加到 head 里面,因为 Google Adsense 的代码片段加了 async 属性会后台异步加载,不会影响页面渲染。代码例如:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
  (adsbygoogle = window.adsbygoogle || []).push({
    google_ad_client: "ca-pub-xxxxxxxx",
    enable_page_level_ads: true
  });
</script>

其中 "ca-pub-xxxxxxxx" 是你的 publisher id(Adsense 账户里面看到的是没有 ca- 前缀的,搞不懂区别是什么)。

审核通过之后就是可以再 Adsense 网站创建广告单元,然后复制代码到你自己的网站上,不出意外很快就可以显示广告了。广告代码大概是这样子的:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 侧栏自适应2 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-xxxxx"
     data-ad-slot="yyyyy"
     data-ad-format="horizontal"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

查看全文