Nitro's

Mar 21, 2017 - Comments - dev internet

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 Integrate SoftApManager to WifiStateMachine Refactor WifiStateMachine to use SoftApManager for managing soft AP instance. This consolidate all soft AP related states in WifiStateMachine to a single SoftApState. While there, fix number of existing issues in WifiController: - fix a possible race condition in WifiController where it will transition to a new state before AP is completely stopped. Currently it is being worked around in WifiStateMachine by having the soft AP states defer the commands that might be issued during this race window.

Feb 3, 2017 - Comments - life

我们为什么结婚

年前在家看到一篇文章写到在21世纪我们怎么还需要婚姻这样一种组织约束,是不是已经过时了,是不是需要重新定义家庭和群体组织关系?后来还想再读一遍,结果找不到原来的链接了。。。正逢过年恐婚族和催婚族撕逼大干一场的时候,这样的话题才会燃起这样老生常谈的硝烟。 6岁那年,大病初愈,刚从医院回来还不能走路,只能在床上大小便,奶奶一边照顾着我一边给上小学的姐姐做三餐,到现在我还记得那个黑漆漆的屋里,高高的床铺旁边就是灶台,下雨天一边是倒吹烟一边是雨水的滴答。直到有一天,奶奶找我妈死活找不到,我爸也出去找,还是没找到,也没人告诉她去了哪里。无奈到第二天,同村的人告诉我爸,我妈回娘家了,准备离婚。那时的我也搞不懂什么是离婚,为什么妈妈不在身边,我爸为什么着急,对我来说,那一切都是茫然。后来一切如我妈所愿-离婚收场。至于为什么离婚,到现在我也没有问过奶奶或者我爸,生活的每一天都在眼前,6岁时不懂,16岁,26岁,一切尽在眼前。谈起此事,很多朋友会问,和妈妈再也没有联系了吗?我说没有,一点都没有,从未谋面,不再见面,她只是我妈,生下我的妈。后来的几十年老爸再也没有娶,他对妈妈或许到今天他也只有恨。如果问我,恨吗?不恨也不爱,无感。我能感受母爱吗?能,20多年用敏感的神经感触到了比一个单一家庭更多的关怀和爱,要感谢的人太多太多,怀着感恩前行~对一个难以维系的家庭来说离婚是最快捷也是最解脱的方法,如果你忍受家庭暴力,忍受丈夫出轨,忍受贫穷的伤害,忍受失望大过于希望,那为什么不选择离婚来结束这份守护、责任、感情? 有人说他窝囊,有人谣传她出轨,到最后他们两个终于离婚了。一个爱喝酒,一个爱打扮,爱喝酒的不耍酒疯,爱打扮的不惹老牛,这样的离婚怪罪于谁?七嘴八舌的街邻还是深埋心底的不合,他是老大,家里为了娶媳妇,最终选择了换亲这一风俗,自己的姐姐换来了自己的媳妇,老二老三继续光棍,最终老大也是成了光棍,婚还是离了,选择了在孩子成人之后,换句话说,好聚好散。后来的男人继续酗酒,但最终还是倒在了酒瓶底下,大病一场,在自己人生的弥留之际见证了自己儿子的婚礼,妈妈虽然远嫁他乡,但在自己儿子的婚礼上作为母亲接受了儿媳的一杯酒,而他最终却不治身亡。 等待是漫长的,尤其是面对生死的手术室,那个场面到现在依然历历在目。当时只有我爸和家里妹子,当班手术护士在催促着抓紧转手术室,所有人都很紧张,只有手术推车上的我是镇定自若。老爸耳朵背,听不清也听不懂护士的话,事情又特别着急,而且在那样的氛围下人的心情又是焦虑紧张,最后妹子哭了,真的很无助,既没有见过这种场面,也没有经历过如此重大的事情,眼泪瞬间就下来了,我赶忙安抚,但我已经躺在了手术推车上不能动,妹子一边收拾着东西一边和护士把我往手术室走。一边是帮不上忙的父亲,一边是无助泪如雨下的妹子,而我就像是被押上刑场的犯人,纵然我有一万只手和一万个脑袋也无能为力,只能静静的看着天花板一个个的飘过,一盏盏灯慢慢掠过,一步步地靠近麻药的终点。 醒来是漫长的,后期是痛苦的,不只是病痛还有一个之前健康人现在五花大绑一样的无奈,妹子之前都是家里照顾着疼爱着,从来没有这样照顾着一个病人,有时也会烦躁,作为一个处女座的病人有时还会这里不合适那里不合适总是挑毛病,只是妹子的一个白眼,最后我也只能无奈接受,谁让自己陷在是无行为能力的人,哈哈哈。要说处女座的奇葩之处,确实有可怕的地方,对于家里物品的堆放、购物的挑剔、审美的要求真是被自己而折服,妹子又是一个比较随性的人,不会有那么多事情考虑到,但自己看到后就会不自觉地开启了叨逼叨逼叨模式,最终收获的是你的要求你收拾,你既然有时间叨叨为啥不用这段时间整理等等,想想这也在理,索性我自己收拾,最后还能收获手动点赞,哈哈哈,不忍受和行动并存,或许这就是处女座的终极模式。 之前时常的晒晒菜谱晒晒厨房的成果,但是真要接受人民检阅的时候你才会发现,世界上好像只有你一个在吃素,只有你一个在少盐少油菜量刚刚好,结果就被喷地无地自容。八成熟的蒜苔炒肉、基本无油的炒白菜梗,在你吃起来蛮有味道的菜到了妹子那里竟然难以下咽,unbelievable,一个人的饭菜怎么都好,一桌人的饭菜真的是众口难调,我姐看到端到桌上的菜,一度怀疑买的菜不够吗?山东人确实是实在吗?放点辣椒可以吗?多放点盐能不能行?嗯,世界都在变,我只是偶尔的炒好了一道一家人可以吃的菜。 恋爱是一个过程,结婚只是一个起点。于她,早已不再是恋人或者老婆,已然变成了生命中不可缺少的那一部分,希望未来的几十年里,我们彼此是朋友、伙伴、爱人。

