技术笔记


【实习日记】Spring MVC的数据库操作,与易信IM对接

一、Spring MVC的数据库操作 这篇博文写的很好,例子很经典: http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/ 简单来说,对于一个形如 ========== int | varchar id  | name ========== 这样的数据表单,我们先构建一个对应的Model类 @Entity //标定该类是一个Model类 @Table(name = “user”) //标定该类在数据库中对应的表单名字为user Class User{ @Id //自动生成的id主键 @GeneratedValue(strategy = GenerationType.AUTO) private long id; @NotNull //name字段非空 String name; Public User(){} //Getter and Setter methods } 需要说明的是,该Model类是一个Bean。所以必须有默认的构造函数(即使它什么也不做),也必须要有相应所有private变量的setter和getter函数,这个可以在eclipse的source->Generate getters and setters 中自动生成。 然后是构建该数据表单的操作接口。 注意,我们在这里应用了Hibernate的DAO操作。避免了JDBC直接输入SQL字符串。 这样做有两个好处, 一是在更高的层级上进行数据库操作,表单直接对应一个Model类,表单中的一行直接对应一个Model类的实例。 […]


配置wrtnode作为无线中继

首先是wrtnode官网的开箱教程,其中“不联网不幸福”一节讲述了如何将wrtnode连入一个现有的wifi,并再作为AP供其他客户端连接的方法。 http://wiki.wrtnode.com/index.php?title=Starting/zh-cn#.E4.B8.8D.E8.81.94.E7.BD.91.E4.B8.8D.E5.B9.B8.E7.B3.8A 但是DNS没有配置成功。表现为,直接ping ip地址能够ping通,但ping网址却会报错。 解决方法在这里: https://forum.openwrt.org/viewtopic.php?id=22624 简单来说 修改/etc/config/dhcp文件,使它和下面的样子类似 config ‘dhcp’ ‘lan’ option ‘interface’ ‘lan’ option ‘start’ ‘100’ option ‘limit’ ‘150’ option ‘leasetime’ ’12h’ list ‘dhcp_option’ ‘6,10.10.0.21’ 其中最主要的是这一行 list ‘dhcp_option’ ‘6,10.10.0.21’ 6表示配置dhcp下客户端的dns服务器地址,后面的’10.10.0.21’是你的dns服务器地址,在浙大玉泉,它对应的是10.10.0.21. 关于其他的dhcp序号和他们所对应的含义,在这里能够查询到 dnsmasq –help dhcp 配置完毕后输入nr进行网络重启,然后发现可以连上网络了。


理解RESTful架构

刚刚读了一篇博文,关于RESTful架构的理解。觉得讲得不错,作一下笔记。 原文链接:http://www.ruanyifeng.com/blog/2011/09/restful.html REST的全称为Representational State Transfer 表现层状态的转化。 实际上这句话省略了一个主语,就是resource。 资源的表现层状态的转化。 资源是一种信息实体,它可以有多种外在的表现形式,我们把资源具体呈现出来的形式,叫做它的表现层。 互联网通讯的HTTP协议,是一个无状态协议。如果客户端想要操作服务器,必须通过某种手段,让服务端发生状态转化,这种转化是建立在表现层之上的,所以就是表现层状态转化。 HTTP协议里有四个表示操作方式的动词:GET,POST,PUT,DELETE。 GET用于获取资源 POST用于新建资源(也可用于更新资源) PUT用于更新资源 DELETE用于删除资源。 设计误区 URI代表的是一种资源实体,客户端与服务端之间,传递这种资源的表现层。 所以,URI中不应包含动词。动词应该放在HTTP协议中。 比如,某个URI是/posts/show/1其中show是动词,这个URI就设计错了。应该用GET表示show这个动作,URI应该写成/posts/1 如果一些动作是HTTP那四个动词表示不了的,那应该把动作做成一种资源。比如网上汇款,从账户1向帐户2汇款500元。 POST /accounts/1/transfer/500/to/2 正确的写法应把transfer改为名词transaction。把具体的信息写在post数据里。资源不能是动词,但可以是一种服务。 POST /transaction from=1&to=2&amount=500.00   需要指出,HTTP的四种动作中。GET,PUT,DELETE,HEAD,是幂等(Idempotent)的。无论对一个资源操作了多少次,返回的数据均相同。 评论补充 楼主的理解非常的好, 有一些我想补充, 顺别回答其它一些朋友的问题. 根据理查德森模型 (http://martinfowler.com/articles/richardsonMaturityModel.html), REST架构的成熟度有3个等级: Level 0 POX (这个就不算REST了) Level 1 Resources Level 2 Http verbs Level 3 Hypermedia Controls […]


如何用PHP进行异步处理

项目中遇到这样的问题: 浏览器访问某一页面,服务器相应地查询数据库,生成json给前端,并且在数据库中更新该页面的浏览量。 查看日志发现,“更新数据库中该页面的浏览量”字段非常耗时,整个过程400ms,它占了一半。 想到我们没必要在等数据库更新完毕后再给用户返回数据,这两步完全可以异步执行。考虑PHP的异步操作。 PHP异步操作的解决方案有很多: 1. http://www.360doc.com/content/11/0123/17/397482_88527668.shtml Gearman的php扩展,通过建立一个一直运行的守护进程(Deamon)来实现异步处理。 2. http://www.dewen.io/q/3970/ 使用fscokopen,或消息队列。 其实它的本质是用多线程甚至是多进程来解决异步问题。 待补充


