npm安装Electron缓慢网络超时导致失败

1. npm源过慢的话,可以把源切到国内的淘宝的镜像上。

npm config set registry https://registry.npm.taobao.org

2. 到electron的国内镜像下载最新的安装包,主要看好自己系统对应的版本

https://npm.taobao.org/mirrors/electron

3. 将下载好的包放到当前用户的根目录下的.electron文件夹下,windows一般是C:\Users\YourUserName\.electron

4. 执行安装命令npm install electron-prebuilt -g

转载请注明原文出处《npm安装Electron缓慢网络超时导致失败》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

工作杂记:maven打包多个source directory项目以及Jenkins无法启动Tomcat

在java项目中碰到有多个source directory的时候,Maven无法正确打包,只能打包src/main/java下的内容,需要额外引入一个插件解决此问题。

<build>
o<plugins>    
        <plugin>    
            <groupId>org.codehaus.mojo</groupId>    
            <artifactId>build-helper-maven-plugin</artifactId>    
            <version>1.10</version>    
            <executions>    
                <execution>    
                    <id>add-source</id>    
                    <phase>generate-sources</phase>    
                    <goals>    
                        <goal>add-source</goal>    
                    </goals>    
                    <configuration>    
                        <sources>    
                            <source>${basedir}/src/mail/java</source>    
                        </sources>    
                    </configuration>    
                </execution>    
            </executions>    
        </plugin>    
    </plugins>
</build>

即可实现maven时打包多个不同source directory。

另,在用Jenkins执行自动编译打包命令,并重启服务器时,发现tomcat启动后,随着Jenkins的进程完成,Tomcat又被看作为衍生进程被杀掉了。

需要在启动Tomcat的脚本中添加export BUILD_ID=PLEASEDONOTKILLME。既可避免被杀。

转载请注明原文出处《工作杂记:maven打包多个source directory项目以及Jenkins无法启动Tomcat》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

使用javascript解析四则运算表达式

在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。

1. 熟悉概念

中缀表示法(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。也就是我们最常用的算术表达式,中缀表达式对于人类来说比较容易理解,但是不易于计算机解析。

逆波兰表示法Reverse Polish notationRPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。逆波兰表示法容易使用堆栈结构对表达式进行解析并计算,所以,这里我们解析四则元素表达式,是先从中缀表达式,转换为逆波兰表达式。然后再计算值。 继续阅读 »

转载请注明原文出处《使用javascript解析四则运算表达式》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

一个简单的倒计时功能,支持文本内容和class切换

帮朋友写了一个简单的倒计时功能,功能比较简单,支持文本内容和class的同时切换,你可以使用文字,也可以使用图片背景等效果

http://jsfiddle.net/cCGPY/1/

转载请注明原文出处《一个简单的倒计时功能,支持文本内容和class切换》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

JavaScript位操作及其简单应用

1. <<

左移,即按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

1 << 1
//output 2
1 << 2
//output 4

2. >>

右移,即按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。

4 >> 1
//output 2
4 >> 2
//output 1

3. & (AND)

与,即按二进制形式将所有的数字与目标数字按位进行与操作。

常见用法:通常用于二进制的取位操作,例如:一个数字&1,如果结果为0则为偶数,如果为1则为奇数。

2 & 1
//output 0
1 & 1
//output 1

4. | (OR)

或,即按二进制形式将所有的数字与目标数字按位进行或操作。

常见用法:通常用于二进制数字的无条件赋值。例如:一个数字|1,相当于与获取与当前数字最接近的奇数。

1 | 1
//output 1
2 | 1
//output 3

5. ~ (NOT)

非,即按二进制形式将所有数字取反。

常见用法: 位运算 NOT 实质上是对数字求负,然后减 1,因此 25 变 -26。

~1
//output -2

6. ^ (XOR)

异或,即按二进制形式将所有数字与目标数字对比,只有两个数字不相同即只有一个数位存放的是1的时候返回1,如两个数字相同返回0.

常见用法:xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变。可以用于简单的加密,或交互数值操作。

var a = 2, b = 3;
a ^= b;
b = a ^ b;
a ^= b;
console.log(a);
//output 3
console.log(b);
//output 2

转载请注明原文出处《JavaScript位操作及其简单应用》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

Arduino Nano配合MQ-2烟雾传感器和LED灯实现烟雾报警器

二话不说先上视频

基本配件组成

Arduino Nano × 1
MQ-2烟雾传感器 × 1
LED灯 × 1
连接线若干
MicroUSB连接线一根

连接方法

将MQ-2传感器两个引脚正极接Nano 3.3伏引脚,负极接地,S引脚接模拟口0。
将LED灯正极接数字口12,负极接地。

实现效果

当烟雾浓度越大时LED闪烁频率越高,烟雾浓度降低时LED闪烁频率降低,烟雾浓度为标准浓度时LED灯关闭。

实现思路

通过digitalWrite(LED, HIGH)和digitalWrite(LED, LOW)改变对LED加电的状态控制LED打开和关闭,改变状态的速度越快闪烁的频率越高。通过analogRead(0)获取MQ-2传感器当前的读数,不断监测当前烟雾浓度,如果超过一定的阈值比如400则提高LED闪烁的频率,随着浓度值的降低同时降低LED灯闪烁的频率。

注意事项

MQ-2传感器要经过预热才能正常工作,开始接入时读数不准,经过几分钟预热后,我本地的正常环境读数为150左右。所以要根据这个读数来控制程序判断的阈值。

代码
//定义LED的高电平接入数字端口
int led = 12;
void setup() {
  //定义当前的端口为输出端口
  pinMode(led, OUTPUT);
}

void loop() {
  //获取MQ-2传感器模拟端口的读数
  int val = analogRead(0);
  //如果大于400则以10ms的间隔闪烁
  if(val > 400){
    blinkLED(10);
  }else if(val > 300 && val < 400){
        //如果大于300,小于400则以100ms的间隔闪烁
    blinkLED(100);
  }else if(val < 300 && val > 200){
    blinkLED(1000);
  }else{
        //否则关闭
    digitalWrite(led, LOW);
  }
}
//闪烁函数
unsigned int blinkLED(int period){
  unsigned long time = millis();
  unsigned int signal;
  if((time / period) % 2 == 0){
    digitalWrite(led, HIGH);
  }else{
    digitalWrite(led, LOW);
  }
}

涉及内容

pinMode, analogRead, digitalWrite

其他

由于Arduino强大的功能,所以实现起来是非常简单的,唯一不足的地方就是晚上又多抽了半盒烟来测试:D

下一步就是要接入Yeelink平台来实现远程的检测,让这个小东西变得更加有意义,能够实现远程监测才是这个烟雾报警器真正能够起作用的时候。敬请期待:)

转载请注明原文出处《Arduino Nano配合MQ-2烟雾传感器和LED灯实现烟雾报警器》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。