品酒犹如品人生,以酒为命的东坡在《浊醪有妙理赋》直言“酒勿嫌浊,人当取醇”,心有戚戚焉。

我们喜欢大文豪苏东坡,除了他于人世浮沉中的旷达心胸,也由于他很懂得享受生活,嗜美食创佳肴。苏东坡也好饮,喜看他人饮酒,尝试酿酒,撰写酒经总结心得。

苏东坡酒量不大,自言下棋、饮酒、唱曲三事不如人,可见客举杯也很尽兴,在《书东皋子传后》自述:“予饮酒终日,不过五合(300毫升),天下之不能饮,无在予下者,然喜人饮酒,见客举杯徐引,则余胸中为之浩浩然,落落焉,酣适之味,乃过于客,闲居未尝一日无客,客至则未尝不置酒,天下之好饮,亦无在予上者。”

《东坡全集》提到“酒”字有924次,东坡词三百余首,有80首提到酒。酒乃“扫愁帚”、“钓诗钩”,东坡容易醉,诗文随处见:“饮一盏而醉,醉中味与数君无异”;“夜饮东坡醉复醒,归来仿佛三更”;“持杯月下花前醉,休问荣枯事,此欢能有几人知,对酒逢花不饮,待何时?”

据传是东坡唯一存世绘画《枯木怪石图》在2018年拍出天价。黄庭坚为东坡画题诗“东坡老人翰林公,醉时吐出胸中墨。”作为北宋四大书法家“苏黄米蔡”之一,东坡说过“吾酒后乘兴作数十字,觉气拂拂从十指中出也。”苏轼行书《爱酒歌》坦言“诗翁爱酒长如渴,瓶尽欲沽囊已竭”“诗成就我觅欢处,我穷正与君仿佛。曷不走投陈孟公,有酒醉君仍饱德”。

东坡享受饮酒之趣,还乐于酿造,一般文人很少这么身体力行,向他人取经。《东坡酒经》全文377字,记录酿造黄酒的过程,包含制曲、用料、用曲、投料、原料出酒率等,点出秘诀——“酿久者,酒醇而丰,速者反是,故吾酒三十日而成也。”

据说宋代流行喝黄酒、药酒和果酒,白酒比较少见。西蜀道士杨世昌赠送蜂蜜造酒秘方,东坡乐得在黄州私酿蜜酒,写《蜜酒歌》记之,并在《东坡志林》记录酿造法。东坡喝自酿蜜酒很high,但他人喝了一口全跑了,说是喝到了腐败的蜜汁味,还统统泻肚子。东坡仍笑呵呵,自认有品,他人不懂,干我何事?

贬官惠州时,东坡发现,此地无官方专卖酒类,每家各有佳酿。他兴致勃勃地用柑橘酿“橘子酒”,用桂圆(龙眼)酿“桂酒”,长子苏迈与三子苏过逃不了,尝了一口桂酒就打死不喝了,以后每提及此事,抚掌大笑。

东坡是很有品牌意识的,为私家酒取名,酒名皆美。“余家近酿,名之日‘万家春’。盖岭南万户酒也。”糯米酒“罗浮春”,出现在东坡诗《寓居合江楼》“三山咫尺不归去,一杯付与罗浮春”。东坡也是食荔枝最佳代言人,“日啖荔枝三百颗,不辞长作岭南人”千古流传,但其私酿荔枝酒仅留下美名“紫罗衣酒”。据传荔枝酒和梨酒都是宋代首创,酿造技术类似葡萄酒。

东坡来到定州,在曲阳取松膏酿酒,“救尔灰烬之中,免尔萤爝之劳”,取名“中山松醪”,并书《中山松醪赋》,称松醪酒“味甘余而小苦,叹幽姿之独高”。

贬至海南岛,东坡将当地生蚝浸酒或烤之,照酿不误,以米麦水三者酿造“真一酒”,大方送人秘方。他以天门冬(也叫百部草)汁液为酒曲,与糯米酿成有药性的米酒——天门冬酒,《山居要录》详载酿法,说“酒初熟味酸,久停则美香,余酒皆不及。”

东坡在海南岛酿过桂酒,说其酒色如玉,香味超然,饮后飘飘欲仙(《桂酒颂》),而他人却觉得“桂酒尝来犹如屠苏酒(药酒)”。他在海南儋州还饮过椰子酒,作诗《椰子冠》赞美椰子酒是天然之酒,无须仪狄(中国酿酒始祖之一),叹这一生“东坡何事不违时”。