1. Yii — MVC 开发 — M,V,C各自的职责

Model 表示网站内在的数据结构,它的代码中不应该包括HTML,CSS等前端语言,并且不应该处理$_GET, $_POST的用户请求。前者是Controller来做的,后者是View来处理的。 它的职责是对数据库进行增删改查,并且在进行数据库操作前进行数据合法性的校验。 View 面对用户呈现数据最终的表现形式。 它应该包括HTML代码,和简单的遍历,格式化,渲染数据的PHP代码。 它不应该包括对数据库的操作和对用户请求的处理($_GET, $_POST) 他可以调用Controller或Model的成员变量或是方法,但它应该仅仅用来呈现数据。 View可以有不同的复用形式: Layout: 页面中共同的表现区域,比如header,footer就可以放在layout的view中 Partial views:partial view渲染时不会被layout装饰,也即它不会带上layout的渲染代码。它可以被用来作为页面区域的复用。 Widgets:如果partial view中需要很多的逻辑计算,那它就是一个空间(widgets)。它可以是一个HTML的标记区域。包含复杂的逻辑。 Helper class:如果view中我们需要一些代码片段来格式化数据或者生成HTML标签。我们就可以把他们放在helper class中而不是直接放在view中。Yii有一个强大的CHtml helper class可以产生常用的HTML代码。Helper Class可以放在自动加载目录中,这样它就可以不用显式地加载就可以被使用。 Controller Controller就像胶水一样,把model,view和其他components粘在一起,共同组成一个可以运行的网站应用。Controller负责直接处理用户的请求,也就是说,controller: 1. 直接访问$_GET, $_POST,和其他包含用户请求的PHP变量。 2. 创建model的实例并且控制它的生命周期。比如,在一个典型的model update的动作中,controller可以先创建model的实例;然后用用户输入填充这个model实例。在成功存储model后,controller可以把用户浏览器重定向到model的详情页。注意,实际的存储model的实现代码需要写在model中而不是controller。 3. 应该避免包括SQL语句,它应该在model中。 4. 应该避免包括HTML语句,它应该在view中。   在一个设计良好的MVC应用中,controller应该非常短小,可能只包含几十行代码。大量的代码在model中,因为它需要处理数据。并且每个应用的model的业务逻辑都不尽相同。


wr703n路由器通过串口与红板MWC通信(MEGA2560)

学会很多东西,终于解决了路由器与飞控板的通信问题。离毕设成功又近了一步。 其中,河南科技大学的仲志丹所写的《TL-WR703N的应用与开发》很有用。网上有PDF版。 其中讲了TL-WR703N如何刷入OPENWRT,如何安装USB转串口驱动,如何安装串口转发至TCP包的软件。   我的MWC板子上自带一个串口转USB芯片,其型号为SILABS-CP2012,所以需要到openwrt官网上下载 kmod-usb-serial-cp210x_3.3.8-1_ar71xx.ipk 这个驱动,并手动解决安装包依赖问题。也就是一个一个手动下载依赖包。   另外这篇博文对我帮助很大,blog.csdn.net/jiangyuexiang/article/details/7997560 它讲了如何让Arduino和Openwrt进行通信。并且提供了一个测试样例。


openWRT如何修改MAC地址

最简单的做法是通过串口控制台修改 /etc/config/ 下的网络配置文件 network. 两个步骤: 步骤一:用vi编辑器打开/etc/config/network 文件 步骤二:在其中增加 macaddr 参数, config interface lan option ifname   eth2 option status   1 option proto    static option ipaddr   192.168.200.1 option netmask  255.255.255.0 option macaddr 00:01:02:03:04:05 转载自:http://blog.csdn.net/nice_cxf/article/details/7939000


tl-wr703n v1.7 刷 openwrt教程

tplink wr703n硬件版本号:3.17.1 Build 140120 实际上,从硬件上讲,TL-WR703N = FWR171-3G = MW151RM3G 后面两个还便宜一些。 openwrt的中文网http://www.openwrt.com.cn/bbs/ 很多教程和固件资源。 注意:wr703n 的1.7版本会校验固件的rsa签名,导致刷写固件失败。 这里是避免用ttl线的解决方法:http://www.right.com.cn/forum/thread-159078-1-1.html 首先,给本机配置tftp服务。 注意:ubuntu下,配置完的tftp服务器的共享目录在/var/lib/tftpboot下。 然后下载busybox, dd, 和固件http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 按照教程一点一点操作即可。 需要懂一些linux的知识。 老外的原版解决方案 http://pastebin.com/0wzMthfr Openwrt编译教程 http://forum.cnsec.org/thread-93117-1-1.html    


闪烁的LED灯(LED灯引脚定义)

MWC红色Arduino板(之后的简称Arduino板)上有四个LED灯,分别为LED1~LED4。经过测试,发现其对应的引脚地址为:13,30,31,32. 需要注意:LED1为高电平灯亮,LED2~LED4为低电平灯亮。 pinMode 设置引脚的输入,输出模式; digitalWrite向指定的数字引脚写入值; delay延迟,参数的单位为毫秒。   int LED1 = 13; // HIGH level signal trigger int LED2 = 30; // LOW level signal trigger int LED3 = 31; // LOW level signal trigger int LED4 = 32; // LOW level signal trigger void setup() { // put your setup […]