工作日常记录 2017-09-20

本文介绍了使用Webpack和Babel打包Node程序时需要注意的环境配置,以及如何利用RxJS的merge方法来合并多个不相关的Observable流。

工作收获日志 2017-09-20


描述:

工作任务没有多少的时候记录的日志, 随便看看各种node,rxjs之类的内容,随手记录一下遇到的有用的东西,内容之间没有必然的关联。

  1. 使用webpack配合babel来进行打包生成node程序的时候,注意一定要在webpack的config里面指定编译的目标环境为node, 否则编译的时候一些node环境下必须的环境变量无法访问导致错误,如:

    // With 'target' attribute unassigned, 
    // These following code will have problem.
    console.log(`stdin: ${typeof process.stdin}`);
    // Output is `stdin: undefined`
    
    // In webpack.config.js, add following configuration:
    module.exports = {
        // other configs..
        target: 'node',
        // other configs
    };
    
    // After this configuration, you can use following code:
    process.stdin.addListener(
        'data', value => console.log(`input: ${value}`)
    );
    
    // Then in console:
    this is a input phase \n
    // You will receive:
    input: this is a input phase
    
  2. RxJS 的merge方法

    从RxJS的官网上可以知道,这个operator的方法是把几个相互之间没有关系的Observable(假设为a,b,c)合并,生成一个新的Observable流(假设为Combine)。a,b,c任意一个Observable产生了数据都会传递给Combine,之后再传递给订阅了Combine的subscribe函数来进行对应的处理。
    一个简单的例子

    // import necessary libs.
    // Note in Node import is not supported.
    // You need to introduce webpack and babel es2015
    // to compile the following code 
    import Rx from 'rxjs';
    import Events from 'events';
    
    // Here we have two Observable created by timer
    const timer1 = Rx.Observable
    .timer(0, 1000).mapTo({ value: 'input from timer1' });
    const timer2 = Rx.Observable
    .timer(0, 4000).mapTo({ value: 'input from timer2' });
    
    // Here we create a new observable that will be triggered
    // Whenevent we input something on the console
    const inputEmitter = new Events.EventEmitter();
    
    // Register system input
    process.stdin.addListener(
        'data', value => inputEmitter.emit('input', { value })
    );
    
    // Create Observable from event
    const input = Rx.Observable.fromEvent(
        inputEmitter, 'input'
    );
    
    // Create a new Observable stream that merge them
    Rx.Observable.merge(timer1, timer2, input)
    .subscribe(e => console.log(`trigger: ${e.value}`));
    

    webpack编译运行后结果如下

        // After 1 second
        trigger:  input from timer1
        // After another 3 second
        trigger: input from timer2
        // Then we input a string from CLI
        this is a test input
        // Then we immediately have
        trigger: this is a test input
    
MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值