dependabot/npm_and_yarn/prismjs-1.21.0
iotcat 4 years ago
parent 4ff76ddb08
commit 6ca581ba37
  1. 2
      _config.yml
  2. 6402
      package-lock.json
  3. 51
      source/_drafts/gre.md
  4. 20
      source/_drafts/tomato.md
  5. 202
      source/_posts/2018-retrospect-and-prospect.md
  6. 71
      source/_posts/arduino-operator-string-issue.md
  7. 69
      source/_posts/awesome-beef-noodle.md
  8. 93
      source/_posts/build-236-iot-platform-on-wifiduino.md
  9. 151
      source/_posts/build-nextcloud-server-on-centos7.md
  10. 115
      source/_posts/centos7-auto-install-typecho.md
  11. 49
      source/_posts/cognitive-derived-theory.md
  12. 136
      source/_posts/coro.md
  13. 243
      source/_posts/cpp-summary.md
  14. 77
      source/_posts/crown-place-erp.md
  15. 497
      source/_posts/cs-ece-master-programs.md
  16. 132
      source/_posts/digital-circuit.md
  17. 115
      source/_posts/economy-environment-sustainability.md
  18. 113
      source/_posts/electromagnetism.md
  19. 101
      source/_posts/fog-architecture-and-internet-of-things.md
  20. 148
      source/_posts/global-climate-change.md
  21. 42
      source/_posts/happy.md
  22. 45
      source/_posts/hello-hexo.md
  23. 50
      source/_posts/hello-typecho.md
  24. 46
      source/_posts/hello-world.md
  25. 128
      source/_posts/ivisa-checklist.md
  26. 161
      source/_posts/js-notes.md
  27. 112
      source/_posts/kms.md
  28. 149
      source/_posts/liverpool-accom-inves.md
  29. 66
      source/_posts/mail-api.md
  30. 150
      source/_posts/my-code-style.md
  31. 283
      source/_posts/rand-pic-api.md
  32. 105
      source/_posts/smart-home.md
  33. 373
      source/_posts/smartfarming-surf.md
  34. 142
      source/_posts/ssl-auto-apply.md
  35. 58
      source/_posts/trade-war.md
  36. 76
      source/_posts/traveler-cheque.md
  37. 78
      source/_posts/two-fundamental-demands-of-human-beings.md
  38. 537
      source/_posts/wiot.md
  39. 59
      source/_posts/zuozongtang-chiken.md
  40. 41
      source/links/index.md
  41. 2126
      yarn.lock

@ -58,7 +58,7 @@ highlight:
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ''
per_page: 10
per_page: 0
order_by: -date
# Category & Tag

6402
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,51 @@
---
title: GRE备考核心矛盾分析
date: 2020-08-21
categories:
- life
tags: gre
---
我的GRE备考从8.21正式开始,8.28首考(成绩未提交),预计于9月底完成,目标155+170W3.5,总过程历时一个月半。本文阐述了在我的GRE备考过程中,提炼出的矛盾与方法论的汇总。
<!--more-->
## 备考定位
我备考GRE的主要目的是,借助GRE的备考过程,有效提升英语词汇量与论文阅读水平(速度)。于此同时,此次备考过程也将成为Tomato Proj的有效试验,为今后实现有序和谐的生活节奏提供经验参考。此外,申请一些美国学校则也需要提供GRE成绩。
## 备考矛盾分析
### 时间不足
由于暑假投入大量时间,准备申研材料,学习积累专业知识,准备FYP,我只留下了1个月左右的时间准备GRE。因此,时间不足的问题需要由方法论的精进来弥补。
## 数学矛盾分析
### 跳过机制
GRE数学的关键对于我们经理过理科高考的人来说,通过一定量的练习回顾,将期望调节到170左右,是比较轻松的。但是这并不意味着就可以对GRE数学掉以轻心。在备考GRE数学时,除了提高期望外,更加重要的是如何缩小方差。考虑到GRE数学在设计上时间较为紧张,只有35分钟,而且有可能会遇到一些很难的题,或者看不懂的题,这时就要果断跳过,及时止损。因此,在数学的备考过程中,需要**形成一套判断是否跳过的判断机制,且判断耗时越少越好**。
### 题型解析机制
在数学的备考过程中,除了减小方差,也要有效提高期望。与高考不同的是,GRE数学的语言是英语,且还有一系列的逻辑陷阱。因此,要提高GRE数学的期望,需要对以下三点进行"程序化"处理,提炼出相应方法论。
- 数学常用英语
- 各种题型解题方法套路
- 选择方法的方法
### 查错机制
尽管GRE数学的考试时间是否有限,但并不排除有时间会剩下的可能性。因此,可以注意锻炼一套有利于利用剩余时间差错的机制。比如,合理规划使用演草纸等。
## 阅读矛盾分析
### 一遍读懂
通过这几天的训练,我发现了一个现象,及如果最开始看文章没有看懂,那么后面做题基本靠蒙。因此,GRE阅读一定要先将文章看懂。要实现这一点,可以通过提炼句子的s3版本,通过居间关系连接词对下一句内容进行预判,以此递归。
### 提高速度
在有限的时间内把文章看懂。。
## 填空矛盾分析
### 词汇量
先把3000刷熟,再把托福词汇刷过。。然后再看看。刷单词时一定要批量(比如以500词为一组),多变。一天过好几遍,闪现就行,几天后就会见效。
### 公式化处理
把题目抽象成公式处理。。

@ -0,0 +1,20 @@
---
title: Tomato生活方法论
date: 2020-08-25
categories:
- life
tags: life
---
考虑到大学后由于种种原因,我的生活节奏是混乱的。起兴做项目时,经常一连数周晚上熬夜到3点以后。而其它好多必要且我也很想做的事情(比如健身,禅修)则被不停地推迟或搁浅,这让我经常感到沮丧,焦虑甚至自我厌恶。我深刻地认识到,我渴望的是一种更加有序的生活体验,以及节奏所带来的高效和自我实现。
<!--more-->
## 概述
Tomato命名灵感源自番茄,一种被联合国教科文组织同时鉴定为蔬菜和水果的生活常见植物果实。成熟的番茄通常为红色,富含维生素C等各种人体急需的生命维持物质。在2019年的暑假,我第一次意识到身体不再是可以为所欲为而不崩溃的系统了,而当时留在学校做项目的我唯一能做的就是去超市买了好多番茄,然后全部吃掉。当时我第一次意识到,在某种程度上,番茄给与了我生命。
从另一角度讲,番茄是对番茄工作法的提炼和个性化的改进。这一方法论旨在帮助我实现生活中的需求管理,将需求的体现与欲望的管理相综合,从无序地小孩子似的随性发泄调节为主动预判调节。Tomato更加关注的是源自自身的需求。也许从短期看,这一方法将降低我的专业产出,因为它将削减我的项目时间。但是,现有的无序的项目开发无疑是一种对身体的透支,甚至是对生命的透支。(我在英国体验的pannic attack某种意义上引证了这一点)此外,从宏观的方向角度,我认为Tomato方法能够帮助我更加有效地判读具有潜力的发展方向,进而规避一些坑。因此从长远角度,Tomato对专业产出未必是损失,这有些像控制疫情还是复工复产的关系。
## 落地
20年9月、10月,我的主要矛盾是申研和英语。根据Tomato的精神,工作日每天上午准备反馈延时最迟的工作,下午准备适中的,17点专门用来锻炼、作曲以及游戏,晚上搜集资料以及做总结。因此,在这段时间,工作日上午,我将背单词,联系口语,研究听力。工作日下午,研究填空,阅读与写作。晚上准备推荐信事宜,搜集资料以及总结。每周六,理论上白天用于改进原有系统,做一些实验等。晚上用于总结。周日理论上是假期,可以进行爬山,回老家等活动。