Feb 3, 2017 - Comments - tech dev translate

Android 物联网SDK

原文链接 支持库 主要包含两方面的支持:外部器件 IO API、用户驱动API 外部器件 IO API实现了相关的工业标准协议和接口,可以让App与传感器和制动元件进行通信。支持的接口主要有:GPIO、PWM、I2C、SPI、UART。 https://developer.android.com/things/sdk/pio/index.html 用户驱动API扩展自Android framework的Service组件,它允许App注入硬件事件到framework层,其他的Apps就可以通过标准的Android API来访问这些事件信息。 https://developer.android.com/things/sdk/drivers/index.html 与AndroidOS相比的变更 应用变化 Android Things中系统应用将不复存在,Content Provider也消失了,所以在开发应用时就不要通过Intent调用如下API了: CalendarContract ContactsContract DocumentsContract DownloadManager MediaStore Settings Telephony UserDictionary VoicemailContract 显示不再是必须 Android Things的应用与传统的应用开发一样,提供了相同的UI工具集来支持显示,在图形模式下窗口会以*真实*全屏的方式显示,没有状态栏和导航栏,即便你从底部滑动也不会出现,整个屏幕完全交由用户操控。 当然了,Android Things的显示屏并不是必须的。在一个无屏的设备上App的activities还是主组件,framework依然会分发输入事件到获得焦点的前台activity上。应用不能通过其他应用的组件(比如service)来接收键盘事件或者移动事件。 主Activity支持 Android Things自动运行一个App在manifest中定义的”home activity”作为系统启动后入口,这个activity必须包含一个由CATEGORY_DEFAULT和IOT_LAUNCHER组成的intent-filter。 为了方便开发,这个activity还需要包含一个CATEGORY_LAUNCHER的intent-filter,这样Android Studio才能在发布和调试时作为默认activity来启动。 <application android:label="@string/app_name"> <activity android:name=".HomeActivity"> <!-- Launch activity as default from Android Studio --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <!-- Launch activity automatically on boot --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.IOT_LAUNCHER"/> <category android:name="android.

Feb 3, 2017 - Comments - tech internet hot

Android 物联网初探

