gyro永不抽风

ああああああああああああああああおおおおおおおおおおおおおおおお

4/14 地理课 - 城郊农业和现代农业

城郊农业

  1. 特点
    1. 产品种类多、生产周期短、商品率高
    2. 形成生产、加工、运输和销售相结合的营销体系,生产效率高
    3. 在布局上往往呈环状结构
  2. 分布
    1. 越靠近城镇,地租越高,因此,种植的农产品往往附加值高,或者是不易储藏、运费过高。
  3. 城郊农业特点的新变化
    1. 建立专业化程度较高的农副产品供应基地,满足市民的多品种、多层次的需求。
    2. 农副产品需求量巨大,蔬菜等农产品相当大的部分靠外地供应
    3. 城郊农业开始由单一的经济功能转化为经济生态等多功能

现代农业

  1. 农业的发展历程
    • 原始农业是采用刀耕火种的极其简单的生产技术和生产工具进行的农业生产
    • 传统农业是以人力为蓄力为主、施有机肥、田间管理等措施进行生产;劳动生产率和商品率都较低的农业
    • 现代农业是生产率高、科技含量高、商品率高、资源利用率高、环境友好和产品质量高的农业
  2. 农产品的特点
    • 现代人类对农产品的需求是方便、营养、卫生、安全和回归自然。无污染、无公害的农产品备受青睐
    • 高产
    • 高效
    • 优质
    • 低耗
  3. 石油农业
    • 以机械化、水利化、化学化和电气化为标准的农业,是经济发达国家以石油为基础的高度工业化的农业的总称
    • 是由农业由于高产、高效是受推崇的现代农业,但是并不符合现代农业优质、低耗的特点
    • 石油农业由于能源和资源的高消耗,一旦资源短缺或者枯竭,农业损失较大;花费和农药的大量使用,环境质量下降;产品如果遭受污染,影响人类生命安全与健康
  4. 生态农业
    • 生态农业是按照生态学原理和经济学原理,运用现代科学技术成果和现代管理手段,以及传统农业的有效经验建立起来的,能获得较高的经济利益、生态效益和社会效益的现代化高效农业
    • 在生态农业的生产过程当中,物质在系统内部被循环利用和重复使用,节约了原料和燃料,减少了污染。
    • 高效、高产、优质、低耗
  5. 精准农业
    • 精准农业是在现代信息技术、生物技术、工程技术等一系列高新技术基础上发展起来的一种现代农业生产形式,可以精准地进行试飞、播种、灌溉、杀虫、除草、收割、销售等的农业
    • 精准确定灌溉、试飞、杀虫等的地点;精准确定水、肥、药、种子等的使用量;精准确定各种农艺措施实施的时间;精准把握市场需求。
  6. 休闲农业
    • 休闲农业是利用农业景观资源和农业生产条件,发展观光、休闲、旅游的一种新型农业生产经营形态。
    • 一产:农业生产,异地之一,发展特色农业、循环农业、现代化高效农业
    • 二产:“农产品更加工业”,以农业物料、人工种养的动植物资源为原料进行工业生产活动的总和
    • 三产:“农业相关服务业”,如农业观光、科普教育、品牌展示、文化传承等。
    • 三产结合的农业

既然从被生下来起,我就是欠别人的,那我真的不想被生下来。抱歉,我的想法脱离了控制。活着好累。受罪。

对别人好 ≠ 别人想要对你对他好 ≠ 别人就应该觉得感激 ≠ 别人要对你好

真的累了。

Introduction

转自自己的GitHub:

DesktopSwitcher is an OSX application written in swift, which is served as an tool that can switching the desktop by clicking while scrolling the scrolling wheel on the mouse. The tool can especially bring convenience to those who seldom uses trackpad and intensively relies on mouse and keyboard. If you have any suggestion or advise, please feel free to contact me.

项目创建

不要使用storyboard

鼠标的监听

在APPDelegate中:

1
2
3
NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.otherMouseUp) { (event) in
// Code
}

以此类推,具体详见API。

Preference界面

创建WindowController,并且生成Xib。具体干活的方法和iOS差不多,就是代码要加点东西(windowNibName):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//
// PreferenceWindowController.swift
// DesktopSwitcher
//
// Created by Jefferson Qin on 2020/4/9.
// Copyright © 2020 Jefferson Qin. All rights reserved.
//

