Tween.js 是一个 过渡计算工具包 ,理论上来说只是一个工具包,可以用到各种需要有过渡效果的场景,实际上也是这样。 不个人目前最常用的就是与 threejs 结合使用。

一、引入工具包

1
npm install @tweenjs/tween.js

引入

1
var TWEEN = require('@tweenjs/tween.js');

个人习惯性的用 npm 安装引入 ,如果不习惯,下载源文件并通过 script 标签套进来也是一样的。

一般情况下,需要通过环境里面提供的辅助时间工具来实现。比如在网页上就是使用 window 下的 requestAnimationFrame 方法,低端浏览器只能使用 setInterval 方法来配合了。

阅读全文

fetch 是接收的意思,不管是世界上最好的语言 php 、还是使用最多的数据库 mysql 都有 原生的 fetch 函数,其它语言基本都有,今天说的就是 JavaScript 的原生函数 fetch.

Fetch 是什么?

目前来说,它是替代 Ajax 的一个原生解决方案,一般来说需要支持一定的 ES6 运行环境,好消息是大多数浏览器都能支持,坏消息是,如果你要支持IE,那就还不适用,不过可以用第三方的 Fetch 包来兼容。

你一定知道 Ajax ,它是上世纪90年代的 XMLHttpRequest 技术规范演化而来,用来发送网络请求的 浏览器原生API,如果写过原生 Ajax 的同学肯定眼熟下面一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var xhttp;
if (window.XMLHttpRequest) {
// code for modern browsers
xhttp = new XMLHttpRequest();
} else {
// code for old IE browsers
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Typical action to be performed when the document is ready:
document.getElementById("demo").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", "filename", true);
xhttp.send();

如果把以上代码转为 Fetch 的写法,就是

阅读全文

这几天华为在清理35岁以上员工传的沸沸扬扬,虽然有各种杂七八的不同说法,但不可否认,国内的 大环境 确实就是如此。

对于做技术面言(其实我就是说写代码),观察周围同事,基本都是年轻人的天下了,35岁以上的比较少。

眼看着自己混了这么多年头,再过些看着自己也步入35大关了,很久之前的一写代码的同事现在有当老板的,有开店的,有转做管理、业务、产品等的,不过应该还是有包括本人在内的一半左右还在写代码,现在可能是技术组长、技术经理之类,在自己的一块技术小天地里,独档一面。

搞技术是青春饭?

个人认为,如果你不在体制内,那么基本上百分之八十以上的职业都是不能让你干一辈子的,甚至有些在体制内职业,也不一定是铁饭碗了。

阅读全文

最近新开一个项目,一部分页面,大部分属于API,新开当然严格要求下Restful规范,要求技术栈是Java,对比了一下目前的几个框架,觉得 Jersey 和 Spring MVC 都不错,但是 Jersey支持 JSR311 规范,所以就没随主流使用 Spring MVC 了。

关于框架怎么搭,看下官方文档其实很快的,这里记录一搭建时遇到的一些问题。

技术栈说明

首先,使用 Maven 做为依赖管理工具,另外,除子很的的 Restful API 之外,我的项目里面还有一部分 Web 页面。所以多引入了 jersey-mvc-jsp 扩展,使用 jersey-media-json-jackson 返回 json 风格的数据。

另外,使用 Jetty 做为开发用的服务器,感觉比 Tomcat 实在方便太多。直接在 Maven 里面配置即可。

最后,我的前端页面使用了 Sass 进行 CSS 编译,使用 gulp、webpack、babel 进行 Js 编译与自动化。

阅读全文

大概五六年前接触过 Selenium 了,当时使用 Selenium 结合 jUnit 写过一套自动化测试与报警系统,但是效果不太好(和网络、数据各方面都有关系),而且仅仅几十个用例虽然不然,但写的超级心烦,每次都要找 xpath 一个操作写好多行 java代码。

现在由于有差不多的需求,使我回想到了它。所以拿出来再重温下,当然时代变了,现在更流行的 phantomjs 也下载试用了一下,由于几个不能忍的Bug档住了我的去路,所以还是先保持一下观望的态度了。再者 Selenium 是 Thoughtwork 公司出品,个人比较相信他们的水平。

Selenium 这个技术确实很有趣,上次使用是做一套自动化测试的工具,现在用它来做一些网页插件,它也可也做爬虫,一般的爬虫对 javascript 产生的内容,ajax 等没有读取能力,这时候 headless 爬虫就有用武之地了。

简单使用

引入依赖

1
2
3
4
5
6
7
8
9
10
11
 <dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.0.1</version>
</dependency>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.0.1</version>
</dependency>

阅读全文

降维是属于无监督学习的一种。 通常用于数据计算中的化简,预处理和可视化分析。常见算法有PCA、NMF、LDA等等。

PCA降维算法

特征向量、协方差矩阵

如果一个矩阵满足这个公式 $A \vec{v} = \lambda \vec{v} $ ,其中,$A$ 是一个方阵,那么,就可以说 $\vec{v} $ 是这个矩阵的特征向量,$\lambda$ 则是这个矩阵的特征值 。

协方差可以用于解释两个属性之间的正向相关或负向相关性。 协方差距阵 是由变量的协方差值构成的一个距阵。

PCA原理

我们把一个矩阵的 协方差矩阵 对应的 特征向量 称为这个矩阵的 主成分,那么再按照其对应的 特征值,那么将矩阵的这些特征值求出,排序即可。

如果要使用 PCA 算法将一个 M维的数据集降到 N维,那么就是取这个矩阵的前 N 个特征向量,相乘,即可得到一个投影矩阵,具体的过程可以参考相关资料。

阅读全文

很久以前,我们上一些新闻网站,购物网站点过一些页面后,就会不停的有类似“相似推荐”的东西,我们基本上是不会点进去看的,因为推荐的太水了,不费脑子想就知道是基于一些标签的推荐,毫无新意。

现在的广告就有了很大进步,很多广告看上去就是 为你而设 的。关于推荐算法,最多使用的是 协同过滤。 最简单的协同过滤算法是 Slope One

今天就自己不用框架,纯手打一个 Slope One 算法出来!grin

Slope One算法

如下数据,已经三个用户对三部电影在豆花网上的评分如下,问号是因为他们没有评分,所以暂时没有,那么:求问号内的值。(也就是他们如果看了电影再来评,可能会评多少分)?

阅读全文

有个成语叫 物以类聚,人以群分,就比较形象的解释了聚类的现象。聚类属于无监督学习,提供数据时,只需要提供对应算法的分析参数,不需要提供每条数据所属的类别。

聚类的算算法有很多,用的最多的是 K-MeansDBScan 算法,这里也只简单介绍这两种。 其它的聚类算法也有很多,比如: K-medoids近领传播算法Birch等等。

K-means

K-Means 是比较常用的聚类方法之一。原理也很容易理解,K-Means算法必须有一个参数K,代表最终聚出类别的个数。其它参数可根据使用的算法库提供的API进行扩展,比如距离度量方式等,初始点的放置等。

K-Means 的流程如下

  1. 初始化数据,在数据所在的空间中放置K个点,(K个Label)
  2. 计算空间中所有的点分别到这K个点的距离,离每个点最近的那个( Label ),就是那个点的 Label
  3. 得到了K个簇(每个Label都有离自己最近的一群小弟了),每个簇的点,重新计算中心点,做为新的K个点的位置( Label 的新位置)
  4. 重新计算 2-3-2-3,最后结果差不多不变或变化很小时,聚类就稳定了。

阅读全文