品酒犹如品人生,以酒为命的东坡《浊醪有妙理赋》直言“酒勿嫌浊,人当取醇”,心有戚戚焉。功名在一杯之重中轻了,“常因既醉之适,方识此心之正”,共勉之。
Referenced from:https://www.zaobao.com/lifestyle/columns/story20210728-1174646

protobuf 交叉编译 for arm

github 地址:https://github.com/protocolbuffers/protobuf

下载最新版3.17.3

wget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.17.3.zip
mv v3.17.3.zip protobuf-v3.17.3.zip
unzip protobuf-v3.17.3.zip
cd protobuf-3.17.3/
./autogen.sh 
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ./configure --prefix=$(pwd)/install --host=arm-linux

会提示没有googletest,可以不用理他。

make && make install

受不了太慢

make -j8 && make install

cd install/lib
tree

.
├── libprotobuf.a
├── libprotobuf.la
├── libprotobuf-lite.a
├── libprotobuf-lite.la
├── libprotobuf-lite.so -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28 -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28.0.3
├── libprotobuf.so -> libprotobuf.so.28.0.3
├── libprotobuf.so.28 -> libprotobuf.so.28.0.3
├── libprotobuf.so.28.0.3
├── libprotoc.a
├── libprotoc.la
├── libprotoc.so -> libprotoc.so.28.0.3
├── libprotoc.so.28 -> libprotoc.so.28.0.3
├── libprotoc.so.28.0.3
└── pkgconfig

├── protobuf-lite.pc
└── protobuf.pc

1 directory, 17 files

file libprotobuf.so.28.0.3 

libprotobuf.so.28.0.3: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=3dc132b70a58e7012b755b18f076ff625359ef59, with debug_info, not stripped

编译好的头文件与lib文件下载包
protobuf-3.17.3-arm.tar.xz

八云酱 Github 下载链接:https://github.com/bayunjiang/typecho-sitemap

git clone https://github.com/bayunjiang/typecho-sitemap

Cloning into 'typecho-sitemap'...
remote: Enumerating objects: 67, done.
remote: Total 67 (delta 0), reused 0 (delta 0), pack-reused 67
Unpacking objects: 100% (67/67), 222.93 KiB | 419.00 KiB/s, done.

登陆 Typecho 后台,在插件管理处,启用相应插件即可。

sitemap 的访问路径即是一般认为的 https://const.net.cn/sitemap.xml

然后可以将站点地图链接放到index.php中。spider就能够抓取到了。

中国监管层要求滴滴出行从美国退市 因担心数据安全问题--彭博新闻 | 路透 update:2021-11-26
据彭博新闻周五报导,中国监管机构已要求叫车巨头滴滴出行DIDI.N的高管制定一个从美国证交所退市的计划,因为担心数据安全问题。

彭博引述知情人士报导称,中国监管机构希望滴滴管理层将该公司从纽约证交所退市,原因是担心敏感数据泄露。负责中国数据安全的中国网信办已指示滴滴制定相关细则。

滴滴出行和中国网信办没有回应路透的评论请求。

据彭博报导,正在考虑的提议包括直接私有化或在香港上市,之后再从美国退市。

报导引述消息人士的话称,如果进行私有化,要约报价将至少齐平于14美元的IPO价格,因为在6月首次公开发行后这么快就提出更低的报价可能会引发诉讼或股东抵制。

持有滴滴少数股权的日本软银集团9984.T,股价下挫逾5%。

消息人士曾经告诉路透,滴滴在6月推进其在纽约上市时惹怒了中国当局,监管机构曾敦促该公司在对其数据做法进行网络安全审查时暂停上市。

不久之后,中国网信办对滴滴收集和使用个人数据的行为发起调查。网信办称其非法收集数据,并要求应用程序商店删除滴滴运营的25个移动应用程序。

滴滴当时回应说,它已停止注册新用户,并将作出改变以符合国家安全和个人数据保护的规定,并将保护用户的权利。

Referenced from:https://cn.reuters.com/article/china-regulator-didi-delist-1126-idCNKBS2IB096?il=0

滴滴正在考虑私有化,以安抚中国当局,并补偿投资者自该公司在美国上市以来的损失。

该报引述知情人士报导称,随着监管打击扩大,滴滴出行一直在考虑退市计划,并已获得网络安全监管当局的支持。

滴滴发生这种转变距离其在纽约证券交易所(NYSE)上市仅仅一个月。滴滴在纽交所上市几天后,中国网络监管机构即对滴滴启动网络安全审查,审查期间停止新用户注册。

监管机构还要求要求应用商店下架滴滴出行APP。

