韭时园子里的菜

夏天在一次次的暴晒和一次次的暴雨中已经收尾,秋对北京来说几无印象,一阵风飘过,散落的枯枝落叶也会被环保车一溜烟的收走,没有麦收的气息,没有瓜果落地的充实,只留一抹陡寒的秋风来结束这迷人的暑假和工作日。自从离开家乡求学,济南、北京这两个熟悉的城市貌似都没有机会好好享受秋天,只有夏天的燥动和冬天的寒夜,好不容易的几天秋意稍不注意便是来年了。

在老家,秋属于农民,忙收割,忙储粮,把半年的收成浓缩在半个多月的农忙季节,一气呵成,也算是对自己工作成果的总结。玉米在一个夏天的炎炎烈日下叶子渐近枯黄,果实却欲见成熟。从南到北远望过去,整齐的一排排绿色线条沿着播种的垄间一字开去,慢慢变成毫无次序的枯黄,如果不凑巧夏日的一阵狂风就要让他们俯首称臣,果实减半,老农们也只能望天祈祷。虽说玉米是家乡后半年的主产农作物,但对于土生土长的农村人,玉米也只是饭桌上的玉米粥、棒碴粥,最多再加上窝窝头,相反倒是蔬菜能丰盛到极致。各种瓜果、绿叶菜轮番上阵,即便自己家地里不种,邻里之间交换一下彼此的收获也足够一个夏天的三餐菜肴,如若再碰上蔬菜大户搞促销,那盛况不减农村赶大集。

邻居家阿嫂家里地片儿多,经营着一片菜园,从茄子、豆角到山药、土豆,还有那一眼望去波浪滚滚的韭菜。股市是有句俗话:韭菜割了一茬又一茬,这个形容足以说明韭菜的特点。生长到成熟季节就该收割了,如果再不收割那嫩嫩的绿色就要变成深绿的老叶子, 再吃也便无味了。每到了韭菜从田间地头收割回家的时候,左邻右舍一招呼,都蜂拥而至的围坐在阿嫂家门口前,铺一张硕大无比的布垫,把杂乱无序的韭菜从车上卸下,就开始了韭菜收割后的清理工作。韭菜虽然没有打农药而且从田间看着也很干净,但是根部的泥土、漫天飘飞的树叶、偶尔出现的小虫还是要仔细的清理出来,不然肯定是卖不出好价钱的。清理后的韭菜还一缕缕的排放整齐,等待后续的捆扎,把一车杂乱的韭菜变成排放整齐、新鲜干净的一捆捆的韭菜。这样的繁杂每每收割都要经历一次,每次也都是大家把一车韭菜从绿色山堆变成绿色砌墙堆,干完这些活儿计也差不多是吃饭的时间点,大家从码好的韭菜堆里挑一捆成色比较差的自己带走,各自散开回家做饭去了,阿嫂也是满心感谢的送别大家。

炊烟袅袅,冒出的火星闻不到饭菜的香味,但吃了韭菜相信你要清理一下自己的口臭了。这也是很多人不吃韭菜的一大原因,一说话,浓浓的韭菜味儿从嘴中弥漫开来,这尴尬实在不能忍,尤其是工作餐。虽然韭菜也有不讨人喜欢的地方,但它却不失为一味美食之餐,我最爱吃的便是韭菜馅儿饼。

韭菜馅儿饼不比韭菜饺子的工序复杂,节省时间,吃起来简单,适合午饭晚饭来吃。相比现在城市里吃到的韭菜馅儿饼,老家的皮薄馅儿嫩。饼是老家的“薄蛋饼”,与春饼类似,但比春饼要大很多,大概有15寸。韭菜择根去土去皮后洗净切段,放入油、盐、大料,再放入两三个煎鸡蛋沫,搅拌放匀。把擀好的饼平铺在案板上,倒上适量的韭菜馅儿,保留饼的边缘,铺平放好,然后再盖上一层薄饼,将饼的四周与下层的饼相按压,一个韭菜馅儿饼就做好了。剩下的就是起火,在鏊子把饼烙熟,最后把饼放在篦子上十字交叉切成四块,最后的最后就是开吃了~

能谈出来的是制作工序,能做出成品的是实力,童年虽然耳濡目染,在奶奶身边驻足观看,但也从未亲身实践过。奶奶那娴熟的烙饼技术可能到我们这一辈也就失传了,流水线和工业化渐渐代替这些家庭式的小工作坊,围炉即吃的味道,绝非电饼铛或者大烤箱所能替代的。就如每一档美食节目都很火,但在飞速的生活节奏中,我们是被挟裹还是抵抗到底,是回归原生态还是继续前行,这都是没有答案的话题。

