BoxCore

Start


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 站点地图

  • 搜索

Linux下载工具wget使用

发表于 2017-08-23 | | 阅读次数

一、wget

应用场景

批量下载或递归下载网页中的所有文件: wget -r http://site.com/content_dir
指定下载编码后再重命名: wget --restrict-file-names=ascii -m www.xxx.com/

下载为ascii的文件名, 可以使用软件RenamePro8.0在“高级文件名变”更里面有一个“文件名编码与解码”,“ANSI编码URL字符串转换为文字”

参考

  • http://moper.me/wget-download-the-file-name-garbled.html
  • http://rubyer.me/blog/111/

Linux下载工具axel使用

发表于 2017-08-23 | | 阅读次数

二、axel

axel tools是多线程下载工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 编译安装
wget http://mirrors.boxcore.org/lnmp/axel-1.0b.tar.gz
tar zxvf axel-1.0b.tar.gz
cd axel-1.0b
./configure
make && make install
cd ../
$ CentOS rpm包安装
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm # 64bit:http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el5.rf.i386.rpm
$ ubuntu
apt-get install axel

Axel命令使用方法

axel 参数 文件下载地址
可选参数:

  • -n 指定线程数
  • -o 指定另存为目录
  • -s 指定每秒的最大比特数
  • -q 静默模式

如从Diahosting下载lnmp安装包指定10个线程,存到/tmp/:axel -n 10 -o /tmp/ http://soft.vpser.net/lnmp/lnmp0.7-full.tar.gz

如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。

Google Chrome使用

发表于 2017-08-22 | | 阅读次数

使用场景

1. Chrome修改UserAgent

Chrome修改UserAgent

1
C:\Users\boxcore\AppData\Local\Google\Chrome\Application\chrome.exe —user-agent=”iPad” —profile-directory=”Profile 1”

其他的ua比如:

—user-agent=”iPhone”
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

2. Chrome关闭强制跳转https

chrome://net-internals/#hsts
Delete domain security policies栏的输入框中输入:xxx.com -> 点击delete按钮,即可完成配置。

  • 地址栏中输入 chrome://net-internals/#hsts
  • 在 Delete domain 中输入项目的域名,并Delete 删除
  • 可以在 Query domain 测试是否删除成功

Vagrant配置笔记

发表于 2017-08-22 | | 阅读次数

一、vagrant入门

1.1 安装

1
2
3
$ mac下使用brew安装
brew cask install vagrant
brew cask install vagrant-manager

二、实战

三、常用配置

3.1 使用vagrant配置laravel开发环境(homestead)

网络状况好的话执行vagrant box add laravel/Homestead即可完成安装,但由于国内网络种种原因,会导致断线,所以我们需要进行离线安装

参考

  • Laravel 虚拟开发环境 Homestead

PHP环境配置

发表于 2017-08-21 | | 阅读次数

一、更新

  • 2017-08-21:mac 配置php 7.1 作为系统默认php,配置nginx 多php版本支持

这里主要是说明自己机器php环境配置相关问题,涵盖了windows、unix和mac多平台。

二、内容

2.1 2017-08-21更新: mac php 7.1 配置

安装php71

通过系统默认命令brew install php71后php提醒libpng库问题,在执行php --version时报错内容大致如下:

1
2
3
dyld: Library not loaded: /usr/local/opt/libpng/lib/libpng16.16.dylib
Referenced from: /usr/local/bin/php
Reason: Incompatible library version: php requires version 45.0.0 or later, but libpng16.16.dylib provides version 38.0.0

解决方法: 执行命令brew reinstall -s php71可以解决
参考:https://github.com/Homebrew/homebrew-php/issues/3961

配置多端口访问

配置端口及对应的php服务如下

  • php(默认): nginx端口80,php-fpm端口9007
  • php54: nginx端口8054,php-fpm端口9004
  • php56: nginx端口8065,php-fpm端口9000
  • php71: nginx端口8071,php-fpm端口9007

也就是说后面一旦访问域名:端口即可使用对应php版本的服务。下面附上部分nginx fastcgi配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# # use php5.6 for php
# location ~ \.php$ {
# try_files $uri = 404;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_intercept_errors on;
# include /usr/local/etc/nginx/fastcgi.conf;
# }
# use php7 for php
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9007;
# fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
include /usr/local/etc/nginx/fastcgi.conf;
}

