0%

节选自《赡养人类》,作者刘慈欣

第一地球人低头想了想,说:“这样吧,我给你讲讲第一地球上穷人和富人的故事。”

“我很想听。”滑膛把枪插回怀里的枪套中。

“两个人类文明十分相似,你们走过的路我们都走过,我们也有过你们现在的时代:社会财富的分配虽然不匀,但维持着某种平衡,穷人和富人都不是太多,人们普遍相信,随着社会的进步,贫富差距将进一步减小,他们憧憬着人人均富的大同时代。但人们很快会发现事情要复杂得多,这种平衡很快就要被打破了。”

“被什么东西打破的?”

“教育。你也知道,在你们目前的时代,教育是社会下层进入上层的惟一途径,如果社会是一个按温度和含盐度分成许多水层的海洋,教育就像一根连通管,将海底水层和海面水层连接起来,使各个水层之间不至于完全隔绝。”

“你接下来可能想说,穷人越来越上不起大学了。”

“是的,高等教育费用日益昂贵,渐渐成了精英子女的特权。但就传统教育而言,即使仅仅是为了市场的考虑,它的价格还是有一定限度的,所以那条连通管虽然已经细若游丝,但还是存在着。可有一天,教育突然发生了根本的变化,一个技术飞跃出现了。”

“是不是可以直接向大脑里灌知识了?”

“是的,但知识的直接注入只是其中的一部分。

大脑中将被植入一台超级计算机,它的容量远大于人脑本身,它存贮的知识可变为植入者的清晰记忆。但这只是它的一个次要功能,它是一个智力放大器,一个思想放大器,可将人的思维提升到一个新的层次。

这时,知识、智力、深刻的思想,甚至完美的心理和性格、艺术审美能力等等,都成了商品,都可以买得到”

“一定很贵。”

“是的,很贵,将你们目前的货币价值做个对比,一个人接受超等教育的费用,与在北京或上海的黄金地段买两到三套一百五十平米的商品房相当。”

“要是这样,还是有一部分人能支付得起的。”

“是的,但只是一小部分有产阶层,社会海洋中那条连通上下层的管道彻底中断了。完成超等教育的人的智力比普通人高出一个层次,他们与未接受超等教育的人之间的智力差异,就像后者与狗之间的差异一样大。同样的差异还表现在许多其他方面,比如艺术感受能力等。于是,这些超级知识阶层就形成了自己的文化,而其余的人对这种文化完全不可理解,就像狗不理解交响乐一样。超级知识分子可能都精通上百种语言,在某种场合,对某个人,都要按礼节使用相应的语言。在这种情况下,在超级知识阶层看来,他们与普通民众的交流,就像我们与狗的交流一样简陋了……于是,一件事就自然而然地发生了,你是个聪明人,应该能想到。”

“富人和穷人已经不是同一个……同一个……”

“富人和穷人已经不是同一个物种了,就像穷人和狗不是同一个物种一样,穷人不再是人了。”

阅读全文 »

文章来源

索引

数据库只做两件事情:存储数据、检索数据。而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间。所以索引是主数据衍生的附加结构。
一张表可以建立任意多个索引,每个索引可以是任意多个字段的组合。索引可能会提高查询速度(如果查询时使用了索引),但一定会减慢写入速度,因为每次写入时都需要更新索引,所以索引只应该加在经常需要搜索的列上,不要加在写多读少的列上。

阅读全文 »

新版本构造函数中session获取问题

最近的一个项目使用了新版本的Laravel,结果发现5.3版本及之后在控制器的构造函数中无法获取到session,因为session中间件还没有启动;替代方案是在控制器构造函数中使用Closure来直接定义中间件

1
2
3
4
5
6
7
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}

上传文件时被重定向变两次访问

做一个文件上传时,本地window正常,linux服务器上一次上传被重定向了,发现两次访问地址相差一个/,原来是上传请求地址末尾多写了一个/的原因,去掉即可

使用 firstOrCreate 或 updateOrCreate 判断是否新增

1
2
3
4
5
6
7
$user = User::createOrUpdate([...]);
if(!$user->wasRecentlyCreated){
// 新用户处理
} else {
// 更改的值
$changes = $user->getChanges();
}

每条记录都查询固定数量的关联记录

模型关联查询时,若每条记录都想查询固定数量的关联记录,因为 Laravel 是使用 in 来查询关联记录的,因此用普通的 limit 是无法做到的,我们需要对关联关系做一下重写,具体实现如下:

