bash script notes (1)

I tied to study the shell script a few times. But on that time, I didn’t get enough knowledge to deal with it. Now, I’m back.

Situation 1

I want to startup the vpn service when the computer startup. I added pon vpn_name to rc.local. However, this can be failed because when this line execute, the network may not be ready. So I decide to write a script to do this. It will wait until the Internet up. Here’s it.

#!/bin/bash

sleep_time=1
export PATH=$PATH:/usr/bin

while [ 1 ]
do
  ping_success=`ping -c 1 -n vpn.yegong.net | \
    sed -n -r 's/^.* (.) received.*$/\1/p'`
  if [ $ping_success -eq 1 ]
  then
    pon yegong
    exit 0
  fi
  sleep $sleep_time
  sleep_time=$(expr $sleep_time + 1)
done
  1. export PATH is very important.
  2. `ping -c 1 -n vpn.yegong.net | sed -n -r ‘s/^.* (.) received.*$/\1/p’`, using ` surround the command to get the output text.
  3. sed -n -r ‘s/^.* (.) received.*$/\1/p’, using sed to simplify the output. It’s the regular expression. Very similar with VIM replace syntax, isn’t it?
  4. if [ $ping_success -eq 1 ], [ condition ] means the test program, equivalent to test condition, so man test will show more usage.
  5. sleep_time=$(expr $sleep_time + 1), it seems that every variable in shell is a string, so you can’t simply write x=x+1. Instead of, expr program read a string expression and output the results. Please notice the space in the expression.

Situation 2

For each text files in a directory, convert the file encoding to utf8.

There’s a simple util can guess the file encoding. It can be found at Wu Yongwei’s Programming Page (Can’t access when I write the article). Then I just need a script to combine the tellenc and iconv.

TMP_FILE="/tmp/utf8lize.output"
ENCODING="utf-8"

if [ $# == 0 ]
then
  echo "Usage: utf8lize FILES"
  exit 1
fi

for f in "$@"
do
  if [ -f "$f" ]
  then
    enc=`tellenc "$f"`
    if [ $enc != $ENCODING ] && [ $enc != "binary" ]
    then
      echo $f : $enc
      cp "$f" "$f.bak"
      iconv -f "$enc" -t "$ENCODING" -o "$TMP_FILE" "$f"
      cp "$TMP_FILE" "$f"
      rm -f "$TMP_FILE"
    fi
  fi
done
  1. $# results the number of arguments when it been executed.
  2. for f in “$@” is the for-each loop. And “$@” indicates the all program arguments. In addition, when you run the program utf8lize *, * will convert to filenames array. Using the ” to surrounding $@ can deal the filename with space.

on December 15th, 2009 | No Comments »

SQL note (1) – INSERT

Today, I tried to update the structure of database and learnt something new about insert statement. Share it with abstract example.

Now we got a `interest_rate` table in database contains these columns: `currency`, `interest_rate`. It indicated the relation of interest rate and currency. One day, we find that the interest rate is only relate to currency but we want also `period` for the fixed deposit.

It is a database and contains so many data, so we can’t change it manually. We just want to write a SQL script and run it.

Surely, this process works.

  1. change the structure of database and insert data if necessary;
  2. do the code improvement;
  3. then the system should act exactly the same as before;
  4. use the background control panel to modify the data when necessary.

It’s nice because it just need one hour to upgrade and then the whole system works fine. It’s online without database export, changing, and import, which are very danger and result a quite long downtime.

Then let’s focus on how to upgrade database structure and insert records for this example. I’m using MySQL and assume that there’s a table contains all possible `period` values.

# create a temporary table
CREATE TABLE `interest_rates_tmp` (
  `currency` VARCHAR(3) NOT NULL,
  `rate` INT NOT NULL
);

# and copy data
INSERT INTO `interest_rates_tmp`
  SELECT * FROM `interest_rates`;

# truncate the old table
TRUNCATE TABLE `interest_rates`;

# add a new column to the table
ALTER TABLE `interest_rates`
  ADD `period` INT NOT NULL AFTER `currency`;
ALTER TABLE `interest_rates`
  DROP INDEX `currency`,
  ADD UNIQUE `currency_period` (`currency`, `period`);

# insert the cartesian product of the `interest_rates`
# table and the `periods` table
INSERT INTO `interest_rates` (`currency`, `period`, `rate`)
  SELECT `currency`, `periods`.`value` AS `period`, `rate`
  FROM `interest_rates_tmp`, `periods`;

# drop the temporary table
DROP TABLE `interest_rates_tmp`;

I got little knowledge about the INSERT statement with SELECT subquery before. Even I didn’t know it’s a valid SQL script or not. So save it here.

on September 15th, 2009 | No Comments »

经济学原理学习笔记(4)

第二章 像经济学家一样思考

2.1 作为科学家的经济学家

科学的本质是科学方法。科学方法:观察、理论、进一步的观察。

在经济学中做实验通常是困难的:研究通货膨胀的经济学家绝不会被允许仅仅为了获得有用的数据而操控一国的货币供给。经济学家像天文学家、进化论生物学家一样,通常不得不使用这个世界碰巧向他们提供的数据。

经济学家像物理学家一样,做出假设,忽略一些次要因素,使复杂的世界简化。

两个经济学模型:循环流量图和生产可能性边界。

上图是汽车和电脑的生产可能性边界示意图。生产可能性边界通常是这种凹向原点的形状。这是因为当该经济把大部分资源用于生产电脑时,最适于汽车生产的资源,如熟练的汽车工人,都被用于电脑行业。由于这些工人也许并不擅长生产电脑,该经济就不会因为多生产一单位的汽车而少生产许多电脑。与此相反,当该经济把其大部分资源用于生产汽车时,多生产一辆汽车就意味着要把一些最好的电脑技工从电脑行业中转移出来。结果是,多生产一辆汽车会导致电脑产量大幅减少。

微观经济学研究家庭和企业如何做出决策,以及它们如何在特定市场上相互交易;宏观经济学研究整体经济现象,包括通货膨胀、失业和经济增长。

2.2 作为政策顾问的经济学家

实证表述是描述性的,它们做出了关于世界是什么的表述。

规范表述是命令性的,它们做出了关于世界应该是什么的表述。

2.3 经济学家意见分歧的原因

经济学家可能对世界如何运行的不同实证理论的正确性看法不一致。

经济学家可能有不同的价值观,因此对政策应该努力实现的目标有不同的规范观点。

大多数经济学家一致同意的十个主张:

  1. 租金上限降低了可得到的住房数量和质量。(93%)
  2. 关税和进口配额通常降低了总体经济福利。(93%)
  3. 有伸缩性的和浮动性的汇率提供了一种有效的国际货币协定。(90%)
  4. 财政政策(例如,减税和/或增加政府支出)对低于充分就业的经济有重要的刺激效应。(90%)
  5. 如果要平衡联邦预算,应该在经济周期中而不是每年中来实现。(85%)
  6. 现金转移支付带来的领取者福利的增加大于等值的实物转移支付所带来的。(84%)
  7. 巨额联邦预算赤字对经济有不利影响。(83%)
  8. 最低工资增加了年轻人和不熟练工人中的失业。(79%)
  9. 政府应该按“负所得税”的思路重建福利制度。(79%)
  10. 排污税和可交易的污染许可证作为控制污染的方法优于实行污染上限。(78%)

on December 2nd, 2008 | No Comments »

经济学原理学习笔记(3)

第一章 经济学十大原理 习题(2)

  1. 你的室友做饭比你好,但你清扫房间比你的室友快。如果你的室友承担全部做饭工作,你承担全部清扫工作,这比你们平均分摊每一项工作时你要花费的时间多了还是少了?试举一个类似的例子,说明专业化和贸易如何使两个国家的状况变得更好。
    答:我花费的时间是否减少取决于做饭所需时间和清扫所需时间的差异,如果清扫的工作量比做饭大很多的话,新的分配方式对我来说显然是不公的(这道好像没出好)。但是如果两者相差无几的话,我和我的室友就能节约时间,并吃到更可口的饭菜。菲律宾气候炎热,适合种植香蕉一类的植物;蒙古共和国气候寒冷,适合发展畜牧业。若没有贸易存在的话,菲律宾和蒙古就必须利用自己的土地作不合适的事情。这样得到的农产品不但产量低,其质量也不高。若是两者可以进行贸易,就可以通过专业分工改善双方。
  2. 假设美国经济采用了中央计划制,而且你成为主要计划者。在你需要为下一年做出的千万决策中包括生产多少激光唱片,录制哪些艺术家的激光唱片,以及谁应当得到这些唱片。
    1. 为了理智地做出这些决策,你需要有关激光唱片行业的哪些信息?你需要有关在美国的每个人的哪些信息?
    2. 你关于激光唱片的决策会如何影响你的其它决策(例如,要生产多少激光唱机,或者生产多少盒式录音带?)你的其它一些经济决策会如何改变你对激光唱片的看法?

    答:

    1. 首先需要激光唱片行业的从业人员数量,每个艺术家在下一个年度计划发行的唱片。还需要所有美国公民对每个艺术家感兴趣的情况(这几乎决定了应该由谁得到这些唱片,录制多少张某个艺术家的唱片以期获得最大的满意程度),抽象为数据即购买该唱片的概率。
    2. 唱片和激光唱机是同时消费的,而和盒式录音带又是互补的。必须根据现有的激光唱机数量、无法维修的损坏率和新购入唱片的家庭来计算激光唱机的生长量。计算在消耗同等资源和工作时间下,怎样分配唱片和盒式录音机能够得到最大的满意度。甚至需要考虑如何在更多种类的产品中配给资源。
  3. 警察和法院体系腐败的国家的生活水平通常要低于腐败情况较少的国家。为什么会存在这种情况?

    答:因为在警察和法院体系腐败的国家,经济情况好的个体可以用钱“购买”到更多的权利,这样就加剧了他们的垄断,减少了其领域的竞争,使得生产活动更没有效率。

  4. 解释下列每一项政府活动是出于关注平等的动机还是出于关注效率的动机。在关注效率的情况下,讨论所涉及的市场失灵的类型。
    1. 管制有线电视频道的价格。
    2. 向一些穷人提供可用来购买食物的票证。
    3. 在公共场所禁止吸烟。
    4. 把美孚石油公司分拆为几个较小的公司。
    5. 对收入高的人实行高个人所得税率。
    6. 制定禁止酒后开车的法律。

    答:

    1. 出于效率考虑,市场力量
    2. 出于平等考虑
    3. 出于效率考虑,外部性
    4. 出于效率考虑,市场力量
    5. 出于平等考虑
    6. 出于效率考虑,外部性
  5. 从平等和效率的角度讨论下面每种说法:
    1. “应该保证社会上的每个人得到尽可能最好的医疗。”
    2. “当工人被解雇时,应该使他们在找到一份新工作之前能一直领取失业津贴。”

    答:

    1. 一方面,让每个人得到尽可能最好的医疗体现了平等性。另一方面,经济学首先就强调社会的资源是有限的,显然医疗资源也是有限的。让每个人都得到尽可能最好的医疗削弱了竞争,使得社会更没有效率。出于效率和平等两方面的考虑,我们需要让医疗成为一种商品,并且建立合理的社会保障制度,从而获得效率于平等两者的折衷。
    2. 类似的,允许工人可以一直领取失业保险是一件很平等的事情,但是这样就削弱了失业者再就业的积极性,同样影响了效率。应当设置一个合理的期限,使得绝大多数失业者都能在这个时间内找到一份新工作。
  6. 你的生活水平在哪些方面不同于你的父母或祖父母在你这个年龄时的生活水平?为什么会发生这些变化?

    答:几乎所有方面都不同,改变太巨大了。这是因为生产率提高所导致的,一个国家的生活水平取决于其生产物品与劳务的能力。

  7. 假设美国人决定把他们更多的收入用于储蓄。如果银行把这笔钱借给企业,企业用这笔钱建设新工厂,这种高储蓄会如何加快生产率增长呢?你认为谁会从更高的生产率中获益呢?社会会得到免费的午餐吗?

    答:这种高储蓄增加了企业融资能力,使得他们可以把更多的资金投入倒增加设备、改进技术上,最终提高生产率。生产率的提高意味着该国生活水平的提高,因此,所有美国人都将因此获益。社会当然不可能获得免费的午餐:第一,把更多的收入用于储蓄意味着减少用于投资的钱,这等于减少了一部分人的收入,对他们来说,储蓄的机会成本太高;第二,当所有人都增加储蓄时,用于消费的开支就少了,同时企业又增加的产量,使得企业间竞争加剧。情况严重的话,还会导致大量企业破产。

  8. 假设你是一个决策者,正要决定是否降低通货膨胀率。为了做出理智的决策,你对通货膨胀率、失业和两者的权衡取舍关系需要了解哪些情况?

    答:做出理智的决策需要了解当前的通货膨胀率、失业率和民众满意度与通货膨胀率、失业率的关系(可通过调查得到),求得满意度在合理范围内的极大值,并根据此对通货膨胀进行调控。

  9. 在报纸或在http:///www.economist.com网站上找出最近新闻中的三个和经济有关的故事。针对每一个故事,确定本章讨论的经济学十大原理中的一个或几个是适用的,并解释如何适用。此外,对每一个故事,浏览本书的目录并努力找出可以说明这个新闻事件的那一章。

    答:这道题留给读者朋友吧。

on August 1st, 2008 | No Comments »

经济学原理学习笔记(2)

第一章 经济学十大原理 习题(1)

  1. 描述下列每种情况所面临的权衡取舍:
    1. 一个家庭决定是否买一辆新车。
    2. 国会议员决定对国家公园支出多少。
    3. 一个公司总裁决定是否开一家新工厂。
    4. 一个教授决定用多少时间备课。

    答:

    1. 家庭可以用购买新车的钱购买房屋、旅游、投资、子女教育、养老等,购买新车必然减少其它方面的投入。
    2. 增加国家公园的支出就必然减少军费、福利、基础建设等开支。
    3. 将资金用于新开工厂可能提高公司利润,但必然减少给股东的分红,或者减少公司在研发、人力资源方面的投入。
    4. 教授增加备课时间可以提高授课质量,但也减少了用于科研的时间。
  2. 你正想决定是否去度假。度假的大部分成本都是用美元来衡量的,但度假的利益是心理上的。你将如何比较利益与成本呢?

    答:迷惑,我也非常好奇大师们对这样的情况是怎么处理的。根据Paul A. Samuelson的理论,幸福=效用/欲望,显然对心理利益的量化是一个复杂的问题。并且,度假除了带来心理上的利益,其实还可能伴随一些实际的次生利益,例如由于心理状况良好带来的效率提高等。

  3. 你正计划用星期六去从事业余工作,但一个朋友请你去滑雪。去划雪的真实成本是什么?现在假设你已计划这天在图书馆学习。这种情况下去划雪的成本是什么?请解释。

    答:第一种情况的成本是业余工作带来的工资、可能学习到的技能(朋友请我划雪意味着他请客)。第二种情况的成本是在图书馆学习获得的知识。

  4. 你在篮球比赛的赌注中赢了100美元。你可以选择现在花掉它或者在利率为5%的银行账户中存一年。现在花掉100美元的机会成本是什么呢?

    答:5美元。

  5. 你管理的公司在开发一种新产品过程中已经投资500万美元,但开发工作还远远没有完成。在最近的一次会议上,你的销售人员报告说,竞争性产品的进入使你们新产品的预期销售额减少为300万美元。如果完成这项开发还要花费100万美元,你还应该继续进行这项开发吗?为了完成这项开发,你的最高花费应该是多少?

    答:应该,最高花费应该小于300万美元减去销售成本。

  6. 魔力饮料的三位经理正在讨论可能的生产增加,每位经理提出了做出这个决策的一种方法:哈利:我们应该考查一下我们公司的生存率--每个工人生产的加仑数--上升还是下降了。
    罗恩:我们应该考查一下我们的平均成本--每个工人的成本--上升了还是下降了。
    赫尔缪尼:我们应该考查一下多卖一加仑饮料的额外收益大于还是效率额外成本。

    答:赫尔缪尼的看法是正确的,至于生产率,应该考虑通过裁员和改进工艺来得到增长。

  7. 社会保障制度为65岁以上的人提供收入。如果一个社会保障的领取者决定去工作并赚一些钱,他所领到的社会保障津贴通常会减少。
    1. 提供社会保障如何影响人们在工作时的储蓄激励?
    2. 与较高收入相关的津贴减少如何影响65岁以上的人的工作激励?

    答:提供社会保障减少储蓄的边际效益,鼓励人们进行更多消费。与较高收入相关的津贴减少减少了社会保障的领取者去工作的边际效益,鼓励老人们更多的待在家里。

  8. 最近改革政府反贫困计划的法案对许多福利领取者做了只能领取两年津贴的限制。
    1. 这些变动如何影响对工作的激励?
    2. 这些变动如何反应平等与效率之间的权衡取舍?

    答:这项限制鼓励就业并稍稍抑制了人们跳槽的积极性,因为这时长期失业的边际利益减少了。反贫困法案是政府出于平等性考虑设立的法案,但这项法案对提高就业率有消极的影响,从而影响到了本国的生产率。因此,从效率角度考虑,政府做出了限制性修正。

on July 13th, 2008 | No Comments »

经济学原理学习笔记(1)

昨天晚上我开始了经济学原理的学习。教材自然是曼昆的。我打算把笔记和习题都放到网上来。

第一章 经济学十大原理

一个社会不能给每个人提供他们向往的最高的生活水平。

经济学研究社会如何管理自己的稀缺资源。

十大原理:

  1. 人们面临权衡取舍
  2. 某种东西的成本是为了得到它所放弃的东西
  3. 理性人考虑边际量
    理性人:系统而有目的地做可以达到其目的的最好的事情的人
    边际变动:对行动计划的微小增量调整
  4. 人们会对激励做出反应
    激励:引起一个人做出某种行为的某种东西
  5. 贸易能使每个人状况更好
  6. 市场通常是组织经济活动的一种好方法
    市场经济:当许多企业和家庭在物品与劳务市场上相互交易时,通过它们的分散决策配置资源的经济。
  7. 政府有时可以改善市场结果
    外部性:一个人的行为对旁观者福利的影响
    市场力量:单个经济活动者(或经济活动者的一个小集团)对市场价格有显著影响的能力。
  8. 一国的生活水平取决于它生长物品与劳务的能力。
    生产率:一个工人一小时所生产的物品与劳务数量
  9. 当政府发行了过多货币时,物价上升
  10. 社会面临通货膨胀与失业之间的短期权衡取舍

其中,1-4条说明人们如何做出决策,5-7条说明人们如何互相交易,8-10条说明整体经济如何运行。

这些原理部分是我们以前就接触到、认识到的,比如说贸易能使人状况更好。但有一些,之前就只有很少的理解,这里,着重强调一下:

  • 第3点指出,理性人在面临权衡取舍时,考虑问题不是直接的to do or not to do,而是比较边际利益和边际成本。
  • 第6点中指出,政府做出决策通常是出于效率或者平等考虑。例如最近的电信重组,其经济学上的意义是通过重组提高竞争,从而获得效率。反垄断其实是出于效率考虑,而非想象中的平等考虑。当然,在中国,政府考虑的还要更多,比如如何培养出一些足够大型的公司去参与国际竞争啊,如何满足移动的胃口来让移动更好的推广那个出了国门就用不了的TD手机啊。
  • 第10点,通货膨胀和失业之间在短期有个跷跷板效应。这么看来,当下CPI那么高,大学生的工作终于好找一些了:)

on July 10th, 2008 | No Comments »