极简设计

产品开发之不易 2016-01-01

产品开发较之项目开发来说更加不易,从产品的整个开发过程谈谈

Read More


项目经理总结 2016-01-01

Read More


开源框架思索 2016-01-01

  • 空前繁荣的开源世界
  • 开源框架带来的烦恼
  • 搭配的困难
  • 升级的困扰
  • 重点学习 触类旁通
  • 注重积累 搭建平台

Read More


程序员困境:底层编码能力正逐步丧失 2016-01-01

Read More


你认为1年就可以掌握一门语言吗? 2016-01-01

语言/开发工具 拳脚功夫 算法/结构 兵器 os/开发平台 剑气 易经洗髓

Read More


一则招聘的笑话 2016-01-01

根据玩魔方给职业

Read More


从一个笑话看软件开发管理 2016-01-01

Read More


术业有专攻,让我们回归本位 2016-01-01

术业有专攻,让我们回归本位

Read More


兄弟们放弃.NET 转战iPhone和Android吧! 2016-01-01

移动互联网反应迟钝 .net 产业由卖软件拷贝进入服务和体验阶段

Read More


work 2016-01-01

学习领悟:自觉、主动地学习和掌握新的知识与技能,并积极尝试应用于自身工作领域以提高绩效 逻辑分析:针对特性的复杂事件,能够完整梳理和理解相关关联因素、及其彼此之间的业务联系,并聚焦关键问题,做邮有理有据的结论或判断 客户意识:理解客户需求,主动优化产品和服务措施,持续改善客户体验 团队协作:主动承担工作任务,积极支持,协助他人工作,在团队中建立良好的个人合作信誉 抗压能力:面对困难与压力,主动自我调节,不因压力产生的不良情绪影响到工作或他人 动手能力:有丰富的实务操作经验,业务各项工作每一环节的具体内容,并精通操作方法及技能

Read More


websphere 自动部署 2016-01-01

以前在太平洋保险,产险 用的是weblogic 现在在寿险,用的是 websphere war包打出来后,打开was控制台,卸载以前应用,传war包,选节点,同步,启动等,太烦了 找到一个Autodeploy的jacl脚本 http://www.ibm.com/developerworks/websphere/library/samples/SampleScripts.html 改了后一步到位

难点就在配置节点上,示例脚本小改一点 一个cluster,几个web server 默认是根据 node/server 找

狂搜索一通,发现$AdminApp 有个交互模式,可以生成install命令,试几把,配置对了就行了

Read More


vps 2016-01-01

搬瓦工64M VPS,3.99$一年,便宜实惠

Read More


虚拟化 2016-01-01

虚拟化技术大观 https://ring0.me/2014/12/virtualization-overview/

Read More


吐槽 2016-01-01

吐槽

Read More


事务 2016-01-01

Read More


to-read 2016-01-01

http://www.huangyunkun.com/

Jackson 工具类使用及配置指南 http://www.jiangwenrou.com/jackson-%E5%B7%A5%E5%85%B7%E7%B1%BB%E4%BD%BF%E7%94%A8%E5%8F%8A%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97.html

http://samchu.logdown.com/?page=1

http://blog.icoolxue.com/springmvc-3%E4%BD%BF%E7%94%A8fastjson%E4%BB%A3%E6%9B%BFjackson/

阅心笔记 https://www.52os.net/ 23页技术

Nginx开发从入门到精通 http://tengine.taobao.org/book/chapter_02.html

《架构风格与基于网络的软件架构设计》 http://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAA&url=http%3A%2F%2Fmysql-udf-http.googlecode.com%2Ffiles%2FREST_cn.pdf&ei=pTKzVLqRLaG-mAW_wYGgBA&usg=AFQjCNExaMfz14oSEP-cdCJ043gLGWFg2A&sig2=6IgxzHxWuud14Zxsh1i6Xg

http://songlee24.github.io/

http://darktea.github.io/

http://www.dumpcache.com/wiki/doku.php?id=start

Linux http://blog.me115.com/

Read More


tcc 2016-01-01

TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己 http://blog.csdn.net/c80486/article/details/44528829 TCC研究(2) 把C语言当作脚本,解释执行,并嵌入各类程序 http://blog.csdn.net/c80486/article/details/43370603

Read More


tair 2016-01-01

docker run -p 5191:5191 -p 5198:5198 --net=host -v /Users/tair/conf/:/conf -v /Users/tair/tair_bin/:/tair -it ubuntu:latest /bin/bash

cp /tair/lib/libboost_thread-mt.so.5 /usr/lib64/

./tair/tair.sh start_ds ./tair/tair.sh start_cs

./tair/bin/tairclient -c 127.0.0.1 -g group_1

stat put name dd get name

Read More


svnkit使用现有认证 2016-01-01

svn

