❗️你有0条未读消息

4/53,每周一篇博,坚持!

0. 楔子

周末随老婆一起参加了她外公的葬礼,我这个人比较多愁善感,触景生情,由人及己,不免一阵唏嘘。现在自己也到了上有老下有小的年纪,未来二三十年将是我们要面对身边长辈陆续告别我们的时候,如何解决老人养老的问题让老人有个良好的晚年生活其实不光是我们要面对的问题,这已经是个社会问题。

1. 空巢问题

情绪是复杂的,问题是现实的,按照现如今社会发展的现状:老龄化加剧、传统家庭结构解体、城镇化的发展、独生子女…不单单是我们要考虑父辈的养老问题,等到我们老了的时候我们自己的养老也会成为一个棘手的问题。

中国是个有”孝”文化传统的国家,在过去”养儿防老”,老了跟子女住一起由子女赡养让这一问题不那么显著。随着社会的发展,”养儿防老”被认为是封建腐朽思想了,城镇化让子女都离开身边独立发展了,年轻人都喜欢独立空间不喜欢和父母一起住,即使有愿意的也有层层原因限制: 不谈传统文化在年轻一代身上印记不明显,夫妻观念是否一致,单单独生子女需要赡养四个老人的经济压力就足够喝一壶了,有意愿的也没条件。年轻人自己要生活要奋斗,于是乎,老人们在散发了自己的光和热后就被”空巢”了。助推这一现象加剧的除了城镇化之外,计划生育政策导致的独生子女问题也在政策施行几十年后即将迎来可见的影响。

在这样的社会现状下,可以预想大多数人的晚年生活都将不会多么的有质量,有尊严。当子女远离自己,老两口只能相依为命,一方面是情感上的缺失,另一方面是无人照顾的困局。年岁日增后总有老而无力的时候,到时候生活自理都将成问题。请保姆照顾算是一个途径,然而请保姆这行当算是一个以钱财换良心的行当,谁也不能保证老人付出不菲的金钱后换来的不是保姆关起门来作威作福。敬老院则是另一个大多数人生最后的归宿,相比起私人请来的保姆,相对会更可靠些。那些经济不允许的可能就只能自求多福,难保不会被逼入绝境想不开。想来令人心酸。

2. 如何应对?

虽然现在年轻一代传统孝感有所淡漠,但面对实实在在的城镇化进程以及独生子女带来的家庭结构问题,每个人自己的生存都很不容易,实在是不能在道德层面对不能尽孝的人做过多责备,试图让一对年轻人承担起抚养子女,双方父母甚至祖父母的责任,实在是不太现实。

虽然我们这一辈不得不面对大多数老人晚年无法享受子孙绕膝,不得不接受大部分时候情感缺失的现状,但是否能在既有问题下提高老人们的晚年生活质量呢?

欧美等发达国家的养老体系主要是社区型福利机构,类似于养老院,以老养老,老人们群居不至于无人照顾或者感觉孤独。

但中国国情不同,大部分的老人还是不愿意住养老院的,一方面住养老院需要一定的经济条件,另一方面养老院不是家,人之暮年对亲情的渴望是不以人的意志为转移的,住养老院有一种被家人抛弃的感觉。作为子女,一方面是要尽量多赚钱,给赡养父母提供经济上的支持,另一方面也要给老人正面的引导。这个社会问题,更需要国家政策健全养老体系制度来解决。希望以后能越来越好吧,也希望我们80后是历史上唯一的一批独生子女。

这个问题我真的不愿多想,但也不得不想…

3/53,每周一篇博,坚持!

在实际工作的开发过程中,我们经常会遇到一些场景需要分析手机访问时的代码问题。这时候我们可以用Chrome提供的模拟手机功能,但有时候是无法模拟的,如请求涉及到了手机定位,这种情形我们只能使用手机端来请求才能获取到实际的请求参数。这时候一般我们都会动用抓包工具来将手机访问的请求代理到电脑上来。

抓包工具有很多,Charles就是一款非常好用的抓包工具。本篇博文里就针对使用Charles来抓取手机端访问请求做一番简介。

安装

Charles的安装非常简单,可以直接访问Charles的官网下载页面,选择合适自己操作系统的版本即可。Charles是收费软件,可以免费试用30天。试用期过后未付费用户仍然可以继续使用,但是每次使用超过30分钟后会需要关闭重启。这种引导付费的方案对大部分人来说还是非常友好的,即使你长期不付费也能使用完整的软件功能,30分钟的使用时长也应该能满足大部分人的使用需求了。
如果你出于各种原因,坚持要使用无任何”瑕疵”的版本,你可以选择付费,也可以自行搜索破解补丁。

