微创新:5种微小改变创造伟大产品

总结

  1. 真正的创新往往是“框架内的”
  2. 所有创新的阻碍,都是思想“固着”在挡碍。
  3. 想要真正的创新,必须“不妥协”。
  4. 创新技能不是天赋,是一种技能,任何人都能通过学习掌握它。
  5. 只有创意还远远不够。创新行为意味着生成一个新想法之后将其付诸实践。
  6. 头脑风暴并不像想象的那么有用
  7. 很多创新是多个创新方法交织的产物

少即是多:减法策略

去除某项功能,创造新的产品

分而治之:除法策略

将某项功能,改变空间形态实现,比如控制面板移除到遥控上,优化产品形态体积。
功能性除法:将某个功能改变其位置
物理型除法:将产品随机分解成若干部分
保留型出发:吧产品缩小

  1. 桶形高楼
  2. 剃须刀
  3. 双面胶

生生不息:乘法策略

  1. 画中画功能
  2. 自行车辅助轮

一专多能:任务统筹策略

  1. 向日葵计划
  2. 游戏中的图片识别任务
  3. 生命探测计划的分布式计算机资源

巧妙相关:属性依存策略

  1. 温度和颜色的关联
  2. 价格和时间的关系
  3. 披萨价格和送达时间温度的关系

属性依存策略是在两个先前没有关联的变量之间制造依存关系。

矛盾:创新路上的灯塔

  1. 每一个矛盾都将为你开辟一条未曾有人涉足的大路,这条路会将你带向一个充满无限可能性的资源宝库。
  2. 大部分矛盾都是假矛盾,它们存在于我们的思维中,却不是真正的矛盾。
  3. 许多矛盾事实上都源于观点的不同。通过假定某个矛盾是真矛盾--不管这是某个人的明确看法还是某些人的模糊看法,你都是在禁锢自己的创造力。
  4. 当你无法完全掌握信息,或是做出了不确定的错误假设时,假矛盾就会出现
  5. 大部分连接两个对立观点的限定词都是在不确定假设中形成的。它们有时时对的,有时是错的,这完全取决于假设是否准确。由于很多不确定假设都未经任何检验,因此它们中的大多数都是错误假设。这也解释了为什么这些限定词都是矛盾中的弱连结。去掉弱连结,矛盾就不攻自破。

pixel3 刷机root

  • fasttool 版本不能太高:fastboot version 31.0.3-7562133

  • 出厂固件:https://developers.google.com/android/images?hl=zh-cn
    pixel3可以用这个:
    https://dl.google.com/dl/android/aosp/blueline-sp1a.210812.016.c1-factory-b41403db.zip?hl=zh-cn

  • Magisk-v26.4.apk

注意:
fastboot 时,如果设备驱动不正确,有问号的话,会没有反应:
< waiting for any device >

pixel3需要的驱动:usb_driver_r13-windows.zip

参考:https://blog.csdn.net/StepTp/article/details/120678944

nginx支持ecc密钥的ciphers

在使用ecc密钥后,网页可能突然提示ciphers 或者protocol相关的错误,那么轻检查 nginx.conf 中的ssl_ciphers字段。
以下的配置支持ecc密钥:

ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;

当包含 ssl_ecdh_curve 参数时,一定要重点检测此参数,保证此参数内容跟ecc兼容,或者删掉此参数

曾文正公嘉言钞-书札

p014 复龙翰臣:
二三十年来,士大夫习于优容苟安,揄修袂而养姁步,倡为一种不白不黑不痛不痒之风,建友慷慨感激以鸣不平者,则相与议其后,以为是不更事轻浅而好自见。国藩昔厕六曹,目击此等风味,盖已痛很次骨。

