FE DK Debugging

2016-03-22 00:00:00 +0000

Get Request:

Curl:

$ curl -i http://localhost:8080/api/test2.json\?name\=233
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 17 May 2016 16:56:00 GMT

{"value":"233"}

Pic:

Java Spring Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @RestController
 * 获取 json 数据
 * @param name
 * @return model
 */
@RequestMapping("/api/test2.json")
public @ResponseBody ModelMap greeting(@RequestParam(value="name", defaultValue="World") String name) {
    ModelMap model = new ModelMap();
    System.out.println("hello");
    System.out.println("value " + name);
    model.addAttribute("value", name);
    return model;
}

Post Request:

Send Form:

Curl:

$ curl -d "id=2&content=Maoyan" http://localhost:8080/api/test.form

id=2&content=Maoyan

Pic:

Java Spring Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
 * 定义 Greeting
 */
public class Greeting {
    private long id;
    private String content;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

/**
 * @Controller
 * 发送 form 数据
 * @param greeting
 * @return String
 */
@RequestMapping(value="/api/test.form", method=RequestMethod.POST)
public @ResponseBody String printForm(Greeting greeting) {
    System.out.println("Hello, greeting form");
    System.out.println(greeting.getContent());
    System.out.println(greeting.getId());
    String result = "id=" + greeting.getId() + "&content=" + greeting.getContent();
    System.out.println(result);
    return result;
}

Send JSON:

Curl:

$ curl -H "Content-Type: application/json" -X POST -d '{"id":13313,"content":"dfasdf"}' http://localhost:8080/api/test.json

{"id":13313,"content":"dfasdf"}

Pic:

Java Spring Code:

1
2
3
4
5
6
7
8
@ResponseBody
@RequestMapping(value="/api/test.json")
public ModelMap printJson(@RequestBody ModelMap model) {
    System.out.println("Hello, model");
    System.out.println(model);
    System.out.println(model.get("id")); // if not id, it will be null
    return model;
}

Warninig:

  • 有个槽点,我在 Java 老是想用单引号,然后报错了。。。
  • ResponseBody 和 RequestBody 是不一样的,同样的坑踩多了就愚蠢了。

References:

Serendipity

2016-03-20 00:00:00 +0000

憧憬

这是一个很有趣的世界。

JavaScript 秘密花园

许可

JavaScript 秘密花园在 MIT license 许可协议下发布,并存放在 GitHub 开源社区。 如果你发现错误或者打字错误,请新建一个任务单或者发一个抓取请求。 你也可以在 Stack Overflow 的 JavaScript 聊天室找到我们。

http://bonsaiden.github.io/JavaScript-Garden/zh/

Others

有哪些短小却令人惊叹的javascript代码?

奇技淫巧:

1
2
3
4
5
6
7
8
9
10
11
// 赋值
return { 1: '', 0: '' }[value] // value = 0 || 1
+new Date() // new Date().getTime()
var b = value || 0 // 有 value 的时候,b 为 value

// True && False
Number(false) || +false // 0
Number(true) || +true // 1
~~!true // 0
!!~0 // true index 场景下可用
!!~-1 // false

hash 无法通过 url 直接传递给后端

可以用 JS 获取:

$ var type = window.location.hash.substr(1);

或者用 encodeURIComponent() 方法转义:

encodeURIComponent('#')
"%23"

References:

http://www.ruanyifeng.com/blog/2011/03/url_hash.html

mac package manager

2016-03-20 00:00:00 +0000

Mysql manage

npm manage

###

Style Guide

2015-09-16 00:00:00 +0000

谈修养

2015-08-23 00:00:00 +0000

朱光潜 《谈修养》 阅读笔记

我编程,我快乐

2015-08-16 00:00:00 +0000

[美] Chad Fowler 《我编程,我快乐》 阅读笔记

IT 职场不能只注重技能的提升,还要关注自己的职业发展。

如果我有更多的钱,或许我会更快乐;如果我的成就被认可,或许我会更快乐;如果我升职或者有名望了,或许我会更快乐。但是如果你把目光放远一些,你就会发现自己为了追求更高的薪水,或许就会失去了快乐。

职业发展:

