魅蓝Note折腾记

##魅蓝Note的一些设置和想法

  1. 账户–点击账户名–系统权限可以开启ROOT,默认是关闭的,开启后不再享受三包!
  2. 安全–权限与凭证–允许安装位置来源~-开启这个,否则一些软件将无法正常安装。默认是关闭的。
  3. 辅助功能–有很多实用功能
    • 手势唤醒里常用设置可以参考:双击=点亮屏幕,上滑=解锁,下滑=打开通知面板,V=手电
    • 长按主键可以设置关闭屏幕或语音助手
    • 实时网速,依个人需求开启
    • 智能隐藏Smartbar 推荐开启
  4. 关于手机–存储–清除手机数据=恢复出厂设置。建议:恢复出厂之前记得备份!手机账户-云存储-可以备份联系人及桌面布局
  5. 一些补充:
    • 如果手机出现黑屏,无法点亮的问题不要着急。长按电源键7S可重启。然后官网下载最新版固件升级即可。
    • 对于App的缺点,则不在我的考虑范围,不喜欢拨号盘,那我可以更换其他App,不喜欢短信app,我也可以换,这就是Android的优势。所以我替换了桌面TSF Launcher,浏览器Chrome,短信Messenger,地图Google Map,音乐Play Music & NetEase Music,记事本Keep,日历Google Calendar,搜索Google Search······我是不是有点强迫症了。
    • 看到貌似是和LBE合作了,有一个简单的安全中心,将就用吧,反正之前也是用LBE
    • 没有纯正Android的返回,HOME,最近应用的三个虚拟键,很不喜欢,略奇怪的操作

##魅蓝Note如何安装GApps

  1. Root 账户–点击账户名–系统权限可以开启ROOT,默认是关闭的,开启后不再享受三包!
  2. 两个地址下载FQ工具
  3. Google安装器
  4. 登录FQ,输入SS帐号,登录Google Play Store,更新各项服务

参考:


2015-03-13 Android , Root , Meizu

返乡

南都讯 春节期间,一个上海大学博士生的返乡笔记《一位博士生的返乡笔记:近年情更怯,春节回家看什么》在微信朋友圈及微博等社交媒体疯传,截至昨晚9点,该文在微信公众号“市政厅”上阅读量已超过4.6万多次。近似“疯狂”的转发量让作者王磊光感到不安和不理解,在他看来这只是一个媒体事件,自己不过是“不小心卷入了其中”。

王磊光

##作者否认美化绿皮火车

这篇文章的作者是80后博士生王磊光,如今在上海大学文化研究系上学。他平时喜好文学,对乡土问题比较关心,本科毕业后曾在某中学担任语文老师,随后继续考研深造。在这篇笔记中,他描述了自己返乡的见闻:交通没有以前那么拥挤,但家乡人与人之间联系渐渐疏远,而农村里年轻人的婚姻受到了物质的压迫,知识的无力感也十分强烈。

没想到,就是这些在他眼里看似普通的乡村生活见闻,却触动了一大批读者,在春节返乡之际引发了人们对乡土的思考。许多网友都用“感同身受”四字评价,但也人指出返乡笔记有“美化”嫌疑,网友“Walter”评论道:“什么素质,绿皮火车脏乱差,打牌外放音乐严重影响他人,居然还好意思美化……”

对此,王磊光感到很奇怪:“为什么有人读出了美化,我身边的朋友都为我担心,觉得我将家乡不光彩的一面说出来了。至于我提到慢车及其生活状况,从来都没有赞美—我讲述记忆中的交通时,已经说到了慢车上的那种糟糕的情况。我这里提到慢车,目的在于说明它在当下存在的必要性;同时,指出慢车上的那种人与人的联系,是人间应该有的自然联系。”

##“知识的无力感”观点引发论争

此文也让中国农村的现状,在春节期间成为社交媒体上的热门话题,并收获诸多回应,有肯定的声音,也有争议之声。前日,一篇署名为“古鱼”的《又一篇博士生返乡笔记:从一而终的稳定生活更可怕》在澎湃新闻发布,以另一位来自乡村的文科博士生视角看乡村。古鱼对农村大学生“近年情更怯”的现象表示不认同,在他看来读大学的观念应该改一改:“无论乡村还是城市,读书不会无用,因为知识是有用的,读过大学的人相对而言会有更高的成长空间,以后贡献越大,拿钱也就越多,而不是一毕业就能兑现很多钱或一毕业就加入体制内获得某种‘人上人’的身份优越感。”

对于返乡笔记引发的争议,王磊光回应道,自己从未说过读书无用,只是强调知识的无力感。“本来读书出来是应该有所为的,但是回到家乡却不能做什么。”

##这篇笔记其实是应邀写的演讲稿

除夕之际,王磊光不断接到朋友、以前学生的电话,他才知道自己的返乡笔记在这个春节火了。这是他没有预料到的,他感到不安,也不能理解:“我很少去看别人的评论,因为在我看来,这只是一个媒体事件。”

事实上,这是王磊光应邀为2014年2月举办的“我们的城市论坛”所写的一篇演讲稿。他反问南都记者:“你有没有发现这篇文章就像一个提纲?很多内容和细节没有展开。”春节前,上大现代文学研究所副研究员罗小茗告诉他,媒体有意发表其返乡手记,王磊光答应发表。当时的题目仅是《近年情更怯》,最终见报标题为《一位博士生的返乡笔记:近年情更怯,春节回家看什么》。因此,他把返乡手记爆红的原因归于媒体的传播。

王磊光这篇笔记也获得了自己的导师—上海大学文化研究系教授、主任王晓明的称赞:“分析很真切,文化研究的视野开始有点形成了,好!”博导王晓明表示,读了返乡手记最后一部分“知识的无力感”,也同样感到心情沉重:“从现代早期到上世纪90年代,从农村出来到城市求学的人,总体上是能够以自身的生活和精神状态让其他没有这个机会的人信任‘求学是人生正道’的,有这个信任在,城市里的进步力量反哺乡村的可能就存在。但现在的情况,似乎越来越像80年代晚期90年代初的上海:出租车司机每月赚1400元,当得知我一个大学副教授每月才600元的时候,很同情地看着我:‘算了,下海吧!

##“突然出名”让他感觉很不真实

王磊光觉得,自己这篇文章没什么了不起,也不是他理想之作,这种“突然的出名”让他感觉很不真实。网友们不断在网上评论博士生返乡手记,王磊光在手记发布的第一天看了看评论之后,便很少关注。他知道,不管自己说什么,都会有各种评论出现。

更何况,真正生活在文中所述乡村的人们并不知晓博士生返乡手记的走红,王磊光也从来没有向生活其中的长辈们提及文章的事情。“他们都是很本分的人,如果看到我将身边的事情写了出来,一定会为我担心。

对于自己的文章引发的有关农村大学生出路问题的讨论,王磊光则表示,“我所说的,是80后大学生出路难的问题,这里有一个背景,即与上世纪八九十年代大学毕业生相比,当时他们大学毕业之后是能够改变自己甚至家庭的命运,而如今的80后大学生承载着家庭的希望,但绝大部分人的出路是艰难的。”如今,媒体陆续找到他,但王磊光希望人们不要关注他本人,而去关注现实的中国。

##附全文

###博士春节返乡手记:越看越对乡村的未来越迷茫

“有故乡的人回到故乡,没有故乡的人走向远方。”我很庆幸我有故乡,可以随时回去,尤其可以回家乡过年。因为我的根在那里,我的亲人在那里,我的生活经验和记忆在那里。

我的家乡在湖北的大别山区,L县。我导师王晓明教授在2004年写过一篇著名的文章《L县见闻》,写的就是这个地方。王老师以我家乡为对象,揭示了当时农村的破产状况,人的精神的颓败,以及乡村文明的没落。我家所在的那个村子,是一个东西两座大山夹住的狭长谷地。一个村子由十来个“塆子”组成,一个塆子有几十户人家,我家那里叫王家塆。