p015 复黄子春:
国藩从宦有年,饱阅京洛风尘,达官贵人优容养望与在下者软熟和同之象,盖己稔知之而惯尝之,积不能平,乃变而为慷慨激烈、轩爽肮脏之一遂,思欲稍易三四十年来不白不黑、不痛不瘁、牢不可破之习,而矫枉过正,或不免流于意气之偏,以是屡蹈愆尤,丛讥取戾,而仁人君予,固不当责以中庸之道,且当怜其有所激而矫之之苦衷也。 
--翻译:
我做官有些年头,早就看惯了京师的官场习气,那些达官贵人生活优裕安逸,看重声望;下层的官员则圆滑世故,趋炎附势。这些问题见得多了,我的郁闷也越积越多,心绪久久不能平静,于是变成一种慷慨激烈、嫉恶如仇的性格。我一直希望能够稍稍改变三四十年来这种不白不黑、不痛不痒又牢不可破的积习,但有时候会采取矫枉过正的做法,不免有些意气用事的偏颇,因此屡遭埋怨和指责,招致讥讽和打击,但真正的仁人君子是不会以中庸之道来指责我的,他们应当体谅我这些矫枉过正的做法是有苦衷的。

p016 复石樵:
苍苍者究竟未知何若,吾辈竭力为之,成败不复计耳。

<复褚一帆>
愚民无知,于素所未见未闻之事,辄疑其难于上天。一人告退,百人附和,其实并无真知灼见;假令一人称好,即千人同声称好矣。

p017
<与刘霞仙>
虹贯荆卿之心,而见着以为淫氛而薄之;碧化苌宏之血,而览者以为顽石而弃之。古今同慨,我岂伊殊?屈累之所以一沉,而万世不复返顾者,良有以也。

p018
<与罗罗山、刘霞山>
时事愈艰,则挽回之道,自须先之以戒惧惕厉。傲兀郁积之气,足以肩仁艰巨,然视事太易,亦是一弊。

<致罗罗山>
凡善弈者,每于棋危劫急之时,一面自救,一面破敌,往往因病成妍,转败为功。善用兵者亦然。

p019
<与李次青>
急于求效,杂以浮情客气,则或泰山当前而不克己。以瓦注者巧,以钩注者惮,以黄金注者昏。外重而内轻,其为蔽也久矣。

《于李次青》
锐气暗损,最为兵家所忌。用兵无他谬巧,常存有余不尽之气而已。

p020
《与罗伯宜》
日中者昃,月盈则亏,故古诗“花未全开月未明”之句,君子以为知道。自仆行军以来,每介疑胜疑败之际,战兢恐惧,上下怵惕者,其后恒得大胜;或当志得意满之侯,狃于屡胜,将卒矜慢,其后常有意外之失。(启超按:处一切境遇皆如此,岂惟用兵?)

p021
《与刘霞仙》
欲学为文,当扫荡一副旧习,赤地新立。将前次所业荡然若丧其所有,乃始别有一番文境。(启超按:此又不惟学文为然也)

《复李希庵》
吾乡数人均有薄名,尚在中年,正可圣可狂之际;惟当兢兢业业,互相箴规,不特不宜自是,并不宜过于奖许,长朋友自是之心。彼此恒以过相砭,以善相养,千里同心,庶不终为小人之归。

config tigervnc in arch linux

pacman -Syu tigervnc

如果安装不成功,则需要手动下载安装包,通过 pacman -U xxx 来安装。

安装成功后,通过如下命令运行:
vncserver :1

默认会提示失败,需要继续设置:

  1. 用 vncpasswd 创建密码,它会将哈希处理之后的密码存储在 ~/.vnc/passwd。
  2. 编辑 /etc/tigervnc/vncserver.users 来定义用户映射。该文件中定义的每个用户都会拥有对应的端口来运行会话。该文件中的数字对应的是 TCP 端口。默认情况下,:1 是 TCP 端口 5901 (5900+1)。如果需要运行一个并行的服务端,第二个实例可以运行在下一个最大的、未被占用的端口,即 5902 (5900+2)。/etc/tigervnc/vncserver.users文件示例配置如下:
    :1=YourUserName

android下的dropbear编译

安卓默认的sshd应为路径权限的问题,无法正常工作,所以我们选用dropbear。

  1. 项目地址:https://github.com/ubiquiti/dropbear-android.git
  2. 配置ndk和交叉编译工具链:
diff --git a/build-dropbear-android.sh b/build-dropbear-android.sh
index 15042af..5be67ce 100755
--- a/build-dropbear-android.sh
+++ b/build-dropbear-android.sh
@@ -28,8 +28,9 @@ cd dropbear-$VERSION
 echo "Generating required files..."

 HOST=arm-linux-androideabi
-COMPILER=${TOOLCHAIN}/bin/arm-linux-androideabi-gcc
-STRIP=${TOOLCHAIN}/bin/arm-linux-androideabi-strip
+TOOLCHAIN=/xxx/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64
+COMPILER=${TOOLCHAIN}/bin/armv7a-linux-androideabi26-clang
+STRIP=${TOOLCHAIN}/bin/llvm-strip
 SYSROOT=${TOOLCHAIN}/sysroot

 export CC="$COMPILER --sysroot=$SYSROOT"

参考:
https://fh0.github.io/%E7%BC%96%E8%AF%91/2021/02/18/android-dropbear.html

systemctl开机运行脚本

通过systemctl开机运行特定脚本。

老生常谈,但是为了下次一步到位,节省几秒时间,还是整理下。

  1. /usr/lib/systemd/system 下添加xxx.service
[Unit]
After=network.service

[Service]
Type=forking
ExecStart=xxx             #为服务的具体运行命令
ExecReload=xxx          #为服务的重启命令
ExecStop=xxx             #为服务的停止命令

[Install]
WantedBy=multi-user.target
  1. 给服务文件设置必要的权限,比如754。注意你的目标sh也是有对应执行权限的。
  2. 使能脚本
systemctl daemon-reload
systemctl enable xxx.service
systemctl start xxx.service
  1. 检查是否运行
systemctl is-enabled xxx.service
  1. 其他systemctl 命令
    restart
    disable
    status
    list-units --type=service

unraid的encryption key file

当我们在unraid中启用加密文件系统后,每次开机就要输入密码或者使用key file。

那么unraid的 key file 又是什么东西和内容格式呢?
unraid的key file 就是加密密码的纯字符内容,注意文件不要待空换行。
可以用以下命令生成 :

echo -n "password" >keyfile

参考:
https://forums.unraid.net/topic/85495-unraid-newenckey-change-your-drive-encryption-unlock-key/

mac下如何做串口测试

window下的串口工具很多,大名鼎鼎的sscom之类。但是mac下就不是那么丰富了。

工具

https://github.com/Neutree/COMTool/releases/download/v3.2.1/comtool_macos_v3.2.1.dmg

mac 会提示安全风险,这个我们自己评估,承担风险,确认开启:
file

file

设置串口

适配器连线

这个根据自己实际需要配置。如果只看日志,只收不发,两根线就可以,双向收发就要3线了。
file
如图所示,蓝色是GND,另一根连接到适配器的rxd上。

选择适配器端口

根据我们使用的适配器,选择设备时会有所不同,要根据实际调整。我们使用的是cp2102是配器:
file

file

配置串口

根据需要配置波特率和参数就可以,比如我们当前的测试就是921600:
file

至此,就可以显示日志了,如果你要发送数据,选择正确的连线就可以。

ubuntu挂载smb

创建挂载目录

mkdir /media/nas

创建认证文件。若无密码可以忽略这一步。
sudo vim /root/.examplecredentials
按照以下格式写入用户名密码:

username=example_username
password=example_password
为确保安全,同时写入权限限制:

sudo chmod 400 /root/.examplecredentials
安装 cifs

sudo apt install cifs-utils
测试临时挂载。假设挂载服务器是192.168.18.112, 挂载文件夹是 sharedDir。

sudo mount -t cifs -o rw,vers=3.0,credentials=/root/.examplecredentials //192.168.18.112/sharedDir /media/nas
进入挂载目录查看是否正常:

cd /media/nas
设定开机自动挂载
编辑挂载文件:

sudo vim /etc/fstab
在最后面写入如下一行:

//192.168.18.112/share /media/share cifs nofail,vers=3.0,credentials=/root/.examplecredentials
重启查看是否生效。

ref:https://www.cnblogs.com/wx2020/p/17208158.html

与朱石翘书札

今方民穷财困,吾辈是不能别有噢咻生息之术,
计惟力去害民之人,以听吾民之自孳自活而已。

