漫谈博客这东西——漫谈系列

日常知识总结及记录,本次关于由搜索区块链这一关键词引发的关于“为什么要记博客”这一问题的思考 比特币 区块链 博客 微博 比特币&区块链 昨天看了今年的云栖峰会,再次听到了今年听到最多的“区块链”技术,于是今天闲暇之余,想了解一下这个区块链究竟是个什么东西。看了半天,并没有像某些编程技术一样,能够快速理解大概意思,反倒是产生了更多的陌生词汇,比如拜占庭将军问题,不过一个熟悉的字眼“比特币”倒是快速映入眼帘,原来区块链技术是和比特币原理紧密联系在一起的。 博客&微博 于是就想着,为了理解这种概念东西,就记篇博客以助理解吧,但看着看着,觉得不懂的概念越来越多,而且查到的资料感觉讲的都很详细,感觉自己写不出更加合理的解释。于是就想到,为什么要记博客这个东西。 为什么要记博客呢,可能每个人的答案都不一样。我这个人在探究“为什么”之前,都喜欢搞清楚“是什么”,那么博客是什么呢(以下内容为个人理解),博客这个词是音译 blog 而来,那么 blog 又是什么呢,我们都知道,很多时候,我们都需要对所发生的一切事情有个记录,叫做日志(log),而程序世界这个东西更广为人知,计算机程序的每个行为如果有日志的记录,在发生异常情况或者我们需要观测系统运行情况的时候才有据可循。 其实博客这个东西最初就是一种网络日志(web log),用来在 web 里记录一些东西而已,让日志这个东西不止停留于程序后台的日志服务器里,而成为像在线笔记本/日记本一样的东西,可以方便人们随时随地把自己想记录下来的东西放到 web 这个大世界里。 后来由此衍生出微博(micro blog)这个东西,但我觉得微博并不是一种“微型博客”,所谓字数受限,内容短小简洁的博客,因为它本身的定位和运营使其完全脱离于博客而成为一种新兴的事务,我个人觉得它如今已然成为一种社交媒介。因为你想想,微博可以看作一种一定字数的网络日志吗?不止于此!如今微博的内容可谓百花齐放,可以是广告平台,可以是资源分享,抑或是明星的粉丝们关注明星日常生活点滴的一个统一途径。 尾声 最后,回归本文,我为什么要记博客,其实我是本着博客最原始的功用——网络日志这个功能。因为我希望把我对于所读所想的东西做一个记录,以加深我对于知识的理解。因为书写博客的过程本身也是对于某些事物理解的一个梳理。 我把人的大脑比作计算机的 CPU,而理解能力和表达能力分别相当于计算机的 I/O 设备(Input 输入、Output 输入),人类向外界展现其内部思考的媒介依赖于这两者。比如作家、教师,属于输出能力示范的人群,而读者、观众属于展现输入过程人群。如今我们借助于互联网这个第三次技术革命的产物,每天都在输入大量的数据,而与此同时我认识到,仅仅有输入,却没有输出,是很可悲的。首先,对于 CPU 来说,仅仅有输入,而没有输出,不算是一次成功的数据处理,人也一样,对知识的学习,若仅仅停留于摄入,而不能经过大脑的思考,做出相应的反馈输出,比如分享,那样未必是一件好事。 分享知识不会像分苹果一样越分越少

2017-10-12 11:53:58 · 1 分钟 · 33 字

一些个人语录整理