import Cocoa

class PreferenceWindowController: NSWindowController {

@IBOutlet var desktopTextField: NSTextField!

@IBOutlet var externalDesktopTextField: NSTextField!

@IBAction func configureButtonTouched(_ sender: Any) {
// code
}

override var windowNibName : String! {
return "PreferenceWindowController"
}

override func windowDidLoad() {
super.windowDidLoad()

// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
self.window?.center()
self.window?.makeKeyAndOrderFront(nil)
NSApp.activate(ignoringOtherApps: true)
}

}

然后再APPDelegate当中:

1
2
3
4
5
private var preferenceWindow = PreferenceWindowController()

@IBAction func preferenceButtonClicked(_ sender: NSMenuItem) {
preferenceWindow.showWindow(sender)
}

Info.plist修改

由于是任务栏app,所以图标什么的不要出现。在Info.plist中添加:

1
Application is agent (UIElement): YES

桌面切换的AppleScript实现

使用AppleScript封装好App,比方说,切换到上一个桌面就是:

1
2
3
tell application "System Events"
key code 123 using {control down}
end tell

以此类推。具体源码详见我的GitHub,script可以通过解压app文件看到。

最后在Swift当中:

1
NSWorkspace.shared.launchApplication("DLeft")

其中,DLeft是封装好的应用名。

GitHub

DesktopSwitcher

Introduction

在实际开发中,处理UIView的问题时,经常会分不清frame和bounds。

Solution

下面这张图解决问题

Conclusion

  • frame: 在super view当中的位置(CGRect)
  • bounds: 完全是自己的这个CGRect,和位置无关,用于绘图,添加subview等。

Introduction

在实际开发过程当中,Swift在某些情况运行效率低下,我们需要C++来实现某些功能。这就引入了混编问题。其实Swift不仅可以和Objective-C混编,还可以和C、C++混编。

和Objective-C混编

众所周知,Objective-C需要头文件来开放接口,而要让Swift和Objective-C混编,就需要将Objective-C的方法开放接口给Swift。

具体实现

New File -> Objective-C,系统会弹出弹窗问要不要Create Bridge File,选择Yes。然后在Objective-C文件中import这个Bridge File作为头文件,开放的接口写在Bridge File当中

Objective-C:

1
2
3
4
5
6
7
#import "xxxxx-Bridge-File.h"

@implementation ClassA
+ (void) testMethod :(double) parameterA :(double) parameterB {
NSLog(@"Hello World!");
}
@end

Header:

1
2
3
4
5
6
7
#import <Foundation/Foundation.h>

@interface ClassA : NSObject

+ (void) testMethod :(double) parameterA :(double) parameterB;

@end

Swift调用:

1
ClassA.testMethod(1.0, 2.0)

关于在项目中的设置

设置部分可以在Build Setting中找到(项目文件中)

C、C++混编的实现

我们会发现,Objective-C的语法糖不多,我们更想要的是C++。而众所周知,Objective-C是可以调用Cpp的,而且将后缀名改为.mm之后,是Objective-C++,支持C++的方法及语法。全部都不难实现。其实只需要将所有东西分装起来即可。

比如我做OpenCV处理时分装的库:

HQMatProcessor.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//
// HQMatProcessor.hpp
// Page Dewarper
//
// Created by Jefferson Qin on 2020/4/8.
// Copyright &copy; 2020 Jefferson Qin. All rights reserved.
//

#ifndef HQMatProcessor_hpp
#define HQMatProcessor_hpp

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <opencv2/opencv.hpp>

namespace HQCV {
cv::Mat getSharpened(cv::Mat src);
cv::Mat getGray(cv::Mat src);
cv::Mat getSobelX(cv::Mat src);
cv::Mat getSobelY(cv::Mat src);
cv::Mat getSobel(cv::Mat src);
cv::Mat getGaussian(cv::Mat src);
cv::Mat drawPoint(cv::Mat src, double x, double y);
cv::Mat drawLine(cv::Mat src, double x1, double y1, double x2, double y2);
}

#endif /* HQMatProcessor_hpp */

HQMatProcessor.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//
// HQMatProcessor.cpp
// Page Dewarper
//
// Created by Jefferson Qin on 2020/4/8.
// Copyright &copy; 2020 Jefferson Qin. All rights reserved.
//