Android OS作为现今智能手机操作系统的老大,对智能设备的流行起到重要作用,从手机、平板到TV、手表、汽车等等,无处不在,无所不包,已然是现实意义的便携式设备OS的代表,虽然不同的设备厂商各怀鬼胎、高度定制,但不可否认Android OS确实推动了产业的迅速发展。随着智能设备的微型化和物联网的发展,Android团队也为我们带来了在物联网领域的又一力作-Android Things。与Android Wear、Android Auto一样,Android Things同样承袭了不开源的路子,预计后续开源的可能性也比较低。 Google在物联网领域主要有两方面:Android Things、Weave。 Android Things(原名为“Brillo”)是基于Android OS面向终端设备的一套定制化OS,旨在为了解决异构SoC物联网设备、不同传感器的数据处理等提出的一套解决方案,开发者只需要关注上层应用级别的数据传输和处理,同时还支持自定义传感器等元件的驱动。 Weave主要解决物联网对于后端数据传输和设备交互的需求,通过Google 的基础设施来采集、传输、交换、分析物联网的海量数据,同时联合其他厂商定义了一系列操纵设备指令使得设备可以通过Google Assistant这样的语音交互助手来完成对物联网设备的操控。 Android Things基于Android OS,在软件架构上没有太大的改动。 _Linux Kernel_、_HAL_、_Native C/C++ Libraries_、_API Framework_沿袭了原有的架构和代码。在Framework同一层级上增加了Google Services(Google Mobile Services),这一模块是Google对Android设备提供完整移动服务的核心,在国内的Android手机上由于不可抗拒的原因无法提供服务,如果有幸能够买到Nexus、Pixel系列的手机,其实这些手机ROM的软件架构于此基本一致。除此之外还包含有一套IoT设备专有的支持库,它扩展了Android核心Framework API,以此来支持更多的传感器或者其他手机上不存在的硬件设备。 与手机平板相比,在App层面上有一个重大的区别,那就是Android Things的单应用运行模式。这意味着IoT设备在开机启动后第一个运行的应用就是当前开发的应用,即刻提供服务,像手机的电话、通讯录、日历、相机、Launcher等系统应用在此平台下都不再存在,这对开发者来说可能是一大变化。 Android Things提供了对于物联网设备无差异的支持,但对于不同设备制造商、不同类型的传感器的数据传输、交换还是存在着巨大的鸿沟,这就是Weave存在的意义。Weave被定义为一个物联网的通信平台。不同OEM生产的物联网设备嵌入Weave SDK,然后通过Google Cloud基础设施与Weave服务器之间进行数据交换和收集。Weave联合一部分厂商定义了许多设备可操纵参数,比如灯的开关亮度、插座的开关、空调通风量等等,同时约束了一系列的设备注册流程和安全协议,通过这一系列的操作,可以让OEM厂商只需要关注设备本身以及提供的特定服务而无需关注设备与服务器之间的交互和数据传输。说到底这是一套完整的物联网数据交换解决方案,Google的野心也并非仅此而已,Google Cloud的基础设施,人机交互的指令定义,Google Assistant的原生支持,通道与终端的完整控制使得Google不再像Android OS一样脱缰狂奔,而是牢牢把握在自己手中。 Weave虽好,OEM厂商对此的支持又如何?这还是一个疑问,当前的SDK只支持Linux、高通、Marvell的特定芯片,同样的疑问还有,无法访问Google Services的中国用户怎么办?联想到之前推出的Android Wear中国版,或许是一个选择。

Jan 27, 2017 - Comments - hot

走走停停-致2016