直到现在,我每到一个地方,凡是碰见两山相夹或两排高大的建筑物相夹,我的第一意识就是,这两座山或两排建筑物,一个在东,一个在西,所以我在外面经常迷路,尤其在城市里。上海7号线有两个靠得比较近的站:“长寿路”和“常熟路”。我好几次下错站,以致现在每到这两个站就紧张,怕弄错了。为什么呢?因为在我家乡的方言里,“长寿”和“常熟”是完全一样的读法。人要靠语言来思维,这个事情让我意识到:对有家乡的人来说,是用方言来思维的。

我有一个初中同学群,群里90%的同学只读到初中就出去打工。经过十七八年的积累,很多同学在城市里有房有车,有的还有了自己的事业。平时在群里,他们交流的最多的是工作问题,车子问题等,言谈中总少不了炫耀。

但有一次,有个同学忽然在群里说,他已经三年没回家过年了,另一个同学紧跟着说,他五年没回家了,接着很多人说起回家的情况。有一个说:不管怎么样,今年过年一定要回一次家!另一个说:如果能在家乡找一个两千块钱的工作,就回去算了。还有一个说:能找个一千块的工作,我这边什么都不要,也愿意回家。

我有一个从小学到初中的同学,已经十年没有回家。有一天他在qq里突然对我说,我的父母是很好的人,因为小学四年级的时候他去我家玩,我爸妈用腊肉下面给他吃。这都是陈芝麻烂谷子的小事,他还记得,其实我知道,这是因为他太想家了。

上海大学文化研究系有位老师主持来沪青年工人的社会调查,最近在访谈工人。有一个打工者说:我真希望邓小平没有搞改革开放,我也愿意日子苦些,因为这样我就可以每天跟父母和孩子在一起。

回家过年,其实是没有道理可讲的一件事。套用贾平凹的话来说:家乡对我们的影响,就像乌鸡的乌,那是乌到了骨头里面。

###回家的交通

十多年前我上本科的时候,从大西北到武汉,坐的是那种编码没有字母只有四个数字的绿皮火车,22小时,通常要晚点两三个小时。西北往武汉的路线,不是人流最多的,但春运那个挤啊,大大超出了今天90后的想象。好在那个时候,学生一般都可以提前集体订票,买得到座位。而站着回家的,几乎全都是农民工。每次上车的时候,无论有票的还是没票的,都一窝蜂往车上挤。

我对过年回家的第一印象就是:我背着一个包,提着一个包,与同学一起,从第一节车厢狂奔到第十几节车厢,然后被后面的人推着挤上了车。上车后一分钟,车就开动了。我记得火车广播里号召大家发扬风格,让站着的乘客挤一挤。大家真的很友好,四个人的坐位,挤了五六个。火车过道里人贴着人,想蹲下来都没有办法,连厕所里也挤着好几个人。

男乘客还可以想办法,可苦了女乘客。记得有一次我身边坐着一个在西安读书的大学生,他要小便,就脱下外套让我给他挡住身体,想把尿撒在矿泉瓶里,但他很紧张,用了十几分钟才勉强撒出来。我还记得有一次身旁坐着一个从西北打工回家的河南妇女,尽管有位子,但她实在太困,太想睡觉了,就把位子让给别人坐,自己钻到座位底下睡觉去了。

应该要肯定,我们国家这十年间的铁路建设取得了巨大成就,铁路线路的增加,尤其是动车和高铁的开通,极大缓解了交通压力。火车站、火车上,起码不会像过去那么拥挤了。

过年回家那种路途的遥远、时间的漫长、竞争的激烈、拥塞以及不安全感,让我对“男儿有志在四方”的观念产生了极大厌倦。所以,本科毕业时,我找工作坚决要回到湖北。后来我就在家乡隔壁的县城一中当老师。自2004年到2011年来上海读研之前,我再也没有遭受春节回家难的痛苦。尽管从隔壁县回家的汽车在过年时依然被塞得满满的,但毕竟只有两个多小时,实在挤不下,还可以花两百多块钱请出租。我在上海读研的这几年,其实也没有遭受回家难的痛苦,因为上海到武汉的高铁和动车很多,普通车也有几趟,买票很方便。

今天各位出行,如果坐火车,不是高铁就是动车吧?但是,不知道大家有没有想过:那种速度慢、见站停的普通列车是否还有存在的必要?

大家有没有想过:到底是谁在乘坐普通列车?

我想大家肯定一下子就能给出答案:除非没有其他更好的交通工具,学生不会坐,城市人不会坐,主要是那些底层的老百姓,比如农民、农民工在坐。

去年暑假和寒假回家,我特意选择坐慢车,16个多小时的硬座。就是要看看是哪些人在坐慢车,看看慢车上还是不是过去那个样子。的确,主要是农民、农民工在坐慢车。对农民工来说,选择坐慢车,比动车起码节约一半的钱,比高铁节约三分之二以上的钱。从深圳到武汉,高铁一等座要八百多,二等座五百多,但慢车硬座不到两百。尤其对于全家在外打工的人,从深圳到武汉,可能要节约一千多元,这对农民家庭来说不是小数目。

不过,慢车也没有过去那么挤了,因为农民工虽多,但很多都被动车和高铁分流了——既有主动的分流,也有被动的分流,因为价格便宜的慢车越来越少了。

大家可以注意到,今年12306网站通告的春运期间的加班车,三分之二以上的是非动车高铁。这个安排还是挺人性的,因为说到底,加班车就是为了农民工而加,低价位的车符合他们的需求。

而且,你会发现,普通火车与动车的氛围完全不同。

在动车上,相对比较安静,大家不是玩电子产品就是睡觉,相互间很少交流。但是,在普通火车上,熟悉的、不熟悉的,都在热烈地交流,还有打牌、吃东西的,做什么的都有,也有用劣质手机放歌曲的,大家都不担心打扰到别人,也没有人认为别人的做法对自己是一种干扰。慢车上的风格是粗犷的,是人间生活的那种氛围。

对比动车高铁与普通火车,很容易就能发现这里的阶层差别、生活方式的差别。而且你还能感觉到,底层人的心理,比我们想象的要乐观得多,健康得多。底层的状况虽然普遍很糟糕,但大家还是很听话地活着,这里面的一个重要原因,就是他们如果在外面活不下去,还有家园可以退守。

开私家车回家过年,在青年打工者中越来越普遍。我待会进一步讲这个事情,因为它的意义大大超出了交通工具本身。

骑摩托车回家的情况,大家可能在新闻里看到了。每年春节,总有摩托大军回家过年。我的一个表哥,每到过年时就让他的儿子坐汽车回家,而自己骑摩托车带老婆回家,路上要两天一夜。另一个表哥也是骑摩托带老婆回家,有一年在途中撞了人,不知是真撞还是被讹诈了,反正被人家扣了一天多,赔了一万多块才放人,半年的收入就这样没有了。

###人与人之间联系的失落

我觉得,当前农村的亲情关系,很大程度上是靠老一辈建立的关系维系着。在老一辈那里,这种关系处在一种相对稳定的时空里,但对年轻一代来说,大家的关系早已被现实割裂了。比如,我和我的众多表哥,小时候一起上山捉鸟,下河摸鱼,关系好得不得了,但这一二十年来,他们一直在外打工,我一直在外读书和工作,一年最多在过年时见一次,平均下来每年还没有一次,因为他们不是年年都回家。拜年的时候,大家也不再像过去那样,在亲戚家吃饭喝酒聊天,甚至留宿一晚,现在大家都骑着摩托车拜年,去亲戚家匆匆走一遭,放下东西,客套几句,就要离开了。平时的生活啊情感啊什么的,都没有来得及交流。大家拜年,不再是为了亲戚间互相走动,馈赠礼物,交流感情,而只是为了完成传统和长辈交代的一项任务

悲哀的是:如果老一辈都不在世了,新一辈的联系也就慢慢断了。