  • 选择市场
  • 投资
  • 执行
  • 市场

选择市场

找一个团队,让自己成为“最差”,通过与这个项目中其他程序员合作,提高自身能力。可以通过业余时间做兼职,练习新技术,提供自身技能

找一个开源项目,浏览其待处理列表与官方讨论区,编写一个功能或者修正一个 BUG,代码要模仿这个项目的代码风格,甚至让原作也区分不出来。提交补丁,如果你做得好,项目会接受它,如果项目设计团队不同意你的观点,就将他们的反馈加入到你的设计中再次提交,或者记录他们做出的改变。最终成为这个项目团队可信赖的一员。你就学到了很多。

热爱这份职业,对其感兴趣,将其视为动力。

成为通才,什么都懂一点;成为专才,已经处理过工作中可能遇到的 80% 的问题,并且拥有足够的知识来应付另外 20% 的问题。

热爱它,不然就离开它。

在产品上投资

主动问,主动学习。(不要要求别人来教你)。比如说考虑一个问题,你不完全懂的问题:它是如何工作的?为什么会发生这种情况?

了解公司是怎么赚钱的,这个可以创造性帮助公司赚取利润。(可以尝试阅读《The Ten-Day MBA》)

良师益友,寻找榜样。然后自己成为良师益友,给别人讲解难题,让自己真正理解知识。

执行

尽全力第一时间完成工作,规定自己每天都有成绩,确保目标和工作与公司的目标一致。专注当下的工作,安分守己,坚持下去。

竞赛无聊的工作任务,看谁做到最好。

自己创造了多少价值?对得起工资吗?

居安思危,自己没有那么重要。

做项目就像马拉松,提高工作效率,规划工作时间,减少工作时间。

面对错误

  • 发现问题第一时间提出
  • 接受批评
  • 提供解决方法
  • 寻找帮助

清楚知道自己能否做到,勇敢说“不”。能完成当然也要勇于完成。

记录自己的恐慌,克服它。制定计划,今天要做什么。

推销。。。不仅仅是迎合

宣传自己,与人沟通,表现自己。雨厉害的人交往。

保持技术领先

保持警惕,学习学习学习。每周找出时间研究尖端技术。不要满足于自己的工作,不要把自己的身份定位于程序员。做好计划,做好职业发展的打算,尝试其他身份,看有什么不同。

关注做事的过程,而不只是结果,关注任务本身。给自己定一个蓝图,推动自己不断发展。

注意观察市场变化,留意那些技术达人。

自我反省。设立目标,每天进步。

保持好奇心。

CSS 权威指南

2015-08-09 00:00:00 +0000

[美] Eric A. Meyer 《CSS 3权威指》 阅读笔记

这本书是 CSS 专家 Eric A. Meyer 所著。该书涵盖了 CSS 的各个部分,包括属性、标记、特征和实现。

这本书在 2001 年是第一版,第一版的定位是对 CSS1的完整描述,同时给出 CSS2的概述。在 2007 年的时候出了第三版,展示了当时 CSS 最新的规范(CSS2 和 CSS2.1)。在 2011 年 9 月,CSS 3 正式开始被推荐使用。本书的定位是 CSS 2.1 + HTML 4.0 。

