‘新闻杂谈’ 分类下的所有文章
2014八月25

Nutz:代码生成器开源了

项目地址: https://github.com/Wizzercn/NutzCodematic

 

Nutz 代码生成器:

可以生成Pojo类、Action类;

支持MySQL、Oracle、MS SQL2000、ODBC等;

classes是在jdk1.7下编译,可以直接双击 run.bat 运行。

迟迟没放出来的原因是代码写的太烂……

2014四月8

Nutz:结合Jedis实现Redis消息订阅和缓存队列(支持自动重连)

仅作参考。
编辑配置Nutz redis配置文件:

var ioc = {
        jedisConfig : {
            type : 'cn.xuetang.common.redis.JedisConfig',
            fields : {
                maxTotal : 200,
                maxIdle : 10,
                maxWaitMillis:10001,
                testOnBorrow:true,
                redisUrl:'127.0.0.1',
                redisPort:6379,
                redisTimeout:1000
            }
        }
}
package cn.xuetang.common.redis;

/**
 * Created by Wizzer on 14-4-8.
 */
public class JedisConfig {
    private int maxTotal;
    private int maxIdle;
    private int maxWaitMillis;
    private boolean testOnBorrow;
    private String redisUrl;
    private int redisPort;
    private int redisTimeout;//redis断开后自动重新连接间隔时间

    public int getMaxTotal() {
        return maxTotal;
    }

    public void setMaxTotal(int maxTotal) {
        this.maxTotal = maxTotal;
    }

    public int getMaxIdle() {
        return maxIdle;
    }

    public void setMaxIdle(int maxIdle) {
        this.maxIdle = maxIdle;
    }

    public int getMaxWaitMillis() {
        return maxWaitMillis;
    }

    public void setMaxWaitMillis(int maxWaitMillis) {
        this.maxWaitMillis = maxWaitMillis;
    }

    public boolean isTestOnBorrow() {
        return testOnBorrow;
    }

    public void setTestOnBorrow(boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
    }

    public String getRedisUrl() {
        return redisUrl;
    }

    public void setRedisUrl(String redisUrl) {
        this.redisUrl = redisUrl;
    }

    public int getRedisPort() {
        return redisPort;
    }

    public void setRedisPort(int redisPort) {
        this.redisPort = redisPort;
    }

    public int getRedisTimeout() {
        return redisTimeout;
    }

    public void setRedisTimeout(int redisTimeout) {
        this.redisTimeout = redisTimeout;
    }
}

Nutz入口类加载配置文件,config路径:

@Modules(scanPackage=true)
@Ok("raw")
@Fail("http:500")
@IocBy(type=ComboIocProvider.class,args={
	"*org.nutz.ioc.loader.json.JsonLoader","config",
	"*org.nutz.ioc.loader.annotation.AnnotationIocLoader","cn.xuetang"})
@SetupBy(value=StartSetup.class)
@UrlMappingBy(value=UrlMappingSet.class)
public class MainModule {
}

初始化配置参数,新建订阅消息处理线程:

    public static JedisConfig REDIS_CONFIG;
    //声明全局的redis连接池
    public static ShardedJedisPool SHARDEDJEDIS_POOL=null;
    public static JedisPool JEDIS_POOL=null;

    public static void InitRedisConfig() {//初始化redis
        REDIS_CONFIG = Mvcs.ctx.getDefaultIoc().get(JedisConfig.class);
        JedisPoolUtil jedisPoolUtil=new JedisPoolUtil();
        SHARDEDJEDIS_POOL = jedisPoolUtil.getShardedJedisPool();
        JEDIS_POOL = jedisPoolUtil.getJedisPool();
    }

    new Thread(Mvcs.getIoc().get(ImageTask.class)).start();

 
创建Jedis连接池工具类:

package cn.xuetang.common.redis;

import cn.xuetang.common.config.Globals;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedisPool;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Wizzer on 14-4-8.
 */
