Frossky 发布的文章

递增循环, 是start, end, step...好吧, 基本还是跟C一样,C是start, condition, cmd
枚举循环,有个ipairs/pairs是什么鬼?

for i = 0,10,1 do
  -- something cmd
end

a = {'a','b','c'}
o = {x=1,y=2}

for k,v in ipairs(a) do
  -- some code
end

for k,v in pairs(a) do
  --some code
end

原来是不同的迭代器:迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的
(string.gmatch)等等
ipairs和pairs什么区别?ipairs从1开始遍历,每次递增1,也就是1/2/3/4...,遇到没有了就停止遍历。pairs遍历所有的key。

arduino在中断回调中执行的程序, 确实是无法使用delay的, delay似乎就失效了.
所以中断还是应该尽快返回, 在主程序逻辑中执行. 较长的逻辑可以通过设置标志位, 在主程序中进行检测并执行, 执行完后清除标志位即可.
如果是设置标志位的方式, 在主程序运行中, 新的中断当然会不断地重设标志位, 然而在主程序运行后将清除标志位 , 因此不会重复执行任务.
如果无论主程序是否在执行 ,每次中断任务都需要被完整执行的话, 则可以用计数器替代标志位, 中断时计数器+1, 执行一次再-1, 直到计数器为0时停止执行.

很多人说毛带兵成功治国失败,不理解他的三反五反十年浩劫。然而毛确实是一个共产主义者,理想主义者,甚至是完美主义者。他所做的确实是消灭阶级,消灭不公平,将整个国家高出中农以上的阶级全部铲平,在生前建立共产乌托邦。只是我们后来才注意到,乌托邦世界的问题。

人类发展技术,个体让后代学习技术,意图让他们过上更美好的生活,甚至走上“共同富裕”。然而,个体更美好其实只是个概率问题,好的技术并不能一定保证好的生活,也无法让你过得更轻松,也无法共同富裕,而总是一部分富裕了另一部分没有,而后代只能像赌博一样压宝,总盘子就这么大,看你们的运气。心理学说人人都会做出对他来说最好的选择,而他们只是选择了自己最好的押宝。
当技术不起作用了,人类说你还得努力,未成年努力还不够,还得终身努力。然后你就放弃了舒适的生活,去过“好的生活”,房车票子上流社会之类。大家都努力,总盘还这么大,你就只有更加辛苦才能获得跟以前差不多的生活。
最终,你努力学了技术,又努力工作,生活却还是不如意,感叹或咒骂人生究竟如此苦逼的时候, 人类给你三个选择:一,宗教,人生就是痛苦,这辈子幸福是不可能了, 不过下辈子可以, 只要你信教, 就能上天堂,得永生;二,你自己是不可能了, 但你的子女可以, 总得让自己子女过得好一些,轻松一些, 所以继续努力吧,希望在未来;三,人生得有理想,得改变世界什么的, 万一实现了呢, 所以继续努力吧。每个人需求不同, 有的要救自己, 有的要救后代, 有的要救世界, 总有一个满足你. 不过相对来说, 宗教这个没让你继续过度疲劳, 所以还是划算些, 这门生意从图腾时代开始也就兴旺了几万年不衰. 中国皇帝最大, 宗教最多当过老二, 于是只好寄托后代, 所以不孝有三无后为大, 所以传宗接代重男轻女, 因为只有男性能代表我实现幸福生活.
至于理想主义, 是一个适合文青的方式, 古代受教育的少, 文青也少, 所以一直是个配角, 现代纷纷读起了大学博士研究生, 才变得更加流行起来了. 现代文青受教育多了, 一是导致家族观念淡薄, 都想实现个自我价值; 二是广告和小时代看得多了, 要买要用的东西多, 生活压力大, 就不愿意多生孩子养家. 所以只有理想主义能拯救他们. 他们喜欢乔帮主的"卖个糖水还是拯救世界"的段子, 纷纷开始实现王健林的"1个亿小目标". 其实理想主义也是贯穿古代的文青圈, "穷则独善其身, 达则兼济天下". 只是比较起来, 古代人还是现实一些, 穷了还就只管自己了, 有钱了也只是"兼"济天下, 顺带地救一下世界. 现代文青就不一样, 我穷也要或者更要救天下,救不了天下也得在天底下扬名立万, 并时时以救天下的各种鸡汤段子鞭策自己, 鞠躬尽瘁死而后已.
最后谁赢了?只是那物竞天择的自私基因。