快速浏览了一下过去三年的年终总结,没有红黑榜,不是年终奖,但工作顺利、父母健在、孩子欢乐生长、一切安康,这就是对自己一年生活最好的总结。 年龄就像树的年轮一样,指发之间只有自己无法看到年轮的痕迹,久别重逢的故人却一眼道出你脸上的青春和沧桑。回到老家大家都问:北京怎么样?工作累不累?压力大不大?要在北京定居吗?然后你的统一回复就是:北京冬天的雾霾确实很严重。话不对题,题不对味,索然无趣。你或许羡慕低头不见抬头见的是天安门,或许悲悯拥堵致死的地铁线,哪个更真实?我知道你不知道,你也不想知道,这些只是了然无味的谈资罢了。每天无数人走过一个个的街角,踏过一个个门槛,穿过一趟趟的地下铁,你喜欢用智能手机计步,他喜欢Apple Watch聊天。 无论答案是怎么样,对面的人都不可能得到一个满意的答案,因为我不是你,你也不是我,这就是鲜活的个体。 最好的时代也是最坏的时代,好在WiFi无处不在,坏在各种奇葩理性的存在。偶尔的断网手机欠费可能会让你浑身难受,两手局促地不知道放在身体的哪个部位合适,所以高管的肖像照都是双手交叉放于胸前,因为他们没带手机,哈哈。不幸在年前的这几天里宽带到期,每天晚上回家都需要面对没有网的生活,虽然手机还有4G网络可用,但刻意体验了一下没有网的日子,电视不需要,手机不需要,你以为你丢了个世界的热点、刷新的朋友圈,亲朋好友的联系,其实一切都在,一切都在运转,最亲密的人依然能够电话联络,一顿热饭不需要WiFi来烘培,一杯热水只需要水壶来烧开。我喜欢你静静的装逼走天涯,你喜欢他静静的看我。 之前和我在一个病房的老大哥,河北人,两个儿子一个闺女再加上自己老婆,四个人每天轮流照看,等到探看时间一到,大包小包的一下就都进来了;而我这边,老爸年龄大了耳朵沉,很多事情也搞不明白索性就没让他到医院里值班看着,这样就剩下了妹子和姐夫两个人。在农村人眼里,有人就有家,养活一个人就是一口饭;但生活在城市就截然不同,对一个孩子,一个个体的负责,不仅仅是一口饭,我们已经度过了兵荒马乱的年代,个体还需要接受教育、抵抗疾病意外、获取精神满足。在健康面前,我们习惯肆意放纵,做不完的工作可以拼命加班,吵架了过不下去可以离婚分家,活不过了可以杀人放火;哪一天当你猝然处于弥留之际时,你思考的是情、爱、自我,父母、妻子、儿女、当下的你,短暂未来的你;你再也不需要等价交换,钱也便没了意义,上帝只是等待收回它的最后一丝自然价值;你再也不能拼命工作了,因为你生命动能已然无存。如果你幸运最后呆在医院,全身插着各种管子、各种监测仪器,全身没有知觉,你只能看看白色的屋顶,外部的声音传入你的耳朵却无法带去震动的电信号,你唯一能做的就是不自主的眨一眨眼睛,有人说打喷嚏是唯一一个不自主可控的生理现象,但此时你连打一个喷嚏的能量都供给不上,或许喷嚏也是放弃了,时不时的周边围着一群表情严肃的白大褂,话语简短急促,你想对着口型思考他们到底说了什么,但却跟不上那语速,也就作罢。每天一个小时的时间,父母围簇、妻儿靠前、朋友襟坐,你还是只能眨眼,此刻你的眼神就是对他们最大的慰藉,因为你其他的都不会。很幸运,上帝怜悯了你一次,请你珍惜所有的渴求和梦想,遵从自然默默地活下去,爱着所有的人,与你与它,这个世界才算是美好。哪怕是意外,都是所有事情偶然的汇聚,有些事不会留下总结的机会,那你就寻着它去吧,爱过,喜怒哀乐过,这世界走过一遭,默默祈祷~ 年终回顾自己的一年,工作时间虽占大半,想写却写不出来,反倒是自己业余的东西略有声色,不免有些伤感。蓄势,定信心,祝未来更好~ 妹子虽记得我的生日,但每次还是要问我到底要过哪一个?农历一个、身份证一个、正确的公历一个,私下想,三个都过甚好,哈哈哈,最后也只能招得白眼。今年的生日在高铁上度过,做了目前最大的一笔财务投资,从3月份默默地看,再到5月份的疯涨,到8月份的无望,到年底的仰视,无奈和无助写在脸上是一定的。无奈财力有限,只能在有限范围内作出选择,这就是抓得住的幸福与稳定,当下的稳定和未来的期待一个都不能少。 2016,跌宕起伏,坎坷与幸福并存,本想着会很顺利的写下来,结果是一场难产的旅行,从元旦动笔一直写到农历年的最后一天,这恰似不能说的秘密,啊哟,不错哟~ 2017,爱与祈祷~星星点点的注脚,点缀成繁花似锦、起起伏伏的Timeline~

Dec 28, 2016 - Comments - tech dev internet

Java WEB系统微服务化迁移