Do each of things in a decent way. 软件工程专业最失败的是培养出两种人:一,是只会编程的人,二,是连编程都不会的人。 知而不改,恶莫大焉 Always be young, never be die.(保持年轻,绝不作咸鱼) 生活应该是两件事:IN And OUT,IN 指 INPUT(读书、学习和思考),OUT 指 OUTPUT(做事、工作和实践) 天妒英才,所以天才总会被凡人当白痴 因为他经历完了过程,得到了结果,再看过程,就感觉没什么了,但如果他没这个过程,得不到结果,站在起点再看,就会觉得这个过程很必要了 卓越的方式有很多种,唯独不应该是以健康为代价的那种 If you want to win, you got to know exactly what the rule is. 有意识地在细节之处刻意不同,就能在和别人差不多的生活中活出不一样的自己 Pure to complex is accessible, but complex back to pure is irreversible. 灵感是转瞬即逝的,所以才需要记录下来 别给自己设上限,才能知道自己的极限;而每次的挑战极限,都是在提高自己的上限 理论上你可以成为任何你想要成为的人,而最难的是成为你自己 拒绝命运的审判,而是主动撰写命运

2017-09-22 14:13:45 · 1 分钟 · 57 字

每年九月份给自己的一份健康警告

从百度拇指医生某热心网友总结那里引用来,觉得写得很不错,有参考意义,特此记录下来 ”为什么每年九月份过敏鼻炎就严重“ ”因为天气冷热温差比较大。 因为是过敏鼻炎,也可能是你的过敏原在秋季比较丰富。具体你要去医院查过敏原。 我过敏性鼻炎,每天早上起来打喷嚏,流鼻涕,流眼泪,眼睛痒痛充血,如遇天气干燥就容易流鼻血,部分时候会引起头痛。过敏原比较悲催,很普遍, 甲醛、尘螨、灰尘、温度变化都比较敏感。 吃的药基本没什么用。 弄点抗过敏的药就可以了,我现在连喷剂都不太管用。以下是我经过很多测试得到的一些经验,效果挺好,但是也要自己注意保养。 【忌口】辛辣、羊肉、海鲜、避免喝冰水 【温度】要注意保暖。洗脸用温水,尽量喝温水。最好少吹空调 【清洗鼻腔】因为会对某些物质过敏,因此每天清洗一下鼻腔就很有必要了。 每天自制生理盐水冲鼻子,配方: 500ML 38 度的温水+4.5g 无碘盐+4.5g 小苏打。 如果觉得麻烦也可以去淘宝买现成的洗鼻盐。 清洗鼻子的设备,淘宝也有卖的,一种是专门用于洗鼻子的洗鼻机。另一种是洗牙的机器,但是也有洗鼻的喷头。其实就是一个水泵往鼻子里打水,具体方法参见说明书吧。 控制水温 37-38 度才会舒服,太冷会呛到,太热会烫坏鼻粘膜,弄个专门测液体温度的温度计,这种温度计就是厨房用针式的那种。 【坚持锻炼】再有就是坚持锻炼身体会有很大的帮助,提高自身的抵抗力最重要。我是打羽毛球和爬山,我们爬的都是野山,景区效果不好,爬山效果比较明显,山里空气很好。 【避免的运动类型】不要游泳,不要下海。 游泳池水进入鼻腔没有好处。 下海游泳要禁止,会使体温降低,如果海水进入鼻腔会导致非常严重的过敏反应。 下海游泳本人亲身经历过,非常痛苦。 【防止揉眼睛】 眼睛痒痛最麻烦的是夜里不自主的揉眼睛,这样会更严重得结膜炎。我的方法是购买一个 3M 的实验室防护眼镜。它周围是软的,相对还算舒服。有效避免自己揉眼睛,目前没有更好的方法,总不能把自己的手捆起来吧! 【药物】对我而言基本没什么用。抗过敏药:氯雷他定或者扑尔敏。缓解眼睛:双氯芬酸钠滴眼液。喷剂:丙酸倍氯米松鼻喷雾剂(少用,只有特别难受的时候用用吧)。头痛只能吃点去痛片了。其他遵医嘱(其实大夫也没办法) 关键时刻,网民的建议也是有效的,感谢互联网让同病相怜的人可以分享彼此之间的感受和应对措施。

2017-09-18 14:10:33 · 1 分钟 · 33 字

关于写博客的一些想法