1
2
3
4
5
6
$users = User::where([...])
->with('comments')
->map(function ($item) {
$item->setRelation('comments', $item->comments->take(3));
return $item;
});

ORM模型中如何取消蛇形命名方式

1
public static $snakeAttributes = false;

ORM修改器的生效问题

修改器的生效过程发生在访问和序列化的过程中,如果修改器的逻辑判断涉及到其他字段,请务必在结果集中要查询出这些字段,否则修改器的结果跟预期会不符;
如果想获取未修改过的值,可以调用getOriginal()方法;
你也可以定义一个开关变量,由它来控制修改器的开关;

ORM临时修改可见属性

1
2
$user->makeVisible('attribute')->toArray();
$user->makeHidden('attribute')->toArray();

空间及大小

1
2
3
4
5
# 硬盘空间使用
$ df -hl

# 当前目录下各文件夹大小
$ du -sh *

Laravel 自定义公共函数的引入

  1. 新建自定义函数文件
    一般在app/Helpers/functions.php

  2. 配置 composer.json
    autoload配置项新增以下配置项

    1
    2
    3
    "files": [
    "app/Helpers/function.php"
    ]
  3. 执行 composer 命令

    1
    composer dump-auto

Laravel 项目生成项目key

1
php artisan key:generate

特殊性

  1. 缩进
    缩进表示关系
    函数,分支,循环后均需要加 :

  2. 无长度限制
    python可以做任意长度的计算,没有限制,因为它是链表实现

阅读全文 »

引言

原则,犹如指引行动的“灯塔”,它连接着我们的价值观与行动。
每个人都应该有自己的原则,当我们需要作出选择时,一定要坚持以原则为中心。

阅读全文 »

抠印章

选择 -> 色彩范围 -> Ctrl+J

文字变清晰

复制背景图层 -> 图像 -> 调整色阶 -> 左边吸管黑右边白
再复制背景图层 -> 滤镜 -> 其他 -> 高反差保留 -> 半径为1确定 -> End | 图层混合模式 -> 线性光

匿名函数类,其内部实现如下:

1
2
3
4
5
6
7
8
Closure {
// 阻止实例化
__construct ( void )
// 复制一个闭包,绑定指定的$this对象和类作用域
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )
// 复制当前闭包对象,绑定指定的$this对象和类作用域
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
}

bindbindTo 的静态版本
$newthis 需要绑定到匿名函数的对象,或者 NULL 创建未绑定的闭包
$newscope 想要绑定给闭包的类作用域,或者 ‘static’ 表示不改变。如果传入一个对象,则使用这个对象的类型名。 类作用域用来决定在闭包中 $this 对象的 私有、保护方法 的可见性。

介绍

cp 用于Linux复制,copy用于Dos复制;
scp用于不同Linux系统间复制,pscp也用于不同系统间复制,但不局限于linux系统。

Linux cp 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cp [选项] [源文件] [目标文件或文件夹]

# 选项说明
# -a 原样复制,包括状态、权限等,但归属不会更改
# -r 递归复制子目录
# -f 遇同名文件,先删除再复制,文件夹会合并
# -i 覆盖提醒

# 注意
# cp 普通情况不会复制目录下的隐藏文件,可以用 . 匹配所有的
# 一般情况下 alias cp = "cp -i"
# 因此覆盖会提醒,即使加了 -f 也会提醒,有三种方法
# ① 删除 cp 的 alias
# ② 使用 \cp 代替 cp
# ③ 使用 yes|cp 代替 cp

Linux scp 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ scp [选项] [源] [目标]

# 选项说明
# -C 允许压缩
# -p 保留状态、权限等
# -r 递归复制子目录
# -P 制定端口
# -v 显示详细信息
# -q 不显示传输进度
# -l [limit] 限制带宽,单位 Kb/s,与 pscp 不同

# 远程形式
# [用户名]@[ip]:[路径]
# [ip]:[路径]
# 源为远程形式,则为下载,目标为远程形式,则为上传

pscp 命令

用法与scp雷同,有新增功能的地方

1
2
3
4
5
6
$ pscp [选项] [源] [目标]

# 新参数
# -l [user] 指定 user 为连接用户,与 scp 不同
# -pw [passswd] 指定 passwd 为连接密码