警惕你身边的暗黑世界

  友情提示 如下文字是口述草稿,待整理。

正文开始

我这一段经历也让我后来去反复讲,那个苍龙或者是鱼龙,从暗黑世界中跃出。他身长30多米,40多米,它直接出来,咬死了在陆地上两只恐龙打架获胜的那只。苍龙或者是鱼龙扮演了终结者。他来自深海的暗黑世界,你在陆地上搏杀成雄强的时候,压根儿看不到它的存在这个场景在恐龙世界,一恐龙世界二都有表现,当然到底是苍龙还是云龙,还是苍龙或者是鱼龙经过基因改造的品种,这个就仁者见仁,智者见智了。但是苍龙或者是余龙,的确曾经称霸海洋世界,根据他的体型来推断他应该生活在深海在恐龙世界一或者是恐怖事件二中,这里面有科幻的成分。这个现象可以总结为,要警惕你身边的暗黑世界

没有通讯录的手机

很多年前我在某个大组织工作的时候,捡到一个手机。

怎么找到失主呢? 打开一看里面只有爷爷,小姑,肯定有很多通话记录,但是均没有名字。

我当时很是诧异,而且爷爷小姑是天津的手机号打过去不合适。

正当我百思不得其解的时候,失主电话过来。

taro-vant-dav

build with taro, vant-weapp

关键词 Taro vant-weapp

在开发小程序中,尝试使用Taro作为基础框架,引入vant-weappTaro-UI。 引入后者相对来说要简单一些, 但是引入前者比较麻烦,我引入成功后分享出来, 希望帮助到更多的朋友,降低整合成本。

  1. Taro ^1.1.0-beta.2^1.1.0
  2. Type Script

整合有赞的组件库 vant-weapp。 可以做整合的示例。

Taro 官网地址: https://github.com/NervJS/taro

Vant-weapp文档地址: https://youzan.github.io/vant-weapp

安装Taro的新版本

  1. 使用taro init myApp
  2. 修改package.json中的taro相关包的版本号*^1.1.0-beta.2
  3. 运行npm install

整合要点

  1. 下载vant-weapp/dist保存在src/components/vant-weapp/dist
  2. 在首页index.jsx中修改usingComponents,声明引入的组件
  3. render方法中直接组件比如van-button

lint

package.json中增加lint脚本

1
2
3
"scripts":{
"lint": "eslint --fix --ext .js,.vue,.jsx,.ts,.tsx src"
}

可以在shell窗口中执行如下命令

1
npm run lint

截图

main-snap.png

作战半径的现实意义

金融街笔记21081031

送给大家一个思考工具,这个是好工具叫作战半径。它可以延伸为你有效管理的半径,或者能力圈的半径,或者是一个生态圈供应链有效供应半径。

我去东北,从沈阳走高速路过辽阳,路过抚顺,这三个城市是满清建国非常重要的三个城市。抚顺是他们的起点,他们从抚顺出发打下了辽阳,然后在辽阳稳定了一段时间,又从辽阳出发,打下了沈阳,最后定都在沈阳。

1
抚顺 --> 辽阳 --> 沈阳

我从高速上去观察,这三个城市的距离不会超过150华里,大概在120到150华里之间。

为什么这三个城市的距离这么近呢?恰好是在这个距离上面的而不是六十华里也不是三百华里。

因为这个距离恰好是努尔哈赤他们骑马晚上急行军到目的地,凌晨打仗,打完仗之后抢劫东西,然后再收拾金银细软拉回家的距离。 这是骑兵作战一昼夜的作战半径。

这就是这三个城市距离120~150华里的原因。

但是我后来去看山东河北河南他们的这些城市啊,特别是历史文化名城,他们的城市的距离往往是在60华里。那为什么是60华里呢?60华里是他们步行,或者是赶着牛车低效率行动的距离。

大家有兴趣的话可以去看民国时期形成的那些大军阀,一个大军阀和另外一个大军阀他们之间的距离。