支撑互联网公司运行的庞大后端服务系统经历了原始的BS架构设计、前后端分离、模块化组件、系统分层设计的进化,从计算资源的虚拟化到今天容器技术的应用,互联网一直在朝着资源高效配置、分布式集群服务的方向进发。 Docker作为当下最流行的容器化技术,相比于运行在实体物理机上的虚拟机技术,它具有轻量级资源隔离、快速部署、持续交付、版本控制、 可移植、开放技术等特点。 如果采用虚拟机技术去部署一套系统,需要几个步骤: 分配物理资源(CPU\内存\网络) 开机启动运行 安装系统运行时支撑环境(模版) 发布生产系统 上线。 采用Docker需要如下几个步骤: 拉取Docker Image 发布生产系统 上线 相比来看可能就会发现,Docker相当于把最繁琐最耗时的工作帮助我们解决了。Docker运行在(特定)操作系统之上,只需要一条命令即刻启动;通过Docker Image将运行时配置、依赖管理、版本管理集成一个Dockerfile描述文件中标准化,快速解决原始虚拟机技术中的1、2、3步骤。如果再搭配Google出品的Kubernetes容器管理工具更加得心应手。 与Docker并行出现一个架构模式-微服务,它并不是一种全新的架构体系,更确切的说是一种架构的思考。在经历了模块化、组件化、服务化之后,系统的架构设计实现复杂、服务调用关联度高等问题困扰着一个系统的稳定性和开发难度。微服务是在原有的服务治理的基础上,将原有系统服务的粒度进行再切分使得服务之间的耦合性降至最低,同时不依赖于过多的外部运行时环境,对外暴露的输入输出可能只是一个JSON、XML数据集,可以实现大规模的快速部署运行。这些特点与Docker的容器化优势不谋而合,这也是当前微服务实践采用比较多的一种方式。 Spring Boot在微服务概念出现之前已经发布了有一段时间,但并没有大行其道,大家对于Java Web的项目更倾向于原有Servlet Container Server的部署模式。随着微服务的出现,Spring Boot再次引起了大家的注意,同时Spring在被收购后也在朝着云服务商的方向上进发,推出了自己的云服务平台。 相比一切全新的服务系统,遗留的Java WEB系统如何进行更好的迁移使用微服务,是需要考虑的一大问题。当前的项目中框架采用了Freemarker+Spring+Hibernate的方式,Spring的配置是原有的XML配置方式,与Spring-Boot推荐的注解配置相比,迁移难度较大。 Spring-Boot使用注解配置剥离了XML的配置方式,使用内嵌式Servlet Container(Jetty\Tomcat\Undertow)来实现服务的HTTP通信、监控、交互。与此相对照,能否维持XML配置不变,仅使用内嵌Servlet Container来提供服务呢?答案是:可以。 采用Tomcat Embed作为默认的Servlet Container,通过Tomcat Bootstrap中Host、Port配置来实现HTTP服务,指定WEB路径的方式来提供Spring XML配置部分和其他WEB资源,这样就基本实现了原有Java WEB系统的服务化迁移。 在迁移测试过程中,也遇到了几个坑。 1、Gradle编译工具对JAR包的支持度不够完善,需要额外的插件来实现Eclipse FatJar的功能。 apply plugin: "com.github.johnrengelman.shadow" 2、如果自定义Jar合并时,一定要注意Spring Schema文件的合并。在不使用插件的情况下,会导致spring schema XSD文件的丢失。需要在插件支持下通过tramformer来合并。 mergeServiceFiles('META-INF/spring.*') 如果单独使用Maven来打包之需要通过修改POM文件来实现。 相关资料 Docker Spring-Boot Gradle FatJar Plugin Tomcat Embed

Dec 19, 2016 - Comments - tech hot

全景图片格式

近期工作中学习了一些VR相关的技术点和相关资料,记录一下。 本文翻译自panotools.org,介绍了全景图片的几种格式。 原文链接 全景有一个宽泛的定义:将整幅地图或者部分的3D场景投影到一个2维度的屏幕或者输出上。不同的投影主要包括如下几种格式: 全球面格式 等间距 立方体 “小星球” 部分球面格式 圆柱体 弧形 直线 部分球体 全球面全景格式 主要包括两种球面格式:等间距、立方体,这两种格式都能够水平360度、上下90度环绕的显示完整的视界。特定的浏览工具能够看特定的全景。 等间距 等间距格式使用广泛,比如PTViewer、SPi-V。它由单张横纵比2:1(注意:宽度必须是高度的2倍)的图片组成。 立方体 立方体格式是由环绕在我们周围的6个面来显示完整的视界。图片可以无缝被映射到立方面上。 广泛使用立方体格式是QuickTime VR,它将6个立方面压缩为一张JPG图片,在文件头信息中标识如何全景显示。另外一个例子是SPi-V,它将6个立方面放在一个单行或者单列中。SPi-V是将所有的立方面放置在一个横纵比为6:1的图片中。 “小星球” 这不是一种常用的格式,它映射的全景看起来像在地面上看远处的小星球。 部分全景格式 部分球面的显示有很多种情况-这是因为它会在一个方向或者其他方向并不显示完整的视界。部分球面在短边上不能覆盖120度角(这意味着它们可以在一个方向上覆盖360度,但在其他方向上必须小于120度)的视界时可以直接显示。主要的格式有圆柱体、直线,部分球面全景也算是。 圆柱体 圆柱体全景能够显示水平方向的一圈或者一部分,它在水平全景中非常流行,如果是用于建筑物上,水平线(地平线除外)的弯曲问题可能比较麻烦。 弧形 它是圆柱体投影在某个部分的一种特殊情况。 直线 直线全景显示物体就像一个普通镜头(非鱼眼)。水平和垂直的视界都被限定在120度角范围内。直线一直保持直线,所以这个格式对建筑物非常友好。但是如果视界范围太广,有时就被无形的扭曲在角落里。 部分球面 部分球面的应用领域就像上文讲述的全球面一样。它们多用于切断顶点或者低点。在这种情况下,垂直角度的视界必须被限制在防止观看者误解原图像上。