修改配置后需要执行以下命令重新加载相关服务:

1
2
3
4
brew services restart homebrew/php/php54
brew services restart homebrew/php/php56
brew services restart homebrew/php/php71
brew services restart nginx

2017-08-17 正则浅析

发表于 2017-08-17 | | 阅读次数

本文只探讨正则在php中的一些使用,小白用户还是先了解下正则相关的基础概念:正则表达式30分钟入门教程

一、正则基础函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
/**
* 函数参数说明
* $pattern = 正则表达式
* $subject = 匹配的目标数据
*
*/
// 只将第一个匹配到的结果赋值给$matches,$matches为一维数组。preg_match返回值为匹配到的次数,0或1.
preg_match($pattern, $subject);
// 将所有匹配到的结果赋值给$matches,$matches为二维数组。preg_match_all返回值为匹配到的次数。
preg_match_all($pattern, $subject, $matches);
// preg_filter()和preg_replace()区别:在对数组方面替换的时候,preg_replace()会返回所有结果,preg_filter()只会返回替换到的结果。
preg_replace($pattern, $replacement, $subject);
preg_filter($pattern, $replacement, $subject);
// 只匹配,不替换,返回匹配到的数组值
preg_grep($pattern, array $input);
// 区别explode(…)
preg_split($pattern, $subject);
// 它会将正则表达式中的特殊字符进行转义。
// regex的运算符: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
// 转义符号 \
preg_quote($str)

二、正则表达式基本语法

