Nodejs脚本系列——视频文件转码

最近使用nodejs些了很多实用的脚本,可以很方便的做一些自动化操作。

1
#!/usr/bin/env node

只要在nodejs文件的首行加上这一句,该脚本就可以想普通的shell脚本一样直接执行而不需要使用node xxx.js了,当然还是需要安装node的


今天介绍一个使用ffmpeg批量转换视频文件格式的脚本,该脚本对ffmpeg命令做了简单封装,支持单个文件以及整个文件夹全部转换,并输出实时进度,目前实现了大部分格式向mp4格式转换的命令。

贴上GitHub地址 ffmpeg2mp4 使用方法里面也有,这里就不多做介绍了。

脚本很简单,就是对原生的 ffmpeg 命令做了下封装,让其依次进行每个文件的转换,中间输出进度百分比,完成后输出转换结果。

阅读更多
使用cnpm搭建个人私有npm仓库(一)——简单介绍及基本配置

最近几天研究了下如何使用cnpm搭建个人私有的npm仓库,并把自己的工具库发布到了这个npm仓库。

使用私有npm仓库可以很好的管理自己的一些不愿意公开的工具库。尽管npm可以直接从git地址或者文件夹安装,但是这种方式有个比较大的弊端,就是更新包时使用npm update命令是不管用的,必须使用npm install xxx重新安装一遍,强迫症表示无法接受。

啰嗦了这么多,现在切入主题,来介绍一下私有npm的搭建。

阅读更多
使用cnpm搭建个人私有npm仓库(二)——私有仓库的权限控制

上一篇(使用cnpm搭建个人私有npm仓库(一)——简单介绍及基本配置)介绍了如何使用cnpm搭建私有npm仓库,今天来讲一讲私有仓库的权限控制。

有时候出于各种原因,不想让其他人安装私有仓库上的包或者发布包到私有仓库,就可以开启权限控制功能。

在上一篇配置的基础上,添加几个属性

enablePrivatetrue时表示只有admin才能发布包

userService 为提供身份验证的接口,写个最简单的就可以了

阅读更多
MacBook Pro 2016/2017 TouchBar App 开发 —— 快捷键小程序 Fn

众所周知,2016年苹果发布了新一代的MacBook Pro,其搭载的Multi Touch Bar(以下简称TouchBar)成为了一大亮点,系统自带应用不用说基本都支持了TouchBar,许多第三方 mac app 也都适配了TouchBar,可以预见TouchBar可能会是后续MacBook系列的标配,就像当年MacBook的ForceTouch和iphone上3D Touch一样。

好了,介绍完了背景,现在回到本文标题:TouchBar App 开发

何为 TouchBar App ?我个人的定义是仅基于TouchBar实现的完整功能的应用程序(而不是像系统应用一样TouchBar只是一个快捷操作并非应用的全部),目前网上有一款国外大神开发的TouchBar App:

阅读更多
Nodejs脚本系列——UDP设备发现程序

最近一直在玩树莓派,由于树莓派大多数时候都是使用ssh远程连接上去操作的,需要将pi连到局域网中,但是大多数路由器都是DHCP自动配置IP地址,所以每次都要蛋疼的找pi的地址。

于是本着偷懒的原则,我写了这个脚本。

脚本很简单,就是使用UDP广播。分为服务端(被寻找)和客户端(寻找),服务端设置一个UDP监听,监听端口收到的特定标识字符串,然后向发送者发出响应,发送者收到该响应就能知道服务端的地址了。

服务端主要代码:

阅读更多
使用SDCC在Linux/macOS上开发51单片机程序

前几天看到一个东西叫SSDC(Small Device C Compiler),这是一个可以开源的单片机程序编译器,so,今天介绍下在mac下51单片机程序的开发,linux下的步骤也是一模一样的。

下载地址:https://sourceforge.net/projects/sdcc/files/ 找对应的平台下载。

解压出来的 ssdc-3.6.0 文件夹可以放在 /usr/local 下(路径随意,只要把ssdc-3.6.0/bin这个路径加到环境变量里就OK)。

接下来写一段LED闪烁的程序 main.c:

阅读更多
使用Apache POI生成excel单元格内强制换行

最近项目中使用excel导出功能遇到了问题,如果单元格字符串中包含换行符\n,导出的excel文件不会自动换行,折腾了好久,最后在网上找到了解决办法,在这里分享一下。

就像这样的字符串:

1
String text = "abc\ndef";

导出后是:

期望的结果应该是这样:

只要在POI导出时做下处理:

阅读更多
Java中线程池的简单使用

最新做项目使用到了多线程,很自然就想到了用线程池。

Java中通过Executors来使用线程池,简单介绍下以下两种线程池的使用:

  • FixedThreadPool

1
ExecutorService threadPool = Executors.newFixedThreadPool(threadCount);

固定线程数量的线程池。创建线程池时立即创建threadCount个线程,当线程池已满时新加入的任务处于排队等待状态。

固定线程池适合一些对资源有限制的多线程场合,比如网络请求多张图片等,常用配置是将threadCount设置为当前CPU核数。

阅读更多
JavaScript ES6 原生Promise的简单介绍与坑

使用javascript做开发,一定免不了异步调用,尤其是Nodejs,所有api几乎都是异步的,因此很容易产生如下代码:

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
function someAction(arg, callback) {
//第1层调用
handler.func1(arg, function(err1, res1) {
if (err1) {
callback(err1, null);
}
else {
//第2层调用
handler.func2(res1, function(err2, res2) {
if (err2) {
callback(err2, null);
}
else {
//第3层调用
handler.func3(res2, function(err3, res3) {
if (err3) {
callback(err3, null);
}
else {
callback(null, res3);
}
})
}
})
}
})
}

function main() {
//调用函数
someAction('arg', function(err, res3) {
if (err) {
//操作失败
}
else {
//操作成功
}
})
}

//以上所调用的func1,func2,func3为以下类似代码
//用setTimeout来模拟耗时操作
handler.funcx = function(argx, callback) {
setTimeout(function() {
callback(null, 'resx');
//or callback(new Error('err'), null);
}, 1000);
}
阅读更多
Pi Console —— 打造树莓派随身电脑

分享一个自己用树莓派做着玩的东西,也不知道到底应该起个什么名字,树莓派随身电脑,暂时先这么叫着吧。。。

先上几张照片:

阅读更多