网上代码都是使用用户名密码的 官方让看svnkit-cli里的 SVNCommandEnvironment 最终代码


SVNCommandEnvironment s = new SVNCommandEnvironment("", System.out, System.out, System.in);
SVNClientManager m = s.createClientManager();
SVNRepository r=m.createRepository(SVNURL.parseURIEncoded(""),false);

Read More


ssl 2016-01-01

对网站SSL等级评分 https://www.ssllabs.com/ssltest/analyze.html?d=ddatsh.com

ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /etc/ssl/private/server.crt; ssl_certificate_key /etc/ssl/private/server.key; ssl_prefer_server_ciphers on; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED'; ssl_dhparam /etc/ssl/dhparam2048.pem;

Nginx 配置上更安全的 SSL & ECC 证书 https://www.pupboss.com/nginx-add-ssl/ SSL Labs 评分 A+ 的 nginx 配置 http://songchenwen.com/tech/2015/09/09/nginx-configuration-with-ssl-labs-class-a-plus/

https://im66.net/main/2015-10/1049.pc https://imququ.com/post/letsencrypt-certificate.html https://okwoo.com/lnmp-environment-lets-encrypt-a-certificate-is-registered-and-renewed-automatically

./configure --with-http_ssl_module --with-openssl=/tmp/openssl-1.0.2e --with-http_v2_module

nginx ssl https://s.how/nginx-ssl/ http://www.lovelucy.info/nginx-ssl-certificate-https-website.html http://seanlook.com/2015/05/28/nginx-ssl/

keytool -import -alias ddatsh -keystore D:\dev\java\jdk\8\jre\lib\security\cacerts -file server.crt

keytool -list -keystore D:\dev\java\jdk\8\jre\lib\security\cacerts -file server.crt

keytool -delete -alias ddatsh -keystore D:\dev\java\jdk\8\jre\lib\security\cacerts

Read More


经典架构SSH优缺点 2016-01-01

Spring

为解决企业应用开发复杂性而创建

主要优势之 分层架构

层与层、类与类关系,从强绑定、强耦合变为不绑定、松耦合,直接面向接口编程,设计与实现分离原则发挥到极致 层之间职能更加清,对单元测试也产生深远影响 Spring出现前,模块没有完成,做单独模块的单元测试还是很困难的

缺点

原来难以维护的类与类之间的强耦合关系,转变为更加难以维护的XML ps:后续已支持annotation扫描还有spring boot之类的解决方案简化配置

Hibernate

Hibernate在对EJB臃肿及部署的困难的失望情绪下产生的轻量级解决方案,没有分布式 Rod Johnson就因为强调绝大部分企业应用是不需要分布式的,从而推出了自己轻量级的Spring解决方案 最近随着云计算架构的兴起, 架构是否支持分布式,又是必选项了

技术架构的选型,就跟法国巴黎流行时装一样,真是典型的十年河东,十年河西 所以,像 SOA、云计算、SaaS、物联网这些大名词,不仅会给客户带来很大的困惑,同样也会给程序员、系统分析师、系统架构师、技术总监带来困惑 从肯定到否定,再到自我否定,真是符合大自然螺旋式上升的发展规律

Struts

一经推出,几乎打败了当时的所有竞争对手 其伟大之处,在于它对网页数据的动态绑定 虽然数据绑定不是一个新名词,微软在1991年推出VB 1.0时,就创造性地发明了让VB程序员又爱又恨的数据绑定 但是对于Web 编程,Struts也还是把数据绑定首次应用到了Web编程上 能让人用Set和Get的形式取得网页数据,而不是单一的黑盒式的 request.getParameter(),从而使得网页数据取值进入面向对象(OO)化时代

Read More


springside 笔记 2016-01-01

modules\parent\pom.xml

Read More


Spring mvc 2016-01-01

Read More


spring 技术内幕 2016-01-01

interface BeanFactory String FACTORY_BEAN_PREFIX = "&"; getBean(...) containsBean(String paramString); isSingleton(String paramString) isPrototype(String paramString) isTypeMatch(String paramString, Class<?> paramClass) getType(String paramString) getAliases(String paramString)

HierarchicalBeanFactory getParentBeanFactory(),使得具备双亲IoC容器管理功能

另一条接口设计线路以ApplicationContext ListableBeanFactory extends BeanFactory,细化接口功能 ApplicationContext继承 MessageSource, ApplicationEventPublisher, ResourcePatternResolver等,在BeanFactory简单IoC基础上加入高级容器特性支持

Read More


cache-client 2016-01-01

入口

src/main/resources/META-INF/spring.handlers

http://www.handpay.com.cn/schema/cache=com.handpay.framework.cache.client.config.HandpayCacheNamespaceHandler

HandpayCacheNamespaceHandler extends NamespaceHandlerSupport

@Override public void init() { registerBeanDefinitionParser("cache-executor", new CacheExecutorParser()); registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenParser()); }

