由于众所周知的原因,非会员下载百度网盘的速度慢的令人发指,所以目前最推荐的度盘下载工具是 Pandownload,但是软件本身需要登录百度账号,如果账号被限速也没辙。经笔者实测,发现 Pandownload 的网页版配合 Aria2 可以无账号高速下载。不过这不是本文重点。

Pandownload 允许用户将度盘分享链接中的 baidu 修改为 baiduwp 后进行访问,可直接解析资源后下载。频繁点击 URL 修改实在麻烦。受《用 JavaScript 为 URL 瘦身》一文的启发,想到可以用 JS 制作小书签,即点即用。

不知道小书签为何物的话,可以参阅少数派的这篇文章

本文提供一些笔者自己收藏使用的小书签,拖动下方链接到浏览器收藏栏即可保存。

网络上有很多提供小书签的网站,比如这个,如果你会 JavaScript 的话也可以自己制作。欢迎各位在评论区分享你的小书签。

Laravel 作为大名鼎鼎的 PHP Web 框架,有着「过度设计」的美誉(滑稽)。也就免不了附带着一些需要学习和摸索才能掌握的奇技淫巧(好吧其实只需要看看文档就行)。笔者结合自身的开发经验,把值得一提的东西梳理成文,便于读者在使用 Laravel 进行开发时事半功倍。

Composer

已经 9102 年了,Composer 作为 PHP 的包管理工具,相信已经不需要做介绍了。使用 Laravel 的过程中不可避免地会使用到各种各样的第三方包,Laravel 毫无疑问是使用 Composer 进行包管理的,对于国内开发者而言,第一件事显然是把 Composer 换为国内源,只需执行一下命令即可修改全局设置:

$ composer config -g repo.packagist composer https://packagist.phpcomposer.com

调试代码

打印变量

一般使用框架自带的 dd() 方法而不是 PHP 原生方法 print_r()var_dump() 来打印变量信息,因为 dd() 方法可以打印多个任何类型变量:dd($object, 123, [123, 324]);

顺便一提,所谓 dd 的意思是 dump, die,而在最新的 Laravel 6 框架中,新增了 ddd() 方法,它是 dd() 方法的升级版,意思是 dump, die, debug,你可以在这篇文章查看该方法的介绍。

打印 SQL 语句

在使用框架的 ORM 查询构造器时,可以通过 toSql() 方法输出原生 SQL 语句。

SQL 语句中的参数值由于被 ? 代替,可以使用 getBindings() 输出构造器中的查询条件:

<?php

$builder = DB::table('user')->where('id', 1);
$bindings = $builder->getBindings();
$sql = str_replace('?', '%s', $builder->toSql());
$sql = sprintf($sql, ...$bindings);

dd($sql);
阅读全文 »

翻转问答 VOL30 | 道理能解决消费主义和奢侈的否定欲望?

Episode Archive

道理无法解决问题

  • 消费主义本身并不是一个多深的批判,对消费主义的批评不需要过高的学术门槛。
  • 批判难度低并不意味着不具备批判价值。
  • 掌握道理本身不难,但改变和解决问题并不能通过了解某个道理来完成。

个人主义与消费依存

  • 消费主义与消费不是一回事。
  • 个人主义兴起之后,社会分工的消费交换使消费主义与消费的关联越来越紧密。
  • 依靠消费来维持日常生活,并不一定是消费主义的,而「由单一消费提供一切」的生活就是消费主义的。举例来说,购买器材录制播客,在录制过程中产出的内容并不是消费行为本身能够购买而来的,所以这一行为本身不是消费主义的。简单来看,消费过程中是否有内容产出,可以视为判断是否是消费主义的一个依据。

平民主义与消费权的平等

  • 消费权的平等伴随这消费门槛的降低而逐渐消失。在过去,某些消费具有门槛,例如衣冠不整不可进入餐厅;贵族社会使用的产品为特供等。
  • 消费权的不平等意味着在既有时代背景下,消费作为一种客体并不是最重要的东西,而导致消费不平等的因素或许比消费更重要,例如前述例子中的文明程度、权力等。
  • 平民主义兴起使得导致消费权不平等的因素越来越被反对,导致消费权不平等的各种特权亦被排斥,进而消逝。例如,一辆好车应该卖给谁,不以驾驶技术高低而论,而是价高者得。
  • 在诉诸消费权平等的过程中,金钱逐渐成为了决定消费的最重要的要素。附着在消费行为上的其他价值被渐渐瓦解,消费内涵的价值成了钱的价值。
  • 追求钱的价值会让物质的使用意义逐渐消逝,成为被观看的现象,让社会景观化
  • 物质本身的使用价值,需要更多的公共场合来展示,需要更多的公众关注。公共场合越小,公共场合越萎缩,社会越景观化,社会就越容易进入消费主义。
阅读全文 »

命名空间(namespace)

基本概念

  • PHP 命名空间与操作系统的物理文件系统不同,这是一个虚拟概念,没必要和文件系统中的目录结构完全对应。但是大多数 PHP 组件为了兼容 PSR-4 自动加载器标准,会把子命名空间放到文件系统的子目录中。
  • 从技术层面来看,命名空间只是 PHP 语言中的一种记号,PHP 解释器会将其作为前缀添加到类、接口、函数和常量的名称前面。
  • 不同代码可能使用相同的类名、接口名、函数名或常量名,如果不使用命名空间,名称会起冲突,导致 PHP 执行出错。而使用命名空间,把代码放在唯一的厂商命名空间中,这样不同命名空间下的代码就可以使用相同的名称命名类、接口、函数和常量。
  • 在同一个命名空间或子命名空间中的所有类没必要在同一个 PHP 文件中声明。你可以在 PHP 文件的顶部指定一个命名空间或子命名空间,此时,这个文件中的代码就是该命名空间或子命名空间的一部分。因此,我们可以在不同的文件中编写属于同一个命名空间的多个类。
阅读全文 »


PHP 的正则流派

  • PHP 的三种正则引擎是 pregcregmb_ereg
  • 在默认情况下,preg 套件的正则表达式是以字节为单位的,所以「\C」默认等价于「(?d:.)」,由 s 修饰的点号。不过,如果使用了修饰符 u,则 preg 套件就会以 UTF-8 字母为单位,也就是说,一个字符可能由 6 个字节组成。即使这样,「\C」仍然匹配单个字节。
  • \z」和「\Z」都能够匹配字符串的末尾,而「\Z」同样能够匹配最后的换行符。
  • $」的意义取决于模式修饰符 mD:如果没有设定任何修饰符,「$」等价于「\Z」(在字符串结尾的换行符,或者是字符串结尾);如果使用了 m,则它能够匹配内嵌的换行符,如果使用了模式修饰符 D,它能够匹配「\z」(只有在字符串的结尾)。如果同时设置了 mD,则忽略 D
  • PHP 正则引擎的处理方式完全是程序式的。
阅读全文 »