Dec 2, 2016 - Comments - life book

我的七月与安生

每个人至少都有这么一个挚友,你们在人生的拐点相遇,惊叹于彼此的不同或者相似,有过不少平淡无奇却又值得纪念的时光,任白云苍狗,风云变化。说到底,这一路,我们都在寻找自己的影子。 1. 《七月与安生》上映的时候,拉着徐先森一起去看了,他的内心其实是拒绝的,认为无非是一部青春片、文艺小清新、闺蜜撕逼…但在我心里,有着不一样的情感,因为那里面藏着我青春的影子,鲜明而深刻。当然,更多的是关乎友情。电影中闺蜜喜欢上同一个男生,抑或是另一种隐晦的小众心思,大概就是艺术源于生活最庸俗而又巧妙的写照吧。 七月的漂亮乖巧,安生的桀骜不羁,仿佛不会产生交集的两个人,最后,却在相爱相杀中活成了对方。有人说,七月与安生本来就是一个人,七月羡慕安生的自由潇洒,安生羡慕七月的安稳静好。安生表面张狂,心里却住着一个柔软无比的七月;七月表面柔弱,心里却住着一个骄纵残忍的安生。 这不就是一个人身上的两面性吗?当然也是很安妮的路数,她的笔总是在极度美好与极度残酷之间不断变换,其间夹杂着惊喜与残忍,极致而又撕心裂肺。 2. “哎,你到哪儿了?我到你说的这个路口了…” “你再等会儿,我马上就到了…” 给了司机师傅钱后,我就坐在路边等着,望着应该是她要来的方向,心想,她会不会变成了我认不出的样子。算一算,应该是十年了。自从她高二转学,我高中毕业离开那个地方之后,也就没再见过几面了。 因为都不是善于主动联系的人,再加上在不同的城市,忙着各自找不到尽头的事情,她结婚,我没去。这次,应该是她生了孩子之后,我们的第一次见面,已经快6年了。终于,看到熟悉的身影。她骑着电动车,风风火火的赶过来,留了长发,扎了马尾,除了肚子上的一圈肉,样子还是没变。 虽是好久没联系,但见了面毫无生疏感,仿佛从未分开。亲密的人之间大概都是这样,那种亲近感是装不出来的,举手投足间的亲切感从一见面开始便会自然流露出来。我很高兴,也很庆幸有这么一个人,即使分开很久,也从未生疏。 “我们家很近,十多分钟就到了,孩子刚哄睡着,我就紧赶着过来了…”她飞快的说着,那神情,像极了高中时的样子,只是多了几分沧桑和忧伤。 “没关系,我也没等多久,想着你在忙孩子…”,我附和着。 3. 我是怎么也没想到,她这么早就结婚了,因为曾经一度担心她找不到一个娶她的人,如果像她高中时候的样子。 高中是在外地度过的,一个学期回家两次。那个时候,年龄小,再加上有校长亲戚无微不至的照顾,也不觉得离家远是一件伤心的事情。像从笼子中飞出的鸟儿,撒开了欢。甚至觉得人生简直开启了另外一面,没有父母的约束,多好。 至今还记得第一次见她时的场景,想来尴尬却又好笑。 那天是高中报道第一天,我一个人在宿舍坐着,还看着郭敬明的小说《悲伤逆流成河》,现在觉得年轻最单纯的一点就是,今天看来甚是狗血的校园故事,当时看,是真觉得悲伤,那种揪心的伤痛是真真切切的,曾一度泪如雨下,觉得自己不当演员可惜了点,泪点多低啊。 抬起头,看着一个男生模样的人往上铺放东西,心底一惊。这不是女生宿舍么?男生怎么进来了…那个阶段,对男生进女生宿舍这件事情,显然是震惊的。随后又想,大概是哪个同学的哥哥来给她送东西的吧。没在意,又继续沉浸在悲伤的情绪中。 但之后,发生了更匪夷所思的事儿,她就那么坐在另一张床上,并没有走。我抬起头,看着她,她笑着问我,你是那XX么?从芮城来的?我一脸懵圈的点着头,心想,你怎么还不走?直到她开始收拾她的东西,话越说越多之后,我瞬间明白了:她就是一名女生!她跟我住在一个宿舍。 这么一想,我开始时不时的偷瞄她,留着板寸头,穿着红加灰是夹克,牛仔裤,运动鞋,有点壮。这不就是男生的样子吗?顿时一种复杂的情绪涌上心间,大概是太年轻,见识太少,不太能理解,女生还有这副模样的,心生郁闷。但是也没想到,整个高中,我跟她却成了最好的朋友,或者说,是亲人。 4. “你随便坐吧,吃点水果吧,我给你倒点水…”,我放下东西,环顾了她的家,简单整洁,一切井然有序。便蹑手蹑脚走近了孩子的卧室,孩子还在熟睡中,眉宇间像极了她。墙上挂着她和老公的婚纱照,她看着很幸福,也散发着女人特有的妩媚与性感。 一个高中时进女生厕所都会被当成男生的人,留着板寸爱打篮球的人,包揽运动会三个项目冠军的人…我是怎么都没有想到她现在的样子与生活。或许这才是人生,一眼就能望到头的生活,该是多么无趣与失望。但其中经历的世事,又让人倍感艰辛。 聊天中,得知她的家庭发生了变故,父亲去世,母亲生病,大学毕业的她才按着母亲的心愿,早早的结了婚。聊聊几个字,仿佛可以概括这几年她所经历的悲欢离合,但其间的所有殇痛只有她一个人承受。所以,现在会时不时的责备自己,为什么没有主动去联系她?为什么在她痛苦需要安慰的时候没有去帮她分担?也许,她心底多少对我会有埋怨吧。 她说,当时所有的事情发生的太突然,不愿意打扰你,毕竟你还在学校,还要忙学业。而于我而言,整个高中,三年的时间,她的家人就好像是我的家人。 因为都是大大咧咧的性格,开心了就一起大声肆无忌惮的笑,悲伤了就一起默默的坐着,望着天空,等待着时间的流逝。高中开学后,我们很快成为了好朋友,形影不离,亲密无间。上下课,吃饭,去厕所,去澡堂…只要有她的地方,我都在。 由于她长得一副男孩子样,我们走在一起,曾被好多人认为是一对情侣。对于高中校园中,堂而皇之的在一起“秀恩爱”也是惊讶了不少人。这样的日子,即使多年后一个人想起来,还是忍不住偷偷的笑,那些阳光灿烂的日子啊。 周六周日,我也会跟她一起去她家,跟着她去她常去的地方玩儿,认识了很多人,经历了很多有趣的事儿。她的父母对我很好,姐姐也很喜欢我,甚至她都会吃醋。 所以,在看到《七月与安生》中,七月的父母对安生无微不至的关怀,我的眼泪始终没有忍住,七月的母亲把好吃的东西拿给安生,对安生的偏袒;她的母亲也曾这样,大个的水果,好吃的零食,总会留给我。所谓设身处地,大抵如此。 5. 孩子醒了,她抱着孩子,在房间里逗笑。脸上流露出一个年轻妈妈对孩子的所有爱,幸福而温馨。是不是反差太大,人就会开始思绪恍惚情绪泛滥? 总会想起她高中打篮球的样子,校运会她参加跑步我在旁边加油的时光,一起在她家做作业打闹的日子,跟着她们家人去爬山的情景…而现在,曾经大大咧咧、无忧无虑、风风火火的假小子在经历了亲人生死离别之后,在结婚生子之后,褪去所有的青涩之后,坦然接受了生活带给她的一切,过着波澜不惊的生活。 她曾说,“我有时候会看你发的照片,看你过的生活,虽然我没有出去过,但我觉得我也见识了外面的世界…”。听着她的话,心底五味杂陈,我哪里见过什么大的世面,无非是去了不同的城市,经历不同的风景。如果你没有经历家庭的变故,如果父母依然安康,依着你的性子,说不定你会走更远的路,遇见更多不一样的人,经历更多奇妙无比的风光,更加无拘无束的生活。 七月和安生在经历了生活的起起落落之后,互换人生,活成了对方的样子,但谁又能说现在的生活对你而言不是一种更好的安排呢? 每个人的心中都住着一个七月与安生,一直流浪漂泊的人渴望一个平静的归宿,一直过着安稳平淡生活的人想要自由不羁的生活。而生活永远不会戛然而止,每个人也正是在一点一滴的青涩心酸岁月中学会向生活妥协,向生命妥协。“三十岁之间是流浪,三十岁之后就是浪了”,是否也会养一只金毛,住在老旧的建筑屋里,从清晨到傍晚,过完余生? 所幸的是,或现世安稳,或颠沛流离,总有一个自己的影子陪伴自己,惊艳了时光,温暖了岁月。

