Netty 4.x User Guide 个人翻译

官网链接请戳:http://netty.io/wiki/user-guide-for-4.x.html,由ZephyrJung翻译 表示Google翻译现在真是异常强大,我甚至觉得以后再碰到英文文档都不用人翻了,全文粘过去好了 翻译也是一个学习的过程,大家共同努力吧有空不妨到黑客派社区看看,大牛坐镇,应有尽有戳戳戳 Netty 4.x用户手册 前言 问题 如今,我们使用目标通用的应用或库来进行相互间的通讯。例如,我们常使用HTTP客户端库来检索来自服务端的信息,并通过网络服务(web service)来进行一个远程过程调用。然而,一个通用目标的协议或者它的实现有时候并不能尽善尽美。就好像我们不会用一个通用目标的HTTP服务器来交换大型文件,电子邮件信息,以及近乎实时的信息如金融信息和多人游戏数据。这些都要求针对特定的目标来实现高度优化的协议。例如,你可能想要实现一个HTTP服务器能够针对基于Ajax聊天应用,流媒体或大型文件传输来优化。你甚至会想设计并实现一个全新的协议来为自己的需求精确的量身定做。另一个不可避免的场景是处理历史遗留的专用协议来保证和老系统的互通性。这个场景的重点在于....

阅读全文 »

2016 - 年度总结 有更新!

2016年总结 前言 2016对我而言真是不平凡的一年,大喜大悲都经历过,每个人的生活都可以写一本书,我也没有什么特别的,所以不如不提…… 去年是年前离职的,可能是老大想省掉我年假这几天的工资,手续办得异常迅速,我也是实在受不了了,而且无法再接受出差,省掉就省掉吧……结果离职前参加的公司年会抽到了二等奖——PS4主机,hiahia~(可惜不是Xbox,游戏贵,还少,也不好买,同时只有一个手柄……好吧我住嘴) 工作 年后先考了科目三,在郑州找了几天工作,最终还是回到了北京,来到了现在这个公司。 新单位的体验确实焕然一新,固定的办公地点(上家从东单搬到通州,又回到中关村,又去了上海……外包没人权啊。。),供应咖啡(虽然总来迟一步吧。。)的茶水间,可以升降的桌子,分工明确的岗位(开发、产品、运维、技术支持、测试……),以及不那么严格但大体符合的工作流程(需求、开发、测试、上线),各种项目管理工具,redmine,bugfree,beacon,hudson(大部分只是知道名字,作为小弟基本不会用到)感受到了与在外包截然不同的气息。刚毕业的软件或计算机专业的童鞋们,如果对自己的水平有一定的信心,....

阅读全文 »

jsp:forward传参乱码问题

群里一个小盆友写了两个jsp,通过jsp:forward传参时总是乱码,而页面、tomcat的编码都有设置,我一时激动就找了找解决办法 两个JSP分别如下: test1.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title<title> <head> <body> <jsp:forward page="test2.jsp" > <jsp:param name="name" value="你好"/> <jsp:param name="age" value="111"/> <jsp:forward> <body> <html> test2.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %>....

阅读全文 »

工作日志符号系统

这次做项目,写了工作日志,一方面记录工作中的问题,一方面记下工作中得到的收获,如果能够每次都这样做,日积月累绝对是一笔财富 可能是我工作太闲?那也不是啊,我看大家都差不多 不过确实有的时候会忙到没有时间考虑别的,紧急的时候另当别说,但是一般情况下我觉得还是可以的,并且记下来对于工作也很有帮助,常用的类,页面对应的控制器,记下来,只需要找一次,以后看日志就行,不用再跟代码。 收到gitmoji以及markdown的启发,使用了Typora作为工作日志编辑器,如此可以使用MD语法,轻松排版,同时可以像github/Hacpai一样,通过表情别名输入emoji,写了几天之后,归纳如下: 符号说明: ​✨ sparkles 添加新文件 ​🎨 art 修改文件 ​😰 cold_sweat 有疑问,需确认(非技术上的问题) ​🚧 construction 未完成 ​🐛 bug 有问题,需确认 ​📝 memo(可能)还需要做的事情 ​👏 clap 学到了,知道了 ​❓ questi....

阅读全文 »

Go by Example: Methods