西北地区这些历史文化名城,可能也符合这个原则,但是如果大山大河阻隔的话,那这个作战半径可能要重新去定义。

现实意义

我是在研究一个工业聚集区(类似丰田把所有供应商纠集到一块)的时候使用了作战半径这个思维工具。这个工业聚集区相对于丰田来说要松散一些。

研究这个工业聚集区的时候,使用作战半径。 作战半径与如下四个要素有关

  1. 行业利润率 比如钻石利润高可以闯天涯但是沙子就很难突破150公里
  2. 时间成本,可以理解成应变成本
  3. 沟通信任成本

沟通信任成本的本质

沟通信任成本的本质是非标。 比如标准件的加工环节,标准件的销售是标准品,不需要多聊。 但是标准件的加工环节,是非标准的,需要多多沟通,在作战半径内组织生产。

包装箱的原材料生产是标准化生产,也是标准化供应。 所以可以供应到全国,但是包装箱的设计往往在城市完成, 但是包装箱的生产在郊县。

当然最近的包装箱行业有探索,芯片制造有探索扩大作战半径。 高端制造业从波音飞机时代就依赖于全球供应链, 芯片,手机制造行业也是如此。

低端制造业制成品输出海外,但是生产过程还是在作战半径内协作完成

作战半径的演变路径

  1. 骑兵的作战半径 抚顺辽阳沈阳,是骑兵一天的行动距离,晚上或凌晨打仗然后再跑回家。
  2. 北京,天津,保定,石家庄是步兵携带三日干粮的作战半径
  3. 武汉,舟山,东京是空军的作战半径
  4. 中途岛,塞班,日本本土这是海军轰炸机+舰船,现代海战的作战半径
  5. 思考你的作战半径?

附件

屏幕快照 2018-11-01 12.03.23.png

开篇

术语

  • Gopher 使用Golang开发的工程师,自称Gopher

Golang 版本

目前Golang的版本 go version go1.11 darwin/amd64

建议目前可选版本 go1.11.4

开发环境

目前(2015-09-15),go-plus暂时不支持golang 1.5.1vendor 特性。 我在开发环境配置 vendor 特性,并将golang编写的若干项目,按照 vendor 方式重新组织。 在Atom编辑时,如果遇到与存储在 vendor 包的语法提示时,则不能自动获取。

Golang目前支持主流的操作系统 macOS Windows 32 & 64 Linux 推荐在 macOS环境下开发。

作者同时在 macOSDocker Linux 环境下进行开发,

目标环境 WindowsLinux

编辑器(推荐Atom)

  • Vim
  • Atom
  • VSCode

推荐使用 Atom 编辑器,并安装支持 Golang 的插件 go-plus

目前(2015-09-15),go-plus暂时不支持Golang 1.5.1vendor 特性。 我在开发环境配置 vendor 特性,并将Golang编写的若干项目,按照 vendor 方式重新组织。 在Atom编辑时,如果遇到与存储在 vendor 包的语法提示时,则不能自动获取。

项目规模大的时候,所依赖的包很容易达到几百MB。当然不仅仅是源代码。

作者曾经使用Vim开发出来第一个Golang项目,并与2013年底上线试运行,2014年3月31号开始稳定运行至今。 当时的各种集成开发环境尚不成熟,Vim成为稳定的最佳开发环境,建议现在的开发者选择Vim做为备用编辑器。

作者曾经短期使用Eclipse+Plugin浏览和修改局部的Golang源代码。

目前有很多Gopher使用VSCode做为主力编辑器。

推荐使用Makefile

golang-step-1目录下包含一个使用Makefile的项目案例。

数据库

数据库

环境准备

鼓励针对每个项目,创建三个对应不同环境的数据 分别

  • 开发数据库 mydb_development
  • 测试数据库 mydb_test
  • 生产数据库 mydb_production
1
2
3
4
5
6
7
8
9
10
11
DROP DATABASE IF EXISTS mydb_development;
CREATE DATABASE IF NOT EXISTS mydb_development default charset utf8 COLLATE utf8_general_ci;
use mydb_development;