@ -1,18 +1,49 @@
---
title: 2018 – Retrospect and Prospect
title: 2018 – 年度总结
titleEN: 2018 – Retrospect and Prospect
date: 2019-01-08
categories:
- life
tags:
- summary
---
{% raw %}<span class=".zh">{% endraw %}
白驹过隙,挥别2018,走向2019..
作为完全独立生活的第一年,失去约束,放飞自我,狠狠地狂野了一把。然后,竟然还意外地做成了不少事情..
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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..
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 代码方面:
- 最大的收获是发现并加入了Github
@ -171,3 +202,172 @@ tags:
---------------
本文已完结哦(๑•̀ㅁ•́ฅ)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Code:
- The most rewarding part was discovering and joining Github
- Master a lot of new languages, including C, C++, PHP, JavaScript, VBS, HTML, CSS, Python, shell, DOS, Matlab (roughly in the order of proficiency)
- Runs 7 servers, 1 Win2012 in Shanghai (the first), 3 Cent in Sydney, Atlanta, and London, 2 Cent in China in Shenzhen and Beijing, plus Ubuntu Raspberry Pie in my dorm room, hahaha,,,,
### The First Half of The Year
- In the first half of the year, I helped my father to do 10,000 businesses, connected with the Server in Shanghai via FTP, and managed to make a company website. Unfortunately, in the summer vacation, I was lost by the hacker friends in Latvia (at least IP is), so I abandoned the pit of Windows
- 5 or 6 months trying to make a platform Steel15 high school classmate, but because the planning mode is impractical, the schedule has been put on hold, and finally in August hacked together (from a good habit to pay close attention to regular backups (, ̀ omega, ́) y)
- in July, when I was in the r&d department of euron, I worked with my team members to make a student electronic ID card based on WeChat small program. I worked as a back-end engineer in the card, and finally I did a project defense in front of the school and enterprise bosses
- During the summer vacation, I conducted two projects with Wifiduino at home, such as solar energy automatic water addition and self-induction of corridor lights. During the designing and purchasing of materials, I got some knowledge of water pipes and electric wires.It is said that the board is still running well
### September and October
- In September, it started to move into Linux, experimenting with servers through Vultr, setting up a private SS server that has been scientifically connected ever since
- In September, NextCloud based on open source set up the first private network disk in London Docker. It has been used until now, except for domestic access speed, ~ ~ ~ ", hoping to get better after going to Britain
- In September, the dormitory IoT system was rebuilt and has been working well despite a few bugs so far
- In October, frustrated by the number of banned Yimian dramas, the first Yimian Video platform was set up
- In October, I tried to run Linux Mail service for several times, but failed. So far, I still use The Windows Mail in May
- In October and November, C language as made a small game of rock scissors with data network synchronization and background music
- In October, developed an SMS verification code login system
- In October, based on shell and a series of Linux software combined with Nginx, I built a port traffic management and statistics system for SS server, and then opened it to my classmates and friends to help them access the Internet scientifically (But my friends in Beijing didn't respond well, maybe the wall in Beijing is relatively high, I hope this year we can solve this problem by adding confusion).
### November and December
- In November, following an online class at Peking University, I tried to engage in image recognition of Python TensorFlow, and then successfully abandoned it halfway. . But finally I have a practical understanding of AI, and understand that the essence of the current neural network is to use a tuft of polynomials to fit a complex natural function
- In November, I started my life’s first Raspberry Pi with an infrared camera. Currently, it can provide live streaming video services.
- In December, I tried to develop a WeChat applet for automatic sign-in in class, but failed by ICE's powerful restriction algorithm.
- In December, built a blog platform based on Wordpress that loads slowly,
- In December, I stumbled upon frp, successfully achieved service intranet penetration, and applied it to the Raspberry Pi and my PC
- In December, I worked on a hotel management system with 5 people in the C language team, and my biggest contribution was to build a bottom-level database system from scratch. The processing speed was slow, even though the hash algorithm had been introduced. .
- At the end of December, I entered the pit of Github and came into contact with the DIYgod god
- At the end of December, based on Dplayer, improved Yimian Video to the third generation, supported hls, built a bullet screen server, added a bullet screen function, and connected to station B bullet screen through a third-party API
- At the end of December, based on Aplayer, a web music player plug-in based on PHP control was developed, which can directly play NetEase Cloud designated playlists
- At the end of December, improved the previous login page, added original anti-robot algorithm, and upgraded it to a fully dynamic page
- At the end of December, contacted pjax, YimianVideo, and video list pilot applications, and started the dynamic transformation of the whole site
- At the end of December, started the Cuckoo machine, using its API to automatically print today's site visit statistics every night
## Learning Aspect:
- After completing the English EAP course, IELTS exchange is about 6.5 points. After all, it has been taught in English for a year and a half.
- In the liberal arts, I am very happy in history and law. Well, I don’t comment.
- I supplemented basic psychology, social psychology, developmental psychology, abnormal psychology, psychological counseling, and psychometrics at the beginning of the year. I planned to take the counselor exam, but I was very sorry because I was under the age requirement. I'm so happy to learn so many things I like
- Circuits, at least basic DC and AC analysis can be done
- Daily physical modeling in November, and finally the daily construction can not be solved...
- I took the course of urban planning, although I can’t bear to look directly at the impact on the equalization, but now I feel more and more feeling about the city.
- The club joined Infoco and got into the management based on the relationship, and then it was always the occasional meeting to come up with ideas, etc.
## Research:
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
## Life aspect
### ACG
- Chasing Fan 56, which are
> "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"
- Watch TV series: "lie to me", "Silicon Valley", "negotiator", "translator", "unnatural death"
### Happiness
- Bilibili watched the video for 425 hours, and probably finished Jack Ma's speech. The most obsessed up host turned out to be the Global Times. .
- 1017 hours of listening to songs in Yuncun
- Listened to a symphony concert
- Five trips in Qufu, Taihu Lake, Suzhou Humble Administrator's Garden, Jinan and Nanjing
- Go to the bar once
- Three karaoke
- Visit grandma, grandpa, and cousin and nephew
- Learn to drive, subject one, subject two, driving from Fangte to Yamaguchi without a license
- I watched a lot of movies, so I won’t count them
- Pay more attention to life and hair in the later period, and average 2 boxes of milk a day, and gradually keep up with it early
## Economic Aspect
- Project expenses are getting longer, spending 1000+ in 18 years, but still manageable
- Scholarship subsidy
- Relatively stable investment strategy, average 7-day annualization can reach 4+, the highest time is 7
- Cash flow control is okay, there is no cash shortage in one year
- Then I found that if I just want to spend more money, I really need to work hard
## Exhibition:
- Participate in the China Developers Conference, open source
- Go to Shanghai to participate in the World Mobile Conference and get a glimpse of the future of China's Internet
## Reflection:
- Staying up late is a bit too small, visually check the average of going to bed at 1:30 in the second half of the semester
- The number of overnight stays is slightly higher, about 15 times, of which 3 times are more than 30 hours overnight
- Less exercise, only one swim, not much running
- I can't get up often so I skip breakfast
- The rhythm of life is chaotic when I start the process, and I am too eager to pursue functional perfection and perfection
- Rhythm is unstable in the second half of the second semester of high school, and mathematics is basically not learned in the half semester
- Too much attributed to the school curriculum, which is very problematic in itself
## Looking forward to 2019:
- A more comfortable life
- More pleasant rhythm
- More sincere interpersonal
- Top 100 Github China in 2020
- Stylistic two blossoms
---------------
This article is over (๑•̀ㅁ•́ฅ)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Arduino中[]=重载导致的String调用问题
titleEN: String call problem caused by []= overload in Arduino
date: 2019-07-21
categories:
- tech
@ -7,11 +8,41 @@ tags:
- Arduino
- cpp
---
{% raw %}<span class=".zh">{% endraw %}
最近在物联网开发中使用Arduino搭建LoRa网关和节点,发现在调用String时总遇到一些奇奇怪怪的现象。经过排查,发现是由于其它地方[]=运算符的重载所导致。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
为了方便,在开发节点时,我们使用了[LoRa-Socket](https://github.com/iotcat/lora-socket)和[ArduinoJSON](https://arduinojson.org/)作为依赖。我们发现这两个依赖分别使用时表现良好,但如果在同一个项目文件中使用,则会导致一些怪异的问题。
## 情况一
@ -41,4 +72,42 @@ tags:
- 作为参数传给函数时会失败,读取出来是空(与案例一类似)
## 综述
通过上述两个案例,我们可以初步总结出,这是由于[]=赋值运算符的重载与String有冲突。只要使用[]=重新定义String,即有可能出现String怪异的问题。
通过上述两个案例,我们可以初步总结出,这是由于[]=赋值运算符的重载与String有冲突。只要使用[]=重新定义String,即有可能出现String怪异的问题。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
For convenience, we used [LoRa-Socket](https://github.com/iotcat/lora-socket) and [ArduinoJSON](https://arduinojson.org/) 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.
## Situation One
When calling a function through a pointer, the String parameter passing is abnormal. code show as below:
```C
inline static void _onReceived(const String& msg, const String& from, const String& to, const String& type){
(*_f)(msg, from, to, 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:
- Found that if you change String to int or other types, the parameters passed to _f are all normal. Only the String and char types are problematic.
- We tried to convert String to other types, and then back, but to no avail.
- The declaration of global variables of type String or char will crash the microcontroller.
- When we delete the ArduinoJSON dependency, the passing of String parameters is normal.
We can conclude that this strange phenomenon is caused by the conflict with the ArduinoJSON package.
## Situation Two
When using [ArduinoVector](https://github.com/tomstewart89/Vector) 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:
- Truncated during assignment
- String values are locally out of order
- Part of the String value is garbled
- It will fail when passed as a parameter to the function, and it will be empty (similar to case 1)
## Summary
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.
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 香辣牛肉面
titleEN: Spicy Beef Noodle
date: 2020-01-19
categories:
- cook
@ -8,10 +9,42 @@ tags:
- noodle
---
{% raw %}<span class=".zh">{% endraw %}
自研香辣牛肉面做法~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Self-developed spicy beef noodle practice~
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 材料准备(两人份)
- 面条
- 两个鸡蛋
@ -37,4 +70,38 @@ tags:
- 加剩下的葱绿末
## 配图
![香辣牛肉面-2020-01-19](https://api.yimian.xyz/img/?path=imgbed/img_6dff3385_3648x2736_8_null_normal.jpeg)
![香辣牛肉面-2020-01-19](https://api.yimian.xyz/img/?path=imgbed/img_6dff3385_3648x2736_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Material preparation (for two persons)
- Noodles
- Two eggs
- Two British scallions, minced
- Two slices of ginger minced
- Dice beef
- Prepare a small bowl with anise, cinnamon, white button, and a little white pepper
## Preliminary steps
- Hot pot vegetable oil fragrant fried eggs
- Blanch the beef in hot water
## Core steps
- Hot pot vegetable oil sesame oil, put the scallion part into the pot
- Add boiling water and beef cubes, add the seasoning in the bowl, and simmer for 3 minutes
- Add a spoonful of light soy sauce, half a spoonful of dark soy sauce, and a spoonful of oyster sauce
- Add appropriate amount of chicken essence and salt to adjust fresh
- Add appropriate amount of red vine pepper oil to adjust spicy
- Add the noodles and cook until cooked
## Follow up
- Add the noodles to the bowl and cover with eggs
- Add the remaining green onion
## With pictures
![Spicy Beef Noodle-2020-01-19](https://api.yimian.xyz/img/?path=imgbed/img_6dff3385_3648x2736_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: wifiduino搭建236宿舍物联网平台
titleEN: Use wifiduino to build 236 dormitory IoT platform
date: 2018-09-08
categories:
- tech
@ -7,12 +8,41 @@ tags:
- iot
- Arduino
---
{% raw %}<span class=".zh">{% endraw %}
重新搭建236的IoT底层平台,并通过Blinker手机控制,实现操控监视。平台拥有很强的扩展性及可移植性,目前实现了夜间自动灯光,火灾烟雾报警,床帘内:上床小夜灯开,自动通风,LED自动感应阅读状态等设计。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 搭建缘由
早在大一上学期,意外接触Arduino,开始了解单片机。17年11到12月份,曾利用Arduino uno 3搭建了一台功能简易的自动控制平台,主要实现了由红外遥控器控制床帘Light以及小夜灯的功能。在运行一个半月后,由于一次上传代码时意外短路,导致单片机烧毁,自此系统报废,但线路依旧保留。
@ -71,4 +101,65 @@ tags:
已完结
[1]: https://github.com/iotgod/wIoT
[1]: https://github.com/iotgod/wIoT
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Build reason
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
## Build experience
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.
## The main function
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...
## At last
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
--------------------
## 2019.2.19 update:
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.
-------------------
## 2019.2.28 update
The above code link has been deprecated, if you are interested, you can check the [wIoT project][1] developed by its code!
------------
## 2019.6.12 update
Stable operation for 611 days, 18 hours and 32 minutes, officially retired!
![236-iot](https://api.yimian.xyz/img/?path=imgbed/img_39e7f50_3968x1984_8_null_normal.jpeg)
-------------
The END.
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Build Nextcloud Server on Centos 7.5
titleEN: Build Nextcloud Server on Centos 7.5
title: 在Centos 7.5上构建Nextcloud服务器
date: 2018-12-08
categories:
- tech
@ -9,11 +10,155 @@ tags:
- nginx
---
{% raw %}<span class=".zh">{% endraw %}
Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。 Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。 Nextcloud是一个用PHP编码的开源软件项目。 它提供了理想的私有云存储解决方案,该解决方案被认为是可靠且稳定的。 该博客旨在逐步介绍Nextcloud Building指导,以帮助新生和将来的复习。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!-- more -->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'zh'){
tips.warning({
title: '注意',
position: 'topRight',
message: '此页面由机器翻译为中文!!',
buttons: [['<button>查看原文</button>', function (instance, toast) {
page.tran.setLang('en');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 将linux核心更改为BBR愿景
如果您的服务器是新服务器,强烈建议将其更新到支持bbr模式的较高版本,这是google提供的高级centos系统核心,它可以使您的服务器更高效。
首先从github下载并安装bbr core。
```bash
$ wget -N --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh &&\
$ chmod +x bbr.sh && \
$ bash bbr.sh
```
使用代码检查核心版本。 如果大于4.9.0,则可以。
```bash
$ uname -r
```
预期显示:net.ipv4.tcp_available_congestion_control = bbr cubic reno
```bash
$ sysctl net.ipv4.tcp_available_congestion_control
```
预期显示: net.ipv4.tcp_congestion_control = bbr
```bash
$ sysctl net.ipv4.tcp_congestion_control
```
预期显示: net.core.default_qdisc = fq
```bash
$ sysctl net.core.default_qdisc
```
预期显示: xxxxxxxx tcp_bbr
```bash
$ lsmod | grep bbr
```
##安装Nginx服务
从nginx组织网站上提取nginx软件包。
```bash
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
```
安装 Nginx.
```bash
$ yum install -y nginx
```
启动 nginx .
```bash
$ systemctl start nginx.service
$ systemctl enable nginx.service
```
设置nginx的首选项文件。 单击此处以获取推荐的nginx.conf文件。
```bash
$ cd /etc/nginx
$ vi nginx.conf
```
申请ssl认证。 用your_domain.crt(key)重命名并将其下载到服务器:/ etc / nginx / ssl /
```bash
$ //Use scp -r (my ssl file route on my windows)/your_domain.crt \root@(your server ip): /etc/nginx/ssl
$ //Use scp -r (my ssl file route on my windows)/your_domain.crt root@(your server ip): /etc/nginx/ssl
$ //On WINDOWS BASH
```
检查并重新启动Nginx服务。
```bash
$ nginx -t
$ //If the return is successful it is ok, othervise there exists error in your nginx.conf file.
$ systemctl restart nginx
```
##安装docker
从官方网站拉并安装docker服务。
```bash
$ curl -sSL https://get.docker.com/ | sh
```
启动docker服务
```bash
$ systemctl start docker
$ systemctl enable docker.service
```
从github提取nextcloud和mariadb(centos上的简化mysql数据库)图像。
```bash
$ docker pull rootlogin/nextcloud && docker pull mariadb:10
```
使用Docker启动映像mariadb。
```bash
$ docker run -d --name nextcloud_db -v /data/mysql:/var/lib/mysql -e \
$ MYSQL_ROOT_PASSWORD=YOUR_PASSWD -e MYSQL_DATABASE=nextcloud \
$ -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=YOURPASSWD mariadb:10
```
使用docker启动映像nextcloud。
```bash
$ 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/][1]
[https://my.oschina.net/yule526751/blog/799004][2]
[https://www.moerats.com/archives/420/][3]
[1]: https://www.moerats.com/archives/420/
[2]: https://my.oschina.net/yule526751/blog/799004
[3]: https://www.moerats.com/archives/420/
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Change linux core to BBR vision
@ -121,4 +266,6 @@ Reference List:
[1]: https://www.moerats.com/archives/420/
[2]: https://my.oschina.net/yule526751/blog/799004
[3]: https://www.moerats.com/archives/420/
[3]: https://www.moerats.com/archives/420/
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Centos7脚本一键安装Typecho
titleEN: Centos7 script one-click installation of Typecho
date: 2019-02-25
categories:
- tech
@ -9,11 +10,40 @@ tags:
- typecho
---
一时兴起,帮番茄同学([@番茄树][1])配置了博客,在此记录一下流程 ::aru:confuse::
{% raw %}<span class=".zh">{% endraw %}
一时兴起,帮番茄同学([@番茄树][1])配置了博客,在此记录一下流程
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
On a whim, help Pomodoro ([@tomatotree][1]) configure a blog, and record the process here
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 先觉条件
- 只测试过阿里云腾讯云Centos7学生机
- 系统很干净,最好刚重装过
@ -88,4 +118,85 @@ $ systemctl restart nginx # 重启nginx
[4]: https://www.cnblogs.com/blibli/p/7286786.html
[5]: https://blog.csdn.net/weixin_41919236/article/details/84878430
[6]: https://www.cnblogs.com/moxiaoan/p/5683743.html
[7]: https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg
[7]: https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## A priori condition
- Only tested Alibaba Cloud Tencent Cloud Centos7 student machine
- The system is very clean, preferably just reinstalled
- Use root privileges
## A key installation
Boring to write a one-click build script, use the following commands to run (see [github][2] for details)
````
$ 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.
````
use mysql
UPDATE user SET Password ='Your password' WHERE User ='root';
create database typecho;
quit
````
## Easy start
After the installation is complete, use your browser to visit the following link
````
http://your server ip
````
Install typecho according to the page prompt
Leave most of the content as default, just fill in:
- Database password (the one you just set)
- Administrator username
- Administrator login password
- Administrator email address
## Custom domain configuration
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**
````
$ 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**
````
$ systemctl nginx -t # nginx.conf syntax check
$ systemctl restart nginx # restart nginx
````
Then after about 10 minutes, you can access typecho via `https://your domain name`
## https configuration
If you are still unable to access and are directed to a filing page, then you may need to use https
### Method One
For configuring automatic renewal of ssl certificate, please refer to my other article ([Nginx under Centos7 configure ssl certificate automatic renewal][3])
### Method two
- 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][4]
[https://blog.csdn.net/weixin_41919236/article/details/84878430][5]
[https://www.cnblogs.com/moxiaoan/p/5683743.html][6]
[https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg][7]
[1]: https://tomatotrees.xyz
[2]: https://github.com/IoTcat/typecho-auto-install-centos7
[3]: https://www.eee.dog/tech/ssl-auto-apply.html
[4]: https://www.cnblogs.com/blibli/p/7286786.html
[5]: https://blog.csdn.net/weixin_41919236/article/details/84878430
[6]: https://www.cnblogs.com/moxiaoan/p/5683743.html
[7]: https://www.cnblogs.com/lalalagq/p/9979068.html?tdsourcetag=s_pcqq_aiomsg
{% raw %}</span>{% endraw %}

@ -1,18 +1,46 @@
---
title: 认知派生论
titleEN: Cognitive Derivation Theory
date: 2020-02-17
categories:
- thoughts
tags:
---
<!--![](https://api.yimian.xyz/img/?path=wallpaper/img_2020-03-17_1920x1080_96_background_normal.jpg)-->
{% raw %}<span class=".zh">{% endraw %}
拜读了毛主席的实践论和矛盾论,第一次系统地接触了辩证唯物论这一方法论,深感其强大与自然。综合我自己先前的所经所悟,提炼出认知派生这一观点。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 序
从巴甫洛夫的狗铃实验[1],到上世纪50年代费斯汀格的认知失调理论[2],再到1971年津巴多教授主导的斯坦福监狱实验[3],这一系列打破预期的心理学生理学实验,一步一步揭示出,人们心理的作用形式,似乎并非大多数人所认为的那样。实际上,这看似重大的心理学发现,其实早在两个世纪前,便已被马克思,恩格斯等人从社会学角度提出,并完善成为理论。后经列宁,斯大林等人通过实践进行完善。传入国内后,被毛泽东所集大成,结合了中国传统文化的底蕴,发展成为唯物辩证法的毛泽东思想。这一论理的形成,源自于这些人对自己所观察到的社会现象以及自己基于论理所实践的社会运动的归纳总结。而这一论理,又指导了中国共产党建国,扎实地完成国内资本原始积累地奇迹。
@ -26,3 +54,22 @@ tags:
[1] [巴甫洛夫 - 维基百科](https://zh.wikipedia.org/wiki/%E5%B7%B4%E7%94%AB%E6%B4%9B%E5%A4%AB)
[2] [認知失調 - 维基百科](https://zh.wikipedia.org/zh/%E8%AA%8D%E7%9F%A5%E5%A4%B1%E8%AA%BF)
[3] [斯坦福监狱实验 - 维基百科](https://zh.wikipedia.org/zh-hans/%E6%96%AF%E5%9D%A6%E7%A6%8F%E7%9B%91%E7%8B%B1%E5%AE%9E%E9%AA%8C)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Preface
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.
## in conclusion
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.
## references
[1] [巴甫洛夫 - 维基百科](https://zh.wikipedia.org/wiki/%E5%B7%B4%E7%94%AB%E6%B4%9B%E5%A4%AB)
[2] [認知失調 - 维基百科](https://zh.wikipedia.org/zh/%E8%AA%8D%E7%9F%A5%E5%A4%B1%E8%AA%BF)
[3] [斯坦福监狱实验 - 维基百科](https://zh.wikipedia.org/zh-hans/%E6%96%AF%E5%9D%A6%E7%A6%8F%E7%9B%91%E7%8B%B1%E5%AE%9E%E9%AA%8C)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 部署新型冠状病毒API
titleEN: Deploy new coronavirus API
date: 2020-02-04
categories:
- tech
@ -7,11 +8,44 @@ tags:
- Covid-19
- API
---
{% raw %}<span class=".zh">{% endraw %}
一分钟快速部署你自己的新型冠状病毒API ୧(๑•̀⌄•́๑)૭
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Deploy your own new coronavirus API in one minute ୧(๑•̀⌄•́๑)૭
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
# coro-api
新型冠状病毒 实时数据 api
@ -107,3 +141,105 @@ location / {
## 开源协议
本项目使用MIT协议,允许非署名商业非商业使用。武汉加油!中国加油!!❤
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
# coro-api
Novel coronavirus real-time data api
Project Git address: [iotcat/coro-api](https://github.com/iotcat/coro-api)
Project npm address: [iotcat/coro-api](https://www.npmjs.com/package/coro-api)
## API example
### Get all
[https://api.yimian.xyz/coro](https://api.yimian.xyz/coro)
### According to province
[https://api.yimian.xyz/coro?province=Shandong](https://api.yimian.xyz/coro?province=%E5%B1%B1%E4%B8%9C)
### According to the city
[https://api.yimian.xyz/coro?city=泰安](https://api.yimian.xyz/coro?city=%E6%B3%B0%E5%AE%89)
### According to the province and city (recommended)
[https://api.yimian.xyz/coro?province=Shandong&city=Taian](https://api.yimian.xyz/coro?province=%E5%B1%B1%E4%B8%9C&city=%E6%B3%B0%E5%AE%89)
## Quick deployment
### Environmental requirements
- `nodeJS` supports any version of `express`
- Any version of `git`
### download file
```
$ git clone https://github.com/iotcat/coro-api.git & cd coro-api
```
### Installation dependencies
```shell
$ npm install
```
### start up
```shell
$ node index.js
```
### Access
```
http://localhost:17676
```
## Advanced
### GET parameters
Parameters | Description | Example
:--: | :--: | :--:
province | Province (Country) | Shandong
city | city | Tai'an
### Modify port
Modify the default port from line 9 of `index.js`.
### Cross-domain prohibited
Comment out line 13 of `index.js`.
### Use pm2 daemon
```shell
$ npm i -g pm2
$ pm2 start index.js --name coro-api -o /var/log/coro/api.out -e /var/log/coro/api.err --watch
```
### Nginx configuration
Add the following content to `server{}`
```nginx
location / {
proxy_pass http://127.0.0.1:17676;
}
```
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.
### Crawler configuration
The crawler uses [coro-py](https://github.com/iotcat/coro-py), please refer to its documentation.
## Open Source Agreement
This project uses the MIT protocol, allowing non-signed commercial and non-commercial use. Go Wuhan! Go China! ! ❤
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: C++建库中遇到的坑
titleEN: The pits encountered in C++ library building
date: 2019-02-24
categories:
- tech
@ -7,12 +8,37 @@ tags:
- cpp
---
{% raw %}<span class=".zh">{% endraw %}
由于学校课程安排,作为一只电气狗第一次正经的开始搞Cpp ::aru:shy::
特记录一些建库过程遇到的坑,,→_→
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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, →_→
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!'
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 关于.h文件
作为头文件,.h中一般放有相应类及函数的声明。
一个典型的.h文件如下:(FileName: yimian.h)
@ -100,12 +126,12 @@ void yimian::hi(){ //定义yimian类中hi()函数内容
## 总结一下类相关知识
### 类访问修饰符
- **public: **类内外皆可访问的内容
- **private: **类外不可访问,仅可自己和友元访问,子类不可访问
- **protected: **外部不可访问,自己、友元和子类可访问
- **public:** 类内外皆可访问的内容
- **private:** 类外不可访问,仅可自己和友元访问,子类不可访问
- **protected:** 外部不可访问,自己、友元和子类可访问
### 特殊函数类型
- **构造函数:**每次创建对象时会执行,即初始化
- **构造函数:** 每次创建对象时会执行,即初始化
````C++
class Line{
public:
@ -118,7 +144,7 @@ class Line{
};
````
- **析构函数:**删除对象时执行的函数,即善后
- **析构函数:** 删除对象时执行的函数,即善后
````C++
class Line{
public:
@ -132,7 +158,7 @@ class Line{
};
````
- **拷贝构造函数: **实现复制对象时同一类对象间传参
- **拷贝构造函数:** 实现复制对象时同一类对象间传参
````C++
class Line{
public:
@ -202,7 +228,208 @@ int main(){
### this指针
- 类似js中this,指向参数对象本身
###
----------
To Be Continued..
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## About .h files
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)
````C++
#ifndef YIMIAN_H //Prevent this file from being compiled multiple times
#define YIMIAN_H //The value of'YIMIAN_H' needs to be customized
//Lib may be used in.h
#include<iostream>
#include<string>
using namespace std; //Use the std namespace, so you don’t need to write std::cout below
//Declare the yimian class
class yimian{
public: //Public domain (can be directly called by the outside world)
void hi();
static string version;
private: //Private (not public)
};
#endif //Correspond to the anti-multiple compilation at the beginning of the file
````
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)
````C++
#include"yimian.h" //Need to point to yimian.h
string yimian::version = "Version 0.0.1"; //Assign a value to a string variable
void yimian::hi(){ //Define the content of the hi() function in the yimian class
cout << "Hellow Yimian~" << endl; //Output "Hellow Yimian~\n" to the screen
}
````
With the above files, a simple C++ library is built φ( ̄∇ ̄o)
So we create a new test.cpp file to place main()
````C++
#include<iostream> //lib declaration to be used
#include<stdio.h>
#include"yimian.h" //Introduce custom lib
using namespace std; //Use std namespace
int main(){
yimian $; //Define a new yimian class named $
$.hi(); //Call the hi() function in the yimian class
cout << $.version<< endl; //Output the yimian class version variable to the screen
return 0; //End of main function
}
````
Then you can use g++ to compile happily, the instructions are as follows: (How to build a GNU environment in win)
````
$ g++ test.cpp yimian.cpp -o [name of target file]
````
Then start the compiled program from the command line (what is the command line ⌇●﹏●⌇)
````
$ ./Target file name.exe
````
As you might expect, the result of the above program is:
> Hellow Yimian~
> Version 0.0.1
----------
**Pit** ::aru:meditation::
- The defined class declared in the header file must be instantiated (called) in main(), otherwise an error will be reported
------------
## Summarize the related knowledge of the class
### Class access modifier
- **public:** Content accessible inside and outside the class
- **private:** not accessible outside the class, only accessible by yourself and friends, not accessible by subclasses
- **protected:** Inaccessible from outside, accessible by yourself, friends and subclasses
### Special function types
- **Constructor:** It will be executed every time an object is created, that is, initialization
````C++
class Line{
public:
void setLength( double len );
double getLength( void );
Line(); // This is the constructor
private:
double length;
};
````
- **Destructor:** The function executed when the object is deleted, that is, the aftermath
````C++
class Line{
public:
void setLength( double len );
double getLength( void );
Line(); // This is the constructor declaration
~Line(); // This is the destructor declaration
private:
double length;
};
````
- **Copy constructor:** Transfer parameters between objects of the same type when copying objects
````C++
class Line{
public:
int getLength( void );
Line( int len ); // simple constructor
Line( const Line &obj); // copy constructor
~Line(); // Destructor
private:
int *ptr;
};
·········
Line::Line(const Line &obj){
cout << "Call the copy constructor and allocate memory for the pointer ptr" << endl;
ptr = new int;
*ptr = *obj.ptr; // copy value
}
·········
int main( ){
Line line1(10);
Line line2 = line1; // The copy constructor is also called here
return 0;
}
````
- The difference between construction and copy construction:
````C++
A x(2);  //Direct initialization, call the constructor
A y = x;  //Copy initialization, call the copy constructor
````
### Friend function/class
- **Youyuan:** Youyuan is like an old neighbor, you can take whatever you want at home
````C++
class INTEGER{
friend void Print(const INTEGER& obj);//Declare friend function
};
void Print(const INTEGER& obj) {
//Function body
}
void main(){
INTEGER obj;
Print(obj);//Call directly
}
````
### Inline functions
- In short, the number of lines is small and the function is very simple. There are no loops and switch statements. If you want to improve the efficiency of the function, use inline (╯‵□′)╯︵┴─┴
````C++
inline int Max(int x, int y){
return (x> y)? x: y;
}
// The main function of the program
int main(){
cout << "Max (20,10): "<< Max(20,10) << endl;
cout << "Max (0,200): "<< Max(0,200) << endl;
cout << "Max (100,1010): "<< Max(100,1010) << endl;
return 0;
}
````
### this pointer
- Similar to this in js, pointing to the parameter object itself
----------
To Be Continued..
To Be Continued..
{% raw %}</span>{% endraw %}

@ -1,5 +1,7 @@
---
title: 公共开支结算系统
titleEN: Public expenditure settlement system
display: true
date: 2019-09-22
categories:
- tech
@ -10,11 +12,42 @@ tags:
- erp
- system
---
{% raw %}<span class=".zh">{% endraw %}
在英国留学与4个室友合租,为了更好的控制和监管公共支出,以及维持彼此之间的公共支出平衡,我利用迎新周三天时间设计并开发除了此ERP公共开支计划系统。希望此系统能够便捷接下来一年的生活,减少大家之间的矛盾,促使充满幸福感的公共支出项目持久化OωO
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 1.功能介绍
- 统计日均周均流水,让公共支出可视化
- 用户申报一次公共支出,并提交发票照片留证
@ -27,7 +60,7 @@ tags:
## 2.系统架构
### 2.1 前端
前端基于一个网上找到的比特币网站平台模板,深度改造实现。值得一提的是,前端使用[Ushio-js项目](https://github.com/iotcat/ushio-js)作为安全及日志插件,并得到了[Ushio](https://ushio.xyz)系统做背后支持。
前端基于一个网上找到的比特币网站平台模板,深度改造实现。值得一提的是,前端使用[Ushio-js项目](https://github.com/iotcat/ushio-js)作为安全及日志插件,并得到了[Ushio](https://ushio.cool)系统做背后支持。
### 2.2 后端
后端使用php语言编写。提供5个接口,分别提供获取账户事件,获取内部流通信息,获取公共支出信息,获取周报表,操作的功能。
@ -41,7 +74,7 @@ mail系统使用[Yimian Mail API](https://www.eee.dog/tech/mail-api.html)快速
直接引用[呓喵酱の图床](https://imgbed.yimian.xyz)代码,少量改写。
### 2.5 用户系统
目前用额外网页简单实现,等待[ushio-auth项目](https://github.com/iotcat/auth)完成后统一整合。
目前用额外网页简单实现,等待[ushio-auth项目](https://github.com/iotcat/ushio-auth)完成后统一整合。
## 3. 外观
没啥可说的,摆图,自己看
@ -53,3 +86,43 @@ mail系统使用[Yimian Mail API](https://www.eee.dog/tech/mail-api.html)快速
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## 1. Function introduction
- Calculate the daily average weekly flow rate to visualize public expenditure
- The user declares a public expenditure and submits the invoice photo certificate
- Monitor the disequilibrium of expenditure among members, calculate the variance, and display it visually
- Compare spending this week and last week, and give the percentage increase or decrease
- When there is one person whose expenditure exceeds the average threshold, and there is at least one person whose expenditure is less than the average threshold, the two people will be emailed to generate an internal transaction
- When the recipient receives the money in the above example, he needs to go to the platform to confirm receipt
- All historical public expenditures and invoices on the platform can be checked
## 2. System Architecture
### 2.1 Frontend
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](https://github.com/iotcat/ushio-js) as a security and logging plug-in, and got [Ushio](https://ushio.cool) The system does behind the scenes.
### 2.2 Backend
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](https://www.eee.dog/tech/mail-api.html).
### 2.3 Database
The database uses yimian-db/mysql. Three tables are constructed, which are used to store flow, public expenditure details, and internal circulation.
### 2.4 Image upload
Directly quote the code of [呓喵酱の图床](https://imgbed.yimian.xyz) with a small amount of rewriting.
### 2.5 User System
At present, it is simple to implement with additional web pages, waiting for the [ushio-auth project](https://github.com/iotcat/ushio-auth) to complete the unified integration.
## 3. Appearance
Nothing to say, show the picture, see for yourself
![imgbed_ed08c497](https://api.yimian.xyz/img/?path=imgbed/img_ed08c497_1080x6654_8_null_normal.jpeg)
![imgbed_ea04ad82](https://api.yimian.xyz/img/?path=imgbed/img_ea04ad82_1080x5082_8_null_normal.jpeg)
![imgbed_a8b3adb0](https://api.yimian.xyz/img/?path=imgbed/img_a8b3adb0_1080x2160_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: CS, ECE硕士项目调研
titleEN: CS, ECE Master Program Investigation
date: 2020-06-24 10:25:39
categories: life
tags:
@ -7,12 +8,38 @@ tags:
- investigation
---
{% raw %}<span class=".zh">{% endraw %}
为了准备2021硕士申请,我对一些喜欢的项目做了一些调查,并汇总在这里。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
To prepare for my master's application in 2021, I did some research on some of my favorite projects and summarized them here.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
> 排名来源:[QS2020](https://www.topuniversities.com/university-rankings/world-university-rankings/2020), [USNews2020](https://www.usnews.com/education/best-global-universities/rankings?page=1), [上海交大2019](http://www.shanghairanking.com/ARWU2019.html),[csrank.global.2010-2020](http://csrankings.org/#/index?all&world)
> 四个排名代表四种视角(QS->英国,USNews->美国,上海交大->中国,csrank->cs专业贡献)
@ -43,14 +70,14 @@ tags:
- 时长一年
#### **条件**
**条件**
- 任何专业一等学位
- 雅思6.5小分6/托福92小分20
#### **案例**
**案例**
- 均分85, con 85 (校友利)
- gre330 (优留)
@ -64,7 +91,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- EEE专业一等学位
- 雅思6.5小分6/托福92小分20
@ -92,11 +119,11 @@ tags:
- 时长一年
#### **条件**
**条件**
- EE/CS专业二等一学位
- 雅思6.5小分6/托福92小分读写24-30听说20-30
#### **案例**
**案例**
- 88均分 (校友利)
- 85通信(优留)
@ -108,7 +135,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- 非CS专业二等一学位
- 雅思7.0小分6.5/托福100小分读写24-30听说20-30
@ -132,12 +159,12 @@ tags:
- 时长一年
#### **条件**
**条件**
- 大部分工程理学专业二等一学位
- 雅思6.5小分6.0/托福92小分20
#### **案例**
**案例**
- 无录取案例,据说因为与军工有关不收亚裔
@ -149,7 +176,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- EE与信号相关专业二等一学位
- 雅思6.5小分6.0/托福92小分20
@ -177,14 +204,14 @@ tags:
- 时长一年(大部分延期一年半)
#### **条件**
**条件**
- GPA 3.8+
- GRE 320+
- 雅思7.0/托福小分说22读20听15写20
- 两封推荐信
#### **案例**
**案例**
- gre320,强科研
@ -194,7 +221,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- GPA 3.8+
- GRE 320+
- 雅思7.0/托福小分说22读20听15写20
@ -219,14 +246,14 @@ tags:
- 时长两年
#### **条件**
**条件**
- GPA 3.9+
- GRE 330+
- 托福102
- 三封推荐信
#### **案例**
**案例**
- 宁诺85+gre326美国暑研(优留)
@ -241,7 +268,7 @@ tags:
### [Master of Science in Electrical Engineering](http://www.ee.columbia.edu/ms-program-ee)
#### **条件**
**条件**
- GPA 3.7+
- GRE 320+
- 托福102
@ -274,7 +301,7 @@ tags:
- 时长一年
- 偏向有工作经验者
#### **条件**
**条件**
- GPA 3.8+
- GRE 320+
- 雅思6.0/托福85
@ -287,7 +314,7 @@ tags:
- 偏向有工作经验者
#### **条件**
**条件**
- GPA
- 雅思6.0/托福90 (可免)
@ -299,7 +326,7 @@ tags:
- 转专业可能有限制
#### **条件**
**条件**
- GPA 3.8+
- GRE 320+
- 雅思6.0/托福90 (可免)
@ -325,7 +352,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- GPA 3.8+
- 雅思6.5/托福100 (可免)
@ -339,7 +366,7 @@ tags:
- 时长一年
#### **条件**
**条件**
- GPA 3.6+
- 雅思6.5/托福100
@ -365,7 +392,7 @@ tags:
- 学费+生活费`40`万/年
#### **条件**
**条件**
- GPA 3.6+
- 雅思6.5小分6.0/托福100写作22
- gre
@ -395,7 +422,7 @@ tags:
- 时长1.5年
#### **条件**
**条件**
- GPA 3.8+ (top 5-10%)
- 雅思7.0/托福100
- gre 320+ (不强制)
@ -423,9 +450,433 @@ tags:
- 学费生活费一共`20-30`万
- 有奖学金
#### **条件**
**条件**
- GPA 3.8+
- 雅思7.0/托福100
- 三封推荐信
- gre 320+ (不强制)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
> Ranking Source:[QS2020](https://www.topuniversities.com/university-rankings/world-university-rankings/2020), [USNews2020](https://www.usnews.com/education/best-global-universities/rankings?page=1), [ARWU2019](http://www.shanghairanking.com/ARWU2019.html),[csrank.global.2010-2020](http://csrankings.org/#/index?all&world)
> 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**!!
# **UK**
## **Imperial College London**
> `QS`: 9
> `USNews`: 20
> `ARWU`: 23
> `csrank`: 73
**Application mode**:
Two choices. You can see your second choice when you are admitted.Applications can only be submitted once a year.
### [MSc Computing Science](https://www.imperial.ac.uk/study/pg/computing/computing-science/)
- Fee`£33,250 `
- 1 year
**Condition**
- A first class degree in any major
- Ielts 6.5 score 6/ TOEFL 92 score 20
**Case**
- con 85 (校友利)
- gre330 (优留)
### [MSc Applied Machine Learning](https://www.imperial.ac.uk/study/pg/electrical-engineering/applied-machine-learning/)
- Fee`£32,500 `
- 1 year
**Condition**
- EEE first class
- Ielts 6.5 score 6/ TOEFL 92 score 20
## **UCL**
> `QS`: 8
> `USNews`: 21
> `ARWU`: 15
> `csrank`: 50
**Apply Method**:
You can apply multiple times.The application is handled by the instructor and is not interchangeable between different departments.
### [MSc Integrated Machine Learning Systems](https://www.ucl.ac.uk/prospective-students/graduate/taught-degrees/integrated-machine-learning-systems-msc)
- Fee`£28,530`
- 1 year
**Condition**
- First class degree in EE/CS
- Ielts 6.5 score 6/ TOEFL 92 score reading and writing 24-30 listening and speaking 20-30
**Case**
- con 88 (校友利)
- 85 Telecom(优留)
### [MSc Computer Science](https://www.ucl.ac.uk/prospective-students/graduate/taught-degrees/computer-science-msc)
- Fee`£30,400`
- 1 year
**Condition**
- One second class degree in a non-CS major
- Ielts 7.0 score 6.5/ TOEFL 100 score reading and writing 24-30 listening and speaking 20-30
## **University of Edinburgh**
> `QS`: 20
> `USNews`: 28
> `ARWU`: 31
> `csrank`: 33
### [MSc Computer Science](https://www.ed.ac.uk/studying/postgraduate/degrees/index.php?r=site/view&edition=2020&id=110)
- Fee`-`
- 1 year
**Condition**
- First class degree in most engineering majors
- Ielts 6.5 score 6.0/ TOEFL 92 score 20
**Case**
- No case of admission, it is said that because of military industry related not to accept Asians
### [MSc Signal Processing and Communications](https://www.ed.ac.uk/studying/postgraduate/degrees/index.php?r=site/view&edition=2020&id=20)
- Fee`-`
- 1 year
**Condition**
- EE and signal related major first class degree
- Ielts 6.5 score 6.0/ TOEFL 92 score 20
----------------------------
# **USA**
## **Cornell University**
> `QS`: 14
> `USNews`: 23
> `ARWU`: 13
> `csrank`: 7
### [M.Eng. Electrical and Computer Engineering (Ithaca)](https://gradschool.cornell.edu/academics/fields-of-study/subject/electrical-and-computer-engineering/electrical-and-computer-engineering-meng-ithaca/)
- Fee`$56,550`
- Duration: one year (most extensions: one and a half years)
## **Condition**
- 3.8 GPA
- the GRE 320 +
- IELTS 7.0/ TOEFL small say 22 Read 20 listen 15 write 20
- Two letters of recommendation
**Case**
- gre320,Strong scientific research
### [M.Eng. Electrical and Computer Engineering (NewYork)](https://tech.cornell.edu/programs/masters-programs/master-in-electrical-and-computer-engineering/)
- Fee`$58,586`
- 1 year
**Condition**
- GPA 3.8+
- GRE 320+
- IELTS 7.0/ TOEFL small say 22 Read 20 listen 15 write 20
- Two letters of recommendation
## **Carnegie Mellon University**
> `QS`: 48
> `USNews`: 82
> `ARWU`: 95
> `csrank`: 1
### [Master of Science in Information Networking](https://www.cmu.edu/ini/academics/msin/index.html)
- Fee`$50,100`
- 2 Years
**Condition**
- GPA 3.9+
- GRE 330+
- Toefl 102
- Three letters of recommendation
**Case**
- 宁诺85+gre326(优留)
## **Columbia University**
> `QS`: 18
> `USNews`: 7
> `ARWU`: 8
> `csrank`: 15
### [Master of Science in Electrical Engineering](http://www.ee.columbia.edu/ms-program-ee)
**Condition**
- GPA 3.7+
- GRE 320+
- the toefl 102
- Three letters of recommendation
- There might be an interview
---------------------------------
# **Singapore**
## **National University of Singapore**
> `QS`: 11
> `USNews`: 34
> `ARWU`: 67
> `csrank`: 16
- Different colleges can apply for multiple majors
### [Master of Technology in Software Engineering](https://www.iss.nus.edu.sg/graduate-programmes/programme/detail/master-of-technology-in-software-engineering)
- Fee` S$5,350.00`
- 1 year
- Prefer people with work experience
**Condition**
- GPA 3.8+
- GRE 320+
- IELTS 6.0/ TOEFL 85
- the interview
### [Msc. Electrical Engineering - CE](https://www.eng.nus.edu.sg/ece/graduate/coursework-based-programmes/master-of-science-by-course-work/application-details/)
- Prefer people with work experience
**Condition**
- GPA
- Ielts 6.0/ TOEFL 90
### [Msc. Computer Science](https://www.comp.nus.edu.sg/programmes/pg/mcs/admissions/)
- Prefer those with work experience
- There may be restrictions on changing majors
**Condition**
- GPA 3.8+
- GRE 320+
- IELTS 6.0/ TOEFL 90 (optional)
## **Nanyang Technological University**
> `QS`: 11
> `USNews`: 43
> `ARWU`: 73
> `csrank`: 53
- Different colleges may apply for multiple majors
### [Msc Artificial Intelligence](http://scse.ntu.edu.sg/Programmes/ProspectiveStudents/Graduate/msc-AI/Pages/AdmissionRequirements.aspx)
- Fee` S$58,000.00`
- 1 year
**Condition**
- GPA 3.8+
- IELTS 6.5/ TOEFL 100 (optional)
### [MSc Computer Control & Automation](http://www.eee.ntu.edu.sg/Programmes/ProspectiveStudents/Graduate/MOE_sub_MSc/MSc_CCA/Pages/Curriculum.aspx)
- Fee` S$3,350.00`
- 1 year
**Condition**
- GPA 3.6+
- IELTS 6.5/ TOEFL 100
----------------------------------
# **Canada**
## **University of Toronto**
> `QS`: 29
> `USNews`: 18
> `ARWU`: 24
> `csrank`: 18
### [MEng. Electrical and Computer Engineering](https://www.sgs.utoronto.ca/programs/electrical-and-computer-engineering/)
- Length`12-24`months
- All Fee`400,000 RMB`/year
**Condition**
- GPA 3.6+
- IELTS 6.5 score 6.0/ TOEFL 100 writing 22
- gre
- Three letters of recommendation
------------------------------------
# **Switzerland**
## **Eth Zurich**
> `QS`: 6
> `USNews`: 25
> `ARWU`: 19
> `csrank`: 10
- Switching majors is not friendly
- Undergraduate school is important
- There is a quota for each region
### [Master Electrical Engineering and Information Technology](https://ethz.ch/en/studies/prospective-masters-degree-students/masters-degree-programmes/engineering-sciences/master-electrical-engineering-and-information-technology.html)
- 1.5 year
**Condition**
- GPA 3.8+ (top 5-10%)
- IELTS 7.0/ TOEFL 100
- GRE 320+ (not mandatory)
- Three academic letters of recommendation
- Total tuition and living expenses are 200,000 to 300,000 YUAN
- With a scholarship.
## **Federal Institute of Technology in Lausanne**
> `QS`: 18
> `USNews`: 45
> `ARWU`: 78
> `csrank`: 28
- Only one major
- No regional quotas, global competition for applicants
### [Electrical and electronic Engineering](https://www.epfl.ch/education/master/programs/electrical-and-electronic-engineering/)
- 1.5 year
- Switching majors is not friendly
- Total tuition and living expenses are 200,000 to 300,000 YUAN
- With a scholarship.
**Condition**
- 3.8 GPA
- IELTS 7.0/ TOEFL 100
- Three letters of recommendation
- GRE 320+ (not mandatory)
{% raw %}</span>{% endraw %}

@ -1,16 +1,45 @@
---
title: 数电期中总结
titleEN: Mid-term Summary of Digital Circuits
date: 2019-02-28
categories:
- notes
tags:
- circuit
---
{% raw %}<span class=".zh">{% endraw %}
上学期掉了魔电的坑,这学期来搞点数电小攻略掩饰一下(☆ω☆)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
I lost the pit of magic electricity last semester. This semester, let’s make a small strategy to hide it (☆ω☆)
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
# 1. 数制与码制
## 二进制运算
### 补码
@ -103,4 +132,105 @@ $$(N)_{INV}=\begin{cases}N&\text{N为正数}\\(2^{n}-1)-N& \text{N为负数} \en
[1]: https://zhidao.baidu.com/question/1692306348989800588.html
[2]: https://www.eee.dog/usr/uploads/2019/02/1948813444.pdf
[3]: https://www.eee.dog/usr/uploads/2019/02/20970449.pdf
[3]: https://www.eee.dog/usr/uploads/2019/02/20970449.pdf
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
# 1. Number system and code system
## Binary operation
### Complement
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.
**<Method One> Direct Method**
$$(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$.
**<Method Two> Observation Method**
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~
## Common coding
### DCB
That is, the 8421 constant weight code. When DCB is displayed as a decimal number, 6 must be added to each Invalid bit (>9).
### Signed Numbers
8 bits are used, the leftmost bit represents the sign, and the remaining 7 bits represent the value.
## Mid-term summary
### First week-first acquaintance with digital telephony
- The analog quantity is too complicated to conform to human thinking
- Non-linear devices such as triode and MOS tube provide the device basis for the magic speed
- Because analog electricity is too difficult, we have to learn math electricity
**Some points**
- TTL means transistor logic circuit, composed of various transistors and resistors, and is characterized by fast speed
- 0-0.8V in TTL is low level, 2-5V is high level
- Conversion between binary and decimal (integer/decimal)
- LSB(Least Significant Bit)/MSB(Most S B)
### Second week-Number system
- 1's Complement
- 2's Complement
- Sometimes the binary is too long to use, which makes hexadecimal very convenient
- Hexadecimal is similar to binary mnemonic, if you observe `1100 0101`, you can write `C5` directly
- BCD uses a hexadecimal number to represent a decimal number
- BCD is in line with human thinking habits, but it causes a great waste of resources
- BCD four arithmetic, I think it’s best to convert to decimal and then convert it back. Anyway, it’s very convenient
- Computer BCD addition adopts +6 carry method
- When storing numbers, the leftmost digit is the sign bit
- Negative numbers are stored using one's complement ([chestnut][1])
- 1 byte signed number range `-128-127`
- Reasonably design the number of storage bits and be careful of overflow
- [Binary Multiplication](https://zhidao.baidu.com/question/293829485.html)
- [Binary Division](https://zhidao.baidu.com/question/304091753926723564.html) Similar to decimal
### Week 3-Logic Gate and Circuit Package Type
- NOT
- AND gate
- OR gate OR
- NOT AND gate NAND
- NOR gate
- Exclusive OR gate XOR
- Commonly there are TTL and CMOS two types
- CMOS can be divided into 3.3V and 5V according to the supply voltage
- Fan-out refers to the number of valid inputs
- propagation delay time refers to response time
- IC naming, for example, 74 in `74LS04` means commodity grade, LS means type, 04 is model
- Classification by complexity: SSI (1-12 doors), MSI (13-99 doors), LSI (100-9999 doors), VLSI (10000-99999), ULSI (100000+)
### Week 4-Boolean operations
- Follow the exchange, combination, and distribution laws
- Conclusion `A+AB=A` and `A+~AB=A+B`
- DeMorgan's Theorems `~(AB)=(~A+~B)` and `~(A+B)=~A~B`
- `~A~B` is Negative AND, `~(AB)` is NAND, OR is the same
- SOP format is `··+··+··`
- POS format is `()*()*()`
- Truth Table is a list of all possible Input and Output
### Week 5-Karnaugh Map
- Karnaugh Map to visualize logic gate simplification
### Week 6-Logic Gate Combination
- NAND and NOR can be combined into any other gate
- Adder put `A AND B` on the left bit and `A XOR B` on the right bit
- Comparator 1bit`A XOR B` 2bit`(A0 XOR B0) NOR (A1 XOR B0)`
- Decoder logic binary to control level output
------------
Courseware:
[Lecture03.pdf][2]
[Lecture04.pdf][3]
[1]: https://zhidao.baidu.com/question/1692306348989800588.html
[2]: https://www.eee.dog/usr/uploads/2019/02/1948813444.pdf
[3]: https://www.eee.dog/usr/uploads/2019/02/20970449.pdf
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Economy, Environment &amp; Sustainability
titleEN: Economy, Environment and Sustainability
title: 经济,环境可持续性
date: 2019-02-28
categories:
- thoughts
@ -8,9 +9,39 @@ tags:
- environment
---
{% raw %}<span class=".zh">{% endraw %}
经济学是一门研究选择的学问。人们活在世上总是在进行着各种选择。发展落后的国家希望尽快工业化发展经济,来改善自己的生存环境。而工业化后的国家则希望发展同时兼顾环境。于是落后国家需要50年来发展工业,搞基建,破坏环境。之后的50年则拼命治理环境,发展生态。由于地球生态是一个整体,发达国家非常不爽落后的国家搞工业化污染环境,于是各种矛盾。不过在21世纪,有望利用信息数字科技打破50-50年法则,为新一批的国家崛起提供蹊径( ๑´•ω•) "
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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 (๑´•ω•) "
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 为什么追求发展
自然环境较为恶劣,不完全适合人类生存。于是具备主观能动性的人类开始由改造环境的冲动。这一心理行为逐步早就了名为“发展”的宏伟故事,大家都对其深信不已。就像故事中所描述的一样,人们为了实现这一目标开始减少内耗(战争),社会趋于高度分工化。
@ -79,5 +110,83 @@ I --> A
[Economic Development and The Environment.pdf][2]
[1]: https://yimian-image.obs.myhwclouds.com/blog/70-1.png
[2]: https://yimian-attachment.obs.myhwclouds.com/ppt/lan104/Week%202%20Economic%20Development%20%20The%20Environment.pdf
[1]: https://api.yimian.xyz/img/?path=imgbed/img_d6d943f_299x169_8_null_normal.jpeg
[2]: https://yimian-attachment.obs.myhwclouds.com/ppt/lan104/Week%202%20Economic%20Development%20%20The%20Environment.pdf
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Why pursue development
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.
## Environmental Kuznet Curve
![Environmental Kuznet Curve][1]
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:
- People tend to only consider their own assumptions
- Different from individual characteristics of the population
- Survival resources are scarce
- Inefficient circulation of production materials
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.
## Concept map
{% raw %}
<!-- Introduce mermaid drawing-->
<div class="mermaid">
graph TD
A{Environment}
B{Economy}
C{Society}
D[GDB Based]
E[NNI** HDI]
F[Kuznet Curve]
G[Env Kuznet Curve]
H((Human Nature))
I[Human Behavior]
J[Improve Living Environment]
K[Request for Dev]
A --> J
J --> K
K --> B
B --> |measured by| D
D --> |neglect| C
B --> |predicted by| F
F --> C
D --> |foments| I
D --> |spoils| A
G --> C
H --> I
E --> |consider| A
B --> E
A --> H
I --> |caused by| C
I --> A
</div>
{% endraw %}
--------------------------------
**Reference Courseware:**
[Economic Development and The Environment.pdf][2]
[1]: https://api.yimian.xyz/img/?path=imgbed/img_d6d943f_299x169_8_null_normal.jpeg
[2]: https://yimian-attachment.obs.myhwclouds.com/ppt/lan104/Week%202%20Economic%20Development%20%20The%20Environment.pdf
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 工程电磁学
titleEN: Engineering Electromagnetics
date: 2019-02-26
categories:
- notes
@ -7,11 +8,41 @@ tags:
- maxwell
---
{% raw %}<span class=".zh">{% endraw %}
麦克斯韦大法好!!
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Maxwell Dafa is good! !
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
### 先供上麦克斯韦方程 膜拜膜拜( o=^•ェ•)o
@ -83,4 +114,84 @@ $$
-----------
To Be Continued...
To Be Continued...
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
### First offer to Maxwell's equation, worship ( o=^•ェ•)o
$$
\begin{eqnarray}
\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)
\end{eqnarray}
$$
----------------
## Chapter One-Gossian Cullen
- Suppose two electric charges $Q_{1}$ and $Q_{2}$ in space are separated by d, and the electric field force they want to interact with.
- Now take $Q_{1}$ as the center of the circle and $d$ as the radius to make the ball. According to the Gaussian law, the electric flux on the sphere is only related to the amount of charge in the sphere, which is $\frac{Q_{1}}{\varepsilon_0}$ in this example.
- Divide the electric flux in the above formula by the surface area to get the electric field intensity $\frac{Q_{1}}{4\pi d^{2}\varepsilon_0}$
- Field strength is multiplied by $Q_{2}$ to get Coulomb force $\frac{Q_{1}Q_{2}}{4\pi d^{2}\varepsilon_0}$
- Let $k=\frac{1}{4\pi \varepsilon_0}$ to get
$$F = \frac{k Q_{1}Q_{2}}{d^{2}}$$
Completed
## Chapter 2-Gauss Golden Cudgel
- Assuming that a uniformly charged length is positively infinitely thin and the charge density is $\lambda$, find the field strength $d$ away from it.
- Draw a cylinder around the rod and set the height to be $x$.
- Due to the infinite length of the rod, the electric fields on the two bottom surfaces of the cylinder are cancelled.
- The cylindrical side area is $2\pi dx$
- The amount of charge in the cylinder is $\lambda x$
- Introduce Gaussian, get
$$
2\pi dxE = \frac{\lambda x}{\varepsilon_{0}}
$$
Organized
$$
E = \frac{\lambda}{2\pi d\varepsilon_{0}}
$$
Completed
## Gauss Ball Ball
- First, there must be a charged ball with electricity $Q$, and I want to find the field strength at the distance of $d$ from the center of the ball.
- Then columnable
$$
4\pi d^2 E = \frac{Q}{\varepsilon_0}
$$
Organized
$$
E = \frac{Q}{4\pi \varepsilon_0 d^2}
$$
complete
## Gaussian Noodles
- First, there is a uniformly charged infinite surface, the charged surface density is $\rho$, and the field strength of the point $d$ is desired.
- Using the infinite plane as the central cross section, make a cylinder with the center of the bottom surface as the point to be found, and the radius is $r$.
- Since the electric field lines are all parallel, only two bottom surfaces have electric field lines passing through.
- Columnable
$$
2\pi r^2 E = \frac{\rho \pi r^2}{\varepsilon_0}
$$
Organized
$$
E = \frac{\rho}{2\varepsilon_0}
$$
Finished
-----------
To Be Continued...
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: Fog Architecture and Internet of Things
titleEN: Fog Architecture and Internet of Things
title: 边缘计算与物联网
date: 2018-12-17
display: true
categories:
- thoughts
tags:
@ -8,9 +10,99 @@ tags:
- internet
- fog
---
{% raw %}<span class=".zh">{% endraw %}
在过去的几十年中,互联网迅速发展,在人们的生活中起着越来越重要的作用。 在地球上几乎所有人类的参与之后[1],开发人员不可避免地期望为互联网提供更多可用的东西,然后产生了物联网(IoT)的想法。 遗憾的是,在大量事物连接到Internet的情况下,其当前体系结构似乎并不是IoT的高效解决方案。 Bonomi等。 思科的文献[2]首先注意到了这个问题,然后他们提出了革命性的Fog概念,以适应即将到来的物联网时代对越来越多的各种设备的访问。 本文将论证雾概念可以对促进物联网建设产生重大影响。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
<!--more-->
{% raw %}</span>{% endraw %}
<!-- more -->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'zh'){
tips.warning({
title: '注意',
position: 'topRight',
message: '此页面由机器翻译为中文!!',
buttons: [['<button>查看原文</button>', function (instance, toast) {
page.tran.setLang('en');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
关于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页。提供:https://uk.cloud.yimian.xyz/index.php/s/PAbkLC5bqoWFcJi
这是一篇经过同行评审的早期文章,介绍了云和物联网的概念。它为我提供了研究人员如何看待Cloud以及他们如何理解2014年(当Cloud Computing开始流行时)IoT的范围。我使用它来提供有关Cloud简介的一些背景。
[2] F. Bonomi,R。Milito,J。Zhu和S. Addepalli,“雾计算及其在物联网中的作用”,在第一版MCC移动云计算研讨会论文集中。 [线上]。 2012年8月,第13-16页。可用:https://uk.cloud.yimian.xyz/index.php/s/ZnyXdJKk84dR2QD
本文首先指出了雾的概念。它的作者全部来自思科,思科被认为是提供Internetworking解决方案的最强大的公司。我已使用此资源介绍了Fog和Fog计算以及其虚构的Fog-IoT应用程序之一的互联汽车的一些背景。
[3] M. Chiang和T. Zhang,IEEE物联网杂志中的“雾与物联网:研究机会概述”。 [线上]。卷3号6,pp.854-864,2016年12月。可用:https://uk.cloud.yimian.xyz/index.php/s/Fi7KELbjE7kR3qq
这是最有影响力的工程师组织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日。可用:https://uk.cloud.yimian.xyz/index.php/s/oxj4EAm6M78GPN8
本文详细介绍了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月。可用:https://uk.cloud.yimian.xyz/index.php/s/p4QGJA6AWPDKEK4
这是IEEE的期刊,已被引用8422次。它提供了有关如何将Fog应用于计算领域的一些新颖思想。我从此来源总结了Fog控制概念,并引用了他们对Fog IoT的隐私和安全性问题的质疑。
[6] A. Yousefpour,G。Ishigaki和J. P. Jue,“雾计算:努力使物联网中的延迟最小化”,2017 IEEE国际边缘计算会议(EDGE),美国檀香山,檀香山。 [线上]。 2017年,第17-24页。可用:https://uk.cloud.yimian.xyz/index.php/s/EsDjHnHHGND2SoD
作者来自德克萨斯大学,他们在雾领域并不出名。由于它是唯一一篇评估延迟(Fog IoT的最重要特征)的数学方法,并且得出了看似可靠的结果,因此我使用它来支持我的低延迟论点。
[7] S. Sarkar,S。Chatterjee和S. Misra,“在物联网环境下进行雾计算的适用性评估”,在IEEE交易云计算中。[在线]。卷6号1,第46-59页,2018年1月至3月。可用:https://uk.cloud.yimian.xyz/index.php/s/m7of3EjZ6Tji7jF
该论文是在几个月前发表的。它由两名学生和一名医生撰写,因此并不那么权威。但是,由于对Fog的研究很少,我最终决定使用其建模结果来支持Fog IoT比Cloud更环境友好。
[8] G. Zyskind,O。Nathan和A.’。 Pentland,“去中心化隐私:使用区块链保护个人数据”,2015 IEEE安全和隐私研讨会,加利福尼亚州圣何塞。 [线上]。 2015年,第180-184页。可用:https://uk.cloud.yimian.xyz/index.php/s/7FirJsrD93wzDxN
该论文由IEEE发表。 Zyskind来自麻省理工学院,这使得消息来源似乎可信。我对区块链算法感兴趣,该算法在理论上绝对是安全的,我认为这是解决Fog IoT安全问题的一种理想方法。
----------------------
附件
雾和物联网PPT:https://uk.cloud.yimian.xyz/index.php/s/GbLfqxX2CBTDdRR
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
@ -62,4 +154,7 @@ To conclude, although the IoT based on Fog concept may be currently doubted in p
----------------------
Attachment
Fog and IoT PPT: https://uk.cloud.yimian.xyz/index.php/s/GbLfqxX2CBTDdRR
Fog and IoT PPT: https://uk.cloud.yimian.xyz/index.php/s/GbLfqxX2CBTDdRR
{% raw %}</span>{% endraw %}

@ -1,5 +1,7 @@
---
title: 气候变化与全球环境
titleEN: Climate change and the global environment
display: true
date: 2019-02-27
categories:
- thoughts
@ -7,10 +9,41 @@ tags:
- climate
- environment
---
{% raw %}<span class=".zh">{% endraw %}
全球气候变化与人类行为有着显著的相关性,人类行为又会改变气候的自然变化。通过研究Ice core等Archive,发现地球历史中温度与$CO_{2}$浓度有着显著正相关性。如今,人类行为使大气$CO_{2}$含量远超其正常水平,其可能引起全球变暖,冰川融化等,但仅为可能..
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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...
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 概念简介
### 天气与气候
@ -108,6 +141,115 @@ F --> E
[1]: https://www.eee.dog/usr/uploads/2019/02/3411175553.pdf
[2]: https://yimian-image.obs.myhwclouds.com/blog/34-1.png
[3]: https://yimian-image.obs.myhwclouds.com/blog/34-2.jpg
[4]: https://yimian-image.obs.myhwclouds.com/blog/34-3.png
[2]: https://api.yimian.xyz/img/?path=imgbed/img_8a6ca9c_720x237_8_null_normal.jpeg
[3]: https://api.yimian.xyz/img/?path=imgbed/img_c2461c9_600x400_8_null_normal.jpeg
[4]: https://api.yimian.xyz/img/?path=imgbed/img_d2a8246_394x204_8_null_normal.jpeg
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Concept introduction
### Weather and Climate
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 temperature changes in the history of the earth][2]
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.
## research method
### Direct method (research modern)
1. Record the temperature
2. Record rainfall (Precipitation)
3. Research vegetation (Vegetation)
4. Sea level
5. Glaciers :: Balance, mainly through the study of the melting and formation of ice sheets
### Indirect Method (Research History)
1. Proxy
2. Archive e.g. "Ice Core" :: a layered ice lolly specimen extracted from the Ice Sheet
### Ice Core layering reasons
After snow cover, over time, snow cover will experience the following states:
1. Snow (a few hours, the main component is air)
2. Firn (a few days, snow)
3. Glacial Ice (several years)
### Time tracking method
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.
![冰层][3]
### Historical temperature research method
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.
## The study found
### Carbon dioxide concentration is closely related to temperature
![History of carbon dioxide and temperature][4]
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 ⌇●﹏●⌇
## With humans
### A formula
$$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$$
### An organization
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? ヾ(´・ ・`。)ノ"
## Climate warming impact
### Good
- Data shows that the higher the temperature, the fewer wars worldwide
- Experiments show that when the temperature is high, the yield of vegetation such as grain is higher
### Bad
- Southern animals (bugs) move northward faster than plants. There are no natural enemies in the north, and plants are eaten up by bugs.
- Sea level rises, flooding Suzhou
{% raw %}
<!-- Introduce mermaid drawing-->
<div class="mermaid">
graph TD
A{Climate Change}
B[Economy]
C[Politic]
D[Tech]
E[Agriculture]
F[Human Health]
A --> |influence| E
E --> |change| B
E --> |change| C
B --> |change| C
B --> |determine| D
C --> |determine| D
B --> |influence| F
D --> |affect| F
D --> A
C --> A
D --> E
E --> |Green Plant| A
E --> F
F --> E
</div>
{% endraw %}
-------------
Reference courseware:
[Climate change-From past to Future-Yi Zou-2019.pdf][1]
[1]: https://www.eee.dog/usr/uploads/2019/02/3411175553.pdf
[2]: https://api.yimian.xyz/img/?path=imgbed/img_8a6ca9c_720x237_8_null_normal.jpeg
[3]: https://api.yimian.xyz/img/?path=imgbed/img_c2461c9_600x400_8_null_normal.jpeg
[4]: https://api.yimian.xyz/img/?path=imgbed/img_d2a8246_394x204_8_null_normal.jpeg
{% raw %}</span>{% endraw %}

@ -1,14 +1,54 @@
---
title: 今天很开心,在这里留个空
titleEN: Very happy today, leave a blank here
date: 2019-10-19
categories:
- life
tags:
- love
---
{% raw %}<span class=".zh">{% endraw %}
先在这里留个空,以后慢慢填~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Leave a blank here first, then fill it in slowly~
{% raw %}</span>{% endraw %}
<!--more-->
φ( ̄∇ ̄o)
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
φ( ̄∇ ̄o)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
φ( ̄∇ ̄o)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Hello Hexo
titleEN: Hello Hexo
date: 2020-06-16 15:43:54
categories:
- tech
@ -7,4 +8,48 @@ tags:
- hexo
---
{% raw %}<span class=".zh">{% endraw %}
将blog从Typecho迁移到了Hexo。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Migrated blog from Typecho to Hexo.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Hello Typecho
titleEN: Hello Typecho
date: 2018-12-22
categories:
- tech
@ -7,4 +8,51 @@ tags:
- hexo
---
将blog从wordpress迁移到了Typecho。
{% raw %}<span class=".zh">{% endraw %}
将blog从wordpress迁移到了Typecho。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Migrated blog from wordpress to Typecho.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Hello World
title: 你好,世界!
titleEN: Hello World!
date: 2018-09-04
categories:
- tech
@ -8,8 +9,49 @@ tags:
- php
---
{% raw %}<span class=".zh">{% endraw %}
你好,世界!
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Hello World!
{% raw %}</span>{% endraw %}
<!--more-->
在我19周岁生日这一天,我的第一个通过wordpress自建的Blog网站正式上线啦~
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
在我19周岁生日这一天,我的第一个通过wordpress自建的Blog网站正式上线啦~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
On my 19th birthday, my first blog site built by WordPress was officially launched~
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: 英国意大利申根签攻略
titleEN: Schengen visa guide
date: 2019-10-30
display: true
categories:
- travel
tags:
@ -8,10 +10,42 @@ tags:
- italy
- visa
---
{% raw %}<span class=".zh">{% endraw %}
在英国留学,圣诞去欧洲旅游,DIY了意大利申根签证。现在游完归来,总结一份申根签攻略。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 大致流程
- 仔细阅读[官网](https://www.vfsglobal.com/Italy/UK/London/tourist.html)条件,查看自己是否满足所有要求
- 尽早在线[面签预约](https://www.vfsglobal.com/Italy/UK/London/Schedule_an_Appointment1.html)(之后可以修改时间)
@ -100,3 +134,97 @@ tags:
![visa](https://api.yimian.xyz/img/?path=imgbed/img_f5690b2c_3968x2976_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## General process
- Read [Official Website](https://www.vfsglobal.com/Italy/UK/London/tourist.html) conditions carefully to check whether you meet all the requirements
- Online [Interview Appointment](https://www.vfsglobal.com/Italy/UK/London/Schedule_an_Appointment1.html) online as early as possible (the time can be modified later)
- Carefully study the [required materials](https://www.vfsglobal.com/Italy/UK/London/tourist.html) (must follow the official website)
- Generate visa application form ([Online generation](https://www.vfsvisaonline.com/OnlineVaf-Italy?Country=QcpCgYPkPBcUOc3/C92SWQ==))
- Prepare other materials
## Material category
### Regular visa materials
- Visa application form
- personal I.D
- Proof of residence
- Photos
### Additional visa materials
- Proof of employment
- Proof of property
- Travel certificate
- Proof of accommodation
- Insurance certificate
## Material CheckList
- Original visa application form (print after online generation)
- Original passport + photocopy (black and white)
- BRP original + copy (black and white)
- A passport photo-consistent with the UK visa ([Requirements](https://www.vfsglobal.com/Italy/UK/London/tourist.html#tourist_photoSpecs))
- student letter
- Original traveler's check + copy or three-month bank account
- Round-trip air ticket (name, date, to&from)
- Train ticket (name, date, to&from)
- Proof of accommodation (name, date, address)
- Companion list
- Travel insurance certificate (name, geographic area, insurance amount)
- Copy of appointment certificate
-------------------------
- Travel itinerary (for easy explanation with visa officer)
- joint travel confirmation letter (if your name is not on a certain ticket or accommodation certificate)
- Copy of the passport signature page of the ticket purchaser (if your name is not on the ticket or accommodation certificate)
## Material Description
### visa application form
- After filling out the first page online, remember to click SAVE, and write down the Reference Number ::aru:shy::
- Click [RETRIEVE INCOMPLETE FILLED VAF](https://www.vfsvisaonline.com/OnlineVAF-Italy/Applicant/Search) above to continue to fill in after logging in next time
- Fill in the reference [this guide](https://travel.uk2hand.com/ukvisa/italy-schengen-visa/)
- Single-sided black and white A4 printing
- After printing, do not fill in, do not sign, do not post photos, the visa officer will tell you what to do
- Do not staple, it is recommended to use a loop pin
### Student Letter
- Go to school FB to open
- A signature is required, and an electronically printed signature will not work
- Head up to write `Italy Consulate`
### Travel Proof
- Need to provide paid air tickets and inter-city train tickets
- A website link is required at the bottom of the ticket
- All tickets need to have your name
- If a ticket does not have your name, the person named on the ticket is required to provide a signed `joint travel confirmation letter` and a copy of `passport`
- Please refer to our `joint travel confirmation letter`
![joint letter](https://api.yimian.xyz/img/?path=imgbed/img_65e72a51_634x740_8_null_normal.png)
### Proof of Accommodation
- `paid` is required on `Booking Confirmation`
- A website link is required at the bottom
- All materials need to have your name
- If you do not have your name, the person who has the name needs to provide a signed `joint travel confirmation letter` and a copy of `passport`
- It is recommended to order from well-known websites such as `Booking`
### Insurance Certificate
- Be sure to cover the journey
- The longer the guarantee period, the longer the visa period. .
- We chose Taiping Insurance Schengen emergency visa for reference
### Appointment Proof
- Go to the front desk downstairs to register with the appointment letter
- After that, the appointment letter is useless
--------------------------------------------
## Results
Finally, let me show the visa I got~
![visa](https://api.yimian.xyz/img/?path=imgbed/img_f5690b2c_3968x2976_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: JS中那些惊艳的操作
titleEN: Those amazing operations in JS
date: 2019-03-19
categories:
- tech
@ -7,61 +8,153 @@ tags:
- nodeJS
---
{% raw %}<span class=".zh">{% endraw %}
教你如何一步步迷上JS.. ╮(╯▽╰)╭
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Teach you how to fall in love with JS step by step.. ╮(╯▽╰)╭
{% raw %}</span>{% endraw %}
<!--more-->
好嘀~只是一些总结
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
好嘀,只是一些总结
## JS中的那些萌点
- <script>使``defer="defer"``()``async="async"``()
- `<script>`标签中,合理使用`defer="defer"`(延迟执行),`async="async"`(异步执行)
- 外部JS可以使用其它扩展名(如.php),但必须返回正确MINE类型
- 使用``var obj = preferredObj || backupObj;`` 提供后备值 ::aru:surprised::
- 函数中使用``arguements[]``获取参数
- 使用`var obj = preferredObj || backupObj;` 提供后备值 ::aru:surprised::
- 函数中使用`arguements[]`获取参数
- 无函数签名,再见吧重载 ::aru:meditation::
- 函数无引用传参,只要不作死用全局变量,封装就很完美
- 神奇的垃圾收集功能,开发时无需考虑手动释放内存
- 函数传参使用``function hh({})``直接传包含参数的对象,更加灵活
- 函数传参使用`function hh({})`直接传包含参数的对象,更加灵活
- 数组每一个位置可以存不同类型的数据 ::aru:blood2::
- 数组支持模拟栈操作,如``push()``和``pop()``
- 数组支持模拟队列操作,如``push()``和``shift()``
- 数组支持从相反方向模拟队列,如``unshift()``和``pop()``
- ``sort()``可自定义比较函数为参数
- 数组``splice()``可太好用了吧
- 数组支持模拟栈操作,如`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()``处理uri
- 立即调用函数``function(){}();``
- 函数中可通过`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()`处理uri
- 立即调用函数`function(){}();`
- 内置Math对象
- Math中``ceil()````floor()````round()``向上,向下,标准舍入
- ``Math.random()``大于零小于一随机数
- 对象中使用``functionName: function(){}``直接定义函数
- ES6中``(x)=>x+1``等价于``function(x){return x+1;}``
- 使用``;(function(name, context, definition){moudle.exports = definition();})('funationName', this, function(){});``封装模块
- Math中`ceil()``floor()``round()`向上,向下,标准舍入
- `Math.random()`大于零小于一随机数
- 对象中使用`functionName: function(){}`直接定义函数
- ES6中`(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`` 利用按位非提高效率
- 不建议使用`with`语句
- `label`标签少用
- `0.1 + 0.2 != 0.3` 浮点型天坑,与C类似
- `~26 == -27` 利用按位非提高效率
- 标识符查询由内部环境向外部环境进行
- 没有块级作用域,与C++不同
- ``var obj2 = obj1;``实际是引用
- `var obj2 = obj1;`实际是引用
- 函数传参时传对象,实际传的是指针
- 全局变量用完及时置为null以提性能
- 使用变量属性访问对象只能使用``obj[var]``
- ``var sum = function sum(){};``在Safari中会报错
- 使用变量属性访问对象只能使用`obj[var]`
- `var sum = function sum(){};`在Safari中会报错
- 不能为基本类型值添加属性和方法
- ``new Number("25")``返回对象,而``Number("25")``返回25
- `new Number("25")`返回对象,而`Number("25")`返回25
- 布尔表达式中对象均为true
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Okay, just some summary
## Those cute points in JS
- In the `<script>` tag, reasonably use `defer="defer"` (delayed execution) and `async="async"` (asynchronous execution)
- External JS can use other extensions (such as .php), but must return the correct MINE type
- Use `var obj = preferredObj || backupObj;` to provide a backup value ::aru:surprised::
- Use `arguements[]` to get parameters in the function
- No function signature, goodbye overload ::aru:meditation::
- The function has no reference to pass parameters, as long as the global variable is not used for deadly, the encapsulation is perfect
- Magic garbage collection function, no need to consider manually releasing memory during development
- Use `function hh({})` to pass parameters directly to functions, which is more flexible
- Each position of the array can store different types of data ::aru:blood2::
- Array supports simulated stack operations, such as `push()` and `pop()`
- Array supports simulated queue operations, such as `push()` and `shift()`
- Array supports simulating queues from the opposite direction, such as `unshift()` and `pop()`
- `sort()` can customize the comparison function as a parameter
- The array `splice()` is so easy to use, right?
- Functions are objects and function names are pointers
- You can pass a function to another function as parameters, or you can return a function as the result of another function
- In the function, the current function name pointer can be obtained through `arguments.callee`
- Use `arguments.callee.caller` to get a reference to call the current function
- Use `function.apply(this/*scope*/, arguments)` or `function.call(this, arg1, arg2...)` to specify the scope to run the function
- Use the function intrinsic property `function.length` to get the number of expected parameters
- Inherit the property `toLocaleString(), toString(), and valueOf()` return code through the function to facilitate debugging
- Use `indexOf() and lastIndexOf()` to find the element's appearance
- `trim()` delete spaces at the beginning and end of the string
- Support regular `RegExp`
- The magical but terrible `eval("")` can translate the string into code and execute it in place
- `encodeURI()/decodeURI()` and `encodeURIComponent()/decodeURICompoent()` handle uri
- Call the function immediately `function()()();`
- Built-in Math object
- `ceil(), floor(), round()` in Math up, down, standard rounding
- `Math.random()` is a random number greater than zero and less than one
- Use `functionName: function(){}` in the object to directly define the function
- In ES6 `(x)=>x+1` is equivalent to `function(x){return x+1;}`
- Use `;(function(name, context, definition){moudle.exports = definition();})('funationName', this, function()());` to encapsulate the module
## Be careful
- It is not recommended to use `with` statement
- Less use of `label`
- `0.1 + 0.2 != 0.3` floating point tiankeng, similar to C
- `~26 == -27` Use bitwise not to improve efficiency
- Identifier query is carried out from the internal environment to the external environment
- No block-level scope, different from C++
- `var obj2 = obj1;` is actually a reference
- The object is passed when the function is passed, but the pointer is actually passed
- Set global variables to null when used up to improve performance
- Use variable attributes to access objects can only use `obj[var]`
- `var sum = function sum(){};` will report an error in Safari
- You cannot add attributes and methods to basic type values
- `new Number("25")` returns the object, and `Number("25")` returns 25
- All objects in Boolean expressions are true
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: 一键激活win10
titleEN: Activate win10 with one click
date: 2020-02-07
display: true
categories:
- tech
tags:
@ -8,10 +10,41 @@ tags:
- win10
---
{% raw %}<span class=".zh">{% endraw %}
一键激活win10家庭版,专业版,企业版,教育版 φ( ̄∇ ̄o)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Activate win10 Home Edition, Professional Edition, Enterprise Edition, Education Edition with one click φ( ̄∇ ̄o)
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
<!--![](https://api.yimian.xyz/img/?path=wallpaper/img_2020-02-05_1920x1080_96_background_normal.jpg)-->
@ -90,3 +123,82 @@ tags:
- 项目地址:[iotcat/kms](https://github.com/iotcat/kms)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Method one (automatic installation)
- To use this method, please **close all antivirus software**
- To use this method, please **close all antivirus software**
- To use this method, please **close all antivirus software**
> p.s. If you are not assured, please use Method Two-Source Installation
------------------------------------------
- Click [here](https://github.com/IoTcat/kms/releases/download/v1.0/kms.exe) to download the `exe` program
-------------------------
- Run the program you just downloaded. (**Please do not modify the decompression path**)
- Run the program you just downloaded. (**Please do not modify the decompression path**)
--------------------
- Click More info `->` still running
![](https://api.yimian.xyz/img/?path=imgbed/img_f8f91201_532x498_8_null_normal.png)
![](https://api.yimian.xyz/img/?path=imgbed/img_5e6b7101_532x498_8_null_normal.png)
- Enter numbers to select. (You can enter the number `4` to get a Chinese translation!!)
![](https://api.yimian.xyz/img/?path=imgbed/img_6f4f0165_609x226_8_null_normal.png)
----------------------------------------------
- Wait patiently for the activation to complete~ ::aru:proud::
> The script has been sent to the desktop `kms.bat`, you can delete it if you don't need it~
## Method two (source installation)
- Click [here](https://github.com/IoTcat/kms/archive/master.zip) to download the compressed file.
-----------------------------------
- **Unzip the compressed file** (please **unzip**, otherwise it will not run)
- **Unzip the compressed file** (please **unzip**, otherwise it will not run)
- **Unzip the compressed file** (please **unzip**, otherwise it will not run)
--------------------------------
- Double-click `kms` or `kms.bat` in the run folder.
![Compressed file example](https://api.yimian.xyz/img/?path=imgbed/img_c8d641e0_908x257_8_null_normal.png)
- Click More info `->` still running
![](https://api.yimian.xyz/img/?path=imgbed/img_f8f91201_532x498_8_null_normal.png)
![](https://api.yimian.xyz/img/?path=imgbed/img_5e6b7101_532x498_8_null_normal.png)
- Enter numbers to select. (You can enter the number `4` to get a Chinese translation!!)
![](https://api.yimian.xyz/img/?path=imgbed/img_6f4f0165_609x226_8_null_normal.png)
----------------------------------------------
- Wait patiently for the activation to complete~ ::aru:proud::
## Advanced
### Activation code
Your activation code will be saved in `C:\Windows\kms.key`
### Run log
- Activation log `%temp%\kms.log`
- Tried activation code `%temp%\kms.tried_keys` on this machine
- kms server configuration `%temp%\kms.skms`
- ato output information `%temp%\kms.ato`
### Restore inactive state
- Enter `kms.bat` and select `3`
- Wait for the uninstallation to complete! ! !
## Source code
- Project address: [iotcat/kms](https://github.com/iotcat/kms)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Liverpool 学生公寓条件调研
titleEN: Liverpool student apartment conditions survey
date: 2019-10-10
categories:
- life
@ -9,11 +10,43 @@ tags:
- accomodation
- investigation
---
{% raw %}<span class=".zh">{% endraw %}
为了更清晰更直观的选择出明年居住的公寓,本文汇总了网络上对各公寓的评价信息,供决策参考。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
[scode type="green"]大家积极在评论区补充哦,评论推荐使用qq邮箱[/scode]
[scode type="yellow"]持续更新中...[/scode]
[scode type="blue"]望大家能够**补充**更多房源,以便调查[/scode]
@ -122,4 +155,118 @@ tags:
## Liberty Park
+ `缺点`: 一楼二楼隔音不好
+ `优点`: 回字形楼中间有一个小花园(娇娇,欣怡)
+ `优点`: 回字形楼中间有一个小花园(娇娇,欣怡)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
[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! !**
## Dover Court (Our final choice)
+ `walking distance`: 8 min (Northwest)
+ `google map`: [Dover Court](https://www.google.com/maps/dir/53.4060943,-2.9635088/dover+court/@53.4073115,-2.9710734,16z/data=!3m1!4b1!4m9!4m8!1m1!4e1!1m5!1m1!1s0x487b2117f02af11d:0xa8248cb9d60eb03d!2m2!1d-2.9700754!2d53.408129)
+ `Official Guide`: [Dover Court](https://www.youtube.com/watch?v=lMyNP1edztE)
+ `Pros`: Close to Lidl, quiet, well managed, safe, cleaned regularly, good social place, quiet study room downstairs
+ `Disadvantages`: Room soundproofing is average, some rooms are small, and some places have low ceilings
+ `Price`: £155.54 pw (Last Year)
## Horizon Heights
+ `walking distance`: 14 min (West)
+ `google map`: [Horizon Heights](https://www.google.com/maps/place/Unite+Students+-+Horizon+Heights/@53.4063639,-2.9762904,14.73z/data=!4m5!3m4!1s0x0:0xeb3661ed145a9ca6!8m2!3d53.4068673!4d-2.9785214)
## St Luke's View
+ `walking distance`: 13 min (southwest)
+ `google map`: [St Luke's View](https://www.google.com/maps/place/Unite+Students+-+St+Luke's+View,+Liverpool/@53.4032851,-2.9832055,15.1z/data=!4m5!3m4!1s0x487b2123d300f157:0x7aa4464b82196264!8m2!3d53.4026763!4d-2.975033)
## Apollo Court
+ `Walking distance`: 11 min (Northwest)
+ `Classmates' reflections`: Not quiet (Lao Lei)
## Capital Gate
+ `walking distance`: 7 min (Northwest)
## Grand Central
+ `walking distance`: 12 min (West)
## Philharmonic Court
+ `Walking distance`: 12 min (South)
## The Railyard
+ `walking distance`: 9 min (East)
## Myrtle Court
+ `walking distance`: 9 min (East)
## Larch House
+ `walking distance`: 7 min (West)
## IQ
+ `walking distance`: 9 min (Northwest)
+ Connection: Lao Ye, Bulb
## The Arch
+ `walking distance`: 18 min (southwest)
## Albert Court
+ `walking distance`: 10 min (north)
## St Andrews Place
+ `Walking distance`: 10 min (Southwest)
## The Ascent
+ `walking distance`: 13 min (West)
## Lee Court
+ `walking distance`: 10 min (north)
## X1 Liverpool One
+ `walking distance`: 18 min (West)
## X1 The Edge
+ `Walking distance`: 12 min (Northwest)
+ `Others`: Express can be sent to Cambridge Court (Liang Bin)
## Cambridge Court
+ `walking distance`: 8 min (south)
+ `google map`: [Cambridge Court](https://www.google.com/maps/dir/53.4060907,-2.963637/Cambridge+Ct,+Liverpool/@53.4043312,-2.9678762,17z/data=!3m1!4b1!4m9!4m8!1m1!4e1!1m5!1m1!1s0x487b2118d373aed7:0x8824353bb8192424!2m2!1d-2.967738!2d53.4026346)
+ `Disadvantages`: Poor sound insulation, damp carpets, poor conditions
## Vita Student Liverpool
+ `walking distance`: 21 min (West)
## Liberty Park
+ `Disadvantages`: Sound insulation is not good on the first and second floors
+ `Advantages`: There is a small garden in the middle of Huizi Building (Jiaojiao, Xinyi)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 自动发邮件API
titleEN: Auto email API
date: 2019-03-22
categories:
- tech
@ -7,11 +8,43 @@ tags:
- api
- mail
---
{% raw %}<span class=".zh">{% endraw %}
重整自己先前的mail模块,顺便封装了一个API出来,欢迎大家调用~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Reorganized my previous mail module and encapsulated an API by the way. Welcome everyone to call~
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 方法
### 参数(接受GET和POST)
@ -36,3 +69,36 @@ https://api.yimian.xyz/mail/?to=收信邮箱&subject=邮件主题&body=邮件内
- 参数`state`::`true`(成功)或`false`(失败)
[scode type="dangerous"]每个IP每天请求上限50个[/scode]
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Method
### Parameters (accept GET and POST)
- `to` recipient email address
- `subject` mail subject
- `body` email content (html format is recommended)
- `from` sender name
### Request address
````
https://api.yimian.xyz/mail
````
### Example
````
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]
### Return value (json format)
- Parameter `state`::`true` (success) or `false` (failure)
[scode type="dangerous"] There are 50 requests per day per IP[/scode]
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 总结一下我的代码风格
titleEN: Summarize my code style
date: 2019-02-26
categories:
- tech
@ -7,10 +8,39 @@ tags:
- cpp
---
{% raw %}<span class=".zh">{% endraw %}
我的代码风格大致有以下几种情况:组织中追随组织领导,公司里老板说的都对,学校里大佬教的都好╮(╯▽╰)╭ 仅其它一些自己的开源小项目则遵循以下风格→_→
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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→_→
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 关于强迫症
首先说好,
@ -120,4 +150,122 @@ function db::get_usr_info();
[1]: https://nginx.org
[1]: https://nginx.org
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## About obsessive-compulsive disorder
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! ! !
## About naming
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::
### Often/variable naming
The compiler constants are all uppercase, and the characters are connected by a single underscore. Such as:
````C
#define WIFI_PASSWD 12345
````
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:
````C++
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
````C++
global int g_isLightOn = 0;
````
Local static variables use s_ plus the variable name, such as
````C++
static int s_errorCounter = 0;
````
Constant variables, naming the same as ordinary variables, such as
````C++
const float pi = 3.14159265;
````
### Function Naming
The function naming technique is stolen from the famous [Nginx][1] 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:
````php
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:
````php
function get_usr_info();
//or
function db::get_usr_info();
````
Different from variable naming, function naming need not be short, aiming at expressing clearly the function function
## About comments
In fact, if you can name the variable function well, you don't need any comments, but unfortunately, we still have to comment. .
### File Notes
File comments are mainly used to declare some file functions, category names, file names, copyright and other information. A style is as follows:
````php
/**
* cookie support #file function
*
* @category typecho #The category to which the file belongs
* @package Cookie #File name
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) #Author and copyright information
* @license GNU General Public License 2.0 #Open source agreement
* @version 2.1.1 #Version
*/
````
### Class comments
Class annotations are used to declare some basic information of the class, such as class function, author name, classification, and file. E.g:
````php
/**
* Database support #Function description
*
* @author qining #author
* @category typecho #Category
* @package Cookie #File name
*/
````
### Function comments
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.
````php
/**
* Get the specified COOKIE value #Function function
*
* @access public #Function modifier, that is, whether the function can be accessed by the outside world
* @param string key specified parameter #Parameter 1, type is string, name is key, function description is specified parameter
* @param string default Default parameters #Parameter 2, type string, name default, function description Default parameters
* @return int #Return the integer return value
*/
````
## Some small details
- There must be spaces on both sides of the equal sign, such as ``b = c; b = 15;''
[1]: https://nginx.org
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: 随机图片API
titleEN: Random Picture API
date: 2019-07-10
display: true
categories:
- tech
tags:
@ -10,11 +12,41 @@ tags:
- moe
---
{% raw %}<span class=".zh">{% endraw %}
本API基于华为云对象存储,使用华为CDN云加速,全球平均下载速度达10MB/s。API中已收录1100+张二次元图片,20+张Bing壁纸(每日自动抓取),150+张二次元头像,10+张图床上传图片。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
[scode type="red"]本API不承诺**永久**维护,使用前请务必斟酌**使用风险**!![/scode]
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
> 本API不承诺**永久**维护,使用前请务必斟酌**使用风险**!!
## 1 API地址
- `https://api.yimian.xyz/img`
@ -69,7 +101,7 @@ tags:
- `GET/POST /img?type=wallpaper`
- 图片来源: Bing每日壁纸
- 示例:[https://api.yimian.xyz/img?type=moe](https://api.yimian.xyz/img?type=wallpaper)
[scode type="green"]每日自动更新中[/scode]
> 每日自动更新中
***二次元头像***
- `GET/POST /img?type=head`
@ -115,23 +147,23 @@ tags:
***??x\****
- `GET/POST /img?size=??x*`
- 描述: 宽度x任意高度
!!!
{% raw %}
<li>示例:<a href="https://api.yimian.xyz/img?size=1920x*" target="_blank">https://api.yimian.xyz/img?size=1920x*</a></li>
!!!
{% endraw %}
***\*x??***
- `GET/POST /img?size=*x??`
- 描述: 任意宽度x高度
!!!
{% raw %}
<li>示例:<a href="https://api.yimian.xyz/img?size=*x1080" target="_blank">https://api.yimian.xyz/img?size=*x1080</a></li>
!!!
{% endraw %}
***\*x\****
- `GET/POST /img?size=*x*`
- 描述: 任意宽度x任意高度(默认)
!!!
{% raw %}
<li>示例:<a href="https://api.yimian.xyz/img?size=*x*" target="_blank">https://api.yimian.xyz/img?size=*x*</a></li>
!!!
{% endraw %}
***??-??x??***
- `GET/POST /img?size=??-??x??`
@ -151,16 +183,16 @@ tags:
***??-??x\****
- `GET/POST /img?size=??-??x*`
- 描述: 宽度范围x任意高度
!!!
{% raw %}
<li>示例:<a href="https://api.yimian.xyz/img?size=1910-1930x*" target="_blank">https://api.yimian.xyz/img?size=1910-1930x*</a></li>
!!!
{% endraw %}
***\*x??-??***
- `GET/POST /img?size=*x??-??`
- 描述: 任意宽度x高度范围
!!!
{% raw %}
<li>示例:<a href="https://api.yimian.xyz/img?size=*x1070-1090" target="_blank">https://api.yimian.xyz/img?size=*x1070-1090</a></li>
!!!
{% endraw %}
### 4.4 range
本参数规定允许的size的误差,需搭配size使用,默认为0。
@ -233,6 +265,231 @@ tags:
}
```
[scode type="yellow"]每台设备每天**全局**调用上限500次!![/scode]
> 每台设备每天**全局**调用上限500次!!
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
> This API does not promise **permanent** maintenance, please be sure to consider **use risks** before use! !
## 1 API address
- `https://api.yimian.xyz/img`
## 2 Quick start
***Random two-dimensional picture***
- `GET/POST /img?type=moe`
- Example: [https://api.yimian.xyz/img?type=moe](https://api.yimian.xyz/img?type=moe)
***Random Bing Wallpaper***
- `GET/POST /img?type=wallpaper`
- Example: [https://api.yimian.xyz/img?type=wallpaper](https://api.yimian.xyz/img?type=wallpaper)
***Random two-dimensional avatar***
- `GET/POST /img?type=head`
- Example: [https://api.yimian.xyz/img?type=head](https://api.yimian.xyz/img?type=head)
***Random bed pictures***
- `GET/POST /img?type=imgbed`
- Example: [https://api.yimian.xyz/img?type=imgbed](https://api.yimian.xyz/img?type=imgbed)
***Random 1920x1080 size two-dimensional picture***
- `GET/POST /img?type=moe&size=1920x1080`
- Example: [https://api.yimian.xyz/img?type=moe&size=1920x1080](https://api.yimian.xyz/img?type=moe&size=1920x1080)
## 3 Parameter list
Name | Description | Format | Example
:---:| :---: | :---: | :---:
**type** | Image type | `moe`/`wallpaper`/`head`/`imgbed` | `type=moe`
**size** | Filter by image size | `??x??`;<br>`*x??`;<br>`*x*`;<br>`??-??x?? `;<br>`??-??x??-??`;<br> `??-??x*` | `display=1920x1080`;<br>`display=1920x*`;<br >`display=1920-1950x230-500`;<br>`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`
## 4 Detailed parameters
### 4.1 type
***Two-dimensional (default)***
- `GET/POST /img?type=moe`
- Image source: Daily Collection of Miao Miao Jiang (Pivix, Twitter)
- Example: [https://api.yimian.xyz/img?type=moe](https://api.yimian.xyz/img?type=moe)
***bing daily wallpaper***
- `GET/POST /img?type=wallpaper`
- Image source: Bing Daily Wallpaper
- Example: [https://api.yimian.xyz/img?type=moe](https://api.yimian.xyz/img?type=wallpaper)
> Automatically updated daily
***Two-dimensional avatar***
- `GET/POST /img?type=head`
- Image source: Selectively intercepted from two-dimensional images
- Example: [https://api.yimian.xyz/img?type=head](https://api.yimian.xyz/img?type=head)
***Miao meow sauce picture bed***
- `GET/POST /img?type=imgbed`
- Image source: [呓喵酱图床](https://imgbed.yimian.xyz)
- Example: [https://api.yimian.xyz/img?type=imgbed](https://api.yimian.xyz/img?type=imgbed)
***こいぬちゃん***
- `GET/POST /img?type=koino`
- Image source: @九条だんぼ (Twitter, Pivix, Google)
- Example: [https://api.yimian.xyz/img?type=koino](https://api.yimian.xyz/img?type=koino)
***EasyVer man-machine verification***
- `GET/POST /img?type=easyver`
- Image source: Optimized finishing
- Example: [https://api.yimian.xyz/img?type=easyver](https://api.yimian.xyz/img?type=easyver)
### 4.2 display
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`
- Description: 302 Jump to return to the picture, recommended
- Example: [https://api.yimian.xyz/img?display=false](https://api.yimian.xyz/img?display=false)
**true**
- `GET/POST /img?display=true`
- Description: Return to the picture directly, slow
- Example: [https://api.yimian.xyz/img?display=true](https://api.yimian.xyz/img?display=true)
### 4.3 size
Use this parameter to limit the image size. This parameter supports the following formats:
***??x??***
- `GET/POST /img?size=??x??`
- Description: width x height
- Example: [https://api.yimian.xyz/img?size=1920x1080](https://api.yimian.xyz/img?size=1920x1080)
***??x\****
- `GET/POST /img?size=??x*`
- Description: width x any height
{% raw %}
<li>Example: <a href="https://api.yimian.xyz/img?size=1920x*" target="_blank">https://api.yimian.xyz/img?size=1920x*</a></li>
{% endraw %}
***\*x??***
- `GET/POST /img?size=*x??`
- Description: Any width x height
{% raw %}
<li>Example: <a href="https://api.yimian.xyz/img?size=*x1080" target="_blank">https://api.yimian.xyz/img?size=*x1080</a></li>
{% endraw %}
***\*x\****
- `GET/POST /img?size=*x*`
- Description: any width x any height (default)
{% raw %}
<li>Example: <a href="https://api.yimian.xyz/img?size=*x*" target="_blank">https://api.yimian.xyz/img?size=*x *</a></li>
{% endraw %}
***??-??x??***
- `GET/POST /img?size=??-??x??`
- Description: width range x height
- Example: [https://api.yimian.xyz/img?size=1910-1930x1080](https://api.yimian.xyz/img?size=1910-1930x1080)
***??x??-??***
- `GET/POST /img?size=??x??-??`
- Description: width x height range
- Example: [https://api.yimian.xyz/img?size=1920x1070-1090](https://api.yimian.xyz/img?size=1920x1070-1090)
***??-??x??-??***
- `GET/POST /img?size=??-??x??-??`
- Description: width range x height range
- Example: [https://api.yimian.xyz/img?size=1910-1930x1070-1090](https://api.yimian.xyz/img?size=1910-1930x1070-1090)
***??-??x\****
- `GET/POST /img?size=??-??x*`
- Description: width range x any height
{% raw %}
<li>Example: <a href="https://api.yimian.xyz/img?size=1910-1930x*" target="_blank">https://api.yimian.xyz/img?size=1910 -1930x*</a></li>
{% endraw %}
***\*x??-??***
- `GET/POST /img?size=*x??-??`
- Description: Any width x height range
{% raw %}
<li>Example: <a href="https://api.yimian.xyz/img?size=*x1070-1090" target="_blank">https://api.yimian.xyz/img?size=* x1070-1090</a></li>
{% endraw %}
### 4.4 range
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`
- Description: width ±100 x height ±100
- Example: [https://api.yimian.xyz/img?size=1920x1080&range=100](https://api.yimian.xyz/img?size=1920x1080&range=100)
***For??-?? type size parameter***
- `GET/POST /img?size=??-??x??-??&range=100`
- Description: Min width-100|Max width+100 x Min height-100|Max height+100
- Example: [https://api.yimian.xyz/img?size=1910-1930x1070-1090&range=100](https://api.yimian.xyz/img?size=1910-1930x1070-1090&range=100)
***For *type size parameter***
- `GET/POST /img?size=*x*&range=100`
- Description: Invalid range
### 4.5 id
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`
- Description: Extract the two-dimensional image with id 15
- Example: [https://api.yimian.xyz/img?type=moe&id=15](https://api.yimian.xyz/img?type=moe&id=15)
***bing daily wallpaper***
- `GET/POST /img?type=wallpaper&id=2019-07-28`
- Description: Extract wallpaper pictures from 2019-07-28
- Example: [https://api.yimian.xyz/img?type=wallpaper&id=2019-07-28](https://api.yimian.xyz/img?type=wallpaper&id=2019-07-28)
***Two-dimensional avatar***
- `GET/POST /img?type=head&id=15`
- Description: Extract the avatar with id 15
- Example: [https://api.yimian.xyz/img?type=head&id=15](https://api.yimian.xyz/img?type=head&id=15)
***Miao meow sauce picture bed***
- `GET/POST /img?type=imgbed&id=529745e0`
- Description: Extract the picture bed with id 529745e0
- Example: [https://api.yimian.xyz/img?type=imgbed&id=529745e0](https://api.yimian.xyz/img?type=imgbed&id=529745e0)
### 4.6 path
Use absolute path to directly extract pictures, priority is higher than type, **highest efficiency**.
- `GET/POST /img?path=xx/xx.xx`
- Path format: `Type/Picture File Name`
- Example of path format: `imgbed/img_529745e0_900x900_8_null_normal.jpeg`
- Description: Extract pictures in xx/xx.xx
- Example: [https://api.yimian.xyz/img/?path=imgbed/img_529745e0_900x900_8_null_normal.jpeg](https://api.yimian.xyz/img/?path=imgbed/img_529745e0_900x900_8_null_normal.jpeg)
### 4.7 R18
Whether to display 18 prohibited pictures, the default is false.
- `GET/POST /img?type=xx&R18=true`
- Description: Randomly extract pictures containing R18 content in xx category
- Example: [https://api.yimian.xyz/img/?type=koino&R18=true](https://api.yimian.xyz/img/?type=koino&R18=true)
## 5 Error format
### 5.1 Cannot find the specified type
If the specified type cannot be found, a moe type picture will be automatically returned.
### 5.2 Can't find matching images
Return JSON
```js
{
"err": "error message"
}
```
>The maximum number of **global calls** for each device is 500 per day!!
{% raw %}</span>{% endraw %}

@ -1,5 +1,7 @@
---
title: 在家中部署智慧家庭系统
titleEN: Deploy a smart home system at home
display: true
date: 2019-07-28
categories:
- tech
@ -12,11 +14,42 @@ tags:
- ESP8266
- MQTT
---
{% raw %}<span class=".zh">{% endraw %}
基于Home Assisstant搭建综合家庭照明系统,多媒体系统,水流系统的智慧家庭。技术点:天猫精灵交互,LoRa通信,MQTT协议,frp内网穿透,NAS存储,拨动开关电路改造。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
结合所学知识,运用前沿技术,造福生活,是我长期以来的不懈追求。为了让家人体验到更加稳定、舒适智能的生活方式,同时也为了巩固憨实先前在学校smartfarm项目和我自己的ushio系统中所积累的技术基础以及架构经验,我决定在出国前,使用20到23整天时间,重构家中老旧的物联网系统。采用分层架构和面向接口、面向测试、**面向文档**开发原则,以**稳定性(Available)**,**可靠性(Reliable)**为最优先指标,搭建一个运行目标3年以上的高度模块化的,易于远程操控的,开源的家庭软件硬件智能传感控制系统。
## 0 架构综述
@ -75,4 +108,74 @@ dns.yimian.xyz提供dns解析服务。
## RNN实现对灯控制
基于先前积累的人体传感器数据,通过LSTM模型,使用keras训练神经网络,实现对开灯状态的预测。
基于先前积累的人体传感器数据,通过LSTM模型,使用keras训练神经网络,实现对开灯状态的预测。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
## 0 Architecture overview
## 1 Hardware Design
### 1.1 Single Chip Microcomputer Material Selection
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.
### 1.2 WiFi communication module selection
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.
### 1.3 LoRa communication module selection
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.
### 1.4 Smart speaker selection
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.
### 1.5 Light toggle switch
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.
## 2 Communication Design
![Network Topology Diagram](https://api.yimian.xyz/img/?path=imgbed/img_43b85bd4_1096x660_8_null_normal.png)
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.
## 3 Main control system design
Use the python3 open source project Home Assistant as the basis to build the main control system of this project.
## 4 Multimedia system design
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.
## 5 Cloud support system design
dns.yimian.xyz provides dns resolution service.
## 6 NAS storage system design
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
## RNN realizes light control
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.
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: 2019 SURF SmartFarming Proj 架构说明
titleEN: 2019 SURF SmartFarming Proj Architecture Description
date: 2019-07-26
display: true
categories:
- tech
tags:
@ -10,11 +12,41 @@ tags:
- Arduino
- MQTT
---
{% raw %}<span class=".zh">{% endraw %}
本文详细介绍了XJTLU大学2019暑期科研SmartFarming Proj物联网架构的设计思路,实施情况以及缺陷反思。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 1 背景
### 1.1 需求
@ -338,10 +370,349 @@ LoRa-mqtt是在LoRa-socket基础上对mqtt协议进行的一个简单再现。
[点击这里查看2019-7-31的气象传感器数据](https://smartfarm.yimian.xyz/chart-station.html?f=1564484461&t=1564570861)
<br>
-------------------------------
**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.
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## 1 Background
### 1.1 Requirements
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.
### 1.2 Positioning
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**.
## 2 Glossary
> + `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].
## 3 Design goals
### 3.1 Implementing functions
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).
### 3.2 Performance indicators
+ `Communication range (test)`: the radius is not less than 1km
+ `Communication range (production)`: the radius is not less than 3km
+ `Delay`: average less than 1s
+ `Timeout rate`: no more than 5%
+ `Resource occupation`: Node RAM does not exceed 2k
+ `Run cycle`: 1 minute (test) | 15 minutes (production)
## 4 System Environment
### 4.1 Related software and hardware
!!!
<table>
<tr>
<td style="vertical-align: middle;text-align: center;"><strong>Node name</strong></td>
<td style="vertical-align: middle;text-align: center;"><strong>Hardware facilities</strong></td>
<td style="vertical-align: middle;text-align: center;"><strong>Software cluster</strong></td>
</tr>
<tr>
<td rowspan="6" style="vertical-align: middle;text-align: center;">Ground Nodes<br/>Ground Nodes</td>
<td>Arduino Nano</td>
<td>Arduino.h</td>
</tr>
<tr>
<td><a href="https://item.taobao.com/item.htm?spm=a230r.1.14.11.58a54915TdUHKS&id=556174103413&ns=1&abbucket=14#detail">SX1278 LORA module</a></td >
<td>SPI.h</td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a230r.1.14.20.161f53ed47xg5U&id=41414863412&ns=1&abbucket=10">LM35DZ temperature sensor</a></td>
<td><a href="https://github.com/sandeepmistry/arduino-LoRa">LoRa.h</a></td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-21581912015.41.6c425535FUUqU7&id=37365775741&rn=b1c1a8a7f17260619669f001aa3241bf&abbucket=14&skuId=4138700612305">土壤湿度传感</a></td>
<td><a href="https://github.com/IoTcat/LoRa-socket">LoRa-Socket.h</a></td>
</tr>
<tr>
<td><a href="https://item.taobao.com/item.htm?spm=a230r.1.14.16.21461532U3rUws&id=541730394024&ns=1&abbucket=14#detail">Four-point solenoid valve</a></a></a> td>
<td><a href="https://github.com/IoTcat/LoRa-mqtt">LoRa-mqtt.h</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/tomstewart89/Vector">vector.h</a></td>
</tr>
<tr>
<td rowspan="7" style="vertical-align: middle;text-align: center;">weather station node<br/>Air Station</td>
<td>Arduino Nano</td>
<td>Arduino.h</td>
</tr>
<tr>
<td><a href="https://item.taobao.com/item.htm?spm=a230r.1.14.11.58a54915TdUHKS&id=556174103413&ns=1&abbucket=14#detail">SX1278 LORA module</a></td >
<td>SPI.h</td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.1.1b456f1dTRXYJd&id=576191025158&areaId=320500&user_id=738263294&cat_id=2&is_b=1&rn=14dcb16f28668aa5ca15c5be0f88d092">BME280 温度,湿度,大气压强传感</a></td>
<td><a href="https://github.com/sandeepmistry/arduino-LoRa">LoRa.h</a></td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a1z10.3-bs.w4011-21581912015.32.2fe555358wswJr&id=521238059334&rn=233756c78897999fd97ca2dd4f649071&abbucket=14">GY-30 light intensity sensor </a></td>
<td><a href="https://github.com/IoTcat/LoRa-socket">LoRa-Socket.h</a></td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a1z10.3-bs.w4011-21581912015.52.23e05535hDDYEB&id=13302081252&rn=ced14f01f4a9179e7b090c544cf5836a&abbucket=14">MQ-135 air quality sensor </a></td>
<td><a href="https://github.com/IoTcat/LoRa-mqtt">LoRa-mqtt.h</a></td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a1z10.3-bs.w4011-21581912015.52.270b5535itNYUg&id=13673403530&rn=418dfd01fe7ae4ce8b775fc271d9886a&abbucket=14">MQ-7 carbon monoxide sensor< /a></td>
<td><a href="https://github.com/tomstewart89/Vector">vector.h</a></td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a1z10.5-bs.w4011-21581825912.37.16ca535042HtRT&id=41536690942&rn=a0912ce05addd045044d65bc796797e8&abbucket=14">rainfall sensor</a> </td>
<td></td>
</tr>
<tr>
<td rowspan="8" style="vertical-align: middle;text-align: center;">LoRa Gateway<br/>LoRa Gateway</td>
<td><a href="https://item.taobao.com/item.htm?spm=a230r.1.14.58.6c20435c9AhMz2&id=555750159003&ns=1&abbucket=14#detail">SX1278</a></td>
<td>Arduino.h</td>
</tr>
<tr>
<td></td>
<td>SPI.h</td>
</tr>
<tr>
<td></td>
<td>WiFi.h</td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/sandeepmistry/arduino-LoRa">LoRa.h</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/IoTcat/LoRa-socket">LoRa-Socket.h</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/IoTcat/LoRa-mqtt">LoRa-mqtt.h</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/tomstewart89/Vector">vector.h</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://github.com/knolleary/pubsubclient">PubSubClient.h</a></td>
</tr>
<tr>
<td rowspan="5" style="vertical-align: middle;text-align: center;">Intranet Controller/MQTT Proxy<br/>Controler/MQTT Proxy</td>
<td>Raspberry Pi 3B-RASPBIAN</td>
<td>Python3.7</td>
</tr>
<tr>
<td><a href="https://detail.tmall.com/item.htm?spm=a230r.1.14.9.791b1000Beu0tp&id=555610012670&cm_id=140105335569ed55e27b&abbucket=14">DC frequency conversion water pump</a></td>
<td>NodeJS</td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/sf-mqtt-proxy">sf-mqtt-proxy@npm</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/sf-pump">sf-pump@npm</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/forever">forever@npm</a></td>
</tr>
<tr>
<td rowspan="6" style="vertical-align: middle;text-align: center;">Cloud Server<br/>Cloud Server</td>
<td>Huawei Cloud Host-Centos7.4</td>
<td>Nginx/1.12.2</td>
</tr>
<tr>
<td></td>
<td>NodeJS/12.4.0</td>
</tr>
<tr>
<td></td>
<td>Redis/3.2.12</td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/sf-mqtt-broker">sf-mqtt-broker@npm</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/sf-web-api">sf-web-api@npm</a></td>
</tr>
<tr>
<td></td>
<td><a href="https://www.npmjs.com/package/forever">forever@npm</a></td>
</tr>
<tr>
<td rowspan="1" style="vertical-align: middle;text-align: center;">Database<br/>Database</td>
<td>Huawei Cloud Database</td>
<td>MySQL 5.7.23</td>
</tr>
</table>
!!!
### 4.2 Data size estimation
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.
## 5 Design Ideas
### 5.1 Idea
- Document-oriented
- Interface-oriented
- Test-oriented
### 5.2 Key Issues
- Land node RAM resources are scarce, only 2K
- LoRa communication adopts 433MHz, single-channel transceiving, much interference
- The server needs to collect and aggregate hash data from multiple nodes
- Reserve a method of interaction with the drone AI team
- Push real-time messages to the front-end browser
### 5.3 Scheme selection
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.
## 6 Architecture Design
### 6.1 Basic introduction
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.
### 6.2 System hierarchy diagram
![Smart Farm system hierarchical structure diagram](https://api.yimian.xyz/img/?path=imgbed/img_c46f5639_577x906_8_null_normal.jpeg)
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.
### 6.3 System Topology Diagram
![Smart Farm system topology diagram](https://api.yimian.xyz/img/?path=imgbed/img_27df1756_1426x710_8_null_normal.png)
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.
## 7 Module description
### 7.1 LoRa communication module
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](https://github.com/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](https://github.com/IoTcat/LoRa-mqtt)
### 7.2 MQTT-Proxy proxy module
This module runs on the intranet server and realizes the encrypted forwarding of the intranet mqtt.
***Project address***: [iotcat/sf-mqtt-proxy](https://www.npmjs.com/package/sf-mqtt-broker)
### 7.3 Water pump control module
This module runs on the intranet server and realizes the control of the relay water pump through GPIO.
***Project address***: [iotcat/sf-pump](https://www.npmjs.com/package/sf-pump)
### 7.4 mqtt+data processing module
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](https://www.npmjs.com/package/sf-mqtt-broker)
### 7.5 web interface module
This module runs on the cloud server and realizes the provision of functional interfaces.
***Project address***: [iotcat/sf-web-api](https://www.npmjs.com/package/sf-web-api)
## 8 Development Document
### 8.1 mqtt theme
- [mqtt topic list](https://doc.smartfarm.yimian.xyz/#/home?id=mqtt)
### 8.2 http interface
- [httpinterface document](https://doc.smartfarm.yimian.xyz/#/home?id=api-http)
### 8.3 websocket interface
- [websocket interface document](https://doc.smartfarm.yimian.xyz/#/home?id=api-websocket)
## 9 Running status
### 9.1 System delay
![qos](https://api.yimian.xyz/img/?path=imgbed/img_b36d5030_1806x546_8_null_normal.png)
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.
### 9.2 Sensor data
[Click here to view the weather sensor data of 2019-7-31](https://smartfarm.yimian.xyz/chart-station.html?f=1564484461&t=1564570861)
-------------------------------
**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.
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: Centos7下 Nginx 配置ssl证书自动续期
titleEN: Nginx configure ssl certificate automatic renewal under Centos7
date: 2019-03-09
categories:
- tech
@ -7,11 +8,43 @@ tags:
- centos7
- ssl
---
{% raw %}<span class=".zh">{% endraw %}
断断续续玩web已经一年了,一些之前从腾讯云申的TrustAsia证书已经陆陆续续开始过期,很方..于是开始尝试申请Let's Encrypt的免费证书,并实现自动续期|´・ω・)ノ
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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|´・ω・)ノ
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 前提条件
- 必须是Centos7系统,其它未测试,不保证有效
- 有自己的域名
@ -107,4 +140,111 @@ $ systemctl restart crond.service
[1]: https://www.cnblogs.com/p0st/p/9482167.html
[2]: https://blog.csdn.net/sheng119/article/details/72956717
[2]: https://blog.csdn.net/sheng119/article/details/72956717
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Prerequisites
- Must be Centos7 system, others have not been tested and are not guaranteed to be valid
- Have your own domain name
- Confirm that dns has pointed the domain name to the server
- The firewall allows port 80 and 443
- The nginx proxy has been configured, and ``domain name can be accessed via http`` (be sure to be able to access)
## Install certbot
Install certbot via yum
````
$ yum update #Update yum source
$ yum install -y epel-release #Install epel source
$ yum install -y certbot #Install certbot
````
## Initial application certificate
### Apply for a domain name certificate for the first time
The format is
````
$ certbot certonly --webroot -w [Web site directory] -d [domain name] -m [contact email address] --agree-tos
````
E.g
````
$ certbot certonly --webroot -w /opt/www/demo.yourdomain.com -d demo.yourdomain.com -m yourname@gmail.com --agree-tos
````
### Certificate location
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`.
### Configure nginx
Add the following content to the corresponding ``server{}``:
````
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/demo.yourdomain.com/fullchain.pem; #2
ssl_certificate_key /etc/letsencrypt/live/demo.yourdomain.com/privkey.pem; #3
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
error_page 404 = /404.php;
````
E.g
````
server {
listen 443 ssl;
listen 80;
server_name demo.yourdomain.com; #1
root /opt/www/demo.yourdomain.com;
index index.html;
client_max_body_size 1000M;
ssl_certificate /etc/letsencrypt/live/demo.yourdomain.com/fullchain.pem; #2
ssl_certificate_key /etc/letsencrypt/live/demo.yourdomain.com/privkey.pem; #3
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
error_page 404 = /404.html;
}
````
After the configuration is successful, execute the following instructions:
````
$ nginx -t #Check nginx conf syntax
$ systemctl restart nginx #Restart nginx
````
## Configure automatic renewal
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
````
00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx
````
Restart crontab
````
$ systemctl restart crond.service
````
-------------------
Reference link:
[https://blog.csdn.net/sheng119/article/details/72956717][2]
[1]: https://www.cnblogs.com/p0st/p/9482167.html
[2]: https://blog.csdn.net/sheng119/article/details/72956717
{% raw %}</span>{% endraw %}

@ -1,16 +1,48 @@
---
title: 中美贸易战-解
titleEN: Sino-US trade war-solution
date: 2019-05-12
categories:
- thoughts
tags:
- war
---
{% raw %}<span class=".zh">{% endraw %}
中美贸易战的解不在美国,而是在我们自己身上。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
The solution to the Sino-US trade war is not in the United States, but in ourselves.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
关于谈判,党内争议比较大,但最终很有可能会拒绝做出让步。
当美关税抬升,国内相关产业链将大批转移至台湾及东南亚国家,累计将造成1亿人口的就业问题。与前几次的危机不同,这一次我们不但要提防房市泡沫的激化,也没有那麽多的基建可提供就业。从另一方面看,近几年来,中国的产能过剩问题主要通过出口得以解决,拿着贸易顺差来发展国内经济,以实现不可思议的经济增长。如今特朗普政府征加关税,将使得这一策略不再行得通。
@ -26,4 +58,28 @@ tags:
为了缓解失业冲击的强度,央行将通过印人民币使人民币贬值来增进出口,吸引他国来补充美资撤离的空缺。
以上。。
以上。。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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.
1. Wu Tong Taiwan
This depends on whether Taiwan’s general election next year can find a legitimate reason for military reunification. But it does help alleviate domestic social focus issues.
2. Housing market reform
It is very possible to turn the bubble crisis into capital for job creation.
3. Games
Transfer the surplus labor force in the society into the game industry to ease the formation of social conflicts.
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. .
{% raw %}</span>{% endraw %}

@ -1,4 +1,5 @@
title: 欧洲旅行支票兑换攻略
titleEN: How to redeem traveler's checks
date: 2020-02-09
categories:
- travel
@ -7,11 +8,44 @@ tags:
- Europe
---
<!--![](https://api.yimian.xyz/img/?path=imgbed/img_6ae04a26_721x412_8_null_normal.png)-->
{% raw %}<span class=".zh">{% endraw %}
之前去欧洲旅游办签证,由于没有三个月的银行流水,不得已购买了旅行支票作为资金证明。可是到了欧洲才发现旅行支票很难使用,如果不了解行情会被骗收15%-20%的手续费。这篇Blog记录了我们发现的兑换旅行支票的坑和Tips!
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
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!
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
[scode type="info"]**经验一**: 尽可能**不使用**旅行支票[/scode]
[scode type="info"]**经验二**: 旅支兑换**最低手续费**在4%左右[/scode]
@ -43,4 +77,44 @@ tags:
- 可以先问个两家,了解一下情况。大致估估如果说税可能是百分之二或三,那你起码还是得让人赚个20或30磅,先问问他们的报价,你可以把这个价格说成别家给你的价,去问他们能不能给你高点的价格。当然如果你脸皮薄不好意思胡扯,也可以就只是在这家价格比别家低的情况下把别家价格拿出来激激他们。
## 总结
以上就是所有关于旅支兑换的一些个人经历和小tips啦,当然这只是结合我们的个人体会总结的一些东西,还是要结合具体情况分析了。出去游玩肯定主要还是想多走走看看感受下,所以在经济条件允许的状况下也不建议大家在这件事上浪费太多时间,只要你自己觉得差不多能接受就行了。最后,还是想说,去意大利玩能不用旅行支票就还是别用了,毕竟真的挺麻烦还处处是坑!
以上就是所有关于旅支兑换的一些个人经历和小tips啦,当然这只是结合我们的个人体会总结的一些东西,还是要结合具体情况分析了。出去游玩肯定主要还是想多走走看看感受下,所以在经济条件允许的状况下也不建议大家在这件事上浪费太多时间,只要你自己觉得差不多能接受就行了。最后,还是想说,去意大利玩能不用旅行支票就还是别用了,毕竟真的挺麻烦还处处是坑!
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
[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!
## My experience
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.
![Change](https://api.yimian.xyz/img/?path=imgbed/img_6ae04a26_721x412_8_null_normal.png)
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).
## Tips
- There are not too many places in Italy for travel and consumption. Among the Rome, Florence, and Venice we go to, there are only a few in Venice;
- If you want to exchange for Euro travel in Italy, you can only change it at the place marked with the change sign (Of course, some changes do not accept travel, but very few). There should be no direct exchange points for American Express, at least in Italy, so there is no way to exchange them without loss. But there are indeed many changes in Italy, especially near the Vatican;
- Don't meet a family, if he quotes a very low price, you will accept it, and don't believe him too much. You must know that this is probably because you don't know the inside story;
- You can ask two families first to find out the situation. A rough estimate. If the tax may be two or three percent, then you still have to make people earn 20 or 30 pounds. First ask them for their quotation. You can say that the price is given to you by another family. Ask if they can give you a higher price. Of course, if you have a thin skin and are embarrassed to talk nonsense, you can just give them the price of this one when the price is lower than that of others.
## to sum up
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!
{% raw %}</span>{% endraw %}

@ -1,16 +1,49 @@
---
title: Two Fundamental Demands of Human Beings
title: 人类的两个基本需求
titleEN: Two Fundamental Demands of Human Beings
date: 2018-12-23
display: true
categories:
- thoughts
tags:
- society
---
{% raw %}<span class=".zh">{% endraw %}
人类的需求可以总结为两类,创造需求的需求,与解决需求的需求。
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Human needs can be summarized into two categories, the need to create needs, and the need to solve needs.
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 历史缘由
在过去的几亿年中,由于生存资源的稀缺,自然界不断通过“物竞天择,适者生存”的法则筛选物种。这使得“一切为了生存”成为了几乎所有物种的“目标函数”。在众多存活下来的物种中,只有人类创造并有效利用了语言这一工具。语言使得人类能够进行更加复杂的推理思维(想象)以及更加有效的个体间信息交流。得益于语言,人类机智地通过预测潜在的自然选择要求提前准备必要的生存资源并建立了协调资源创造(分工)与资源分配的有效体制(市场,贸易)。不可避免地,基于“一切为了生存”这一习惯以及想象与预测这一种能力,人类形成了自主创造需求以及解决需求的行为模式,由此产生了两种基本行为动机,即创造需求的需求与解决需求的需求。
@ -43,4 +76,45 @@ tags:
注:部分想法启发自[知乎][1]
[1]: https://www.zhihu.com/
[1]: https://www.zhihu.com/
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Historical reasons
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.
## Theoretical verification
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.
## Theoretical prediction
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][1]
[1]: https://www.zhihu.com/
{% raw %}</span>{% endraw %}

@ -1,6 +1,8 @@
---
title: wIoT - 轻松物联
titleEN: wIoT - Easy IoT
date: 2019-05-20
display: true
categories:
- tech
tags:
@ -8,14 +10,45 @@ tags:
- WiFi
- nodeJS
---
{% raw %}<span class=".zh">{% endraw %}
基于NodeJS搭建的物联网系统,配合D1 MINI单片机,帮助你灰常快速实现物联~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
The Internet of Things system based on NodeJS, combined with D1 MINI microcontroller, helps you quickly realize the Internet of Things~
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'English version may be not up to date!!',
buttons: [['<button>Show Chinese Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
> 正式开发文档见[**这里**](https://wiot.yimian.xyz)
## wIoT for NodeJS
### wIoT for NodeJS
适用于NodeJS的wIoT服务器控制组件,轻松物联
# 项目简介
@ -469,3 +502,505 @@ gugu.print("This is from wIoT!!");
```
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
# Quick Start
## Current Support devices
- D1 MINI
## Node.js Install Node.js
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](https://www.jianshu.com/p/03a76b2e7e00)
## Install wIoT package
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.
```shell
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.
## Burn firmware
## Connect your device to D1 MINI
- After burning the firmware, you should try to connect your device to D1 MINI
Follow the steps below, I'm sure it would not be a problem for such a smart person like you
### 1. Reset your D1 MINI
- Find pin **D0** on your D1 MINI, it should be in the middle of A0 and D5.
- Use a wire to connect **3V3** to **D0**. If your MINI works normally, you would see its BUILT-IN LED blink.
- You **don't** have to wait until it stops blink, just stay for **2s**, then you can pull out the wire and your MINI would reset.
### 2.Find your D1 MINI on your device
- After you finish step 1, your MINI would work in AP mode, which means you can search it with your smart phone or personal computer by scanning the Wi-Fi around
- If your MINI was reset successfully, you would find a Wi-Fi with SSID in the form of **wiot-xx:xx:xx:xx:xx:xx**.
Example:
![ssid](https://api.yimian.xyz/img/?path=docs/wiot/ssid.png)
"xx:xx:xx:xx:xx:xx" is the MAC address of this MINI, please try to remember the address for you may use it later
The default password for D1 MINI is **1234567890**, enter the password and you should be able to connect to your MINI.
## Connect D1 MINI to your Wi-Fi
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
### 1. Visit the control page of D1 MINI
Visit **http://192.168.0.1** with the browser on your device
Normally, you would see a webpage like this:
![webpage](https://api.yimian.xyz/img/?path=docs/wiot/webpage.png)
In this page, you can see the MAC Address and wIoT version of your MINI
Again, please **remember** the MAC Address
### 2.Submit SSID and password to your MINI
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
## Execute Example Code
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
```js
var wiot = require('wiot'); //Import wiot package from npm
// Create an object of single chip
// Here are two parameters, MAC is the MAC adress of single chip, the output port should be defined in pin
// The MAC address should be editted by user
var MyMCU = new wiot.client({MAC: "3C:71:BF:3A:F6:CF", pin: {D4 : 1}, hint : true});
// The following code can let the BUILTIN_LED turn on for one second and off for one second periodically
// Wait for all the chips to get ready
wiot.begin([MyMCU], ()=>{
// First parameter is the name of chip, second parameter is the function that is going to be executed
// Set timer, pin 3 of MyMCU will pull up every 2 seconds
setInterval(()=>{
MyMCU.write(wiot.D4, wiot.HIGH);
}, 2000);
// Set timer, executer the command in {} after a one-second delay
setTimeout(()=>{
// Set timer, pin 3 of MyMCU will pull down every 2 seconds
setInterval(()=>{
MyMCU.write(wiot.D4, wiot.LOW);
}, 2000);
}, 1000);
});
```
The LED is expected to blink after you execute the code
# Advanced development
## Parameters
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
## Parameters Declaration Example
### General Example
```js
var MyMCU = new wiot.client({
MAC: "xx:xx:xx:xx:xx:xx",
pin: {
D1: 0,
D2: 0,
D3: 1,
D4: 1,
D5: 0,
D6: 1,
D7: 0,
D8: 0
},
hint: true,
debug: false,
ip: "192.168.0.55",
port: 6666,
ip_range: "192.168.0",
localIP: "127.0.0.1",
errDelayTime: 2000,
okDelayTime: 30,
resetDelayTime: 4500,
noTryMaxTime: 15000,
IntervalTime: 2000,
MaxToReScanTime: 180000,
MinResearchTime: 5000,
IpScanTimeOut: 1,
pingTimeout: 2,
MaxTraceBackTimes: 8
});
```
## Event Binding
### Client
`.on(event, handler)`
#### Event List of client
- `begin` It begins when MCU starts to interact normally
- `disConnected` Disconnect from MCU
- `reConnected` Connection with MCU restored
```
js
var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"});
MCU.on('disConnected', function () {
// Execute the command below when lost connection with MCU
console.log('Disconnected with MCU!!');
});
```
### Pin
`.pinOn(pin, event, handler)`
#### Event List of pin
- `on` Change output of pin from LOW to HIGH
- `off` Change output of pin from HIGH to LOW
- `change` Change the output of pin
```js
var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"});
MCU.pinOn(wiot.D2, 'on', function () {
// Execute when the output of D2 changes from LOW to HIGH
console.log('D2 from LOW to HIGH!!');
});
```
### API
+ `wiot.begin()`: Execute when MCU is ready
```js
MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx", pin: {D4: wiot.OUTPUT}});
MCU1 = new wiot.client({MAC: "xx:xx:xx:xx:xx:ww"});
wiot.begin([MCU0, MCU1], ()=>{
//Write the command you want to execute here
//These command would execute once MCU0 and MCU1 are ready
});
```
+
`wiot.loop()`: A loop command,Suitable for conditional control statements
```js
MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx", pin: {D4: wiot.OUTPUT}});
MCU1 = new wiot.client({MAC: "xx:xx:xx:xx:xx:ww"});
// Following code would realize: When pin D5 of MCU0 receive HIGH,D4 of MCU1 would output HIGH
// When pin D5 of MCU0 receive LOW,D4 of MCU1 would output LOW
// This function receives two parameters: first is an array of objects for MCU, second is a function which use MCU array of objects as its parameter
wiot.loop([MCU0, MCU1], () => {
if(MCU1.read(wiot.D5) == wiot.HIGH){
MCU0.write(wiot.D4, wiot.HIGH);
}else{
MCU0.write(wiot.D4, wiot.LOW);
}
});
```
### Register
+ `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
```js
var myLED = wiot.led(MyMCU, wiot.D4);
var pir = wiot.pir(MyMCU, wiot.D2);
//Sign up for a rule that says myLED lights up when pir detects a person
wiot.register.set(pir.getStatus, wiot.HIGH, ()=>{
myLED.set(wiot.HIGH);
});
//Sign up for a rule that when people leave, myLED goes off
wiot.register.set(()=>{
return (wiot.LOW == pir.getStatus);
}, ()=>{
myLED.clear();
});
```
## Sensor extension module
### LED
+ `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
```js
var wiot = require('wiot'); //Import wiot package from npm
MCU0 = new wiot.client({MAC: "3C:71:BF:3A:F6:CF", pin: {D4: wiot.OUTPUT}});
var myLED = wiot.led(MCU0, wiot.D4); //Create a new led object using the D4 port on MCU0
/* If myLED is not shining, light it up*/
if(!myLED.getStatus()){
myLED.set(wiot.HIGH);
}
/* Set a breathing light with cycle of 2s */
myLED.breath(2000);
/* Set a LED which light 3 seconds and off 4 seconds */
myLED.set([wiot.HIGH, wiot.LOW], [3000, 4000]);
/* Set a breathing light which use 1 second to light and 3 second to extinguish */
myLED.set([wiot.LOW, wiot.HIGH], [1000, 3000], true);
/* Set a LED which shine with half brightness for 2 seconds, shine with full brightness for 3 seconds and then dextinguish for 2 seconds */
myLED.set([100, wiot.HIGH, wiot.LOW], [2000, 3000, 2000]);
/* Turn off LED */
myLED.clear();
```
### PIR (Passive Infrared Sensor)
+ `wiot.pir(MCU, pin)`: Declare a PIR module
+ `wiot.pir.getStatus()`: Gets the PIR state, returns the value wiot.high (have people), wiot.low (no people)
#### Event Trigger
+ `wiot.pir.on(event, handler)`
**Events List**
- `detected` Person detected
- `undetected` People out of the detective field
- `change` State change, includes from detected to undetected and from undetected to detected
```js
var wiot = require('wiot'); //Import wiot package from npm
MCU0 = new wiot.client({MAC: "3C:71:BF:3A:F6:CF"});
var myPIR = wiot.pir(MCU0, wiot.D2); //Create an object of pir, use the D2 port on MCU0
/* Output the status of pir to console */
console.log(myPIR.getStatus());
/* When human is detected,print "Detected People!" to console */
myPIR.on("detected", ()=>{
console.log("Detected People!");
});
/* When human is out of the detection zone,print "No People!!" to console */
myPIR.on("undetected", ()=>{
console.log("No People!!");
});
/* When there is a change to status, execute your command */
myPIR.on("change", ()=>{
/* Write command in here */
});
```
### IR Infrared Sensor
+ `wiot.ir(MCU, pin)`: Declare an IR module, pin can be analog or digital port
+ `wiot.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)
#### Event Trigger
+ `wiot.ir.on(event, handler)`
**Event List**
- `detected` Barrier detected
- `undetected` Barrier vanished
- `change` Change state
```js
MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"});
var myIR = wiot.ir(MCU0, wiot.D2); //Create a new ir object using the D2 port on MCU0
/* Output ir status to console */
console.log(myIR.getStatus());
/* When an object is detected, print "Detected Object!" to the console */
myIR.on("detected", ()=>{
console.log("Detected Object!");
});
/* When the object move out of the detective area, print "No Object!!" to the console */
myIR.on("undetected", ()=>{
console.log("No Object!!");
});
/* Execute the command when state changes */
myIR.on("change", ()=>{
/* Your command */
});
```
### lightSensor
+ `wiot.lightSensor(MCU, pin)`: Declare a lightSensor module, pin can be analog or digital port
+ `wiot.lightSensor.getStatus()`: Get lightSensor state, return value wiot.HIGH(light), wiot.LOW(dark), or a value of 0-1024 (limited to analog port)
#### Event Trigger
+ `wiot.light.on(event, handler)`
**Event List**
- `light` From dark to light
- `dark` From light to dark
- `change` Change state
```js
MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"});
var myLightSensor = wiot.lightSensor(MCU0, wiot.D1); //Create a new pir object using the D2 port on MCU0
/* Output the LightSensor state to the console */
console.log(mylightSensor.getStatus());
/* When going from dark to Light, print "Light!!!" to the console */
myLightSensor.on("light", ()=>{
console.log("Light!");
});
/* When going from light to Dark, print "Dark!!" to the console */
myLightSensor.on("dark", ()=>{
console.log("Dark!!");
});
/* When the state changes, execute the command */
myLightSensor.on("change", ()=>{
/* Your command */
});
```
## Internet Extension Module
### Mail module
Use this module to send messages to the specified mailbox. Proudly built with reference to [Yimian API](https://api.yimian.xyz/)!
+ `wiot.mail(to, from = "wIoT")`: Declare an mail module with sender's name and reveiver's address
+ `wiot.mail.send(subject, body)`: Send email with a subject and content
```js
var mail = wiot.mail("i@iotcat.me", "wIoT Test");
mail.send("Test", "Test from wiot!!");
```
### guguji
Use this module to send messages to the specified cooing machine.Goo goo is a portable private printer, see [official website](https://www.memobird.shop/).
To use this module, you need to apply for your own developer ak in advance on the official website. See [here](https://api.yimian.xyz/gugu/intro.php). Proudly reference [Yimian API](https://api.yimian.xyz/)!
+ `wiot.guguji(ak, userID, memobirdID)`: Declare a goo goo chicken module, parameter: developer's ak, user id, cooing machine id
+ `wiot.guguji.send(msg)`: Send message, need to pass in the message to be sent
```js
var gugu = wiot.guguji("9e55121803474371bfa25d20e554b31f", "832598", "b3ee06a8bd9b49e1");
gugu.print("This is from wIoT!!");
```
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 左宗棠鸡块
titleEN: Tso Tso's Chicken Nuggets
date: 2020-02-17
categories:
- cook
@ -8,10 +9,41 @@ tags:
---
{% raw %}<span class=".zh">{% endraw %}
分享一下改进版炸鸡块做法哦~
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
Share the improved version of fried chicken nuggets~
{% raw %}</span>{% endraw %}
<!--more-->
{% raw %}
<script>
session.onload(function(){
if(page.tran.getLang() == 'en'){
tips.warning({
title: 'Caution',
position: 'topRight',
message: 'This page was translated by Machine!!',
buttons: [['<button>Show Original Page</button>', function (instance, toast) {
page.tran.setLang('zh');
instance.hide({ transitionOut: 'fadeOut' }, toast, 'button');
}, true]]
});
}
});
</script>
{% endraw %}
{% raw %}<span class=".zh">{% endraw %}
## 材料准备
- 鸡胸肉
- 一个鸡蛋
@ -29,4 +61,29 @@ tags:
- 撒上葱末
## 成品图
![左宗棠鸡块 2020-02-17](https://api.yimian.xyz/img/?path=imgbed/img_a3b687be_5120x3840_8_null_normal.jpeg)
![左宗棠鸡块 2020-02-17](https://api.yimian.xyz/img/?path=imgbed/img_a3b687be_5120x3840_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## Material preparation
- Chicken breast
- An egg
- Chopped green onion and garlic
## Preliminary steps
- Cut chicken into small pieces, add cooking wine, light soy sauce, starch, egg white, stir well and marinate for 10 minutes
- Chicken nuggets rolled in flour
## Core steps
- Hot fried chicken nuggets until browned
- Vegetable oil minced garlic pot
- Add a spoonful of light soy sauce, a spoonful of white vinegar, a handful of sugar and ketchup
- Add chicken nuggets, so that the chicken nuggets are covered with sauce
- Sprinkle with chopped green onions
## Finished picture
![Zuo Zongtang Chicken Nuggets 2020-02-17](https://api.yimian.xyz/img/?path=imgbed/img_a3b687be_5120x3840_8_null_normal.jpeg)
{% raw %}</span>{% endraw %}

@ -1,5 +1,6 @@
---
title: 小伙伴们
titleEN: Friends
date: 2020-06-22 12:25:40
comments: true
---
@ -7,12 +8,46 @@ comments: true
![first-day-of-fall](https://api.yimian.xyz/img/?path=imgbed/img_72abe08_1092x430_8_null_normal.gif)
## 「 小伙伴们 」
> [矢澤にこ](https://blog.ni-co.moe "矢澤にこ") —— ,,,
> [haoziの窝](https://haozi.moe "haoziの窝") —— ,,,
{% raw %}<span class=".zh">{% endraw %}
## 「 Friends 」
> [矢澤にこ](https://blog.ni-co.moe "矢澤にこ") —— 欸?是矢澤大魔王 OuO
> [haoziの窝](https://haozi.moe "haoziの窝") —— 很有心的新人站长哦 |・ω・' )
> [番茄树](https://tomatotrees.xyz "番茄树上智慧果") —— 春风又绿番茄树~
-------------------------------
欢迎大家来互换友联啦━(*`∀´*)ノ亻!
我的信息:
> 站点名称: EEE.DOG - IoTcatの博客
> 站点地址: https://www.eee.dog/
> 头像: https://cdn.yimian.xyz/img/head/head_300.png
> 描述: 嗨,这里是呓喵酱,专注于研究 2.3 次元钟摆运动。
------------------
{% raw %}</span>{% endraw %}
{% raw %}<span class=".en">{% endraw %}
## 「 Friends 」
> [矢澤にこ](https://blog.ni-co.moe "矢澤にこ") —— Eh? It’s the Great Demon King Yazawa OuO
> [haoziの窝](https://haozi.moe "haoziの窝") —— A cute and dedicated new webmaster..
> [番茄树](https://tomatotrees.xyz "番茄树上智慧果") —— Another Tomato Tree~
-------------------------------
You are welcomed to exchange your blogroll with me ━(*`∀´*)ノ亻!
My Info:
> SiteName: EEE.DOG - IoTcatのBlog
> SiteURL: https://www.eee.dog/
> HeadPhoto: https://cdn.yimian.xyz/img/head/head_300.png
> Description: Hey, I am IoTcat. A full stack IoT engineer..
------------------
{% raw %}</span>{% endraw %}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save