便便代码人生

关注技术, 偶尔动动手

Archive for the 'Technology' Category

IT

[原] 总算实现SWFUpload和easyui的DataGrid整合了

Posted by bianbian on 2011-12-24 11:25


本文Tags: , ,

不好意思,最近又忙又懒。拖了很久,总算差不多完成了:

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | No Comments »

[原] Powerpoint(PPT) 2003和2007添加http开头的图片的问题解决

Posted by bianbian on 2011-08-11 04:50


本文Tags: , , ,

powerpoint 2003 直接 “AddPicture (http://” 可行,如:

  1. string pic = "http://bianbian.org/example.gif";
  2. _Slide.Shapes.AddPicture(pic, MsoTriState.msoFalse, MsoTriState.msoTrue,
  3.     0, 0, _Pres.PageSetup.SlideWidth, _Pres.PageSetup.SlideHeight);

但在ppt 2007中,无法通过AddPicture添加http开头的图片,必须先AddShape,然后Fill:

  1. PPT.Shape shape = _Slide.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle,
  2.     0, 0, _Pres.PageSetup.SlideWidth, _Pres.PageSetup.SlideHeight);
  3. shape.Fill.UserPicture(pic);

详见:http://support.microsoft.com/kb/928983/en-us

标签: , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C#, Technology, Windows | No Comments »

[原] 基本实现swfupload和easyui的结合

Posted by bianbian on 2011-08-05 04:36


本文Tags: ,

不得不说,前台全用js来做还是很累的。上图一张(半成品):

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript | No Comments »

[原] Linq不能使用CLR Stored Procedure返回ISingleResult

Posted by bianbian on 2011-07-27 12:53


本文Tags: , ,

使用C#写CLR存储过程确实很方便。
不过遗憾的是,如果CLR里通过SqlContext.Pipe.Send()返回Select结果的话,并不能被Linq to SQL自动识别而返回ISingleResult的。(因为部署CLR存储过程实际产生的代码是不包含select语句的)
换句话说,所有CLR存储过程的返回值在Linq to SQL里都会被当成int。
解决办法:
1)如果该存储过程没有out的参数,比较好办:使用ExecuteQuery并EXEC 存储过程
如:
var query = DataContext.ExecuteQuery(“EXEC P_LoadUserWithTraining @trainingId={0}”, id).Single();
这种方法能取到结果,但是没有办法获得out参数。

2)如果该存储过程又有out的参数需要获得值,又返回select结果集的:
非常麻烦,只能部署CLR存储过程前,先手动在数据库里create procedure(同名,里面填上参数和select语句),
然后骗取Linq to SQL生成返回ISingleResult的代码,然后drop procedure,再部署CLR存储过程。
否则,即使把返回int的代码手动改成返回ISingleResult的,也会报错。我这里一直报 ArgumentOutOfRangeException
所以针对这种存储过程,最好还是T-SQL语句写。CLR的反而好麻烦。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C#, Database, Technology | 1 Comment »

[原] /libtool: line xxx: X–tag=CC: command not found的问题解决

Posted by bianbian on 2011-04-06 09:52


本文Tags: ,

今天编译rsl,是在一台完全空白的ubuntu上(对,完全空白,连gcc也没有)。
apt-get install gcc autoconf automake libtool
略过不表。
make的时候,一直提示如下错误:
/libtool: line 646: X–tag=CC: command not found

google了半天,终于找到这个:

http://processors.wiki.ti.com/index.php/DMAI_GStreamer_Plug-In_Getting_Started_Guide

../libtool: line 763: X–tag=CC: command not found
The libtool on your host computer is causing the problem (using $(echo) when it is not defined). Either install an older libtool version (1.5.26) or define the echo environment variable.

  1. export echo=echo
标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Linux | 10 Comments »

[原] 建了一个google code项目:jquery myhint plugin

Posted by bianbian on 2011-01-16 12:24


