我的GRE备考从8.21正式开始,8.28首考(成绩未提交),预计于9月底完成,目标155+170W3.5,总过程历时一个月半。本文阐述了在我的GRE备考过程中,提炼出的矛盾与方法论的汇总。
My GRE preparation started from 8.21, and the first test was 8.28 (scores not submitted). It is expected to be completed by the end of September. The goal is 155+170W3.5. The total process lasts one and a half months. This article explains the contradictions and methodologies that were extracted during my GRE preparation process.
我备考GRE的主要目的是,借助GRE的备考过程,有效提升英语词汇量与论文阅读水平(速度)。于此同时,此次备考过程也将成为Tomato Proj的有效试验,为今后实现有序和谐的生活节奏提供经验参考。此外,申请一些美国学校则也需要提供GRE成绩。
由于暑假投入大量时间,准备申研材料,学习积累专业知识,准备FYP,我只留下了1个月左右的时间准备GRE。因此,时间不足的问题需要由方法论的精进来弥补。
GRE数学的关键对于我们经理过理科高考的人来说,通过一定量的练习回顾,将期望调节到170左右,是比较轻松的。但是这并不意味着就可以对GRE数学掉以轻心。在备考GRE数学时,除了提高期望外,更加重要的是如何缩小方差。考虑到GRE数学在设计上时间较为紧张,只有35分钟,而且有可能会遇到一些很难的题,或者看不懂的题,这时就要果断跳过,及时止损。因此,在数学的备考过程中,需要形成一套判断是否跳过的判断机制,且判断耗时越少越好。
在数学的备考过程中,除了减小方差,也要有效提高期望。与高考不同的是,GRE数学的语言是英语,且还有一系列的逻辑陷阱。因此,要提高GRE数学的期望,需要对以下三点进行”程序化”处理,提炼出相应方法论。
尽管GRE数学的考试时间是否有限,但并不排除有时间会剩下的可能性。因此,可以注意锻炼一套有利于利用剩余时间差错的机制。比如,合理规划使用演草纸等。
通过这几天的训练,我发现了一个现象,及如果最开始看文章没有看懂,那么后面做题基本靠蒙。因此,GRE阅读一定要先将文章看懂。要实现这一点,可以通过提炼句子的s3版本,通过居间关系连接词对下一句内容进行预判,以此递归。
在有限的时间内把文章看懂。。
先把3000刷熟,再把托福词汇刷过。。然后再看看。刷单词时一定要批量(比如以500词为一组),多变。一天过好几遍,闪现就行,几天后就会见效。
把题目抽象成公式处理。。
My main purpose of preparing for the GRE is to effectively improve my English vocabulary and paper reading level (speed) with the help of the GRE preparation process. At the same time, this test preparation process will also become an effective test of Tomato Proj, providing an experience reference for the realization of an orderly and harmonious life rhythm in the future. In addition, GRE scores are also required to apply to some American schools.
Since I invested a lot of time during the summer vacation, preparing application materials, learning and accumulating professional knowledge, and preparing for FYP, I only left about 1 month to prepare for GRE. Therefore, the problem of insufficient time needs to be compensated by methodological refinement.
The key to GRE mathematics is relatively easy for our managers who have passed the science college entrance examination to adjust their expectations to about 170 through a certain amount of exercise review. But this does not mean that GRE math can be taken lightly. When preparing for the GRE math test, in addition to raising expectations, it is more important to reduce variance. Considering that GRE mathematics is relatively tight in design time, only 35 minutes, and there may be some difficult or unintelligible questions, then you must skip it decisively and stop the loss in time. Therefore, in the preparation process of mathematics, it is necessary to form a judging mechanism for judging whether to skip, and the less time-consuming judgment, the better.
In the preparation process of mathematics, in addition to reducing variance, we must also effectively raise expectations. Unlike the college entrance examination, the language of GRE math is English, and there are a series of logical traps. Therefore, in order to increase the expectation of GRE mathematics, the following three points need to be “programmed” to refine the corresponding methodology.
Although the time for the GRE math test is limited, it does not rule out the possibility that time will be left. Therefore, you can pay attention to exercise a set of mechanisms that are conducive to using the remaining time error. For example, rationally plan the use of cursive paper.
Through the training of the past few days, I have discovered a phenomenon, and if I did not understand the article at the beginning, then I basically rely on misunderstanding to do the questions later. Therefore, GRE reading must first understand the article. To achieve this, the s3 version of the sentence can be refined, and the content of the next sentence can be pre-judged through the intermediate relational connectives, so as to recurse.
Read the article in a limited time. .
First brush 3000, and then brush the TOEFL vocabulary. . Then look again. When scanning words, be sure to batch (for example, 500 words as a group), changeable. Pass it several times a day, just flash, and it will be effective in a few days.
Abstract the topic into formula processing. .
]]>为了准备2021硕士申请,我对一些喜欢的项目做了一些调查,并汇总在这里。
To prepare for my master’s application in 2021, I did some research on some of my favorite projects and summarized them here.
排名来源:QS2020, USNews2020, 上海交大2019,csrank.global.2010-2020
四个排名代表四种视角(QS->英国,USNews->美国,上海交大->中国,csrank->cs专业贡献)
以下信息部分摘自互联网,可能有错误!!
QS
: 9USNews
: 20上海交大
: 23csrank
: 73
申请模式:
两个志愿,录取时可以看到你的第二志愿。一年只能提交一次申请。
£33,250
条件
案例
£32,500
条件
QS
: 8USNews
: 21上海交大
: 15csrank
: 50
申请模式:
可以申请多次。申请由授课老师处理,不同院系不互通。
£28,530
条件
案例
£30,400
条件
QS
: 20USNews
: 28上海交大
: 31csrank
: 33
-
条件
案例
-
条件
QS
: 14USNews
: 23上海交大
: 13csrank
: 7 (参考清华8)
$56,550
条件
案例
$58,586
条件
QS
: 48USNews
: 82上海交大
: 95csrank
: 1
$50,100
条件
案例
QS
: 18USNews
: 7上海交大
: 8csrank
: 15
条件
QS
: 11USNews
: 34上海交大
: 67csrank
: 16
S$5,350.00
条件
条件
条件
QS
: 11USNews
: 43上海交大
: 73csrank
: 53
S$58,000.00
条件
S$3,350.00
条件
QS
: 29USNews
: 18上海交大
: 24csrank
: 18
12-24
月40
万/年条件
QS
: 6USNews
: 25上海交大
: 19csrank
: 10
条件
20-30
万
QS
: 18USNews
: 45上海交大
: 78csrank
: 28
20-30
万条件
Ranking Source:QS2020, USNews2020, ARWU2019,csrank.global.2010-2020
The four rankings represent four perspectives (QS->UK,USNews->US,ARWU->China,csrank->cs Industry)
The following information section is taken from the Internet and may contain errors!!
QS
: 9USNews
: 20ARWU
: 23csrank
: 73
Application mode:
Two choices. You can see your second choice when you are admitted.Applications can only be submitted once a year.
£33,250
Condition
Case
£32,500
Condition
QS
: 8USNews
: 21ARWU
: 15csrank
: 50
Apply Method:
You can apply multiple times.The application is handled by the instructor and is not interchangeable between different departments.
£28,530
Condition
Case
£30,400
Condition
QS
: 20USNews
: 28ARWU
: 31csrank
: 33
-
Condition
Case
-
Condition
QS
: 14USNews
: 23ARWU
: 13csrank
: 7
$56,550
Case
$58,586
Condition
QS
: 48USNews
: 82ARWU
: 95csrank
: 1
$50,100
Condition
Case
QS
: 18USNews
: 7ARWU
: 8csrank
: 15
Condition
QS
: 11USNews
: 34ARWU
: 67csrank
: 16
S$5,350.00
Condition
Condition
Condition
QS
: 11USNews
: 43ARWU
: 73csrank
: 53
S$58,000.00
Condition
S$3,350.00
Condition
QS
: 29USNews
: 18ARWU
: 24csrank
: 18
12-24
months400,000 RMB
/yearCondition
QS
: 6USNews
: 25ARWU
: 19csrank
: 10
Condition
QS
: 18USNews
: 45ARWU
: 78csrank
: 28
Condition
将blog从Typecho迁移到了Hexo。
Migrated blog from Typecho to Hexo.
]]>拜读了毛主席的实践论和矛盾论,第一次系统地接触了辩证唯物论这一方法论,深感其强大与自然。综合我自己先前的所经所悟,提炼出认知派生这一观点。
After reading Chairman Mao’s theory of practice and contradiction, it was the first time to systematically come into contact with the methodology of dialectical materialism, and I deeply felt its power and nature. Combining my own previous experience and understanding, I refined the view of cognitive derivation.
从巴甫洛夫的狗铃实验[1],到上世纪50年代费斯汀格的认知失调理论[2],再到1971年津巴多教授主导的斯坦福监狱实验[3],这一系列打破预期的心理学生理学实验,一步一步揭示出,人们心理的作用形式,似乎并非大多数人所认为的那样。实际上,这看似重大的心理学发现,其实早在两个世纪前,便已被马克思,恩格斯等人从社会学角度提出,并完善成为理论。后经列宁,斯大林等人通过实践进行完善。传入国内后,被毛泽东所集大成,结合了中国传统文化的底蕴,发展成为唯物辩证法的毛泽东思想。这一论理的形成,源自于这些人对自己所观察到的社会现象以及自己基于论理所实践的社会运动的归纳总结。而这一论理,又指导了中国共产党建国,扎实地完成国内资本原始积累地奇迹。
辩证唯物论是一套自洽的方法论,它能够有效地指导我们生活实践,从实践中总结论理,再将论理运用于实践的过程。而这一循环的高效运转,正是人类进化出认知的终极意义。
方法论是一种十分有效而重要的工具,它为人们提供了一套范式(习惯),帮助人们更有效地践行“社会实践->认识->论理->社会实践”这一模式。
[1] 巴甫洛夫 - 维基百科
[2] 認知失調 - 维基百科
[3] 斯坦福监狱实验 - 维基百科
From Pavlov’s dog bell experiment[1] to Festinger’s cognitive dissonance theory in the 1950s[2], to the Stanford prison experiment led by Professor Zimbardo in 1971[3], this A series of psychology students’ physical experiments that broke expectations reveals step by step that the role of people’s psychology does not seem to be what most people think. In fact, this seemingly important psychological discovery was actually put forward by Marx, Engels and others from a sociological point of view two centuries ago and perfected it into a theory. Later, Lenin, Stalin and others improved it through practice. After being introduced to China, it was collected by Mao Zedong, combined with the heritage of Chinese traditional culture, and developed into Mao Zedong’s thought of materialist dialectics. The formation of this theory stems from these people’s summary of the social phenomena they observe and the social movements they practice based on the theory. And this reasoning guided the founding of the Communist Party of China and solidly completed the miracle of domestic capital accumulation.
Dialectical materialism is a set of self-consistent methodology, which can effectively guide our life practice, conclude the theory from practice, and then apply the theory to the process of practice. The efficient operation of this cycle is precisely the ultimate meaning of human cognition.
Methodology is a very effective and important tool. It provides people with a set of paradigms (habits) to help people practice the model of “social practice -> knowledge -> theory -> social practice” more effectively.
[1] 巴甫洛夫 - 维基百科
[2] 認知失調 - 维基百科
[3] 斯坦福监狱实验 - 维基百科
分享一下改进版炸鸡块做法哦~
Share the improved version of fried chicken nuggets~
之前去欧洲旅游办签证,由于没有三个月的银行流水,不得已购买了旅行支票作为资金证明。可是到了欧洲才发现旅行支票很难使用,如果不了解行情会被骗收15%-20%的手续费。这篇Blog记录了我们发现的兑换旅行支票的坑和Tips!
Before I went to Europe for a tourist visa, I had to buy a traveler’s cheque as a proof of funds because I did not have a three-month bank flow. However, when I arrived in Europe, I found that traveler’s cheques were difficult to use. If I didn’t understand the market, I would be defrauded of 15%-20% handling fees. This blog records the pits and Tips we found in redeeming traveler’s checks!
[scode type=”info”]经验一: 尽可能不使用旅行支票[/scode]
[scode type=”info”]经验二: 旅支兑换最低手续费在4%左右[/scode]
若不想看经历,可直接调至文末兑换旅行支票的Tips处哦!
圣诞假和室友一行四人一起DIY游欧洲,去了意大利和奥地利两个国家,共5个城市。由于英国的银行卡还没有使用到三个月,无法通过打印流水来办签证,我们选择了另一种方法—购买American Express的欧元的旅行支票。殊不知啊,兑换和使用旅行支票真真是一个大坑。
最开始据旅行支票的官网上所说,欧洲很多城市的店铺里都能直接使用旅行支票,照这样来说,旅游时花掉它肯定比回英国后把它换回英镑划算的多(换回英镑的过程需要损失8%)。然鹅,出发前我们通过看他人的游记发现,欧洲现在很多店都无法直接花旅行支票(按我们后来实际旅行情况来看,只在威尼斯的好几家店看到了旅行支票的标识),于是我们决定去了就在机场红色标识的Change那里将它们全数换成欧元。
可到了第一站罗马找到了红色的Change后(如图),却发现700欧元只能给我们590多欧元。这可真的亏的不是一丁半点儿。我对象现场查到了American Express的电话,打过去发现人家现在在意大利没有设点,不过对方建议去银行换,说是可以毫无亏损(注意这也是个坑,,,)。由于有两人已经换了,为了止损,我们决定先不换剩下两人的700欧旅行支票,留着去银行换。
到了第三天,我们去了梵蒂冈那块儿玩,顺便去了附近American Express工作人员推荐的银行,还给中国银行打电话,结果均被告知不接受旅支。这可咋整?
这时刚好发现梵蒂冈周围有一堆change,于是又去问了问报价。其中有一家本来只报590多的,听见我们说另一家给了610多的价,说他们能给我们一个student discount,然后还算了算,报了个640。这下可好,我们开始发现这里面的门道了:其实哪有什么折扣,不过想找个借口吸引你罢了。这些change都是盈利性质的,你把旅支给了他们,他们再通过自己的途径卖给别的地方的American Express,中间可能有一点税收,但只要他们以比扣掉税收低的价格从你这里买下,他就一定能赚(一般还赚不少),不过是多赚点少赚点的区别罢了。而且当地有好几家change,我们主要发现了红色change标识的一家和蓝色的一家。若这家嫌你要求高不接受,那钱就让别家赚了呗。
所以这种时候,我们要想拿到高点的报价,就要掐准人家能接受的度(真的逼太狠了断了人家财路那就没辙了呀),然后通过让他们产生危机意识而提高报价。可以先问个几家,看他们一般会给多少,然后跟他说,别家给我了一个多少的价格。接下来这人可能就会开始打电话给上面的看能给个什么更高的价,叭叭一堆后给你一个略高一点的价格哈哈,你如果不太满意,可以再去找一家问问(不过要注意,如果是同一家的不同店面,要稍微注意点,毕竟他们上面的人可能是一个,说不定就记住你了)。一般来说,大致估估,如果说税可能是百分之二或三,那你起码还是得让人赚个20或30磅(当然你想试试再砍砍也可以,但可能难度会更大)。
于是我们最后两笔分别换的是640欧和645欧(645欧换了一家用类似方法换到的)。
以上就是所有关于旅支兑换的一些个人经历和小tips啦,当然这只是结合我们的个人体会总结的一些东西,还是要结合具体情况分析了。出去游玩肯定主要还是想多走走看看感受下,所以在经济条件允许的状况下也不建议大家在这件事上浪费太多时间,只要你自己觉得差不多能接受就行了。最后,还是想说,去意大利玩能不用旅行支票就还是别用了,毕竟真的挺麻烦还处处是坑!
[scode type=”info”]Experience One: Do not use traveler’s checks if possible[/scode]
[scode type=”info”]Experience Two: The minimum handling fee for travel exchange is around 4%[/scode]
If you don’t want to see the experience, you can directly transfer to the Tips where you can redeem traveler’s cheques at the end of the article!
During the Christmas holiday, I went to Europe with my roommates and a group of four on a DIY trip to 5 cities in Italy and Austria. Since the UK bank card has not been used for three months, it is not possible to apply for a visa by printing the record, so we chose another method-buying American Express’s Euro traveler’s cheque. As everyone knows, exchanging and using traveler’s checks is really a big pit.
According to the official website of traveler’s cheques, traveler’s cheques can be used directly in shops in many European cities. In this way, it’s definitely more cost-effective to spend it when traveling than to exchange it back in British pounds after returning to the UK. The British pound process requires a loss of 8%). Ran goose, we found through reading other people’s travel notes before departure that many stores in Europe cannot directly spend traveler’s checks (according to our actual travel situation later, we only saw the traveler’s check logo in several stores in Venice), so we When I decided to go, I changed all of them to Euros at the Red Marked Change at the airport.
But after I found the red Change at the first stop in Rome (pictured), I found that 700 euros could only give us more than 590 euros. This is really not the slightest loss. My subject checked the phone number of American Express on the spot. I called it and found that there is no location in Italy, but the other party suggested to change to the bank, saying that there is no loss (note that this is also a pit,,,). Since two people have already exchanged them, in order to stop the loss, we decided not to exchange the 700 Euro traveler’s cheques of the remaining two people, and kept them to the bank for exchange.
On the third day, we went to the Vatican to play. By the way, we went to the bank recommended by the staff of American Express nearby. We also called the Bank of China, but we were all told not to accept travel. How can this be neat?
At this time, I just found a bunch of changes around the Vatican, so I asked for a quote again. One of them originally only reported more than 590, but we heard that the other offered us a student discount of more than 610, and then it was a good deal and reported a 640. This is great, we are beginning to discover the doorway inside: there are actually no discounts, but I want to find an excuse to attract you. These changes are all profitable. You give them your travel, and they sell them to American Express elsewhere. There may be a little tax in the middle, but as long as they charge you at a lower price than the tax deducted If you buy it here, he will definitely make a profit (generally, he will make a lot of money), but it’s just the difference between earning more and less. And there are several changes in the local area. We mainly found the one with red change and the one with blue. If this family thinks that you are demanding and unacceptable, then the money will be made by others.
Therefore, at this time, if we want to get a higher offer, we have to pinpoint what is acceptable to others (it’s really too cruel to cut off people’s wealth, then it’s okay), and then let them have a sense of crisis. Increase the offer. You can ask a few companies first to see how much they generally give, and then tell him how much other companies give me a price. Next, this person may start to call the above to see what a higher price can be offered, and after a bunch of them, they will give you a slightly higher price. Haha, if you are not satisfied, you can ask another one. Ask (but be careful, if it is a different store in the same store, be careful, after all, there may be one person above them, maybe I will remember you). Generally speaking, if you say that the tax may be two or three percent, then you still have to earn a 20 or 30 pounds. (Of course, you can try to chop and chop again, but it may be more difficult. Big).
So our last two transactions were 640 Euros and 645 Euros respectively (645 Euros were replaced by a similar method).
The above is all the personal experiences and small tips about the exchange of travel expenses. Of course, these are just some things summarized based on our personal experience, we still need to analyze the specific situation. If you want to go out and play, you still want to walk around more to see how you feel. Therefore, it is not recommended that you waste too much time on this matter when economic conditions permit, as long as you feel that it is almost acceptable. Finally, I still want to say that if you don’t need traveler’s checks to play in Italy, you should not use it. After all, it is really troublesome and there are pits everywhere!
]]>一键激活win10家庭版,专业版,企业版,教育版 φ( ̄∇ ̄o)
Activate win10 Home Edition, Professional Edition, Enterprise Edition, Education Edition with one click φ( ̄∇ ̄o)
p.s. 如果不放心,请使用 方法二-源码安装
exe
程序->
仍然运行4
获取汉语翻译!!)脚本已发送到桌面
kms.bat
,如果不需要您可以删除它~
kms
或kms.bat
。->
仍然运行4
获取汉语翻译!!)您的激活码将保存在C:\Windows\kms.key
%temp%\kms.log
%temp%\kms.tried_keys
%temp%\kms.skms
%temp%\kms.ato
kms.bat
选择3
p.s. If you are not assured, please use Method Two-Source Installation
exe
program->
still running4
to get a Chinese translation!!)The script has been sent to the desktop
kms.bat
, you can delete it if you don’t need it~
kms
or kms.bat
in the run folder.->
still running4
to get a Chinese translation!!)Your activation code will be saved in C:\Windows\kms.key
%temp%\kms.log
%temp%\kms.tried_keys
on this machine%temp%\kms.skms
%temp%\kms.ato
kms.bat
and select 3
一分钟快速部署你自己的新型冠状病毒API ୧(๑•̀⌄•́๑)૭
Deploy your own new coronavirus API in one minute ୧(๑•̀⌄•́๑)૭
新型冠状病毒 实时数据 api
项目Git地址: iotcat/coro-api
项目npm地址: iotcat/coro-api
https://api.yimian.xyz/coro?province=山东
https://api.yimian.xyz/coro?city=泰安
https://api.yimian.xyz/coro?province=山东&city=泰安
nodeJS
支持express
任意版本git
任意版本1 | $ git clone https://github.com/iotcat/coro-api.git & cd coro-api |
1 | npm install |
1 | node index.js |
1 | http://localhost:17676 |
参数 | 描述 | 示例 |
---|---|---|
province | 省份(国家) | 山东 |
city | 城市 | 泰安 |
从index.js
第9行修改默认端口。
注释掉index.js
第13行。
1 | npm i -g pm2 |
将以下内容加入server{}
中
1 | location / { |
如果你不是从根目录映射,记得去index.js
中第11行app.get('/', f)
修改成你的路径。
爬虫使用coro-py, 请参考其文档。
本项目使用MIT协议,允许非署名商业非商业使用。武汉加油!中国加油!!❤
Novel coronavirus real-time data api
Project Git address: iotcat/coro-api
Project npm address: iotcat/coro-api
https://api.yimian.xyz/coro?province=Shandong
https://api.yimian.xyz/coro?city=泰安
https://api.yimian.xyz/coro?province=Shandong&city=Taian
nodeJS
supports any version of express
git
1 | $ git clone https://github.com/iotcat/coro-api.git & cd coro-api |
1 | npm install |
1 | node index.js |
1 | http://localhost:17676 |
Parameters | Description | Example |
---|---|---|
province | Province (Country) | Shandong |
city | city | Tai’an |
Modify the default port from line 9 of index.js
.
Comment out line 13 of index.js
.
1 | npm i -g pm2 |
Add the following content to server{}
1 | location / { |
If you are not mapping from the root directory, remember to go to the 11th line of index.js
and change app.get('/', f)
to your path.
The crawler uses coro-py, please refer to its documentation.
This project uses the MIT protocol, allowing non-signed commercial and non-commercial use. Go Wuhan! Go China! ! ❤
]]>自研香辣牛肉面做法~
Self-developed spicy beef noodle practice~
在英国留学,圣诞去欧洲旅游,DIY了意大利申根签证。现在游完归来,总结一份申根签攻略。
I studied in the UK, traveled to Europe on Christmas, and DIYed an Italian Schengen visa. Now come back from the tour, summarize a Schengen sign strategy.
Italy Consulate
joint travel confirmation letter
和护照复印件
joint travel confirmation letter
Booking Confirmation
上需要有paid
字样joint travel confirmation letter
和护照复印件
Booking
等知名网站订购最后展示一下我拿到的签证 ::aru:cheer::
Italy Consulate
joint travel confirmation letter
and a copy of passport
joint travel confirmation letter
paid
is required on Booking Confirmation
joint travel confirmation letter
and a copy of passport
Booking
Finally, let me show the visa I got~
先在这里留个空,以后慢慢填~
Leave a blank here first, then fill it in slowly~
φ( ̄∇ ̄o)
φ( ̄∇ ̄o)
]]>为了更清晰更直观的选择出明年居住的公寓,本文汇总了网络上对各公寓的评价信息,供决策参考。
In order to more clearly and intuitively choose the apartment to live in next year, this article summarizes the evaluation information of each apartment on the Internet for decision-making reference.
[scode type=”green”]大家积极在评论区补充哦,评论推荐使用qq邮箱[/scode]
[scode type=”yellow”]持续更新中…[/scode]
[scode type=”blue”]望大家能够补充更多房源,以便调查[/scode]
所有步行距离以Guild为中心!!
步行距离
: 8 min (西北)google地图
: Dover CourtOfficial Guide
: Dover Court优点
: 距Lidl近,安静,管理好,安全,定期有人清洁,social place好,楼下自习室很安静缺点
: 房间隔音一般,部分房间小,有的地方天花板低价格
: £155.54 pw (Last Year)步行距离
: 14 min (西)google地图
: Horizon Heights步行距离
: 13 min (西南)google地图
: St Luke’s View步行距离
: 11 min (西北)同学反映
: 不安静(老雷)步行距离
: 7 min (西北)步行距离
: 12 min (西)步行距离
: 12 min (南)步行距离
: 9 min (东)步行距离
: 9 min (东)步行距离
: 7 min (西)步行距离
: 9 min (西北) 步行距离
: 18 min (西南)步行距离
: 10 min (北)步行距离
: 10 min (西南)步行距离
: 13 min (西)步行距离
: 10 min (北)步行距离
: 18 min (西)步行距离
: 12 min (西北)其它
: 快递可以寄到Cambridge Court (梁斌)步行距离
: 8 min (南)google地图
: Cambridge Court缺点
: 隔音不好,地毯潮湿,条件差步行距离
: 21 min (西)缺点
: 一楼二楼隔音不好优点
: 回字形楼中间有一个小花园(娇娇,欣怡)[scode type=”green”] Everyone is actively adding in the comment area, comments recommend using qq mailbox[/scode]
[scode type=”yellow”]Continuously updating…[/scode]
[scode type=”blue”]I hope you can add more listings for investigation[/scode]
All walking distances are centered on Guild! !
walking distance
: 8 min (Northwest)google map
: Dover CourtOfficial Guide
: Dover CourtPros
: Close to Lidl, quiet, well managed, safe, cleaned regularly, good social place, quiet study room downstairsDisadvantages
: Room soundproofing is average, some rooms are small, and some places have low ceilingsPrice
: £155.54 pw (Last Year)walking distance
: 14 min (West)google map
: Horizon Heightswalking distance
: 13 min (southwest)google map
: St Luke’s ViewWalking distance
: 11 min (Northwest)Classmates' reflections
: Not quiet (Lao Lei)walking distance
: 7 min (Northwest)walking distance
: 12 min (West)Walking distance
: 12 min (South)walking distance
: 9 min (East)walking distance
: 9 min (East)walking distance
: 7 min (West)walking distance
: 9 min (Northwest)walking distance
: 18 min (southwest)walking distance
: 10 min (north)Walking distance
: 10 min (Southwest)walking distance
: 13 min (West)walking distance
: 10 min (north)walking distance
: 18 min (West)Walking distance
: 12 min (Northwest)Others
: Express can be sent to Cambridge Court (Liang Bin)walking distance
: 8 min (south)google map
: Cambridge CourtDisadvantages
: Poor sound insulation, damp carpets, poor conditionswalking distance
: 21 min (West)Disadvantages
: Sound insulation is not good on the first and second floorsAdvantages
: There is a small garden in the middle of Huizi Building (Jiaojiao, Xinyi)在英国留学与4个室友合租,为了更好的控制和监管公共支出,以及维持彼此之间的公共支出平衡,我利用迎新周三天时间设计并开发除了此ERP公共开支计划系统。希望此系统能够便捷接下来一年的生活,减少大家之间的矛盾,促使充满幸福感的公共支出项目持久化OωO
I studied in the UK and shared with 4 roommates. In order to better control and monitor public expenditures and maintain the balance of public expenditures between each other, I designed and developed this ERP public expenditure planning system during the welcome Wednesday. I hope that this system will make life easier for the next year, reduce conflicts between everyone, and promote the sustainability of public expenditure projects full of happiness OωO
前端基于一个网上找到的比特币网站平台模板,深度改造实现。值得一提的是,前端使用Ushio-js项目作为安全及日志插件,并得到了Ushio系统做背后支持。
后端使用php语言编写。提供5个接口,分别提供获取账户事件,获取内部流通信息,获取公共支出信息,获取周报表,操作的功能。
mail系统使用Yimian Mail API快速构建。
数据库使用yimian-db/mysql。构建了三个表,分别用于存储流水,公共支出详情,内部流通。
直接引用呓喵酱の图床代码,少量改写。
目前用额外网页简单实现,等待ushio-auth项目完成后统一整合。
没啥可说的,摆图,自己看
The front end is based on a Bitcoin website platform template found on the Internet, and a deep transformation is realized. It is worth mentioning that the front end uses Ushio-js project as a security and logging plug-in, and got Ushio The system does behind the scenes.
The backend is written in php language. Provides 5 interfaces, which respectively provide the functions of obtaining account events, obtaining internal circulation information, obtaining public expenditure information, obtaining weekly statements, and operating.
The mail system is quickly constructed using Yimian Mail API.
The database uses yimian-db/mysql. Three tables are constructed, which are used to store flow, public expenditure details, and internal circulation.
Directly quote the code of 呓喵酱の图床 with a small amount of rewriting.
At present, it is simple to implement with additional web pages, waiting for the ushio-auth project to complete the unified integration.
Nothing to say, show the picture, see for yourself
基于Home Assisstant搭建综合家庭照明系统,多媒体系统,水流系统的智慧家庭。技术点:天猫精灵交互,LoRa通信,MQTT协议,frp内网穿透,NAS存储,拨动开关电路改造。
Based on Home Assisstant, build a smart home with integrated home lighting system, multimedia system and water flow system. Technical points: Tmall Genie interaction, LoRa communication, MQTT protocol, FRP intranet penetration, NAS storage, and toggle switch circuit transformation.
结合所学知识,运用前沿技术,造福生活,是我长期以来的不懈追求。为了让家人体验到更加稳定、舒适智能的生活方式,同时也为了巩固憨实先前在学校smartfarm项目和我自己的ushio系统中所积累的技术基础以及架构经验,我决定在出国前,使用20到23整天时间,重构家中老旧的物联网系统。采用分层架构和面向接口、面向测试、面向文档开发原则,以稳定性(Available),可靠性(Reliable)为最优先指标,搭建一个运行目标3年以上的高度模块化的,易于远程操控的,开源的家庭软件硬件智能传感控制系统。
使用Arduino UNO作为计算单元。一方面,Arduino Uno拥有高可靠性,我之前的智慧窗帘系统使用Arduino Uno作为主控板,平稳运行1年半未出现硬件问题。另一方面,Arduino Uno拥有较大的RAM,无需为了争夺RAM而在单片机编程上煞费苦心。
Arduino UNO的缺陷主要是价格高,但是为保障长期稳定运行,这个成本是必要的。
使用ESP-01作为WiFi的通信模块。主要原因是之前学校课程使用过ESP-01搭建遥控小车,对其工作方式和性能比较了解,降低开发成本。
使用安信可 LORA RA-02 LORA作为LoRa节点和LoRa网关通信模块。原因是surf项目使用的就是这个模块,比较了解它。
智能音箱作为此物联网系统人机交互的最主要界面,发挥着举足轻重的作用。经研究,我使用天猫精灵方糖R作为家用智能音箱。一方面,天猫精灵的性价比摆在那里,非常便宜。第二,与小米开发小爱同学不同,阿里开发天猫精灵的目的是提供平台,它允许开发者以各种形式接入其网络,这一点对我至关重要。
初期设想: 单向控制+复位器。
实际实现:将原有单开改造为双开,一路与继电器串联,另一路与两个pin口相连。
采用WiFi+LoRa两种通信模式。在需要高速高质量通信的场景,如天猫精灵,手机,笔记本,使用WiFi作为通信手段。在WiFi信号不稳定的地方,使用LoRa进行通信。使用MQTT为应用层协议。
使用python3开源项目Home Assistant 为基础搭建本项目的主控系统。
多媒体主要由天猫精灵提供。此外,通过小米盒子,家庭网盘中的视频,图片,音乐实现了电视与音响上的播放。
dns.yimian.xyz提供dns解析服务。
通过挂载从老电脑上拆卸的闲置500G机械硬盘到老IBM服务器,实现存储系统的搭建。
对局域网内,由于家里都是win系统,使用smb作为共享协议实现文件传输,支持局域网内挂载。速度稳定,全网读写10MB/s左右。对外网访问,通过http,frp反代实现,但速度较慢。
2020.6 更新
基于先前积累的人体传感器数据,通过LSTM模型,使用keras训练神经网络,实现对开灯状态的预测。
Combining the knowledge I have learned and using cutting-edge technology to benefit life has been my unremitting pursuit for a long time. In order to let my family experience a more stable, comfortable and intelligent lifestyle, and to consolidate the technical foundation and architecture experience accumulated in the school smartfarm project and my own ushio system, I decided to use 20 to 23 before going abroad. All day long, reconstruct the old IoT system at home. Adopt a layered architecture and interface-oriented, test-oriented, and document-oriented development principles, with Available and Reliable as the highest priority indicators to build an operational target 3. A highly modular, easy-to-remote control, open source home software and hardware intelligent sensor control system for more than years.
Use Arduino UNO as the calculation unit. On the one hand, Arduino Uno has high reliability. My previous smart curtain system used Arduino Uno as the main control board, and it ran smoothly for one and a half years without hardware problems. On the other hand, Arduino Uno has a larger RAM, so there is no need to bother to program the microcontroller in order to compete for RAM.
The main disadvantage of Arduino UNO is its high price, but this cost is necessary to ensure long-term stable operation.
Use ESP-01 as the WiFi communication module. The main reason is that the ESP-01 has been used to build a remote control car in the previous school courses, and I have a better understanding of its working methods and performance to reduce development costs.
Use Anxinke LORA RA-02 LORA as the communication module between LoRa node and LoRa gateway. The reason is that this module is used in the surf project, so I understand it better.
As the most important interface for human-computer interaction in this Internet of Things system, smart speakers play a pivotal role. After research, I use Tmall Elf Sugar R as a home smart speaker. On the one hand, the price/performance ratio of Tmall Genie is very cheap. Second, unlike Xiaomi’s development of Xiao Ai, the purpose of Ali’s development of Tmall Genie is to provide a platform that allows developers to access its network in various forms, which is very important to me.
Initial idea: one-way control + reset device.
Actual realization: The original single-opening is transformed into double-opening, one is connected in series with the relay, and the other is connected with two pin ports.
Two communication modes of WiFi+LoRa are adopted. In scenarios that require high-speed and high-quality communication, such as Tmall Genie, mobile phones, and notebooks, use WiFi as a means of communication. In places where the WiFi signal is unstable, use LoRa for communication. Use MQTT as the application layer protocol.
Use the python3 open source project Home Assistant as the basis to build the main control system of this project.
Multimedia is mainly provided by Tmall Genie. In addition, through the Xiaomi box, the video, pictures, and music in the home network disk can be played on the TV and stereo.
dns.yimian.xyz provides dns resolution service.
By mounting the idle 500G mechanical hard disk removed from the old computer to the old IBM server, the storage system is built.
In the local area network, since the home is a win system, smb is used as a sharing protocol to realize file transfer and supports mounting in the local area network. The speed is stable, and the whole network reads and writes about 10MB/s. Access to the external network is realized through http and frp reverse generation, but the speed is slow.
2020.6 update
Based on the previously accumulated human sensor data, the LSTM model is used to train the neural network using keras to realize the prediction of the light state.
]]>本文详细介绍了XJTLU大学2019暑期科研SmartFarming Proj物联网架构的设计思路,实施情况以及缺陷反思。
This article introduces in detail the design ideas, implementation status and defect reflections of the SmartFarming Proj IoT architecture of XJTLU University’s 2019 summer scientific research.
为了探究农业物联网技术的可行性,Alam Mohammed导师希望我们能够提供一个稳定(Available)并可靠(Reliable)的物联网系统,以实现对农田的智能监控和管理。这个系统将能够适时地探测土壤以及空气中与植物健康相关的参数,处理并存储这些数据(由Alam提出)。同时,自动化控制的灌溉功能(由Caleb提出)以及一些数据展示方法(由Alam提出的可选需求)也被期待由本系统提供。
由于是针对农业物联网设计的小型科研项目,项目的目标是对农业物联网的可行性进行探究,愿景是模拟最普遍的小型农业物联网应用场景。因此本架构的定位是适用于大部分具备感知,控制和展示功能的小型农业物联网工程。
MQTT
: MQTT消息队列遥测传输(Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议[1]。
LoRa
: LoRa是当前市场上的一种新兴技术,其在1 GHz以下的公共频段中运行,用于远距离低功耗通信[2]。
本架构功能性需求主要包括土地数据采集,气象数据采集,灌溉系统控制,与无人机小组系统进行交互,网页控制台(可查看实时和历史传感数据,指标数据;能够控制系统)。
通信范围(测试)
:半径不低于1km通信范围(生产)
:半径不低于3km延时
:平均小于1s超时率
:不超过5%资源占用
:节点RAM不超过2k运行周期
:1分 (测试) | 15分 (生产)节点名称 | 硬件设施 | 软件集群 |
土地节点 Ground Nodes | Arduino Nano | Arduino.h |
SX1278 LORA模块 | SPI.h | |
LM35DZ 温度传感 | LoRa.h | |
土壤湿度传感 | LoRa-Socket.h | |
四分电磁阀 | LoRa-mqtt.h | |
vector.h | ||
气象站节点 Air Station | Arduino Nano | Arduino.h |
SX1278 LORA模块 | SPI.h | |
BME280 温度,湿度,大气压强传感 | LoRa.h | |
GY-30 光强传感 | LoRa-Socket.h | |
MQ-135 空气质量传感 | LoRa-mqtt.h | |
MQ-7 一氧化碳传感 | vector.h | |
雨量传感 | ||
LoRa 网关 LoRa Gateway | SX1278 | Arduino.h |
SPI.h | ||
WiFi.h | ||
LoRa.h | ||
LoRa-Socket.h | ||
LoRa-mqtt.h | ||
vector.h | ||
PubSubClient.h | ||
内网控制器/MQTT代理 Controler/MQTT Proxy | 树莓派3B - RASPBIAN | Python3.7 |
直流变频水泵 | NodeJS | |
sf-mqtt-proxy@npm | ||
sf-pump@npm | ||
forever@npm | ||
云服务器 Cloud Server | 华为云主机 - Centos7.4 | Nginx/1.12.2 |
NodeJS/12.4.0 | ||
Redis/3.2.12 | ||
sf-mqtt-broker@npm | ||
sf-web-api@npm | ||
forever@npm | ||
数据库 Database | 华为云数据库 | MySQL 5.7.23 |
按照生产场景预估,每15分钟产生一组数据集合,一组数据集合约占用253-291字节。按照291计算,每天将新增27.93KB数据。
为了优先确保通信以及服务的稳定性和可拓展性,我们选取分层模型作为架构的设计模式。整个系统分成多个层级,层级之间具备必要的交互行为。每个层级都独立运行,崩溃时会迅速重启,具备高度的可靠性。
安全上,采取内外网隔离的方法。内网中考虑到部分设备计算资源稀缺,与内网服务器的交互采用不加密的通信模式。内网服务器通过SSL加密的方式与云服务器进行交互。为了确保客户端的资料安全,云服务器API只接受具备SSL加密的HTTP和WebSocket请求。
本架构的主要目的是提供一个稳定(Available)并可靠(Reliable)的物联网系统,通过采集农田中的实时数据,结合通过无人机采集的图片以及CNN判断的植物健康情况,实现对灌溉系统以及植物健康状况的智能管理。本架构理论上适用于大部分农场环境。测试环境半径2~5km(取决于天线)以内,风力3级以下。本系统通过传感器获取农田数据,通过晶体管电路,继电器等控制灌溉系统,通过网页与API与管理者进行交互。
此图展示了此架构的抽象层级结构。正如其所指出的,此分层架构可明确为感知层,网络层,应用层三个横向操作层以及一个纵向错误处理层。
其中,感知层又可细化为环境层以及硬件层。环境层中包含植物,土壤,空气,水流等我们要检测和控制的自然物体,硬件层通过传感器、控制器等人造电气设备为系统对自然要素的交互行为(检测,控制)提供了底层技术可行性。当感知层实现对自然信息的交互后,相应的数字信息被传往网络层进行通信。相应的,感知层也会从网络层接受相应的控制信息,并根据这些指令做出相应的控制行为。
网络层分为三层。其中最低一层为预处理层,它的主要任务是对感知层采集的数据进行打包处理,转变成网络流通所适合的形式,如套接字。因此,预处理层需要少量的计算存储资源,比如单片机,EEPROM等。经过预处理层的封装后,数据被传往物理层。基于物理层中的网关、路由器等设备,这些数据包得以被有秩序的分发和传递。通信层中的MQTT协议的应用,使得这些数据包分发的管理更加高效与便利。此外,通信层中QoS服务质量检测体系的实施也使得网络层的性能更加的容错和可靠。
应用层主要负责一些应用层面的服务于业务逻辑,比如数据分析,事件处理等。在应用层的最底端,服务层在长期的运转着。服务层是应用层中最近接网络层的部分,它的主要目的是实时处理从网络层传入的数据,并对相应的请求及错误事件进行快速响应。同时,服务层也负责将传感器采集的数据进行整理分析并传递到数据库层进行存储。为了保证服务的可靠性,服务层的实现程序被注册为系统服务并由专门的守护进程进行守护。与服务层的长期运行不同,业务层则是按需唤起。当界面层有新的请求传入或服务层发生特定的事件时,业务层将会被调用并处理它们。除了一些基础的数据分析外,业务层也有权限向AI层进行分析请求。AI层通过分析从无人机传回的图像数据后,会传回一个判断结果给业务层。根据请求的具体内容,业务层会将图像识别结果,历史传感器数据等进行整理,并传递到界面层。界面层则主要用来提供不同形式的接口,比如HTTP接口和WebSocket接口,以方便客户端调用。
从拓扑结构来看,如上图所示,整个系统物理上可划分为土地节点,气象节点,LoRa网关,内网服务器,云服务器,数据库和用户终端。
从功能机制上看,整个系统包含:传感器模块,LoRa通信模块,LoRa网关模块,MQTT-Proxy代理模块,水泵控制模块,MQTT+数据处理模块,web接口模块,守护进程模块和数据库模块。
土地节点
土地节点部署于不同区域的农田中,用于探测土壤温度,湿度参数,并能够提供对相应位置水流电磁阀的控制。土地节点使用Arduino Nano作为计算单元,使用LoRa作为通信方式连接LoRa网关(和其它节点),使用电池供电。其数量较多,工作环境恶劣,无线通信不稳定,是系统中最大的不确定性来源。
气象节点
气象节点部署于农田特定位置,用于探测空气温度,湿度,大气压,降雨量,光照,NH3浓度,CO浓度等气象参数。气象节点使用Arduino Nano作为计算单元,使用LoRa作为通信方式连接LoRa网关(和土地节点),使用电池或有线供电。其工作环境较为恶劣,无线通信质量一般。
LoRa网关
LoRa网关部署于室内,为扩大有效通信半径,其天线可延伸至室外。LoRa网关通过LoRa连接各土地节点和气象节点,通过WiFi连接内网服务器。LoRa网关能够将通过LoRa传入的socket包转换为mqtt消息并传递给内网服务器,以及将内网服务器传来的mqtt消息转换为socket包通过LoRa发送至指定节点。
内网服务器
内网服务器是一个树莓派3B,它包含三个功能模块:MQTT-Proxy代理模块,水泵控制模块以及守护进程模块。
MQTT-Proxy代理模块能够接收由LoRa网关通过WiFi发送的mqtt消息,对其进行SSL加密并转发至云服务器。同时,MQTT-Proxy代理模块也将接受指定的来自云服务器的mqtt消息,将其解密并转发至LoRa网关。
水泵控制模块通过树莓派的GPIO通过继电器控制水泵的状态。与水泵控制模块直接与云服务器进行mqtt通信,不经过MQTT-Proxy代理。
守护进程模块运行在Linux上,用于监视MQTT-Proxy代理模块和水泵控制模块。当探测到模块停止运行时,守护进程模块会及时重启这些模块,以确保服务的稳定性和连续性。
云服务器
云服务器运行在位于北京的华为云上,包含MQTT+数据处理模块,web接口模块和守护进程模块。
MQTT+数据处理模块包含了层级结构中的Service层和Business层。这个模块通过mqtt与内网进行通信,通过mqtt, redis与web接口模块(和AI模块)进行交互。当收到来自内网的各种散列的数据后,本模块会自动对它们进行聚合,整理成一条一条的数据,存入数据库,并通过redis推送给web接口模块。此外,本模块会定时向各节点发送请求以获取它们的数据,这些请求将被追踪以计算延时。
web接口模块提供一系列的HTTP和WebSocket接口。这些接口可用于获取数据,发送指令,刷新数据以及获取推送消息。
守护进程模块运行在Linux上,用于监视MQTT+数据处理模块和web接口模块。当探测到模块停止运行时,守护进程模块会及时重启这些模块,以确保服务的稳定性和连续性。
LoRa通信模块用于在单信道情况下实现稳定可靠的socket通信。本模块包含LoRa-socket和LoRa-mqtt。
LoRa-socket是在LoRa-Arduino的基础上进行了数据包的封装,实现了简单的udp和tcp通信,让传统的LoRa通信更加可靠。通过在数据包的head添加收发ip地址,以及在数据包的最后添加hash校验值,LoRa-socket支持点对点通信和广播通信,并且具有强大的噪音处理能力和数据防篡改能力。
项目地址:iotcat/LoRa-socket
LoRa-mqtt是在LoRa-socket基础上对mqtt协议进行的一个简单再现。基于udp和tcp,LoRa-mqtt支持qos为0和1的mqtt通信。
项目地址:iotcat/LoRa-mqtt
本模块运行在内网服务器,实现了对内网mqtt的加密转发。
项目地址:iotcat/sf-mqtt-proxy
本模块运行在内网服务器,实现了通过GPIO对继电器水泵的控制。
项目地址:iotcat/sf-pump
本模块运行在云服务器,实现了对来自底层mqtt消息的数据聚合,处理和存储。
项目地址:iotcat/sf-mqtt-broker
本模块运行在云服务器,实现了功能性接口的提供。
项目地址:iotcat/sf-web-api
上图展示了土地节点(左),气象节点(右),水泵(下)的延时统计折线图。由图可以看出,土地节点的平均延时在730ms左右,气象节点延时在900ms左右,水泵的延时较低,在45ms左右。
Reference List:
[1] OASIS, (2015,12.10). MQTT Version 3.1.1 Plus Errata 01 [Online]. Available: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html
[2] Sinha, R.S., Wei, Y. and Hwang, S.H., “A survey on LPWA technology: LoRa and NB-IoT”, in Ict Express, 3(1), pp.14-21, 2017.
In order to explore the feasibility of agricultural Internet of Things technology, instructor Alam Mohammed hopes that we can provide a Available and Reliable Internet of Things system to realize intelligent monitoring and management of farmland. This system will be able to timely detect the parameters related to plant health in the soil and the air, process and store these data (proposed by Alam). At the same time, the automatic control irrigation function (proposed by Caleb) and some data display methods (optional requirements proposed by Alam) are also expected to be provided by this system.
As it is a small scientific research project designed for the agricultural Internet of Things, the goal of the project is to explore the feasibility of the agricultural Internet of Things, and the vision is to simulate the most common small-scale agricultural Internet of Things application scenarios. Therefore, the positioning of this architecture is applicable to most small agricultural IoT projects with sensing, control and display functions.
MQTT
: MQTT Message Queuing Telemetry Transport is a message protocol based on the publish/subscribe paradigm under the ISO standard (ISO/IEC PRF 20922). It works on the TCP/IP protocol suite and is a publish/subscribe message protocol designed for remote devices with low hardware performance and poor network conditions [1].
LoRa
: LoRa is an emerging technology in the current market, which operates in the public frequency band below 1 GHz for long-distance low-power communication [2].
The functional requirements of this architecture mainly include land data collection, weather data collection, irrigation system control, interaction with the drone group system, web console (can view real-time and historical sensor data, index data; be able to control the system).
Communication range (test)
: the radius is not less than 1kmCommunication range (production)
: the radius is not less than 3kmDelay
: average less than 1sTimeout rate
: no more than 5%Resource occupation
: Node RAM does not exceed 2kRun cycle
: 1 minute (test) | 15 minutes (production)Node name | Hardware facilities | Software cluster |
Ground Nodes Ground Nodes | Arduino Nano | Arduino.h |
SX1278 LORA module | SPI.h | |
LM35DZ temperature sensor | LoRa.h | |
土壤湿度传感 | LoRa-Socket.h | |
Four-point solenoid valve td> | LoRa-mqtt.h | |
vector.h | ||
weather station node Air Station | Arduino Nano | Arduino.h |
SX1278 LORA module | SPI.h | |
BME280 温度,湿度,大气压强传感 | LoRa.h | |
GY-30 light intensity sensor | LoRa-Socket.h | |
MQ-135 air quality sensor | LoRa-mqtt.h | |
MQ-7 carbon monoxide sensor< /a> | vector.h | |
rainfall sensor | ||
LoRa Gateway LoRa Gateway | SX1278 | Arduino.h |
SPI.h | ||
WiFi.h | ||
LoRa.h | ||
LoRa-Socket.h | ||
LoRa-mqtt.h | ||
vector.h | ||
PubSubClient.h | ||
Intranet Controller/MQTT Proxy Controler/MQTT Proxy | Raspberry Pi 3B-RASPBIAN | Python3.7 |
DC frequency conversion water pump | NodeJS | |
sf-mqtt-proxy@npm | ||
sf-pump@npm | ||
forever@npm | ||
Cloud Server Cloud Server | Huawei Cloud Host-Centos7.4 | Nginx/1.12.2 |
NodeJS/12.4.0 | ||
Redis/3.2.12 | ||
sf-mqtt-broker@npm | ||
sf-web-api@npm | ||
forever@npm | ||
Database Database | Huawei Cloud Database | MySQL 5.7.23 |
According to the production scenario, a data set is generated every 15 minutes, and a data set occupies about 253-291 bytes. According to 291 calculation, 27.93KB of data will be added every day.
In order to prioritize to ensure the stability and scalability of communication and services, we select layered model as the design mode of the architecture. The entire system is divided into multiple levels, with necessary interactions between levels. Each level runs independently, restarts quickly when it crashes, and has a high degree of reliability.
In terms of safety, the method of internal and external network isolation is adopted. Taking into account the scarcity of computing resources of some devices in the intranet, the interaction with the intranet server adopts an unencrypted communication mode. The intranet server interacts with the cloud server through SSL encryption. To ensure the security of the client’s data, the cloud server API only accepts HTTP and WebSocket requests with SSL encryption.
The main purpose of this architecture is to provide a stable (Available) and reliable Internet of Things system, which collects real-time data in farmland, combines pictures collected by drones and judged by CNN Plant health, realize intelligent management of irrigation system and plant health. This framework is theoretically suitable for most farm environments. The test environment is within a radius of 2~5km (depending on the antenna), and the wind is below level 3. This system acquires farmland data through sensors, controls the irrigation system through transistor circuits, relays, etc., and interacts with managers through web pages and APIs.
This figure shows the abstract hierarchy of this architecture. As pointed out, this layered architecture can be clearly defined as the perception layer, network layer, application layer, three horizontal operation layers, and a vertical error handling layer.
Among them, the perception layer can be further refined into environment layer and hardware layer. The environment layer contains plants, soil, air, water and other natural objects that we want to detect and control. The hardware layer provides the underlying technology for the system’s interactive behavior (detection, control) of natural elements through artificial electrical devices such as sensors and controllers. Sex. When the perception layer realizes the interaction of natural information, the corresponding digital information is transmitted to the network layer for communication. Correspondingly, the perception layer will also receive corresponding control information from the network layer, and make corresponding control actions according to these instructions.
Network layer is divided into three layers. The lowest layer is the preprocessing layer. Its main task is to package the data collected by the perception layer and transform it into a form suitable for network circulation, such as sockets. Therefore, the pre-processing layer requires a small amount of computing storage resources, such as a single-chip microcomputer, EEPROM, etc. After encapsulation by the preprocessing layer, the data is transmitted to the physical layer. Based on devices such as gateways and routers in the physical layer, these data packets can be distributed and transmitted in an orderly manner. The application of the MQTT protocol in the communication layer makes the management of these data packet distribution more efficient and convenient. In addition, the implementation of the QoS service quality detection system in the communication layer also makes the performance of the network layer more fault-tolerant and reliable.
Application layer is mainly responsible for some application-level services for business logic, such as data analysis, event processing, etc. At the bottom of the application layer, the service layer is running for a long time. The service layer is the closest part of the application layer to the network layer. Its main purpose is to process the incoming data from the network layer in real time and respond quickly to corresponding requests and error events. At the same time, the service layer is also responsible for sorting and analyzing the data collected by the sensors and passing it to the database layer for storage. In order to ensure the reliability of the service, the implementation program of the service layer is registered as a system service and guarded by a special daemon. Unlike the long-term operation of the service layer, the business layer is invoked on demand. When a new request comes in from the interface layer or a specific event occurs in the service layer, the business layer will be called and processed. In addition to some basic data analysis, the business layer also has the authority to make analysis requests to the AI layer. AI layer After analyzing the image data returned from the drone, it will send back a judgment result to the business layer. According to the specific content of the request, the business layer will organize the image recognition results, historical sensor data, etc., and pass them to the interface layer. Interface layer is mainly used to provide different forms of interfaces, such as HTTP interface and WebSocket interface, to facilitate client calls.
From the topological structure, as shown in the figure above, the entire system can be physically divided into land nodes, weather nodes, LoRa gateways, intranet servers, cloud servers, databases and user terminals.
From the perspective of functional mechanism, the entire system includes: sensor module, LoRa communication module, LoRa gateway module, MQTT-Proxy proxy module, water pump control module, MQTT+ data processing module, web interface module, daemon module and database module.
Land Node
Land nodes are deployed in farmland in different regions to detect soil temperature and humidity parameters, and can provide control of water flow solenoid valves at corresponding locations. The land node uses Arduino Nano as the computing unit, uses LoRa as the communication method to connect to the LoRa gateway (and other nodes), and uses battery power. Its large number, harsh working environment and unstable wireless communication are the biggest source of uncertainty in the system.
Weather Node
Meteorological nodes are deployed at specific locations in farmland to detect meteorological parameters such as air temperature, humidity, atmospheric pressure, rainfall, light, NH3 concentration, and CO concentration. The weather node uses Arduino Nano as the computing unit, uses LoRa as the communication method to connect to the LoRa gateway (and the land node), and uses battery or wired power. The working environment is harsh and the wireless communication quality is average.
LoRa Gateway
The LoRa gateway is deployed indoors. In order to expand the effective communication radius, its antenna can be extended outdoors. The LoRa gateway connects to various land nodes and weather nodes through LoRa, and connects to the intranet server through WiFi. The LoRa gateway can convert the socket packet incoming through LoRa into an mqtt message and pass it to the intranet server, and convert the mqtt message from the intranet server into a socket packet and send it to the designated node through LoRa.
Intranet server
The intranet server is a Raspberry Pi 3B, which contains three functional modules: MQTT-Proxy proxy module, water pump control module and daemon process module.
MQTT-Proxy proxy module can receive the mqtt message sent by the LoRa gateway via WiFi, encrypt it with SSL and forward it to the cloud server. At the same time, the MQTT-Proxy proxy module will also accept the specified mqtt message from the cloud server, decrypt it and forward it to the LoRa gateway.
Water pump control module The state of the water pump is controlled through a relay through the GPIO of the Raspberry Pi. The mqtt communication with the water pump control module directly communicates with the cloud server without passing through the MQTT-Proxy proxy.
Daemon module runs on Linux and is used to monitor the MQTT-Proxy proxy module and the water pump control module. When modules are detected to stop running, the daemon module will restart these modules in time to ensure the stability and continuity of services.
Cloud Server
The cloud server runs on Huawei Cloud located in Beijing and includes MQTT+ data processing module, web interface module and daemon module.
MQTT+data processing module includes the Service layer and the Business layer in the hierarchical structure. This module communicates with the intranet through mqtt, and interacts with the web interface module (and AI module) through mqtt and redis. After receiving various hashed data from the intranet, this module will automatically aggregate them, organize them into one piece of data, store it in the database, and push it to the web interface module through redis. In addition, this module will periodically send requests to each node to obtain their data, and these requests will be tracked to calculate the delay.
web interface module provides a series of HTTP and WebSocket interfaces. These interfaces can be used to get data, send instructions, refresh data, and get push messages.
Daemon module runs on Linux and is used to monitor MQTT+ data processing module and web interface module. When modules are detected to stop running, the daemon module will restart these modules in time to ensure the stability and continuity of services.
The LoRa communication module is used to realize stable and reliable socket communication in a single channel. This module includes LoRa-socket and LoRa-mqtt.
LoRa-socket encapsulates data packets on the basis of LoRa-Arduino, realizes simple udp and tcp communication, and makes traditional LoRa communication more reliable. By adding the sending and receiving ip address to the head of the data packet, and adding the hash check value at the end of the data packet, LoRa-socket supports point-to-point communication and broadcast communication, and has powerful noise processing capabilities and data tamper resistance.
Project address: iotcat/LoRa-socket
LoRa-mqtt is a simple reproduction of the mqtt protocol based on LoRa-socket. Based on udp and tcp, LoRa-mqtt supports mqtt communication with qos 0 and 1.
Project address: iotcat/LoRa-mqtt
This module runs on the intranet server and realizes the encrypted forwarding of the intranet mqtt.
Project address: iotcat/sf-mqtt-proxy
This module runs on the intranet server and realizes the control of the relay water pump through GPIO.
Project address: iotcat/sf-pump
This module runs on the cloud server and realizes the data aggregation, processing and storage of the underlying mqtt messages.
Project address: iotcat/sf-mqtt-broker
This module runs on the cloud server and realizes the provision of functional interfaces.
Project address: iotcat/sf-web-api
The figure above shows the line graphs of the delay statistics of the land node (left), the weather node (right), and the water pump (bottom). It can be seen from the figure that the average delay of the land node is about 730ms, the delay of the weather node is about 900ms, and the delay of the water pump is relatively low, about 45ms.
Click here to view the weather sensor data of 2019-7-31
Reference List:
[1] OASIS, (2015,12.10). MQTT Version 3.1.1 Plus Errata 01 [Online]. Available: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt -v3.1.1-errata01-os-complete.html
[2] Sinha, R.S., Wei, Y. and Hwang, S.H., “A survey on LPWA technology: LoRa and NB-IoT”, in Ict Express, 3(1), pp.14-21, 2017.
]]>最近在物联网开发中使用Arduino搭建LoRa网关和节点,发现在调用String时总遇到一些奇奇怪怪的现象。经过排查,发现是由于其它地方[]=运算符的重载所导致。
Recently, I have used Arduino to build LoRa gateways and nodes in the development of the Internet of Things, and I found that some strange phenomena are always encountered when calling String. After investigation, it was found that it was caused by overloading of the []= operator elsewhere.
为了方便,在开发节点时,我们使用了LoRa-Socket和ArduinoJSON作为依赖。我们发现这两个依赖分别使用时表现良好,但如果在同一个项目文件中使用,则会导致一些怪异的问题。
通过指针调用函数时String参数传递异常。代码如下:
1 | inline static void _onReceived(const String& msg, const String& from, const String& to, const String& type){ |
在这个案例中,我们发现msg等String在此函数中的数值是一切正常的,可是却没有能够成功传递到_f中。经过一系列骚操作,我们得出如下结论:
我们从而可以得出,这种怪异现象是由于与ArduinoJSON包的冲突所致。
在使用ArduinoVector制作String类型Vector时,我们也发现了String类型的不稳定现象。神奇的是,这种现象只出现在String的使用中,其它如int类型运作良好。
这些不稳定现象可以总结如下:
通过上述两个案例,我们可以初步总结出,这是由于[]=赋值运算符的重载与String有冲突。只要使用[]=重新定义String,即有可能出现String怪异的问题。
For convenience, we used LoRa-Socket and ArduinoJSON as dependencies when developing nodes. We found that these two dependencies perform well when used separately, but if used in the same project file, it will cause some weird problems.
When calling a function through a pointer, the String parameter passing is abnormal. code show as below:
1 | inline static void _onReceived(const String& msg, const String& from, const String& to, const String& type){ |
In this case, we found that the value of msg and other String in this function is all normal, but it was not successfully passed to _f. After a series of Sao operations, we come to the following conclusions:
We can conclude that this strange phenomenon is caused by the conflict with the ArduinoJSON package.
When using ArduinoVector to make a String type Vector, we also discovered the instability of the String type. The magic is that this phenomenon only occurs in the use of String, other types such as int work well.
These instabilities can be summarized as follows:
Through the above two cases, we can preliminarily conclude that this is due to the conflict between the overload of the []= assignment operator and String. As long as you use []= to redefine String, string weird problems may occur.
]]>本API基于华为云对象存储,使用华为CDN云加速,全球平均下载速度达10MB/s。API中已收录1100+张二次元图片,20+张Bing壁纸(每日自动抓取),150+张二次元头像,10+张图床上传图片。
This API is based on Huawei Cloud Object Storage and uses Huawei CDN Cloud acceleration. The global average download speed is 10MB/s. The API has included 1100+ two-dimensional pictures, 20+ Bing wallpapers (automatically captured daily), 150+ two-dimensional avatars, and 10+ pictures uploaded on the bed.
本API不承诺永久维护,使用前请务必斟酌使用风险!!
https://api.yimian.xyz/img
随机二次元图片
GET/POST /img?type=moe
随机Bing壁纸
GET/POST /img?type=wallpaper
随机二次元头像
GET/POST /img?type=head
随机图床图片
GET/POST /img?type=imgbed
随机1920x1080尺寸二次元图片
GET/POST /img?type=moe&size=1920x1080
名称 | 描述 | 格式 | 示例 |
---|---|---|---|
type | 图片种类 | moe /wallpaper /head /imgbed | type=moe |
size | 根据图片大小筛选 | ??x?? ;*x?? ;*x* ;??-??x?? ;??-??x??-?? ;??-??x* | display=1920x1080 ;display=1920x* ;display=1920-1950x230-500 ;display=1920-1950x* ; |
range | 尺寸误差范围 | number | range=100 |
id | 根据图片id筛选 | number | id=15 |
path | 根据路径提取图片 | abs path | path=wallpaper/img_··mal.jpg |
display | 是否以网页格式展示 | true /false (default) | display=true |
R18 | 是否显示18禁图片 | true /false (default) | R18=true |
二次元(默认)
GET/POST /img?type=moe
bing每日壁纸
GET/POST /img?type=wallpaper
每日自动更新中
二次元头像
GET/POST /img?type=head
呓喵酱图床
GET/POST /img?type=imgbed
こいぬちゃん
GET/POST /img?type=koino
EasyVer人机验证
GET/POST /img?type=easyver
如果本参数置为true,则会禁用302跳转,直接返回完整图片编码。本方法效率极低,速度很慢,请慎用。
false(默认)
GET/POST /img?display=false
true
GET/POST /img?display=true
使用本参数限制图片尺寸。本参数支持以下格式:
??x??
GET/POST /img?size=??x??
??x*
GET/POST /img?size=??x*
\x??*
GET/POST /img?size=*x??
\x**
GET/POST /img?size=*x*
??-??x??
GET/POST /img?size=??-??x??
??x??-??
GET/POST /img?size=??x??-??
??-??x??-??
GET/POST /img?size=??-??x??-??
??-??x*
GET/POST /img?size=??-??x*
\x??-??*
GET/POST /img?size=*x??-??
本参数规定允许的size的误差,需搭配size使用,默认为0。
对于??型size参数
GET/POST /img?size=??x??&range=100
对于??-??型size参数
GET/POST /img?size=??-??x??-??&range=100
对于*型size参数
GET/POST /img?size=*x*&range=100
每一个种类都有自己的id系统,同一种类下不同图片id唯一。
二次元
GET/POST /img?type=moe&id=15
bing每日壁纸
GET/POST /img?type=wallpaper&id=2019-07-28
二次元头像
GET/POST /img?type=head&id=15
呓喵酱图床
GET/POST /img?type=imgbed&id=529745e0
使用绝对路径直接提取图片,优先级高于type,效率最高。
GET/POST /img?path=xx/xx.xx
种类/图片文件名
imgbed/img_529745e0_900x900_8_null_normal.jpeg
是否显示18禁图片,默认为false。
GET/POST /img?type=xx&R18=true
若找不到指定的type类型,将会自动返回一个moe类型的图片。
返回JSON
1 | { |
每台设备每天全局调用上限500次!!
This API does not promise permanent maintenance, please be sure to consider use risks before use! !
https://api.yimian.xyz/img
Random two-dimensional picture
GET/POST /img?type=moe
Random Bing Wallpaper
GET/POST /img?type=wallpaper
Random two-dimensional avatar
GET/POST /img?type=head
Random bed pictures
GET/POST /img?type=imgbed
Random 1920x1080 size two-dimensional picture
GET/POST /img?type=moe&size=1920x1080
Name | Description | Format | Example |
---|---|---|---|
type | Image type | moe /wallpaper /head /imgbed | type=moe |
size | Filter by image size | ??x?? ;*x?? ;*x* ;??-??x?? ;??-??x??-?? ;??-??x* | display=1920x1080 ;display=1920x* ;display=1920-1950x230-500 ;display=1920-1950x* ; |
range | Size error range | number | range=100 |
id | Filter by image id | number | id=15 |
path | Extract pictures based on path | abs path | path=wallpaper/img_··mal.jpg |
display | Whether to display in web page format | true /false (default) | display=true |
R18 | Whether to display 18 prohibited pictures | true /false (default) | R18=true |
Two-dimensional (default)
GET/POST /img?type=moe
bing daily wallpaper
GET/POST /img?type=wallpaper
Automatically updated daily
Two-dimensional avatar
GET/POST /img?type=head
Miao meow sauce picture bed
GET/POST /img?type=imgbed
こいぬちゃん
GET/POST /img?type=koino
EasyVer man-machine verification
GET/POST /img?type=easyver
If this parameter is set to true, 302 jump will be disabled and the complete picture encoding will be returned directly. This method is very low and slow. Please use it carefully.
false (default)
GET/POST /img?display=false
true
GET/POST /img?display=true
Use this parameter to limit the image size. This parameter supports the following formats:
??x??
GET/POST /img?size=??x??
??x*
GET/POST /img?size=??x*
\x??*
GET/POST /img?size=*x??
\x**
GET/POST /img?size=*x*
??-??x??
GET/POST /img?size=??-??x??
??x??-??
GET/POST /img?size=??x??-??
??-??x??-??
GET/POST /img?size=??-??x??-??
??-??x*
GET/POST /img?size=??-??x*
\x??-??*
GET/POST /img?size=*x??-??
This parameter specifies the allowable size error, which needs to be used with size, and the default is 0.
For the?? type size parameter
GET/POST /img?size=??x??&range=100
For??-?? type size parameter
GET/POST /img?size=??-??x??-??&range=100
For *type size parameter
GET/POST /img?size=*x*&range=100
Each category has its own id system, and different image ids under the same category are unique.
*Two-dimensional *
GET/POST /img?type=moe&id=15
bing daily wallpaper
GET/POST /img?type=wallpaper&id=2019-07-28
Two-dimensional avatar
GET/POST /img?type=head&id=15
Miao meow sauce picture bed
GET/POST /img?type=imgbed&id=529745e0
Use absolute path to directly extract pictures, priority is higher than type, highest efficiency.
GET/POST /img?path=xx/xx.xx
Type/Picture File Name
imgbed/img_529745e0_900x900_8_null_normal.jpeg
Whether to display 18 prohibited pictures, the default is false.
GET/POST /img?type=xx&R18=true
If the specified type cannot be found, a moe type picture will be automatically returned.
Return JSON
1 | { |
]]>The maximum number of global calls for each device is 500 per day!!
基于NodeJS搭建的物联网系统,配合D1 MINI单片机,帮助你灰常快速实现物联~
The Internet of Things system based on NodeJS, combined with D1 MINI microcontroller, helps you quickly realize the Internet of Things~
正式开发文档见这里
适用于NodeJS的wIoT服务器控制组件,轻松物联
本项目旨在帮助不熟悉固件编程的网络开发者实现出自己的物联网应用。您仅需要一台网络内部的服务器(比如树莓派),以及若干个支持可联网(通过串口,WiFi,LoRa,蓝牙,Zigbee等)的单片机,即可轻松创建并管理属于您自己的物联网集群。
wiot-xx:xx:xx:xx:xx:xx
1234567890
http://192.168.0.1
,记录网页中的MAC地址,这将用于识别此单片机在你的项目文件夹下打开命令行,输入以下指令安装wiot:
1 | npm install wiot |
在你的项目文件夹中新建一个app.js文件,输入以下内容:
1 | var wiot = require('wiot'); //引入wiot依赖包 |
在项目文件夹中打开命令行,输入以下指令:
1 | node app.js |
如果一切顺利,你现在应该会发现你的板载led在闪烁了
也许你会觉得上述代码难以理解,这是正常的,由于delay功能在JS中难以实现。但是不用担心,这些问题将会由社区中的其它开发者帮你解决。
wIoT在实现基本的单片机控制同时,也提供了丰富的扩展功能。更神奇的是,任何人都可以在wIoT中编写自己的扩展并与全世界共享它们。在这里我们可以使用wIoT官方提供的led扩展轻松实现上例功能!
1 | var wiot = require('wiot'); //引入wiot依赖包 |
名称 | 默认值 | 描述 |
---|---|---|
MAC | “” | 单片机的MAC地址 |
pin | {D1: 0, D2: 0, D3: 0, D4: 0, D5: 0, D6: 0, D7: 0, D8: 0} | pin脚的模式, 0为INPUT, 1为OUTPUT, 2为INPUT_PULLUP |
hint | true | 是否显示状态提示 |
debug | false | 是否开启debug模式 |
ip | “default” | 指定单片机IP, 请在长时间搜索不到IP时尝试此选项 |
port | 8848 | Client的TCP Socket通信端口,默认8848 |
ip_range | “192.168.0” | IP搜索字段,请在长时间搜索不到IP时尝试此选项 |
localIP | “127.0.0.1” | 本机IP |
OnlyHTTP | false | 是否仅使用HTTP模式连接单片机 |
errDelayTime | 2000 | 遇到网络错误时重试间隔时间(毫秒) |
okDelayTime | 30 | 收到网络请求后延时等待时间(毫秒) |
resetDelayTime | 4500 | 向单片机发送重置指令后多久不再发送新消息(毫秒) |
noTryMaxTime | 15000 | 经过此时间单片机仍未响应则重新发送消息(毫秒) |
IntervalTime | 2000 | 监听行为心跳间隔 |
MaxToReScanTime | 180000 | 经过此事件单片机无响应则从新扫描IP地址(毫秒) |
MinResearchTime | 5000 | 搜索IP经过一此轮询后间隔时间(毫秒) |
IpScanTimeout | 1 | IP扫描时的Ping检测超时时间(秒) |
pingTimeout | 2 | 心跳Ping检测的超时时间(秒) |
MaxTraceBackTimes | 8 | 判断连接状态所向前追溯的历史心跳个数 |
例如:
1 | var MyMCU = new wiot.client({ |
.write(pin: wiot.pin/number, state: iot.state/number)
: 向指定pin口输出状态指令,状态可以是wiot.HIGH/wiot.LOW或PWM调制(0-255数字)wiot.read(pin: wiot.pin/number)
: 读取指定pin口状态,数字pin返回wiot.HIGH/wiot.LOW,模拟pin返回0-1024数值.on(event, handler)
client事件列表
begin
开始于单片机正常交互disConnected
与单片机断开连接reConnected
与单片机恢复连接1 | var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"}); |
.pinOn(pin, event, handler)
pin事件列表
on
pin口电位从低到高off
pin口电位从高到低change
pin口电位变化1 | var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"}); |
wiot.begin()
: 单片机准备完成后开始执行1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx", pin: {D4: wiot.OUTPUT}}); |
wiot.loop()
: 循环执行的指令,适合于条件控制语句1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx", pin: {D4: wiot.OUTPUT}}); |
wiot.register.set(status1, status2, function)
: 向注册表中添加一条规则, status可以是值或函数,当status1==status2时会触发function。wiot.register.set(status, function)
: 你也可以传入两个函数,其中status的返回值是bool型,变为true时触发function1 | var myLED = wiot.led(MyMCU, wiot.D4); |
wiot.led(MCU, pin)
: 声明一个led模块wiot.led.getStatus()
: 获取led状态wiot.led.set(status, time = 0, isSmooth = false)
: 设置led状态,起始状态,中间状态,最终状态,周期wiot.led.breath(period)
: 设置一个呼吸灯wiot.led.clear()
: 重置led1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx", pin: {D4: wiot.OUTPUT}}); |
wiot.pir(MCU, pin)
: 声明一个PIR模块wiot.pir.getStatus()
: 获取PIR状态,返回值wiot.HIGH(有人),wiot.LOW(无人)事件触发器
wiot.pir.on(event, handler)
事件列表
detected
探测到人undetected
人体移动出探测范围change
状态改变,包括有人到无人和无人到有人1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"}); |
wiot.ir(MCU, pin)
: 声明一个IR模块,pin可以是模拟或数字端口wiot.ir.getStatus()
: 获取IR状态,返回值wiot.HIGH(有障碍),wiot.LOW(无障碍),或者0-1024数值(限模拟端口)事件触发器
wiot.ir.on(event, handler)
事件列表
detected
探测到障碍undetected
障碍消失change
状态改变1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"}); |
wiot.lightSensor(MCU, pin)
: 声明一个lightSensor模块, pin可以是模拟或数字端口wiot.lightSensor.getStatus()
: 获取lightSensor状态,返回值wiot.HIGH(有光),wiot.LOW(无光),或者0-1024数值(限模拟端口)事件触发器
wiot.light.on(event, handler)
事件列表
light
由暗到明dark
由明到暗change
状态改变1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"}); |
使用本模块向指定邮箱发送邮件。自豪地引用Yimian API构建!
wiot.mail(to, from = "wIoT")
: 声明一个mail模块,参数收件地址,发件人名称wiot.mail.send(subject, body)
: 发送邮件,需传入主题,邮件内容1 | var mail = wiot.mail("i@iotcat.me", "wIoT Test"); |
使用本模块向指定咕咕机发送消息。咕咕机是一款便携式私人打印机,详见官网。使用本模块需要在官网提前申请好自己的开发者ak, 详见这里。自豪地引用Yimian API构建!
wiot.guguji(ak, userID, memobirdID)
: 声明一个guguji模块,参数: 开发者ak, 用户id, 咕咕机idwiot.guguji.send(msg)
: 发送消息,需传入待发送的消息1 | var gugu = wiot.guguji("9e55121803474371bfa25d20e554b31f", "832598", "b3ee06a8bd9b49e1"); |
Node.js is a widely used programming language for web developers. To make use of wIoT, you should first install Node.js to your computer.
For windows user, you can follow the instruction in this website
After install Node.js and configure npm successfully, you should then use npm to download wIoT package by enter following command in your command window.
1 | npm install wiot |
Windows user can use cmd or powershell.It should be notice that this may report error for some users. The solution is to open your cmd window as administrator. You can right click on cmd and choose run as an administrator. You can also press windows+R and input cmd then press Ctrl+Shift+Enter to open it as administrator.
The default password for D1 MINI is 1234567890, enter the password and you should be able to connect to your MINI.
Congratulations, you have successfully connect your device to D1 MINI
However, this is not the end, you should now try to connect D1 MINI to your Wi-Fi
Use the device which had just been connected to D1 MINI and follow the steps below
Visit http://192.168.0.1 with the browser on your device
Normally, you would see a webpage like this:
In this page, you can see the MAC Address and wIoT version of your MINI
Again, please remember the MAC Address
From the page, you can see two blanks that ask the SSID and password of your Wi-Fi
Input information of the Wi-FI which you would like to connect your MINI, click Submit
If you have input the right SSID and password, you will see a page showing the message: Set Successfully!! Rebooting!!
Then, after a minute, you will see the SSID of D1 MINI has vanished
If you submitted the wrong message, do not try to directly reconnect to D1 MINI. Restart the whole procedure from the reset part of the last section
If you have successfully connect D1 MINI to your Wi-Fi, you can execute the example code below to realize a simple function of wIoT
Before executing the code, you should first connect a LED to D1 MINI with positive pole connect to pin D4 and negative pole connect to GND
1 | var wiot = require('wiot'); //Import wiot package from npm |
The LED is expected to blink after you execute the code
Name | Default Value | Declaration |
---|---|---|
MAC | “” | MAC Address of MCU |
pin | {D1: 0, D2: 0, D3: 0, D4: 0, D5: 0, D6: 0, D7: 0, D8: 0} | Mode of each pin, 0 is INPUT, 1 is OUTPUT, 2is INPUT_PULLUP |
hint | true | Whether print the status prompt |
debug | false | Whether open the debug mode |
ip | “default” | Specify MCU IP, please try this option when you cannot find IP for a long time |
port | 8848 | TCP Socket communication port for Client, default 8848 |
ip_range | “192.168.0” | IP search field, try this option if you cannot find IP for a long time |
localIP | “127.0.0.1” | local IP |
errDelayTime | 2000 | Retry interval when network error is encountered (milliseconds) |
okDelayTime | 30 | Waiting time after receiving the network request (milliseconds) |
resetDelayTime | 4500 | Waiting time for stop sending new messages after sending reset instructions to MCU (milliseconds) |
noTryMaxTime | 15000 | If the MCU fails to respond after this time, the message will be sent again (milliseconds). |
IntervalTime | 2000 | Interval between monitoring (heartbeat) |
MaxToReScanTime | 180000 | After this time, if the MCU has no response, it will scan the IP address again (in milliseconds). |
MinResearchTime | 5000 | Interval between each polling |
IpScanTimeout | 1 | Ping detection timeout for IP scanning (seconds) |
pingTimeout | 2 | Timeout of Heartbeat Ping detection (seconds) |
MaxTraceBackTimes | 8 | Determine the number of historical heartbeats traced back to the connection state |
1 | var MyMCU = new wiot.client({ |
.on(event, handler)
begin
It begins when MCU starts to interact normallydisConnected
Disconnect from MCUreConnected
Connection with MCU restored1 | js |
.pinOn(pin, event, handler)
on
Change output of pin from LOW to HIGHoff
Change output of pin from HIGH to LOWchange
Change the output of pin1 |
|
wiot.begin()
: Execute when MCU is ready1 |
|
+
wiot.loop()
: A loop command,Suitable for conditional control statements
1 |
|
wiot.register.set(status1, status2, function)
: Add a rule to register that status can be either value or function,
function would trigger if status1 == status2
The registry is designed to facilitate the use of various extension modules, See [extension module] below (# Sensor Extension Module).
wiot.register.set(status, function)
: You can also pass in two functions, where the return value of status is of type bool, it would trigger the function if it changes to true
1 |
|
wiot.led(MCU, pin)
: Declare a LED module
wiot.led.getStatus()
: Get status of LED
wiot.led.set(status, time = 0, isSmooth = false)
: Set led state, initial state, intermediate state, final state, period
wiot.led.breath(period)
: Set a breathing LED
wiot.led.clear()
: Reset LED
1 | var wiot = require('wiot'); //Import wiot package from npm |
wiot.pir(MCU, pin)
: Declare a PIR modulewiot.pir.getStatus()
: Gets the PIR state, returns the value wiot.high (have people), wiot.low (no people)wiot.pir.on(event, handler)
Events List
detected
Person detectedundetected
People out of the detective fieldchange
State change, includes from detected to undetected and from undetected to detected1 | var wiot = require('wiot'); //Import wiot package from npm |
wiot.ir(MCU, pin)
: Declare an IR module, pin can be analog or digital portwiot.ir.getStatus()
: Get IR state, return value wiot.high (with a barrier), wiot.low (with no barrier), or a value of 0-1024 (only for analog port)wiot.ir.on(event, handler)
Event List
detected
Barrier detectedundetected
Barrier vanishedchange
Change state1 | MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"}); |
wiot.lightSensor(MCU, pin)
: Declare a lightSensor module, pin can be analog or digital portwiot.lightSensor.getStatus()
: Get lightSensor state, return value wiot.HIGH(light), wiot.LOW(dark), or a value of 0-1024 (limited to analog port)wiot.light.on(event, handler)
Event List
light
From dark to lightdark
From light to darkchange
Change state1 |
|
Use this module to send messages to the specified mailbox. Proudly built with reference to Yimian API!
wiot.mail(to, from = "wIoT")
: Declare an mail module with sender’s name and reveiver’s addresswiot.mail.send(subject, body)
: Send email with a subject and content1 | var mail = wiot.mail("i@iotcat.me", "wIoT Test"); |
Use this module to send messages to the specified cooing machine.Goo goo is a portable private printer, see official website.
To use this module, you need to apply for your own developer ak in advance on the official website. See here. Proudly reference Yimian API!
wiot.guguji(ak, userID, memobirdID)
: Declare a goo goo chicken module, parameter: developer’s ak, user id, cooing machine idwiot.guguji.send(msg)
: Send message, need to pass in the message to be sent1 | var gugu = wiot.guguji("9e55121803474371bfa25d20e554b31f", "832598", "b3ee06a8bd9b49e1"); |
中美贸易战的解不在美国,而是在我们自己身上。
The solution to the Sino-US trade war is not in the United States, but in ourselves.
关于谈判,党内争议比较大,但最终很有可能会拒绝做出让步。
当美关税抬升,国内相关产业链将大批转移至台湾及东南亚国家,累计将造成1亿人口的就业问题。与前几次的危机不同,这一次我们不但要提防房市泡沫的激化,也没有那麽多的基建可提供就业。从另一方面看,近几年来,中国的产能过剩问题主要通过出口得以解决,拿着贸易顺差来发展国内经济,以实现不可思议的经济增长。如今特朗普政府征加关税,将使得这一策略不再行得通。
如果在谈判中妥协,中方将丧失好不容易占来的第四次工业革命先机,并经济将会想日本,韩国一样任人摆布。
我认为,在不妥协的前提下,中共有三个破局之法。
为了缓解失业冲击的强度,央行将通过印人民币使人民币贬值来增进出口,吸引他国来补充美资撤离的空缺。
以上。。
Regarding negotiations, there are relatively large disputes within the party, but in the end it is very likely that they will refuse to make concessions.
When U.S. tariffs rise, related domestic industrial chains will be transferred to Taiwan and Southeast Asian countries in large numbers, which will cause employment problems for 100 million people. Unlike previous crises, this time we not only have to guard against the intensification of the housing market bubble, but also there is not so much infrastructure that can provide employment. On the other hand, in recent years, China’s overcapacity problem has been solved mainly through exports, and the trade surplus is used to develop the domestic economy in order to achieve incredible economic growth. Now that the Trump administration imposes tariffs, this strategy will no longer work.
If it compromises in the negotiation, China will lose the opportunity of the Fourth Industrial Revolution that it finally took over, and its economy will be at the mercy of Japan and South Korea.
I think that under the premise of no compromise, there are three ways to break the game.
In order to alleviate the intensity of the unemployment shock, the central bank will increase imports and exports by printing the renminbi to depreciate the renminbi, attracting other countries to supplement the vacancy of the withdrawal of US capital.
the above. .
]]>重整自己先前的mail模块,顺便封装了一个API出来,欢迎大家调用~
Reorganized my previous mail module and encapsulated an API by the way. Welcome everyone to call~
to
收信人邮箱地址subject
邮件主题body
邮件内容(建议使用html格式)from
发件人名称1 | https://api.yimian.xyz/mail |
1 | https://api.yimian.xyz/mail/?to=收信邮箱&subject=邮件主题&body=邮件内容&from=发件人名称 |
[scode type=”yellow”]如遇到GET传递邮件内容错误,请尝试使用POST[/scode]
state
::true
(成功)或false
(失败)[scode type=”dangerous”]每个IP每天请求上限50个[/scode]
to
recipient email addresssubject
mail subjectbody
email content (html format is recommended)from
sender name1 | https://api.yimian.xyz/mail |
1 | https://api.yimian.xyz/mail/?to=receiving mailbox&subject=mail subject&body=mail content&from=sender name |
[scode type=”yellow”] If you encounter an error in GET delivery of the mail content, please try using POST[/scode]
state
::true
(success) or false
(failure)[scode type=”dangerous”] There are 50 requests per day per IP[/scode]
]]>教你如何一步步迷上JS.. ╮(╯▽╰)╭
Teach you how to fall in love with JS step by step.. ╮(╯▽╰)╭
好嘀,只是一些总结
<script>
标签中,合理使用defer="defer"
(延迟执行),async="async"
(异步执行)var obj = preferredObj || backupObj;
提供后备值 ::aru:surprised:: arguements[]
获取参数function hh({})
直接传包含参数的对象,更加灵活push()
和pop()
push()
和shift()
unshift()
和pop()
sort()
可自定义比较函数为参数splice()
可太好用了吧arguments.callee
获取当前函数名指针arguments.callee.caller
获取调用当前函数的引用function.apply(this/*作用域*/, arguments)
或function.call(this, arg1, arg2...)
指定作用域运行函数function.length
获取其期待的参数个数toLocaleString()``toString()``valueOf()
返回代码,方便调试indexOf()``lastIndexOf()
查找元素出现位置trim()
删除字符串开头结尾空格RegExp
eval("")
可将字符串转译成代码并就地执行encodeURI()/decodeURI()
与encodeURIComponent()/decodeURICompoent()
处理urifunction(){}();
ceil()``floor()``round()
向上,向下,标准舍入Math.random()
大于零小于一随机数functionName: function(){}
直接定义函数(x)=>x+1
等价于function(x){return x+1;}
;(function(name, context, definition){moudle.exports = definition();})('funationName', this, function(){});
封装模块with
语句label
标签少用0.1 + 0.2 != 0.3
浮点型天坑,与C类似~26 == -27
利用按位非提高效率var obj2 = obj1;
实际是引用obj[var]
var sum = function sum(){};
在Safari中会报错new Number("25")
返回对象,而Number("25")
返回25Okay, just some summary
<script>
tag, reasonably use defer="defer"
(delayed execution) and async="async"
(asynchronous execution)var obj = preferredObj || backupObj;
to provide a backup value ::aru:surprised::arguements[]
to get parameters in the functionfunction hh({})
to pass parameters directly to functions, which is more flexiblepush()
and pop()
push()
and shift()
unshift()
and pop()
sort()
can customize the comparison function as a parametersplice()
is so easy to use, right?arguments.callee
arguments.callee.caller
to get a reference to call the current functionfunction.apply(this/*scope*/, arguments)
or function.call(this, arg1, arg2...)
to specify the scope to run the functionfunction.length
to get the number of expected parameterstoLocaleString(), toString(), and valueOf()
return code through the function to facilitate debuggingindexOf() and lastIndexOf()
to find the element’s appearancetrim()
delete spaces at the beginning and end of the stringRegExp
eval("")
can translate the string into code and execute it in placeencodeURI()/decodeURI()
and encodeURIComponent()/decodeURICompoent()
handle urifunction()()();
ceil(), floor(), round()
in Math up, down, standard roundingMath.random()
is a random number greater than zero and less than onefunctionName: function(){}
in the object to directly define the function(x)=>x+1
is equivalent to function(x){return x+1;}
;(function(name, context, definition){moudle.exports = definition();})('funationName', this, function()());
to encapsulate the modulewith
statementlabel
0.1 + 0.2 != 0.3
floating point tiankeng, similar to C~26 == -27
Use bitwise not to improve efficiencyvar obj2 = obj1;
is actually a referenceobj[var]
var sum = function sum(){};
will report an error in Safarinew Number("25")
returns the object, and Number("25")
returns 25断断续续玩web已经一年了,一些之前从腾讯云申的TrustAsia证书已经陆陆续续开始过期,很方..于是开始尝试申请Let’s Encrypt的免费证书,并实现自动续期|´・ω・)ノ
I’ve been playing on the web intermittently for a year, and some of the TrustAsia certificates from Tencent’s Yunshang have started to expire one after another. It’s very fragrant.. So I started to try to apply for Let’s Encrypt’s free certificate, and realized automatic renewal|´・ω・)ノ
可以通过http访问域名
(一定确定能访问)通过yum安装certbot
1 | $ yum update #更新yum源 |
格式为
1 | $ certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos |
例如
1 | $ certbot certonly --webroot -w /opt/www/demo.yourdomain.com -d demo.yourdomain.com -m yourname@gmail.com --agree-tos |
证书存放在/etc/letsencrypt/live/demo.yourdomain.com/
文件夹中。
一共有4个文件,你可能要用到的是fullchain.pem
和privkey.pem
。
在相应的server{}
中加入以下内容:
1 | listen 443 ssl; |
例如
1 | server { |
配置成功后执行如下指令:
1 | $ nginx -t #检查nginx conf语法 |
编辑crontab规则:(初次配置crontab)
1 | $ crontab -e |
键入以下内容(每月1号5时刷新证书并重启nginx)保存并退出
1 | 00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx |
重启crontab
1 | $ systemctl restart crond.service |
参考链接:
https://blog.csdn.net/sheng119/article/details/72956717
domain name can be accessed via http
(be sure to be able to access)Install certbot via yum
1 | $ yum update #Update yum source |
The format is
1 | $ certbot certonly --webroot -w [Web site directory] -d [domain name] -m [contact email address] --agree-tos |
E.g
1 | $ certbot certonly --webroot -w /opt/www/demo.yourdomain.com -d demo.yourdomain.com -m yourname@gmail.com --agree-tos |
The certificate is stored in the /etc/letsencrypt/live/demo.yourdomain.com/
folder.
There are 4 files in total, you may need to use fullchain.pem
and privkey.pem
.
Add the following content to the corresponding server{}
:
1 | listen 443 ssl; |
E.g
1 | server { |
After the configuration is successful, execute the following instructions:
1 | $ nginx -t #Check nginx conf syntax |
Edit crontab rules: (First configuration crontab)
1 | $ crontab -e |
Type the following (refresh the certificate and restart nginx on the 1st and 5th of each month) to save and exit
1 | 00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx |
Restart crontab
1 | $ systemctl restart crond.service |
Reference link:
https://blog.csdn.net/sheng119/article/details/72956717
上学期掉了魔电的坑,这学期来搞点数电小攻略掩饰一下(☆ω☆)
I lost the pit of magic electricity last semester. This semester, let’s make a small strategy to hide it (☆ω☆)
常用补码来表示负数,以便于计算。
正数和零补码是其自身,负数的补码方法如下:
二进制减法可以通过被减数加要减数的补码来实现。
<法一>直接法
$$(N)_{COMP}=\begin{cases}N&\text{N为正数}\2^{n}-N& \text{N为负数} \end{cases}$$
符号位为零(正数)时,补码与源码相同,符号位为1(负数)时,补码为$2^{n}-N$.
<法二>观察法
欲求补码,可以先找其反码。
$$(N)_{INV}=\begin{cases}N&\text{N为正数}\(2^{n}-1)-N& \text{N为负数} \end{cases}$$
即,除符号位外其他值0变1,1变0。
随后反码整体加1即可得到补码~
即8421恒权码。DCB作为10进制显示时,须在每一个Invalid位(>9)上加6。
使用8位,最左边一位表示符号,其余7位表示数值。
1100 0101
可直接写出C5
-128-127
74LS04
中74指商品级,LS指种类,04为型号A+AB=A
与A+~AB=A+B
~(AB)=(~A+~B)
与 ~(A+B)=~A~B
~A~B
为Negative AND, ~(AB)
为NAND, OR同理··+··+··
()*()*()
A AND B
右位放A XOR B
A XOR B
2bit(A0 XOR B0) NOR (A1 XOR B0)
The complement is often used to represent negative numbers for easy calculation.
Positive numbers and zero complement are themselves, and the complement method of negative numbers is as follows:
Binary subtraction can be implemented by adding the complement of the subtracted number to the subtracted number.
$$(N)_{COMP}=\begin{cases}N&\text{N is a positive number}\2^{n}-N& \text{N is a negative number} \end{cases}$$
When the sign bit is zero (positive number), the complement is the same as the source code. When the sign bit is 1 (negative number), the complement is $2^{n}-N$.
If you want the complement, you can find the inverse first.
$$(N)_{INV}=\begin{cases}N&\text{N is a positive number}\(2^{n}-1)-N& \text{N is a negative number} \end{cases}$$
That is, except for the sign bit, 0 changes to 1, and 1 changes to 0.
Then add 1 to the whole complement to get the complement~
That is, the 8421 constant weight code. When DCB is displayed as a decimal number, 6 must be added to each Invalid bit (>9).
8 bits are used, the leftmost bit represents the sign, and the remaining 7 bits represent the value.
1100 0101
, you can write C5
directly-128-127
74LS04
means commodity grade, LS means type, 04 is modelA+AB=A
and A+~AB=A+B
~(AB)=(~A+~B)
and ~(A+B)=~A~B
~A~B
is Negative AND, ~(AB)
is NAND, OR is the same··+··+··
()*()*()
A AND B
on the left bit and A XOR B
on the right bitA XOR B
2bit(A0 XOR B0) NOR (A1 XOR B0)
Courseware:
Lecture03.pdf
Lecture04.pdf
经济学是一门研究选择的学问。人们活在世上总是在进行着各种选择。发展落后的国家希望尽快工业化发展经济,来改善自己的生存环境。而工业化后的国家则希望发展同时兼顾环境。于是落后国家需要50年来发展工业,搞基建,破坏环境。之后的50年则拼命治理环境,发展生态。由于地球生态是一个整体,发达国家非常不爽落后的国家搞工业化污染环境,于是各种矛盾。不过在21世纪,有望利用信息数字科技打破50-50年法则,为新一批的国家崛起提供蹊径( ๑´•ω•) “
Economics is a study of choice. People are always making various choices in the world. Countries that are underdeveloped hope to industrialize and develop their economy as soon as possible to improve their living environment. The post-industrial countries hope to develop while taking the environment into consideration. So backward countries need 50 years to develop industry, engage in infrastructure construction, and destroy the environment. For the next 50 years, he worked hard to control the environment and develop the ecology. Because the earth’s ecology is a whole, developed countries are very upset and backward countries are engaged in industrialization and polluting the environment, so various contradictions arise. However, in the 21st century, it is expected to use information and digital technology to break the 50-50 year rule and provide a path for the rise of a new group of countries (๑´•ω•) “
自然环境较为恶劣,不完全适合人类生存。于是具备主观能动性的人类开始由改造环境的冲动。这一心理行为逐步早就了名为“发展”的宏伟故事,大家都对其深信不已。就像故事中所描述的一样,人们为了实现这一目标开始减少内耗(战争),社会趋于高度分工化。
人类有一种基本心理效应叫蔡格尼克效应,讲的是人如果开始做一件事情便会难以在中途停下来。这一效应在群体行为中则会变本加厉的体现。当人们开始追求发展,并且得到了一定的激励(生活的确更舒适了,至少人们是这样认为的),于是这个势头便不会轻易停下来了,于是人类进入了千年级别的发展时期。
发展初期,太多的基础设施需要建设,太多的工业需要发展,最重要的是这个时候大家都很穷,都只是在一个信念的支撑下在向着发展的目标努力搞生产。而且一般当这个时候,往往会有其他强国对你虎视眈眈,所以这个时候,大家都会很团结,但不会像祖先以及后辈一样在乎什么环境生态的。只有一个想法便是希望发展起来。
经过大约50年的发展,生活好了,底气足了,开始关注一些更长久的事情,比如教育和环境。于是接下来的50年,开始拼命治理环境,搞教育。于是渐渐的环境好了,下一代也成长起来了。于是年轻一代们便利用他们头脑中的书本知识,开始批判祖先们破坏环境这不好那不好,开始投科研资金,股市凡是跟环保相关的板块开始居高不下,可持续发展开始成为许多人的口头禅。而这时,当时那些破坏环境的罪魁祸首们正退休在家里乐呵呵的看着这一切的发生。大概就是这么一个过程了。
上图的曲线非常科学地向我们展示出了一个国家在发展与环境之间摇摆的必然趋势。在这一图表的背后,反应出了以下几点:
这意味着,如果能够改变上述的任何一个条件,Kuznet 诅咒便有希望得以改变,从而减小摆动周期和幅度,控制环境重建与修复成本,真正在宏观上实现人们所希望的高效率可持续发展。而新一代的数字信息技术正是这一可能性得以实践的关键。
The natural environment is relatively harsh and not entirely suitable for human survival. Therefore, human beings with subjective initiative begin to change the environment from the impulse. This psychological behavior gradually resulted in a magnificent story called “development”, and everyone was convinced of it. As described in the story, in order to achieve this goal, people begin to reduce internal friction (war), and society tends to be highly divided.
Human beings have a basic psychological effect called the Zeignik effect, which means that if a person starts to do something, it will be difficult to stop in the middle. This effect will be intensified in group behavior. When people start to pursue development, and get a certain amount of incentives (life is indeed more comfortable, at least people think so), then this momentum will not easily stop, so mankind has entered a millennium-level development period.
In the early stages of development, too much infrastructure needs to be built, too much industry needs to be developed, and the most important thing is that everyone is very poor at this time, and they are only working hard towards the goal of development under the support of a belief. And generally at this time, there will often be other powerful countries looking at you, so at this time, everyone will be very united, but they will not care about the environment and ecology like their ancestors and descendants. There is only one idea that I hope to develop.
After about 50 years of development, my life is better and I am more confident, and I start to pay attention to some longer-term things, such as education and the environment. So in the next 50 years, I began to work hard to improve the environment and engage in education. As a result, the environment gradually improved, and the next generation grew up. So the younger generation made use of the book knowledge in their minds and began to criticize their ancestors for destroying the environment, which is not good or not, and began to invest in scientific research funds. The stock market began to remain high in environmental protection-related sectors, and sustainable development began to become many people. Mantra. At this time, the culprits who were damaging the environment at that time were retiring at home and happily watching this happen. It’s probably such a process.
The curve in the figure above shows us very scientifically the inevitable trend of a country swinging between development and the environment. Behind this chart, the following points are reflected:
This means that if any of the above conditions can be changed, the Kuznet curse will hopefully be changed, thereby reducing the swing cycle and amplitude, controlling the cost of environmental reconstruction and restoration, and truly achieving the high-efficiency and sustainable development that people hope on the macro level. . The new generation of digital information technology is the key to this possibility.
Reference Courseware:
Economic Development and The Environment.pdf
全球气候变化与人类行为有着显著的相关性,人类行为又会改变气候的自然变化。通过研究Ice core等Archive,发现地球历史中温度与$CO_{2}$浓度有着显著正相关性。如今,人类行为使大气$CO_{2}$含量远超其正常水平,其可能引起全球变暖,冰川融化等,但仅为可能..
Global climate change has a significant correlation with human behavior, and human behavior will change the natural changes in climate. By studying Archives such as Ice core, it is found that there is a significant positive correlation between the temperature and the concentration of $CO_{2}$ in the history of the earth. Nowadays, human behavior makes the atmospheric content of $CO_{2}$ far exceed its normal level, which may cause global warming, melting of glaciers, etc., but it is only possible…
天气是指一段较短时间段内的大气状态,而气候研究的主要使更长时间中周期行动大气状态规律。简言之,气候是周期变化的天气。气候具备地域性,随纬度与海陆分布密切相关。在更长的时间维度上,我们发现地球的气候变迁也呈现出显著的周期性。
上图描述了地球的历史温度,其具有明显的周期性。值得注意的是,每当全球气候变暖,便会激发物种爆炸。而现在,正处于一次小规模的温度上升期,且温度上升速度与历史数据并无太大异常,因此无法确凿证明其与人类二氧化碳排放有关。
积雪后,随着时间推移,积雪会经历以下几种状态:
由于积雪时的温度不同,因此冰层中会以年为单位周期变化,通过计数层数即可获得某一冰层的所属年代。
大气中${}^{18}O/{}^{16}O$比值与温度密切相关,因此通过测量冰层中相应位置的同位素比值即可间接推得当时的温度。
此外,还可以通过类似的方法测得各历史时期的$CO_{2}$浓度。
由上图可看出,地球历史上,二氧化碳浓度与温度具备密切的相关性。直到近150年,这一规律被打破,大气二氧化碳浓度极具上升。人表示慌得一批⌇●﹏●⌇
$$Increase CO_{2} = Increasing Population + \Delta Emission per Person + Efficiency of CO_{2} Use$$
这个公式也可以转译为:
$$碳排量 = 人口 + 经济 - 科技$$
Intergovernmental Panel on Climate Change (IPCC) 制定了一个小目标来限制各国温室气体排放,表示到2050年,全球二氧化碳排放量要卡一半。。这其实等同于将排放量和钱联系起来,给每个国家分一部分排放量,如果多排就要交钱来买。结果已经工业化完的发达国家切走了超过40%的蛋糕,国科大校长老丁表示这不能忍啊,发展中国家的人到底还有没有人权啊ヾ(´・ ・`。)ノ”
Weather refers to the state of the atmosphere in a short period of time, and climate research mainly focuses on the law of atmospheric state in a longer period of time. In short, climate is weather that changes periodically. The climate is regional and closely related to the distribution of land and sea with latitude. In a longer time dimension, we find that the Earth’s climate change also shows significant periodicity.
The figure above describes the historical temperature of the earth, which has obvious periodicity. It is worth noting that whenever the global climate warms, it will trigger an explosion of species. But now, it is in a small-scale temperature rise period, and the temperature rise rate is not too abnormal with historical data, so it is impossible to conclusively prove that it is related to human carbon dioxide emissions.
After snow cover, over time, snow cover will experience the following states:
Because the temperature of snow is different, the ice layer will change periodically in units of years, and the age of a certain ice layer can be obtained by counting the number of layers.
The ratio of ${}^{18}O/{}^{16}O$ in the atmosphere is closely related to temperature. Therefore, the current temperature can be indirectly inferred by measuring the isotope ratio of the corresponding position in the ice layer.
In addition, the concentration of $CO_{2}$ in each historical period can also be measured by a similar method.
As can be seen from the above figure, in the history of the earth, the concentration of carbon dioxide has a close correlation with temperature. Until the past 150 years, this rule was broken, and the concentration of atmospheric carbon dioxide increased dramatically. People expressed panic ⌇●﹏●⌇
$$Increase CO_{2} = Increasing Population + \Delta Emission per Person + Efficiency of CO_{2} Use$$
This formula can also be translated as:
$$Carbon emissions = population + economy-technology$$
The Intergovernmental Panel on Climate Change (IPCC) has set a small goal to limit greenhouse gas emissions in various countries, stating that by 2050, global carbon dioxide emissions will have to be half. . In fact, this is equivalent to linking emissions with money, giving each country a portion of the emissions, and paying for more emissions. As a result, the industrialized developed countries cut away more than 40% of the cake. The president of the National University of Science and Technology, Lao Ding, said that this is unbearable. Do people in developing countries have human rights? ヾ(´・ ・`。)ノ”
Reference courseware:
Climate change-From past to Future-Yi Zou-2019.pdf
麦克斯韦大法好!!
Maxwell Dafa is good! !
$$
\nabla\cdot\vec{E} = \frac{\rho}{\varepsilon_0}
$$
$$
\nabla\cdot\vec{B} = 0
$$
$$
\nabla\times\vec{E} = -\frac{\partial B}{\partial t}
$$
$$
\nabla\times\vec{B} = \mu_0\left(\vec{J}+\varepsilon_0\frac{\partial E}{\partial t} \right)
$$
To Be Continued…
$$
\nabla\cdot\vec{E} = \frac{\rho}{\varepsilon_0}
$$
$$
\nabla\cdot\vec{B} = 0
$$
$$
\nabla\times\vec{E} = -\frac{\partial B}{\partial t}
$$
$$
\nabla\times\vec{B} = \mu_0\left(\vec{J}+\varepsilon_0\frac{\partial E}{\partial t} \right)
$$
To Be Continued…
]]>我的代码风格大致有以下几种情况:组织中追随组织领导,公司里老板说的都对,学校里大佬教的都好╮(╯▽╰)╭ 仅其它一些自己的开源小项目则遵循以下风格→_→
My coding style is roughly in the following situations: I follow the leadership of the organization, the boss in the company is right, and the big guys in the school teach well ╮(╯▽╰)╭ Only some other small open source projects of their own follow The following style→_→
首先说好,
四个空格的Tab缩进大法好!!!
四个空格的Tab缩进大法好!!!
四个空格的Tab缩进大法好!!!
大括号不换行!!!
大括号不换行!!!
大括号不换行!!!
命名以让别人一眼就能明白为佳,理想中看你的代码就像读一首英语小诗般惬意 ::aru:insidious::
编译器常量全大写,字符间用单下划线连接。如:
1 |
变量基本采用小驼峰命名,规则是单词之间直接连接(无需下划线),第一个单词全小写,之后的单词首字母大写。如:
1 | String usrName = "IoTgod"; |
频繁调用的变量名称不易过长,但却要表意清晰。
要实现这一点,可以尝试部分省略单词中的非首字母元音,如 user 可以简写为 usr,password 可省略为 passwd 或 psswd。但简化后的名字仍需容易辨识。
全局变量使用 g_ 加变量名称命名,如
1 | global int g_isLightOn = 0; |
局部静态变量使用 s_ 加变量名称,如
1 | static int s_errorCounter = 0; |
常量变量,命名与普通变量一致,如
1 | const float pi = 3.14159265; |
函数命名技巧偷师自大名鼎鼎的Nginx,并在其基础上稍有变动。
基本法则为 小写标签名+__(双下划线)+小写动词+小写名词()
名词与名词间用单下滑线链接。
例如:
1 | function db__get_usr_info(); |
其中db意为Database, 提示这个函数属于数据库操作标签,作用是获取用户信息。
如果你不需要标签(比如在一些面向对象的语言中),你可以肆意省略标签。如:
1 | function get_usr_info(); |
与变量命名不同,函数命名不必要很短,以表达清楚函数功能为目标
其实如果能把变量函数命名做好,便不需要什么注释了,但遗憾的是,,我们还是不得不注释。。
文件注释主要用于声明一些文件功能,分类名,文件名,版权等信息,一个样式如下:
1 | /** |
类注释用于声明类的一些基本信息,如类功能,作者姓名、所属分类、所属文件。例如:
1 | /** |
函数注释在函数前,主要包含函数功能,函数修饰符,其各参数的类型、名称、以及文字说明,返回值的类型及文字说明。
1 | /** |
b = c; b = 15;
First of all,
The four-space Tab indentation is great! ! !
The four-space Tab indentation is great! ! !
The four-space Tab indentation is great! ! !
The braces do not wrap! ! !
The braces do not wrap! ! !
The braces do not wrap! ! !
Name it so that others can understand it at a glance. Ideally, looking at your code is as comfortable as reading a little English poem ::aru:insidious::
The compiler constants are all uppercase, and the characters are connected by a single underscore. Such as:
1 |
Variables are basically named with small camels. The rule is to connect words directly (without underscores), the first word is all lowercase, and the first letter of subsequent words is capitalized. Such as:
1 | String usrName = "IoTgod"; |
Variable names that are frequently called should not be too long, but they should be clear.
To achieve this, you can try to partially omit non-initial vowels in words. For example, user can be abbreviated as usr, and password can be omitted as passwd or psswd. But the simplified name still needs to be easy to recognize.
Global variables are named using g_ plus the variable name, such as
1 | global int g_isLightOn = 0; |
Local static variables use s_ plus the variable name, such as
1 | static int s_errorCounter = 0; |
Constant variables, naming the same as ordinary variables, such as
1 | const float pi = 3.14159265; |
The function naming technique is stolen from the famous Nginx and slightly changed on its basis.
The basic rule is lowercase label name+__ (double underscore)+lowercase verb+lowercase noun()
Use a single underline link between nouns and nouns.
E.g:
1 | function db__get_usr_info(); |
Among them, db means Database, prompting that this function belongs to the database operation label, and its function is to obtain user information.
If you don’t need tags (such as in some object-oriented languages), you can arbitrarily omit tags. Such as:
1 | function get_usr_info(); |
Different from variable naming, function naming need not be short, aiming at expressing clearly the function function
In fact, if you can name the variable function well, you don’t need any comments, but unfortunately, we still have to comment. .
File comments are mainly used to declare some file functions, category names, file names, copyright and other information. A style is as follows:
1 | /** |
Class annotations are used to declare some basic information of the class, such as class function, author name, classification, and file. E.g:
1 | /** |
The function comment before the function mainly includes the function function, the function modifier, the type, name, and text description of each parameter, and the type and text description of the return value.
1 | /** |
一时兴起,帮番茄同学(@番茄树)配置了博客,在此记录一下流程
On a whim, help Pomodoro (@tomatotree) configure a blog, and record the process here
无聊写了一个一键搭建脚本,使用如下指令运行(详见github)
1 | $ wget https://yimian-setup.obs.myhwclouds.com/sh/auto.sh && sh auto.sh |
如果不出意外安装将自动进行,安装最后需要你手动输入如下数据库配置指令。
1 | use mysql |
安装完成后,使用你的浏览器访问以下链接
1 | http://你的服务器ip |
根据页面提示安装typecho
大部分内容保持默认即可,只需填写:
首先在你的域名服务商(腾讯云,阿里云)将你的域名A解析到你的服务器ip
打开服务器上nginx配置文件
1 | $ vi /etc/nginx/nginx.conf |
将文件中第42,47,48行的 your_domain 替换成你自己的域名即可。
重启nginx服务
1 | $ systemctl nginx -t # nginx.conf 语法检查 |
然后大约经过10分钟,你就可以通过https://你的域名
访问typecho了
如果你任然无法访问,而是被引导到一个备案页面,那么你可能需要使用https
配置自动续费ssl证书可参考我的另一篇文章(Centos7下 Nginx 配置ssl证书自动续期)
从腾讯云等申请并下载证书,然后上传nginx文件夹中的两个证书到服务器
去掉前面提到nginx.conf中第39,47-54行注释
将第47,48行后半部分分别换成你自己.crt和.key证书文件的地址
systemctl restart nginx
重启nginx
使用浏览器访问https://你的域名
参考链接:
https://www.cnblogs.com/blibli/p/7286786.html
https://blog.csdn.net/weixin_41919236/article/details/84878430
https://www.cnblogs.com/moxiaoan/p/5683743.html
https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg
Boring to write a one-click build script, use the following commands to run (see github for details)
1 | $ wget https://yimian-setup.obs.myhwclouds.com/sh/auto.sh && sh auto.sh |
If nothing happens, the installation will proceed automatically. At the end of the installation, you need to manually enter the following database configuration instructions.
1 | use mysql |
After the installation is complete, use your browser to visit the following link
1 | http://your server ip |
Install typecho according to the page prompt
Leave most of the content as default, just fill in:
First, resolve your domain name A to your server ip at your domain name service provider (Tencent Cloud, Alibaba Cloud)
Open the nginx configuration file on the server
1 | $ vi /etc/nginx/nginx.conf |
Just replace your_domain on lines 42, 47, and 48 in the file with your own domain name.
Restart nginx service
1 | $ systemctl nginx -t # nginx.conf syntax check |
Then after about 10 minutes, you can access typecho via https://your domain name
If you are still unable to access and are directed to a filing page, then you may need to use https
For configuring automatic renewal of ssl certificate, please refer to my other article (Nginx under Centos7 configure ssl certificate automatic renewal)
Apply for and download a certificate from Tencent Cloud, etc., and then upload the two certificates in the nginx folder to the server
Remove the comments on lines 39, 47-54 in nginx.conf mentioned earlier
Replace the second half of lines 47 and 48 with the addresses of your own .crt and .key certificate files respectively
systemctl restart nginx
restart nginx
Use a browser to visit https://your domain name
Reference link:
https://www.cnblogs.com/blibli/p/7286786.html
https://blog.csdn.net/weixin_41919236/article/details/84878430
https://www.cnblogs.com/moxiaoan/p/5683743.html
https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg
由于学校课程安排,作为一只电气狗第一次正经的开始搞Cpp ::aru:shy::
特记录一些建库过程遇到的坑,,→_→
Due to the school curriculum, as an electric dog, it is the first time to start doing Cpp .
Specially record some pits encountered in the process of building a database, →_→
作为头文件,.h中一般放有相应类及函数的声明。
一个典型的.h文件如下:(FileName: yimian.h)
1 |
|
为了安全起见,函数以及变量的初始化一般不放在.h文件中进行。而是习惯于建一个新的同名.cpp文件。
下面是一个与上午相对应的.cpp文件示例:(FileName: yimian.cpp)
1 |
|
有了以上文件,一个简单的C++库就建成了φ( ̄∇ ̄o)
于是我们新建一个test.cpp文件用来放置main()
1 |
|
然后便可以愉快的使用g++编译啦,指令如下:(win如何搭建GNU环境)
1 | $ g++ test.cpp yimian.cpp -o [目标文件的名称] |
之后命令行启动编译好的程序 (什么是命令行⌇●﹏●⌇)
1 | $ ./目标文件名称.exe |
如你所料,以上程序的运行结果为:
Hellow Yimian~
Version 0.0.1
坑 ::aru:meditation::
构造函数: 每次创建对象时会执行,即初始化
1 | class Line{ |
析构函数: 删除对象时执行的函数,即善后
1 | class Line{ |
拷贝构造函数: 实现复制对象时同一类对象间传参
1 | class Line{ |
构造与拷贝构造区别:
1 | A x(2); //直接初始化,调用构造函数 |
1 | class INTEGER{ |
1 | inline int Max(int x, int y){ |
To Be Continued..
As a header file, there are generally declarations of corresponding classes and functions in .h.
A typical .h file is as follows: (FileName: yimian.h)
1 |
|
For safety, the initialization of functions and variables is generally not carried out in the .h file. Instead, I am used to creating a new .cpp file with the same name.
The following is an example of a .cpp file corresponding to the morning: (FileName: yimian.cpp)
1 |
|
With the above files, a simple C++ library is built φ( ̄∇ ̄o)
So we create a new test.cpp file to place main()
1 |
|
Then you can use g++ to compile happily, the instructions are as follows: (How to build a GNU environment in win)
1 | $ g++ test.cpp yimian.cpp -o [name of target file] |
Then start the compiled program from the command line (what is the command line ⌇●﹏●⌇)
1 | $ ./Target file name.exe |
As you might expect, the result of the above program is:
Hellow Yimian~
Version 0.0.1
Pit ::aru:meditation::
Constructor: It will be executed every time an object is created, that is, initialization
1 | class Line{ |
Destructor: The function executed when the object is deleted, that is, the aftermath
1 | class Line{ |
Copy constructor: Transfer parameters between objects of the same type when copying objects
1 | class Line{ |
The difference between construction and copy construction:
1 | A x(2); //Direct initialization, call the constructor |
1 | class INTEGER{ |
1 | inline int Max(int x, int y){ |
To Be Continued..
]]>白驹过隙,挥别2018,走向2019..
作为完全独立生活的第一年,失去约束,放飞自我,狠狠地狂野了一把。然后,竟然还意外地做成了不少事情..
In the blink of an eye, I bid farewell to 2018 and march towards 2019..
As the first year of a completely independent life, I lost my inhibitions and let myself go wild.Then, unexpectedly also accomplished many things unexpectedly..
研究方面,主要搞了三个。上半年调查了Personality trait 对Second Language Acquisition 的影响,最终发现只有内倾型和Grammar优势有着significant 相关性。暑假在欧朗期间搞了关于物联网行业的一个调查,发现业内存在显著的客制化和去中心化发展趋势。下半年在暑期结论的基础上研究了一下Fog Computing, 基本上读遍了近两年IEEE上关于Fog 的文章,愈发坚信未来10年互联网云雾结合的趋势。一个感觉,中国会是这一场互联网架构变革中的关键
《 刀剑乱舞-花丸 》
《 少年锦衣卫 》
《 四月是你的谎言 》
《 摇曳露营 》
《 月色真美 》
《 擅长捉弄的高木同学 》
《 CLANNAD 》
《 KANON 》
《 AIR 》
《 可塑性记忆 》
《 冰菓 》
《 Charlotte 》
《 龙与虎 》
《 星之梦 》
《 Angel Beats 》
《 斩 赤红之瞳 》
《 罪恶王冠 》
《 言叶之庭 》
《 樱花庄的宠物女孩 》
《 未闻花名 》
《 刀剑神域 》
《 凉宫春日的消失 》
《 某科学的超电磁炮 》
《 紫罗兰永恒花园 》
《 萤火之森 》
《 声之形 》
《 中二病也要谈恋爱 》
《 缘之空 》
《 东京喰种 》
《 实力主义至上教室 》
《 工作细胞 》
《 绯弹的亚里亚 》
《 从零开始的异世界生活 》
《 埃罗芒阿老师 》
《 我的妹妹不可能有这么可爱 》
《 我的青春恋爱物语果然有问题 》
《 白色相簿2 》
《 境界的彼方 》
《 游戏人生 》
《 citrus 》
《 命运石之门 》
《 未来时在做什么?有没有空?可以来拯救吗? 》
《 路人女主的养成方法 》
《 fate 》
《 进击的巨人 》
《 玉子市场 》
《 小林家的龙女仆 》
《 吹响吧,上低音号 》
《 夏目友人帐 》
《 妖精森林的小不点 》
《 银魂 》
《 干物妹小埋 》
《 魔法禁书目录 》
《 吹响吧,上低音号第二季 》
《 利兹与青鸟 》
《 轻音少女第一季 》
本文已完结哦(๑•̀ㅁ•́ฅ)
In terms of research, there are mainly three. In the first half of the year, we investigated the impact of the Personality trait on Second Language Acquisition, and finally found that only the introverted type and the Grammar advantage have a significant correlation. During the summer vacation in Oulang, I conducted a survey on the Internet of Things industry and found that there is a significant trend of customization and decentralization in the industry. In the second half of the year, I studied Fog Computing on the basis of the conclusion of the summer vacation. I basically read the IEEE articles on Fog in the past two years, and I became more and more convinced of the trend of Internet cloud and fog combination in the next 10 years. There is a feeling that China will be the key to this Internet architecture change
“Touken Ranbu-Hanamaru”
“Juvenile Jinyiwei”
“April is your lie”
“Swaying Camping”
“The Moonlight Is Really Beautiful”
“Takagi-san who is good at teasing”
《 CLANNAD》
《 KANON》
《 AIR》
《Plastic Memory》
“Bingguo”
“Charlotte”
“Dragon and Tiger”
“Star Dream”
《Angel Beats》
“Slash the Crimson Eye”
“Guilty Crown”
“The Garden of Words”
“Sakura Village’s Pet Girl”
“Unheard Flower Names”
“Sword Art Online”
“The Disappearance of Haruhi Suzumiya”
“A certain scientific super-electromagnetic gun”
“Violet Evergarden”
“Firefly Forest”
“The Shape of Sound”
“Dating in the Second Disease”
“Fate of Space”
“Tokyo Ghoul”
“Strength Doctrine Classroom”
“Working Cells”
“Aria the Scarlet Ammo”
“Zero-Starting Life in Another World”
“Teacher Eromanga”
“My sister can’t be so cute”
“My youth romance story really has a problem”
《White Album 2》
“Beyond the Realm”
“Game of Life”
《 citrus》
“The Gate of Destiny Stones”
“What are you doing in the future? Is there any time? Can you come to save? 》
“How to raise a passerby heroine”
《 fate》
“Attack on Titan”
“Jade Market”
“The Dragon Maid of the Kobayashi Family”
“Blow, Euphonium”
“Natsume’s Book of Friends”
“The Little Things of the Fairy Forest”
“Gintama”
“Small Buried Qianwumei”
“A Certain Magical Index”
“Blow, Euphonium Season 2”
“Leeds and the Bluebird”
“Qingyin Girl Season 1”
This article is over (๑•̀ㅁ•́ฅ)
]]>人类的需求可以总结为两类,创造需求的需求,与解决需求的需求。
Human needs can be summarized into two categories, the need to create needs, and the need to solve needs.
在过去的几亿年中,由于生存资源的稀缺,自然界不断通过“物竞天择,适者生存”的法则筛选物种。这使得“一切为了生存”成为了几乎所有物种的“目标函数”。在众多存活下来的物种中,只有人类创造并有效利用了语言这一工具。语言使得人类能够进行更加复杂的推理思维(想象)以及更加有效的个体间信息交流。得益于语言,人类机智地通过预测潜在的自然选择要求提前准备必要的生存资源并建立了协调资源创造(分工)与资源分配的有效体制(市场,贸易)。不可避免地,基于“一切为了生存”这一习惯以及想象与预测这一种能力,人类形成了自主创造需求以及解决需求的行为模式,由此产生了两种基本行为动机,即创造需求的需求与解决需求的需求。
观察现有人类社会架构,无论社会群体形态是政府,社会组织还是企业(公司),其本质都是一个协调不同人类创造需求的需求与解决需求的需求的闭环生态中的一环。如果一个政府,社会组织或企业无法再继续充当好一个协调人类需求中的闭环生态的一个环节,它将迅速的被其它能更高效发挥其角色的同类或非同类社会群体替代掉。
马云是一位伟大的企业家与战略家,他一手缔造的淘宝电商平台与移动快捷支付使得人们创造需求的需求与解决需求的需求的协调变得更加高效。这使阿里巴巴获得了极大的群众的信任,表现出来就是阿里具备的极高的资源支配权,也就是其极高的市值。
当人类内部的资源因为某种原因(生产或流通环节出问题)不足以支持所有人的生存时,多余出的人类数量总会以某种形式被抹掉,也就是著名的马尔萨斯陷阱。当一个国家或民族自身遭遇马尔萨斯陷阱时,它总会选择向外发动战争来解决。因为既然要抹掉的人口数量是相对固定的,那么如果向外发动战争就会有更多的本族或本国人能够活下来,只是要将部分的死亡转移至外邦人口。古时的匈奴,二战的德国和日本都是非常典型的例子。
观察历史上的战争,有两次规模很大,我们称之为第一,二次世界大战。第一次世界大战是由于大批量机器取代人力,使得大量原有人力劳动力需要转移。但是劳动力太多没办法短时间转移,表现出来就是失业率飞涨,太多的人无所事事,没有收入,难以生存。为了防止这部分劳动力失控闹事,只得转移其注意力向外发动战争。这就是协调人创造需求的需求与满足需求的需求的市场体制出问题所导致的资源流通停滞所导致的。二战亦是如此,当电力驱动将以往的蒸汽驱动取代,大量劳动力亟需转型。1933年美国率先出现此类问题,罗斯福政府因为有多年发展积累下来的资本,因此可以通过新政建设大量民用设置强行修正资源流通生态链。但是刚因为一战被洗劫一空的德国和国土狭小资源稀缺的日本就没这么幸运了,只得将自身不可避免的马尔萨斯陷阱向犹太人和东亚转移。
如今计算技术充分发展,出现了可以通过建立多项式来fit自然复杂函数(自然规律)的人工智能算法。这就使得大多数非创造型的脑力劳动具备被取代的趋势。那么,这部分原脑力劳动力将何去何从?尤其是在中国和印度这种人口大国,一旦劳动力转型过渡不好,产生的马尔萨斯陷阱代价都将是巨大的,并最终总会由全球承担。
我的想法是,得益于数字技术的发展,如果如今的我们能够创造出一个能够协调人们创造需求的需求与解决需求的需求的闭环生态系统呢?如果当脑力劳动力被替代时这些原有劳动力能够迅速进入并适应我们创立好的闭环生态系统呢?也许我们便能够避开可怕的马尔萨斯陷阱了。
经过几千年文明的发展,当代人类已经不再满足于单单解决自然界所需要的要求,而开始尝试并创造一些非常炫酷有意思但并不怎么有利于生存的需求。也就是说,我们并不在需要所有的人类都要努力工作来确保人类能够生存,我们可以空余出好大一部分人类来探索一些新的有意思的领域。
一个可能的想法是,沉浸型网络游戏。这种网络游戏不同于现有的大部分网络游戏。现有的游戏的商业模式大都是通过程序上限制用户的部分功能体验,只用交了钱的用户才能够使用这些功能。但是我所设想的游戏更像一个平台,玩家可以从中提出自己创造的(游戏中的)需求也可以解决其他人的需求(即交易)。这就意味着一个游戏中可以出现虚拟货币,并且游戏的公众认可度会通过游戏货币与现实货币的汇率得以体现。游戏的开发者将通过开源社区而非企业进行开发,这就意味着开发者与游戏一定程度上非利益相关,从而确保了游戏的纯洁与高效,使之可能具备成为社会基础架构形式的潜能。
游戏的低门槛性并且游戏符合脑力工作者的思维习惯,使脑力劳动力能够比较轻易的从原有职业转移至相应的沉浸式游戏中。并且,由于是虚拟化技术,游戏有充分的弹性容纳大量新增的人们。不同与现在,届时社会舆论与社会思维也将会掀起一股以转入游戏为荣的热潮,以规避危害更大的战争。
有点类似于编程中的函数封装观点,现实社会类似于main函数,各个浸入式网络游戏类似于子函数。现在的社会就像是一个只有main函数的程序,所有的功能都在main函数中实现。这就使得当程序功能越复杂,越有可能发生各种bug,表现出来就是冲突甚至战争。而未来的社会更像是包含好多子函数(沉浸式游戏)的main函数。各个函数都是相互独立而又相互依赖的,每个游戏可以协调好自己的闭环生态,同时又与main函数发生部分交互。这样的社会架构将会变的去中心化并且看上去更加稳定与高效。
注:部分想法启发自知乎
In the past hundreds of millions of years, due to the scarcity of survival resources, nature has constantly selected species through the law of “natural selection by nature, survival of the fittest”. This makes “all for survival” the “objective function” of almost all species. Among the many surviving species, only humans have created and effectively used language as a tool. Language enables humans to carry out more complex reasoning thinking (imagination) and more effective communication of information between individuals. Thanks to language, human beings wittily prepare necessary survival resources in advance by predicting potential natural selection requirements and establish an effective system (market, trade) that coordinates resource creation (division of labor) and resource allocation. Inevitably, based on the habit of “everything for survival” and the ability to imagine and predict, human beings have formed a behavioral pattern that independently creates needs and solves needs, which results in two basic behavior motives, namely, the need to create needs. And the need to solve the needs.
Observing the existing human social structure, whether the social group is a government, a social organization or an enterprise (company), its essence is a part of a closed-loop ecology that coordinates the needs of different human creation needs and the needs of solving needs. If a government, social organization, or enterprise can no longer serve as a link in a closed-loop ecology that coordinates human needs, it will quickly be replaced by other similar or different social groups that can perform its role more efficiently.
Jack Ma is a great entrepreneur and strategist. The Taobao e-commerce platform and mobile fast payment created by him have made the coordination of people’s demand creation and demand resolution more efficient. This has enabled Alibaba to gain the trust of the masses, which is manifested in the extremely high resource control power that Alibaba possesses, which is its extremely high market value.
When the internal resources of human beings are insufficient to support the survival of all people for some reason (problems in production or circulation), the excess human population will always be erased in some form, which is the famous Malthus trap. When a country or nation encounters the Malthusian trap, it will always choose to launch a war to solve it. Since the number of people to be erased is relatively fixed, if a war is launched, more people of their own tribe or country will survive, but part of the death will be transferred to the Gentile population. The Huns in ancient times, Germany and Japan in World War II are all very typical examples.
Observing the wars in history, there were two large-scale wars, which we call the First and Second World Wars. The First World War was due to the replacement of manpower by a large number of machines, which necessitated the transfer of a large number of original manpower and labor. However, there is too much labor force to transfer in a short time. It shows that the unemployment rate is soaring, too many people have nothing to do, no income, and it is difficult to survive. In order to prevent this part of the labor force from getting out of control and making trouble, they had to divert their attention and start wars. This is caused by the stagnation of resource circulation caused by problems in the market system that coordinates the needs of people to create needs and meet the needs of needs. The same was true in World War II. When electric drives replaced the previous steam drives, a large number of laborers needed to be transformed. The United States took the lead in such problems in 1933. Because the Roosevelt administration had capital accumulated over the years of development, it was able to forcibly modify the ecological chain of resource circulation through the construction of a large number of civilian settings through the New Deal. However, Germany, which was looted just because of the First World War, and Japan, with its small territory and scarce resources, were not so lucky. They had to transfer their inevitable Malthusian trap to Jews and East Asia.
Now that computing technology is fully developed, artificial intelligence algorithms that can fit natural complex functions (laws of nature) by building polynomials have emerged. This makes most non-creative mental work tend to be replaced. So, where will this part of the original mental workforce go? Especially in populous countries such as China and India, once the transition of the labor force is not good, the cost of the Malthusian trap will be huge and will eventually be borne by the world.
My idea is, thanks to the development of digital technology, what if we can create a closed-loop ecosystem that can coordinate people’s needs to create needs and needs to solve them? What if these original labor forces can quickly enter and adapt to the closed-loop ecosystem that we have created when the mental labor is replaced? Maybe we can avoid the terrible Malthus trap.
After thousands of years of civilization development, contemporary mankind is no longer satisfied with simply solving the needs of nature, but has begun to try and create some very cool and interesting needs that are not very conducive to survival. In other words, we do not need all humans to work hard to ensure that they can survive. We can spare a large part of humans to explore some new and interesting fields.
One possible idea is immersive online games. This online game is different from most existing online games. The business models of existing games mostly restrict the user’s part of the functional experience through the program, and only users who have paid can use these functions. But the game I envision is more like a platform, from which players can propose their own (in-game) needs and can also solve other people’s needs (ie transactions). This means that virtual currency can appear in a game, and the public recognition of the game will be reflected in the exchange rate between the game currency and the real currency. Game developers will develop through open source communities rather than enterprises, which means that the developers are not related to the game to a certain extent, thus ensuring the purity and efficiency of the game and making it possible to become a form of social infrastructure.
The low threshold of the game and the game conforms to the thinking habits of brain workers, so that the mental labor force can be relatively easily transferred from the original occupation to the corresponding immersive game. Moreover, due to the virtualization technology, the game has sufficient flexibility to accommodate a large number of new people. Different from the present, public opinion and social thinking will also set off a wave of pride in transitioning to the game, in order to avoid more harmful wars.
A bit similar to the view of function encapsulation in programming, the real world is similar to the main function, and each immersive online game is similar to sub-functions. The current society is like a program with only the main function, all functions are implemented in the main function. This makes the more complex the program functions, the more likely it is that various bugs will occur, which manifests as conflict or even war. And the future society is more like a main function with many sub-functions (immersive games). Each function is independent and dependent on each other, each game can coordinate its own closed-loop ecology, and partly interact with the main function. Such a social structure will become decentralized and look more stable and efficient.
Note: Some of the ideas were inspired by 知 transit
]]>将blog从wordpress迁移到了Typecho。
Migrated blog from wordpress to Typecho.
]]>在过去的几十年中,互联网迅速发展,在人们的生活中起着越来越重要的作用。 在地球上几乎所有人类的参与之后[1],开发人员不可避免地期望为互联网提供更多可用的东西,然后产生了物联网(IoT)的想法。 遗憾的是,在大量事物连接到Internet的情况下,其当前体系结构似乎并不是IoT的高效解决方案。 Bonomi等。 思科的文献[2]首先注意到了这个问题,然后他们提出了革命性的Fog概念,以适应即将到来的物联网时代对越来越多的各种设备的访问。 本文将论证雾概念可以对促进物联网建设产生重大影响。
In the past few decades, Internet has been rapidly expanding and it plays an increasingly important role in people’s life. After the involvement of nearly all humans on the earth [1], developers, inevitably, expected to make more things available for the internet, which then generated the idea of the Internet of Things (IoT). Regrettably, in the case that a considerable number of things connect to the internet, its current architecture seems not to be a so efficient solution for IoT. Bonomi et al. [2] from Cisco firstly noticed this issue and they then put forward a revolutionary concept of Fog to satisfy the access of a surging number and variety of devices in the coming IoT era. This essay will argue that the Fog concept can have considerable impact on promoting IoT construction.
关于Internet的体系结构是集中式还是分布式的,引起了广泛的争议。在过去的几年中,集中化(也被称为云)已逐渐应用于现代互联网的实用结构。在此概念下,将计算,存储和控制等功能从最终用户设备迁移到云服务器已成为一种流行趋势[3]。与云不同,Fog提议将这些功能从服务器分发给用户,让用户彼此共享。
雾可以分为三个维度:雾计算,雾存储和雾控制。根据Bonomi等人的说法。 [2],雾计算意味着不仅要充分利用来自用户设备的计算资源,而且要充分利用用户与传统云服务器之间任意位置的计算资源。一个理想的例子是,视频游戏玩家的智能手机可以访问空闲计算。资源,例如玩家笔记本电脑的中央处理器(CPU),以改善他们的游戏体验。与Fog计算类似,Fog存储是第二个维度,它建议通过某种算法将用户数据从单个存储分发到多个存储设备[3]。 Google Spanner [4]是一种勇敢的做法,它是一种公共数据库,其功能是将用户的数据分发到世界各地的数据中心,以保护这些数据免遭攻击。 Shi等。 [5]指出,雾的第三个维度,雾控制,倾向于将传统的控制系统分为许多小型的独立和交互式雾系统,这些雾系统仅专注于提供单一功能。在这种情况下,如果雾灯控制系统发生故障,主机系统仍可以通过另一个类似的雾灯控制系统获得光的命令,以将服务持续保持在智能家居中。
Fog之所以为物联网的建设做出贡献的原因之一是,Fog概念下的互联网可以满足极具挑战性的物联网最小延迟要求。 Chiang&Zhang教授[3]指出,物联网应用程序(例如虚拟现实(VR)游戏,车对车通信和无人机(UAV)控制应用程序)似乎需要等待时间,即一台设备发送信号之间的时间。消息,并且目标设备接收不到10毫秒的消息,这是Cloud服务无法实现的。但是,在Yousefpour,Ishigaki和Jue [6]提出的Fog计算模型中,Fog体系结构的低级服务延迟特性已被证明是持久且稳定的。这可能意味着对延迟敏感的物联网应用可以从其延迟最小化策略中受益。
Fog促进物联网建设的另一个原因是,Fog结构化的互联网可以提供不间断的服务,而这正是物联网应用所希望的。在Fog结构中,控制行为是通过几个并行控制系统协同工作而实现的,而每个系统都有独立支持整个控制行为的潜力。这使得当设备与服务器断开连接或雾网的一部分正在更新甚至损坏时,雾服务仍然可以运行[3]。此特性对于互联车辆[2]在脱机或遇到事故时确保其运行至关重要。
除了这些原因之外,与当前的Cloud Internet相比,Fog Internet的架构似乎更加环保,尤其是在即将到来的物联网时代。在21世纪,环境保护已成为政策制定和商业活动中一个相对重要的议程。消费者期望产品中或由其制造产生的对环境有害的元素更少。但是,根据Aazam等人的说法。 [1]将来,诸如可乐瓶或树的叶子之类的所有事物都可能成为Internet的一部分,这可能需要大量的新电气设备,而其中每个电气设备都可能在一定程度上损害环境。但是,这可能意味着如果可以减少必要电气产品的数量,则将保护生态环境。研究人员评估了Fog计算的适用性,他们指出,在IoT的背景下,Fog Internet可以减少功耗并降低CO2排放[7]。显然,这些可以使互联网更接近绿色网络。
一种说法是,Fog架构的物联网在隐私和安全性方面受到质疑[3]。由于重要的Internet功能和资源都在用户附近,因此有可能遭受Fog设备的攻击。但是,这可以通过与其他技术合作来解决。例如,Zyskind和Nathan [8]设计了一种基于区块链的分散式个人数据管理算法,这是一种强大的编码方法。该算法可能是解决雾网数据安全性不足并保持系统安全的一种可行解决方案。
总而言之,尽管基于Fog概念的物联网目前可能在隐私和系统安全性方面受到质疑,但它在延迟,系统可靠性和生态友好性方面具有令人满意的性能,这是促进物联网建设的关键因素。但是,雾仍然是一个新概念,并且几乎所有相关研究都是在过去两年中进行的。要使Fog概念真正应用于物联网框架还有很长的路要走。
参考(IEEE)
[1] M. Aazam,I。Khan,AA Alsaffar和E. Huh,“物联网:整合物联网和云计算及其所涉及的问题”,2014年第11届国际巴本应用科学与技术会议论文集(IBCAST )巴基斯坦伊斯兰堡。 [线上]。 2014年1月14日至18日,伊斯兰堡,第414-419页。
这是一篇经过同行评审的早期文章,介绍了云和物联网的概念。它为我提供了研究人员如何看待Cloud以及他们如何理解2014年(当Cloud Computing开始流行时)IoT的范围。我使用它来提供有关Cloud简介的一些背景。
[2] F. Bonomi,R。Milito,J。Zhu和S. Addepalli,“雾计算及其在物联网中的作用”,在第一版MCC移动云计算研讨会论文集中。 [线上]。 2012年8月,第13-16页。
本文首先指出了雾的概念。它的作者全部来自思科,思科被认为是提供Internetworking解决方案的最强大的公司。我已使用此资源介绍了Fog和Fog计算以及其虚构的Fog-IoT应用程序之一的互联汽车的一些背景。
[3] M. Chiang和T. Zhang,IEEE物联网杂志中的“雾与物联网:研究机会概述”。 [线上]。卷3号6,pp.854-864,2016年12月。
这是最有影响力的工程师组织IEEE发布的邀请论文。 Chiang来自普林斯顿,Zhang来自思科。在本文之后,更多的研究者开始注意到Fog。我使用此资源介绍,评估和查询Fog,因为这是一种罕见的高质量论文。
[4] J.C. Corbett,J.Dean,M.Epstein,A.Fikes,C.Frost,J.J。 Furman,S。Ghemawat,A。Gubarev,C。Heiser,P。Hochschild和W. Hsieh,“ Spanner:Google的全球分布式数据库”,ACM Transactions on Computer Systems(TOCS)。 [在线] .vol。 31号3页2013年8月8日。
本文详细介绍了Google Spanner。 Google Spanner是根据本文设计的。之所以包含此来源,是因为我认为Google Spanner是Fog存储的革命性尝试。当我尝试描述雾存储的概念时,我以它为例。
[5] W. Shi,J。Cao,Q。Zhang,Y。Li和L. Xu,“边缘计算:愿景与挑战”,在IEEE物联网杂志上。 [线上]。卷3号5,第637-646页,2016年10月。
这是IEEE的期刊,已被引用8422次。它提供了有关如何将Fog应用于计算领域的一些新颖思想。我从此来源总结了Fog控制概念,并引用了他们对Fog IoT的隐私和安全性问题的质疑。
[6] A. Yousefpour,G。Ishigaki和J. P. Jue,“雾计算:努力使物联网中的延迟最小化”,2017 IEEE国际边缘计算会议(EDGE),美国檀香山,檀香山。 [线上]。 2017年,第17-24页。
作者来自德克萨斯大学,他们在雾领域并不出名。由于它是唯一一篇评估延迟(Fog IoT的最重要特征)的数学方法,并且得出了看似可靠的结果,因此我使用它来支持我的低延迟论点。
[7] S. Sarkar,S。Chatterjee和S. Misra,“在物联网环境下进行雾计算的适用性评估”,在IEEE交易云计算中。[在线]。卷6号1,第46-59页,2018年1月至3月。
该论文是在几个月前发表的。它由两名学生和一名医生撰写,因此并不那么权威。但是,由于对Fog的研究很少,我最终决定使用其建模结果来支持Fog IoT比Cloud更环境友好。
[8] G. Zyskind,O。Nathan和A.’。 Pentland,“去中心化隐私:使用区块链保护个人数据”,2015 IEEE安全和隐私研讨会,加利福尼亚州圣何塞。 [线上]。 2015年,第180-184页。
该论文由IEEE发表。 Zyskind来自麻省理工学院,这使得消息来源似乎可信。我对区块链算法感兴趣,该算法在理论上绝对是安全的,我认为这是解决Fog IoT安全问题的一种理想方法。
附件
雾和物联网PPT
Internet’s architecture had been widely controverted concerning whether it should be centralized or distributed. In the past few years, centralization, which is also regarded as the Cloud, has been gradually applied to the practical structure for modern internet. Under this concept, it has become a popular trend to move functions such as computing, storage and control from end-user devices to Cloud servers [3].Different from the Cloud, the Fog proposes to distribute these functions from servers to the users and let users share them with each other.
Fog can be classified into three dimensions: Fog computing, Fog storage, and Fog control. According to Bonomi et al. [2], Fog computing means to make full use of the computing resources not only from the user devices, but from the location anywhere between users and traditional Cloud servers.An ideal example is that, video game players’ smartphone can access the idle computing resource such as the Central Processing Unit (CPU) of players’ laptop to improve their game experience. Similar to the Fog computing, Fog storage,the second dimension, proposes to distribute user’s data from single storage to many storage devices through certain algorithm [3]. One brave practice for this is Google Spanner [4], which is a public database functioning by distributing user’s data to data centers all around the world to protect these data from being attacked. Shi et al. [5] indicated that the third dimension of Fog, Fog control, tends to split a traditional control system into many small independent and interactive fog systems which only concentrate on providing single function. In this case, if a fog light control system breaks down, the host system can still get the command of the light through another similar fog control system to keep the service incessantly in a Smart Home.
One reason why the Fog contributes to the construction of IoT is that the internet under the concept of Fog can meet the challenging minimized delay requirement of IoT. Prof. Chiang & Zhang [3] indicated that, IoT applications such as Virtual Reality(VR) games, vehicle-to-vehicle communications and unmanned aerial vehicle (UAV)control applications appear to require latencies, the time spent between one device sending a message and the target device receiving the message, lower than tens of milliseconds, which the Cloud services cannot achieve. However, in a Fog computing model proposed by Yousefpour, Ishigaki & Jue [6], the low-level service delay character of Fog architecture had been proved to be persistent and stable. This may mean that latency-sensitive IoT applications can benefit from their delay-minimizing policy.
Another factor of why the Fog facilitates IoT construction is that a Fog structured internet can provide uninterrupted services, which IoT applications are desirous of. In a Fog structure a control behavior is achieved by several parallel control systems working together while each system has the potentiality to support the whole control behavior independently. This makes it possible that a Fog service can still function when devices disconnect with the server or part of the Fog net is updating or even broken [3]. This trait becomes crucial for Connected Vehicle [2] to ensure its operation when it is offline or meet with an accident.
Apart from these reasons,comparing to the current Cloud internet, the architecture of a Fog internet seems to be more eco-friendly, especially for the coming IoT era. In the 21stcentury, environmental protection has been becoming a comparatively important agenda for policy making and business activity. Consumers expect fewer environment-harmful elements in the product or generated from its manufacture. However, accordingto Aazam et al. [1], in the future, everything such as a bottle of cola or a leaf of a tree can be part of Internet, which may require a considerable number of new electrical equipment while each one of them might hurt the environment to some extent. However, this may mean that the ecological environment would be protected if the amount of necessary electrical products could be decreased. Researchers had assessed the suitability of Fog computing and they pointed that a Fog internet can result in less power consumption and lower CO2 emission in the context of IoT [7]. Apparently, these may transform the internet closer to a green net.
One argument is that the Fog architected IoT was questioned in privacy and security [3]. Since the important internet functions and resources are near the users, it becomes risky for a Fog device of being attacked. However, this might be solved by collaborating with other technics. For example, Zyskind and Nathan [8] designed a decentralized personal data management algorithm basing on blockchain, a powerful encoding method. This algorithm might be one possible solution to cover the data security shortage of Fog net and keep the system safe.
To conclude, although the IoT based on Fog concept may be currently doubted in privacy and system security, it has satisfactory performance in respect of latency, system reliability and eco-friendliness, which are crucial factors on facilitating IoT construction. However, Fog is still a new concept and nearly all of the relevant research was conducted in the past two years. It is still a long way to go before the Fog concept can be actually applied into the framework of IoT.
Reference (IEEE)
[1] M. Aazam, I. Khan, A. A. Alsaffar and E. Huh, “Cloud of Things: Integrating Internet of Things and cloud computing and the issues involved,” Proceedings of 2014 11th International Bhurban Conference on Applied Sciences & Technology (IBCAST) Islamabad,Pakistan. [Online]. 14th – 18th January, 2014, Islamabad, 2014, pp. 414-419.
This is an early peer-reviewed article introducingthe concept of Cloud and IoT. It provides me the scope of how researcherslooked at Cloud and how they understood IoT in 2014 (when Cloud Computing beganto be popular). I have used this to provide some background about Cloud inintroduction.
[2] F. Bonomi, R. Milito, J. Zhu and S. Addepalli, “Fog computing and its role in the internet of things” In Proceedings of the first edition of the MCC workshop on Mobile cloud computing. [Online]. August, 2012, pp.13-16.
Thispaper firstly pointed out the Fog concept. Its writers were all from Cisco, which is considered the most powerfulcompany on providing Internetworking solution. I have used this sourceto introduce some background of Fog and Fog computing and the Connected Vehicle,one of their imaginary Fog-IoT application.
[3] M. Chiang and T. Zhang, “Fog and IoT:An Overview of Research Opportunities” in IEEE Internet of Things Journal. [Online]. vol. 3, no. 6, pp.854-864, Dec. 2016.
This is an invited paper published by IEEE, the most influential organization for Engineer. Chiang is from Princeton and Zhang is from Cisco. After this paper, more researchers began to notice Fog. I have used this source to introduce, evaluate and query Fog because this is a rare high-quality paper.
[4] J.C. Corbett, J. Dean, M. Epstein, A. Fikes, C. Frost,J.J. Furman, S. Ghemawat, A. Gubarev, C. Heiser, P. Hochschild and W. Hsieh, “Spanner:Google’s globally distributed database”, ACM Transactions on Computer Systems (TOCS). [Online].vol. 31, no. 3,pp. 8, Aug. 2013.
This paper detailly introduced Google Spanner. Google Spanner was designed based on this paper. I include this source because I think Google Spanner is are volutionary attempt of Fog storage. And I have used this as an example when I try to describe the concept of Fog storage.
[5] W. Shi, J. Cao, Q. Zhang, Y. Li and L. Xu, “Edge Computing: Vision and Challenges” in IEEE Internet of Things Journal. [Online]. vol. 3, no. 5, pp. 637-646, Oct. 2016.
This is a journal from IEEE and have been cited 8422 times. It provides several novel ideas concerning how would the Fog be applied in computing field. I have summarized the Fog control concept from this source and cited their questioning concerning the privacy and security issue of Fog IoT.
[6] A. Yousefpour, G. Ishigaki and J. P. Jue, “Fog Computing: Towards Minimizing Delay in the Internet of Things” 2017 IEEE International Conference on Edge Computing (EDGE), Honolulu, HI. [Online]. 2017, pp. 17-24.
The authors were from Texas University and they are not famous in Fog field. As it is the only paper which evaluated latency, the most significant trait of Fog IoT, mathematically and got a seemly reliable result, I have used this to support my low latency argument.
[7] S. Sarkar, S. Chatterjee and S. Misra, “Assessment of the Suitability of Fog Computing in the Context of Internet of Things”in IEEE Transactions on Cloud Computing.[Online]. vol. 6, no. 1, pp. 46-59, Jan.-March 2018.
This paper was just published a few month ago. It was written by two students and one doctor, which makes it not so authoritative. However, since there are few Fog research, I finally decide to use its modeling result to support that Fog IoT is more environment friendly than Cloud.
[8] G. Zyskind, O. Nathan and A. ‘. Pentland,”Decentralizing Privacy: Using Blockchain to Protect Personal Data” 2015 IEEE Security and Privacy Workshops,San Jose, CA. [Online]. 2015, pp. 180-184.
This paper was published by IEEE. Zyskind was from MIT, which makes the source seems to be credible. I am interested in the blockchain algorithm which is theoretically absolutely safe as it mentioned and I think it is one ideal method to deal with the security problem of Fog IoT.
Attachment
Fog and IoT PPT:
Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。 Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。 Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。
Nextcloud is an open-source software project coded with PHP. It had provided a ideal private cloud-storage solution which was considered to be reliable and stable. This blog aims to present a Nextcloud Building instruction step by step for the purpose of helping freshman and future reviewing. Nextcloud is an open-source software project coded with PHP. It had provided a ideal private cloud-storage solution which was considered to be reliable and stable. This blog aims to present a Nextcloud Building instruction step by step for the purpose of helping freshman and future reviewing. Nextcloud is an open-source software project coded with PHP. It had provided a ideal private cloud-storage solution which was considered to be reliable and stable. This blog aims to present a Nextcloud Building instruction step by step for the purpose of helping freshman and future reviewing.
如果您的服务器是新服务器,强烈建议将其更新到支持bbr模式的较高版本,这是google提供的高级centos系统核心,它可以使您的服务器更高效。
首先从github下载并安装bbr core。
1 | $ wget -N --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh &&\ |
使用代码检查核心版本。 如果大于4.9.0,则可以。
1 | $ uname -r |
预期显示:net.ipv4.tcp_available_congestion_control = bbr cubic reno
1 | $ sysctl net.ipv4.tcp_available_congestion_control |
预期显示: net.ipv4.tcp_congestion_control = bbr
1 | $ sysctl net.ipv4.tcp_congestion_control |
预期显示: net.core.default_qdisc = fq
1 | $ sysctl net.core.default_qdisc |
预期显示: xxxxxxxx tcp_bbr
1 | $ lsmod | grep bbr |
##安装Nginx服务
从nginx组织网站上提取nginx软件包。
1 | rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
安装 Nginx.
1 | $ yum install -y nginx |
启动 nginx .
1 | $ systemctl start nginx.service |
设置nginx的首选项文件。 单击此处以获取推荐的nginx.conf文件。
1 | $ cd /etc/nginx |
申请ssl认证。 用your_domain.crt(key)重命名并将其下载到服务器:/ etc / nginx / ssl /
1 | $ //Use scp -r (my ssl file route on my windows)/your_domain.crt \root@(your server ip): /etc/nginx/ssl |
检查并重新启动Nginx服务。
1 | $ nginx -t |
##安装docker
从官方网站拉并安装docker服务。
1 | $ curl -sSL https://get.docker.com/ | sh |
启动docker服务
1 | $ systemctl start docker |
从github提取nextcloud和mariadb(centos上的简化mysql数据库)图像。
1 | $ docker pull rootlogin/nextcloud && docker pull mariadb:10 |
使用Docker启动映像mariadb。
1 | $ docker run -d --name nextcloud_db -v /data/mysql:/var/lib/mysql -e \ |
使用docker启动映像nextcloud。
1 | $ docker run -d --name nextcloud --link nextcloud_db:nextcloud_db -p 127.0.0.1:9001:80 -v /data/nextcloud:/data rootlogin/nextcloud |
那是服务器上的最后一步。 现在,从浏览器开始http:// YOUR_DOMAIN /。
建议将“ localhost”替换为“ nextcloud_db”。
参考文献列表:
https://www.moerats.com/archives/420/
https://my.oschina.net/yule526751/blog/799004
https://www.moerats.com/archives/420/
If your server is a new one, it is strongly recommended to update it to an upper version supporting bbr mode, which is a senior centos system core provide by google and it could make your server more efficient.
Firstly download and install bbr core from github.
1 | $ wget -N --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh &&\ |
Use the code to check the core version. If it’s large than 4.9.0 it’s OK.
1 | $ uname -r |
Expected return:net.ipv4.tcp_available_congestion_control = bbr cubic reno
1 | $ sysctl net.ipv4.tcp_available_congestion_control |
Expected return: net.ipv4.tcp_congestion_control = bbr
1 | $ sysctl net.ipv4.tcp_congestion_control |
Expected return: net.core.default_qdisc = fq
1 | $ sysctl net.core.default_qdisc |
Expected return: xxxxxxxx tcp_bbr
1 | $ lsmod | grep bbr |
Pull nginx package from nginx orginzation website.
1 | rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
Install Nginx.
1 | $ yum install -y nginx |
Start nginx service.
1 | $ systemctl start nginx.service |
Set preference file of nginx. Click here to get recommended nginx.conf file.
1 | $ cd /etc/nginx |
Apply ssl certification. Rename it with your_domain.crt(key) and download it to your server: /etc/nginx/ssl/
1 | $ //Use scp -r (my ssl file route on my windows)/your_domain.crt \root@(your server ip): /etc/nginx/ssl |
Check and restart nginx service.
1 | $ nginx -t |
Pull and install docker service from official website.
1 | $ curl -sSL https://get.docker.com/ | sh |
Start docker service.
1 | $ systemctl start docker |
Pull nextcloud and mariadb(simplified mysql database on centos ) images from github.
1 | $ docker pull rootlogin/nextcloud && docker pull mariadb:10 |
Start image mariadb with docker.
1 | $ docker run -d --name nextcloud_db -v /data/mysql:/var/lib/mysql -e \ |
Start image nextcloud with docker.
1 | $ docker run -d --name nextcloud --link nextcloud_db:nextcloud_db -p 127.0.0.1:9001:80 -v /data/nextcloud:/data rootlogin/nextcloud |
That is the last step on server. Now let’s start http://YOUR_DOMAIN/ with your explorer.
Recommend to substitute the “localhost” to “nextcloud_db”.
Reference List:
https://www.moerats.com/archives/420/
https://my.oschina.net/yule526751/blog/799004
https://www.moerats.com/archives/420/
重新搭建236的IoT底层平台,并通过Blinker手机控制,实现操控监视。平台拥有很强的扩展性及可移植性,目前实现了夜间自动灯光,火灾烟雾报警,床帘内:上床小夜灯开,自动通风,LED自动感应阅读状态等设计。
Re-build the 236 IoT underlying platform and control it through Blinker mobile phone to realize control and monitoring. The platform has strong scalability and portability. At present, it has realized the design of automatic lighting at night, fire and smoke alarm, and bed curtain: the night light on the bed, automatic ventilation, and LED automatic sensing reading status.
早在大一上学期,意外接触Arduino,开始了解单片机。17年11到12月份,曾利用Arduino uno 3搭建了一台功能简易的自动控制平台,主要实现了由红外遥控器控制床帘Light以及小夜灯的功能。在运行一个半月后,由于一次上传代码时意外短路,导致单片机烧毁,自此系统报废,但线路依旧保留。
考虑到第一次搭建完全新手,代码缺少必要注释,更有通向床帘的数十根线路完全缠绕在一起,无法分清具体那几根控制什么传感器或设备,故设重建计划暂时搁置。
半年后的暑假,参加欧朗中国的IETE项目,课程中与公司研发组的软件和硬件工程师愉快得体验了一些单片机的应用研发,了解了单片机及物联网的基础组成及发展现状,在工作闲余,对原有线路进行了测试,分类,贴标签,使其得以正常使用。
8月份,项目结束,回到家中。考虑到家中原有太阳能需加水后需手动关闭,时常发生晚上洗澡后加水忘关情况,造成大量水资源浪费。于是结合欧朗所学,以及自己的实践经验,搭建了一套基于wifiduino和电磁阀的太阳能自动加水系统。为了照顾年老的姥姥方便夜间上厕所,在走廊过道利用原有废弃有线网络线路,搭建了与手动开关密切集合的自动感应开灯系统。由此收获了许多关于家用线路的架设经验。
回到苏州,考虑到一年来的相关经验,认为是时候尝试搭建一套可长期使用的商品级的强扩展性的IoT系统,于是…start搞事情
搭建初期,一切还算顺利。但是随着系统逐渐趋于完善,代码逐渐复杂,经典的Arduino式软硬件兼容问题又逐渐开始捣乱啦~
首先遇到的问题是(大概是由于esp8266与wifiduino的一些神奇的勾当)当把代码通过usb传给wifiduino的时候,代码运行是正常的,但是在断电重启或者Reset后,它就死掉了。。。而且,这个问题只在上传占用了大约十个左右Digital通信口的程序之后才出现,如果只是上传简单的示例程序则运行正常,,最后从淘宝钓了一只路由器用的USB-DC9V升压线,用其持续供电,才确保了板子的正常运行。
遇见的第二个问题也是很神奇。就是,wifiduino在连接tx与rx后竟然无法上传代码!!!当时我一直以为是板子坏掉了
本来是只有一块板子的,但是当他装载了太多控制端之后,大概是死掉了,wifi无法正常连接Blinker..于是我只用它作为控制器,然后将另一块板子连接wifi,将接受信息通过串口传递给主板子执行。于是,运行终于正常了,,,莫名想到了欧朗当时考试的译码器
功能的话目前看来也不是很多,4只传感:2只超神波测距,1只光敏,1只烟雾,4个控制端:1只床外探照灯ledB, 1只小夜灯,1只床头灯,1个小风扇。实现的话,无非就是其相互配合,目前可以准确识别我的存在位置4个,室友的存在位置1个。然后配合行为习惯编程调整灯与风扇。
未来的话,还打算逐步实现–传感层:对室内是否有人的识别 智能层:对室友在宿舍时间规律的学习(神经网络) 控制层:空调红外控制,基于esp8266的微型继电器对宿舍大灯的控制,以及,快乐的话考虑自动养一株辣椒什么的…
最后附上两个板子的代码,,还会更新的哦//祝生活愉快啦~
代码:https://uk.cloud.yimian.xyz/index.php/s/YbPwdkt2mANYoiS
板子运行超过150天,一切运行正常。
出现过几次分钟级别的控制失效事件,怀疑宿舍电网供压不稳导致,事后均自动修复。
上文代码链接已弃用,如有兴趣,可查看由其代码开发的wIoT项目!
稳定运行611天18小时32分钟,正式退役!
已完结
As early as the first semester of my freshman year, I accidentally came into contact with Arduino and started to understand microcontrollers. From November to December 2017, I used Arduino uno 3 to build a simple automatic control platform, which mainly realized the function of controlling the bed curtain Light and night light by the infrared remote control. After running for a month and a half, due to an accidental short circuit when uploading the code once, the single-chip microcomputer was burned out. Since then, the system has been scrapped, but the circuit remains.
Considering that the code is completely new to the first time, the code lacks necessary comments, and dozens of lines leading to the bed curtain are completely entangled, and it is impossible to distinguish which sensors or devices are controlled by the specific ones. Therefore, the reconstruction plan is temporarily shelved.
In the summer vacation half a year later, I participated in the IETE project of Oulang China. During the course, I had a pleasant experience with the software and hardware engineers of the company’s R&D team in the application and development of some single-chip microcomputers, and learned about the basic composition and development status of single-chip microcomputers and the Internet of Things. In addition, the original circuit was tested, classified, and labeled to enable it to be used normally.
In August, the project ended and I returned home. Considering that the original solar energy in the home needs to be turned off manually after adding water, it often happens that the water is forgotten to turn off after taking a bath at night, resulting in a lot of water waste. So combined with what Oulang has learned and his own practical experience, he built a solar automatic water filling system based on wifiduino and solenoid valve. In order to take care of the elderly grandma and facilitate the use of the toilet at night, the original abandoned wired network lines were used in the corridors to build an automatic induction light-on system closely integrated with the manual switch. This has gained a lot of experience in the installation of home wiring.
Back in Suzhou, considering the relevant experience in the past year, I thought it was time to try to build a long-term commodity-level and highly scalable IoT system, so…start doing things
At the beginning of the construction, everything went smoothly. However, as the system gradually improves and the code becomes more complex, the classic Arduino-style software and hardware compatibility problems are gradually starting to mess up~
The first problem encountered is (probably due to some magical activities between esp8266 and wifiduino) when the code is transferred to wifiduino via usb, the code runs normally, but after a power failure or reset, it will die . . . Moreover, this problem only appeared after uploading a program that occupies about ten Digital communication ports. If you only upload a simple sample program, it runs normally. Finally, I fished a USB-DC9V boost cable for routers from Taobao. , Use its continuous power supply to ensure the normal operation of the board.
The second problem encountered is also very magical. That is, wifiduino can’t upload code after connecting tx and rx! ! ! I always thought the board was broken
Originally there was only one board, but when he loaded too many consoles, it probably died and the wifi could not connect to Blinker.. So I only used it as a controller, and then connected another board to wifi, and it would accept The information is passed to the motherboard for execution through the serial port. As a result, the operation was finally normal,,, inexplicably thought of the decoder of Oulang at that time.
In terms of functions, it seems that there are not many at present. 4 sensors: 2 Ultra Sure Wave Ranging, 1 photosensitive, 1 smoke, 4 control terminals: 1 outdoor searchlight ledB, 1 night light, 1 bed Headlight, 1 small fan. If it is realized, it is nothing more than their mutual cooperation. Currently, 4 locations of my existence and 1 location of my roommate can be accurately identified. Then program and adjust the lights and fans in accordance with behavior habits.
In the future, it is planned to be implemented gradually-Sensing layer: Recognition of whether there are people in the room. Intelligent layer: Learning the time rules of roommates in the dormitory (neural network). Control layer: Air-conditioning infrared control, based on esp8266 miniature relay for dormitory headlights Control, and, if you are happy, consider automatically raising a pepper plant…
Finally, the codes of the two boards are attached, and they will be updated.//Happy life~
Code: https://uk.cloud.yimian.xyz/index.php/s/YbPwdkt2mANYoiS
The board has been running for more than 150 days and everything is running normally.
There have been several minute-level control failure events. It is suspected that the dormitory’s power grid is not stable, and they are automatically repaired afterwards.
The above code link has been deprecated, if you are interested, you can check the wIoT project developed by its code!
Stable operation for 611 days, 18 hours and 32 minutes, officially retired!
The END.
]]>你好,世界!
Hello World!
在我19周岁生日这一天,我的第一个通过wordpress自建的Blog网站正式上线啦~
On my 19th birthday, my first blog site built by WordPress was officially launched~
]]>