  • 精妙地设计文本风格
  • 用户界面、表格布局、列表以及自动生成的内容
  • 浮动和定位细节
  • Font family 和 Fallback 机制
  • 盒模型(box model) 工作机制。

该书也介绍了其他浏览器支持的新 CSS3 的选择器。

HTML 5与CSS 3权威指南 上册

2015-07-30 00:00:00 +0000

陆凌牛 《HTML 5与CSS 3权威指》 阅读笔记

第1版2年内印刷近10次,累计销量超过50000册,第2版首先从技术的角度结合最新的HTML 5和CSS 3标准对内容进行了更新和补充,其次从结构组织和写作方式的角度对原有的内容进行了进一步优化,使之更具价值且更便于读者阅读。

陆凌牛,资深Web开发工程师、软件开发工程师和系统设计师。从事Web开发多年,对各种Web开发技术(包括前端和后端)都有非常深入的研究,经验极其丰富。

第1章 Web时代的变迁

1.1 迎接新的Web时代

1.1.1 HTML 5时代即将来临

1.1.2 HTML 5的目标

1.2 HTML 5会深受欢迎的理由

1.2.1 世界知名浏览器厂商对HTML 5的支持

1.2.2 第一个理由:时代的要求

1.2.3 第二个理由:Internet Explorer 8

1.3 可以放心使用HTML 5的三个理由

1.4 HTML 5要解决的三个问题

第2章 HTML 5与HTML 4的区别

2.1 语法的改变

2.1.1 HTML 5的语法变化

2.1.2 HTML 5中的标记方法

2.1.3 HTML 5确保了与之前HTML版本的兼容性

2.1.4 标记示例

2.2 新增的元素和废除的元素

2.2.1 新增的结构元素

2.2.2 新增的其他元素

2.2.3 新增的input元素的类型

2.2.4 废除的元素

2.3 新增的属性和废除的属性

2.3.1 新增的属性

2.3.2 废除的属性

2.4 全局属性

2.4.1 contentEditable属性

2.4.2 designMode属性

2.4.3 hidden属性

2.4.4 spellcheck属性

2.4.5 tabindex属性

第3章 HTML 5的结构

3.1 新增的主体结构元素

3.1.1 article元素

3.1.2 section元素

3.1.3 nav元素

3.1.4 aside元素

3.1.5 time元素与微格式

3.1.6 pubdate属性

3.2 新增的非主体结构元素

3.2.1 header元素

3.2.2 hgroup元素

3.2.3 footer元素

3.2.4 address元素

3.3 HTML 5结构

3.3.1 大纲

3.3.2 大纲的编排规则

3.3.3 对新的结构元素使用样式

第4章 表单及其他新增和改良元素

4.1 新增元素与属性

4.1.1 新增属性

4.1.2 大幅度地增加与改良input元素的种类

4.1.3 对新的表单元素使用样式

4.1.4 output元素的追加

4.2 表单验证

4.2.1 自动验证

4.2.2 取消验证

4.2.3 显式验证

4.3 增强的页面元素

4.3.1 新增的figure元素与figcaption元素

4.3.2 新增的details元素与summary元素

4.3.3 新增的mark元素

4.3.4 新增的progress元素

4.3.5 新增的meter元素

4.3.6 改良的ol列表

4.3.7 改良的dl列表

4.3.8 加以严格限制的cite元素

4.3.9 重新定义的small元素

4.3.10 安全性增强的iframe元素

4.3.11 增强的script元素

第5章 HTML编辑API

5.1 Range对象与Selection对象

5.1.1 基本概念

5.1.2 Range对象的属性与方法

5.1.3 Selection对象的属性与方法

5.2 命令

5.2.1 基本概念

5.2.2 execCommand方法

5.2.3 queryCommandSupported方法

5.2.4 queryCommandState方法

5.2.5 queryCommandIndeterm方法

5.2.6 queryCommandEnabled方法

5.2.7 queryCommandValue方法

5.2.8 可以在各种浏览器中运行的所有命令

第6章 绘制图形

6.1 canvas元素的基础知识

6.1.1 在页面中放置canvas元素

6.1.2 绘制矩形

6.2 使用路径

6.2.1 绘制圆形

6.2.2 如果没有关闭路径会怎么样

6.2.3 moveTo与lineTo

6.2.4 使用bezierCurveTo绘制贝济埃曲线

6.3 绘制渐变图形

6.3.1 绘制线性渐变

6.3.2 绘制径向渐变

6.4 绘制变形图形

6.4.1 坐标变换

6.4.2 坐标变换与路径的结合使用

6.4.3 矩阵变换

6.5 图形组合

6.6 给图形绘制阴影

6.7 使用图像

6.7.1 绘制图像

6.7.2 图像平铺

6.7.3 图像裁剪

6.7.4 像素处理

6.8 绘制文字

6.9 补充知识

6.9.1 保存与恢复状态

6.9.2 保存文件

6.9.3 简单动画的制作

第7章 History API

7.1 History API的基本概念

7.2 History API使用示例

7.2.1 使用History API

7.2.2 结合使用Canvas API与History API

第8章 本地存储

8.1 Web Storage

8.1.1 Web Storage概述

8.1.2 简单Web留言本

8.1.3 作为简易数据库来利用

8.1.4 利用storage事件实时监视Web Storage中的数据

8.2 本地数据库

8.2.1 本地数据库的基本概念

8.2.2 用executeSql来执行查询

8.2.3 使用数据库实现Web留言本

8.2.4 transaction方法中的处理

8.3 indexedDB数据库

8.3.1 indexedDB数据库的基本概念

8.3.2 连接数据库

8.3.3 数据库的版本更新

8.3.4 创建对象仓库

8.3.5 创建索引

8.3.6 索引的multiEntry属性值

8.3.7 使用事务

8.3.8 保存数据

8.3.9 获取数据

8.3.10 根据主键值检索数据

8.3.11 根据索引属性值检索数据

8.3.12 复合索引

8.3.13 统计对象仓库中的数据数量

8.3.14 使用indexedDB API制作Web留言本

第9章 离线应用程序

9.1 离线Web应用程序详解

9.1.1 新增的本地缓存

9.1.2 本地缓存与浏览器网页缓存的区别

9.2 manifest文件

9.3 浏览器与服务器的交互过程

9.4 applicationCache对象

9.4.1 swapCache方法

9.4.2 applicationCache对象的事件

第10章 文件API

10.1 FileList对象与file对象

10.2 ArrayBuffer对象与ArrayBufferView对象

10.2.1 基本概念

10.2.2 ArrayBuffer对象

10.2.3 ArrayBufferView对象

10.2.4 DataView对象

10.3 Blob对象与BlobBuilder对象

10.3.1 Blob对象

10.3.2 BlobBuilder对象

10.3.3 Blob对象的slice方法

10.4 FileReader对象

10.4.1 FileReader对象的方法

10.4.2 FileReader对象的事件

10.4.3 FileReader对象的使用示例

10.5 FileSystem API

10.5.1 FileSystem API概述

10.5.2 FileSystem API的适用场合

10.5.3 请求访问文件系统

10.5.4 申请磁盘配额

10.5.5 创建文件

10.5.6 写入文件

10.5.7 在文件中追加数据

10.5.8 读取文件

10.5.9 复制磁盘中的文件

10.5.10 删除文件

10.5.11 创建目录

10.5.12 读取目录中的内容

10.5.13 删除目录

10.5.14 复制文件或目录

10.5.15 移动文件或目录与重命名文件或目录

10.5.16 filesystem:URL前缀

10.5.17 综合案例

10.6 Base64编码支持

10.6.1 Base64编码概述

10.6.2 在HTML 5中支持Base64编码

第11章 通信API

11.1 跨文档消息传输

11.1.1 跨文档消息传输的基本知识

11.1.2 跨文档消息传输示例

11.1.3 通道通信

11.2 WebSockets通信

11.2.1 WebSockets通信的基本知识

11.2.2 使用WebSockets API

11.2.3 WebSockets API使用示例

11.2.4 发送对象

11.2.5 发送与接收原始二进制数据

11.2.6 实现WebSockets API的开发框架

11.2.7 WebSocket 协议

11.2.8 WebSockets API的适用场景

11.3 Server-Sent Events API

11.3.1 Server-Sent Events API的基本概念

11.3.2 Server-Sent Events API的实现方法

11.3.3 事件ID的使用示例

第12章 扩展的XMLHttpRequest API

12.1 从服务器端获取二进制数据

12.1.1 ArrayBuffer响应

12.1.2 Blob响应

12.2 发送数据

12.2.1 发送字符串

12.2.2 发送表单数据

12.2.3 上传文件

12.2.4 发送Blob对象

12.2.5 发送ArrayBuffer对象

12.3 跨域数据请求

第13章 使用Web Workers处理线程

13.1 基础知识

13.2 与线程进行数据的交互

13.3 线程嵌套

13.3.1 单层嵌套

13.3.2 在多个子线程中进行数据的交互

13.4 线程中可用的变量、函数与类

13.5 适用场合

13.6 SharedWorker

13.6.1 基础知识

13.6.2 实现前台页面与后台线程之间的通信

13.6.3 定义页面与共享的后台线程开始通信时的处理

13.6.4 SharedWorker的使用示例

第14章 获取地理位置信息

14.1 Geolocation API的基本知识

14.1.1 取得当前地理位置

14.1.2 持续监视当前地理位置的信息

14.1.3 停止获取当前用户的地理位置信息

14.2 position对象

14.3 在页面上使用google地图

第15章 多媒体相关API

15.1 多媒体播放

15.1.1 video元素与audio元素的基础知识

15.1.2 属性

15.1.3 方法

15.1.4 事件

15.2 Web Audio API

15.2.1 AudioContext对象

15.2.2 加载声音

15.2.3 播放声音

15.2.4 将声音加载处理封装在类中

15.2.5 控制节奏

15.2.6 控制音量

15.2.7 两个声音的交叉混合

15.2.8 多个音频文件之间的平滑过渡

15.2.9 对音频使用滤波处理

第16章 与页面显示相关的API

16.1 Page Visibility API

16.1.1 Page Visibility API概述

16.1.2 Page Visibility API的使用场合

16.1.3 实现Page Visibility API

16.2 Fullscreen API

16.2.1 Fullscreen API概述

16.2.2 实现Fullscreen API

16.2.3 Fullscreen API代码使用示例

第17章 拖放API与通知API

17.1 拖放API

17.1.1 实现拖放的步骤

17.1.2 DataTransfer对象的属性与方法

17.1.3 设定拖放时的视觉效果

17.1.4 自定义拖放图标

17.2 通知API

17.2.1 通知API的基础知识

17.2.2 通知API的代码使用示例

Java夜未眠

2015-07-22 00:00:00 +0000

蔡学镛 《Java夜未眠》 阅读笔记

本书是一本散文集。

蔡老师的学习方式是先广后深,学习 A 技术时,发现需要 B 技术的基础,就搁置 A 然后认真学习 B。当然有一次他先深后广,居然读起了道德经。

励志

把工作、学习和娱乐结合在一起,把程序设计当成兴趣。

进入程序设计的领域:

  • 培养兴趣
  • 慎选程序语言
  • 使用适当的开发工具
  • 多度好书,少上课
  • 加强英文阅读能力
  • 求人之前,先求自己
  • 多写程序练习
  • 深入研究

职业敏感度,让自己不自觉增加专业功力,做梦想到某个问题的解决方法,把语言当成生活中的一部分。

女性,如果你愿意,也是可以写好代码的。

牢骚

在台湾写程序收入略低,还不如卖鸡排。

程序员的生活算是一种梦想,当然这也是有收入的,如果收入无法支撑这个梦想,那也只能转行了。

Software rush 好像看起来很光明,而实际上很辛苦,当然各行各业都有辛苦的地方。

“不要相信任何人”。作者因为买了一套很糟糕的软件,发此感慨。

生涯

从程序员到作家或者到讲师,或者到项目 leader,不要让自己的技能过分单一。

Know-What -》 Know-How -》 Know-Why -》 Care-Why

“学历无用论”,“认证无用论”,不管什么无用论,你水平不够,就不要乱说话。

图书篇

程序设计学习

学习之道

软件工程

design pattern

系统

编译、反编译、反反编译

出错,也只是发生了 shit happen,没事,never mind。

杂感

人人都是产品经理

2015-07-15 00:00:00 +0000

苏杰 《人人都是产品经理》 阅读笔记 第一反映是为啥这书不是叫《人人都是工程师》

苏杰,浙江大学硕士,2006年毕业加入阿里巴巴集团,一直担任产品经理至今。主要负责产品的战略规划、业务架构、数据分析、用户体验等工作。

阿里的产品的产品一直被诟病,当然这本书是很有意思的。

第1章 写给-1到3岁的产品经理