本文Tags: , ,

在这里:http://code.google.com/p/jquery-myhint-plugin/

easy to use myhint plugin:

  1. <script src="jquery.myhint.min.js" type="text/javascript"></script>
  2. <link href="jquery.myhint.css" type="text/css" rel="Stylesheet" />
  3. ...
  4. <tag class="_hint" hint="text">...</tag>
  5. <tag class="_hint" hint="(left,top)text">...</tag>
  6. <tag class="_hint" hint="#tipid">...</tag><div id="tipid">text</div>
  7. <tag class="_hint" hint="(left,top)#tipid">...</tag><div id="tipid">text</div>

效果:

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | No Comments »

[原] 搞定ArcGis的切片原理和离线服务

Posted by bianbian on 2010-12-04 12:00


本文Tags: , ,

搞定ArcGis的切片原理和离线服务,需要继承TiledMapServiceLayer
另外完善了下午写的程序,批量下载ArcGis的切片或从Service上抓切片
另外晚上写了个程序,自动根据REST服务生成新的TiledMapServiceLayer
哈哈,现在从无开始部署一个离线的Flex ArcGis平台非常方便。。。。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology | No Comments »

[原] 在协同决策系统内实现基于Flex+ArcGIS的航班天气展示

Posted by bianbian on 2010-12-02 09:13


本文Tags: ,

最近在忙这个,呵呵。
集成真实航班和天气数据:

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology | No Comments »

[原] 一种将数据表DataTable转为JSON格式的新方法

Posted by bianbian on 2010-09-23 03:17


本文Tags: , ,

最近实现一种将数据表转为JSON表示的新方法。
这种方法表示的JSON数据更省空间(尤其是网络传输,能省很多数据量),使用起来也很方便。
假设有这样一张数据表:

ID Name Location
1 周杰伦 香港
2 侯佩岑 台湾
3 张靓颖 大陆

一般的JSON表示方法为:

  1. [
  2. {"ID":1, "Name": "周杰伦", "Location": "香港"},
  3. {"ID":2, "Name": "侯佩岑", "Location": "台湾"},
  4. {"ID":3, "Name": "张靓颖", "Location": "大陆"}
  5. ]

可以看到,数据表的字段信息(column)在每条记录里都写了一遍,比较浪费空间。如果字段很多很长,甚至会比有效内容更多。随着记录数增加,浪费的数据量是很可观的。尤其像以前小百合BBS自己付流量费的时候,流量啊流量。。。。。。

我实现的表示方法产生的JSON格式是这样的:

  1. {
  2. "C":{"ID":0, "Name":1, "Location":2},
  3. "D":[
  4. [1, "周杰伦", "香港"],
  5. [2, "侯佩岑", "台湾"],
  6. [3, "张靓颖", "大陆"]
  7. ]}

这种方法将字段信息单独提取到C属性里,而D属性是纯粹的记录数据。
其实D属性本身已经完全能表示记录内容,C属性只是为了使用时方便。
在这短短几个字段及几条数据的极端情况下,已经省下几十字节。

下面对比使用方法,我承认这种方法稍微比通用的方法复杂一点,但是带来的节省,个人认为还是值得的:

  1. 通用方法取周杰伦:[0].Name
  2. 我的方法取周杰伦:D[0][C.Name]