除了各种花样的韭菜做法,自家西边的小菜园也是撑起我们家一个夏秋的蔬菜供应的宝库。从入夏开始,先是各种豆角琳琅满挂在藤蔓,后是丝瓜、黄瓜、西红柿争先斗艳,红黄绿各种彩色纷呈,如果你不介意完全可以拔一根小葱,中间的空缺塞入一根长长的豇豆角,纯粹的原生态;在每每挥汗如雨的足球比赛之后从园子里摘一根黄瓜,放入自来水中放置几分钟,冰凉之间带着嘎嘣脆。夏天一步步的悄悄过去,瓜果藤蔓也渐渐进入枯黄的收尾期,秋日的期待也渐渐临近,扁豆的生长才刚刚进入时机,它选择的在夏秋之交扛一己之力,最后接力扁豆的是冬瓜、南瓜、吊瓜,它们适合储藏的特质决定了可以安然的吃到寒冷的冬天。

大概是那年,村里开始养殖桑蚕,家里的房屋不够用,索性就缩减了菜园,建起了平房,菜园子也就慢慢的被挤出了院落,回归到了大农田。

2017.09 摄于北京黄花城水长城

 

—后记

拖拖拉拉的一篇博文,从Google Keep开始动笔到今日匆匆结尾,2个多月的时间,每每打开Keep是一种负罪感在驱使着今日必须收尾~Orz

Android共享热点IP问题引发的“血案”

今天一朋友问Android手机的Wi-Fi共享热点IP能不能修改,他那边一直是192.168.43.*,自己记得在设置里面没有这个选项,便回复了他不能修改。后来猜测Android源码可能为了刻意避开常用局域网路由器192.168.0/1/2.*段,特意设置的其他网段,但会不会存在与基站代理在一个网段后冲突自我协调的机制呢?(当然这个可能性很低,一般基站的代理服务器分配的都是10.*段的内网地址),既然有了这个问题,那索性看看源码怎么设置的。

  • 涉水

首先想到的是到StackOverFlow上看看有没有相关问题,搜索得之,

http://stackoverflow.com/a/31238229/4865380

确实有人提到修改Hotspot网关的问题,给出的具体源码是在WiFiStateMachine.java中硬编码了192.168.43.1这个网关地址,这就解释了为什么共享出去的IP地址都是192.168.43.*了。手机用户想修改它,duang然是不可能了。

  • 挣扎

从AOSP的master中去查找上文提到的platform/framework/base/wifi/java/android/net/WiFiStateMachine.java却消失了踪影,寻寻觅觅发现已经被移到platform/framework/opt/net/wifi/service/java/com/android/server/wifi/WiFiStateMachine.java。一看就对源码分析不熟悉,这些模块搬家的消息都不知道,其实从5.0之后opt/net/wifi之后就有了,部分代码被迁移到这里。

但是,但是,这个文件里面再也没有发现startTethering()方法,而且硬编码的代码也被移除了,难道5.0之后热点网关IP的配置又被更改了?继续跟踪文件diff发现有一次提交提到AP:

https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/d4f347f7de30834317dd1561dc806eccb1c4f277

这次提交说明有关于AP热点配置在WiFiStateMachine.java中的代码被迁移到SoftAPManager,然后通过SoftAPManager来集成,同时也提到了AP这块代码放在WiFiStateMachine代码不够清晰。

  • 继续挣扎

既然知道了代码迁移过程,那就需要跟着去寻找SoftAPManager。这个文件和WiFiStateMachine.java在同一包下,打开文件一看还是没有发现对于IP地址的硬编码部分,只能再次寻求log,这个文件的修改历史记录比较少,其中最老的一条对应于上文提到的AP状态管理通过SoftAPManager。通过历史查看这次修改发现了从WiFiStateMachine.java迁移过来的硬编码IP地址的代码。既然在创建时代码还存在,那么次新一条的历史记录就更加让人着迷了:

时隔上次迁移到SoftAPManager.java的三个月后,这块逻辑又要被搬家了,归宿就是Tether模块,这么一波三折到底是Android源码,修改的简直是猝不及防。

  • 上岸

上面提交记录中,提到的Tethering&TetherInterfaceStateMachine在platform/frameworks/base/services/core/java/com/android/server/connectivity/下面,关于硬编码的部分被迁移到TetherInterfaceStateMachine.java

硬编码IP的方式并没有改变,至此终于将代码的变化追踪完了,结果还是一套硬编码方式。当然乐在于真正找到了答案。