Dec 1, 2016 - Comments - life book

山后-零壹

山后-零零 人都有这样的感觉,看着身边的孩子长大身边的老人变老,但自己却感觉不到岁岁年年的度过,刘全何尝不是这样,自己年轻的光景悄然逝去,再回首三十多年已是过去,略微富足的家底也像粮缸的玉米一样渐渐被换成了一袋袋的烟卷儿飘在空中。 晌午过后,当别家干活的男人女人们吃过午饭该午睡的时候,刘全打个哈欠,伸伸胳膊,从他那个专属墙角起身,该回家吃饭了,好似错峰去生产队大食堂一样的踱步走着,拱着的背儿像是六十岁的老头,偶尔还能看到他走路的时候使劲捶着腰间,大概是在地上坐着时间长了,落下了隐隐的病根。推开那个重重的木门,迎头过来的是一只大黄毛狗,猛的扑到刘全身上,嘴里流着哈喇子,它这是在为刘全又度过半天逍遥日子庆贺又或者是期待一顿狗食。刘全爹自从前几年下地干活时不小心摔到腰基本就是在家做些小零活,儿子在外边晒太阳逍遥,自己就不能太张扬了,索性他就搬个小马扎坐在院子里晒太阳,偶尔逗一下自己的大黄狗,也算是给自己找一乐子。人总是爱着面子,年轻的时候是干部,虽然老了,但是面子和场面还是要挂住的,当然挂住的还要自己儿子的婚事。到现在或许他还觉得自己儿子虽然年龄大了点,但还是能够找到一个不太差的媳妇,就是儿子不争气坏了他的算计,一想到这里,心中也是不免得傲气与失落。在农村俗话里,”人比人该死,货比货该扔“。这就是悖论,谁都是提醒着自己,要活得大度,活得洒脱,到最后来还是“人活一张脸,树活一张皮“。刘全爹也层想到给儿子找个一般的媳妇,可自己却又放不下架子,可他又曾考虑过自己儿子的想法。 真是应了刘全他娘早些年说的那句气话:你们爷俩就该打一辈子光棍!刘全他娘在他十几岁的时候就死了,撇下了他俩男人过着这不好不差的光景。 “刘全他爹,在家吗?”,王寡妇大摇大摆的进了刘全的家门。 刘全爹一看是村北的媒婆王寡妇,赶忙上去迎接, “他王婶儿,盼星星盼月亮你可是来了,屋里坐!屋里坐!”。 “刘全!快去给王婶儿泡壶茶,那个好茶叶在后屋柜子上面,拿出来。” 刘全他爹招呼着刘全端茶上烟。 刘全刚吃过午饭,无精打采地准备打个盹,结果还要笑脸迎客,一副了然无味的样子,他自己心里也清楚,又是过来谈相亲的。虽说关乎自己的大事,但经历了一次次的碰撞和无果也让他对未来的媳妇慢慢消磨了念想。 “刘全爹,你既然委托了我,咱又是远房的亲戚,这事怎么着也不能太差了对吧,这姑娘虽然相貌平平,但操持家务是没得说,你就放心吧,只要你和刘全没意见,咱就安排着见一面,毕竟还是个眼缘嘛!”,王寡妇一脸笑意,捧着刘全爹说着。刘全爹当然是满心的欢喜,连忙点头叫好约了个时间相亲,只留下刘全坐在靠墙的门口一声不吭。

Oct 30, 2016 - Comments - tech dev

Android TextInputLayout升级后的坑

Google自从推出全平台的Material Design的设计风格以来,各位大神都贡献了很多符合这一风格的custom组件,直到Android官方的design支持库推出,大家对Material的追捧简直是蜂拥而上。 之前有用过其他自定义的EditText,但是design的TextInputEditText更好的支持了Error、Hint和Material风格,遂用上。 代码如下: <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"> <android.support.design.widget.TextInputEditText android:id="@+id/code" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/code" android:inputType="text" android:textSize="14sp" /> </android.support.design.widget.TextInputLayout> TextInputLayout在使用时默认visibility=gone,运行时根据逻辑置为visible或者gone,当在Java代码中操作时是通过id=code的TextInputEditText来操作(getParent())父组件TextInputLayout的。 在design support version=25.0.0之前,一切都正常,setVisibility都能正常操纵父组件,但升级之后一切失效了,WHAT!?WHY!?。 通过DEBUG才发现,TextInputLayput做出了更改,添加对密码显示隐藏的支持,在Java代码中又增加了一层FrameLayout导致通过getParent()获取到的并不是TextInputLayput组件。 最新TextInputLayout的源代码更改,移步。 问题还是归因于正确(非怪异???)的使用组件~