写博客的好处在于,能够对所学、所做、所想之事有所记录,返璞归真,互联网花了那么多的精力将传统办公进化到无纸办公,人们从纸质书籍的阅读习惯变成了碎片化学习。 能够在这样的环境中圈出自己的一亩三分田,经营自己的博客,对自己既是记录,也是肯定,还能在经营博客的过程中更加认识自己。

2017-08-21 23:08:33 · 1 分钟 · 2 字

在Vultr上搭建ss,包含最简版centos7安装过程中的各种坑解决

在 Vultr 上搭建 ss,包含最简版 centos7 安装过程中的各种坑解决 检查是否安装 python 安装 pip pip install shadowsocks pip install M2Crypto M2Crypto 安装前置条件:安装 pcre,然后安装 swig(直接安装 pcre,去安装 swig 会提示 pcre 未安装,即使 pcre 已安装->解决方案,安装 pcre-devel,在发现这个问题之前卡住很久) ...

2017-08-16 20:14:53 · 1 分钟 · 129 字

关于python科学计算库numpy学习总结

关于 python 科学计算库 numpy 学习总结 本文中部分 print 输出可能会报错,原因为 python3 的 print 通过函数方式使用,与 python2 中的 print 通过解释执行不同,需要使用 print()进行控制台打印 安装 numpy python3 -m pip install -U pip 更新 pip pip install numpy 安装方式 II pip install ipython ipython –pylab pylab 模式下会自动导入 SciPy,NumPy,Matplotlib 模块 引入 numpy import numpy as py 使用 numpy arange()函数用于创建同类型多维数组(homogeneous multidimensional array) 用 arange 创建的数组使用 type()查看类型为 ndarray reshape()函数用于重新构造数组成为其他维度数组 例如:np.arange(20).reshape(4,5) [[0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]]...

2017-08-15 14:20:49 · 2 分钟 · 401 字

mysql远端数据库与本地数据库间导入导出

mysql 远端数据库与本地数据库间导入导出 远程数据库导出 mysqldump -hxxx -uxxx -pxxx 数据库名 > 脚本名.sql sz 脚本名.sql(SecureCRT 将文件下载到本地) 本地数据库导入 若直接用 navicat 运行本脚本,失败 打开 cmd,进入本地数据库,mysql -uxxxx -pxxxx,use 创建好的数据库 source 脚本名.sql,可以将 2MB 以上的 sql 脚本导入 成功执行,完成远端数据库到本地的克隆

2017-08-12 16:35:16 · 1 分钟 · 29 字

关于Linux启动文件rc.local的解惑

rc.local 是 Linux 启动程序在 login 程序前执行的最后一个脚本,有的服务器中在 rc.local 中可能会有一句 touch /var/lock/subsys/local,这是干什么的呢,在百度中没找到,最终在Linuxquestions.org 论坛成功找到满意的解答。 touch 首先要了解 touch 这个命令是做什么用的,在此用于创建一个不存在的文件,详细了解请见Linux touch 命令 解释 /var/lock/subsys/local 这个文件的存在证明 rc.local 这个脚本已经执行过了,目的在于避免这个脚本重复执行,除非这个文件不存在时,它才失效,也就是当系统关闭(shut down)时会发生,翻译的不是很好,原文是 What this does is create a lock file that tells the system that ’local’ is up and running already. It prevents the script from being run twice, as it will fail until the lockfile is removed, which will happen when you shut down. Typically this is used with bigger services such as database servers and so forth to make sure they are not started twice....

2017-08-05 01:23:14 · 1 分钟 · 185 字

java零碎知识点整理(3)