  • 1.1 为什么要做产品经理

  • 1.2 我们到底是不是产品经理

  • 1.3 我真的想做,怎么入行

  • 1.4 一个产品经理的-1到3岁

第2章 一个需求的奋斗史

  • 2.1 从用户中来到用户中去

  • 2.1.1 用户是需求之源

  • 2.1.2 你真的了解用户吗

  • 2.2 需求采集的大生产运动

  • 2.2.1 定性地说:用户访谈

  • 2.2.2 定量地说:调查问卷

  • 2.2.3 定性地做:可用性测试

  • 2.2.4 定量地做:数据分析

  • 2.2.5 需求采集人人有责

  • 2.3 听用户的但不要照着做

  • 2.3.1 明确我们存在的价值

  • 2.3.2 给需求做一次DNA检测

  • 2.4 活下来的永远是少数

  • 2.4.1 永远忘不掉的那场战争

  • 2.4.2 别灰心,少做就是多做

  • 2.5 心急吃不了热豆腐

第3章 项目的坎坷一生

  • 3.1 从产品到项目

  • 3.2 一切从Kick Off开始

  • 3.3 关键的青春期,又见需求

  • 3.3.1 真的要写很多文档

  • 3.3.2 需求活在项目中

  • 3.4 成长,一步一个脚印