正则表达式基本语法归类:

  • 界定符: 表示一个正则表达式的开始和结束;EG:/[0-9]/; eg: $pattern = ‘/[0-9]/‘ 或者 #[0-9]# {[0-9]}(不推荐使用大括号);
  • 原子: 原装可以分为可见原子和不可见原子,都能用正则表达式进行原子匹配。
    • 可见原子:Unicode编码表中用键盘输出后肉眼可见的字符, 比如
      • 标点 _ ;,?等等
      • 英文字母和数字
      • 汉字/日文等其他语言文字
      • 求和等数理化公式符号
      • 其他可见字符
      • 特殊原子:\ 因为本身还是转义字符,所以要用\才能匹配到一个\符号
    • 不可见原子:Unicode编码表中用键盘输出后肉眼不可见的字符
      • 换行符 \n
      • 回车符 \r
      • 制表符 \t
      • 空格
      • 其他不可见符号
    • 元字符:
      [] -> 匹配出现在[]中的任意一个原子
      | -> 或运算,匹配|符号左右两边的任意一个
      [^ ] ->首先这里^必须和[紧挨着,才表示匹配除了[]里面任意原子的字符
      [ ^ ]->如果不挨着,就只表示匹配^这种字符了
    • 原子的集合:
      • . 匹配除换行符之外的任意字符。等价于[^\n]。
      • \d 匹配任意一个十进制数字,即[0-9]。
      • \D 匹配任意一个非十进制数字,即[^0-9]。
      • \s 匹配一个不可见原子,即[\f\n\r\t\v]。
      • \S 匹配一个可见原子,即[^\f\n\r\t\v]。
      • \w 匹配任意一个数字,字母或下划线,即[0-9a-zA-Z_]。
      • \W 匹配任意一个非数字,字母或是下划线,即[^0-9a-zA-Z_]。
  • 量词
    • {n} 表示其前面的原子恰好出现n次。
    • {n,} 表示其前面的原子最少出现n次。
    • {n,m} 表示其前面的原子最少出现n次,最多出现m次。
    • `` 匹配0次,1次,或者多次其之前的原子,即{0,}。 ? ???????
    • + 匹配1次,或者多次其之前的原子,即{1,}。
    • ? 匹配0次,1次,或者1次其之前的原子,即{0,1}。

      备注:量词不仅支持原子,同样支持原子的集合,同样支持元字符的写法。例如:\w{4}

  • 边界控制
    1. ^ 匹配字符串开始的位置
    2. $ 匹配字符串结尾的位置
  • 模式单元
    • ()匹配其中的整体为一个原子, 例如:(H|h)ello则匹配Hello和hello的结果。
  • 修正模式
    • 贪婪匹配: 匹配结果存在歧义时取其长
    • 懒惰匹配: 匹配结果存在歧义时取其短
    • 常见的修正模式:
      • U 懒惰匹配
      • i 忽略英文字母大小写
      • x 忽略空白(空格,制表符等空白符)
      • s 让元字符’.’匹配包括换行符在内的所有字符
      • e 后面单独写下~

        惰模式的标识为大写的U
        例如:
        $pattern = ‘/hello.+12/‘;
        $subject = ‘hello1231321233123131’;
        在贪婪模式下匹配的结果为:hello
        1231321233123131
        而修改为懒惰匹配

        $pattern = ‘/hello.+12/U’;
        $subject = ‘hello1231321233123131’;
        那么结果就会变为:hello
        12

三、常见正则表达式练习

  • 非空:/.+/
  • 浮点数匹配: /\d+.\d{2}$/ ,实现保留两位的浮点数,$符号是上文中的边界控制哦~
  • 手机号匹配:/1[34578]\d{9}/,匹配到的为1开头,第二位为3,4,5,7,或8的11位手机号
  • email地址匹配: /^\w+(.\w+)*@\w+(.\w+)+$/ (\w 字母,数字,下划线)
  • URL匹配:http是否出现,是http还是https。即 ^(https?://)?。是否是二级域名? 即:(\w+.)+。顶级域名。即:[a-zA-Z]+。故:正则表达式:^(https?://)?(\w+.)+[a-zA-Z]+$

3.1 正则工具类的设计实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
class RegexTool {
//常用的regex表达式数组
private $validata = array(
'require' => '/.+/',
'email' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
'url' => '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/',
'currency' => '/^\d+(\.\d+)?$/',
'number' => '/^\d+$/',
'zip' => '/^\d{6}$/',
'integer' => '/^[-\+]?\d+$/',
'double' => '/^[-\+]?\d+(\.\d+)?$/',
'english' => '/^[A-Za-z]+$/',
'qq' => '/^\d{5,11}$/',
'mobile' => '/^1(3|4|5|7|8)\d{9}$/',
);
//返回数组还是返回真假的boolean变量
private $returnMatechResult = false;
//修正模式
private $fixmode = null;
//匹配结果数组
private $matches = array();
//是否匹配成功
private $isMatch = false;
//类的构造函数
public function __construct($returnMatchResult = false, $fixMode = null) {
$this->returnMatchResult = $returnMatchResult;
$this->fixMode = $fixMode;
}
//核心匹配方法
public function regex($pattern ,$subject){
//array_key_exists判断键值是否存在
if (array_key_exists(strtolower($pattern), $this->validata)) {
$pattern = $this->validata[$pattern].$this->fixmode;
}
$this->returnMatchResult?
preg_match_all($pattern, $subject, $this->matches):$this->isMatch = preg_match($pattern, $subject)===1;
return $this->getRegexResult();
}
//获取返回值类型的方法
private function getRegexResult(){
if ($this->returnMatchResult) {
return $this->matches;
}else{
return $this->isMatch;
}
}
//切换返回值类型
public function togoReturnType($boolean = null){
if (empty($boolean)) {
$this->returnMatchResult = !$this->returnMatchResult;
}else{
$this->returnMatchResult = is_bool($boolean)?$boolean:(bool)$boolean;
}
}
//设定修正模式
public function setFixMode($fixMode) {
$this->fixMode = $fixMode;
}
//一些数据验证方法
//是否为空
public function noEmpty($str){
return $this->regex('require',$str);
}
//验证email
public function isEmail($email){
return $this->regex('email',$email);
}
//....其他的类似,省略了,小伙伴自己可以自定义添加哦~
//用户自定义正则表达式
public function check($pattern, $subject) {
return $this->regex($pattern, $subject);
}
}
?>

四、其他语言或ide工具的正则语法使用

4.1 vim下正则使用

vim下的正则使用主要是批量替换的功能,使用语法如::[range]s/from/to/[flags]

vim替换语法

range:搜索范围,如果没有指定范围,则作用于但前行。

  • :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
  • :10s/from/to/ 表示只在第10行搜索替换;
  • :%s/from/to/ 表示在所有行中搜索替换;
  • 1,$s/from/to/ 同上。

flags 有如下四个选项:

  • c confirm,每次替换前询问;
  • e error, 不显示错误;
  • g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
  • i ignore,忽略大小写。

vim中使用的正则表达式语法

这里只针对vim中特殊的正则进行说明,其他的与通用正则大体一致。

  • 元字符: 大体一致,比如\w 代表匹配单词字母,等同于[0-9A-Za-z_]
  • 一些普通字符需转意
    • .: 匹配.字符, 不需要转义
    • \: 匹配\字符, 不需要转义
  • 表示位置的元字符
    • \<: 匹配单词词首
    • \>: 匹配单词词尾

vim 使用范例

  • %s/^\(.\+\)$/,(\1)/ : 缓存变量使用,在vim中用 \num表示;
  • :%s/\n//g: 批量删除换行
  • 删除行尾空格::%s/\s+$//g
  • 删除行首多余空格:%s/^\s*// 或者 %s/^ *//
  • 删除沒有內容的空行:%s/^$// 或者 g/^$/d
  • 删除包含有空格组成的空行:%s/^\s*$// 或者 g/^\s*$/d
  • 删除以空格或TAB开头到结尾的空行:%s/^[ |\t]*$// 或者 g/^[ |\t]*$/d
  • 把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法
    • :%s/abc\(.*\)xyz/xyz\1abc/g
    • :%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g

一些学习工具

  • regexpal工具: 正则表达式书写辅助工具 regexpal 是Google Code上的一个开源项目,可以实时匹配正则表达式,方便调试,使用HTML和JS开发,推荐给大家使用。
  • 鬼斧神工的正则表达式(PHP语言)

OCR开发之找轮子

发表于 2017-08-14 | | 阅读次数

最近有从图书中拍照ocr部分段落的需求,这里是收集的部分入门 及 目前商用的接口方案。

以下关于OCR介绍来自搜索:

OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

简单地说吧,就是识别印刷品上面的文字,大概用得比较多的情况是:用设备的摄像头拍一张照片,照片中有文字,然后通过OCR技术将照片中的字符识别出来,转化为字符。顺便说一下,如果想“干坏事”的话,也可以用OCR技术来识别一些简单的图片验证码,呵呵,不过,现在很多网站的验证码都比较“狡猾”,要准确识别出来不那么容易。

  • LEADTOOLS: 英文识别文档SDK,支持c#、html5、ios和安卓等平台
  • 腾讯云 - 万象优图2.0

微信第三方网站对接

发表于 2017-08-11 | 分类于 实战 | | 阅读次数

一、开发之前

1.1 开发工具

在着手开发之前,首选要了解微信开发相关文档和调试工具:

  • TBS开发调试利器——TBS Studio
  • 微信web开发者工具
  • 公众号本地调试可以使用其他内网穿透的工具, 比如https://natapp.cn(同时也支持https,用于微信小程序)
  • 模拟器
    • 网易MuMu模拟器

1.2 账号申请

  1. 你要有微信开发账号,需要第三方验证
  2. 写网站接入申请单

二、网站对接

三、模拟测试

3.1 方法一、用Chrome在电脑上模拟微信内置浏览器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 安卓微信UA
var android_ua = 'mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko) version/4.0 mobile safari/534.30 micromessenger/5.0.1.352';
// iPhone微信UA
var iphone_ua = 'mozilla/5.0 (iphone; cpu iphone os 5_1_1 like mac os x) applewebkit/534.46 (khtml, like gecko) mobile/9b206 micromessenger/5.0';
// JS判断是否微信浏览器
functionisWeixinBrowser(){
var ua = navigator.userAgent.toLowerCase();
return (/micromessenger/.test(ua)) ? true : false ;
}
function is_weixin(){
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
return true;
} else {
return false;
}
}

3.2 命令端配置

1
curl --user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 MicroMessenger/5.0.1" xxx.com

3.3 php配置

1
2
3
4
5
6
7
8
9
10
/**
* PHP 判断是否微信浏览器
*/
function is_weixin(){
if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
return true;
}
return false;
}