public class MyJedis {
    private String redisUrl;
    private int redisPort;
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(Globals.REDIS_CONFIG.getMaxTotal());
        jedisPoolConfig.setMaxIdle(Globals.REDIS_CONFIG.getMaxIdle());
        jedisPoolConfig.setMaxWaitMillis(Globals.REDIS_CONFIG.getMaxWaitMillis());
        jedisPoolConfig.setTestOnBorrow(Globals.REDIS_CONFIG.isTestOnBorrow());
        return jedisPoolConfig;
    }
    public JedisShardInfo jedisShardInfo(){
        return new JedisShardInfo(redisUrl, redisPort);
    }
    public JedisPool jedisPool(){
        return new JedisPool(jedisPoolConfig(),redisUrl, redisPort);
    }
    public ShardedJedisPool shardedJedisPool(){
        this.redisUrl=Globals.REDIS_CONFIG.getRedisUrl();
        this.redisPort=Globals.REDIS_CONFIG.getRedisPort();
        List<JedisShardInfo> jedisList = new ArrayList<JedisShardInfo>();
        jedisList.add(jedisShardInfo());
        return new ShardedJedisPool(jedisPoolConfig(), jedisList);
    }

}

实现自己的监听类:

package cn.xuetang.common.redis;

import org.nutz.log.Log;
import org.nutz.log.Logs;
import redis.clients.jedis.JedisPubSub;

/**
 * 订阅监听类
 * Created by Wizzer on 14-4-8.
 */
public class MyJedisListenter extends JedisPubSub {
    private final static Log log = Logs.get();
    // 取得订阅的消息后的处理
    public void onMessage(String channel, String message) {
        log.info(channel + "=" + message);
    }

    // 初始化订阅时候的处理
    public void onSubscribe(String channel, int subscribedChannels) {
        log.info(channel + "=" + subscribedChannels);
    }

    // 取消订阅时候的处理
    public void onUnsubscribe(String channel, int subscribedChannels) {
        log.info(channel + "=" + subscribedChannels);
    }

    // 初始化按表达式的方式订阅时候的处理
    public void onPSubscribe(String pattern, int subscribedChannels) {
        log.info(pattern + "=" + subscribedChannels);
    }

    // 取消按表达式的方式订阅时候的处理
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
        log.info(pattern + "=" + subscribedChannels);
    }

    // 取得按表达式的方式订阅的消息后的处理
    public void onPMessage(String pattern, String channel, String message) {
        log.info(pattern + "=" + channel + "=" + message);
    }
}

 
获取单例Jedis连接池:

package cn.xuetang.common.redis;

import cn.xuetang.common.config.Globals;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ShardedJedisPool;

import java.util.Date;

/**
 * Created by Wizzer on 14-4-8.
 */
public class JedisPoolUtil {
    private final static Log log = Logs.get();

    public synchronized ShardedJedisPool getShardedJedisPool() {
        if (Globals.SHARDEDJEDIS_POOL == null) {
            MyJedis myJedis=new MyJedis();
            Globals.SHARDEDJEDIS_POOL = myJedis.shardedJedisPool();
        }
        return Globals.SHARDEDJEDIS_POOL;
    }

    public synchronized JedisPool getJedisPool() {
        if (Globals.JEDIS_POOL== null) {
            MyJedis myJedis=new MyJedis();
            Globals.JEDIS_POOL = myJedis.jedisPool();
        }
        return Globals.JEDIS_POOL;
    }
}

数据入列同时发布订阅消息:

ShardedJedis shardedJedis=Globals.SHARDEDJEDIS_POOL.getResource();
                txt.put("appid", appInfo.getId());
                shardedJedis.lpush("image", Json.toJson(txt));
                Jedis jedis=Globals.JEDISPOOL.getResource();
                jedis.publish("newimage","true");

 

处理订阅消息的类:

 

package cn.xuetang.common.task;