阅读全文 »

已读



作为一个Java经验不太丰富的Javaer,这本书给我的提点还是不少的。就是花了比较长的时间断续看完的,很难说收获有多深刻,许多点还是看完忘记了,需要多看几遍。



还不错,内容比较详细,让我这个装修小白多少入了点门了。



非常赞非常实用的一本SQL书,实乃程序员之居家旅行必备。看完数据库编程基本没啥大问题了。



很不错的哲学入门书,以后我会推荐给我儿子在十几岁的时候看。写作也很有趣味,写了一个类似《盗梦空间》的书中书。哲学思辨也很有启发,但即便我们都是“缸中之脑”又能如何呢?现实生活中有这么多的问题需要去解决,追寻人生的意义什么的只能在偶尔的闲暇中去发问一下。也许我们穷其一生也不能活明白,也许人生哪有什么意义,只不过都是一个基因传承的载体罢了。



系统性学习Spring的第一本书,前面Spring核心基础原理部分讲的感觉有收获。后面关于各个Spring中间件的讲述感觉就一般了比较杂比较细节偏操作层面,且脱离实际生产实际,一般中间件实际使用的跟书中不太一致。



偏实操,比较粗略的过了一遍。



“每个时代都有一个转折点,都有一种新的认识和评判世界秩序的方法。我们这一代人也在惊讶我们自己的新宇宙观——我们认识世界秩序的新方法,实际上也在实现我们自己的价值,把我们搭成人类的阶梯,通向遥远的星辰。”
基本每年一本科普读物,最远到量子力学,弦理论的大名早听说过,这次终于涉及到了,给我的震撼不亚于高三那年看到”熵”时的冲击。正如相对论是为了调和经典牛顿力学在宏观高速情形下的冲突,量子力学是为了调和牛顿力学在微观尺度下的冲突一样,弦理论是为了调和相对论和量子力学间的冲突,试图找到一个包罗万象能解释世间一切的理论,而这个理论再次颠覆了我们对世界基本构成的认识:宇宙万物的基本构成是一根根震动的”琴弦”。在弦理论的世界里,世界不是无限分割的,弦理论的对偶性告诉我们,最小只能到普朗克长度的尺度,往下和往上是某种形式的镜像对称:h尺度和1/h尺度的世界是对称的,因而不存在量子涨落,宇宙爆炸前也不是一个点而是一个普朗克尺度的火球。而弦理论进一步加强了相对论时空不可分的认识,一切的性质都是时空组成的影响结果。弦理论的世界里,宇宙是11维的,1个时间维,10个空间维里只有3个是展开的,7个其余维度是蜷缩的。弦可以束缚住空间,弦理论的深刻和反直觉远超过了量子力学和相对论,但如果你跟随它的思想路径逐步去深入你不得不叹服这是一群如何天才的人才能发现如此深刻的宇宙奥秘。虽然现在还不得而知弦理论是真正正确的大一统宇宙真理还是只能自圆其说的纸面学说,期待有实验数据验证弦论的那么一天。



系统了解一下Maven的工具书,写的还挺详细的。跟作者一起踢过球,挺逗的一人。



很好的一本书,从原始人类到现在的万物之长到未来有可能智人被替代,尤瓦尔为我们描述了整个人类的发展历程 。他的观点独特而具有启发,他认为智人之所以能成为万物之长,语言及“说故事”的能力起了决定性的作用,只有智人可以通过语言组织一些虚构的事物将成千上万的人类凝聚起来。
而人类历史的发展,方向也许是偶然的,但却是不可逆转的。农业革命就是个“陷阱”,虽然农业革命 让人类能获得更稳定的食物来源,但也将人类固定在了一个地方,同时也带来了人口的爆炸,需要付出更多艰辛的劳动来满足食物的需求。农业革命没有让人类过上更悠闲的生活,反而让他们比采集者祖先们过着更“悲惨”的生活。但人类已经无法再回到采集者的生活模式了。
而科技的发展是一把双刃剑,给人类生活带来便捷的同时,也暗藏着“智人末日”的种子,当科技发展到基因工程可以改变人类,人工智能可以替代人类工作的时候,当生化人类诞生的时候。。。可以想见,这些趋势随着科技的发展是不可遏制的,即使知道存在这种可能性,人类也无法扭转了。