---现在的情况是,百姓无以为生,国家用度匮乏,我们也不可能有其他的办法让百姓们休养生息,所能做的也只是尽全力清除那些侵害百姓的人,让百姓们能够不受干扰地自己存活下去

复欧阳晓岑书札

集思广益非易事,
要当内持定见而六辔在手,
外广延纳而万流赴壑,
乃为尽善。

--集思广益本来就不是一件容易的事,关键是内心要持有不可动摇的主见,就像手握住套住群马的缰绳驾驭车马,广泛听取不同的意见,如同万条流水奔向沟壑,才能做到尽善尽美。

通过frp访问内网vnc服务

背景

需要远程访问内网linux桌面,而且anydesk等不好用,所以想到通用的vnc方案。但是设置端口映射后,发现依然端口无法访问,怀疑是被协议级检测了,所以想到frp穿透下。

方案

file

步骤

  1. 配置要ddns域名和端口映射,否则无法访问到内网主机
  2. 安装frps 和frpc,根据具体需要,可以是一台物理机,也可以是分开的主机。

配置

frps.ini

[common]
bind_port = 7000

frpc.ini

[common]
server_addr = 127.0.0.1
server_port = 7000

[ssh]
type = tcp
remote_port = 6000
local_port = 5900
local_ip = 127.0.0.1

注意:此配置表示frpc和vnc server在一个机器,如果不在一个机器,要实际修改local_ip

frp 开机启动

frpc

vim /lib/systemd/system/frpc.service

[Unit]
#服务描述
Description=frp service
After=network.target syslog.target
Wants=network.target
Requires=frps.service
After=frps.service

[Service]
Type=simple

TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 30

#执行命令
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
#启动
sudo systemctl start frpc
#关闭
sudo systemctl stop frpc
#重启
sudo systemctl restart frpc
#查看状态
sudo systemctl status frpc

frps

与frpc类似

[Unit]
#服务描述
Description=frp service
After=network.target syslog.target
Wants=network.target
Before=frpc.service

[Service]
Type=simple
#执行命令
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini

[Install]
WantedBy=multi-user.target

mount开机自动挂载smb路径

root用户编辑/etc/fstab文件,在末尾加入一行:

 //ip地址或计算机名/共享文件夹名 挂载点  smbfs   username=用户名,password=密码 0 0

说明:ubuntu12.10之后,smbfs被cifs代替了,需要:

  1. sudo apt-get install cifs-utils
  2. 将上面中的smbfs 换位cifs

从0开玩lichee zero-5-mmc烧录

一般比较小的系统我们用spi flash。 比较大的系统比如debian,我们需要mmc sd卡。

分区

file

准备

将所需的所有目标文件,都拷贝到当前目录下。

uboot

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

第一分区

cp boot.scr /mnt/sd/part1
cp sun8i-v3s-licheepi-zero-dock.dtb /mnt/sd/part1/
cp zImage /mnt/sd/part1

第二分区

tar vxf rootfs.tar -C /mnt/sd/part2

virtualbox 共享目录不生效

原因是guest addistions 没生效。

解决:
将virtualbox安装目录下的VBoxGuestAdditions.ios 加载到第一主光驱,然后重启:

file

然后运行:
cd /media/xxx/VBox_GAs_7.0.8
sudo shell VboxLinuxAdditions.run

执行完成后,再重新配置共享目录,发现确定是有更新的效果了,再去看挂载目录,就会发发现成功了

从0开玩lichee zero-3-rootfs编译

build

apt-get install linux-headers-$(uname -r)
wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar xvf buildroot-2017.08.tar.gz
cd buildroot-2017.08/
make menuconfig
make

troubleshoot

  • host-m4 版本问题:c-stack.c:55:26: error: missing binary operator before token "("
    解决: 由m4-1.4.18升级为m4-1.4.19。修改package/m4下的m4.mk和m4.hash
    m4.mk:

    M4_VERSION = 1.4.19

    m4.hash:

    sha256  63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96  m4-1.4.19.tar.xz
  • bison: Please port gnulib fseterr.c to your platform
    解决:cd output/build/host-bison-3.0.4

    sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
    echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
  • libfakeroot.c:99:40: error: '_STAT_VER' undeclared
    #ifndef _STAT_VER
    #if defined (__aarch64__)
    #define _STAT_VER 0
    #elif defined (__x86_64__)
    #define _STAT_VER 1
    #else
    #define _STAT_VER 3
    #endif
    #endif