import cn.xuetang.common.action.BaseAction;
import cn.xuetang.common.config.Globals;
import cn.xuetang.common.redis.MyJedisListenter;
import cn.xuetang.common.util.DateUtil;
import cn.xuetang.modules.baby.bean.Baby_image;
import cn.xuetang.modules.baby.bean.Baby_info;
import cn.xuetang.modules.user.bean.User_conn_wx;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Strings;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;

import java.util.*;

/**
 * Created by Wizzer on 14-3-31.
 */
@IocBean
public class ImageTask extends BaseAction implements Runnable {
    @Inject
    protected Dao dao;
    private final static Log log = Logs.get();

    public void run() {
        try {
            log.info("ImageTask start!");
            final JedisPoolUtil jedisPoolUtil = new JedisPoolUtil();
            boolean isEnable = false;
            while (!isEnable) {
                try {
                    jedisPoolUtil.getShardedJedisPool().getResource();
                    isEnable = true;
                } catch (Exception e) {
                    log.info("The redis connection is not successful,wait " + Globals.REDIS_CONFIG.getRedisTimeout() + "ms try again.");

                }
                try {
                    wait(Globals.REDIS_CONFIG.getRedisTimeout());
                } catch (Exception e) {

                }
            }
            final ShardedJedis shardedJedis = jedisPoolUtil.getShardedJedisPool().getResource();
            final Jedis jedis = jedisPoolUtil.getJedisPool().getResource();
            MyJedisListenter listenter = new MyJedisListenter() {
                @Override
                public void onMessage(String channel, String message) {
                    //业务代码具体实现
                    while (shardedJedis.exists("image")) {
                        String data = shardedJedis.rpop("image");
                    }
                }
            };
            jedis.subscribe(listenter, "newimage");

        } catch (Exception e) {
            log.error(e);
        }

    }

}

 

 

2014四月8

Nutz:POST数据的常用方法

 Request req = Request.create("http://127.0.0.1/api/user/sendtext?mykey=" + mykey, Request.METHOD.POST);
                            JsonFormat jsonFormat=new JsonFormat();
                            jsonFormat.setAutoUnicode(true);//防止中文乱码,以unicode编码,根据需要设置
                            req.setData(Json.toJson(map,jsonFormat));
                            req.getHeader().set("Content-Type","application/octet-stream");//设置以字节流传送数据
                            Response resp = Sender.create(req).send();
                            if (resp.isOK()) {
                                log.info(resp.getContent());

                            }



2012十二月5

建设方案:12329公积金电话热线语音平台

2012年9月28日,中华人民共和国住房和城乡建设部下发《关于开通12329住房公积金热线的通知》,这也苦了我们搞软件开发的程序猿们,在这里简单谈谈12329热线的建设方案。

电话热线平台其核心无非是语音自助查询和人工电话接听了,目前各地市基本上都有网上查询系统,也有一部分有自己的语音热线平台,如何充分利用现有资源实现和满足通知要求,值得思考。

 图片源自:12329住房公积金热线服务导则

方案1:

在满足《12329住房公积金热线服务导则》要求的原则下,充分利用住房公积金管理中心现有资源,结合12345等其他热线平台,实现12329热线功能。

即:

对于本市12345热线平台和原公积金热线都是我们公司做的话,做整合是比较理想的方案,但这里有一些问题需解决:

1)两个热线运销商不一,需协调选择最优方案;

2)12345和公积金分属不同部门单位,需地市政府协调资源;

3)从12329转出12345需要知道来源直接接入坐席,则12329需保持通话,运营商是收费的;

4)在12345热线不能判断公众是选择个人业务还是单位业务;

等等。

方案2:

自建一套全新的语音平台,我公司与语音设备长期合作,已配套开发出热线业务处理平台,短信、电话、微博、传真、三方通话等等,IVR流程开发、公积金查询系统接口开发、订制功能开发等不在话下。

公司网站:http://www.hfits.com.cn

2011十二月20

安徽电信20M光纤宽带可以预约办理了!

据咨询,199¥套餐赠送的200¥话费可以抵扣3G上网流量。
目前使用的套餐为集团用户:149¥-20¥的4M宽带+50¥包3G流量=每个月179¥
升级后为:199¥20M宽带赠送200¥话费可抵扣3G流量~~

