Mysql:截取字符串
SELECT SUBSTRING_INDEX(SUBSTRING(url,LOCATE(“sn=”,url)+3),’&’,1),url FROM wx_kw_url_1111
Wizzer's Blog
SELECT SUBSTRING_INDEX(SUBSTRING(url,LOCATE(“sn=”,url)+3),’&’,1),url FROM wx_kw_url_1111
项目地址: https://github.com/Wizzercn/NutzCodematic
Nutz 代码生成器:
可以生成Pojo类、Action类;
支持MySQL、Oracle、MS SQL2000、ODBC等;
classes是在jdk1.7下编译,可以直接双击 run.bat 运行。
迟迟没放出来的原因是代码写的太烂……
仅作参考。
编辑配置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); } } }
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年9月28日,中华人民共和国住房和城乡建设部下发《关于开通12329住房公积金热线的通知》,这也苦了我们搞软件开发的程序猿们,在这里简单谈谈12329热线的建设方案。
电话热线平台其核心无非是语音自助查询和人工电话接听了,目前各地市基本上都有网上查询系统,也有一部分有自己的语音热线平台,如何充分利用现有资源实现和满足通知要求,值得思考。
图片源自:12329住房公积金热线服务导则
在满足《12329住房公积金热线服务导则》要求的原则下,充分利用住房公积金管理中心现有资源,结合12345等其他热线平台,实现12329热线功能。
即:
对于本市12345热线平台和原公积金热线都是我们公司做的话,做整合是比较理想的方案,但这里有一些问题需解决:
1)两个热线运销商不一,需协调选择最优方案;
2)12345和公积金分属不同部门单位,需地市政府协调资源;
3)从12329转出12345需要知道来源直接接入坐席,则12329需保持通话,运营商是收费的;
4)在12345热线不能判断公众是选择个人业务还是单位业务;
等等。
自建一套全新的语音平台,我公司与语音设备长期合作,已配套开发出热线业务处理平台,短信、电话、微博、传真、三方通话等等,IVR流程开发、公积金查询系统接口开发、订制功能开发等不在话下。
公司网站:http://www.hfits.com.cn
据咨询,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/卡
【灵验:69岁现象?】:金正日(1942-2011),69岁;卡扎菲(1942-2011),69岁;萨达姆(1937-2006),69岁;苏联(1922-1991),69岁。2018… … @李以亮
来源: 方一明的日志
中新社华盛顿12月5日电(记者吴庆才)美国宇航局5日发布声明宣布,该局通过开普勒太空望远镜项目证实了太阳系外第一颗类似地球的、可适合居住的行星。
科学家们表示,这颗行星的表面温度约为70华氏度(相当于21摄氏度),非常适宜生物的居住。此外,这颗行星上还可能有液态水,而液态水被科学家视为生命存在的关键指标。
“关于这颗行星有两件令人兴奋的事,”开普勒科学队副队长纳塔利·巴塔尔哈说,这颗行星处在“可居住带”之中,它上面的温度既不是太高也不是太低,有可能存在液态水,而且这颗行星环绕着一颗类似太阳的星球运转。
该行星被命名为开普勒-22b (Kepler-22b),距离地球约600光年之遥,体积是地球的2.4倍,这是目前被证实的从大小和运行轨道来说最接近地球形态的行星,它像地球围绕太阳运转一样每290天环绕着一颗类似于太阳的恒星运转。
美国宇航局华盛顿总部的开普勒项目科学家道格拉斯·赫金斯说,“这是发现地球的‘双胞胎’之旅上的一个重要里程碑。”
不过,科学家们目前还不清楚这颗行星的组成主要为岩石还是气体或液体。
此外,美国宇航局科学家还宣布自今年2月以来共发现了1094颗新的候选行星,使其总数达到2326颗。不过迄今只有包括开普勒-22b在内的29颗行星被证实是真正的行星,科学家们相信绝大多数候选行星最终都将被证实为真正的行星。
在网上玩玩游戏就可以在著名的英国《自然》系列学术刊物上发表论文?这听起来非常不可思议,但《自然·结构和分子生物学》杂志近日发表了这样一篇有网络游戏玩家署名的论文:《蛋白质折叠游戏玩家揭示一种单分子逆转录病毒蛋白酶的晶体结构》。
文中提到的蛋白质折叠游戏名为Foldit,是美国华盛顿大学研究人员开发的一款具有浓厚科学色彩的网络游戏。游戏玩家要做的是,在给定一个目标蛋白质后,在遵守科学规律的前提下,用氨基酸如搭积木一样把目标蛋白质“搭建”出来。
玩这个游戏其实不需要太多科学知识,只要遵守预先设定的规则就行。玩家每次游戏成功都可获得积分,提升自己在游戏世界的知名度,碰到难题时还可以在网上和其他玩家交流。(按:看介绍这款游戏其实类似于Folding@home的人工操作版)
此次被破解结构的蛋白质名为M-PMV,是一种与猴类艾滋病病毒有关的蛋白质。科研人员一直没能探明它的具体结构。华盛顿大学研究人员于是把这个蛋白质设为目标,放入Foldit游戏中。没过多久,就有玩家找出了可能的氨基酸组装方式。
华盛顿大学研究人员随之用X射线等对游戏玩家给出的结果进行了验证,发现这个玩出的结果是准确的。于是在有关论文的作者中,出现了Foldit游戏中两个玩家群组的名字。(文/新华网)