在 Debian 中安装 node.js

背景

以前博客有两篇涉及到nodejs,当时只是轻度使用,不甚熟悉。估计今后使 nodejs 的地方会越来越多,本文整理了node 的一些笔记。

介绍

简单来说,nodejs 就是运行在服务端的JavaScript。

为什么要使用 nodejs ?它跟 java PHP 有什么区别呢?

node.js 有非阻塞,事件驱动I/O等特性,非常适合高并发的应用。

以上说明对于一些人来说可能显得晦涩不少,又要去查什么叫非阻塞、事件驱动等。下面是更简单的解释。

在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。

除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。

鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

Node 解决这个问题的方法是:更改连接的方式。每个连接发生一个在 Node 引擎进程中的事件,而不是为每个连接生成一个新的线程(并为其分配一些配套内存)。Node 不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。

转自:https://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html

安装

我是用的系统为 Debian 8.8,root用户。

安装可用三种方式:

  1. 源安装
  2. PPA安装
  3. mvm安装

1. 源安装

apt-get update
apt-get install nodejs npm

查看版本:

nodejs -v
npm -v

如果你是用普通用户安装,要确保该用户拥有 sudo 权限。

如果使用root用户安装,另外增加如下命令:

npm config set user 0
npm config set unsafe-perm true

2. PPA安装

curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
bash nodesource_setup.sh

apt-get install nodejs npm

查看版本:

nodejs -v
npm -v

如果你是用普通用户安装,要确保该用户拥有 sudo 权限。

如果使用root用户安装,另外增加如下命令:

npm config set user 0
npm config set unsafe-perm true

为了使某些npm包能够工作(例如,需要从源代码编译代码),需要安装build-essential包:

apt-get install build-essential

3. NVM安装

curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh -o install_nvm.sh

运行脚本bash

bash install_nvm.sh

软件会安装到~/.nvm。它还在~/.profile文件添加三行以使用nvm,你可以参考。如果使用zsh的话依样画葫芦把它拷贝到 ~/.zshrc中。

查看可用的Node.js版本的信息:

nvm ls-remote

我选择了最新的长期支持版本:

nvm install 8.11.1
nvm use 8.11.1

查看版本:

node -v
npm -v

安装模块时需要注意如下事项,以express模块为例:

npm install express

如果您想要全局安装模块,使用相同版本的Node.js将其提供给其他项目,您可以添加-g标志:

npm install -g express

这将安装包:

~/.nvm/versions/node/node_version/lib/node_modules/express

全局安装模块将允许您从命令行运行命令,但是您必须将程序包链接到本地范围以从程序中请求它:

npm link express

卸载

以前两种方式安装的,运行如下命令卸载:

sudo apt remove nodejs

使用nvm方式的,运行如下命令卸载:

  1. 确定要删除的版本是否为当前活动版本:
  nvm current
  1. 如果您要定位的版本不是当前的活动版本,则可以运行:
  nvm uninstall node_version

此命令将卸载所选的Node.js版本。

  1. 如果要删除的版本当前活动版本,则必须先停用nvm以启用更改:
  nvm deactivate

参考资料


AI Challenger 2018:细粒度用户评论情感分类冠军 - 程惠阁

关注了一些 ai 相关的。原文查看机器之心:https://www.jiqizhixin.com/articles/2019-01-28-16

2018年8月-12月,由美团点评、创新工场、搜狗、美图联合主办的“AI Challenger 2018全球AI挑战赛”历经三个多月的激烈角逐,冠军团队从来自全球81个国家、1000多所大学和公司的过万支参赛团队中脱颖而出。其中“后厂村静静”团队-由毕业于北京大学的程惠阁(现已入职美团点评)单人组队,勇夺“细粒度用户评论情感分类”赛道的冠军。本文系程惠阁对于本次参赛的思路总结和经验分享,希望对大家能够有所帮助和启发。

img

背景

在2018全球AI挑战赛中,美团点评主要负责了其中两个颇具挑战的主赛道赛题:细粒度用户评论情感分析和无人驾驶视觉感知。其中NLP中心负责的细粒度用户评论情感分析赛道,最受欢迎,参赛队伍报名数量最多,约占整个报名团队的五分之一。

细粒度用户评论情感分析赛道提供了6大类、20个细分类的中文情感评论数据,标注规模难度之大,在NLP语料特别是文本分类相关语料中都属于相当罕见,这份数据有着极其重要的科研学术以及工业应用价值(目前在大众点评App已经可以看到20个类别的情感标签了)。

1. 工具介绍

在本次比赛中,采用了自己开发的一个训练框架,来统一处理TensorFlow和PyTorch的模型。在模型代码应用方面,主要基于香港科技大学开源的RNetMnemonicReader做了相应修改。在比赛后期,还加入了一个基于BERT的模型,从而提升了一些集成的效果。

2. 整体思路

整体将该问题看作20个Aspect的情感多分类问题,采用了传统的文本分类方法,基于LSTM建模文本,End2End多Aspect统一训练。

文本分类是业界一个较为成熟的问题,在2018年2月份,我参加了Kaggle的“作弊文本分类”比赛,当时的冠军团队主要依靠基于翻译的数据增强方法获得了成功。2018年反作弊工作中的一些实践经验,让我意识到,数据是提升文本分类效果的第一关键。因此,我第一时间在网络上寻找到了较大规模的大众点评评论语料,在Kaggle比赛的时候,NLP的语言模型预训练还没有出现,而随着ELMo之类模型的成功,也很期待尝试一下预训练语言模型在这个数据集合上的整体效果。


kubernetes 的编译、打包和发布(v1.10)

这是一篇 kubernetes 编译的简单备忘,以1.10.11为例。

编译主要参考文档为官方文档:https://github.com/kubernetes/kubernetes/blob/master/build/README.md

下载源码

下载v1.10.11源码

git clone -b v1.10.11 https://github.com/kubernetes/kubernetes.git
cd kubernetes

# 或者自由切换到其它分支
git branch
git tag | grep v1.10
git checkout v1.10.11

源码有100多万文件、将近700M,下载比较慢,需要一些耐心。

1571366044132

修改源码

这一块就各显神通了。

运行编译环境

使用容器运行一个编译环境,将代码文件映射到目的文件夹

docker run -it --rm -v $(pwd):/usr/lib/go/src/k8s.io/kubernetes kelvinblood/go-kube-build:v1.11 sh

单模块编译

以kubeadm为例,进入cmd文件夹进行编译即可。

cd /usr/lib/go/src/k8s.io/kubernetes/cmd/kubeadm
go build 

参考资料