2/53,每周一篇博,坚持!

Maven仓库类型

Maven有几种不同的仓库类型:

  1. 中央仓库,中央仓库是由Maven官方提供维护的资源仓库
  2. 私有仓库,一般私有仓库由企业自己维护,不对外开放,和中央仓库一起可以称之为远程仓库。
  3. 本地仓库,本地仓库顾名思义就是开发者自己本机所处的仓库环境,通常是自己打包的jar包目录。
    配置的方式是修改maven配置文件的”repositories”部分。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!--中央仓库默认为http://repo1.maven.org/maven2-->
    <!--nexus私服设置-->
    <repositories>
    <repository>
    <id>central</id>
    <url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
    </repository>
    </repositories>
    <!--本地仓库-->
    <!--默认仓库默认是在${user.home}/.m2/repository下-->
    <localRepository>/path/to/local/repo</localRepository>
阅读全文 »

一个短暂的春节过去了,短短的七天假期有一多半的时间是在开车,属于自己的时间满打满算也就一个双休日吧。明天又要开工了,新的一年新的一轮奋斗又要开始了,像这种传承了几千年的节日怎么着也得放个半个月吧,谁说不是呢?

本来是一篇2017年终总结,硬是从元旦拖到春节再从春节拖到春节结束,现在真真的是离笔太久,提笔恐惧啊。简单说几句算是对去年的一个交代也给新年做点期许吧。

现在时间流逝太快,转眼我儿子都已经满地跑,而我也已经年过三十。那个在宿舍憋着写《水样年华》的日子仿佛还历历在目。时间催促着我成长,而我成长的速度远远赶不上时间。有一个理论说,年少时记忆的东西少,每一年的经历都是崭新的,而年岁越大经历的重复的东西也越多,于是乎可供大脑记忆的东西越少越觉得时间过得快。想想有些道理,于是偶尔抽身世外,读读书神游太虚便是件快乐的事,否则无时无刻都在感受时光洪流冲刷着身体,眼睁睁看着他衰朽是件多么可怕的事。

诶,提笔就爱瞎矫情的毛病又犯了,这老气横秋的气质与我本人不符啊,哈哈~说了些废话的感慨,先总结下年度阅读吧。

阅读全文 »

背景

我在项目中使用阿里云OSS存储文件,导出时导出为csv格式的文件。然而打开时总是存在中文乱码。
通过网上的一番搜索,大抵是使用记事本先打开csv文件,然后再保存为ANSI格式,然后再用excel打开时就不存在乱码了。但这不是程序里的解决方式,我们不可能提供一个半成品的导出文件供用户使用。经过一番网上搜寻,发现问题的根源在于UTF8的BOM信息头。
本来UTF8是不需要BOM头的,这就不得不说到微软的可恶了。

BOM简介

BOM中文译作”字节顺序标记”,UTF8本不需要BOM来表明字节顺序,但WINDOWS用BOM来标记文件文件的编码方式。BOM的UTF8编码是”EF BB BF”,所以如果接收者收到以”EF BB BF”开头的字节流,就知道这是UTF8编码了。WINDOWS系软件保存的UTF8编码的文件需要文件的开头保有这个BOM字符。

问题解决

项目中使用OSS存储文件,存储成功后返回一个签名过的文件url地址,前端再根据这个url去请求获取文件。由于前端是直接使用”window.open(url)”的方式,直接新开窗口访问链接,下载下来的文件默认是UTF8编码的,因此使用excel打开时需要BOM字符来表明是UTF8编码,否则其中的中文则会产生乱码。

因此,在OSS存储时,我们就需要额外添加BOM头一并存储。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
OSSClient client = new OSSClient(ossHelper.getEndPoint(), ossHelper.getAccessKeyId(),
ossHelper.getAccessKeySecret());
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("application/vnd.ms-excel");
objectMetadata.setContentEncoding("UTF-8");
objectMetadata.setContentDisposition("attachment; filename=" + fileName + ".csv");

// 增加BOM头信息
String bom = new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });

try {
// 以同样的编码获取字节流
client.putObject(ossHelper.getBucketName(), fileName,
new ByteArrayInputStream((bom + exportFileString).getBytes("UTF-8")), objectMetadata);
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}

最近在看《Java编程思想》,记录一些觉得有必要整理的内容。本篇就简要分析一下Java并发编程中遇到的volatile关键字。

