TelegramBot

Telegram Bot Api

SendMessage

  • GET
    http://url/api/telegrambot/v1/sendMessage?username=xxx&text=xxx&interval=60
    http://url/api/telegrambot/v1/sendMessage?username=xxx&text=xxx

  • POST
    http://url/api/telegrambot/v1/sendMessage, body="username=xxx&text=xxx&interval=60"
    http://url/api/telegrambot/v1/sendMessage, body="username=xxx&text=xxx"

其中interval表示希望服务器对消息进行限制,如果上次发送该消息时间到现在不超过interval,则不发送。
如果不带该参数意味着可以随便发送,不受限制

query

  • GET

http://url/api/telegrambot/v1/query

可以查询这些消息的最后一次发送情况,以及blocktimes

漫谈交易

漫谈交易

交易是人类基本的社会和经济活动,每个人每天都要参与很多交易,很少有人去深入探索交易的本质。这篇文章就随便说说我对交易的认识。

交易是文明的体现

人类在蛮荒时代,没有交易活动,大家想要吃什么,就去野外采摘或者狩猎,当然也可以从别人那里抢。随着部落的壮大,农业的发展,社会分工形成,私有制的确立,人们通过交易或者抢夺方式去获取自己所需的资源。而大家普遍认为,交易是更加文明的方式,而通过暴力抢夺,则被认为是不文明的。

交易产生幸福感

交易本身不产生新的物品,但是交易产生了幸福。比如在原始社会,A是养猪的,B是养牛的,那么A和B交换一斤猪肉和一斤牛肉,只是A,B各自的需求得到满足,而产生了幸福。

我们小时候,随着父母去赶集,即使还没有购买任何物品,我们也是幸福满满,原因就是我们已经在期望交易的幸福感。女生喜欢逛街也是相同的道理。

城市的产生

如果A拿猪肉,没有换到牛肉,那么A是不幸福的。为了更好的满足需求,人们约定固定时间在固定地点交易,而形成市场。市场往往集中了大量的财物,导致有人想在市场,通过不文明的手段获取财物。有人成立了暴力组织,通过暴力维护市场秩序,而这些人后来成为了统治者。

统治者为了更好的管理市场秩序,他们用城墙围住市场,形成城市。统治者靠收交易费(税收)维持,为了获得更多税收,他们也会通过暴力攻打其他城市,因此城市之间相互有天然的侵略性。成功的统治者,所统治的城池越来越多,最后形成了国家。

交易的执行

当A和B交换猪肉和牛肉时,最基本的一个问题是,你先给我猪肉还是我先给你牛肉?

  • 监管交易

在有统治者监管的市场里,先后次序并不那么重要,不守纪律的交易者会被警察带走,并且收到惩罚。

  • 信用交易

如果双方有足够的互信,那么次序也不重要,这种信用交易往往出现在国际贸易中。比如中国的公司要购买墨西哥工厂的1000辆汽车,价格是一个亿人民币,如果相互之间没有信用,这个交易就很难达成。此时中国政府和墨西哥政府会介入交易,提供信用证以及海关保护的措施,利用国家信用来达成交易。

  • 威胁交易

这种交易发生在双方没有足够信用,又没有第三方监管时。比如A和B想达成非法交易,比如毒品,此时这种交易无法让政府监管,而且双方也不相信对方,那么交易时,交易场所外围有人持枪威胁,以胁迫交易达成。如果不达成交易,双方的损失比达成交易的损失还要大,交易也是可以顺利完成的。

总结

人生由一笔笔的交易组成,幸福或者不幸的感受,都是这些交易过程中产生的副作用。

无标题

curl -Ls https://mirrors.v2raya.org/go.sh | sudo bash
sudo systemctl disable v2ray --now
wget -qO - https://apt.v2raya.mzz.pub/key/public-key.asc | sudo apt-key add -
echo "deb https://apt.v2raya.mzz.pub/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list
sudo apt update
sudo apt install v2raya
sudo systemctl start v2raya.service
sudo systemctl enable v2raya.service

打开网页访问http://localhost:2017,创建用户和密码,如果忘记密码可以用

sudo v2raya --reset-password

重置密码

qDaemon

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char* argv[]) {
    QCoreApplication app(argc, argv);

    QStringList arguments = app.arguments();
    qDebug() << arguments;

    arguments.removeFirst();
    if(arguments.size() == 0) {
        qDebug() << "no daemon to run";
        return 1;
    }

    QProcess process;
    QString program = arguments.first();
    arguments.removeFirst();
    process.startDetached(program, arguments);
    qDebug() << QString("%1 is running with").arg(program) << arguments;
    return 0;
}