报导还指出,滴滴一直在与银行家、监管机构和关键投资者进行谈判,探讨如何解决滴滴在纽约证交所上市后出现的问题。

报导称,滴滴已要求主承销商评估投资者对私有化计划的看法,以及他们能接受的定价范围。

Referenced from:https://cn.reuters.com/article/didi-privatization-rumor-probe-0729-idCNKBS2EZ1GN?il=0

据知情人士透露,中国网约车巨头滴滴(Didi Global Inc.,
DIDI)正考虑私有化,以平息中国监管部门的不满,并补偿投资者在该公司6月底在美国上市以来遭受的损失。

上述知情人士表示,总部位于北京的滴滴已经在与银行业人士、监管部门和主要投资者讨论如何解决该公司6月30日在纽约证券交易所上市后出现的一些问题。这些人士还称,正在考虑的初步选择之一是私有化,涉及对该公司公开交易的股票提出一项收购要约。

Referenced from:https://cn.wsj.com/articles/%25E6%25BB%25B4%25E6%25BB%25B4%25E8%2580%2583%25E8%2599%2591%25E7%25A7%2581%25E6%259C%2589%25E5%258C%2596%25E4%25BB%25A5%25E5%25AE%2589%25E6%258A%259A%25E4%25B8%25AD%25E5%259B%25BD%25E7%259B%2591%25E7%25AE%25A1%25E9%2583%25A8%25E9%2597%25A8%25E5%25B9%25B6%25E8%25A1%25A5%25E5%2581%25BF%25E6%258A%2595%25E8%25B5%2584%25E8%2580%2585-11627562409

7月29日晚,针对外媒报道称滴滴正在考虑私有化退市一事,滴滴回应称,有关私有化的传闻为不实信息,目前公司正积极全面配合网络安全审查。

有媒体报道指中国网约车巨头滴滴正在考虑私有化,但滴滴对此否认称,相关传闻为不实信息,目前公司正积极全面配合网络安全审查。

据路透社报道,滴滴出行昨天在官方微博发布了上述回应。滴滴美股昨天盘前涨幅收窄至10.3%,此前在出现公司将私有化的传闻后,滴滴股价涨幅一度高达50%。

Referenced from:https://www.zaobao.com/finance/china/story20210730-1175512

经常使用UDP发送数据,但一般都是小包,没有太关注过发送大包的问题。突然要发个大包,c++ udp send big packet。
就tcpdump wireshark抓包看了一下。
结果在tcpdump中,出现了这个东西。
UDP, bad length 5455 > 1472
看来UDP包长度超过MTU了。应该是分片了,但分片就分片,只要网络可靠,应该都没什么问题。

另外就是怕UDP的接收或者发送缓冲区不够了。

udp setsockopt sendbuf example

还有多网卡的问题。直接指定网卡,这个要用到struct ifreq.这是linux下的用法。
windows好像没有这个SO_BINDTODEVICE选项,不过可以使用静态路由的方式。可以参考这个链接:
多网卡指定网卡进行UDP通信(添加静态路由解决双网卡问题 )全记录
最后代码如下:

注意 struct ifreq 头文件如下: struct ifreq header file

#include <sys/ioctl.h>
#include <net/if.h>

int cudp::udp_send(string ip, int port, string data)
{
    printf("udp_send ip=%s,port=%d\n",ip.c_str(),port);
    int m_nsockfd;
    if ((m_nsockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
    {
        printf("udp_send error.\n");
        return -1;
    }
    struct ifreq ifr;
    memset(&ifr, 0x00, sizeof(ifr));
    strncpy(ifr.ifr_name, "eth0", 4);
    setsockopt(m_nsockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&ifr, sizeof(ifr));

    int addrlen = sizeof(sockaddr_in);
    struct sockaddr_in addr;
    bzero(&addr, sizeof(struct sockaddr_in));    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = inet_addr(ip.c_str());
    int sendbuff;
    socklen_t optlen;
    int res = 0;

    // Get buffer size
    optlen = sizeof(sendbuff);
    res = getsockopt(m_nsockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);

    if(res == -1)
        printf("Error getsockopt one");
    else
        printf("send buffer size = %d\n", sendbuff);

    sendbuff = 50*1024;

    printf("sets the send buffer to %d\n", sendbuff);
    res = setsockopt(m_nsockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));

    if(res == -1)
        printf("Error setsockopt");
        
    int ret = sendto(m_nsockfd, data.data(), data.length(), 0, (struct sockaddr *)&addr, addrlen);
    printf("sendto ret = %d\n", ret);
    return ret;
}