月基本费 宽带 iTV 国内话费
+点对点短信
固话资费 手机资费
199元 20M
(744小时)
送全年iTV
免费观看
(标清)
送200元话费
套餐内最多3部手机
和1部固话共享
区内市话:前3分钟0.2元
以后0.1元/分钟
区间市话:0.2元/分钟
长途直拨:0.29元/分钟 
市话0.15元/分钟
长途直拨:0.29元/分钟
漫游:0.29元/分钟
全国接听免费
299元 送400元话费
套餐内最多3部手机
和1部固话共享
399元 送600元话费
套餐内最多3部手机
和1部固话共享
599元 送全年iTV
免费观看
(高清)
送900元话费
套餐内最多3部手机
和1部固话共享

月上网流量:以上套餐都为100M/卡

预约登记

 
 
 
 
2011十二月19

灵验:69岁现象?

【灵验:69岁现象?】:金正日(1942-2011),69岁;卡扎菲(1942-2011),69岁;萨达姆(1937-2006),69岁;苏联(1922-1991),69岁。2018… …        @李以亮

2011十二月17

全体中国人民的2011年终总结,太强悍了,不服不行!!

 

全体中国人民的2011年终总结,太强悍了,不服不行!!!

来源: 方一明的日志 

2011总结

 
    跟往年一样,这是蛋疼的一年,坑爹的一年,杯具的一年,纠结的一年。
    这一年,“我爸是李刚”拉开了中国人拚爹的序幕,大量的富二代官二代用他们的行动告诉我们:人生最重要的不是你所朝的方向,而是取决于你是谁的精子。
    这一年,重庆的打黑运动让我们明白:电视上经常看到的那些衣着光鲜,人模狗样的公仆,他们往往在下一刻就变成了黑老大。而你是公仆还是黑社会,关键看你有没有站错队。
    这一年,日本9.0级地震震垮了核电站,也震碎了国人愚昧的神经,那些买不起房而被迫单身的人们,因为手里有几袋碘盐而变得奇货可居。
    这一年,地球将模式调成了震动,上帝的子民失去了他的辟佑陷入苦海,但在中国,人们在电视上看到玉树和云南大爱不断升华,党领导人民战胜了一次又一次天灾。多难,但并没兴邦。
    这一年,国与民争利达到高潮,财政收入连创新高,人民饭碗却营养不良。GDP世界第二,百姓收入勉强苟活,房事彻底沦为多数人的浮云。而盛会,依然在一个叫隆重的地方举行。
    这一年,苹果砸中牛顿沉寂数百年后,以数码产品的姿态席卷全球。世界上最遥远的距离是:我们一起出门,你去买苹果四代,而我却只能买四袋苹果。
 
    这一年,谢霆锋终于意识到自己对柏芝的了解始终超越不了天涯上的民工,于是他放弃了。我固执的认为他一定看到了杂谈那个万人景仰的回复。男人,无论好坏,都翻不过那道绿帽砌成的坎,有的秋后算帐,有的立马摊牌。
    这一年,芙蓉姐姐从大S变成了小S,凤姐的绿卡让我们彻底断了成功可以复制的念想。但不管是李宇春,还是曾轶可,都是我的哥,我的哥。。
    这一年,曾经风靡万千少女,改进社会风气,提高青少年内涵,成就中国互联网第一个PS狂欢的小胖,他结婚了。都说快乐不会是永久的,所以你不可能永远保持单身。
    这一年,南科大45名学子以非暴力不合作表达了对中国教育的鄙视,一潭死水总算荡起了一丝波浪。但死水原本就不应该有波浪,所以,他们在潭中注满了水泥。
    这一年,药家鑫让那些被车撞倒的人,拼出考公务员的力量爬起来,然后跑掉,甚至连别人汽车的损失都来不及赔。
    这一年,转基因和地沟油让中国人坚信他们是核战争最后的幸存者。在网上,他们表达吐血身亡的语句变成了:遂吐3公升地沟油而亡。
    这一年,李昌奎废除了大理国的死刑,以丧尽天良的兽行救活了他的同类,或者说,那个叫赛锐的同类以通天的手腕救活了他。这已经不重要了,中国的法律本身只具有观赏性,那些在文革中双手沾满同胞鲜血的侩子手今天照居庙堂之上,就注定了杀人偿命不过是老祖宗目光短浅的一句呻吟。
    这一年,唱红治愈了不孕,还成为精神病院最有效的治疗手段,而监狱里,住满了共产主义接班人。
    这一年,西门庆发现了武大郎阳痿的秘密,用实际行动霸占了金莲,一向对内要钱不要脸对外要脸不要钱的武大郎当即采用了3种方式表达抗议,赢得赞誉一片:大郎家祖产多,从不跟周围邻里那帮小气鬼一般见识。
    这一年,各地下雨全是100年不遇,武汉的海景超过公交成为新的城市名片。成都,长沙,南京纷纷在报纸上表示自己是特大号护舒宝,流量再多也不用担心,随即就被老天爷一个无情的耳光扇过去。。分析认为:此护舒宝为山寨品,也就是:made in china。
    这一年,共和国的脊梁被草根唾骂,原因在于草根们把共和国的脊梁当成了中国脊梁。
    这一年,绿皮火车见到了蒸汽火车,感叹世间人情冷暖,我们终究都逃不过鸟尽弓藏的命运。开明的蒸汽火车说:历史的车轮在前进,我们都尽到了自己所处位置的责任,现在是高铁的时代了,你再不退下就是开历史的倒车,中国人民才被历史的车轮碾过,还没爬起来,一回头却看见你在倒车,你叫他们情何以堪呐。
    这一年,高铁恍如一夜之间长满祖国各地,人们用高于普车数倍的价格向铁道部购买时间,而那些时间充裕的人因普车的取消也不得不买几个小时,然后在目的地玩手机来消磨时间。
    这一年,号称世界领先的动车出轨了,人们悲怆的发现,吃的,住的,坐的竟没有一种让人蛋定,以河蟹着称的媒体也开始草泥马了,在经历了出事→微博讨论→小秘书删帖→微博疯狂讨论→小秘书来不及删帖→问责呐喊声四起→传统媒体跟进→微博谣言四起→政府辟谣→产生新的流行语→李承鹏发文→韩寒发文→讽刺段子出炉→五毛辟谣搅混水→讨论进入高潮→总理现身→微博一片体贴谅解→和谐,删帖,噤声→搞笑段子出炉→下次。。。后,酱油瓶仍旧在手,真相的高度永远高于酱油瓶的高度,对于善良的中国人来说,打酱油比抢碘盐还来得更轻松和毫无风险。
    这一年,黑社会败给了社会黑,社会黑又催生了黑监狱,黑监狱关的却不是黑社会。黑社会说:监狱,本就是黑色,黑夜给了中国黑色的监狱,它们却用来禁锢冤屈。
    这一年,灰太郎对喜洋洋说:我咬你,你不要动,我们要和谐。
    这一年,五毛依旧凶猛,天涯沦落的不仅是国关,还有八卦。而在杂谈,五毛还是一如既往的苦逼。
    这一年,人民仍然相信,皇帝是好的,中央是清白的,坏的只是地方。当不公降临在他身上时,他最期待的不是改良制度,而是渴望清官。
    这一年,雷公也成了弱势群体,悲催的替铁道部背了黑锅。当我们在盘点中国事故责任人时,发现他们分别是临时工、临时工、临时工。。。还有雷公,这时玉帝大叫道:他也是临时工。
    这一年,央视和百度,一个婊子一个奴才,为争牌坊打起来了。请问你支持谁?—-废话,当然是支持google。那么假如央视和百度同时落水,你是去吃火锅还是去K歌?—-废话,当然是掏出鸡鸡往水里尿尿。
    这一年,我想对日本人说:不用担心,你们的国家不会抛弃你们!最后我要对中国人民说:不要幻想太多,你只能靠自己。