更让人悲哀的是:农村的日常生活充满着深刻的悲剧。自打工潮于九十年代兴起以来,很多农村人一直在外打工,二十多年来与父母团聚的时间,平均到每一年可能就十来天。很多农村老人倒毙在田间地头,病死在床上,儿女都不在身边。没有来得及为父母养老送终,成为许多人终身的悔恨。

每次回家,看到我身边的老人摇摇欲坠的样子,我就觉得心里难受得很。

如果一个人为了生存,连爱父母爱子女的机会都被剥夺了,你怎么可能指望他去爱别人,爱社会,爱自然?你怎么可能指望他能用超出金钱的标准来衡量别人的价值?所以我想说:现代生活是一种让人心肠变硬的生活。

###在农村,还有什么可以将农民动员起来?

自从2006年免收农业税之后,中国农村的基层组织主要起着上传下达的作用,不再与农民的根本利益发生关系,也不再能将农民组织起来,农民处于“个人自治”的状态。

(1)春节的力量。亲人团聚,过年拜年。过年的力量,亲情的力量,是当下动员中国人最有效的力量。这也是过年最让人感觉温暖的东西。当然,以前过年时的各种集体活动,都已消失殆尽了。

(2)祭祀。中国农村还是保持着过年、过十五给祖宗上坟“送亮”的习俗——家家户户都要去祖宗的墓地给祖先点蜡烛,烧纸钱,放鞭炮,与祖先交流。很多已经在城市安家的人,也会赶在大家三十这一天开车回老家给祖宗上坟。许多曾被废弃的祠堂,这些年也逐渐恢复起来了。

(3)葬礼。很多老人没有挨过冬天。过年前后,是老人逝世的高峰时段。丧葬在中国文化和中国人的生活中有着非常重要的地位,尤其对今天的社会来说,有着特别重要的意义。媒体上动不动就喜欢报道某某地方为举办葬礼大肆挥霍,让大家误以为这是普遍现象。其实恰恰相反。相比古代,今天的丧葬已是在最大程度上简化了。“贵生重死”的观念早已失衡了——大家越来越贵生,对于死,不再有敬重,不再让死者享受哀荣;对于天地,不再有敬畏。

但丧礼,在现实中依然起着不可替代的作用。去年快过年的时候,本家一个叔叔亡故——本家人和四面八方的亲戚来给他守丧,守丧的时候大家聚在一起交流,像过节一般,交流一年的生活情况、见闻和感想,称赞中央的政策,谴责干部的腐败……深夜里交谈的声音传得很远很远。守丧完毕,大家集体出力,将他抬到山上,让他入土为安。

社会学者经常用“原子化”来形容今天农村的现状,说白了就是,农村原有的那种共同体已经消失了,人与人之间不再像原来那样有着密切的关系和交往,不再像过去那样每到过年时相互串门,集体上街玩等等。为死者守丧和送葬,在农村反而成了村里人团聚和交流的一个契机。这也是我在家乡看到的唯一能够让大家团聚的方式。

###妻子?房子?车子

(1)妻子。这一点主要是针对农村的男青年来说的。在今天的社会,农村男青年在本地找媳妇越来越难。一来,这是由中国男多女少的现状决定的。而且,农村稍微长得好看点的女孩子,基本都嫁到城里去了,愿意嫁在农村的女孩子越来越少。二来,农村青年讨媳妇,要具备的物质条件很高,现在普遍的一个情况是:彩礼六到八万,房子两套:在老家一栋楼,在县城一套房。这个压力,并不比城市青年讨老婆的压力小。

过年的时候,打工的青年男女都回来了。只要哪一家有适龄女孩子,去她家的媒人可谓络绎不绝。这在乡村已成了一门生意,农村说亲,几乎到了“抢”的地步。如果初步说定一个,男方至少要给媒人五百块,最终结婚时,还要给上千的报酬,有的甚至要给到两三千。

传统的农村婚姻,从相亲到定亲到结婚,要三四年时间,男女双方有一个了解和熟悉的过程。现在却不同,年里看对的,过了年,马上定亲,然后女青年跟着男青年出去打工,等到半年过去,女方怀孕了,立刻奉子成婚。

曾听过一个搞量化统计的学者对农民工的调查报告,得出的结论之一是:农村孩子结婚越来越迟。但我看到的情况恰恰相反:因为女孩子难找,男孩子一到二十岁,父母就张罗着给儿子物色对象,物色好对象之后,既怕女孩子变心,又考虑要到城市讨生活的现实情况,就催着孩子赶快结婚。可以想象:在现代社会这种动荡不安的生活中,这样的婚姻会出现多少问题!事实上,农村离婚的情况,也是与日俱增的。

(2)房子。刚才已经说了,现在农村人娶老婆要房子两套:一套在家里,一套在县城。其实县城的那套房,平时都空着,只是过年时回来住,但对年轻人来说,那就是城市生活的一种代表。过年时,有的也会把父母接到县城过年,但父母住不惯,在县城过了大年,初一就赶回来了。在老家的生活是“老米酒,蔸子火,除了神仙就是我”,而在县城除了那套房,什么都没有。

但是,为了添置这两套房,将来给儿子娶媳妇,很多家庭是举全家之力在外打工。

下面给大家看我在去年过年的时候写的一则笔记,涉及到房子和婚姻的问题,但还有其他的含义在其中。

2013年冬天的一则笔记

跟大哥、细哥到二郎庙水库捕鱼。(细哥承包的这座小水库只有三十亩的水面,在海拔八九百米的山上,水很纯净,可直接饮用,鱼放在里面长得非常慢,一年下来甚至还要瘦。每年腊月底或者年初,细哥就要从外面进鱼秧,虽说是鱼秧,其实有三斤多一条——这种鱼是在平原地带的池塘里用饲料喂养的,进价是两块多,但是鱼在纯净水里清洗了一年之后,肉味大大改善,可以卖到五块多一斤。)

一个拉砖的师傅把车停在坝上。我们问他,从山下往山上拉一趟要多少钱。他骂了一句话粗话,然后说:“两百块,划不来!”又说,就是这样的生意,也越来越少了。山里的楼房基本都做完了,没有做的也都在县城里买了房。大哥说:“在县城买房又么样,到时住在那里做什么呢?”司机说:“只要是人,总有个生存的法子。”又来了一个人,是细哥的同学,他的摩托车上带着老婆和还在读初中的儿子。得知他在这山里做了楼房,还在县城买了一套房。细哥问:“你要买那么多房做么事!”他叹了一口气:“我们这时代不叫人过的时代!没办法!”“做了一栋楼,买了一套房,还叫没办法!明年还去打工吗?”“不去打工,在家里做么事?”而这座水库上头的两个塆子的人家,基本上都在这里做了一栋楼,在县城买了一套房。

其间来了一人,开小车,戴墨镜,手腕上戴着很粗的黄金链子。老远就用粗嗓子喊正在水上下网的细哥,问有鱼没有。细哥正划着独木船,一只手划,一只手下网,笑着答:“你又不买,问着做么事!”同我们说话时,他的墨镜始终没有摘下来,神气得不得了。墨镜又对细哥喊:“别扑了麻雀(翻船)哈,我是秤砣,到水里就沉了,帮不了你。”说完就独自哈哈地笑。他同我们说起晚上要陪开挖机的斗地主。说是挖山种天麻,规模很大,已经买了十五万斤树。从言谈中得知,他平时在县城住。细哥的同学也说,他准备将家里几面山的树都卖了——分田到户后交了几十年的税,没有沾过任何光。后来听细哥讲,墨镜小学没读完,就在外面混,替人讨债,拿斧头砍人,就这样起家的。

一会儿又来了母女三人,带着一个三岁的小孩。她们是来买鱼的。跟墨镜是亲戚。墨镜却不认识那个年纪最小的女孩。“跟以前长得不一样了呀!”墨镜说,“在哪里打工?”她说在温州。“属什么?”“属鸡。(刚满20)”