DROP DATABASE IF EXISTS mydb_test;
CREATE DATABASE IF NOT EXISTS mydb_test default charset utf8 COLLATE utf8_general_ci;
use mydb_test;

DROP DATABASE IF EXISTS mydb_production;
CREATE DATABASE IF NOT EXISTS mydb_production default charset utf8 COLLATE utf8_general_ci;
use mydb_production;

职业生涯三段式

十多年前我提出了类似点线面体的职业生涯三段式

第一阶段,人肉阶段,体力劳动者+初级智力劳动者,收入和肉身相关。

第二阶段,放大阶段,管理者或资深智力劳动者。

第三阶段,资本阶段,企业所有者或行业专家,房东。

上述职业生涯三段式很好地指导了我过去的实践。

职业生涯三段式,它其实一直存在于那里。我大概是在05年06年左右识别出来。职业生涯三段式指导了我此后十多年的实践。

Docker环境

在工作中引入Docker用在开发测试环境中,还是获得超强效果。 基于两个前提

  • 物理机不够
  • 配置成本高

针对痛点引入银弹,坚持下来发现不是银弹,如果途中放弃的话就是银弹。

说明

鼓励每个开发者在本机安装Docker,并且配置基础的开发环境, 比如配置Redis+MySQL+Golang三个镜像,并且可以随时启动。

启动Redis

1
docker run --name some-redis -d redis:alpine

启动MySQL

1
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=root -p 13306:3306 -v $HOME/working/sql:/data/devuser/sql -w /data/devuser/sql -d mysql:5.5

删除所有的none镜像

1
docker rmi $(docker images|grep "none"|awk '{print$3}')

Windows下编译Golang程序

@Deprecated

建议维持如下目录结构

1
2
3
foo -->src
-->bin
-->pkg

编译过程一般来说分成如下几步

  1. 前从 git/svn 服务器抓取最新的版本

  2. 清理现场

  3. 获得时间戳,以便在后续编译过程中带入作为版本号的后缀

  4. 编译,携带若干参数(资源文件、不含调试信息、版本号,目标文件名称)

  5. 复制到特定文件夹

  6. 连同配置文件一起压缩,压缩文件带有上述时间戳

  7. 导出源代码,并压缩,压缩文件带有上述时间戳

  8. 清理现场

上述步骤连续做下来,没有一个工程师可以可以连续无差错做两遍。 这样的场景适合创建一个批处理文件,如果在Linux下的话就是Shell脚本文件。

下面是一个批处理文件的示例,请参阅。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

@echo off
echo 编译打包命令如下
echo ==========================================
set /a t1=(1%time:~0,2%-100)*1
if %t1% LSS 10 set t1=0%t1%
set ymd_hm=%date:~0,4%%date:~5,2%%date:~8,2%%t1%%time:~3,2%%time:~6,2%
set "Version=v2.2.%ymd_hm%"
echo 版本号: %Version%
@echo on
go clean
go build -o YOUR_PROGRAMNAME.exe -ldflags "-s -w -X main._VERSION_ '%Version%'"
set PATH=%PATH%;C:\Program Files\WinRAR;
copy YOUR_PROGRAMNAME.exe "YOUR_PROGRAMNAME_v%ymd_hm%.exe"
rar a "YOUR_PROGRAMNAME_v%ymd_hm%.ra_" "YOUR_PROGRAMNAME_v%ymd_hm%.exe"
@echo off
echo ==========================================
@echo on

如果要支持上述代码中的,在编译命令中引入版本号,那么需要在源代码文件, 即包含 main 方法的 go 文件中包含如下变量定义。

1
2
3

//如下变量供编译器使用,不适用于golint的修改建议
var _VERSION_ = "unknown"

BTW

  1. golint 认为上述变量命名不符合规范,请忽略之

  2. 关于 Windows下批处理文件的更多知识,请 google