成长慢,因为你AV看太多

发表于 2017-08-04 | | 阅读次数

[TOC]

enter image description here

一个从零开始学棋的小学生,需要多长时间的专业训练就可以超过 99% 在路边摊下了一辈子棋的老棋友呢?

大约 6 个月。

李叫兽之前写过一篇关于刻意练习的文章,起的题目是《为什么你有10年经验,却成不了专家》。这个题目其实也是在说他自己,叫兽在读研一的时候就拿到300W年薪的offer,然后又在5分钟内拒掉了。

enter image description here

我们这个时代,可以看到还有很多像叫兽这样的年轻人迅速崛起,究竟是什么原因导致了彼此的差距呢。

继续套用风尘棋客的话:

绝大多数人在职场上的第一大幻觉,就是把时间的流逝当做了技能的增长。

1/成长的幻觉

李叫兽一直在践行自己所学的东西,而我们大多数人并非如此。绝大多数人在看书的时候,其实是和看AV、看韩剧一样的。

心理学上有一种“预先体验效应”,就是我们在想象一件事的时候,即使还没有经历过,大脑也会分泌多巴胺,产生了经历过的感觉。

所以男人爱看AV,女人爱看韩剧,因为在看的时候,头脑里真的会产生相应的感觉,也就是我们所说的安慰剂效应。