墨镜说:“还没有说人家吧?我帮你介绍个。”女孩的母亲说:“她回来这几天,已经有好几个人来介绍。”“某某某正为儿子找媳妇急得哼,我把你说到他家。”(说,替人说亲的意思)女孩母亲连忙说:“那怕是不行,她想嫁到县城里。”墨镜说:“他家在县城有套房子。那男孩的娘脾气不好,但你们又不跟她过,你们到县里住,做点小生意。他家也有钱,你叫他们现在拿个四五十万,轻而易举就拿出来了。”墨镜走的时候,表示过两天,要带那男孩上门相亲。

(3)车子。近些年来,对在外打工五年以上的农村青年来说,对一种东西的渴求,可能比对房子和妻子更为强烈,那就是车子。车子不一定要多么好,五万,八万,二十万,各种档次的都有。老百姓不认识车子的牌子,不知道车子的价位,只知道这些车叫“小车”。不管什么小车,关键是要有!

在农村,房子是一个媒介,车子更是一个媒介——是你在外面混得好,有身份的代表,房子不能移动,车子却可以四处招摇,表示衣锦还乡。很多二代、三代农民工,当下最大的期待就是买一个车子。尤其对那些好些年没回家的人来说,他再次回家,必须要有辆车,否则他怎么证明自己?

春节的县城,到了水泄不通的地步,这些车子绝大部分都是从外面回来的,与此同步的情况是:物价飞涨。

###知识的无力感

这十多年来,外界对于农村的关注主要集中于农民工身上。众所周知,他们在城市打工的日子很苦,而家里的老人和孩子往往无人照料。其中酸甜苦辣自不待言。但从另一个角度来看,现在农村日子过得较为殷实的,也恰恰是这些有几个成员在外务工的家庭。(仅仅只有一个成员务工,通常不足以改变家庭的经济状况。)应该说,他们的辛劳和泪水还是得到了适当的回报。

倒是有两类家庭,他们处于最困难的境地,却往往被忽视。一类是孤寡老人。一类是举全家之力,把子女培养成大学生的家庭。

在第一类家庭中,这些老人的年纪一天比一天大,身体一天比一天衰败,没有任何经济来源,日子过得异常艰难。有人会问:国家不是有低保吗?是的,他们中的确有部分人吃上了低保。在我的家乡,低保的额度是每年八百。但是,绝大部分这样的老人,仍在低保的福利之外。因为他们处在农村的最底层,没有人替他们说话。低保名额通常被身强体壮者拿走。甚至,有些村干部为了堵住所谓“刁民”的嘴,不让他们到镇上或县里反映村里的问题,就把这些人变成低保户,有的甚至全家吃上低保。“有钱人吃低保”,早已成为农村公认的一桩怪事。过年的时候,大家也不再像传统社会那样,家家户户给这些孤寡老人送点东西。

这里所谓第二类家庭,主要是指有孩子在1980年代出生的家庭。这些孩子,从小学读到大学,一直都在经受教育收费的最高峰,没有哪一坎能够躲过。并且,二十多年来,农村税费多如牛毛,家里一年的收入,不够交税。大人内外应付,心力交瘁。最要命的是,作为满载家庭希望的大学生,毕业之后勉强找到一份饿不死的工作时,又面临结婚、买房等种种压力。可以说,几乎每一个农村的80后大学生,都是以牺牲整个家庭的幸福为代价来读大学的。但他们中的绝大部分,毕业后没有希望收回成本,倒是让年迈的父母继续陷入困顿。

最近一个博士师兄请吃饭,他说他现在最害怕的就是回家,感觉很难融入到村子的生活,所以他每年过年他都回去得很迟,来学校很早。为什么呢?因为当你一出现在村子里,村里人其他的不问,就问一个问题:“你现在能拿多高的工资?”所以,他过年回家,基本不出门。这个体验跟我是一样的。你要问我过年在家乡看什么,其实我没看什么,因为一大半时间是呆在家里看书,看电视,写东西。

作为农村大学生,当你回到家乡的时候,你童年那些伙伴都衣锦还乡了,而你连自己的问题都不能解决,你还能做什么呢?没有人信任你的知识!

说了上面这些,相信大家能够理解,对于我这样漂在外的农村大学生,回家过年既是一件非常急迫的事情,也是一件情怯的事情。

回家究竟看什么?其实真的没有刻意去观察,但是很多事情却不停地往你心里撞,也就有了很多感受。越看,对乡村的未来越迷茫。

转载自:chinadigitaltimes


2015-03-01 思考 , 感悟 , 转载

每天学习一个命令:xclip 与剪贴板交互

xclip 命令可以从 stdin,或者文件读入数据到剪贴板,或者将剪贴板内容粘贴到目的应用中。xclip 命令建立了终端和剪切板之间通道,可以用命令的方式将终端输出或文件的内容保存到剪切板中,也可以将剪切板的内容输出到终端或文件

安装

sudo apt-get xclip

命令格式

xclip [OPTION] [FILE] ...

常用参数:

-i      从 stdin 读入
-o      打印到标准输出

使用实例

不加选项时只在保存在 X PRIMARY(终端剪切板),加上选项 -selection c 后保存在 X CLIPBOARD(外部程序剪切板)

为了区分这二者的区别,可以简单的做一个试验。

echo "Hello World" | xclip

此时 Hello World 字符只是在终端的剪贴板中,可以尝试在终端鼠标中键粘贴,发现终端的粘贴板是已经被修改的,此时用 Ctrl + v 粘贴到其他 GUI 应用程序(比如 Chrome 地址栏)发现粘贴板并不是 Hello World。

echo "TEST OUTSIDE CLIPBOARD" | xclip -sel c

此时会发现 Chrome 中可以粘贴 TEST 这行文本,而鼠标中键粘贴到终端的还是上面的 Hello World。

终端输出保存到剪切板中

ls -al | xclip
echo "SOME" | xclip
xclip /etc/passwd
xclip < /etc/passwd

此时 ls -al 的输出内容已经保存在剪切板中了,此时 xclip -o 可以看到剪切板的内容。

但此时还不可以粘贴到终端以外的程序中,此时需要用到: xclip -selection c

ls -al | xclip -selection c
xclip -sel c /etc/passwd
xclip -sel c < /etc/passwd

剪切板内容输出到终端

xclip -o
xclip -selection c -o

剪切板内容输出到文件

xclip -o > ~/test.txt
xclip -selection c -o > ~/test.txt

reference

  • man xclip

2015-02-26 linux , command , xclip

每天学习一个命令:ffprobe 查看多媒体信息

在 ffmpeg package 中有一个 ffprobe 工具,主要用来查看多媒体文件或者流媒体信息,在线的视频信息也能够快速获取。大部分情况下个人比较喜欢使用 ffmpeg -i input.mp4 来快速查看,这种时候在终端上比较快速,而如果有些时候想要分析一下媒体文件,需要编程获取得到的媒体文件结果,显然 ffmpeg 的输出结果简直无法忍受,而 ffprobe 提供非常清晰的输出格式,非常方便的可以提供给编程软件解析使用。

官网说明:http://ffmpeg.org/ffprobe.html

命令格式

ffprobe [OPTION] file

常用的参数

-show_format            显示输入多媒体流的容器格式信息
-show_streams           显示输入多媒体流中每一个流的信息
-i input_file           指定输入文件
-print_format json      json 形式输出
-of 或者 -print_format  default/compact/csv/flat/ini/json/xml

命令行:

./ffprobe -print_format json -show_format -show_streams -i ./video/c.ts

其中:  

-print_format json 以 json 格式输出 , 
-show_format 输出封装格式信息 ,
-show_streams 输出流信息,
-i ./video/c.ts 输入文件

使用实例

基本用法

ffprobe -v error -show_format -show_streams input.mp4

输出该视频的基本信息,如果上面的命令输出结果过多,而只想要比如 size 可以

ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1 input.mp4