#include "HQMatProcessor.hpp"

namespace HQCV {

cv::Mat getSharpened(cv::Mat src) {
cv::Mat kernel = (cv::Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
cv::Mat ret;
cv::filter2D(src, ret, CV_32F, kernel);
cv::convertScaleAbs(ret, ret);
return ret;
}

cv::Mat getGray(cv::Mat src) {
cv::Mat dst;
cv::cvtColor(src, dst, cv::COLOR_BGR2GRAY);
return dst;
}

cv::Mat getSobelX(cv::Mat src) {
cv::Mat dst;
cv::Sobel(src, dst, CV_16S, 1, 0, 3, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(dst, dst);
return dst;
}

cv::Mat getSobelY(cv::Mat src) {
cv::Mat dst;
cv::Sobel(src, dst, CV_16S, 0, 1, 3, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(dst, dst);
return dst;
}

cv::Mat getSobel(cv::Mat src) {
cv::Mat dst;
cv::addWeighted(HQCV::getSobelX(src), 0.5, HQCV::getSobelY(src), 0.5, 0, dst);
return dst;
}

cv::Mat getGaussian(cv::Mat src) {
cv::Mat dst;
cv::GaussianBlur(src, dst, cv::Size(3, 3), 0, 0, cv::BORDER_DEFAULT);
return dst;
}

cv::Mat drawPoint(cv::Mat src, double x, double y) {
cv::Mat dst = src.clone();
cv::circle(dst, cv::Point(x, y), 8, cv::Scalar(0, 255, 0, 255));
return dst;
}

cv::Mat drawLine(cv::Mat src, double x1, double y1, double x2, double y2) {
cv::Mat dst = src.clone();
cv::line(dst, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(0, 255, 0, 255));
return dst;
}

}

Introduction

在进行iOS开发时,若涉及到图像处理,UIImage、CGImage永远是第一选择,但是系统提供的函数非常有限,效率低下,有时候并不是最好的选择。故,使用OpenCV。

Download

在OpenCV官网下载iOS版本的框架,各个版本均可

Installation

打开需要使用到OpenCV的项目,右键项目 -> Add Files -> 选择刚才下载好解压好的Framework。编译一把,大功告成。

Usage

  • 这个需要使用Objective-C混编。新建Objective-C文件,并且将后缀名改为.mm,系统会自动生成Bridge File用于向Swift开放Objective-C函数的接口。
  • 一般,在.mm当中会需要用到的头文件有:
    1
    2
    3
    #import <opencv2/opencv.hpp>
    #import <opencv2/imgcodecs/ios.h>
    #import <Foundation/Foundation.h>
    注:opencv的库一定要在最前面,否则编译过不了,具体原因可以试试写错,然后源码中有提示,是宏的定义产生的问题
  • Objective-C当中需要开放的接口在Bridge File中写

Warning

不可以随便

1
using namespace cv

因为有很多class的名称会和Swift冲突,所以还是老老实实cv::Point之类的。

4/10 地理课 - 世界主要农业地域类型

基本概念:农业地域类型是指在不同地内形成的具有不同部门结构和特点的农业生产类型

农业地域类型 主要农产品 主要分布地区 区位条件 生产主要特点
水田农业 水稻等 东亚、南亚、东南亚,我国主要分布在东部季风区的秦岭淮河以南地区 主要分布在季风气候区,光热水资源丰富;以平原、丘陵低山为主,人口稠密,劳动力资源丰富 生产规模小;单位面积产量高;商品率低;机械化水平低和科技水平低
旱作农业 玉米、高粱、小麦、棉花、花生等 中亚、南亚、非洲、拉丁美洲的干旱和半干旱地区;中国的东北、华北、西北地区 水资源并不丰富;人口密度一般比水田地区低,生产水平不高 机械化程度不高,生产水平较低,商品率低
牧场畜牧业 牛羊为主 美国、澳大利亚、新西兰、阿根廷等 气候温和、曹磊茂盛,有优良天然草场;地广人稀 经营规模大,专业化水平、商品率和机械化程度高
高度发达的商品化混合农业 麦类、玉米和畜产品 北美东部、西欧和中欧、澳大利亚东南部和西南部 处于温带、亚热带地区、水热条件比较好;水源充足;地势平坦;交通便利;生产力水平高,经济发达;市场广大 规模大,机械化、专业化、商品化程度高,实行农牧结合
地中海型农业 小麦、大麦、蔬菜、葡萄等 南欧、西欧、北非地中海沿岸、南北美洲西海岸的地中海气候区 地中海气候,夏季炎热干燥,有利于糖分的积累;冬季温和湿润,有利于作物越冬 生产规模小,机械化程度低
热带种植园农业 橡胶、咖啡、香蕉、菠萝等 亚洲、非洲、拉丁美洲一些热带地区。我国分布在海南省、云南、广东南部地区 热带气候,劳动力充足 专门生产一种或几种热带经济作物,商品率高,生产力低
游牧畜牧业 牛羊为主 中亚、西亚、北非、南非、我国四大牧区 干旱、半干旱、科技水平低 游牧为主、自给为主

4/9 地理课 - 农业区位的变化

自然因素的利用、改善

  1. 气候因素
    • 光照
      • 田块布局:东西走向的田块布局往往比南北走向的田块布局更能使每一棵植株活得更充足的阳光。
    • 热量
      • 温室大棚:温室大棚则起到了透光、保温的作用,改善了农业生产的热量条件。
    • 水分
      • 集雨节灌技术:集雨节灌技术改善了降水较少且季节变化大地区农业生产的水分条件。
      • 地膜覆盖技术:地膜覆盖技术可以提高土壤温度,保持土壤水分,间接改善了气候条件。
  2. 地形因素
    • 沿等高线修筑梯田使本不适宜发展种植业的山区业发展了水田农业。
    • 在较陡坡面上,自上而下挖半月形呈品字形的鱼鳞坑,并在坑内植树,具有保土保水保肥作用。
  3. 土壤因素
    • 呈酸性 $\rightarrow$ 撒石灰
    • 土质黏重 $\rightarrow$ 掺沙
    • 肥力低 $\rightarrow$ 种红花草,施有机肥
    • 井排:钻浅层机井抽取机井附近的浅层咸水使得地下水位下降,盐分不易在地表富集
    • 井灌:抽取深层的底下淡水用来灌溉,同时淋湿地表盐分,以治理土地的盐渍化
  4. 水源因素
    • 沙特在地表水机缺的荒漠区,采用中枢灌溉系统,抽取地下水改善水源条件,形成了荒漠农田圈奇观。
    • 我国通过修建水库和南水北调工程来改善北方地区的水源条件。
  5. 技术因素

社会经济因素的变化

  1. 市场因素
  2. 劳动力因素
    • 高质量农产品需求的增加
    • 劳动力的数量要求下降
    • 劳动力的素质要求上升
  3. 政策因素

案例分析:丹麦农业区位变化

  • 早期:全年温和多雨,地势平坦、国土狭小,土壤贫瘠,排水较差,只能发展牧羊业。
  • 19世纪中叶:通过排干沼泽的水,大量使用肥料,开始发展小麦种职业。
  • 现在:北美联佳小麦夺走了欧洲市场,考虑欧洲人爱吃面包需要牛油、奶酪和肉类,开始发展牛畜牧业。

结论

4/7 化学课

固氮

  1. 大气固氮
  2. 生物固氮
  3. 人工合成固氮

氮气与氮氧化物

  1. $\ce {NO}$无色气体
  2. $\ce {NO2}$红棕色气体
  3. $\ce {N2}$无色无味气体

氨气

  1. 水溶液呈碱性
  2. 与酸反应生成铵盐
  3. 还原性

铵盐

  1. 不稳定性碳酸氢铵和氯化铵的分解现象不一样,氯化铵分解生成的氨气和氯化氢可以再化合生成氯化铵。
  2. 与碱反应因为氨气极易溶于水,所以需要加热才能放出气体
  3. 应用:
    • 制氨气氨气不可以用无水$\ce {CaCl2}$干燥,用碱石灰,氢氧化钠固体干燥。
    • 检验铵盐:取样、加氢氧化钠溶液、加热、产生的气体使湿润的红色石蕊试纸变蓝——有$\ce {NH4+}$
    • 铵态氮肥的储存——阴凉处
    • 氮肥不能与碱性物质混用

感觉不知道从何时起,就有点依赖这个博客了呢(笑)。朋友圈里的老师与同学,可能或多或少也是我越来越少发朋友圈的原因吧。

因为四月即将迎来春物的完结篇,所以特意去补了春物的前两季。第一次看春物,还是初二。没有什么特别的理由,只因为刚刚入宅,因为推荐来补了番。那时,看不懂弹幕里所说的大老师,理解不了话里话外的含义,甚至一味地觉得是一部无厘头的作品。当时看了五集不到,放弃了。

记得还是初三,刷朋友圈时看到yjc对春物的评价,那是一个很高的,富有哲理的评价。可能这也为我再次打开春物,埋下了某种伏笔吧。(笑)扯远了,说回春物。再一次打开春物,熟悉而又陌生。作为一部评价很高的番剧,却在OP就有了「无人区」,让我一开始有点无所适从。但是随着剧情的发展,大老师的「名言」还是像以前一样说着,但是现在却感觉内心产生着强烈的共鸣。可能,是因为饱经了残酷现实的蹂躏了吧(笑)。

如果说第一季围绕着「谎言」展开,那么第二季就是围绕着「真物」展开。其实这「谎言」与「真物」都在描述一件事,那就是「人与人之间的真诚」。回首过去,我的青春其实充满着谎言,无论是最亲密的朋友还是陌生人,「谎言」充斥着我的日常,我也诉诸日常于「谎言」。「谎言」是自卫,是自我保护,是温柔,却也残酷。大老师所说的「如果说现实是残酷的,那么谎言就是温柔的吧」我不能完全认同。因为,得知谎言,可能就是这个世界上最大的痛楚吧。正如春物第一季雪之下对大老师假装的不认识对大老师的打击一样,初二时好友不经意的欺瞒,让我怀疑这个世界,怀疑自己的价值观与处事方式,改变自己,以让自己能合适地「生存」下去,这形成的裂隙,也为日后的关系埋下了伏笔吧。

只是,春物终是一部小说,在春物中,这成为了第一季最甜的一颗糖,雪乃和大老师在学园祭之后在教室中的「调情」,「因为我之前没有完全认识你呢」,拥有着这种美好的结尾。

其实第二季的「真物」,并不是所谓的「真实」,而是「想要让对方了解自己」,「想要告诉对方自己想说的」,正是团子的「既然不说白不说那为什么不说呢」的理论。很显然,这种关系是现实生活中不会有的。之前看老蜗牛的细节解读,最后写了这样一句话:「那么,你可以像他们一样,对你在乎的人,说出你内心里的『真话』吗」。但是答案不言而喻了吧,到头来只是一个理想罢了。

说起关系,在第一季的前半部分当中,大老师就指出过叶山与别人之间的关系:「对于那些人而言,叶山是他们的朋友,而彼此之间只是『朋友的朋友』罢了。」

蓦然回首,「技术宅的追番大队」「菜鸡群」「NWO」「技术|术语|日语学习」是为何而建立的呢?CSGO吧。可能我也已经意识到了,但是我只是像团子一样,希望这样的三人能够继续保持这样的关系,不再变得孤身一人,不再是「朋友的朋友」。可能,这也只是我的一厢情愿罢了。

但是,我永远不会忘记这个冬天。这个由「泡面」「代码」「日语」「术语」「あお」「日常」「maple」「sali」「rpi」「linux」「hexo」「next」「夜聊」「CSGO」组成的冬天。我给这个冬天加了无数个tag不想忘记,但是这终将是一个平淡无奇的冬天,随着岁月,在几人的记忆中埋没。对了,如果看到了的话,在评论区说句话吧。

突然发现,好像越来越文不对题了呢。本来只是想抒发对平淡日常的渴望,没想到又变成了致郁的文章。好像开了博客我的文笔都提高了(?)(毕竟经常会写东西)(困惑)。

话说回来,自己越来越渴望这平淡无奇的日常,每天自己有一个小目标,达到了就能体验到快乐的日常。不再期待惊喜,开始担心灾难,不再抱有期待,只求没有意外。可能这样的日常,就是我想要的「日常」吧。这样平平淡淡没有争吵的日子,还能有多少呢。可能只能珍惜当下了叭。