回到看书学习这件事也一样,当代人很大的一个毛病是喜欢囤积各种学习资料。你问他真的看了吗?没有。满足吗?真的满足。

enter image description here

因为安慰剂效应,很多人在看完书、听完课之后,就以为自己真的掌握了。就跟囤积各种资料一样,下载下来就好像已经看完一样,陷入知识的幻觉。

另外一部分人甚至会走入标榜阅读量的极端。讲实话,船长之前就是这样。看完一本书之后,就是“哦,我知道了”。然后呢,没有然后。

王阳明讲知行合一,知道了做不到,其实说明你还是不知道。哪怕逻辑上你完全接受,可是在内心里并不相信。因为不相信,所以你不会去实践。

拿船长自身举例,我有过两次正式减肥经历。第一次是在高考结束后,失败的很彻底。在当时我实际上并不“相信”自己能够减肥下来。

因为在我的身边,我的认知之中从来没有过这样的人。电视上虽然有很多,但是跟我没有关系,内心并不会有所触动。直到上了大学,以前的高中朋友纷纷健身减肥成功,我才真正相信并且去实践。

enter image description here

你看,这真是一件滑稽的事情。

一方面大脑陷入知识的幻觉,以为我们看过就掌握了。另一方面,内心并不会真正的相信,也不会去实践。从而陷入了一种成长的幻觉,让时间流逝。

2/拍死理论派

有一次学员问小马宋如何成为一个营销高手,小马宋说他不敢以营销高手自居,简单谈了下自己的观察。

他觉得这个世界有两种人。

enter image description here

一种是他这样的人,在看书包括读MBA的时候,都学过营销的4P理论。产品、价格、渠道、促销,学完了之后就是“哦,我知道了”,知道了之后完全没有去实践。

说实话也不太相信这个事情,也没有想到这个东西可以真正用到营销上去。读了很多书,知道了很多道理,然后一件没有用。后来吃了很多亏,才认识到这个问题。

一种是李叫兽这样的人。李叫兽是一个特别相信书的人,他相信所有的经典理论都是有效的,只是大多数人不会运用。他在高中学习了博弈论,就用囚徒困境这个理论去分析高考,写了一篇文章。之后就把这个策略应用到实际当中去。

这两位都是营销高手,用小马宋的话说,他这类人是归纳型的人,通过实操一个一个案例总结出一个方法来。这类人的成长,都是用钱赔出来的。

而他要学习的李叫兽,是一个演绎型的人,从一个理论中可以演绎出很多方法来。

enter image description here

归纳型的人问题在于只从自己过去的经验中学习,只有经历过之后才知道怎么解决,这样的成本太高。正如周国平所说:“对人生的觉悟来自智慧,倘若必待大苦大难然后开悟,慧根也未免太浅。”

另外一方面,从自己过去的经验中学习,是有限而且封闭的,一旦超出了自己目前的认知范围就很难解决。

李叫兽在14天训练营里谈到如何把任何一件事做好的三种思维方法,第一个方法就是利用知识范围之外的知识。

enter image description here

我们无法解决某些问题的第一重要原因——解决该问题所需要的知识,在你现有的知识范围以外。

只有在你真正坚信并践行那些经典智慧和理论的时候,人类的智慧才会变成你真正的宝库。