如果只想要结果可以

ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 input.mp4

上面的命令中:

  • -v 参数是日志输出级别
  • error 则略去了 build 和 generic 信息,暴露 error 错误
  • -print_format 则是输出结果格式

获取视频时长

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

直接输出视频时长。

下面是一段 shell 脚本,之前遇到过有一批视频地址,想要获取这批视频的市场,用 ffprobe 就能够完成。

while IFS='' read -r line || [[ -n "$line" ]]; do
    lineArray=($line)
    echo ${lineArray[0]}
    duration=$(ffprobe -i ${lineArray[1]} -show_entries format=duration -v quiet -of csv="p=0")
    echo $duration
    echo "${lineArray[0]} ${duration}" >> duration.txt
done < "$1"

以 json 格式输出

ffprobe -show_streams -show_entries format=bit_rate,filename,start_time:stream=duration,width,height,display_aspect_ratio,r_frame_rate,bit_rate -of json -v quiet -i 98a74a06741a091b8a42aaa31b4edc66.mp4

输出:

{
    "programs": [

    ],
    "streams": [
        {
            "width": 720,
            "height": 1280,
            "display_aspect_ratio": "0:1",
            "r_frame_rate": "30/1",
            "duration": "40.833333",
            "bit_rate": "1710937",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "VideoHandler"
            }
        },
        {
            "r_frame_rate": "0/0",
            "duration": "40.890431",
            "bit_rate": "128102",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "SoundHandler"
            }
        }
    ],
    "format": {
        "filename": "98a74a06741a091b8a42aaa31b4edc66.mp4",
        "start_time": "-0.046440",
        "bit_rate": "1065995"
    }
}

外延

mediainfo 也是一个用来获取音频视频信息的工具,比如封装格式、音视频编码格式、码率等信息。

mediainfo 可以获取的信息包括

  • General: title, author, director, album, track number, date, duration…
  • Video: codec, aspect, fps, bitrate…
  • Audio: codec, sample rate, channels, language, bitrate…
  • Text: language of subtitle
  • Chapters: number of chapters, list of chapters

mediainfo 支持的格式

  • Video: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, MPEG-4, DVD (VOB)…
  • Video Codecs: DivX, XviD, MSMPEG4, ASP, H.264, AVC…
  • Audio: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF…
  • Subtitles: SRT, SSA, ASS, SAMI…

mediainfo 输出的字段不容易被解析,表述方法不统一。例如,对于 h264 这种编码格式,mediainfo 可能输出的表述为 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10;还比如,对于 mp3 这样的音频格式,居然会分两个字段进行描述,分别说明 mpeg 和 layer3.

reference


2015-02-09 linux , ffmpeg , ffplay , ffprobe , command

每天学习一个命令:sed

sed 全名叫 stream editor,是字符流编辑器,一次处理一行内容,能够完美的配合正则表达式使用。 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

awk 的典型示例是将数据转化为格式化报表。

行编辑器 ed

awk 的起源追溯到 sed 和 grep,再往前追溯就到了 ed,最初的 unix 行编辑器。关于 ed 编辑器可以参考之前的『文章』

sed 使用参数

sed [-neifr] [ 命令 ]

选项与参数:

  • -n :只有经过 sed 特殊处理的那一行(或者命令)才会被列出来。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。
  • -e :直接在命令列模式上进行 sed 的命令编辑;
  • -f :从文件执行 sed 命令,-f filename 则可以运行 filename 内的 sed 命令;
  • -r :sed 默认支持正则表达式,使用 -r 开启扩展的正则表达式
  • -i :直接修改读取的文件内容,而不是输出到终端。

命令说明: [n1[,n2]]command

n1, n2 :在 n1 到 n2 行之间使用命令,举例来说,如果我的命令是需要在 10 到 20 行之间进行的,则 10,20[ 命令行为 ]

command:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,通常这个 s 的命令可以搭配正则 `1,20s/old/new/g`

实例

行删除及增加

以行为单位的新增 / 删除

将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

sed 的命令为 ‘2,5d’ , d 就是删除。sed 后面接的命令,请务必以 ‘’ 两个单引号括住喔!

只要删除第 2 行

nl /etc/passwd | sed '2d'

要删除第 3 到最后一行

nl /etc/passwd | sed '3,$d'

删除空白行

sed '/^$/d' file.txt

在第二行后(即是加在第三行)添加内容

nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

那如果是要在第二行前

nl /etc/passwd | sed '2i drink tea'

如果是要增加两行以上,在第二行后面加入两行字

nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

以行为单位替换

以行为单位的替换与显示

将第 2-5 行的内容替换为自己的内容

nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync

显示特定行

仅列出 /etc/passwd 文件内的第 5-7 行

nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

这个 sed 的以行为单位的显示功能,就能够将某一个文件内的某些行号选择出来显示。

数据的搜寻并显示

搜索 /etc/passwd 有 root 关键字的行

nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync

如果 root 找到,除了输出所有行,还会输出匹配行。

使用-n的时候将只打印包含正则的行。

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash

输出指定的行数 (输出 2-5 行的数据)

sed -n '2,5p' file

数据搜寻删除

删除 /etc/passwd 所有包含 root 的行,其他行输出

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh

搜索执行命令

搜索 /etc/passwd, 找到 root 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 bash 替换为 blueshell,再输出这行:

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
1  root:x:0:0:root:/root:/bin/blueshell

如果只替换 /etc/passwd 的第一个 bash 关键字为 blueshell,就退出

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
1  root:x:0:0:root:/root:/bin/blueshell

最后的 q 是退出。

数据的搜寻并替换

结尾的 g 表示匹配所有的

sed 's/ 要被取代的字串 / 新的字串 /g' file.txt

假如没有结尾的 g,比如

sed 's/book/books/' file.txt

则表示匹配一个 book,并替换为 books。

多点编辑

一条 sed 命令,删除 /etc/passwd 第三行到末尾的数据,并把 bash 替换为 blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e表示多点编辑,第一个编辑命令删除 /etc/passwd 第三行到末尾的数据,第二条命令搜索 bash 替换为 blueshell。

直接修改文件内容

sed 可以启用 -i 选项直接修改文件的内容,不必使用管道命令或者重定向。

sed -i 's/\.$/\!/g' filename.txt         # 将文件每一行最后的。替换为!
sed -i '$a # add to last' filename.txt   # 每一行后面 ($) 增加 (a) 后面的内容

sed 可以直接修改文件内容,这样对于大文本,可以不需要使用 vim 打开在进行编辑,直接使用 sed 行读取编辑就能够实现行修改和替换的作用。

reference


2015-01-15 linux , command , sed , editor

jmap 命令使用

jdk 自带的 命令用来 dump heap info,或者查看 ClassLoader info,等等。

命令格式

jmap [OPTION] PID

使用实例

不加任何参数

命令

jmap pid

查看 pid 内存信息。

查看堆信息

jmap -heap pid

查看堆对象信息

统计对象 count ,live 表示在使用

jmap -histo:live pid

查看 classLoader

jmap -clstats pid

生成堆快照

jmap -dump:format=b,file=heapdump.phrof pid

hprof 二进制格式转储 Java 堆到指定 filename 的文件中,live 选项将堆中活动的对象转存。

执行的过程中为了保证 dump 的信息是可靠的,所以会暂停应用, 线上系统慎用

文件可以用 jhat 分析。

错误

在运行 jmap 的时候可能遇到如下错误:

Attaching to process ID 18078, please wait...
Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.131-b11. Target VM is 25.152-b38
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.131-b11. Target VM is 25.152-b38
    at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:435)
    at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305)
    at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
    at sun.jvm.hotspot.tools.PMap.main(PMap.java:72)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.tools.jmap.JMap.runTool(JMap.java:201)
    at sun.tools.jmap.JMap.main(JMap.java:130)

解决办法就是保证 jmap 的版本 也就是 JDK 的版本和运行的 JVM 的版本,也就是 JRE 的版本一致。