从0开玩lichee zero-2-kernel编译

系统

为了支持 rtl8723 我们需要新较新的分支:
git clone https://github.com/Lichee-Pi/linux.git
git checkout -b nano-5.2-flash origin/nano-5.2-flash

cd linux
make ARCH=arm licheepi_zero_defconfig
make ARCH=arm menuconfig   #add bluethooth, etc.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules_install

支持 rtl8723BS

make menuconfig => Device Drivers => Staging drivers
选择rtl8723BS 为 M

troubleshoot

  • multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
    解决:vi ./scripts/dtc/dtc-parser.tab.c ,将YYLTYPE yylloc这一行注释掉

  • scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory
    解决:sudo apt install openssl libssl-dev

  • libz.so.1
    解决:apt-get install lib32z1

  • 其他指令问题 ,比如 "cpsid i","isb" 等
    解决:更换编译器,比如:
    https://releases.linaro.org/components/toolchain/binaries/
    https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz

unraid扩展虚拟机磁盘

unraid使用的是qcow2,超过最大空间后,提供提示空间不够了。

如何在不影响内容的情况下扩容?

扩展虚拟空间

qemu-img resize test.qcow2 +100G
qemu-img info test.qcow2

执行完以上动作后,内部的逻辑空间并没有增大,还需要继续调整

通过LVM扩展虚拟磁盘

https://www.codewoody.com/posts/18238/
https://fabianlee.org/2016/07/26/ubuntu-extending-a-virtualized-disk-when-using-lvm/

这里需要注意的是扩展LVM逻辑卷时,需要根据自己的实际卷来调整:

  • 要么扩展现有的卷,查看逻辑卷:
    root@ubuntu:/data# lvs
    LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    ubuntu-lv ubuntu-vg -wi-ao---- <118.00g    

    如上所示就一个 Ubuntu-lv卷

  • 要么自己创建新卷:
    lvcreate -n newlv -L 100G newvg

    newvg是 卷组名称

背景知识

https://linux.cn/article-12670-1.html

PV =>pvs
VG =>vgs
LV -lvs

lichee zero如何进入fel模式

当我们烧录了uboot后,系统默认不会再进入fel模式,这样我们就想反复更新uboot或者其他分区,那么

如何进入fel模式?

Zero有一个usb下载模式称为fel模式,进入fel模式有下面几种方式:

  • TF卡和spi flash 同时没有可启动镜像;
    也就是说你不插卡,且焊接的是新的或者没有有效镜像的spi flash,那就上电自动进入fel下载模式
  • TF卡中有进入fel模式的特殊固件 fel-sdboot.sunxi
    如果你的spiflash已经有了启动镜像,那么需要在TF卡中烧入一个sunxi提供的 启动工具 ( dd if=fel-sdboot.sunxi of=/dev/mmcblk0 bs=1024 seek=8 ), 那么插入该TF卡启动会进入fel模式;
  • 上电时SPI_MISO拉低到地
    该引脚为boot引脚,上电时出于低电平即会进入fel下载模式。

关于windows下如何写入fel-sdboot.sunxi,可以参看 https://goodmemory.cc/use-dd-cmd-in-windows/

windows下使用dd命令

"D:\Program Files\Git\usr\bin\dd.exe" if="J:\devolep\sunxi-tools-fel-win\bin\fel-sdboot.sunxi" of=/dev/sde bs=1024 seek=8
8+0 records in
8+0 records out
8192 bytes (8.2 kB, 8.0 KiB) copied, 0.086727 s, 94.5 kB/s

说明:需要在git bash中才能访问虚拟磁盘路径/dev/sde。具体为什么是sde,需要自己仔细核对,不要搞错了,可以通过ls /dev/sd*来查看所有的磁盘