个人的经验是有限的,而人类的总体智慧经验是相当丰富的,只要你安装了对外的接口,就总能找到做好一件事的方法。

否则的话,就是睁眼瞎,人类最大的财富就在那里,你却视而不见。

很多人会觉得那些理论太虚,没有用。实际上没有用的不是理论,而是理论派。理论派没有用,理论有大用。

借用知乎营销大神@波旬的一句话:用理论拍死理论派。

这才是高手应该做的事情。

enter image description here

3/如何成为一个很厉害的人

如何成为一个很厉害的人,采铜的回答是“在理论世界思考现实,在现实世界思考理论。”

深以为然。

船长总结了两个能力,来把这两句话进一步的落地。

1.在理论世界思考现实

在理论世界思考现实,就是掌握一个理论框架之后,用大量的现实案例填充进去,不断的练习和修正,最终熟练掌握。这其中最重要的一个能力,就是拆解的能力。

用一套理论框架去拆解一个现实案例,就好像我们小时候拆钟表一样,是学习的必经之路。

enter image description here

就用船长想提高写作能力来举例。

李笑来老师讲写作就是沟通,ok这点我认同。而徐强老师又将沟通分为2个维度,4类对话。

过程导向型:娱乐式对话、分享式对话
结果导向型:销售式对话、解决问题式对话

嗯,这是不是意味着我们的文章也可以分为这四类,而沟通的技巧也可以运用在写作上面呢。

仔细一想,好像确实是这样。

每一类沟通有不同的技巧,举个例子,如果把销售式文案理解为销售式对话,那么一些销售中的技巧就可以拿来作为写作技巧。

在销售的时候,有一个基本法则:诉诸利益原则。就是想要打动一个人的时候,从对方的利益出发。

案例:劝小孩换薄一点的衣服。
说法1:天气热了穿那件薄的
说法2:哎呀待会和小朋友玩,穿厚衣服会不会跑得慢啊

说法2就是从对方的利益出发。这个技巧同样可以运用到文章中。

本文的开头部分原本在目录大纲里是第二部分,后来被我放在开头了,各位不妨回想一下,是什么驱动你们看到了这里。

整个框架在下图,细节我没有放出来。

enter image description here

如图,带着这套理论框架去大量的分析别人的文章,把段落、句子揉碎了、掰开了来看。对比不同人在不同情境下的使用技巧,再辅以自己的实践,相信很快会有所提升。

2.在现实世界思考理论

台大的吕世浩教授,在coursera开的两门课《史记》和《秦始皇》,一直以来都是是精品中的精品课程。他在TEDx的演讲《学历史的大用》中谈到一个很有意思的发现:

中国古代都是帝王和精英在学习历史,并且都觉得很有用。
而我们当代人人从小学开始学历史,却都不知道历史有什么用。

最后他发现其实是因为古人学历史根本和我们的方法完全不一样。

enter image description here

古人学习历史的方法就是,读到关键处,把书盖上。

当读到一个历史人物,面对人生的一个重要关头,需要下一个决定的时候,那一刻把书盖上,去想象你就是他,想象你在这样的环境中你会怎样决定。

把一切都想清楚之后,再把书打开,去看那个人是怎么做决定的,和你是否一样,他为什么做这个决定,成功了还是失败了,付出了什么又得到了什么。

通过这种方法,可以用古人的智慧来磨练我们的智慧。

这也是为什么中国古代的很多帝王,虽然都是生于深宫之中,长于妇人之手,最后却能驾驭下面这些大臣。更有甚者,像雍正皇帝这种,把大臣玩的团团转。要知道那些大臣都是全国竞赛选拔出来,人精中的人精。

enter image description here

李叫兽讲自己的训练方法主要是“预测-反馈法”,就是在学习过去的商业案例时,把最后的结果盖住,想象如果是自己,自己会怎样去做,会运用什么方法,然后再跟实际对比。包括在他的14天训练营中,也是用这套方法来训练学员。

而李叫兽的“预测-反馈法”其实就是古人读史的方法。那么为什么这套方法会这么有用呢?

因为理论的本质是对现实世界规律的总结,智慧也是如此。而规律就是用来对现实进行预测的,如果预测与实际不一致就要进行修正,从而不断迭代获得真正的认知。