NodeJS+Express 记录

1. 初始环境

  1. npm init -y
  2. npm i express
  3. npm i --save nodemon
  4. 修改配置文件
"scripts": {
    "devStart": "nodemon server.js"
  },
  1. 创建server.js并编写代码
  2. npm run devStart

2. server.js

const express = require("express")
const app = express()

app.get("/", (req, res)=>{
    console.log("here")
    res.send("Hi")
})

app.listen(3000)

这些res方法可能也用得上

res.sendStatus(500)
res.status().send("hi")
res.status().json({message: "Error"})
res.json({message: "Error"})
res.download("server.js")
res.render("index")
res.redirect()

3. 路由案例users.js

const express = require('express')
const router = express.Router()

// 中间件也可以只加在router中
// router.use(logger)
// function logger(req, res, next) {
// do something
//}

router.get("/", (req, res) => {
    res.send("User List")
})

router.get("/new", (req, res) => {
    res.send("User New Form")
})

router.post("/", (req, res) => {
    const isValid = false
    if (isValid) {
        users.push({ firstName: req.body.firstName })
        res.redirect(`/users/${users.length - 1}`)
    } else {
        console.log("Error")
        res.render("users/new", { firstName: req.body.firstName })
    }
    res.send("Create User")
})

router.get("/:userId", (req, res) => {
    res.send(`GetUserWithId ${req.params.userId}`)
})


router
    .route("/home")
    .get((req, res) => {

    })
    .post((req, res) => {

    })

// 这个原理还是不太熟悉
router.param("id", (req, res, next, id) => {
    next()
})

module.exports = router

4. 使用路由的server.js

const express = require("express")
const app = express()

app.set("view engine", "ejs")

// 这样也会生效
/*app.get("/", logger, logger, logger, (req, res) => {
    res.render("index", { text: "World" })
})*/

// 注意这个中间件的位置
// 什么时候调用,什么时候生效
app.use(logger)

// app.get("/", (req, res) => {
//     res.render("index", { text: "World" })
// })
// 设置静态页面目录
app.use(express.static("public"))
    // 可以得到req.body ... 得到表单参数
app.use(express.urlencoded({ extended: true }))
    //app.use(express.json())

const userRouter = require("./routes/users")
app.use("/users", userRouter)

function logger(req, res, next) {
    console.log(req.originalUrl)
    next()
}

app.listen(3000)

5. 使用ejs模板

npm install ejs

server.js

const express = require("express")

const app = express()

app.use(logger)
app.set("view engine", "ejs")

app.use(express.static("public"))
app.use(express.urlencoded({ extended: true }))
const userRouter = require("./routes/users")
app.use("/users", userRouter)

a = 1

app.get("/", (req, res)=>{
    res.render("index", {a: a++})
})

function logger(req, res, next) {
    console.log(req.originalUrl)
    next()
}

app.listen(3000)

views/index.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <%- include('components/commonhead', {title: "Hello"}); %>
</head>

<body>
    <%- include('components/header'); %>
   
    <%= a %>

    <%- include('components/footer'); %>
    <%- include('components/commonjs'); %>
</body>

</html>

views/components/commonhead.ejs

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./third-party/bootstrap-3.4.1-dist/css/bootstrap.min.css">
<title><%= locals.title || "Title" %></title>

views/components/commonjs.ejs

<script src="./third-party/jquery-3.6.0.min.js"></script>
<script src="./third-party/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>

views/components/footer.ejs

footer

views/components/header.ejs

<nav class="navbar navbar-default">
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
           
            <a class="navbar-brand" href="#">FutureFund</a>

        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="#">Link</a></li>
                <li><a href="#">Link</a></li>
                <!-- <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                        aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">One more separated link</a></li>
                    </ul>
                </li> -->
            </ul>
            <!-- <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Search">
                </div>
                <button type="submit" class="btn btn-default">Submit</button>
            </form> -->
            <ul class="nav navbar-nav navbar-right">
                <!-- <li><a href="#">Link</a></li> -->
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                        aria-expanded="false"> <%= locals.text || "Default" %> <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a></li>
                    </ul>
                </li>
            </ul>
        </div>
        <!-- /.navbar-collapse -->
    </div>
    <!-- /.container-fluid -->
</nav>