关于 java 字符串 String 以及 Hashcode 的一些整理 hashcode 即是对象地址的十进制形式,而 equals 方法即是在比较两个对象的 hashcode 是否相等 package com.test.wx.testequals; public class TestEquals { public static void testEquals() { String a = "a"; String b = "a"; boolean result = a.equals(b); System.out.println(result); // true System.out.println(a.hashCode() == b.hashCode()); // true } public static void testEqual() { String a = "a"; String b = "a"; if (a == b) { // true System.out.println("true"); System.out.println(a.hashCode() == b.hashCode()); } else { System....

2017-02-08 15:01:26 · 2 分钟 · 219 字

正则表达式——学习笔记

一些常用正则表达式的整理 非打印字符 1. \t (table)制表符 等价于\x09和\cl 2. \n (line feed)换行符 等价于\x0a和\cJ 3. \v (vertical)垂直制表符 等价于\x0b和\cK 4. \f (form feed)换页符 等价于\x0c和\cL 5. \r (rarriage return)回车符 等价于\x0d和\cM 6. \s (str)匹配任何空白字符,包括空格、制表符、换页符等) 等价于[\f\n\r\t\v] 7. \S匹配任何非空白字符 等价于[^\f\n\r\t\v] 特殊字符 1. ^ 表示匹配输入字符串的开始位置,若在方括号中使用,则表示不接受该字符集合(例如上述\S的等价匹配) 2. $ 匹配输入字符串的结尾,若设置了RegExp对象的Multiline属性,则$也匹配\n或\r 3. ? 匹配前面的子表达式0-1次,或指明一个非贪婪限定符 4. + 匹配前面的子表达式1-n次 5. * 匹配前面的子表达式0-n次 6. . 匹配除换行符(\n)外的任何单字符(相当于windows系统中的?) 7. () 标记一个子表达式的开始和结束位置,子表达式可供以后使用 8. [ 标记一个中括号表达式的开始()用于字符集合 9. { 标记限定符表达式的开始 10. \ 将下一个字符标记为特殊字符、或原义字符、或后向引用、或八进制转义符 上述所有特殊字符,若要匹配其本身,都需要在其前面加反斜杠来转义使用 限定符 限定符表示给定组件出现多少次才能满足匹配 1. * 0-n次 2. + 1-n次 3....

2017-02-07 22:06:19 · 1 分钟 · 113 字

python零碎知识点整理——注释

python 零碎知识点整理——注释 单行注释 python 的单行注释用#,可在任意位置添加(单独一行或语句/表达式后面,python 是解释型语言,逐行按序解释代码) 多行注释 多行注释使用三个单引号或双引号 这实际上是多行字符串的书写方式,并非 python 本身提倡的多行注释 编码声明注释 出现在 python 脚本第一行或第二行(其他行则无效)的含有 coding:xxx 的注释被认为是对编码方式的声明,详见python 官方文档 从 python3 开始,python 默认使用 utf-8 编码(python3 以前使用 ascii 编码) 平台注释 使 python 程序运行在 windows 平台上,需要在 python 文件的最前面加上#!/usr/bin/python,这说明了程序用的环境的路径

2017-02-07 22:05:20 · 1 分钟 · 35 字

java零碎知识点整理(2)

构造器(构造方法) 在类实例化时被调用,对实例对象进行初始化 package com.test.wx.testinit; public class Color { int red, green, blue; /** * 以下这个方法不是构造器,构造器没有“void”这个返回值 */ void Color() { red = 10; green = 10; blue = 10; } /** * 这才是正确的构造器,会在类实例化一个对象时被调用,对对象进行初始化 */ Color() { red = 10; green = 10; blue = 10; } void printColor() { System.out.println("red:"+red+"green:"+green+"blue:"+blue); } public static void main(String[] args) { Color color = new Color(); color.printColor(); // red:0green:0blue:0 } } 修饰符(关键字) final/abstract abstract 不能与 final 同时使用,abstract类为抽象类,包含抽象的方法待实现,需要其他类继承该类,对抽象方法进行具体实现,而final修饰的类表示该类不可被继承,二者相违背。

2017-02-07 20:01:52 · 1 分钟 · 72 字

java零碎知识点整理(1)

字符串相关方法、数据类型转换、正则表达式 package com.test.wx.teststr; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestString { public static void intToString() { int i = 10; Integer j = 11; int k = 12; Integer l = 13; String iStr = String.valueOf(i); // String iStr2 = (String)j; // String iStr3 = (String)k; String iStr4 = String.valueOf(l); System.out.println(iStr); System.out.println(iStr4); } public static void indexOfTest() { String quote = "An *onion* a day keeps everyone away!"; int startBound = quote....

2017-02-07 17:27:54 · 2 分钟 · 256 字

windows删除“找不到该项目”的文件

windows 删除“找不到该项目”的文件该怎么办 编写一个自动删除脚本,内容如下: 右键,新建文本文件 重命名为 del.bat 编辑内容:del /F /A /Q \?%1(第一行) rd /S /Q \?%1(第二行) 把要删除的文件直接拖到该脚本上即可删除 原理 方法采纳自百度经验删除文件时提示“找不到该项目”,怎么解决? del 为 windows 删除文件的命令,rd 为 windows 删除目录的命令,/F 为强制删除参数,/A 为根据文件属性删除文件,/Q 为安静删除模式参数(删除全局通配符时不需要确认),后面的\?即为全局通配符(UNC),?表示一个字符,在此仅为".",即当前电脑

2017-02-06 11:47:56 · 1 分钟 · 28 字

IDEA2016配置运行基于Maven的Git项目

IDEA2016 配置运行基于 Maven 的 Git 项目 一、IDEA&Maven&Git 作用 IDEA(项目容器) Maven(管理 Jar 和项目打包) Git(版本控制) 二、从远程 clone git 项目 使用工具 clone 下 git 项目 可能问题: 直接通过 git bash 上 git clone 时可能失败 问题解决:使用 TortoiseGit(有时候 TortoiseGit 也可能失败,可能和 gitblit 服务器有关)。 可能项目由多个 module 相互依赖 从 Git 直接 clone 下的项目,未编译,即不含 target 或 out 文件夹(gitignore 中限制编译后的文件被 Git 管理) 但有 pom.xml 文件(Idea 导入基于 Maven 的项目依赖该文件,即导入项目时需找到 pom.xml 文件) 三、将 clone 到本地的 Maven 项目使用 IDEA 编辑(导入或打开) 如果一个项目有多个相互依赖的 module 组成(各自 module 分别有 pom....

2016-12-27 20:22:56 · 1 分钟 · 179 字

Maven学习

Maven 学习 一、什么是 Maven Apache Maven 是一个软件项目管理和综合工具,基于项目对象模型(POM——Project Object Model),Maven 可以从一个中心资料片管理项目构建,报告和文件。 Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。 二、核心 Maven 项目的结构和内容在一个 XML 文件中声明,pom.xml 项目对象模型(POM),这是整个 Maven 系统的基本单元。 三、特性 Apache Maven 是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库。 四、安装配置 JDK(若未按照默认安装在 C 盘,则 PATH 中需要将 jdk 的 bin 目录放在PATH 开头) Maven 根目录(添加 M2_HOME、MAVEN_HOME 都指向 Maven 安装文件夹) 添加到环境变量(添加%M2_HOME%\bin 到 PATH) 验证环境变量配置(mvn -version) 五、启用代理访问 若公司存在防火墙,并使用HTTP 代理服务器阻止用户直接连接到互联网(若使用代理,Maven 将无法下载任何依赖),则需要在 Maven 配置文件(setting.xml)中设置代理服务器,设置完成后保存(无需重启,Maven 是一个批处理文件,调用时会重新读取配置文件) 六、本地仓库 默认本地存储文件夹为用户目录下到.m2 目录,可在配置文件(setting.xml)中修改默认仓库位置,并重新命名

2016-12-20 09:28:04 · 1 分钟 · 57 字

ECMAScript6(ECMAScript2015)学习笔记

ECMAScript 6(以下简称 ES6)是 JavaScript 语言的下一代标准。因为当前版本的 ES6 是在2015 年发布的,所以又称 ECMAScript 2015。 一、ES6 简介 ECMAScript 6(以下简称 ES6)是 JavaScript 语言的下一代标准。因为当前版本的 ES6 是在2015 年发布的,所以又称 ECMAScript 2015。 即 ES6 === ES2015 二、ES6 转码器 Babel是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行。(chrome 已支持 ES6 解释,亲测可用)大家可以选择自己习惯的工具来使用使用 Babel,具体过程可直接在Babel 官网查看: 三、常用特性 let / const(与传统 var 对比) class / extends / super(面向对象) arrow functions(箭头函数) template string(模板字符串) destructing(解构) default(默认值) rest / arguments(函数参数) 四、特性详解 (1)let 与 var 类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途。 var name = "tom"; while (true) { var name = "bar"; console....

2016-12-16 15:34:31 · 4 分钟 · 734 字

Java基础算法(插入、选择、冒泡、快排)

Java 基础算法(插入、选择、冒泡、快排) 一、直接插入排序 1、原理 从待排序的数中选出一个来,插入到前面的合适位置。 2、适用场景 基本有序的数据 3、代码实现 static int data[] = {12, 6, 17, 108, 97, 93, 256, 1024}; public static void insertSort() { int tmp, i = 0; // 遍历数组 for(int j = 0; j<data.length; j++) { // 依次取出每个数放入tmp tmp = data[j]; // 将取出的数与之前面一个比较 i = j - 1; // 若小于前面一个数,则将前面一个数后移(覆盖取出来的这个数的位置) while(i >= 0 && tmp < data[i]) { data[i+1] = data[i]; // 继续和再前面一个数比较 i--; } // 将取出的数插入 data[i+1] = tmp; System....

2016-12-15 23:20:37 · 2 分钟 · 346 字

可复用面向对象软件基础——设计模式(六)之原型模式

原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。 一、原型模式(Prototype) /** * 原型类,实现可复制接口 * @author barnett * */ public class Prototype implements Cloneable { /** * 复制方法,调用父类的复制方法 */ public Object clone() throws CloneNotSupportedException { Prototype prototype = (Prototype) super.clone(); return prototype; } } 很简单,一个原型类,只需要实现Cloneable接口,覆写 clone 方法,此处 clone 方法可以改成任意的名称,因为 Cloneable 接口是个空接口,你可以任意定义实现类的方法名,如 cloneA 或者 cloneB。 因为此处的重点是 super.clone()这句话,super.clone()调用的是 Object 的 clone()方法,而在 Object 类中,clone()是 native 的。 二、深浅复制 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。 public class PrototypeDeepAndThinClone implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private String string; private SerializableObject obj; // 浅复制 public Object clone() throws CloneNotSupportedException { Prototype prototype = (Prototype) super....

2016-12-15 21:06:11 · 1 分钟 · 177 字

可复用面向对象软件基础——设计模式(五)之建造者模式

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的 Test 结合起来得到的。 代码实现 /** * 发送接口,有一个发送方法待实现 * @author barnett * */ public interface Sender { public void send(); } /** * 2、邮件发送类,实现发送接口,实现其发送方法,用以发送邮件 * @author barnett * */ public class MailSender implements Sender { @Override public void send() { System.out.println("I am MailSender!"); } } /** * 短信发送类,实现了发送接口的发送方法,用以发送短信 * @author barnett * */ public class SmsSender implements Sender { @Override public void send() { System.out.println("I am SmsSender!"); } } /** * 3、建造者类 * @author barnett * */ public class Builder { // 用以存储生产出的多个发送器 private List<Sender> list = new ArrayList<Sender>(); /** * 用于生产邮件发送器,当该方法被调用时会生产多个邮件发送器放入集合 * @param count 生产个数 */ public void produceMailSender(int count) { for(int i=0; i<count; i++) { list....

2016-12-15 20:22:46 · 1 分钟 · 164 字