配置


<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:hpcache="http://www.handpay.com.cn/schema/cache"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.handpay.com.cn/schema/cache
        http://www.handpay.com.cn/schema/cache/handpay-cache.xsd">

    <hpcache:cache-executor appcode="dev">

        <hpcache:server-address>
            <hpcache:http
                endpoint="http://127.0.0.1:8080/cache-monitor/ws/cache-server.htm" />
        </hpcache:server-address>
    </hpcache:cache-executor>

    <bean id="cacheClient" class="com.ddatsh.maven.CacheExecutorExample">
        <property name="executor" ref="cacheExecutor" />
    </bean>

</beans>

使用

ApplicationContext ctx = new ClassPathXmlApplicationContext("application-cache.xml");
CacheExecutor executor = (CacheExecutor) ctx.getBean("cacheExecutor");

executor.set("name", "dd");

executor.executeInTransaction(new TransactionAction() {
    public void doInTxAction(CacheExecutorOperation operation) throws CacheClientException {
        operation.set("name", "dd");
    }
});

interface CacheExecutor extends TransactionCacheExecutor

interface TransactionCacheExecutor extends IntegratedOperation
    void executeInTransaction(TransactionAction tx) throws CacheClientException;

interface IntegratedOperation extends GetOperation, SetOperation,
    DeleteOperation, AtomicCounterOperation, KeyOperation, AppendableOperation 

IntegratedOperation

子接口有两个
interface CacheExecutorOperation extends IntegratedOperation
interface TransactionCacheExecutor extends IntegratedOperation
    void executeInTransaction(TransactionAction tx) throws CacheClientException

CacheExecutorOperation实现之DefaultCacheExecutorOperation

被事务回调用
class DefaultCacheExecutorOperation implements CacheExecutorOperation
/**
* 委托使用的操作对象
*/
    private IntegratedOperation operation;

    public DefaultCacheExecutorOperation(IntegratedOperation operation) {
        this.operation = operation;
    }

各种get,set委托

TransactionCacheExecutor 两个子接口

interface CacheExecutor extends TransactionCacheExecutor
interface InternalCacheExecutor extends TransactionCacheExecutor
     int DEFAULT_EXPIRATION_SECONDS = 1800;

Read More


spring boot 2016-01-01

Spring Boot——开发新一代Spring应用 http://tianmaying.com/tutorial/spring-boot-overview

功能日益复杂,伴随大量的XML配置及复杂Bean依赖关系,Spring 逐渐摆脱XML配置,大量使用“约定优先配置”思想来摆脱Spring框架中各类繁复纷杂的配置(即使是Java Config)

Spring Boot由此背景下被抽象出来,本身不提供Spring框架核心特性/扩展,用于快速、敏捷开发。不替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

在Spring中可以使用@ResponseBody来让返回对象直接转化为Json格式,这种方式需要提供一个专门的对象来作为内容的承载。

如果只是需要快速的一段简单的Json响应就没有必要构造一个对象,然后让对象来承载内容了,可以直接使用JsonNodeFactory来构造。

JsonNodeFactory是jackson中的类,我使用的是Spring Boot,自动包含了这个依赖库。

使用时通过JsonNodeFactory.instance来获取工厂对象,然后进行创建。

@RequestMapping(value = "/status")
@ResponseBody
public ObjectNode showSuccessStatus() {
    JsonNodeFactory factory = JsonNodeFactory.instance;
    ObjectNode objectNode = factory.objectNode();
    objectNode.set("status", factory.textNode("success"));
    return objectNode;
}
@Bean public Filter characterEncodingFilter() {
    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    characterEncodingFilter.setEncoding("UTF-8");
    characterEncodingFilter.setForceEncoding(true);
    return characterEncodingFilter;
}

Read More


spring 2016-01-01

spring 早期是重量级企业JAVA框架替代品,尤其是EJB,提供轻量级,精简编程模型,增强POJO能力完成企业级功能,以前在EJB或其他规范才具备 整合轻量级J2EE框架(ORM、MVC等),并构架常用的功能(如DAO)

四个关键策略:

轻量级、微侵入性POJO开发 用DI实现松耦合、面向接口编程 切面和约定实现声明式编程 切面和模板减少样板代码

IOC

“控制反转”,一种设计思想,面向对象编程法则之 好莱坞法则,指导设计出松耦合、易测试、功能复用的代码,整体体系结构变得灵活

设计思想:面向接口编程,贯彻到业务开发 体现设计法则之:好莱坞法则Don't call we,we will call you 控制反转,依赖注入更好理解,把依赖的类以接口方式,用set/构造方法,传入Bean内,更好解耦(优点)

设计好的对象交给容器控制(@Autowire/@Resource/@Inject),而不是传统的业务对象内部直接控制(new Xxx())