下面是上述DataTable转JSON的C#代码

  1. using System;
  2. using System.Text;
  3. using System.Web.Script.Serialization;
  4. /// <summary>
  5. /// 一种JSON表示DataTable的新方法
  6. /// <see href="http://bianbian.org/technology/javascript/361.html" />
  7. /// </summary>
  8. public static class JsonUtil
  9. {
  10.     static JavaScriptSerializer _jss = new JavaScriptSerializer();
  11.  
  12.     /// <summary>
  13.     /// DataTable 转换成 JSON string。
  14.     /// </summary>
  15.     /// <param name="dt">需要转换的DataTable</param>
  16.     /// <returns>JSON结构字符串</returns>
  17.     public static string FromDataTable(System.Data.DataTable dt)
  18.     {
  19.         StringBuilder sb = new StringBuilder(256);
  20.         FormDataTable(dt, sb);
  21.         return sb.ToString();
  22.     }
  23.  
  24.     /// <summary>
  25.     /// DataTable 转换成 JSON string。
  26.     /// </summary>
  27.     /// <param name="dt">需要转换的DataTable</param>
  28.     /// <param name="sb">StringBuilder</param>
  29.     public static void FormDataTable(System.Data.DataTable dt, StringBuilder sb)
  30.     {
  31.         sb.Append("{C:{");
  32.         // -> {"ID":0, "Name":1}
  33.         for (int j = 0; j < dt.Columns.Count; j++)
  34.         {
  35.             if (j > 0)
  36.                 sb.Append(',');
  37.             sb.Append('"').Append(dt.Columns[j].ColumnName).Append('"')
  38.                 .Append(':').Append(j);
  39.         }
  40.         sb.Append("},D:[");
  41.  
  42.         for (int i = 0; i < dt.Rows.Count; i++)
  43.         {
  44.             if (i > 0)
  45.                 sb.Append(',');
  46.             sb.Append('[');
  47.             for (int j = 0; j < dt.Columns.Count; j++)
  48.             {
  49.                 if (j > 0)
  50.                     sb.Append(',');
  51.                 _jss.Serialize(dt.Rows[i][j], sb);
  52.             }
  53.             sb.Append(']');
  54.         }
  55.         sb.Append("]}");
  56.     }
  57. }
标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C#, JavaScript, Technology | 11 Comments »

[原] jquery-easyui的combotree在.net开发中不显示数据的问题

Posted by bianbian on 2010-08-29 12:07


本文Tags: , , ,

最近使用jquery-easyui 1.2,遇到一个问题。
一搜索,发现好多人在问:
问题见:http://jquery-easyui.wikidot.com/forum/t-248817/combotree-net
“combotree在.net开发中,一直不显示数据。
单独html页面就可以显示出来。同一数据文件,json格式绝对正确。”

解决问题首先要发现原因,用firebug试了一下,发现是combotree读取json的时候是用POST方法。
而.net环境不支持静态文件用POST方法获取内容。错误如下:
POST app_user.js

http://localhost:9655/js/app_user.js

405 Method Not Allowed

