Spiga

编程小练习:拆分自然数

2009-06-30 22:42 by yicone, 52 visits, 网摘, 编辑

老赵给出的题目

有一种算法叫"蒙(发平声)" !
花了一整天才写出来, 没有算法思想, 无数次的尝试才得出来; 即便有了结果, 但也还是没什么收获, 这就是这种算法的特点:( 略为沮丧

Code

顺便推荐一下NConsoler, 对命令行程序提供参数解析的功能, 开源. 类似的东西还有Mono.Options, NConsole(没找到代码), CodeProject.com上还有用正则表达式实现的...

NConsoler 使用很简便, 优雅, 与"著名的"AjaxPro 的接口有几分神似.
功能上考虑很全面, 在程序参数的验证, 类型转换; 参数错误时返回友好的错误提示; 输出帮助信息(即/?或-?)等这些方面, 都提供了快捷的支持.

最有特色的一点, 是把一个命令行程序的功能抽象为 Action, 举例说明下吧:
比如我们有个管理文件系统的命令行程序, 名为fm.exe (file manager)

>> fm /n foo.txt
>> fm /r foo.txt

上面的/n表示new, /r表示remove, 如果自己写代码, 需要写一个读取和判断不同参数的"路由"方法, 进而将调用分支到不同的功能中.  如果用NConsoler来实现这个程序的入口, 我们可以只通过两个Action方法来实现. 示例:


[Action]
public static void New([Required] string filename){}

[Action]
public static void Remove([Required] string userName){}

那么在使用时稍作调整:
>> fm new foo.txt
>> fm remove foo.txt

如果在写命令行程序时, 还在自己手工做类似的轮子, 不妨借鉴.

 

脚印: 2009年3月15日 上海 浦东张江

2009-03-15 21:28 by yicone, 13 visits, 网摘, 编辑

周末在家懒了两天, 很久没有不去工作的意识了, 偏偏在一个需要加班的时候却不去了:D

周六狠心把笔记本的操作系统恢复到出厂状态. 恢复前花了不少时间整理了下资料, 图片/照片几乎全扔到picasa web中了. 自己又不是色友, 没必要装些ps的工具, 就别没事儿去鼓捣那几张破片片了. 听歌用wmp得了, 貌似自己很少听歌嘛:D Onenote中的记录, 整理了一些到evernote中, 后来发现这样做毫无意义, 扔在角落里先不管它了.

本以为恢复的过程很快, 没想到重启电脑后, Acer会有一个22步的自动安装过程, 安装些驱动和一大堆用不着的软件. 正好借这个当口, 去把晚饭吃了. 回来又手工把那一对用不着的软件卸掉, 然后装了几个基本的工具.

很多以前觉得"必备"的软件都没有装, 只有这个时候, 才知道什么叫必备, 呵呵. 7-zip, Notepad++, chrome, evernote, 谷歌输入法, 没别的啦!
假如windows可以解压rar, 还能少装7-zip:D 聊天找到正在封测的腾讯自家的Web QQ, 省去了每天面对弹窗, 自动升级的乏味了. (QQ 2009 beta在vista经常会死掉, 而且进程也杀不掉, 必须重启!!). MSN其实用到的很少, 所以就先不装了, 虽然9.0的UI和类似twitter的功能都不错.

对于绝大部分时间都在公司渡过的现状, 电脑上能有一个查看代码的工具就可以了, 那些巨大的IDE, 实在无用武之地. firefox, firebug, aptana这些辅助前端开发的利器, 在家也就不使了. 前端的东西太琐碎.

Onenote固然有很多优点, 可每次重装系统/换电脑, 总想着整理一下, 可每次整理有发现太多无意义的记录, 所以就狂删. 所以"三搬如一烧", 瞅着眼前的记录, 已经没有多少日子太久的了, 频繁用到的记录更是少之又少.打开电脑最常做的就是上网, 搜索, 聊天, 所以一个好用快速的浏览器+输入法就够了. 留个强力编辑器, 偶尔看看代码就可以了. 至于上网的需求, 有google的书签, 自动翻译就够了, 毕竟在网上自己消费信息要远远多于生产, 偶尔写一篇blog, 也没必要装live writer啦. 再装个迅雷, 能在线看比较清晰的影片, 夫欲何求!很少用到的却占据大部分数量的软件就扔到虚拟机中吧. 这样以后重装/恢复系统也省事. "云端软件平台"是个不错的东西, 可惜在vista下即便用兼容模式运行, 也会有蓝屏的问题, 所以无福消受啦.保持简单, 也许不久后又会迷失在复杂中, 但还是享受着眼前这难得的简单吧.

 

 

 


脚印 2008年11月月末 上海 周家嘴路

2008-11-27 23:38 by yicone, 28 visits, 网摘, 编辑

从事新工作已有月余,很充实也很疲惫。

自愿投入了不少业余时间,留在工位上整理一个上线不久的网站代码,包括在头脑中建立认识,通过画序列图、流程图、脑图等手段来理清程序的各个方面,除BUG,重构,添加新功能。这些投入多少还是减轻了目前和今后的工作压力的。

另一方面,在工作环境方面,引入了和加强了一些小工具的使用,辅助开发方面有firebug, debugview, log4js,SQL Prompt, Code Rush, Fiddler, Notepad++, Axure PR; 任务管理方面,Outlook on the Desktop, todolist.

在这些工具的使用过程中也遇到了一些问题,如firebug有时会当掉,窗口关不掉,必须要重启firefox才能恢复正常。此问题在个别页面的加载时会多次出现,所以觉得与程序还是有些关系的,有时间“追究”一下。使用firebug遇到的另一个问题是,有时候调试js时,一开始是可以下断点的,但经过一次或几次页面的刷新后,就没法下断点了,这点也可以从firebug中js的行号的颜色上看出,灰色了就不能下断点了。SQL Prompt和VS的默认快捷键有些冲突,暂时没时间去对照尝试,另外就是在VS的数据库项目中,会导致VS响应及其缓慢。CodeRush目前只是发现快速查找文件这个优秀功能速度有些慢。Axure PR目前只是用来画画流程图,不能在图例中直接输入中文比较烦人,谷歌输入法,微软输入法03,智能拼音都有一些问题。

任务管理工具,目前以Outlook为核心,满足公司办公流程需要的同时,确实也方便自己一些事务的管理。TodoList以前也尝试用过几次,现在又一次觉得不顺手了,看来还得多用用,因为相较使用过的诸多TODO工具,这个还是比较适合程序员的啦。MindMap也要加强使用,使其真正为我所用。

下一步如果有时间,除了希望把上述工具调校好,还希望在代码生成工具上做一些尝试。我喜欢优秀工具带给我的乐趣,让平凡的工作多一些效率,也多一些挑战。

HOWTO:FirePHP乱码问题解决

2008-11-08 16:24 by yicone, 65 visits, 网摘, 编辑

FirePHP是一款调试PHP程序的FireBug插件(FireBug是一款Firefox的插件,呵呵,好多插)。由于目前一个程序的编码是GBK编码,导致使用FirePHP进行调试时,fb函数的参数中如果包含汉字,则输出到FireBug的Console后,显示为乱码。

打开FirePHP.class.php,找到function fb($object)这行,在函数内容的顶部加入如下语句:

$Object = encodeconvert('UTF-8', $Object, 1);

encodeconvert函数的内容(来自supesite开源项目)

Code

函数中用到的chinese.class.php可以在SupeSite的include文件夹中找到。

问题解决。

HOWTO:批量删除存储过程和表

2008-11-05 09:30 by yicone, 93 visits, 网摘, 编辑

1.删除存储过程
Code

2. 删除表
注意:删除表的时候先删除约束。NOCHECK在此例中不起作用,必须用DROP。

Code

GDI+学习笔记2

2008-10-25 19:31 by yicone, 19 visits, 网摘, 编辑

目前的需求是要在Windows窗体上呈现一些图形元件,类似MS Visio,可以从工具箱中拖动图形元件到画板上。现在有两种备选方式:
方式一:绘制闭合的线条,然后填充;
方式二:准备好图片,然后绘制图片。
使用方式一,连接线条的各个点的位置需要使用绘图工具辅助确定,然后以渐变色填充。问题是如果要添加新的图形元件,必须要修改程序,除非引入反射和配置机制,实现运行时载入扩充的绘制新图形元件的类型;
使用方式二,好处是扩充的成本要低一些,但是为了要高亮选中的图形元件,需要另外准备一套图片,作实时替换,而替换需要多个操作,如重新绑定业务对象、重新填充文字。

因为项目规模较小、需要的图形元件只有确定的数量,所以考虑方式一实现。

[ECSHOP挖寶]用戶注銷過程

2008-10-25 19:30 by yicone, 83 visits, 网摘, 编辑

$user->logout();
show_message($_LANG['logout'] . "$user->ucdata", $_LANG['back_home_lnk'], 'index.php', 'info', true);

ecshop類:
1. $user是ecshop類的實例;
2. show_message方法定義在lib_main.php中,將傳入的參數處理后輸出到message.dwt模板;
3. "$user->ucdata"被原封輸出到模板上;
4.$user->logout()的作用是清楚COOKIE和SESSION,以及同步退出UCENTER;

uc_call()函數:
1. 退出UCENTER調用的代碼是uc_call("uc_user_synlogout"),執行后回返回一些信息,我的實驗中返回的是404錯誤頁面的HTML,可能和我講UCENTER部署在ECSHOP的子目錄中有關,因不影響目前的使用,所以沒有深究!
2. uc_call函數定義在lib_common.php中,其內調用了restore_error_handler、call_user_func_array、set_error_handler三個函數。call_user_func_array函數定義在uc_client/client.php,可以理解為是UCENTER的API的內容;其余兩個函數是PHP錯誤處理機制的一部分。http://cn2.php.net/restore_error_handler

show_message()函數:
1. show_message的最后一個參數指明頁面是否自動返回指定頁面,其處理是通過以下代碼完成的:
{if $auto_redirect}
<meta http-equiv="refresh" content="3;URL={$message.href}" />
{/if}
如果沒有指明自動返回的頁面,$message.href的值為'javascript:history.back()',表明HTML的meta中可以執行JS腳本;
2. 倒數第二個參數type,取值范圍是warning, error, info,可以用于在message.dwt中根據信息類型顯示不同的圖示,但ECSHOP當前未利用此參數;

編碼問題:
上午在使用Firefox的“Open With Editor”功能時,發現打開的文件中,漢字全部是亂碼,于是搜索了一下編碼的知識。發現網路上,有一些意見認為,GB2312編碼對應的"CODE PAGE"是CP 936,而我在一個名為e-TextEditor中實驗看到,GB3212對應WINDOWS 936, 而GBK對應CP 936,于是上網繼續求證,看到GB2312對應CP 12936,但在e-TextEditor編輯器中并未有此代碼頁可選,所以我姑且草草認為CP 12936與WINDOWS 936等價,不想再深究了!
然而,亂碼問題并未因此番調查而解決!我使用的ECSHOP是GBK編碼,我將自己使用的所有編輯器全部設為GB2312編碼(在Notepad++中是“字符編碼切換為ASCII碼”,尚未明確其與GBK以及GB2312的嚴格關系),FTP上傳設定也為GB2312編碼,結果是,IE和Firefox中均無亂碼,但在使用Firefox的“Open With Editor”功能時,出現在編輯器中卻是亂碼,這時無論我怎樣設定編輯器的編碼,都沒有將亂碼消解!真是奇哉怪也(這兩天正看狄仁杰劇集的緣故:)

GDI+学习笔记1

2008-06-19 19:54 by yicone, 193 visits, 网摘, 编辑

GDI+不支持异或绘图,而使用双缓存方式,避免了图形闪烁,但是速度稍慢,占用内存较多。随着硬件发展,这是一个图形编辑器的趋势;

用 GDI+ 开发矢量图形编辑系统的经验之谈
性能篇
“经过无数次的实验,终于形成了自己的代码风格”:声明两个Bitmap对象,一个用于即时的图形绘制,另一个用于存放已有的图形。在用鼠标绘图的过程中,直接把Bitmap复制到绘图窗口所对应的Graphics上,以提升绘图的速度;
避免用三角函数、平方根、除法;
避免大量使用Structure;
不同的图元有不同的图像拾取算法,一般常用的矢量计算方法可以保证较高的算法效率;

项目的对象建模
要考虑几个方面:确定图元、图元参数的保存和处理、坐标系、图像时拾取。
操作图元参数时,直接把像素值保存在图元参数中比较方便。因为Single类型的“数据还原性”很差,而图形经过旋转、缩放、坐标系变换后,必须用double类型处理,所以可以考虑把所有图元参数全部用double类型处理,损失一些性能但换来了易用性。

http://www.cnblogs.com/bluntsword/archive/2005/08/10/211363.html也提到了GDI+采用float类型带来的精度问题。另外此文提出要解决精度的问题,需要避免使用坐标变换。整个绘制过程中保持
“世界坐标系”和设备坐标系统一,然后自己记录实际坐标与设备坐标的缩放和偏移,然后在绘制时将实际坐标转换为设备坐标。

“自己进行坐标转换也不难,简单的仿射变换”

READ:《GDI+的雷区 》
http://blog.csdn.net/Nightmare/archive/2005/04/22/359092.aspx

GDI+变换之后的坐标被限制在以下范围
x -4194304.0f
y -4194304.0f
width 8388608.0f
height 8388608.0f
如果超出范围,图形画不出,

INST:了解GDI+ 2.0所作的改进
INST:了解“放射变换”作坐标变换

HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面

2008-05-22 00:32 by yicone, 516 visits, 网摘, 编辑

网站结构如下:
    /default.aspx
    /login.aspx
    /adminlogin.aspx
    /member/*.aspx
    /admin/*.aspx

需求:访问/member/路径下的页面的请求转向到/login.aspx;
             访问/admin/路径下的页面的请求被转向到/adminlogin.aspx;

一开始,自己假想在/Web.config中作如下配置可以达到目的:

<system.web>
    
<authentication mode="Forms">
        
<forms loginUrl="/Login.aspx" name=".ASPXFORMSAUTH">
        
</forms>
    
</authentication>
</system.web>
<location path="member">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>
<location path="admin">
    
<system.web>
        
<authentication mode="Forms">
            
<forms loginUrl="/AdminLogin.aspx" name=".ASPXFORMSAUTH">
            
</forms>
        
</authentication>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>

 

但很快发现,这样会导致一个运行时错误:

在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的

Google了几下,遇到同样错误的不少,但问题相似的不多。于是临时采用了一种变通的做法(急于解决问题,可能有良好的/更好的解决方案)。两个步骤:

1. 定义/LoginHandler.ashx。在ProcessRequest方法中,



    
if (!HttpContext.Current.User.Identity.IsAuthenticated){
                    
string loginUrl;
                    
string returnUrl = context.Request.Params["returnUrl"];

                    
if(returnUrl.Contains("/Admin/")) {
                        loginUrl 
= "/AdminLogin.aspx";
                    }

                    
else{
                        loginUrl 
= "/Public/Login.aspx";
                    }


                    
if (!string.IsNullOrEmpty(context.Request.Params["returnUrl"])){
                        loginUrl 
= loginUrl + "?returnUrl=" + HttpUtility.UrlEncode(context.Request.Params["returnUrl"]);
                    }

                    context.Response.Redirect(loginUrl);
    }

2. 配置/Web.config,

<system.web>
    
<authentication mode="Forms">
        
<forms loginUrl="/LoginHandler.ashx" name=".ASPXFORMSAUTH">
        
</forms>
    
</authentication>
</system.web>
<location path="LoginHandler.ashx">
    
<system.web>
        
<httpHandlers>
            
<add verb="*" path="LoginHandler.ashx" type="Web.LoginHandler" validate="true" />
        
</httpHandlers>
    
</system.web>
</location>
<location path="member">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>
<location path="admin">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>

 

Expression Web使用问题,相关资源及今日阅读

2008-05-18 15:41 by yicone, 149 visits, 网摘, 编辑

Expression Web使用问题

1. 在Expression Web中,如何在设计时预览ASP.NET Master Page或普通页面时,能够查看应用了theme后的效果?
无论在Visual Studio 2008,还是Expression Web SP1中,都没有找到可以在设计时预览theme的功能。初步推断,ASP.NET的Theme功能是运行时的行为,需要经过服务器的处理才能展现,尤其是其中针对服务器端控件的Skin特性。由此得出,解决预览问题的粗糙方式,是将Theme中定义的css文件导入到ASP.NET页面中,来查看应用静态样式后的效果。这里可以采用在母板页中引入css文件,以避免重复对多个ASP.NET页面进行css导入工作。

2. 如何在Expression Web中启用浏览器来预览ASP.NET页面?
如果没有IIS,则此功能需要安装ASP.NET Development Server。我在初次安装Expression Web时的确没有勾选安装这个东东,因为那时我已经安装了Visual Studio 2005,我认为那意味着已经存在了ASP.NET Development Server。但在Express Web的菜单项/Site/Site Settings -Preview中,我看到的情况如下:
                         Express Web的菜单项/Site/Site Settings -Preview 
即软件提醒我ASP.NET Development Server没有被安装。于是我在添加删除程序中修改Expression Web的安装,勾选了ASP.NET Development Server。但两次重复尝试的结果,得到的都是与上图一样的情况!
无奈之下,换了个变通的办法,即使用上图中的设置来达到可以预览ASP.NET页面的目的。具体解释一下:
      1. 在VS安装目录中找到WebDev.WebServer.exe(这就是ASP.NET Development Server);
      2. 建立一个桌面快捷方式,指向该程序,并在快捷方式的地址中定义好程序需要的参数(例如:C:\Windows\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE /port:2189 /path:"d:\MyCurrentWebProject" /vpath:"/");
      3. 双击运行创建好的快捷方式,再配合上图中的设置,就可以在Expression Web中预览ASP.NET页面啦。
(P.S. VS2008 SP1 BETA和Expression Web 2试用版都可以下载了,后者提供了Expression Web Development Server,不知道和ASP.NET Development Server是不是同一个东东)

相关资源

Expression Web的插件:
http://www.j-moves.com $10.99 FREE 15 day
http://www.panemanager.com $34.95 15 days FREE

今日阅读

Brian Simmons   ASP.NET 2.0 Theme Creation using ITracker
http://www.simmonswebdesign.net/artITracker.asp
读后总结:
优秀的设计网站,Sitepoint 和www.csszengarden.com
优秀资料,HTML Utopia: Designing Without Tables Using CSSThe Photoshop Anthology
网页设计的流程(讨论):
         在Photoshop中绘制mockup
         得到客户对mockup的确认。作者认为这是Web项目最拖慢进度的步骤,在这期间谨记在得到客户完全的认同以及没有形成文档之前,不要开始下一步工作。
        从mockup中切图、搜集素材
        使用Expression Web(或DW)将设计实现在一个单独的HTML页面内,将全部的CSS也放置在此页面。尽早测试,完成一部分的测试再开始下一部分。如果遇到布局问题,检查元素和环绕它的元素的padding和margin。
       在VS中创将Web项目或网站,建立theme和相应的skin,建立母板页,在Web.config中设置theme
        在skin中修改部分空间的样式,如GridView
        测试,测试,测试
App_Themes文件夹的组织结构:
        /Theme1        /Theme1/Images        /Theme1/Skin1.skin        /Theme1/styles.css

作者对工作流程的认识,对各步骤注意事项的认识,是在不断的摸索和实践中形成的。勿骄勿躁!

私单日记 第2日

2008-04-09 17:32 by yicone, 24 visits, 网摘, 编辑

和几个朋友一起做私单,在开始时遇到一些问题,所以想整理一下思路,也为以后的合作积累一些经验。

目前项目缺乏协调人。几个人的关系比较特殊,四个人,我和A,B,C。熟不熟的情况是这样的:我和A熟,A和B熟,B和A、C都熟。个人希望B能担起PM的责任,但尚未得到大家和时间的确认。协调人来负责分工,大家依据自己的模块独立进行开发,遇到问题大家一起讨论,这是我目前想到的协作方式。接下来的几天,也搜搜其他协作方式的资料。无论选择何种协作方式,目的都是为了提高团队的效率,而重点在于让大家都发自内心的接受这种方式。

沟通方面
我们的沟通方式是通过QQ群和项目论坛完成的。目前一些初期的文档草案都放在QQ群的共享中,但这些文档可能会不断修改,如果能将文档加入版本控制,可能会更好些。比如Google Docs就提供了协作编辑和版本记录的功能。
另外,大家工作的地点不同,时间也经常对不到一起,所以在讨论一些长期需要考虑和讨论的问题时,论坛的形式会更好些。Google网上论坛其实是一个披着论坛皮的邮件列表,这使大家通过邮箱就能及时得到新信息。

这两天的工组情况是,A负责概要设计;B主要与客户接洽,拿需求;C则挑了一些难点去攻关。我这两天则做了一些凌乱的工作,如选择源码管理服务、建立项目讨论组、给大家准备一些资料、自己了解需求、初步分析了一个大模块……,最重要的工作就是希望和大家都尽快熟悉起来,所以花了不少时间与大家讨论。但讨论的效果还不够好,主要是因为几个人工作的时间不一致,而对项目论坛的使用还没有真正开始。

自己的定位
写文章时,还没有形成清晰的定位,从这两天的工作来看,自己已经参与了各种角色,没有十分明确的重点。从初衷上讲,并不奢望能从这个单子上挣到钱,只是希望找些有意义的事来做。半年的项目冰河期让我手痒痒,不想荒废了自己,也担心缺少新积累的项目经验,会对将来的求职不利;另外,希望掌握更多的Web开发的经验,从而走一条长远发展的路。除却这两点,松散的合作开发方式所积累的经验也会对将来有利。

项目开发的周期比较短,大家可用的时间也存在不确定性,所以我个人倾向于从开始就抓紧时间,但看大家现在的状态,很难乐观看待。

P.S. Subversion大家都还没有开始用,所以也是一个担心的方面。自己也不太熟悉,所以在团队中推广尚有一点压力。新工具在团队中的推广,一定是个循序渐进的过程,所以我一直暗暗提醒自己,在这方面不要着急。

脚印:2008年的前三个月

2008-03-17 18:07 by yicone, 20 visits, 网摘, 编辑

没留下太多记忆,没项目,自己也怠慢下来。

Inter-Process Communication

2008-02-29 17:39 by yicone, 103 visits, 网摘, 编辑

今天由于想找Firefox下的一个Google Docs插件,结果找到了GoogleDocListUploader,基于Google的Doc List API写的一个实例程序。这里有一篇讲解代码和设计的文章,虽然是个没有难度的工具,但作者的介绍非常细心。

有三个地方给我留下了印象:

  1. 使用Mutex控制程序只有一个的实例;
    Mutex mutex = new Mutex(true, "Local\\DocListUploader", out firstInstance);
    //Local保证了操作系统切换到其它用户身份登录时,可以开启程序的新实例
  2. 利用注册表操作向Windows Shell中添加右键菜单项;
  3. Inter-Process Communication(进程间通信)
    这是以前自己做WinForms时的弱项,.NET 2.0提供了IPC机制,找时间学习一下。
    //主进程监听后续进程
    public void ListenForSuccessor()
    {
        IpcServerChannel serverChannel = new IpcServerChannel("DocListUploader");
        ChannelServices.RegisterChannel(serverChannel, false);

        RemoteMessage remoteMessage = new RemoteMessage(this);
        RemotingServices.Marshal(remoteMessage,"FirstInstance");
       
    }
    //后续进程通知主进程
    public static void NotifyPredecessor(string file)
    {
        IpcClientChannel clientChannel = new IpcClientChannel();
        ChannelServices.RegisterChannel(clientChannel, false);

        RemoteMessage message = (RemoteMessage) Activator.GetObject(typeof(RemoteMessage),
          "ipc://DocListUploader/FirstInstance");

        if (!message.Equals(null))
        {
            message.SendMessage(file);
        }
    }

脚印: 十二月第二周

2007-12-16 23:16 by yicone, 21 visits, 网摘, 编辑
这周主要的工作任务是准备一台Linux服务器, google了好几百次, 在路由器, Tomcat, Linux间周旋. 走了些弯路, 比如先在Fedora Core 5上尝试, 但迫于自己水平有限, 不能成功编译Reltek 6169的驱动程序, 所以连不上网络, 剩下的工作也就无法继续; 还有后来在没有经过领导认可的情况下, 在Ubuntu上准备好了环境, 但没有被认可, 虽然由于Ubuntu相对易操作, 使我能积累一些问题相关的经验, 从而为之后在Fedora 8上的工作做好铺垫, 但是先斩后奏的工作方式一定不能重新上演.
由于明年初要和韩国来的同事一起工作一段时间, 所以英语又成为学习的重点, 希望自己能抛开以前的"不良记录", 把这项挑战作好.

脚印: 十一月第四周

2007-12-10 00:10 by yicone, 20 visits, 网摘, 编辑
(发现很轻易的就把十一月的三个星期丢掉了, 仅凭着模糊的记忆追述一点点痕迹)
这周回顾了一些Python的基础知识, 重温了Dive Into  Python.
分别在Enterprise Library中的新组件, 函数式编程和NDepend上, 花了一点点无计划的时间投入, 因为没有明确目的, 或者没有切实"需求", 没有"产出物", 所以收获甚微!
NDepend中的CQL确实是个好的创意, 把代码抽象得看作有关联的数据源, 这对程序员分析已有代码提供了能带来灵感的工具.

脚印: 十二月第一周

2007-12-09 23:54 by yicone, 14 visits, 网摘, 编辑
本周被召回到本部工作. 离开了已经适应的工作环境和熟悉的同事.
三天的时间内, 主要熟悉了将要使用的报表工具的文档, 搭建了网络办公环境, 以及为搭建报表工具所用的服务器环境进行知识预备和工具准备.
自己对新环境的适应能力真的很强:) 多亏有通畅的网络吧, 让我可以和过往的许多老同事愉快的交流, 否则适应的脚步会放慢很多吧.
明天开始搭服务器环境, 预祝自己顺利.

对笔记的追逐

2007-11-20 15:22 by yicone, 29 visits, 网摘, 编辑

这两天整理了工作以来所有的笔记. 虽然少得可怜, 但了胜于无啊. 笔记的作用就是为了防止忘却吧, 沿着这个目的, 我想抽出很少的时间来回顾一下过去的资料, 加深一下对笔记内容的印象.
今天先回顾Visual Sutdio项目结构和项目设置的最佳实践. (原文出处没留下, 以后笔记的时候注意)

1.  总是以4级警告建立项目(图略)。

10. 所有程序集应该使用相对路径引用

12. 避免多模块的程序集。

17.  避免使用显式代码来排除方法(#if#endif),而是使用条件方法

19.  链接一个包含所有解决方案级信息的全局共享文件(图略)。 

22.  总是对程序集签名,包括客户端应用程序

23.  总是使用项目的SNK文件对互操作程序集签名(图略)。

以上是有些意识的条款, 但却不知其所以然, 尤其对在19条中提到的文件该怎样写, 完全没有想法.
这证明了笔记是失败的, 还是当初把笔记当成了目的? 切记, 笔记能辅助理解和记忆, 但不能替代理解和掌握!

脚印:十一月三日

2007-11-03 22:05 by yicone, 11 visits, 网摘, 编辑
三年了,第一次踢球,还进了一颗:)

脚印:九月第一周、第二周

2007-11-02 16:31 by yicone, 13 visits, 网摘, 编辑
在一家很大的测试外包公司做了两周Orcas DTG组的测试。
了解了MS手动测试的流程,接触了与以往不一样的工作场景和很好的工作氛围,也认识了些新朋友。
对VSTS产品家族增加了认识。在Longhorn上配置Sharepoint+SSRS+TFS花了我两天多的时间,印象很深刻。产出了一份那个Case的PDF文档留给了同事,有些骄傲和成就感:)
这两周的性价比非常高,虽然加了不少班,但物质和非物质的收获都比预想的多:)

脚印:九月第三周、第四周

2007-11-02 16:22 by yicone, 25 visits, 网摘, 编辑
来到新公司上班。
借着一开始没什么任务,学了些XPath基础,对自己以后一定很有帮助。
认识了很多新面孔,比较遗憾的是,有位技术和大局观都很好的哥们,在刚结识不走,就要离开公司了。

脚印:十月第一周、第二周

2007-11-02 16:18 by yicone, 15 visits, 网摘, 编辑
开始韩语学习。很奇怪的语言,有些兴趣去学,但又担心因此更给自己不去学英语的理由,而且用途远远比不上英语。不知道是不是自己现在太过功利了:(
借着Code Review的机会,把正则表达式巩固了一下,以后还是要多多实践,让其深入骨髓(呵呵,说话太狠了)。
用扩展FxCop规则,VS Addin插件的方式实现了一部分简单的Code Review工作,本来还准备尝试用下载的VS SDK编写一些VS Package,结合正则表达式做些更复杂的代码规范检查,但在无聊又极费眼的Code Review工作完成之前,没有时间去玩了,只好放弃:)

脚印:十一月第一周

2007-11-02 15:51 by yicone, 20 visits, 网摘, 编辑
从ASP.NET AJAX Extension和AJAX Future开始进入ASP.NET和Web开发的世界。急行军注定会有泡沫,不管自己如何自满于这样的方式,抽空还是要重构基础。
本周效率不太高,零星的学习和弥补了一些其他知识,但没有总结,只好祈祷在将来用到的时候能回想起来:)
对韩语的学习从第一节课的新鲜到第三节开始的抵触,再到第五节结束后重新生出的兴趣,应该说是经历了很大的心里转折。这个经历应该是利大于弊。
下周开始会参加几个有趣的培训,再次告诫自己,一定要珍惜现在很好的学习机会。

脚印:十月第三周、第四周

2007-11-02 15:34 by yicone, 30 visits, 网摘, 编辑
了解javascript,初读《javascript高级编程》,收获较大,补充了很多Web开发的基础;
尝试一些javascript编辑器和调式工具,firefox, dreamweaver, Apanta(+firefox_plugin), visual studio 2008 beta2, Antechinus, Notepad++,各有特点,还需要在实践中继续考评。另外发现SharpDevelop居然没有很好的支持javascript的编写,感到很意外:)

周末学习总结

2007-07-08 20:05 by yicone, 80 visits, 网摘, 编辑

 了解了C# 3.0的各项新特性;

  • 自动属性 public string Name{get;set;}
  • 匿名类型 new{}
  • 对象初始化器 new{Name=""}
  • 扩展方法 static class{static void Method(this Type type){;}}
  • lambda表达式 (c => c >= 26)
  • 隐式类型局部变量 var
  • IEnumbrable<t>.Where books.Where(book => book.Name == "").Select(book => book.Price)
  • 查询表达式 from book in books where book.Name == "" select book.Price

理解了LINQ与C# 3.0引入的各项新特性之间的关系
http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx?loc=zh

todo:有关LINQ表达式树的内容
http://blog.joycode.com/scottgu/archive/2007/04/09/100744.aspx


一个防御式编程的类《Safe Method Caller》
http://www.codeproject.com/useritems/SafeMethodCaller.asp

  • 利用了委托和线程异步调用,处理了调用超时、异常、出错三种情况,不能处理调用导致错误操作、等情况;
  • 介绍了一个很有用的track,防止步进调试导致调用超时 todo:再深入看一下

了解了简单的抓取网页局部内容的方法 HttpWebRequest WebResponse.GetStream

《Bat file compiler》
http://www.codeproject.com/article.asp?tag=40578640609339266
了解了简单的修改二进制文件局部bytes的方法

.NET中使用钩子的类
http://www.codeproject.com/article.asp?tag=40578640566939266

简化创建 WindowsService 的类库
http://www.codeproject.com/article.asp?tag=40578640567439266
此方法还使得WindowsService更容易调试,另外 todo:读《HybridService: Easily Switch Between Console Application and Service》
http://www.codeproject.com/article.asp?tag=40578640565539266


Bat file compiler
http://www.codeproject.com/article.asp?tag=40578640578539266
展示了CsharpCodeProvider的应用,生成一个.NET exe,将bat文件作为资源加入程序集。exe在运行时解出bat文件,然后在新进程上运行之。

todo:SubVersion 演示《Version Control for the Standalone Programmer - Part 1 》
http://www.codeproject.com/article.asp?tag=40578642571939266

下一步学习的范围
ASP.NET 2.0基础
思考如何结合IronPython改进编程效率及解决问题
思考DLINQ技术应用后的开发流程
todo:再次尝试WPF
学习单元测试,提高编码效率(间接过程,因为减少了代码调试的时间)
防御式编程学习、尝试
寻找优秀的正则表达式教学资料
寻找优秀的XPATH教学资料
学习数据库的索引技术、触发器
todo:继续研究SharpDevelop的架构

“蜀道难,难于上青天”

2007-07-05 14:50 by yicone, 164 visits, 网摘, 编辑

在微软平台上,想追求新鲜是越来越不容易了!

昨晚在家,想试一把WPF,到微软网站上去下载orcas最新的版本,发现竟有8个img文件需要下载。想这将来卸载时,也要花不少时间吧,于是就准备下那个base image ,联合这8个image一起装在Virtual PC,下了大概百分之六,也没信心了。算了吧,还是继续看别人写的blog来意淫吧:)真佩服那些坚持下载和安装的家伙。

放弃之后不太甘心,就把兴趣转向IronPython。先是想在UliPad中配置出对IronPython的支持,试了一会儿不得要领,回想起以前试过的一个SharpDevelop的扩展IronPython Binding,跑去其在CodePlex.com的主页一看,还停留在当初那个不成气候的状态下。无意中看到了FarPy GUIE项目,这是一个窗体设计器,能生成C#,VB,IronPython的代码,对于体验IronPython的WinForm开发应该够用了,虽然它不怎么好用。

此刻我正在修改安装VS2005,以支持C++项目,这个过程已经进行了20多分钟了,还没有立刻结束的迹象。我这样做的起因是,为了能在VS2005中用IronPython开发WinForm或ASP.NET,我安装了Visual Studio SDK 4.0,但编译包含IronPython支持的那个Sample时失败,错误消息是四个CTC有关的错误,我不明白CTC的含义,于是跑到MSDN 论坛里去搜,专家告诉说,那是因为这个项目中有些东西依赖C++的一些东西,因此...

我不过就是想尝尝鲜,难得的一些自由时间全部捐献给各种工具的下载、安装、配置和排错!尝鲜的成本如此之高,叫我怎能不心生怨言。

马上就装完了,也不继续发牢骚了,但愿其他人不要有我相似的遭遇。

FileSystemWatcher Tips(翻译)

2007-04-29 17:19 by yicone, 78 visits, 网摘, 编辑
原文:http://weblogs.asp.net/ashben/archive/2003/10/14/31773.aspx

  1.  恶意程序可能通过得到对这个组件所监视的文件夹的访问,进而制造一些这个组件不能管理的变化(?),这可能导致缓冲去溢出或其他破坏
  2. 小心重复去激发事件
    默认情况下,公开的事件自动调用OnChangedOnCreated等方法,所以要避免显示的添加event handler.
    处理一个文件操作导致激发改组件多个事件的情况
    l        设置一个flag,采取先到先服务的策略;
    l        设置通知过滤器;NotifyFilter
  3. CD,DVD等媒体文件,因为时间戳和属性不能修改,所以该组件不能监视它们
  4. 设置filter为“”,效果是监视所有文件,包括隐藏文件!(*.*应该有同样的效果吧?)
  5. 设置该组件的内部缓冲区的大小
    默认是4KB,能大约监视80个文件
    设置大小的方法:修改InternalBufferSize属性
    缓冲区溢出的危害:
        由于组件丢失了反映文件夹变化的堆栈,它将可能仅提供一个blanket的通知
        增加缓冲区占用非页面内存并且不能被交换到磁盘上,这意味着要保证缓冲区尽可能的小
    估算合适大小的方法:
        每个事件占用缓冲去的16bytes;加上足够的字节去存储Unicode文件名。
        Win2000下的建议增量是4KB,这是对应于操作系统的默认页面大小,对于其他操作系统,建议的增量也是对应到默认的页面大小
        不知道默认页面大小的值时,最安全的方法是调整到初始大小的双倍(按这个算法,应该是8KB喽),This will maintain the original interval needed for your operating system.(?)
  6.  使用IncludeSubdirectories属性
    改变文件可能会同时产生一个文件夹变化的通知。因为文件夹保存着每个文件的一些类型信息,如修改时间,属性等等。不需要监视这种变化时,设置此属性为false,这样并不会放弃对子文件夹中的文件的监视 
  7. 任何需要关闭该组件的时候,设置EnableRaisingEvents属性,避免不必要的资源浪费

在Office应用程序中显示MessageBox或Modal Form

2007-03-07 21:56 by yicone, 2018 visits, 网摘, 编辑
摘要:在一个WinForm程序中,MessageBox有如下特点:存在一个与之相关的"宿主"窗体,即MessageBox在此窗体及其上的控件的事件处理程序中弹出,并且,当MessageBox关闭后,焦点自动切换到"宿主"窗体.Model Form(模态窗体)有相同的特点. 阅读全文

用DataTable.Merge()解决了一个排序问题

2007-03-02 21:24 by yicone, 535 visits, 网摘, 编辑

首先明确一点,DataTable不支持排序
在一个DataTable(dt)中已经存在无序数据,要实现排序,我想到了两个方法:

方法一
可以先构造一个列表(list),按排序顺序存储dt主键列的值; 然后主要是利用DataTable.Merge方法

 1 StrongTypedDataTable tempDt;
 2 //使tempDt具有dt的Schema 和 Constraint
 3 tempDt = new StrongTypedDataTable();
 4 foreach(string key in list)
 5 {
 6    //如果某些列不允许空,则NewRow()->赋key值->再Add(dr).
 7    tempDt.Rows.Add(key, null.);
 8 }
 9 //合并后将维持tempDt中的顺序
10 tempDt.Merge(dt);
11 dt = tempDt;

方法二
思路:DataView支持排序,而DataView对象有方法ToTable,没有尝试过,已经理解ToTable原理或有机会用到的人给个答案吧:)

p.s 猪年第一篇post.

埋葬又一个无力解决的问题

2007-02-14 16:50 by yicone, 70 visits, 网摘, 编辑

BackRoundWorker对象的DoWork方法中访问Word时遇到了一个异常:"The message filter indicated that the application is busy.""消息过滤器显示应用程序正在使用中."Automation Error:0x8001010a

搜索了一个多小时,我把别人发现的原因大致分为三类:

   在ASP/ASP.NET中使用Word,这种情况需要运行dcomcnfg配置一下身份标识;

   微软网站上有两篇文章,大意是和诺顿的杀毒软件有关(针对Word2000);

   说是由于Normal.dot损坏造成的;

没有我需要的结果,我的程序环境:

Windows 2000 SP4, Office 2000, VS2005, WinForm

无力解决这个错误了,发现dcomcnfglistview做得很好,算是祭奠一下这个死掉的问题吧.

还明白做应用,有些问题遇到后要尝试绕开,不要钻,算是祭奠一下这飞逝的两小时吧.

IronPython初体验

2006-12-17 14:57 by yicone, 59 visits, 网摘, 编辑

总结一下这几天来利用业余时间对IronPython的了解(还谈不上学习)

这个项目的一个目标是作为一个成功案例,帮助其它的动态语言移植到.NET平台上,以享受CLR提供的各项便利和大一统的Common Library(这是动态语言的短处)。

动态语言的好处:促成了一个交互式的开发周期,促进了敏捷开发,在一个探险式的开发过程中,给予程序员更多的乐趣

Python的好处:支持不同的编程范式:面向对象,结构化编程,函数式编程,并且对于面向方面的编程有一些支持;稀疏的语法带来了更好的可读性,相比一些结构化语言,有更少的句法构造,大量使用英文关键字代替标点符号,消除了许多Line Nosie(James Schementi说,C#中的Line Noise是为了静态类型和显示的声明,但客观上影响了可读性,这么说来自己明天的确是制造了许多的噪音:)),通过编译器/解释器对动态类型的跟踪,使程序员少了许多的显示声明工作。

IronPython的编译过程:

IronPython处理C#异常和Python异常冲突的解决方法是,自动转换异常到程序中catch想要的类型(?)

还有一个感兴趣的内容是,Aaron Marten提到,可以用IronPython代替VB来写VS的宏。

 

一些具体的语法:

import pyevent

pyenent.make_event()

if elif

try except

函数:

isinstance(obj, Button)

hasattr

getattr

LoadXaml

 

参考资料:

http://blogs.msdn.com/aaronmar/archive/2006/02/16/...

http://msdn.microsoft.com/msdnmag/issues/06/10/CLR...

IronPython的Tutorial

Microsoft Expression Blend 1.0 Beta 1

2006-12-05 22:21 by yicone, 112 visits, 网摘, 编辑

if you want to enable the 180-day license, please enter the product key as follows:

YCQGP-CFRGF-933KK-P6YKC-YFHMP

部署时附带安装MSDE

2006-12-04 18:52 by yicone, 119 visits, 网摘, 编辑

http://sannikodaisy.spaces.live.com/blog/cns!EA71E...

http://blog.joycode.com/felix/articles/32791.aspx

http://blog.joycode.com/felix/archive/2004/09/07/3...

http://blog.csdn.net/koenemy/archive/2006/09/29/13...

 

 

Q&S

  1. MSDE的安装:
    MSDE如果默认安装的话,实例名和机器名是一致的,同时系统的SA密码会被设置为空.如果要对其做一些修改,可以通过修改目录下的SETUP.INI文件来实现,其中主要涉及以下几项:
    [Options]
    SECURITYMODE=SQL      //登陆方式,SQL表示SQL登陆
    INSTANCENAME=singlewks      //实例名
    DISABLENETWORKPROTOCOLS=1    //网络可访问性,0表示网络用户可访问,1表示不可以
    DATADIR="c:\singlewks\Data"     //数据文件存放位置
    SAPWD=your_pwd     //SA密码
  2. 对MSDE的管理:
    由于MSDE没有SQL SERVER 2000 那样的管理界面,所以对于它的管理也就比较麻烦.不过我们可以通过OSQL工具对其进行管理.具体的操作,大家可以参考网上的一篇文章:转自msdn  hl13571 的 Blog :http://hl13571.cnblogs.com/archive/2006/02/07/326362.html
    例如:
    osql -U sa -S enjoyai\lotto -Q "sp_password NULL,123,sa"
    表示用sa登录, 登录到实例enjoyai\lotto,执行命令 sp_password NULL,123,sa

脚印: 年末

2006-12-04 10:58 by yicone, 18 visits, 网摘, 编辑

又一年就要结束了,有点不甘心,时间就这样匆匆走了,就想着寻点可以告慰年轻岁月的事,来减少些许遗憾.常日里多半苦恼的事,不是工作繁琐,不是人境逼仄,既不是情感,也不是思乡,经济压力和身体疲惫也都算不上,最让人无所适从的是那浩如烟海的知识和信息,层出不穷的技术和概念.当然,这决定于看问题的深度,钱钟书到了美国的国家图书馆,慨叹说这世界上原来有那么多不需要读的书.我隐约相信,知识和道理都是相通的,也隐约地相信,像钱老这样的鸿儒,言语是由衷的.但拿这点隐约的感悟来应对自己的苦恼,显然还不能解决问题.看问题的本质是需要经验和悟性的,以己之年轻和平凡,陷入苦恼也理所当然:)