拯救新浪图床

拯救新浪图床

众所周知的原因,新浪图床挂掉了。以前一直依赖他,现在挂掉了,还是那句话,免费的总是最贵的。

早上花了一点时间总结了下现在可以替换的方法。

治标不治本的方法

替换数据库数据

可以在数据库中 通过 SQL 命令,把所有 ww1 ww2 ww3 ws1 开头的链接改成 tva1 开头

UPDATE wp_posts SET post_content = REPLACE (post_content, 'ww1', 'tva1');

header替换方法

header.php中添加

<meta name="referrer" content="no-referrer" />

一劳永逸的方法

我直接用腾讯云了。懒得折腾,当然也有人用别的比如下面的。

  • SM图床
  • github图床
  • 阿里云oss
  • 腾讯云ocs
  • 等等等

先导出数据,主要是wp_posts这个表的数据,导出为db_2019-06-12.sql,我写了一个脚本匹配出所有的新浪图片的地址,代码很简单,就一个正则

// index.js
var fs=require("fs");
var data=fs.readFileSync("./db_2019-06-12.sql","utf-8");

const regex = new RegExp("https://w(w|s)[0-9].sinaimg(.*?).jpg", "gi");

// var test = regex.exec(data);
var sqlData = data.match(regex);
const downList =sqlData.join('\n');
fs.writeFile('res2.txt', downList, err=>console.log(err));

然后有node环境的话,直接node index.js

这样就会把sql里的img地址全部导出了。导出之后会是一个list列表

之后把这个list放到 motrix下载

下载完成之后,全部同步的腾讯云,获取cos的地址

然后直接数据库暴力替换,new url 就是上面标出来的url

注意只需要改前缀,图片名称都是同步的,不需要改。

UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ws4.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ws1.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ws2.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ws3.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ww4.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ww1.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ww2.sinaimg.cn/large/', 'new url');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ww3.sinaimg.cn/large/', 'new url');

好了,这样就大功告成了

mac下我的个人笔记策略

主要推荐2个工具

  • Typora 直接书写
  • picGo

Typora

Typora 应该是mac下我个人感觉最好用的markdwon工具了,没有之一。我更换了类似bear的皮肤,大家喜欢的话可以直接去官网下载,而且他也支持自定义修改,只需要会一点css即可。现在还支持直接看到文件列表或者是文章的目录。我搭配使用dropbox或者icloud,然后根据文件夹,即可自动在云端同步。

picGo

搭配picGo,能够非常灵活的将图片存储到自己的云端。我大概再也不会想把图片存到杂七杂八的免费云空间了,图片都会掉光光。诶。非常的难过啊。

所以还是非常有必要将所有的图片存到自己的目录下。

改变create-react-app默认端口

ReactJS: Changing Default Port 3000 in create-react-app

总共有三种方法

  1. 配置全局变量
  2. 配置 package 文件
  3. 创建 .env

1)配置全局变量

export PORT=8000

2) 配置 package 文件

…
"scripts": {
"start": “PORT=8000 react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
…

3.创建 .env

PORT=8000

参考

ReactJS: Changing Default Port 3000 in create-react-app

react中不使用bind

Losing bind(this) in react.md

普通的写法

import React, { Component } from "react";

class ButtonWithBind extends Component {
constructor() {
super();

this.state = { toggle: false };
}

toggleButton() {
this.setState(prevState => ({ toggle: !prevState.toggle }));
}

render() {
const toggle = this.state.toggle;

return (
<div>
        <button onclick="{this.toggleButton}">
{toggle ? "ON" : "OFF"}
</button></div>
);
}
}

export default ButtonWithBind;

如果这个时候你点击这个按钮,会出现一个错误,表示这个 toggleButton函数没有定于。

我们可以通过在toggleButton 上绑定 this 来修复这个问题

this.toggleButton = this.toggleButton.bind(this);
import React, { Component } from "react";
class ButtonWithBind extends Component {
constructor() {
super();
this.state = { toggle: false };
this.toggleButton = this.toggleButton.bind(this);
}
render() {
const toggle = this.state.toggle;
return (
<div>
        <button onclick="{this.toggleButton}">
{toggle ? "ON" : "OFF"}
</button></div>
);
}
toggleButton() {
this.setState(prevState => ({ toggle: !prevState.toggle }));
}
}
export default ButtonWithBind;

拯救写法

toggleButton = () => {
this.setState(prevState => ({ toggle: !prevState.toggle }));
}

是不是非常的熟悉?

使用箭头函数能够直接指向他的上下文。这样就不用使用.bind(this)了

import React, { Component } from "react";
class ButtonWithoutBind extends Component {
constructor() {
super();
this.state = { toggle: false };
}
render() {
const toggle = this.state.toggle;
return (
<div>
        <button onclick="{this.toggleButton}">
{toggle ? "ON" : "OFF"}
</button></div>
);
}
toggleButton = () => {
this.setState(prevState => ({ toggle: !prevState.toggle }));
}
}

除了上述写法,其实也可以在render中使用一个箭头函数来拯救你的.bind(this)

import React, { Component } from "react";
class ButtonWithBind extends Component {
constructor() {
super();
this.state = { toggle: false };
// this.toggleButton = this.toggleButton.bind(this);
}
render() {
const toggle = this.state.toggle;
return (
<div>
        <button onclick="{()=">{this.toggleButton()}}>
{toggle ? "ON" : "OFF"}
</button></div>
);
}
toggleButton() {
this.setState(prevState => ({ toggle: !prevState.toggle }));
}
}
export default ButtonWithBind;

通过<button onclick="{()=">{this.toggleButton()}}&gt;这里新生成一个匿名函数直接调用,作用域的this还是正确的

References

Losing .bind(this) in React

利用Ifttt和ServerJiang转发安卓手机信息到微信

利用Ifttt和ServerJiang转发安卓手机信息到微信

安装ifttt

安卓手机下载ifttt软件,然后注册登陆。ifttt可能需要科学上网

设置 SMS接受触发器

点击 上面的This 然后搜索sms,选择 android sms、然后选择所有新的信息(Any new sms Received)。如下面2张图

ifttt

选择新短信触发

这里搜索webhooks,可以发起一个web请求

申请serverJiang

http://sc.ftqq.com/?c=code

进入上面的地址申请serverJiang

然后获得发起请求的地址

一般地址像下面这个样子,记得复制一下

https://sc.ftqq.com/xxxxxxxx.send

将这个地址填到URL里面,就是serverJiang地址 的这个地方

配置转发

Method: POST

Body: text=新的短信&desp=Text[发件人] (ContactName) [发件人号码] (FromName)

text 是你serverJiang微信端收到的标题,desp就是现实的信息。

收到信息

最后微信就能收到安卓手机的信息了