乔布斯:遗失的访谈(1995)
这是乔布斯在1995年接受的一次采访的视频。无意中看到深受触动。收藏,分享。
将Spring Boot Application设为服务
通过Spring Boot构建的项目,可以在pom中设置,使用maven生成jar包,而非传统的war包。相较war包,jar包简化了实施的难度,但在windows下,需要想办法将jar设置成开机启动,否则重启就是个悲剧了。将ja包装为一个windows 服务是一个很好的办法。下面具体说说怎么做。
如何构建可运行Jar<packaging>jar</packaging> <!--这里是jar--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version></parent> <dependencies> ....</dependencies> <build> <plug ...
内网环境中的BS系统前端埋点
行业软件的运行环境通常有三个特点:没有外网、浏览器版本低、业务优先。我们要做前端埋点,就必须考虑这三点。
监控谁行软的前端埋点,主要是为了分析用户的使用路径,用以改善冲浪率;分析用户在页面的驻留时间,用以改善信息传递的准确性;识别出哪些功能是主要关注功能。基于此点,我们设置监控的对象应为:
页面的button元素
页面的a元素
浏览器的页面后退
浏览器的页面关闭
记录操作时间、操作人、操作元素的相关信息、url轨迹
怎么监控使用js对button和a绑定onclick事件,并捕获page的onbeforeunload事件,结合url轨迹来判断是返回还是关闭
怎么记录对于频繁操作,不应每次触发都往后端post数据,最好使用localStorage;先将埋点捕获的日志写入localStorage中,然后择机提交,比如页面关闭时、用户退出时、或者每5分钟,提交后清空对应的key值。
附录
localStorage的兼容性
九种缓存机制对比
Tess4J文字识别过程记录-未完成...
考虑到产品未来可能需要对图片中的文字进行识别分析,所以抽空我做了一点初步的尝试。暂且写下来做个记录吧。
选型经过一番寻找,锁定了tesseract。tesseract是一个开源的OCR引擎,支持中文识别。Tess4J提供了tesseract面向java的api封装。
安装
使用tess4j必须先安装tesseract,我的系统环境是centos,可以很方便的使用yum安装。为了识别中文还需要安装中文datafile。
sudo yum install tesseract sudo yum install tesseract-langpack-chi_sim.noarch //简体中文支持
其他操作系统,需要参考tesseract的说明安装。
然后在java项目中,通过maven引入tess4j。目前3.x版本里最新的是3.4
<dependency> <groupId>com.sun.media</groupId> <artifactId>jai_imageio</artifactId> < ...
解决 Spring Cloud Zuul 前端跨域请求问题
正在做的一个微服务架构的项目中,不出意料的在前端请求时遇到了跨域的问题 stats code: 401。以下就是我们采取的解决方案。
在zuul的入口类,即注解为@EnableZuulProxy的类中,增加以下代码:
@Beanpublic CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); //允许跨域 config.setAllowCredentials(true); //允许向该服务器提交请求的URI,*表示全部 config.addAllowedOrigin("*"); //允许访问的头信息,*表示全部 config.addAllowedHeader("*"); //允许的method ...
ajax-post参数传递方式
今天在写一个测试的ajax请求的时候,突然忘记了怎么用request body 传参。借这个机会,总结一下。当从前端通过ajax向后台发起一个post请求时,一共有三种方式传递参数。
通过url传递参数
ajax:通常采用形如以下的js代码。这样实质上是拼成了这样一个url : http://lefer.cn/getUserInfo?username=lefer
$.post({ url: "http://lefer.cn/getUserInfo", data: { username:"lefer", }, success: function( result ) { alert(result); }}),
java:通常在controller中采用形如以下的代码来接受参数。
@RequestMapping("/getUserInfo")public void getUserInfo(@RequestParam String use ...
设计模式演绎-工厂方法模式
定义
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclasses.
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他类。
通用类图
Product 是抽象产品类,ConcreteProduct是对Product类的具体实现
Creator 是抽象创建类,也就是抽象工厂,ConcreteCreator是实现工厂,如何创建产品类就是在ConcreteCreator类中实现。
通用代码/* 抽象产品类 */public abstract class Product { // 产品类的公共方法 public void method1(){ //实现业务逻辑 } //抽象方法: 在实现类中必须实现 public abstract void met ...
赛门铁克CA不被信任后,我们用什么
今天(2017/8/1),cnbeta上报道Chrome计划在2018年取消对赛门铁克CA的信任。我的网站之前的ca证书是从阿里云和腾讯云申请的免费证书,都是从赛门铁克签发的。神仙打架,凡人遭殃。有了这档子事,我就开始着手更换一个可靠的证书。经过再三筛选,最终决定使用Let’s encrypt提供的证书(免费)。原因是这家机构是大学背景,而且谷歌参与出资。下面是具体的操作过程。
安装 ACME client按照官方推荐,采用Certbot作为ACME客户端。
访问Certbot网站,选择Http服务器和操作系统,会自动提示对应的Certbot客户端。我的服务器是Nginx+Centos 6,根据提示做以下操作
wget https://dl.eff.org/certbot-autochmod a+x certbot-auto
获取证书
第一次签发证书的命令很慢很慢,需要安装许多依赖包和python组件。如果长久没反应,杀掉重来。多试几次。
sudo ./certbot-auto --nginx certonly # 建议带上certonly参数,否则程序会 ...
Spring Boot添加静态资源目录
Hexo的好处很多,坏处之一就是图片的处理了。虽然可以在_post下创建静态资源目录,但我是把这个目录当作笔记目录,多了一些文件夹强迫症真的受不了。而第三方图床服务,总不能放心。刚好我的服务器上同时还有个jar在跑,目的是提供我的api,那么就通过这个去实现我自己的图床吧。
实现方式这个api.jar采用的是Spring Boot架构,虽然可以通过字节流去定义一个RESTful API提供图片服务,但觉得是高射炮打蚊子。还是直接增加一个外部资源目录,通过访问静态资源的方式去提供图片。本地通过ftp上传图片在这个目录。后续有必要的话,还可以建一个Git仓库,通过hooks转发到这个目录里去。
具体步骤增加一个配置类,继承WebMvcConfigurerAdapter类,并重写addResourceHandlers方法。
package com.lefer.bed;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annota ...
Spring AOP实现零侵入日志记录
软件系统的日志输出是必不可少的,目前在做的RESTful系统中,需要考虑比较复杂的日志处理,但又不想让开发人员在写每个API的时候都去考虑日志的处理,干扰正常的开发,于是决定采用AOP实现零侵入的日志处理。以下是核心思路。
引入AOP依赖在项目的pom.xml中引入AOP依赖,对于Spring Boot来说应如下。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
编写Aspect类package com.lefer.demo4doc.aspect;import com.fasterxml.jackson.databind.ObjectMapper;import com.lefer.demo4doc.common.Result;import io.swagger.annotat ...