  • 3.5 山寨级项目管理

  • 3.5.1 文档只是手段

  • 3.5.2 流程也是手段

  • 3.5.3 敏捷更是手段

  • 3.6 物竞天择适者生存

  • 3.6.1 亲历过的特色项目

  • 3.6.2 一路坎坷,你我同行

第4章 我的产品,我的团队

  • 4.1 大产品,大设计,大团队

  • 4.1.1 产品之大

  • 4.1.2 设计之大

  • 4.1.3 团队之大

  • 4.2 游走于商业与技术之间

  • 4.2.1 心思缜密的规划师

  • 4.2.2 激情四射的设计师

  • 4.2.3 “阴险狡诈”的运营师

  • 4.3 商业团队,冲锋陷阵

  • 4.3.1 好产品还需市场化

  • 4.3.2 我们还能做什么

  • 4.4 技术团队,坚强后盾

  • 4.5 容易被遗忘的角落

  • 4.6 大家好才是真的好

  • 4.6.1 所谓团队文化

  • 4.6.2 虚无的无授权领导

第5章 别让灵魂跟不上脚步

  • 5.1 触及产品的灵魂

  • 5.2 可行性分析三步曲

  • 5.2.1 我们在哪儿

  • 5.2.2 我们去哪儿

  • 5.2.3 我们怎么去

  • 5.3 做吧,准备出发

  • 5.3.1 敢问路在何方

  • 5.3.2 低头走路,抬头看天

  • 5.4 KPI,KPI,KPI

  • 5.5 本书的源头活水

第6章 产品经理的自我修养

  • 6.1 爱生活,才会爱产品

  • 6.2 有理想,就不会变咸鱼

  • 6.3 会思考,活到老学到老

  • 6.4 能沟通,在什么山头唱什么歌

  • 6.5 产品经理主义

一个人真正成熟的标志之一,就是心中可以容纳互相矛盾的观点而无碍行事。

对产品经理来说,核心技能

  • 沟通能力
  • 无授权领导能力
  • 学习能力(学习能力各行各业都很重要)
  • 商业敏感度
  • 热爱产品
  • 注重细节,追求完美
  • 日常产品管理能力