仿真一般都用Proteus, 原理图到PCB都能搞定;
MCU这么几个系列:
C51, 开发环境Keil for C51. 著名开发公司Atmel, 还有国内的STC.
MSP430, TI公司的, 主流两个, 一个是TI自己的CCS编译环境, 另一个是IAR Embedded Workbench for MSP430
AVR, Atmel的芯片, 自家的编译环境有Atmel Studio/toolchain, v5版本以前叫做AVR studio.
ARM, 一般是Keil For MDK. STM32也是基于ARM的Cortex M3的.
STM8, 一般是IVR for STM8, ST公司自家的STVD也可以
PIC, Microchip公司,用 MPLAB X IDE

如果用Vue属性做v-for的话, 注意它不能检测对象属性的直接增删, 而是要用Vue.set来增删对象属性.
另外, 在v-for场景下, 数组可以很方便的只显示部分或者做过滤/排序等, 对象就不行了. 所以使用v-for尽量将数据类型设计为数组.

vue-router默认是需要将项目放在服务器的根目录下的, 在浏览器里输入域名是这样:

http://mydomain.com/

vue怎么确认去服务器取数据还是在本地取数据呢? 其实借助的是井号"#", 井号在url中指向的是自己, 而不会去服务器取数据. 如下url, 是在根目录下的vue应用中, 也就是在vue-router中被导航.

http://mydomain.com/#/login

而如下url,将会到服务器上去取数据

http://mydomain.com/login

但如果要放置在子目录下呢, vue应用放在productinfo目录中:

http://mydomain.com/productinfo/#/login

需要两步:
1. 需要配置 router的config:

const RouterConfig = {
    base: 'productinfo'
};
const router = new VueRouter(RouterConfig);
  1. vue-router一般都是用vue-cli或者webpack, 做多个文件打包的, 也就是运行:

    npm run build

可以打包app. 当然, package.json中需要有对应的build配置, 如下:

  "scripts": {
    "build": "webpack --progress --hide-modules --config webpack.prod.config.js",
  },

那么在webpack.prod.config.js中, 也需要配置路径, 否则默认应用的打包文件就会出错.
以前是

    output: {
        publicPath: '/dist/',
    },

现在改为:

    output: {
        publicPath: '/productinfo/dist/',
    },

重新打包npm run build就好了.

附webpack.prod.config.js完整文件:

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const merge = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.config.js');
const fs = require('fs');

fs.open('./src/config/env.js', 'w', function(err, fd) {
    const buf = 'export default "production";';
    fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {});
});

module.exports = merge(webpackBaseConfig, {
    output: {
        publicPath: '/productinfo/dist/',
        filename: '[name].[hash].js',
        chunkFilename: '[name].[hash].chunk.js'
    },
    plugins: [
        new ExtractTextPlugin({
            filename: '[name].[hash].css',
            allChunks: true
        }),
        new webpack.optimize.CommonsChunkPlugin({
            name: 'vendors',
            filename: 'vendors.[hash].js'
        }),
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"'
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        new HtmlWebpackPlugin({
            filename: '../index_prod.html',
            template: './src/template/index.ejs',
            inject: false
        })
    ]
});

超微型接口, 一般是IPX/IPEX/IPAX/AMC/UMCC/MHF/Hirose H.FL... 哦, 真搞不清楚这么个接口居然有如此之多的名字... 这是日本公司Hirose的专利接口, 不过用的实在是太多了...
尺寸上似乎有多种类型. 淘宝常见的似乎是331.5MM的. 阻抗50Ω.传输频率 0~6GHz.

普通结构, 一般是SMA, 是SubMiniature version A的简称, 传输频率 0~18GHz, 阻抗50Ω.直径约6mm.

SMA容易和F头(F connector)混淆. F头阻抗75Ω,直径9.5mm. 典型传输频率0~0.75GHz. 不过到2.2GHz似乎也没有问题.

Q9/BNC接口也常用于接天线.

TNC(Threaded Neill–Concelman)接头, 是BNC接头的螺纹版. 50Ω/0~11GHz. 微波段比BNC表现好. 公口1.5厘米,母口1厘米.

N接头(N Connector), 0~11GHz,有50Ω和75Ω版本. 公口直径有2.03厘米, 母口直径有1.57厘米, 是比较大的接口.

其他:
1. J一般表示公头, K表示母头.
2. SMA和TNC都有RP版. RP是Reverse Polarity的简称,即"反极性".
* 正常版内螺纹端(公头)有针, 外螺纹端(母头)无针.
* RP版的内螺纹端无针, 外螺纹端有针.

pug与stylus虽然看起来写起来都很简洁,然而由于像sublime text这样的编辑器已经对html自动补全支持得很好了, pug和stylus在还没有自动补全的时候, 书写效率未必比原生html和css更快

pug示例:

div.className1.className2(style='font-size:37px') test ok!

stylus示例

.className1
    color: green
.className2
    background-color: red

1、npm install xxx-loader --save-dev,如:以前叫jade现在叫pug的:

npm install pug-html-loader

2、在webpack.base.config.js中加入配置:

module:{
  rules: [{
              test: /\.pug/,
              loader: ['raw-loader', 'pug-html-loader']
  }]
}

3、使用。如在vue的模板中:

科技永远打着造福人类的旗号。
可它却只是为了压榨人类,发展自己。
农业革命,大部分人类丧失了空闲,必须日日面朝黄土背朝天;阶级产生,只有皇帝和祭司无需劳动。
工业革命,人类丧失了土地,必须日日面对机器;农民打砸机器,希望换回曾经的生活。
信息革命,人们连机器也丧失了,产线上只有机器人;人们开始咒骂全球化,想要要回自己的工作。
人工智能革命,人们连决策力也丧失了,不需要做决定,司机失业,更多需要做决定的工作都失业了。人们又将咒骂什么,又将如何生存?

似乎高大上的种植都是放在大棚里的。跟大棚相关的技术和产品有这些:

  • 水帘,也称为湿帘,装在大棚的一侧,一般为纸质,使用不锈钢做框架包裹,用管道水浸润。另一侧使用风机抽风,可以使大棚通风、降温,控制温度在30度以内,成本据说是空调的1/3
  • 卷膜器,有电动有手动。电动版有ac 220v、dc 12v/24v等。分为卷侧面、卷顶面(天窗)。一个大棚至少4个,才能将两个侧面+顶面的两边完全卷起来。

跟灌溉有关的技术有很多,都讲究个节水,并且讲灌溉前,先得说培育技术,最主要的当然是经典的土壤培育,灌溉方式包括:
* 传统漫灌,当然是很耗水的了
* 喷灌,在城市绿化带常见。相对节水。距离也可以有数米远。问题是不适合幼苗期灌溉,水压太大会冲毁幼苗。一般是用PVC水管竖在地里,或者使用地插杆+毛管插在地里使用。
* 滴灌,更加节水的一种方式,也比较适合盆养,将滴箭(就是滴灌,长得像个箭)插入土壤来灌溉,或者使用指定速率的滴头插在PE管上滴水。
* 微喷,更更节水的方式,相对于喷灌喷出的水花,微喷喷出来的其实是雾气,不过距离较近,应该是在一米内。雾化效果好,不伤苗,所以在整个作物发育期都可以使用。

灌溉中的输水,最开始应该先进入过滤系统,滤出泥沙,防止后面堵塞管道
输水用到几种管道,依次是:
* 最前面的是PVC管,属于硬管,作为主管道。
* 接着是PE管,是软管,在田里的灌溉区使用,做为分管道。常见的16/20/25mm的PE管,管壁1mm。PE管可以直接接滴头。
* 毛管,按内径、外径的毫米数分为3/5管,4/7管,8/11管。其中47管比较常用。

灌溉和施肥常常是分不开的,在灌溉的水中将肥料直接加入,可以使施肥更均匀。常见的方式是文丘里施肥。在灌溉主管道中旁路(并联)一个文丘里施肥器,需要施肥的时候关闭正常用水的阀门,水经过文丘里管时,利用水流动的负压吸取肥料到水中。

其他灌溉方式还有水培, 就是放在水里,营养液也在水里,不接触土壤,更加洁净。其他了解还不深。

更现代化的一个灌溉方式:雾培,是将作物根系悬空,将水分和养料直接喷雾到根系上。这种方式据说是最节水的,水分几乎100%吸收,未吸收的水分连同营养液可以回流到池中再次利用。此种方式的好处是:
* 极致节水、降低肥料使用
* 隔离土壤环境,几乎不受到虫害、病菌侵扰。仅存的病虫害还可以通过电功能水的方式物理治疗,不需要化学农药,更加安全
* 土地利用率高,不需要放在土中,可以多层培育,单位土地可以产出更多的作物
我想的这个雾培能不能家庭使用?家里水不会要太多,又不好找土,似乎还挺适合的。而且这个技术非常适合于工厂加工。所谓的现代化大棚,更像一个工厂车间吧。

虫害方面的防治,主要也两种:
* 化学农药,传统的方式。哦,还有转基因。我把转基因放在化学中,因为这只不过是使用生物方式产生化学农药而已。
* 物理方式,除了上面说的电功能水以外,还有其他红外紫外之流。

对了,还有光照,光照不足的情况,是通过补光灯来补充的。

那么物联网传感器在其中的作用,也因种植方式的不同而不同。
对于大棚种植,大棚内的空气温湿度一定是需要控制的。另外二氧化碳浓度也是很重要的影响因素。
对于土壤种植,土壤的湿度信息就需要传递,以便更好地节水。
其他方式的种植还未想到传感器的作用。