并发编程中,我们通常会遇到以下三个概念:原子性可视性以及有序性
volatile关键词正式对应可视性这个概念。

可视性是指,当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值。即便使用了本地缓存,volatile修饰的域也会立即被写入到主存中,而读取操作就是发生在主存中。
而相应地,非volatile域上的原子操作不必刷新到主存中去,因此其他读取该域的任务也不必看到这个新值。

然而,要区分原子性和可视性是不同的概念。volatile关键字能保证可视性但并不能保证操作的原子性。如果一个域的值依赖于它之前的值,例如递增一个计数器,或者某个域的值收到其他域的值的限制,例如Range类的lower和upper边界就必须遵循lower<=upper的限制,那么只用volatie修饰是不起作用的。保持原子性或说同步,第一选择应该是使用synchronized关键字,同步也会导致向主存中刷新,因此synchronized防护的方法或语句块内的域就不必使用volatile修饰了。

阅读全文 »

背景

本篇博文分享下使用树莓派结合百度语音合成API进行当前时间和天气自动播报功能的实现。转载请注明出处。

阅读本文需要你有一定的Linux编码水平(主要是Bash)及一些python基础。
这个项目的想法初衷是希望树莓派能够定时地将一些信息通过蓝牙播放设备自动播放出来,初期先播放时间和天气,能够代替一个闹钟了呢,哈哈~~

方案设计

方案很简单,设置定时任务,将运行时时间获取到,并同时获取当前天气状况,然后使用百度语音合成API将获取到的信息转换成语音通过蓝牙连接的播放设备播放出来。

获取天气也使用了百度开放平台提供的接口,因此一共需要有百度开放平台和语音合成API两个接口的调用权限。

开放平台注册
语音合成API注册

获取天气

我们先来获取天气信息,API的返回结果结构如下:

我舍弃了穿衣指数什么的,只获取天气数据。

阅读全文 »

背景

阅读本文需要你有一定的Linux编码水平,至少能够读懂Bash,对于一个树莓派玩家来说这都不是事儿了吧。

树莓派使用Micro SD卡来作为系统存储,而SD卡又很容易坏,当我们辛苦配置好的树莓派工作环境因为SD卡挂掉,重装时各种配置又要来一趟真的很奔溃,关键还不记得当初一个个都配置了啥了。。

我最近在配置树莓派时就遇到了类似的问题,因为挂载移动硬盘出了点差错(下文会说),导致系统启动失败,以为是系统被我折腾坏了,格了好几遍SD卡重装,每次都要把软件、配置都重来一遍,于是索性将第一次开机后必做的几件事写成了初始化脚本传到github了,重装后直接下下来执行下就解决了。方便多了,再也不怕重装系统。

顺便记录下导致我写这个自动化初始化树莓派脚本的最初问题。

问题

一开始我的树莓派是没有显示器的,都是使用VNC远程连接。最近在配置了不知道哪个东西后,树莓派就连不上了,反复重装过几次,经过一番配置之后重启后必然又连不上。后来搞了跟显示器的连接线,启动后发现树莓派进入了”emergency mode“,网上查了下,解决方案对我都不适用,最后我才发现,原来是我在设置自动挂载移动硬盘的时候出错,导致系统启动失败。我的硬盘是NTFS格式的,而树莓派不能直接挂载ntfs格式,需要先安装一个ntfs-3g工具。由于重装过系统,忘记了安装这个,直接将挂载命令写入了fstab文件而又没有验证是否能够挂载成功(毕竟挂载过太多次了,想当然以为没问题了)。

阅读全文 »

alert(28443422041709109)会输出什么?

背景

上一篇博文里我记录了一个诡异的前后端数据不一致的问题,最终定位为前端js精度丢失。但只说了原因及结论并没有深入研究这个问题。
这一篇博文准备在此基础上,深入探寻一番,彻底弄清楚这个问题发生的本质。

引子

让我们先来看几个小问题热热身:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## js环境下运行,输出结果是什么?
1. console.log(1 === 1.0);

2. console.log(0.1 + 0.2 === 0.3);

3. console.log(9007199254740992);

4. console.log(9007199254740992 + 1);

5. console.log(9007199254740992 + 2);

6. console.log(9007199254740992 + 3);

7. console.log(9007199254740992 + 4);
... ...

浏览器环境下运行下看看是不是有点颠覆了三观?

阅读全文 »