2011十二月7

首颗适合生物居住的类地行星,地球的备份–银河系漫游指南

中新社华盛顿12月5日电(记者吴庆才)美国宇航局5日发布声明宣布,该局通过开普勒太空望远镜项目证实了太阳系外第一颗类似地球的、可适合居住的行星。

科学家们表示,这颗行星的表面温度约为70华氏度(相当于21摄氏度),非常适宜生物的居住。此外,这颗行星上还可能有液态水,而液态水被科学家视为生命存在的关键指标。

“关于这颗行星有两件令人兴奋的事,”开普勒科学队副队长纳塔利·巴塔尔哈说,这颗行星处在“可居住带”之中,它上面的温度既不是太高也不是太低,有可能存在液态水,而且这颗行星环绕着一颗类似太阳的星球运转。

该行星被命名为开普勒-22b (Kepler-22b),距离地球约600光年之遥,体积是地球的2.4倍,这是目前被证实的从大小和运行轨道来说最接近地球形态的行星,它像地球围绕太阳运转一样每290天环绕着一颗类似于太阳的恒星运转。

美国宇航局华盛顿总部的开普勒项目科学家道格拉斯·赫金斯说,“这是发现地球的‘双胞胎’之旅上的一个重要里程碑。”

不过,科学家们目前还不清楚这颗行星的组成主要为岩石还是气体或液体。