https://gobyexample.com/methods package main import "fmt" type rect struct { width, height int } func (r rect) area() int { return r.width * r.height } func (r rect) perim() int { return 2r.width + 2*r.height } func main() { r := rect{width: 10, height: 5} fmt.Println("area: ", r.area()) fmt.Println("perim:", r.perim()) rp := &r fmt.Println("area: ", rp.area()) fmt.Println("perim:", rp.perim()) } 实在不明白area和perim有什么区别(加没加星号) 既然没有private、public关键字,那就意味着,大写包外可用,小写包外不可用?

阅读全文 »

通过Latke-Demo对Latke工作流程的初步分析 有更新!

Latke代码看到IOC包后就彻底懵逼了,从已看过的几段代码来看,都是各种set、get,变量名称含义抽象,不知所云。由此感到单纯的读代码恐怕无法理解IOC包的实现逻辑了。于是决定运行一下demo,来跟踪一下代码。以下是latke-demo项目从请求发起到响应结束时经过的代码段(层级关系可能不太正确,但是大致流程就是如此) 虽然还没有完全明白,但是跟踪下来感觉颇有收获,待慢慢补充细节 1. DispatcherServlet.service //以此作为起点。此处是最原始的servlet,配置在web.xml中,再细节的方面,暂时可以当做黑盒了。 //不得不说,jsp+servlet作为基础,当年没有好好学是个错误。(垃圾讲师误人啊……) protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { //HTTPRequestContext,Latke封装,没有定义构造器 final HTTPRequ....

阅读全文 »

Latke Code View - IOC.annotated

org.b3log.latke.ioc.annotated.AbstractAnnotatedCallableImpl
org.b3log.latke.ioc.annotated.AnnotatedConstructorImpl
org.b3log.latke.ioc.annotated.AnnotatedFieldImpl
org.b3log.latke.ioc.annotated.AnnotatedMethodImpl
org.b3log.latke.ioc.annotated.AnnotatedParameterImpl
org.b3log.latke.ioc.annotated.AnnotatedTypeImpl

阅读全文 »

Latke Code View - Cache 有更新!