我使用 Java VisualVM GUI 来查看当前进程使用的 Java 版本,或者直接 ps 查看进程,然后再使用对应的 jmap 的版本。

reference


2015-01-02 jmap , jstack , jdk , jvm , java

继续折腾 WNDR3800 之 shadowsocks

之前 也说过在 Openwrt 下使用迅雷远程下载,现在因为不想在 PC 端总是开着一个 shadowsocks 的程序,所以将 shadowsocks 安装到路由器端。然后还顺带解决一下 DNS 污染,和流量智能转发。

Shadowsocks

下载 编译好的 ipk

opkg update
opkg install libpolarssl
opkg install shadowsocks-libev_1.5.1_ar71xx.ipk

shadowsocks 安装后有三个命令,ss-local 启动 sock5 代理,ss-redir 启动透明代理,ss-tunnel 启动隧道。这里使用了 ss-local 和 ss-redir

# 编辑 vim /etc/shadowsocks.json
{
    "server":"『服务器 ipv4/ipv6 地址』",
    "server_port":8388, #服务器端口
    "local_port":1081, #本地 sock5 代理端口
    "password":"『密码』",
    "timeout":300,
    "method":"『加密方式』"
}

修改配置文件/etc/init.d/shadowsocks

START=95
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
CONFIG=/etc/shadowsocks.json
start() {
    service_start /usr/bin/ss-local -c $CONFIG
	service_start /usr/bin/ss-redir -c $CONFIG
}
stop() {
    service_stop /usr/bin/ss-local
	service_stop /usr/bin/ss-redir
}

添加执行权限,设置开机启动

chmod +x /etc/init.d/shadowsocks
/etc/init.d/shadowsocks enable

pdnsd

opkg update
opkg install pdnsd

配置/etc/init.d/pdnsd.conf

global {
    #debug = on;
    perm_cache=1024;
    cache_dir="/var/pdnsd";
    run_as="nobody";
    server_port = 1053;   #使用 1053 作为 DNS 端口,默认是 53,一定要修改否则会跟默认 dnsmasq 冲突
    server_ip = 127.0.0.1;
    status_ctl = on;
    query_method=tcp_only;#最重要的配置,只使用 tcp 查询上级 DNS
    min_ttl=15m;
    max_ttl=1w;
    timeout=10;
}
server {
    label= "googledns"; #这个 label 随便写
    ip = 8.8.8.8;    #这里为上级 dns 的 ip 地址,要求必须支持 TCP 查询,相关说明见后文注解
    root_server = on;
    uptest = none;   #不去检测 dns 是否无效。
}

启用 pdnsd,并设置为开机启动:

/etc/init.d/pdnsd enable
/etc/init.d/pdnsd restart

完成!

dnsmasq 和 ipset

openwrt 默认安装的 dnsmasq 不支持 ipset,需要先卸载,换成 dnsmasq-full,输入一下命令查看 dnsmasq 版本,写着 no ipset 的就需要安装完整版。

dnsmasq -v

运行以下命令:

opkg update
opkg install kmod-ipt-ipset ipset ipset-dns
opkg remove dnsmasq
opkg install dnsmasq-full

dnsmasq-full 从这里 下载,设置 dnsmasq 对特定域名使用本地的 pdnsd 进行解析: 为了保持配置文件整洁,建议在 /etc/dnsmasq.conf 最后加入:

conf-dir=/etc/dnsmasq.d

然后新建 mkdir 目录 /etc/dnsmasq.d ,在里面加入一个 conf,名字任选。譬如 /etc/dnsmasq.d/fuckgfw.conf , 下面是我的文件内容,你可以按自己需要整理自己的:

#Google and Youtube
server=/.google.com/127.0.0.1#1053
server=/.google.com.hk/127.0.0.1#1053
server=/.gstatic.com/127.0.0.1#1053
server=/.ggpht.com/127.0.0.1#1053
server=/.googleusercontent.com/127.0.0.1#1053
server=/.appspot.com/127.0.0.1#1053
server=/.googlecode.com/127.0.0.1#1053
server=/.googleapis.com/127.0.0.1#1053
server=/.gmail.com/127.0.0.1#1053
server=/.google-analytics.com/127.0.0.1#1053
server=/.youtube.com/127.0.0.1#1053
server=/.googlevideo.com/127.0.0.1#1053
server=/.youtube-nocookie.com/127.0.0.1#1053
server=/.ytimg.com/127.0.0.1#1053
server=/.blogspot.com/127.0.0.1#1053
server=/.blogger.com/127.0.0.1#1053

#FaceBook
server=/.facebook.com/127.0.0.1#1053
server=/.thefacebook.com/127.0.0.1#1053
server=/.facebook.net/127.0.0.1#1053
server=/.fbcdn.net/127.0.0.1#1053
server=/.akamaihd.net/127.0.0.1#1053

#Twitter
server=/.twitter.com/127.0.0.1#1053
server=/.t.co/127.0.0.1#1053
server=/.bitly.com/127.0.0.1#1053
server=/.twimg.com/127.0.0.1#1053
server=/.tinypic.com/127.0.0.1#1053
server=/.yfrog.com/127.0.0.1#1053

#Google and Youtube
ipset=/.google.com/setmefree
ipset=/.google.com.hk/setmefree
ipset=/.gstatic.com/setmefree
ipset=/.ggpht.com/setmefree
ipset=/.googleusercontent.com/setmefree
ipset=/.appspot.com/setmefree
ipset=/.googlecode.com/setmefree
ipset=/.googleapis.com/setmefree
ipset=/.gmail.com/setmefree
ipset=/.google-analytics.com/setmefree
ipset=/.youtube.com/setmefree
ipset=/.googlevideo.com/setmefree
ipset=/.youtube-nocookie.com/setmefree
ipset=/.ytimg.com/setmefree
ipset=/.blogspot.com/setmefree
ipset=/.blogger.com/setmefree

#FaceBook
ipset=/.facebook.com/setmefree
ipset=/.thefacebook.com/setmefree
ipset=/.facebook.net/setmefree
ipset=/.fbcdn.net/setmefree
ipset=/.akamaihd.net/setmefree

#Twitter
ipset=/.twitter.com/setmefree
ipset=/.t.co/setmefree
ipset=/.bitly.com/setmefree
ipset=/.twimg.com/setmefree
ipset=/.tinypic.com/setmefree
ipset=/.yfrog.com/setmefree

#Dropbox
ipset=/.dropbox.com/setmefree

#1024
ipset=/.t66y.com/setmefree

#shadowsocks.org
ipset=/.shadowsocks.org/setmefree

#btdigg
ipset=/.btdigg.org/setmefree

#sf.net
ipset=/.sourceforge.net/setmefree

#feedly
ipset=/.feedly.com/setmefree

按照这种格式指定特定的域名走代理。 server=/google.com/127.0.0.1#1053的含义是 google.com 通过本地 1053 端口解析地址 ipset=/google.com/setmefree 的含义给 google.com 的数据包打上标记,一会配置iptables时会用到 接下来配置iptables,在/etc/firewall.user里加上两行

ipset -N setmefree iphash
iptables -t nat -A PREROUTING -p tcp -m set --match-set setmefree dst -j REDIRECT --to-port 1081

每条记录都需要跟一条 ipset 设置,不要忘了。作用是把打上了标记的数据包重定向到 ss-redir 的透明代理端口

root@OpenWrt:~# cd /usr/bin
touch shadowsocks-firewall
vi shadowsocks-firewall

修改文件内容

#!/bin/sh

#create a new chain named SHADOWSOCKS
iptables -t nat -N SHADOWSOCKS

# Ignore your shadowsocks server's addresses
# It's very IMPORTANT, just be careful.
iptables -t nat -A SHADOWSOCKS -d YOUR-SERVERS-IP-ADDRESS -j RETURN

# Ignore LANs IP address
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN

# Ignore Asia IP address
iptables -t nat -A SHADOWSOCKS -d 1.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 36.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 39.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 42.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 106.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 110.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 112.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 113.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 114.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 115.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 117.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 118.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 123.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 126.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 175.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 183.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 211.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 221.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 222.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 223.0.0.0/8 -j RETURN

# Anything else should be redirected to shadowsocks's local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1081

# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS

解释 iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 8024 这里的 8024 必须和 OpenWrt 路由器 /etc/shadowsocks.json里的 local_port 一样,也就是说,如果 /etc/shadowsocks.json"local_port":1081, 那这里的 8024 也要改成 1081(如果照着我上面的本地端口填了 8080,这里就改成 8080)

配置成功后,chmod +x shadowsocks-firewall给其运行权限。

运行

 /usr/bin/shadowsocks-firewall

重启 dnsmasq 和 firewall 就可以实现流量自动分流了

/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart

以后只要修改dnsmasq的配置文件就可以指定更多的地址走代理

可选方案 解决 dns 污染

这里比较方便的是,通过 ChinaDNS 就可以了。

和安装 ShadowSocks 一样,可以先通过 WinSCP 上传到路由器。

opkg install ChinaDNS-C_1.0.0_ar71xx.ipk  # 安装
/etc/init.d/chinadns start                # 运行
/etc/init.d/chinadns enable               # 开机启动

reference

  1. http://hong.im/2014/07/08/use-ipset-with-shadowsocks-on-openwrt/
  2. http://www.jianshu.com/p/4800eec60516
  3. http://blog.berry10086.com/Tech/Openwrt/openwrt-shadowsocks-ipset/
  4. http://www.shuyz.com/install-shadowsocks-on-hg255d-openwrt-and-config-nat.html
  5. http://hong.im/2014/03/16/configure-an-openwrt-based-router-to-use-shadowsocks-and-redirect-foreign-traffic/

2014-11-24 shadowsocks , openwrt , knowledge , shadowsocks-libev

Play Clash of Clans

玩部落冲突(Clash of Clans)也已经四个多月了,这是我第一个花钱在上面的游戏,不过最近因为给别人看COC乱点花了我1200左右的钻石,顿时玩下去的信心都没有了,既然没有动力了,就来总结一下吧,就当是个结束。

很早知道这个游戏,看到很多人玩,包括很多身边的同学。但是机缘巧合有一好友也开始玩,就带着我一起开始玩了,于是从暑假开始,到今天11/5,差不多正好4个月时间,除了魔兽争霸这个游戏,还真没有一个游戏能让我坚持玩这么长时间的。什么吸引我呢?这个游戏依靠策略,攻打的策略,守家的策略,让人欲罢不能。另外就是好友及部落机制。再次就是不想偷菜种菜那么没有头脑,收集金币及圣水都是需要一定的技巧。虽然被人乱点坑了很多金币,并且不得不赞扬游戏公司对游戏参数的设置,让人无比的想花钱,并且会让人觉得花的很值得。

Clash of Clans 8本阵型

Clash of Clans

Clash of Clans 双菱形

##一些网站 YouTube Channal https://www.youtube.com/channel/UCxNMYToYIBPYV829BJcmUQg 这个频道从低等级开始,一步一步升级,单人模式,攻击策略,防御策略很全面,可以关注。

之前几个布阵的网站都是直接从Google点进去的,根本记不住网址,所以用Google喽搜喽。

##关于钻石 关于钻石,网上很多说免费的钻石的,千万别信,基本都是假的,稍微真的就是去赚礼品卡的钱,然后用礼品卡买钻石。游戏中成就和清理地面的灌木石块等等都能获取一定的钻石,所以省着点用很快能够买到第三个农民500钻,等第四个农民1000钻其实也应该很快,如果不出意外2000钻的第五个农民我马上也能有了,只是。。。。

最后有一点,我在升级过程中吃了很多苦头,就是千万不要着急升级大本营,COC匹配对手有一定的算法,当时也Google了,会根据一定的算法,等级越高越不好打,所以最好在每一个大本营造完全不建筑并且升级到最高等级不能升级再升大本营。

##一些技巧

  • 搜寻对手时可以多搜寻一些,直到找到一个资源丰富的
  • 搜寻对手时注意观察阵型及金矿圣水收集器的位置,如果在外围可以轻松拿下。
  • 单人模式一定要留到升级完气球之后,一个气球搞定

参考:


2014-11-23 游戏 , Game , ClashOfClans

推荐网站之求字体:通过图片找字体

推荐网站之求字体:通过图片找到对应字体。

求字体 http://www.qiuziti.com/

最早遇到这个问题是我当时看陈墨评金庸系列书籍的时候封面上很漂亮的字体,下图中很大篇幅的小字。

赏析金庸

当时我还没遇见这个求字体网站,我是直接在百度知道问的别人,正好还有人知道,当时就记住了这个字体—-超世纪粗行书。 今天看到别人在摄影上加上了很好看的Logo,不禁想知道中文的字体,于是找到了这个网站。使用体验都很好,因而推荐出来。

找字体


2014-11-22 fonts , website , 推荐网站

Rime输入法

Rimeime是中州韻輸入法引擎 | Rime Input Method Engine,项目网址如下

按照官网给出的定义:Rime不是一种输入法。是从各种常见键盘输入法中提炼出来的抽象的输入算法框架。英文Rime涵盖了大多数输入法的共性,所以在不同设定下,Rime可化身为不同的输入法用来打字。Rime是跨平台的输入法软件,Rime输入方案可通用于以下发行版:

  • 【中州韻】 ibus-rime → Linux
  • 【小狼毫】 Weasel → Windows
  • 【鼠鬚管】 Squirrel → Mac OS X

很多东西看官方的wiki就能看明白,今天折腾Rime输入法主要是在Windows下,解决了几个问题。

##词库 之前一直使用Google拼音输入法,Google拼音输入法能够导出一套用户长期积累的词库。我利用“深蓝词库转换“工具将Google拼音输入法导出的词库,大概7万多条转成Rime词库格式。然后开始菜单调出,小狼毫用户词典管理,选中luna_pinying,点击“导入文本码表”导入词库。瞬间就可以从Google拼音输入法转移到Rime输入法。导入文本码表只是针对Google拼音输入法中由用户积累的词汇。一般只建议将最为关键,带有词频信息的词库使用“导入文本码表”的方法导入到Rime输入法。 关于词库,Rime输入法的词库有两部分组成。以下摘自贴吧:

  • 一部分是由系统文本词库(一般以xxx.dict.yaml结尾)通过「重新部署/deploy」生成的固态词典(一般以xxx.table.bin结尾),这部份词库因为在输入过程是固定不変的,所以存在用大量的词彚,也不允许用戸来直接删除。

  • 另一部分就是记录我们用戸输入习惯的用戸词典(一般以xxx.userdb.kct)结尾。这部份词库的词彚,正常情况下是由用戸输入的时候随时生成的;其词彚可以动态调整,数量理论上来说不会特别多,也允许用戸自行删除(shift+delete)。

佛振同学在设计用户词典时,没有考虑到有导入大词库的需求,就按照估计用戸可能积累起来的词彚量,把容量设置为「十万」规模以提升存储效率,超过这个量性能则会下降。

佛振同学设计「【小狼毫】用戸词典管理」的初衷和真正目的,在於譲大家将自己従其他输入法中积累出来的用戸词彚,可以顺利地迁移到rime中。而不是譲你把其他输入法整个系统词库都搬进来。如今,「【小狼毫】用戸词典管理」这个功能和界面,已经被众多的小白同学稀里糊涂地滥用了。

如何正确的导入词库?答:新增固态词典引用多份码表文件

批量添加词汇,过去一直没有简易的做法。现在可以这样做: 以【朙月拼音】为例,在输入方案裏指定一个新的词典名为

luna_pinyin.extended
#luna_pinyin.custom.yaml
patch:
translator/dictionary: luna_pinyin.extended