两种IoC形式: 1.依赖查找(JNDI 需要写代码,配置环境参数) 2.spring 用的依赖注入(消除API侵入)

IoC容器管理对象生命周期、依赖关系等,配置和依赖性规范与代码分开

DI

与IOC为同一个概念的不同角度描述

show me the code


public interface HelloApi {  }
public class HelloImpl implements HelloApi {  }

让窗口知道要管理的对象


<?xml version="1.0" encoding="UTF-8"?>  
<beans  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd">  
<bean id="hello" class="cn.javass.spring.chapter2.helloworld.HelloImpl"></bean>  
</beans>  

后续用component scan免去复杂的xml config

实例化IoC容器,从容器中获取需要的对象,调用接口


 //1、读取配置文件实例化一个IoC容器  
ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");  
//2、从容器中获取Bean,“面向接口编程,而不是面向实现”  
HelloApi helloApi = context.getBean("hello", HelloApi.class);  
//3、执行业务逻辑  
helloApi.sayHello();  

IoC容器的代表:BeanFactory,提供IoC容器最基本功能

AOP

对容器内Bean进行方法干涉。普通函数调用,被容器预处理后,在方法执行前/后进行一些可配置的操作 实现方式如InvocationHandler、cglib

ThreadLocal

java.lang.ThreadLocal 命名为ThreadLocalVariable更容易理解

Java中没有提供在语言级支持,而是变相地通过ThreadLocal的类提供支持

ThreadLocal类用Map存储每一个线程的变量副本

Thread与同步机制都是解决多线程中相同变量的访问冲突 同步机制“时间换空间”,ThreadLocal“空间换时间”

Spring使用ThreadLocal解决线程安全问题 Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非线程安全状态采用ThreadLocal进行处理,让它们也成为线程安全的状态,因此有状态的Bean就可以在多线程中共享了

http://hanqunfeng.iteye.com/

Read More


一些文章 2016-01-01

颠覆客户端存储 --- LocalStorage http://www.jsmix.com/html5/localstorage.html

word,excel表格转htm(清理无用代码) http://feilong.org/purify-table

htm格式化 http://box.inote.cc/html/ (带美化) http://tool.chinaz.com/Tools/JsFormat.aspx 不带美化

css格式化,支持横,竖排 http://www.happyshow.org/sample/20070626/cssformater.html

Read More


serializable 2016-01-01

json/xml/protobuf/hessian/thrift/avro

通信传输机制:Socket,IOStream,HttpClient,file,memory-input,Nonblocking等 任意通信协议都可与任意通信传输机制结合起来形成一种特定的RPC实现

avo 设计思想、编程模式和thirft非常相似 基schema,和protobuf、thrift相同 “代码生成”是可选的,这一点区别于protobuf和thrift 有schema则读写可跨平台 avro schema是json格式,编写简单,可读性好 写入时连schema一同,有兼容机制保证读可用不同schema RPC中用avo时,通过handshake交换Schema保证一致

http://shift-alt-ctrl.iteye.com/blog/2217425 avro在RPC层面和thrift还有很大的差距,thrift做RPC应用时非常简单而且是production级别可用。更加倾向于使用avro做数据存储和解析

production环境中,通常需要考虑对client/server连接池,提高吞吐,avro-ipc没有,NettyTransceiver本身不能在多线程环境中使用,需要将请求队列化,或者为每个request分配一个唯一的ID,以避免消息的错乱

Read More


安全 2016-01-01

1976年Diffie 和 Hellman 的公钥密码学使两个陌生人可在没有公共秘密情况下实现秘密通信,使数字签名成为可能 数字签名必要特征:

  • 可信

签名的接收者相信签名者签了字

  • 不可伪造

是签名者而不是其他人签了字

  • 不可重用

不法之徒不能把签名移到别的文件上

  • 不可改变

签名之后文件的内容(交易金额)不能改变

  • 不可抵赖

签名者不能事后声称他没有签名

如果 Alice 有一个密码,告诉了 Bob,现在两个人都有这个密码了,这个密码现在属于谁,就说不清了。用传统方法很难想到一种在不依赖第三方的情况下满足上述5条的签名方式

How Bitcoin Works https://ring0.me/2014/02/how-bitcoin-works/ 如何证实一次比特币交易,使其不可抵赖? 如何避免一个比特币花两次? 如果我一个人拥有全网的 10% 算力,是否有可能改写历史? 比特币交易为什么要等几十分钟? 比特币是如何保证数量有限(2100 万个)的? 如何保证每 10 分钟恰好挖出一个比特币? 一次挖出 0.1 个比特币是怎么回事? 一次交易 10000 个比特币,需要生成 10000 条交易信息吗? 比特币这么大的交易量,交易记录如何传输、保存?

网络虚拟化技术大观

https://ring0.me/2014/02/network-virtualization-techniques/

Read More