所以如果你从来没有用它来进行预测过,你又怎么可能学会呢?

受限于我们失败的教育,大部分人都活在“理论-理论”或者“实践-实践”的单行道上,一伙人成了象牙塔里的学院派,另外一伙人则整天叫嚣“读书无用论”。

实际上都是挺可悲的事情。

最后想说的一点是,船长最近的文章都是按照李笑来老师的格式化写作模板来组织的。多亏了笑来老师的框架,我也才能驾驭这样的长文。

enter image description here

总结

  1. 很多人容易陷入成长的幻觉之中。大脑觉得自己学了很多东西,实际上并没有掌握。内心不相信,也不会去践行。

  2. 有些人只从自己以往的经验中学习,这样的成本太高,而且一旦超出认知范围就没有办法。

  3. 学会利用践行理论知识,理论有大用,没有用的是理论派。用理论拍死理论派。

  4. 在理论世界思考现实,用一套行之有效的理论框架去拆解分析大量现实案例。

  5. 在现实世界思考理论,用“预测-反馈法”去借助古人的智慧来磨练我们的智慧。

@link:

  • 《成长慢,因为你AV看太多》&version=12020810&nettype=WIFI&fontScale=100&pass_ticket=lgR7gg41DdhQiv1Zd32%2F%2F1lBQB%2BmfdcopHeFmx6TflT1UlDopQxDwhYP8SYfkjST)
  • 如何评价李叫兽加入百度任副总裁?

Github·Gist使用攻略

发表于 2017-08-04 | | 阅读次数

Gist 是 Github 推出的基于 Git 的代码片段管理服务。用户可以提交自己的代码片段或任意的文本,可以作为个人的代码管理库、文档管理库等。同时 Gist 页面提供访问的 JavaScript 片段用于嵌入其他网站,如:个人博客等。下面说说gist的一些正确打开姿势。

一、使用、管理Gist

1.1 使用 Github Gist

github官网默认功能,这里不多说了

1.2 gistboxapp

gistboxapp是一个gist集成管理工具,GistBox 是可以直接用 Github 账户登录的,实时同步你的 Gist 到 Github,很方便。GitBox 从体验上来说更加方便,界面元素丰富,功能也比较全。如果不想用 Sublime Text, 又觉着 Github 自己的 Gist 管理太简单,GistBox是一种不错的方式。官网是 https://app.gistboxapp.com/,功能功能截图如下:

gistboxapp

1.3 使用 Sublime Text + Gist插件

安装插件:Gist

配置token: 插件下的user setting下配置,

添加 Github Token:

1
2
3
4
5
{
// Your GitHub API token
// see: https://github.com/condemil/Gist#generating-access-token
"token": "a28b686c3a74······c300f42414c7", // 从命令行得到的 token
}

分享Gist代码

这里直接粘贴部分代码片段:

1
2
3
4
5
<!-- 使用iframe加载 -->
<iframe width="100%" height="300" src="https://gist.github.com/boxcore/9abd100553a3585c50b7c348e50e2f87.pibb" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
<!-- 使用js加载 -->
<script src="https://gist.github.com/boxcore/9abd100553a3585c50b7c348e50e2f87.js"></script>

或者添加通用的处理规则在function中:

1
2
3
4
5
6
7
8
9
10
11
// wordpress usage
/**
* WordPress 使用 iframe 嵌入Github Gist代码
* https://www.wpdaxue.com/wp-iframe-handler-gist.html
*/
function wp_iframe_handler_gist( $matches, $attr, $url, $rawattr ) {
$iframe = '<iframe width="100%" height="300" src="https://gist.github.com/'. esc_attr($matches[1]) .'/'. esc_attr($matches[2]) . '.pibb" frameborder=0 ></iframe>';
return apply_filters( 'iframe_gist', $iframe, $matches, $attr, $url, $rawattr );
}
wp_embed_register_handler( 'gist_iframe', '#https://gist.github.com/(.*?)/([\d]+)#i', 'wp_iframe_handler_gist' );
1…151617…26
Zack Hwang

Zack Hwang

Go

257 日志
42 分类
76 标签
RSS
Links
  • 小白博客
  • 我的书单
© 2018 Zack Hwang
由 Hexo 强力驱动
主题 - NexT.Muse
又拍云