然后在用户目录创建一个词典文件luna_pinyin.extended.dict.yaml

#Rime dictionary
---
name: luna_pinyin.extended
version: "2013.04.22"
sort: by_weight
use_preset_vocabulary: true
import_tables:
  - luna_pinyin
...
# table begins
鸹鸹! gua gua 100

这样一来,部署【朙月拼音】这个输入方案时,将编译 luna_pinyin.extended 这部词典,而这部词典除了导入【八股文】词汇表之外,还导入了名为 luna_pinyin 的词典文件,即 luna_pinyin.dict.yaml 。被导入的词典文件只取其码表,忽略 YAML 段。 被导入的码表与本词典自带的码表共同决定了编码集合。 当然也可以:本文件的码表完全为空,只用来按需合并多个外部码表文件。

luna_pinyin.extended 这个词典的神奇之处是:虽然luna_pinyin.schema.yaml 已设置为加载名为 luna_pinyin.extended 的词典,但配套的用户词典名却是「luna_pinyin」,即 Rime 自动取句点之前的部分为用户词典名,以保证按以上方法增补了词汇之后,不至於因为改变词典名而抛弃原有的用户词典。

请注意,此法的设计用途是合并编码方案相同的多份词典文件,而不是用来将不同的编码混在一起。

具体的示例代码可参考 https://gist.github.com/lotem/5443073

其実佛振同学已经说得足够好了。 其中心思想提炼出来就是

  1. 先譲输入方案引用一个新的系统词库码表(佛振同学在gist.github.com上的示例中是luna_pinyin.kunki.dict.yaml),即给输入方案luna_pinyin(明月拼音)打一个补靪,将调用的词库重置为luna_pinyin.kunki.dict.yaml
  2. 创建一个luna_pinyin.kunki.dict.yaml的文件,加入好你需要导入的词彚(如「瑾昀」等等)。竝导入内置的系统词库(import_tables: luna_pinyin)。

其実佛振同学import_tables的这个做法,頪似於C语言编程中的#include头文件。 其目的和工作机制都是一様的。目的是引用头文件(或是系统预设词库)竝添加上自己的内容;工作机制是在编译(或是重新部署的时候),将链接到的不同的文本文件合并成一个文件,竝処理成二进制文件。

我另外要在佛振同学的基础上补充几点

  1. luna_pinyin.custom.yamlluna_pinyin.extended.dict.yaml都要放入用戸文件夹中
  2. 通过import_tables的方法,不仅仅可以导入预设的词典,甚至可以导入其他的自定义词典 以笔者为例子,我在朙月拼音输入方案中设定的词库名叫luna_pinyin.extended.dict.yaml。 而我luna_pinyin.extended.dict.yaml在文件头部分,除了系统预设词库之外,还导入了其他的细胞词库

  3. 码表中的词彚格式

    3.1 码表文件必须是utf-8无bom的编码。不能用ansi,否则出来的词彚会乱码 3.2 Rime对词彚的格式有着厳格的限定,其标凖形式是「词彚<tab>ci hui<tab>100」(方引号内部的部分,<tab>表示制表符(顕示为空白字符,不是空格))。

拼音码表的词彚格式是一个词彚占一行,不同的属性之间以制表符为间隔,编码之间以半角空格为间隔。従左往右依次是词彚、编码、词频。 其中编码和词频是可省略的。 也就是说 「词彚<tab>ci hui」、「词彚<tab><tab>100」、「词彚」 都是合法词库文件格式。

如果词频省略,那麼输入法会优先调用「八股文」(一个预设的中文语言模型,包含词彚和词频两穜属性)的词频,如果八股文找不到该词彚的词频,那麼这个词彚的词频就当成0来処理。

如果编码省略,那麼输入法在重新部署,将文本码表生成固态词典的时候,会根拠词库中的单字来给词彚自动编码(如果是拼音的话,叫「给词彚注音」更妥帖) 比如词库中有

我<tab>wo
和<tab>he
你<tab>ni
我和你

四个item,那麼「我和你」这个省略了编码的词彚在生成固态词典的时候会自动被注音上「wo he ni」。 其中有一个特别需要注意的地方,那就是処理多音字。 对於含多音字的词彚,我们要侭量避免譲输入法给他自动注音,因为会帯来错误的读音(比如「重庆」读成「zhong qing」) 所以一般含多音字的词彚都要最好标注上读音。 如果実在没辧法弄到读音也没関系。因为Rime已经给多音字的罕见音做了降频処理。従而使得多音字的罕见音不会参与词彚的自动注音。

関於自动注音的具躰的细节可以看rime的wiki,这裏我就不多说了。総而言之,我廃话那麼多,是为了譲大家了解rime词库的工作机制,其実就为了告诉大家两句话:「在导入词彚的时候,一般来说只要加纯汉字就够了。含多音字的词,系统词库一般都有,如果没有才要考虑给这个词注上音。」

另外,系统词库中,已经包含了完整的单字注音和罕用读音降频処理,大家可以放心地导入纯汉字词彚,不用太过担心。(所以一定给要记得import_tables: luna_pinyin,来使自定义码表获得系统词库中的单字注音、含多音字词彚注音以及系统词彚词频)

再来一个另外。。。 关於楼主配置的多个词库挂接的方法实例,可参考由rime-aca友情提供的「朙月拼音·扩充词库」 下载地址:https://bintray.com/rime-aca/dictionaries/luna_pinyin.dict

参考:

其他词库下载 搜狗词库 来源

##修改配置文件定製指南

###更改候选词数 修改文件 default.custom.yaml

patch:
  "menu/page_size": 10

候选词最多支持10个。

###模糊音 将 https://gist.github.com/2320943 作为模板保存到luna_pinyin_simp.custom.yamlluna_pinyin_tw.custom.yamlluna_pinyin_fluency.custom.yaml即可。

参考链接

###小狼毫外观设定

参考链接

# weasel.custom.yaml
patch:
  "style/font_face": "华文行楷"  # 字體名稱,從記事本等處的系統字體對話框裏能看到
  "style/font_point": 16     # 字號,只認數字的,不認「五號」、「小五」這樣的

  style/horizontal: true      # 候選橫排
  style/inline_preedit: true  # 內嵌編碼(僅支持TSF)
  style/display_tray_icon: true  # 顯示托盤圖標

###一些快捷键

ctrl+` (grave) tab键上面,1左边的那个键 切换Rime输入方案 shift+delete 删除选中候选词 ctrl+ np 上下选词

参考链接


2014-11-21 输入法 , Rime

电子书

最近文章

  • JProfile 简单使用 在学习 ThreadLocal 的时候有人推荐了 JProfiler ,可以用来对 Java 内存泄露分析,JProfile 其实是一个 Java 的性能分析工具,不仅可以用来排查 OutOfMemoryError 的错误,对于查找系统瓶颈,查看 Java 堆信息等等都有很强大的功能支持。
  • 英语搭配语字典整理 最近用 GoldenDict 查词非常频繁且非常有效的提高了阅读的效率,但是在日常有的时候听一些英语口语的广播节目的时候,经常会有一些短语搭配,而我们平时如果写作的话,其实短语较于单词更为重要,口语亦然。所以产生了一个念头,如果有一本英语搭配语字典就能够提高不少效率,没想到都不用去刻意搜索,就出来了好几个推荐。
  • Using ${a:-b} 来赋值 看一些 shell 脚本的时候发现了如下的写法
  • Linux 下安装 openssh server 一般服务器中会默认已经安装 SSH server,而个人版本的发行版,比如桌面版的 Ubuntu 或者我用的 Mint 可能默认没有安装,那么就需要自己安装配置。
  • 每天学习一个命令:gzip 压缩文件 gunzip 是个使用广泛的解压缩程序,它用于解开被 gzip 压缩过的文件,这些压缩文件预设最后的扩展名为”.gz”。 事实上 gunzip 就是 gzip 的硬连接,因此不论是压缩或解压缩,都可通过 gzip 指令单独完成。