发现原因后,解决问题就简单很多。
找到easyui的js代码:
_41.addClass(“tree-loading”);
$.ajax({type:”post”,url:_3e.url,data:_3c,dataType:”json”,success:function(_42){
_41.removeClass(“tree-loading”);

在我的应用中,因为不需要POST方式获取json,就把type:”post”改为type:”get”即可。
已在easyui的官方论坛中说明这个问题,希望以后能多个method的设置选项。

2010.12.18 更新:
新版本jquery-easyui 1.2.1提供了tree组件的method方法设置,但是在用css自动解析方式时无效。
即通过《input class=”easyui-combotree” url=”…js” method=”get” /》调用时,仍然使用POST。
查看代码,原来是这里parseOptions时未对method进行解析:
$.fn.tree.parseOptions=function(_13c){
var t=$(_13c);
return {url:t.attr(“url”),…

加上对method的解析:
return {url:t.attr(“url”),method:(t.attr(“method”)?t.attr(“method”):”post”),…

问题解决。

标签: , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | 2 Comments »

[晕] 中wmdrtc32.dll木马了(Sality virus)

Posted by bianbian on 2010-05-11 06:52


本文Tags:

晕,话说我这个只上少数几个网站的人也会中木马。。。。
这个wmdrtc32.dll可不是一般的木马,具有注入、驱动等多种手段
而且更狠的是,无法安全模式启动,一进安全模式就蓝屏。。。
这次中招的居然是从sourceforge.net下的一个项目的执行文件,在这里曝光一下:

http://sourceforge.net/projects/flvconverternet/

360能检测到威胁,但是没办法彻底杀干净。。。
郁闷,还没找到解决办法。。。有谁知道怎么清除告诉我一声,谢了。
我的机器不可能重装,里面eclipse有5个(java、aptana、IDL、Flex、php),visual studio有3个(vc6、2005、2008),Delphi有2个,还有python、ArcGis、oracle、ENVI、。。。
要重装直接杀了我吧。。。
这个网页对这个病毒进行了详细的分析:

http://www.threatexpert.com/report.aspx?md5=8f0020f81ab2be1e9136ce831fbc525f

最后补充:无奈下装了360杀毒软件。。。
这个无良的Sality,居然把硬盘的exe全感染了。。。一点毒品都没有!!!

标签:

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology | 1 Comment »

[原] Flex的全屏模式

Posted by bianbian on 2010-05-08 05:09


本文Tags: , ,

除了这篇文章里提到的需要传入参数 allowFullScreen=true 以外:

http://www.adobe.com/devnet/flashplayer/articles/full_screen_mode.html

经我的血泪测试(啊啊啊,我的时光啊),以下这条语句似乎必须点击操作触发才有效:
stage.displayState = StageDisplayState.FULL_SCREEN;
也就是说,用Timer之类调用这条语句都无法全屏,错误号是#2152 Full screen mode is not allowed.
应该是flash故意禁止这么做,不然一载入就全屏算是个安全问题。
郁闷的是,我准备做的这个东西就是要一载入就全屏。。。。
啊啊啊啊,怎么办?弄个巨大的按钮?点击以后全屏、隐藏按钮?
太邪恶了。。。。啊啊啊啊。。。。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Other, Technology | No Comments »

[原] COM调用PowerPoint后PowerPNT.exe进程仍驻留内存的问题

Posted by bianbian on 2010-04-16 12:42


本文Tags: , , , , ,

前阵子一直纳闷一件事,不是写了个早上10点自动生成天气会商ppt的程序嘛,不过时好时坏。具体的说:我去维护了一下后第二天是正常的,但是第三天就又不行了。看cron的日志(顺便推荐一下nnCron Lite),程序都正常启动了,但是ppt就是没有正常生成。
像我现在写的代码一般都不会有问题了,很少需要debug;看了几遍也没问题,所以很纳闷呀很纳闷。
后来没办法,开始在程序里输出log,才发现cron运行的时候(用户是SYSTEM),第二次运行:
using PPT = Microsoft.Office.Interop.PowerPoint;
_App = new PPT.Application();
这里会报COMException,真是奇怪了。
而调试的时候又是一切正常(用户是Administrator)。

最后总算捕捉到问题出现的情形:
cron运行,第一次正常产生ppt后,进程里仍驻留了PowerPNT.exe这个程序。
尽管程序是写了:
_App.Quit();
_App = null;
但是进程不会退出。不退出就算了,关键在SYSTEM用户下,第二次再跑程序的时候就会报前面提到的COMException,似乎一Quit(),这个PowerPNT.exe就挂在那里了。而在有用户界面的Administrator用户下,即使上一次进程没退出,也是可以正常工作的。

试了两种办法,可以使功能正常:
1)暴力一点,用完直接把进程kill掉:
Process ps = Process.GetProcessesByName(“POWERPNT.EXE”)[0];
ps.Kill();

2)最后不写 _App.Quit() ,让进程在内存里驻留。

最后还是选了2),毕竟服务器内存有10G,一个PPT进程也就20多M,而且PPT进程一个用户只有一个,相当于preload了,呵呵。。。

回家后找了一下文章,这个确实是Microsoft的问题。希望这篇文章对遇到这个问题的朋友有用。

如下是相关地址:
PPT2000: PowerPoint 2000 Remains in Memory After Getting a Presentation and Being Closed
powerpnt.exe remains running after OLE Quit()
GetObject and CreateObject behavior of Office automation servers

标签: , , , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C#, Meteorology | No Comments »

[原] 基于jQuery的自动TAB选项卡实现

Posted by bianbian on 2009-07-24 01:03


本文Tags: , ,

jQuery挺好用,我就不说啥了。
今天实现了“自动TAB”,下面分享一下。有人会问为啥不用jquery-ui,主要是页面css已经全弄好了,实在不想为ui再写一次;其次是ui毕竟是那么大个家伙,心疼我的性能。
HTML页面非常简单:

  1. <div class="tabBox">
  2.     <!--选项卡菜单-->
  3.     <ul class="tabMenu">
  4.         <li class="on"><a>选项卡1</a></li>
  5.         <li><a>选项卡2</a></li>
  6.     </ul>
  7.     <!-- 选项卡内容-->
  8.     <div class="hide">
  9. 选项卡1内容
  10.     </div>
  11.     <div class="hide">
  12. 选项卡2内容
  13.     </div>
  14. </div>

之后就是用jQuery自动对这个.tabBox进行处理,加上鼠标点击自动切换的功能(当然可以加上鼠标移过的选项支持,作为示例,我就没写那么完善):

  1. $(function () {
  2.     //===== TAB自动切换 tabBox =====
  3.     // <div class="tabBox">
  4.     //   <ul class="tabMenu"><li class="on"><a>选项卡1</a></li></ul>
  5.     //   <div class="hide">内容1</div>
  6.     // </div>
  7.     // (1) li增加"index"记录偏移量(第i项),给a增加click方法
  8.     $('.tabBox .tabMenu li').each(function(i, li) {
  9.         li = $(li);
  10.         li.attr('index', i)
  11.             .children('a').attr('href', 'javascript:;').click(function() {
  12.                 //点击项的li的class设为on
  13.                 var li_on = $(this).parent(),
  14.                     index = li_on.attr('index');
  15.                 li_on.parent().children().removeClass('on');
  16.                 li_on.addClass('on');
  17.                 //显示对应的div内容。注意get(index)返回的是DOM节点,因此需要再$()转为jQuery对象
  18.                 $(
  19.                     li_on.parent().parent().children('div').addClass('hide').get(index)
  20.                 ).removeClass('hide');
  21.         });
  22.         //显示现有的li class=on对应的div内容
  23.         if (li.hasClass('on')) {
  24.             li.children('a').click();
  25.         }
  26.     });
  27. });
标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | No Comments »

[原] Thinkpad T400在Windows XP下装蓝牙的办法

Posted by bianbian on 2009-05-01 02:50


本文Tags: , ,

我的驱动都是手装的,只安装了必要的驱动(Think的那一大陀软件只安装了硬盘防震动的),发现XP下无法识别T400的蓝牙设备。
症状:Fn+F5没反应,bluetooth的指示灯不亮(机器左下角的硬件已经拨到启动无线、主板BIOS也已经Enable蓝牙)。
安装了蓝牙软件后一直提示“未找到buletooth设备”。
后来经过不断尝试,写出解决办法:
安装HOTKEY(鄙视Thinkpad啊。。。。非要多装个垃圾。。。。)。
找到HOTKEY的安装目录,手动运行TpFnF5.exe(其实就是按Fn+F5组合键后启动的程序,不知道为什么我全手动
装的驱动为什么不支持Fn+F5的监听)。
一运行,就提示找到新硬件,然后就可以安装Windows XP的蓝牙补充驱动和软件了,这时就可以看出蓝牙设备原来是个USB。
装完后,不能卸载HOTKEY,否则声音控制的那几个键不能用了,卸载程序太暴力。
只好在注册表里禁止开机运行。
记在这里,搜索过来确实有用的朋友请吱一声。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology, Windows | 3 Comments »