此外,美国宇航局科学家还宣布自今年2月以来共发现了1094颗新的候选行星,使其总数达到2326颗。不过迄今只有包括开普勒-22b在内的29颗行星被证实是真正的行星,科学家们相信绝大多数候选行星最终都将被证实为真正的行星。

2011九月23

网游玩家破解蛋白质结构获科学验证认可

在网上玩玩游戏就可以在著名的英国《自然》系列学术刊物上发表论文?这听起来非常不可思议,但《自然·结构和分子生物学》杂志近日发表了这样一篇有网络游戏玩家署名的论文:《蛋白质折叠游戏玩家揭示一种单分子逆转录病毒蛋白酶的晶体结构》。

文中提到的蛋白质折叠游戏名为Foldit,是美国华盛顿大学研究人员开发的一款具有浓厚科学色彩的网络游戏。游戏玩家要做的是,在给定一个目标蛋白质后,在遵守科学规律的前提下,用氨基酸如搭积木一样把目标蛋白质“搭建”出来

玩这个游戏其实不需要太多科学知识,只要遵守预先设定的规则就行。玩家每次游戏成功都可获得积分,提升自己在游戏世界的知名度,碰到难题时还可以在网上和其他玩家交流。(按:看介绍这款游戏其实类似于Folding@home的人工操作版)

此次被破解结构的蛋白质名为M-PMV,是一种与猴类艾滋病病毒有关的蛋白质。科研人员一直没能探明它的具体结构。华盛顿大学研究人员于是把这个蛋白质设为目标,放入Foldit游戏中。没过多久,就有玩家找出了可能的氨基酸组装方式。

华盛顿大学研究人员随之用X射线等对游戏玩家给出的结果进行了验证,发现这个玩出的结果是准确的。于是在有关论文的作者中,出现了Foldit游戏中两个玩家群组的名字。(文/新华网)

2011九月9

安徽电信:开放五码(5码)查询,方便烧号机入网

办理地址:

http://ah.ct10000.com/shop/FiveCodeAction.do?method=code

第一步:填写个人信息;

第二步:接受邮件验证;

第三步:选择上网套餐。

温馨提示:
1、您需要为手机号办理20元以上流量包,如果原来已办理20元或以上流量包,则需往上升级为30元或50元流量包。如果已有50元流量包,则可直接查询五码,无需办理。
2、办理流量包的方式:您可以直接点击或者通过手机发送短信412220到10001开通20元包150M上网包、发送短信412230到10001开通30元300m上网包 、发送短信412250到10001开通50元包800M上网包。