未注明的引用均为Java内部包 所有setter、getter、logger等逻辑无关代码均忽略不计 忽略了一些常见注解 org.b3log.latke.cache.local.memory.AbstractMemoryCache import org.b3log.latke.cache.Cache; public abstract class AbstractMemoryCache<K extends Serializable, V extends Serializable> implements Cache<K, V> { private long maxCount = Long.MAX_VALUE; private long hitCount; private long missCount; private long putCount; private long cachedCount; protected final void hitCountInc() { hitCount++; } protected final void missCountInc....

阅读全文 »

Spring基础篇 - Spring In Action读书笔记 有更新!

一、 Spring之旅 1. 简化Java开发 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小入侵性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 2. 依赖注入 通常,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。如下面的Knight类: package com.springinaction.knights; public class DaselRescuingKnight implements Knight{ private RescueDamselQuest quest; public DamselRescuingKnight(){//自己管理依赖对象 quest=new RescueDamselQuest(); } public void embarkOnQuest() throws QuestException{ quest.embark(); } } 耦合具有两面性。一方面,紧密耦合的代码难以测试,难以复用,....

阅读全文 »

【XML】《XML实用教程》笔记 有更新!

XML是eXtensible Markup Language的缩写,称之为可扩展标记语言。 符合W3C制定的基本语法规则的XML文件称为规范的XML文件,规范的XML文件如果再符合额外的一些约束就称之为有效的XML文件。 一个规范的XML文件应当满足如下语法规则: XML文件用“XML声明”开始。 XML文件有且仅有一个根标记 XML的非根标记都必须封装在根标记中。 非空标记必须由“开始标记”与“结束标记”构成。 XML文件的标记必须形成树形结构,即标记不允许出现交叉。 空标记没有“开始标记”和“结束标记” XML声明 一个规范的XML文件应当以XML声明作为文件的第1行,在其前面不能有空白、其他处理指令或注释。如: 还可以添加属性:standalone,指为yes或no,表明XML文件是否是完全自包含的,即是否引用了外部“实体”。 标记 一个标记包含的内容由两部分构成:文本数据部分和子标记部分。一个标记包含的文本数据部分可以有普通字符、CDATA段和实体引用。 根标记:每个XML文件有且仅有一个根标记,其他标记都必须封装在根标记中。 空标记:即不包含子标记或文本内容的标记,如:....

阅读全文 »

Love2d 几何坦克大战 - 1

经过两天断断续续的代码,实现了单个坦克的基本行为,也就是移动,射击,效果如下 怎么样,看起来是不是有模有样? 而这个实现代码其实也非常简单,根据之前的教程,加上官方 wiki 的查询,以及群里大神的一两句指点就可以做出来啦~ 示例的完整代码托管在 github 上,请戳链接 这里重点介绍部分代码(也就是根据大神指点查询 wiki 的部分) --画坦克躯干 love.graphics.origin() rotateGraph(centerX,centerY,Tank.bodyA); love.graphics.rectangle("line", bodyX, bodyY, bodyW, bodyH) --画坦克头部 love.graphics.origin() rotateGraph(centerX,centerY,Tank.headA) love.graphics.circle("line", centerX, centerY, Tank.headR, Tank.headS) love.graphics.rectangle("line",fireX,fireY,Tank.fireW,....

阅读全文 »

ETL 工具 - Kettle 的基本使用

最近做的项目用到了 ETL 工具 Kettle,这个工具相当好用,可以将各种类型数据作为数据流,经过处理后再生成各种类型的数据。正如其名“水壶”,将各个地方的水倒进水壶里,再用水壶倒入不同的容器。不过一来初学乍用,二来对此任务不是很感兴趣,研究的不是很深入,可能是以一种不科学的方法使用的,但观教程,常用的内容似乎也涉及到了,并且 Y 大说过,要善于总结,于是有了这篇,作为入门说明吧。 一、下载与安装 官网地址 大概 700~800M,下载好解压缩即可。当然,要求 JDK 环境(似乎有自带) 二、任务(.kjb)与转换(.ktr) Kettle 工具的主界面-作业 简单地说,一个转换就是一个 ETL 的过程,而作业则是多个转换、作业的集合,在作业中可以对转换或作业进行调度、定时任务等(据说定时不好用,可以通过其他方式,比如 linux 的 crontab 命令,不过实际使用中,这个指令也不大好使,有待查看日志探明原因。) 我在实际过程中,写的流程不是很复杂,当数据抽取需要多步骤时,分成多个转换,在集合到一个作业里顺序摆放,然后执行即可,不放到作业里的话,要对多个转换依次执行命令,比较麻....

阅读全文 »

Latke Code View - Cron

org.b3log.latke.cron.Cron import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.urlfetch.HTTPRequest; import org.b3log.latke.urlfetch.URLFetchService; import org.b3log.latke.urlfetch.URLFetchServiceFactory; public final class Cron extends TimerTask { public static final int TEN = 10; public static final int SIXTY = 60; public static final int THOUSAND = 1000; private String url; private String description; private String schedule; private long period; public Cron(final String ....

阅读全文 »

Latke Code View - Latke.java

大致的代码结构: java b3log cache,cron,event,image,intercept,ioc logging,mail,model,plugin,remote,repository service,servlet,taskqueue,thread,urlfetch,user,util Latkes.java Keys.java,Runtimetabase.java,RuntimeEnv.java,RuntimeMode.java json weborganic resources beans.xml Latkes.java 下面那一行涉及的代码基本没有逻辑,全是枚举或者常量值的定义,想来无可研究。 开始的字段定义继续忽略,首先是静态代码块(删去了 LOGGER): static { try { final InputStream resourceAsStream = Latkes.class.getResourceAsStream("/latke.properties"); if (null != resourceAsStream) { LATKEPROPS.l....

阅读全文 »

LoveExample-18 向指定的位置发射子弹

Long time no see~ 虽然可能本来看的人也不多吧 示例在视觉上其实很朴素,不过实现了定点射击的功能,这个功能感觉还是比较常用的。 大概思路就是,在 update 方法中,不断将获取到的鼠标位置(如果点击了话)放到表中,同时又不断的从表中取出存放的子弹信息进行绘制。 逻辑上并不难,但是有些 lua 语言本身的点。 代码如下: function love.load() SPEED = 250 StartPos = {x=250, y=250, width=50, height=50} --The starting point that the bullets are fired from, acts like the shooter. bullets={} --The table that contains all bullets. end function love.draw() --Sets the color to red and draws the "bullets". love.graphics.setColor(255, 0, 0) --This loops t....

阅读全文 »

LoveExample-17 使用特殊字体

这里只是英文字体,似乎对中文字体支持的不是很好 还好,按照我对它的用法,大概是写不了多少中文的 其实非剧情类的,一般的英文也没什么障碍了 -- Example: Using a truetype font function love.load() -- Create a new font with 32pt size and set it as default. local f = love.graphics.newFont("assets/Grundschrift-Normal.otf", 24) love.graphics.setFont(f) end text = [[ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incid....

阅读全文 »