刘子瑛,阿里系统框架专家。工作十余年,一直对新编程语言、新开发方法、数学与算法相关和并发等相关领域保持浓厚的兴趣。乐于通过技术分享促进新技术。
使用eslint和stylelint之类的工具扫描前端代码现在已经基本成为前端同学的标配。但是,业务这么复杂,指望eslint等提供的工具完全解决业务中遇到的代码问题还是不太现实的。我们一线业务同学也要有自己的写规则的能力。 本文介绍eslint的主要工具和相关技术。
使用eslint和stylelint之类的工具扫描前端代码现在已经基本成为前端同学的标配。但是,业务这么复杂,指望eslint等提供的工具完全解决业务中遇到的代码问题还是不太现实的。我们一线业务同学也要有自己的写规则的能力。
虽然有默认不变性还有所有权的问题让Rust一上来用起来有些不同,但是其实大部分语法特点还是我们所熟悉的。 我们没必要上来就跟自己死磕,可以先从我们熟悉的部分开始学习。 一般我们写代码,使用的主要是数据类型、控制结构和函数。我们就从这三部分开始。
学习Linux内核,首要的第一件事情就是搞清楚调试的方法
如何搭建Standard ML开发环境,以及如何在sml中生存下来
opengrok搭建快餐教程,2020年1月版
本节我们学习如何训练一个语言模型,并用于代码补全中
vscode中新增和读写配置项的方法
我们接续第5讲未介绍完的LSP的onCompletion补全的部分,还有本地补全和异步补全
# Python全栈快餐教程(1) - 用Flask处理HTTP请求 ## 初识Flask Flask是最流行的Python web框架之一。 我们来写个最小的web应用,只有一个路由先跑进来玩玩吧。 ```python from flask import Flask # 定义flask app对象 app = Flask(__name__) # 处理路由
# 代码补全快餐教程(1) - 30行代码见证奇迹 下面是我用30多行代码,包含了很多空行和注释的代码写成的代码补全模型。我们先看看效果吧。 ## 补全效果案例 ### 先来看个比较普通的(Python, Keras) 已知: ``` y_train = keras.utils.to_categorical(y_train, num_classes)\ny_test =
# PyTorch快餐教程2019 (2) - Multi-Head Attention 上一节我们为了让一个完整的语言模型跑起来,可能给大家带来的学习负担过重了。没关系,我们这一节开始来还上节没讲清楚的债。 还记得我们上节提到的两个Attention吗? ![两种Attention机制](https://upload-images.jianshu.io/upload_images/
# PyTorch快餐教程2019 (1) - 从Transformer说起 深度学习已经从热门技能向必备技能方向发展。然而,技术发展的道路并不是直线上升的,并不是说掌握了全连接网络、卷积网络和循环神经网络就可以暂时休息了。至少如果想做自然语言处理的话并非如此。 2017年,Google Brain的Ashish Vaswani等人发表了《Attention is all you ne
# Javascript类型推断(4) - 隐藏层的更新 熟悉了整个流程之后,我们可以关注更多的细节。 前面讲训练过程时,没有讲enhance_data的细节。这一部分的主要功能是更新隐藏层。它的调用点在: ```python def train(): train_reader = create_reader(files['train']['file'], is_trainin
# CNTK中GPU信息的获取 ## device接口 CNTK提供了device接口,可以访问gpu的几个基本参数。 ### 获取所有的设备 首先可以通过cntk.device.all_devices方法来获取当前的设备 ```python >>> C.device.all_devices() (GPU[0] GeForce GTX 960M, CPU) ``
# Javascript类型推断(3) - 算法模型解析 ## 构建训练模型 上一节我们介绍了生成训练集,测试集,验证集的方法,以及生成词表的方法。 这5个文件构成了训练的基本素材: ```python files = { 'train': { 'file': 'data/train.ctf', 'location': 0 }, 'valid': { 'file':
# 代码补全漫谈(1) - 从TabNine说起 前不久,基于GPT-2模型的TabNine横空出世,在程序员界再次引起轰动。此前,国产的aixcoder,还有获得github ceo天使投资的Python编程利器kite等,已经收获了一轮又一轮的眼球。人工智能代替人编写代码的忧虑不时在知乎等网站上出现。 从程序语言处理的近亲 - 自然语言处理NLP的发展来看,这样的乐观不是没有道理的。从
# 强化学习快餐教程(1) - gym环境搭建 欲练强化学习神功,首先得找一个可以操练的场地。 两大巨头OpenAI和Google DeepMind都不约而同的以游戏做为平台,比如OpenAI的长处是DOTA2,而DeepMind是AlphaGo下围棋。 下面我们就从OpenAI为我们提供的gym为入口,开始强化学习之旅。 ## OpenAI gym平台安装 安装方法很简
# 强化学习快餐教程(2) - atari游戏 不知道看了上节的内容,大家有没有找到让杆不倒的好算法。 现在我们晋阶一下,向世界上第一种大规模的游戏机atari前进。 ## 太空入侵者 可以通过 ``` pip install atari_py ``` 来安装atari游戏。 下面我们以SpaceInvaders-v0为例看下Atari游戏的环境的特点。 #
# 强化学习快餐教程(3) - 一条命令搞定atari游戏 通过上节的例子,我们试验出来,就算是像cartpole这样让一个杆子不倒这样的小模型,都不是特别容易搞定的。 那么像太空入侵者这么复杂的问题,建模都建不出来,算法该怎么写? 别急,我们从强化学习的基础来讲起,学习马尔可夫决策过程,了解贝尔曼方程、最优值函数、最优策略及其求解。然后学习动态规划法、蒙特卡洛法、时间差分法、值
Javascript类型推断(1) - 获取token和类型 ## js类型推断的三种思路 第一种思路是用传统的编译类的方法,推断是没啥好办法,但是可以用来验证。 第二种思路是利用对象的属性或方法的调用来推断,JSNice就是这样做的。 第三种思路比较先进,充分利用到越来越流行的Typescript,通过学习Typescript生成的javascript进行监督学习。这种思路是Vi
# Javascript类型推断(2) - 开始训练吧 ## 准备训练数据 下面我们将上一节获取的类型数据信息进行预处理,转化为可以训练的数据。 代码在GetTypes.js中,会创建三个相关目录: ```ts let root = "data/Repos-cleaned"; let outputDirGold = "data/outputs-gold/"; let
# 代码补全漫谈(2) - Miltos Allamanis 上一回我们从火到爆表的TabNine说起,介绍了OoV问题引发的论战。 在进入细节之前,我们再八卦程序语言处理领域的一个重要研究者,微软研究院的Miltos Allamanis。
# 前端智能化漫谈 (4) - pix2code结果编辑距离分析 ## Levenshtein距离分析 从实用的角度,我们先采用莱文斯坦距离,也就是编辑距离来分析一下pix2code的结果。因为Levenshtein距离是从DSL角度来看,需要人工修改时的最小编辑次数,所以从这个角度来分析是有其意义的。 我们分别用greedy和beam 3两种方法对于datasets/andro
# 前端智能化漫谈 (3) - pix2code推理部分解析 上一节我们将pix2code的流程梳理了一遍,相信大家已经都可以跑起来了。 在谈pix2code的算法改进之前,关于训练和推理过程还有若干细节我们还需要进一步讨论一下。 ## onehot编码 上次我们讲到create_binary_representation,就是将单词转换成one hot编码。 ```
# 前端智能化漫谈 (1) - pix2code 自从有了GUI图形界面,就诞生了跟图形界面打交道的开发工程师,其中最大的一拨就演化成现在的前端工程师。不管是工作在前端、移动端还是桌面客户端,跟界面布局和切图等工作打交道是工作中的重要一部分。能够直接从设计稿生成代码,不仅是前端工程师的梦想,也是很多设计师同学的期望。 2017年,一篇名为《pix2code: Generating Code
# 前端智能化漫谈 (2) - pix2code实战篇 ## 将pix2code跑起来 先来干货介绍将pix2code跑起来的步骤: 1. 下载pix2code源代码 ``` git clone https://github.com/tonybeltramelli/pix2code ``` 网速慢的话需要等一等,.git就有700兆左右。
这一节开始我们介绍下通过LSP进行文本同步的方法。
有了一定的基础知识之后,我们就可以开始搭建一个client和server模式的lsp的插件了。
我们在第4节曾经介绍过LSP的初始化的握手过程。 我们可以在connection的onInitialize函数中来接收客户端的初始化参数,比如客户端的能力。
vscode插件快餐教程(5) - 代码补全 上节我们介绍了lsp的基本框架和协议的三次握手。下面我们先学习一个最简单的功能协议:给vscode发送一条通知。 LSP窗口消息 在LSP协议中,跟窗口相关的协议有三条: window/ShowMessage Notification window/showMessage Request window/logMessage Notification 我们可以使用Connection.window.sendxxxMessage函数来向客户端发送消息。
不管在做任何开发的时候,打印日志都是很重要的功能。 在Node.js中,最普通的打日志的方式就是console.log。 如果要写到文件中,或者是要跟高级的log系统对接,我们就需要专门的模块,比如log4js。
在有lsp之前,存在三个主要问题: 一是语言相关的扩展都是用该语言母语写的,不容易集成到插件中去。毕竟现在大量的语言都带有运行时。 二是语言扫描相关的工作都比较占用CPU资源,运行在vscode内部不如放在独立进程,甚至远程服务器上更好。
vscode语言扩展中一个重要的功能是代码扫描的诊断信息。这个诊断信息是以vscode.Diagnostic为载体呈现的。
上一次我们分享了人的大脑本质上是不喜欢不确定性的,人是轻信的,信念又是很难改变的。 那么我们如何去解决这个问题呢?
《Thinking in Bets》中文《对赌:信息不足时如何做出高明决策》读书笔记
对于一个编辑器来说,编辑命令是非常重要的部分。不过vscode更主要的作用不是写文本,而是写代码。所以我们第二讲就直入辅助编写代码的部分。
自己的业务开发,只有自己最了解,作为程序员,写自己的plugin来加速自己的开发效率,现在正是好时机。 vscode的plugin种类非常丰富,我们先从最传统的定义新命令说起吧。
Android源代码的下载和编译 2019版
使用uwolfer gerrit-rest-java-client获取Gerrit信息
使用流行的持久层框架MyBatis来访问数据库
使用JdbcTemplate访问数据库
如何像写一个普通程序一样写Java服务端程序
Python 3和Python 2的迭代器
程序员快速深度学习入门
如何用TFLearn,Keras等高层框架来学习自动生成莎翁的戏剧或者尼采的哲学文章
Tensorflow高层API
循环神经网络:LSTM和GRU
卷积的计算方法
梯度下降