文件下载方法

private void FileDownload(string FullFileName) { FileInfo DownloadFile = new FileInfo(FullFileName); Response.Clear(); Response.ClearHeaders(); Response.Buffer=false; Response.ContentType="application/octet-stream"; Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8)); Response.AppendHeader("Content-Length",DownloadFile.Length.ToString()); Response.WriteFile(DownloadFile.FullName); Response.Flush(); Response.End(); }

java byte与char互转原理-转

一、字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此Java要对这些字节流经行转化。 char是unicode的,而byte是字节。Java中 byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,可以用来告诉你,你用的 convertor。其中两个很常用的静态函数是: public static ByteToCharConverter getDefault(); public static ByteToCharConverter getConverter(String encoding); 如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用8859_1。 byte ——〉char: "你"的gb码是:0xc4e3 ,unicode是0x4f60 String encoding = "gb2312"; byte b[] = {(byte)'\u00c4',(byte)'\u00e3'}; ByteToCharConverter converter = ByteToCharConverter.getConverter(encoding); char c[] = converter.convertAll(b); for (int i = 0; i < c.length; i++) { System.out.println(Integer.toHexString(c[i])); } 结果是什么?0x4f60 如果encoding ="8859_1",结果又是什么?0x00c4,0x00e3 如果代码改为: byte b[] = {(byte)'\u00c4',(byte)'\u00e3'}; ByteToCharConverter converter = ByteToCharConverter. getDefault(); char c[] = converter.convertAll(b); for (int i = 0; i < c.

try/catch的实现原理

明白了几个道理, 1. VC++的try/catch是基于Win32的SEH实现的。 2. try/catch只能捕捉当前线程的异常,每个线程都有自己的异常处理入口。 3. 异常处理入口是由OS负责调用的,在异常发生时。 4. 为了使用SEH,VC++编译器自动生成了很多的代码。 MSDN上关于SEH的经典文章 A Crash Course on the Depths of Win32™ Structured Exception Handling CodeProject上的模拟实现 How a C++ compiler implements exception handling CLR的实现 The Exception Model

StringBuffer连续append出问题

在用1.5时联系append会报java.lang.Error: Unresolved compilation problem: The type AbstractStringBuilder is not visible 不可理解。。。

VBScript教程之一(Hello VBScriopt)

' *********************************************************** ' VBScript变量命名编码规范 ' Subtype Prefix Example ' Boolean bln blnFound ' Byte byt bytRasterData ' Date (Time) dtm dtmStart ' Double dbl dblTolerance ' Error err err OrderNum ' Integer int intQuantity ' Long lng lngDistance ' Object obj objCurrent ' Single sng sngAverage ' String str strFirstName ' ************************************************************* ' 1.第一个脚本 ' 第一个VBSciprt程序,在屏幕上打印hello VBScript ' 使用文本编辑器,输出下面的内容,保存文件名称为hello.vbs ' 运行脚本cscript.exe hello.vbs Wscript.echo " hello VBScript " ' 2.数据类型 ' 使用布尔类型 dim blnBool blnBool = True ' 根据blnBool的值,输出不同的结果 If blnBool = True then Wscript.

项目概要设计书一般设计方法

做软件到一定层次了,就要考虑到设计了,设计了很久,就是不系统,系统的设计需要一个记录,记录就用文档,那么对项目所有包括技术上的设计都记录下来,我们就可以理解为软件的概要设计了。 在需求明确、准备开始编码之前,要做概要设计,而详细设计可能大部分公司没有做,有做的也大部分是和编码同步进行,或者在编码之后。因此,对大部分的公司来说,概要设计文档是唯一的设计文档,对后面的开发、测试、实施、维护工作起到关键性的影响。 一、问题的提出 概要设计写什么?概要设计怎么做? 如何判断设计的模块是完整的? 为什么说设计阶段过于重视业务流程是个误区? 以需求分析文档还是以概要设计文档来评估开发工作量、指导开发计划准确? 结构化好还是面向对象好? 以上问题的答案请在文章中找。 二、概要设计的目的 将软件系统需求转换为未来系统的设计; 逐步开发强壮的系统构架; 使设计适合于实施环境,为提高性能而进行设计; 结构应该被分解为模块和库。 三、概要设计的任务 制定规范:代码体系、接口规约、命名规则。这是项目小组今后共同作战的基础,有了开发规范和程序模块之间和项目成员彼此之间的接口规则、方式方法,大家就有了共同的工作语言、共同的工作平台,使整个软件开发工作可以协调有序地进行。 总体结构设计: 功能(加工)->模块:每个功能用那些模块实现,保证每个功能都有相应的模块来实现; 模块层次结构:某个角度的软件框架视图; 模块间的调用关系:模块间的接口的总体描述; 模块间的接口:传递的信息及其结构; 处理方式设计:满足功能和性能的算法 用户界面设计; 数据结构设计: 详细的数据结构:表、索引、文件; 算法相关逻辑数据结构及其操作; 上述操作的程序模块说明(在前台?在后台?用视图?用过程?······) 接口控制表的数据结构和使用规则 其他性能设计。 四、概要设计写什么 结构化软件设计说明书结构(因篇幅有限和过时嫌疑,在此不作过多解释) 任务:目标、环境、需求、局限; 总体设计:处理流程、总体结构与模块、功能与模块的关系; 接口设计:总体说明外部用户、软、硬件接口;内部模块间接口(注:接口≈系统界面) 数据结构:逻辑结构、物理结构,与程序结构的关系; 模块设计:每个模块“做什么”、简要说明“怎么做”(输入、输出、处理逻辑、与其它模块的接口,与其它系统或硬件的接口),处在什么逻辑位置、物理位置; 运行设计:运行模块组合、控制、时间; 出错设计:出错信息、处错处理; 其他设计:保密、维护; OO软件设计说明书结构 1 概述 系统简述、软件设计目标、参考资料、修订版本记录 这部分论述整个系统的设计目标,明确地说明哪些功能是系统决定实现而哪些时不准备实现的。同时,对于非功能性的需求例如性能、可用性等,亦需提及。需求规格说明书对于这部分的内容来说是很重要的参考,看看其中明确了的功能性以及非功能性的需求。 这部分必须说清楚设计的全貌如何,务必使读者看后知道将实现的系统有什么特点和功能。在随后的文档部分,将解释设计是怎么来实现这些的。 2 术语表 对本文档中所使用的各种术语进行说明。如果一些术语在需求规格说明书中已经说明过了,此处不用再重复,可以指引读者参考需求说明。 3 用例 此处要求系统用用例图表述(UML),对每个用例(正常处理的情况)要有中文叙述。 4 设计概述 4.1 简述 这部分要求突出整个设计所采用的方法(是面向对象设计还是结构化设计)、系统的体系结构(例如客户/服务器结构)以及使用到的相应技术和工具(例如OMT、Rose) 4.2 系统结构设计 这部分要求提供高层系统结构(顶层系统结构、各子系统结构)的描述,使用方框图来显示主要的组件及组件间的交互。最好是把逻辑结构同物理结构分离,对前者进行描述。别忘了说明图中用到的俗语和符号。 4.3 系统界面 各种提供给用户的界面以及外部系统在此处要予以说明。如果在需求规格说明书中已经对用户界面有了叙述,此处不用再重复,可以指引读者参考需求说明。如果系统提供了对其它系统的接口,比如说从其它软件系统导入/导出数据,必须在此说明。 4.4 约束和假定 描述系统设计中最主要的约束,这些是由客户强制要求并在需求说明书写明的。说明系统是如何来适应这些约束的。 另外如果本系统跟其它外部系统交互或者依赖其它外部系统提供一些功能辅助,那么系统可能还受到其它的约束。这种情况下,要求清楚地描述与本系统有交互的软件类型以及这样导致的约束。 实现的语言和平台也会对系统有约束,同样在此予以说明。 对于因选择具体的设计实现而导致对系统的约束,简要地描述你的想法思路,经过怎么样的权衡,为什么要采取这样的设计等等。 5 对象模型

javascript获取FCKeditor内容

形式如: var oEditor = FCKeditorAPI.GetInstance( ' content ' ); var content = oEditor.GetXHTML( true ); 页面不需要引入FCKeditor如何脚本. 

在 SQL Server 中将 SELECT 语句的结果导出到文件的方法

exec master..xp_cmdshell 'bcp "SELECT* FROM tablename" queryout "C:\test.txt" -T -c -C 65001' 最后的参数 -T 表示这是信任的连接,也就是说不用输入密码了;-c 表示按字符类型输出;-C 65001 表示输出为 UTF-8 格式,其中 65001 是 UTF-8 的代码页。 bcp usage: bcp {dbtable | query} {in | out | queryout | format} datafile [-m maxerrors] [-f formatfile] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n native type] [-c character type] [-w wide character type] [-N keep non-text native] [-V file format version] [-q quoted identifier]

AT&T指令集

摘录网上的一篇AT&T指令总结,方便查阅~~ GAS中每个操作都是有一个字符的后缀,表明操作数的大小。 C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char* l 4 float s 4 double l 8 long double t 10/12 注意:GAL使用后缀“l”同时表示4字节整数和8字节双精度浮点数,这不会产生歧义因为浮点数使用的是完全不同的指令和寄存器。 操作数格式: 格式 操作数值 名称 样例(GAS = C语言) $Imm Imm 立即数寻址 $1 = 1 Ea R[Ea] 寄存器寻址 %eax = eax Imm M[Imm] 绝对寻址 0x104 = *0x104 (Ea) M[R[Ea]] 间接寻址 (%eax)= *eax Imm(Ea) M[Imm+R[Ea]] (基址+偏移量)寻址 4(%eax) = *(4+eax) (Ea,Eb) M[R[Ea]+R[Eb]] 变址 (%eax,%ebx) = *(eax+ebx) Imm(Ea,Eb) M[Imm+R[Ea]+R[Eb]] 寻址 9(%eax,%ebx)= *(9+eax+ebx) (,Ea,s) M[R[Ea]*s] 伸缩化变址寻址 (,%eax,4)= *(eax*4) Imm(,Ea,s) M[Imm+R[Ea]*s] 伸缩化变址寻址 0xfc(,%eax,4)= *(0xfc+eax*4) (Ea,Eb,s) M(R[Ea]+R[Eb]*s) 伸缩化变址寻址 (%eax,%ebx,4) = *(eax+ebx*4) Imm(Ea,Eb,s) M(Imm+R[Ea]+R[Eb]*s) 伸缩化变址寻址 8(%eax,%ebx,4) = *(8+eax+ebx*4) 注:M[xx]表示在存储器中xx地址的值,R[xx]表示寄存器xx的值,这种表示方法将寄存器、内存都看出一个大数组的形式。 数据传送指令: 指令 效果 描述 movl S,D D <-- S 传双字 movw S,D D <-- S 传字 movb S,D D <-- S 传字节 movsbl S,D D <-- 符号扩展S 符号位填充(字节->双字) movzbl S,D D <-- 零扩展S 零填充(字节->双字) pushl S R[%esp] <-- R[%esp] – 4; M[R[%esp]] <-- S 压栈 popl D D <-- M[R[%esp]]; R[%esp] <-- R[%esp] + 4; 出栈 注:均假设栈往低地址扩展。 算数和逻辑操作地址: 指令 效果 描述 leal S,D D = &S movl地版,S地址入D,D仅能是寄存器 incl D D++ 加1 decl D D-- 减1 negl D D = -D 取负 notl D D = ~D 取反 addl S,D D = D + S 加 subl S,D D = D – S 减 imull S,D D = D*S 乘 xorl S,D D = D ^ S 异或 orl S,D D = D | S 或 andl S,D D = D & S 与 sall k,D D = D << k 左移 shll k,D D = D << k 左移(同sall) sarl k,D D = D >> k 算数右移 shrl k,D D = D >> k 逻辑右移 特殊算术操作: 指令 效果 描述 imull S R[%edx]:R[%eax] = S * R[%eax] 无符号64位乘 mull S R[%edx]:R[%eax] = S * R[%eax] 有符号64位乘 cltd S R[%edx]:R[%eax] = 符号位扩展R[%eax] 转换为4字节 idivl S R[%edx] = R[%edx]:R[%eax] % S; R[%eax] = R[%edx]:R[%eax] / S; 有符号除法,保存余数和商 divl S R[%edx] = R[%edx]:R[%eax] % S; R[%eax] = R[%edx]:R[%eax] / S; 无符号除法,保存余数和商 注:64位数通常存储为,高32位放在edx,低32位放在eax。 条件码: 条件码寄存器描述了最近的算数或逻辑操作的属性。 CF:进位标志,最高位产生了进位,可用于检查无符号数溢出。 OF:溢出标志,二进制补码溢出——正溢出或负溢出。 ZF:零标志,结果为0。 SF:符号标志,操作结果为负。 比较指令: 指令 基于 描述 cmpb S2,S1 S1 – S2 比较字节,差关系 testb S2,S1 S1 & S2 测试字节,与关系 cmpw S2,S1 S1 – S2 比较字,差关系 testw S2,S1 S1 & S2 测试字,与关系 cmpl S2,S1 S1 – S2 比较双字,差关系 testl S2,S1 S1 & S2 测试双字,与关系 访问条件码指令: 指令 同义名 效果 设置条件 sete D setz D = ZF 相等/零 setne D setnz D = ~ZF 不等/非零 sets D D = SF 负数 setns D D = ~SF 非负数 setg D setnle D = ~(SF ^OF) & ZF 大于(有符号>) setge D setnl D = ~(SF ^OF) 小于等于(有符号>=) setl D setnge D = SF ^ OF 小于(有符号<) setle D setng D = (SF ^ OF) | ZF 小于等于(有符号<=) seta D setnbe D = ~CF & ~ZF 超过(无符号>) setae D setnb D = ~CF 超过或等于(无符号>=) setb D setnae D = CF 低于(无符号<) setbe D setna D = CF | ZF 低于或等于(无符号<=) 跳转指令: 指令 同义名 跳转条件 描述 jmp Label 1 直接跳转 jmp *Operand 1 间接跳转 je Label jz ZF 等于/零 jne Label jnz ~ZF 不等/非零 js Label SF 负数 jnz Label ~SF 非负数 jg Label jnle ~(SF^OF) & ~ZF 大于(有符号>) jge Label jnl ~(SF ^ OF) 大于等于(有符号>=) jl Label jnge SF ^ OF 小于(有符号<) jle Label jng (SF ^ OF) | ZF 小于等于(有符号<=) ja Label jnbe ~CF & ~ZF 超过(无符号>) jae Label jnb ~CF 超过或等于(无符号>=) jb Label jnae CF 低于(无符号<) jbe Label jna CF | ZF 低于或等于(无符号<=) 转移控制指令:(函数调用): 指令 描述 call Label 过程调用,返回地址入栈,跳转到调用过程起始处,返回地址是call后面那条指令的地址 call *Operand leave 为返回准备好栈,为ret准备好栈,主要是弹出函数内的栈使用及%ebp

文件服务器-快速创建用户帐号!

创建帐号是一个比较复杂的过程,我们利用一些简单的技巧.我们可以采用模板方式创建. 以下为创建方式,在模板用户上点右键,复制: 为新用户起个名称: 输入密码: 就完成了一个用户的复制. 你可以在一个OU 里面建立用户,然后在多个OU里面拖动.这样就方便了用户的创建操作!

英语中符号以及标点符号的读法

-------------------------------------------------------- 1.Full stop/period {.} 2.Question mark {?} 3.Exclamation mark {!} 4.Ellipsis {...} 5.Semicolon {;} 6.Comma {, } 7.Colon {:} 8.Apostrophe {’} 9.Quotation marks { “ “ ’’} 10.Parentheses/Brackets {([ ])} 11.Dash {—} 12.Hyphen {-} 13.forward slash/strokes {/} 14.ampersand {&} 15.backward slash / 16. forward slash / 17. ^ circumflex 18. ~ tilde 电话机符号 例子 ------------------------- 15.pound {#} 16.star {*} 键盘符号 ------------------------------- 20 SPACE 21 ! EXCLAMATION MARK 22 “ QUOTATION MARK

Fedora 8中yum设置相关知识(图)

本文为转帖:原文 网址 首先谈下自己的Linux系统现状: 转投Fedora 8后觉得 Fedora比Ubuntu好,不想引起争论,只是觉得Fedora走的很超前,很多东西都是Fedora 8出了后才在Ubuntu上找到相似的影子的。但是Fedora 8的源是他的硬伤,还有就是他的包依赖没有Ubuntu做得好。 正文: 推荐安装时选择中文,即使你喜欢用英文界面的操作系统,例如我,因为要是默认用英文安装的话,很多中文字体不会装上,中文输入法也不会装上,后期设 置很麻烦。用中文语言安装后,进如系统,将语言设置成英语即可实现英文操作系统,再在系统中设置下就可以在英文环境下用中文输入法了,设置如下: 现在设置源吧,首先你要google一下livna的源,把 它加进去 。如下: su Password: # rpm -ivh http://rpm.livna.org/livna-release-8.rpm 安装fastestmirror插件。 yum install yum-fastestmirror 好了,该到设置yum了: gedit /etc/yum/yum-updatesd.conf 其配置如下: [main] # how often to check for new updates (in seconds) run_interval = 604800 #多久检查更新,我设置成了7天 # how often to allow checking on request (in seconds) updaterefresh = 600 #更新刷新周期,这个是为了避免服务器负担太重,建议保持默认,或者设置大点。 # how to send notifications (valid: dbus, email, syslog) emit_via = dbus

discuz做整合的时候遇到的“ Illegal request”解决办法

出现这个现象一般是登陆的密钥不一致造成的,网站原来是用asp.net做的,和discuz整合也是顺畅的, 可是换成php环境,代码做移植之后,登陆出现“ Illegal request”,查找了半天的原因发现通讯密钥中包含特殊字符“$”。 我们的密钥比较特别,形如“$******#”,后来通过debug发现在php中,“$”是特殊字符,所以造成密钥不一致。 一下午的功夫白费。

Visual Studio 2005 SP1 的安装问题(解决方案)

装成功了,但是花费我好长的时间呀!我的本本安装不了,提示硬盘空间不够,我本本C盘都1G多空间,竟然说空间不足!幸好台式安装了成功!郁闷,MS的SP也太大了吧!动不动就几百兆的! 该安装包安装过程极其漫长,我的闪龙2200+ 512M内存安装了近2个半小时,比VS2005安装时间还长,而且安装时CPU占用不低于90%,请安排空闲时间安装,因为在安装时你根本没法做其他事情,C盘未使用空间至少在3G以上,否则会出现意想不到的情况。 您尝试在 Windows Server 2003 或 WindowsXP 中安装大 WindowsInstaller 包或大型 WindowsInstaller 修补程序包时错误信息: " Error 1718。 文件被数字签名策略拒绝 " 原因 当计算机有连续不足用于 WindowsServer 2003 或 WindowsXP 来验证 .msi 程序包或 .msp 包正确签名发生此问题。 his problem occurs when the computer has insufficient contiguous memory for Windows Server 2003 or Windows XP to verify that the .msi package or the .msp package is correctly signed. WORKAROUND To work around this problem, follow these steps: 1.

Window上获取DC句柄的三种方法

在Window上主要有三种方法得到Client Area的一个HDC句柄。 1.在WM_PAINT消息中调用 BeginPaint()方法,BeginPaint方法返回一个当前无效区域的HDC句柄,并把该无效区域设置为有效区域。所谓无效区域就是需要应用程序重新绘制的区域,反之则为有效区域。BeginPaint被调用时同时返回了一个PAINTSTRUCT结构,其中给出了本次重绘的Clip Rectangle,所有在这个rectangle之外的绘制操作都不会显示。值得注意的是Petzold在砖头里面反复强调在WM_PAINT消息处理函数中BeginPaint方法需要和EndPaint方法配对使用,还有BeginPaint中返回的HDC不能缓存起来使用。 2.调用GetDC(hwnd)/ReleaseDC()来获取释放对应Client Rectangle的HDC句柄, 这个句柄没有什么预定义的Clip rectangle, 整个Client Rectangle都可以绘制。但是GetDC()得到的句柄也同样不能缓存起来,也就是说GetDC和ReleaseDC函数要在一个消息处理函数中配对出现。 一个类似的API是GetWindowDC(),它用于获取整个Window的DC,(client area + non-client area) 和GetDC一样必须在一次WndProc执行中释放掉,不能缓存。

java urlrewriter的问题

问题:我需要通过用户输入http://localhost:8080/书名.html来从我的文件夹中匹配相应的书的描述,但是如果书的描述信息太多超过3000的话(windows下一个文件夹只能存放3000个文件),就需要分好几个文件夹来存放这些文件。我没有想到比较好的解决方案,我的思路如下: 首先通过urlrewriter把用户输入的书名进行匹配 <rule> <from>^/(.*?\.html)$</from> <to>/doSearch.jsp?book=$1</to> </rule> doSearch.jsp代码如下: <% String book= request.getParameter("book"); if(null != book&& !"".equals(book)) { for(int i=0;i<10;i++) { File file = new File(GenKind2.tempBaseWeb+"search/"+i+"/"+book+".html"); if(file.exists()) response.sendRedirect() } } %> 但是这样虽然找到了文件,但是response.sendRedirect();中我如果输入真实路径的话,真实路径会通过urlrewriter重定向到其他地方,无法获得我所需要的html文件,请问我该如何实现好?谢谢!

开始写论文了

自元旦以后一直没状态,不知道到底该干什么,一下子精神差了很多。 前一段时间老板亲自去调板子,觉得帮不上什么忙我也就不去了,呵呵。时序问题还是很麻烦的,尤其是声音,头痛。总想着好好把论文写一下,心思也没放在跳板子上,干脆不去了。 这周开始准备写论文,到现在为止把以前写的一些东西贴上去,凑了3W+字,字数倒是快够了。但仅仅是字数够了,很多东西前后不一致,但是又懒得改,也没有怎么查资料。接下来可能得写点小代码把MAC算法验证一下,再好好的从整体上把论文整理一下。 路由算法投稿以后还不知道到底怎么样呢,老板也没和我说,他似乎对我的算法兴趣不大,要不怎么不让我把MAC算法也写出来。老板开始实业救国了,^_^ 前两天才知道老板升任网络所所长了,以后师弟们就不再是新型机所的人了。老板申请的西安市科技攻关项目因为没有外部企业投资无法申请,哎。实验室说老板差点就申请到一个863,因为没给评委送礼,结果还是没成,老板这方面确实亟待提高,可惜博士师兄也没有一个是善于搞关系的人,要不老板也轻松很多。中国特色的社会主义! 周一去就业中心盖章把就业协议寄回公司了,还是苏州诚致,不知道南京什么时候办公。懒得去体检,反正毕业和入职都还有体检。 圣诞节的时候还收到瑞晟的邮件贺卡呢,诚致这方面还有很大的提升空间。瑞晟,不枉我把你排在最佳雇主第二位,可惜我们暂时无缘。 CSDN的博客以及网站做的很不怎么样,也许是教育网的问题! mm因为户籍问题无法考南京市公务员,但是她还是继续看公务员的书,因为不能闲着。偶尔看看英语。爱你,我的小天使,为我你付出太多了,我会好好疼你一辈子的! 对中国又爱又恨,因爱生恨吧,社会问题太多了,南开汽车门,湖北城管,ATM……而且下一代领导人似乎一直一帆风顺,不知道他们能不能理解劳动人民的疾苦,我看玄。 去诚致以后似乎以写代码为主,那可不是我的长处,不过无所谓了,反正有时间可以好好提高一下,刚开始肯定还是得技术过硬,无论做什么都行,对自己的学习能力还是挺自信的。 家里准备27号迁入新居,总算有自己的家了。爸妈辛苦了一辈子,养了两个好儿子,修了两栋房,现在老家的房子给别人住着。父母从没有享受过,以后得好好孝敬父母。

vi 彩色显示

vi是没有颜色的,但是我们在linux的控制台下用vi编辑文件却能看到彩色 这是因为安装了vim-enhanced的包 [root@app101 conf]# rpm -qa | grep vim vim-minimal-6.3.046-0.40E.7 vim-enhanced-6.3.046-0.40E.7 vim-common-6.3.046-0.40E.7 linux做了一些别名 [root@app101 conf]# alias alias cp='cp -i' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 所以我们运行vi实际上运行的是vi的增强版本vim. 安装好了 vim-enhanced后,默认在控制台就是彩色显示了 相关设置可以打开vi ~/.vimrc来修改 不过我们在远程ssh终端上有可能还是看不到彩色.主要有2个原因. 1.term类型不对,不支持彩色.在secureCRT上设置 Options->SessionOptions ->Emulation,然后把Terminal类型改成xterm,并点中ANSI Color复选框。 然后ls看看,发现文件名和目录已经是彩色了.但是可能vi打开某些文件依然不是彩色 按:进入命令模式输入syntax on也没有效果.这是因为vi没有识别你编译的文件类型 在命令模式下输入:set filetype=c C是c语言程序文件,如果是jsp,就用jsp代替,其他类推. 然后就可以变成彩色了. 文章引用自: 转载于:https://blog.51cto.com/coolerfeng/76152

交互式编程

习惯了C++的编程模式:编辑,保存,编译,运行和调试之后,就忘了其实还有另一种编程模式--交互式编程。很多脚本语言都提供类似的控制台,直接输入脚本语句,回车就执行了,结果立即显示出来,而不用经过复杂的保存和编译阶段。 交互式编程,对于简单的尝试性的操作是很方便的,比如测试一个函数的用法。因为输入语句之后,就可以立即得到结果,你就知道问题出在哪里,立即就可以修正,开发的速度于是得到了极大的提高。想想看,如果在C++等语言里,你是如何做到这些的。1. 打印输出结果到屏幕,到日志文件,或者MessageBox 2. 使用调试器单步跟踪或者设置断点。不管是哪种,都是比较费劲的,一旦发现问题,还必须终止整个程序,重新再来。如果程序加载的时间很长,或者需要经过很多步骤才能到达指定位置,你就更辛苦了--虽然VS2005等工具可以实现调试状态下修改C++代码并接着运行,但是我用的还是不多,好像不是那么灵便。 如果只是想实现一些临时性的操作,比如查看某些信息,那么交互性编程的优势就更凸显了。因为是临时性的操作,随意性会比较强,很多时候是看到一个信息之后才会想到要做另一个操作,所以不能事先想得很好。这时候,像命令行一样,边写边看就很方便了。我想,这就是为什么微软会发明PowerShell的原因之一了。 当然,给了我以上启发的还是Ruby on Rails,它提供的应用控制台可以让你以交互的方式运行Rails应用,而不拘泥于一定要从页面上交互,这样就很方便开发和调试,特别是在没有VS等强大的远程调试工具的情况下。

C++ dlopen mini HOWTO

注意:本文为转帖,原文在这里,这是英文原文。 问题所在 有时你想在运行时加载一个库(并使用其中的函数),这在你为你的程序写一些插件或模块架构的时候经常发生。 在C语言中,加载一个库轻而易举(调用dlopen、dlsym和dlclose就够了),但对C++来说,情况稍微复杂。动态加载一个C++库的困难一部分是因为C++的name mangling(译者注:也有人把它翻译为“名字毁坏”,我觉得还是不翻译好),另一部分是因为dlopen API是用C语言实现的,因而没有提供一个合适的方式来装载类。 在解释如何装载C++库之前,最好再详细了解一下name mangling。我推荐您了解一下它,即使您对它不感兴趣。因为这有助于您理解问题是如何产生的,如何才能解决它们。 Name Mangling 在每个C++程序(或库、目标文件)中,所有非静态(non-static)函数在二进制文件中都是以“符号(symbol)”形式出现的。这些符号都是唯一的字符串,从而把各个函数在程序、库、目标文件中区分开来。 在C中,符号名正是函数名:strcpy函数的符号名就是“strcpy”,等等。这可能是因为两个非静态函数的名字一定各不相同的缘故。 而C++允许重载(不同的函数有相同的名字但不同的参数),并且有很多C所没有的特性──比如类、成员函数、异常说明──几乎不可能直接用函数名作符号名。为了解决这个问题,C++采用了所谓的name mangling。它把函数名和一些信息(如参数数量和大小)杂糅在一起,改造成奇形怪状,只有编译器才懂的符号名。例如,被mangle后的foo可能看起来像foo@4%6^,或者,符号名里头甚至不包括“foo”。 其中一个问题是,C++标准(目前是[ISO14882])并没有定义名字必须如何被mangle,所以每个编译器都按自己的方式来进行name mangling。有些编译器甚至在不同版本间更换mangling算法(尤其是g++ 2.x和3.x)。即使您搞清楚了您的编译器到底怎么进行mangling的,从而可以用dlsym调用函数了,但可能仅仅限于您手头的这个编译器而已,而无法在下一版编译器下工作。 类 使用dlopen API的另一个问题是,它只支持加载函数。但在C++中,您可能要用到库中的一个类,而这需要创建该类的一个实例,这不容易做到。 解决方案 extern "C" C++有个特定的关键字用来声明采用C binding的函数:extern "C" 。 用 extern "C"声明的函数将使用函数名作符号名,就像C函数一样。因此,只有非成员函数才能被声明为extern "C",并且不能被重载。尽管限制多多,extern "C"函数还是非常有用,因为它们可以象C函数一样被dlopen动态加载。冠以extern "C"限定符后,并不意味着函数中无法使用C++代码了,相反,它仍然是一个完全的C++函数,可以使用任何C++特性和各种类型的参数。 加载函数 在C++中,函数用dlsym加载,就像C中一样。不过,该函数要用extern "C"限定符声明以防止其符号名被mangle。 示例1.加载函数 代码: //---------- //main.cpp: //---------- #include <iostream> #include <dlfcn.h> int main() { using std::cout; using std::cerr; cout << "C++ dlopen demo "; // open the library cout << "Opening hello.so... "; void* handle = dlopen("

Mac OS X 环境变量设置

(1)首先要知道你使用的Mac OS X是什么样的Shell,使用命令 echo $SHELL 如果输出的是:csh或者是tcsh,那么你用的就是C Shell。 如果输出的是:bash,sh,zsh,那么你的用的可能就是Bourne Shell的一个变种。 Mac OS X 10.2之前默认的是C Shell。 Mac OS X 10.3之后默认的是Bourne Shell。 (2)如果是Bourne Shell。 那么你可以把你要添加的环境变量添加到你主目录下面的.profile或者.bash_profile,如果存在没有关系添加进去即可,如果没有生成一个。 cd pico .profile //进入编辑文件状态,在添加完一行之后,加上回车 (3)如果是C Shell 同上 ,只是编辑的文件名为:.cshrc cd pico . cshrc //进入编辑文件状态,在添加完一行之后,加上回车 注意:一下资料来源于:http://finkproject.org/doc/users-guide/install.php?phpLang=zh 有些情况下你需要编辑更多的文件: 1. 你已经有一个~/.tcshrc文件。 有些第三方软件会创建这个文件,或者你自己这样做。 这时,~/.tcshrc 将会被读取,而 ~/.cshrc 则被忽略了。 推荐的步骤是用你上面编辑~/.cshrc时类似的方法编辑 ~/.tcshrc,并在最后加入这样一行: source ~/.cshrc 这样,如果你要删除 ~/.tcshrc,你还可以运行 Fink。 2. 你曾经按照 /usr/share/tcsh/examples/README 文档里面的要求进行操作。 这些指南告诉你创建一个 ~/.tcshrc 文件及一个 ~/.login 文件。这种情况下的问题是 ~/.login 文件在 ~/.tcshrc 文件之后运行,并用 source 语句引用 /usr/share/tcsh/examples/login 文件的内容。后者包括一条语句重写了你前面设置的 PATH 环境变量。在这种情况下,你需要做的是创建 ~/Library/init/tcsh/path文件: mkdir -p ~/Library/init/tcsh pico ~/library/init/tcsh/path 并加入: source ~/.

我在名牌大学毕业后的经历——曾经努力过,就不会后悔

我是82年,大学毕业3年5个月。现在一家大型市场咨询公司,自己带一个组,月薪16000,未算其他收入与分红。也就是传统意义上的白领打工仔。在北京,有一套房,80平,按揭,有一辆车,丰田RAV4。 说说我的经历吧 我毕业于全国最好的学校(那两所为人耳熟能详的学校之一),学的却是一门偏到除了留校读硕读博几乎没有其他选择的专业。大四将毕业时,我发现考研 对我来说无异于天方夜谭——我在校园里混了整整4年,GPA不足2.5。更关键的是,那时的我早已找不到一颗作为学生的静谧的心。 在经历了500强,四大,国字委的应聘失败后,我决定出国,04年的6月,同学们或是留校,或是拿着新鲜的三方合同步出校园,我拖着行李回到了家乡——长三角的一座大城市,和我一起回去的还有档案关系和曾经妄想留在北京的户口。 那时的我是心灰意冷的,我羞于在任何一个亲朋面前提起我是XX大学毕业,那是一个在4年前让我身披无数光环的名称。 一年的时间,我失业在家,一个XX大学毕业的无业游民,我开始准备出国,GRE,TOEFL,烦琐无比的申请,一趟趟的回学校开材料。成绩单上那一门门红色的挂科和蓝色的重修无疑在嘲笑我混过的4年,也无疑是我4年来星际,CS,WC3,篮球,燕京,小二,旷课,迟到的完美脚注。 赴美的申请是成功的,一所3流大学给我发来了offer,于是,小康的家庭开始为我凑钱——没有奖学金的留学消费是巨大的,尤其是换算成人民币。 然而签证没有通过,05年的美国签证远没有现在这么好拿,3流大学的offer在签证官面前像空气一样被无视。而这时,雪上加霜,与我在一起五年的女友提出了分手。(打到这句话时,恰好看见她的MSN上线,心里竟是一痛) 我同意了,她是北京的孩子,同校,同级,我们大一时便在一起了,那时的我们,都是初恋,她算是全系最漂亮的女生吧,舞蹈出身。毕业后,她去了四大,工作虽然很累,但不限专业的招聘,不菲的基本工资(毕业生,4850/月)和高额的加班费(正常上班8小时以外,3倍),对一个迷茫的毕业生来说,四大就是天堂。 毕业的一年后,她想买房,并有能力支付房款首付,而我无业,分文不名,出国梦断。 她与我坚持了五年,她的父母也早已将我当儿子看待,可我们最终还是分了,当她向我提出分手时,是以商量的口吻建议:我们先分开一段时间吧……我同意了,那时的我,自卑的无以复加。而她身边,围绕着太多成功的男人。 我心灰,于是母亲在家乡为我谋了个银行的差事。我便开始了自己短暂的出纳生涯。一个从来没有接触过金融的人,在银行里跟着柜员们学习本票支票电汇,为他们打起了下手,连自己的办公桌和电脑都没有,更没有人知道我曾就读于XX大学。 05年的我,竟能如此放平心态,这或许是我今天回首那段往事,唯一值得自傲的地方——拿着极其微薄的工资,为银行的柜员们打杂,甚至其中的几个,是比我低了一届的大专生。我没有椅子,每天打游击一般,站在他们身后看他们出票入票,一站就是一天,穿着廉价的白色衬衫,在那些穿着工服打着领带的出纳身后,或许是很碍眼的。而那时的我,最大的梦想竟是有一套那样的工服,很可笑,现在想来。 我或许是已经被挫折完全击垮了,从小学,到高中毕业,我顺利的让人瞠目结舌,小升初的保送,初中升高中的免试,又直接保送到了XX大学,再加上运动能力好,身高186,加入任何一个团体都是篮球队的主力小前,长相也还算不错……那时的我不明白,什么叫福兮祸所依。上天给了我整整22年的,无以复加的优越,该还了。我现在,特别信这个。 一个电话拯救了我,我在毕业前海投的简历中,竟有一份在一年半后被某位世界500强的跨国集团公司的HR拿到了桌面上,并浏览了起来,于是,我得到了这样一个工作的机会,欣喜若狂,欣喜若狂。 我回到了北京,有一份月薪2500(试用期)的工作,在全世界同行业的最牛B的公司,项目执行。 我到公司的第一天,就开始出差,3个月的项目,公司去了一个team,6人,我是其中的项目支持。压抑了1年的浊气在这里似乎得到释放。 500强公司的待遇是无与伦比的,直到现在,虽然我已经换了很多公司,坐过无数不同的办公桌,有过难以记数的出差经历,职位也是一升再升,可单从出差待遇来说,都无法与我在500强公司做项目执行相提并论。那3个月的差,我们辗转了全国17个城市,每人每天都有较高的打车额度与吃饭额度(各200),住四,五星酒店,单人大床,一人一间,航班只坐国航,每天11点才开工。这对一个刚从挫折中爬起来楞头毕业生来说,是怎样的冲击?我瞬间迷失在其中。 现在总是想起母亲对我说的一句话,当时我躺在希尔顿的大床上,接到了家中的电话,母亲得知了我的近况,在我的洋洋自得里,只是对我说,你其实什么都不是,因为你什么都不会。你还没到享受的时候,也没到自得的时候,你现在需要学习。可是,我真的太自得了。这也注定了我第一份正式工作的惨淡收场。 我的性格中总是有那样纵容自己的因子,我现在已经学会了收敛它们,可那时的我不会,在灰暗的一年后,环境的变化在一瞬间天差地别,那是一种爆发户的冲击,我觉得自己终于摆脱了背运,于是我纵容自己吃喝玩乐,在关键问题上与team leader相悖。回想来,那时的我是多么的可怕,没有起码的职业素养,对不起自己拿的薪水,对不起公司提供的优渥待遇,更辜负了这个想要培养我的平台。 毫无意外的,我的第一份工作在我出差回来后,就夭折了——我没有通过试用期,无论我的直接领导怎样向VP争取机会,我还是被直接扫地出门。事实上,我在公司的办公室里一共也没有坐满过一周。 第一份工作,因为玩忽职守而未通过试用期,500强公司,这是我所有挫折中最大的一次,直到现在,我也没有让任何一位认识我的人知道这番经历,我想,我永远也不会向他们透露,这是我25年人生里最为黑暗的一条深隙,深不见底。 我被打回了原形,于是我开始颠沛,像所有北飘一样在北京飘着,档案被fesco扔了出来,我把它放在了北京人才。我不能告诉父母我被解雇的事,我告诉他们我在北京很好,工作条件很优越,每天都能学到很多东西,可事实上,我已经三餐难以为继。我不能去找我在北京的朋友,我的哥们,我的同学,因为我不能露出我窘迫的现状,而工作一年多的他们,早已小有经济基础,出来聚会的灯红酒绿我没有可能消费得起。 我退了原先租的房子,找到了北四环外一处600的两居合租,我住小间,没有暖气。住大间的是一对刚毕业的学生,直到现在我也不愿再想起我的生命中出现过这样两个人,他们就像这段时光一样是我永远不愿放上记忆桌面的东西。 我开始找工作,05年的11月,天已很冷,我像大部分无业游民一样,像大部分2,3流大学失业毕业生一样,涌进人才市场,没有电脑,天天在网吧投递简历,3个月的薪水很快就被我花光了,于是我开始向家里变着法的要钱,理由繁多,如一次要交半年房租,钱不够。 有一些简历得到了回应,而更多的简历如石沉大海,一个非应届的,没有工作经验没有专业特长的毕业生,很难有公司眷顾。而回应我简历的,则基本是一些小公司。 我去面试了,这让我见识到了无数千奇百怪的,窝藏在居民小区里的作坊式小公司,那是我在大学时代所不敢想象的工作。当然,我也见识到了骗子公司,打着招演员,招演艺人员名义行行骗之实的公司。还有保险推销员,我险险踏入那一行,我也直面了一个人的尊严是如何被另一群人踩在脚底的过程,脚下的那张脸上却依然满是倍儿真挚的笑容。 有一家很大的local公关公司对我表示了兴趣,他们想把我培养成一名文案。应聘的程序严格而繁琐,我通过了笔试,英语笔试,英语口试与AD的面试,我意识到,距离爬出深隙只有一步之遥。可这一步最终却没有迈上去。 总经理提出要和我谈谈,她姓韩。我坐在她宽大的办公室里,她只向我提了一个问题,你对于公关行业有什么看法。我茫然,这个问题如果今天再问我一次,我甚至可以不用构思的立刻提笔写下2000字以上的评论,可是,两年前,对这个问题,我的脑袋里只有空洞的空白。韩总留给了我一份作业,让我回去用ppt写一份proposal,关于一个简单的新闻发布会。 我在网吧里奋战了整整一天,按照自己的想法拼凑了一份ppt,那是一份在今天我无法想象的业余的东西,毫无条理的乱七八糟,不存在任何可行的细节逻辑关联。可那时我是那样满意的就把“杰作”发了出去。我想,韩总收到那样一份ppt,大约感受和现在的我一样吧。我的面试又失败了。 我再也抗不住了,卡里只剩下不到300块钱,我绝对不能告诉家里任何自己的真实情况,于是,当有一家小公司答应录用我时,我竟是如此感谢上天给了我一份工作,我在网吧里,泪流满面,至少,这是家在写字楼里办公的公司。按他们副总的说法,XX大学已经算是通过面试的钥匙了,oh my god.... 月薪3000,无四险一金,无工资卡,无工资条。我开始了我的第二份工作。 最近80后的话题讨论的太多,我没有看过那部被热炒的《奋斗》,但那种毕业生所面临的迷茫让我不自觉的想把自己的经历写出来,这是我所认识的人中绝无仅有的坎坷,却又似乎映射出每一个大学毕业生的窘况,于是我想写。 这是家做网站的公司,经营着一个高尔夫球网站,主要的赚钱方式就是通过各种渠道向大款高官们出售各个球场的优惠卡,养着一群装扮媚俗却又花枝招展的销售,不用想也大致知道她们是通过怎样的方式将优惠卡推销出去的。而我。就在这个公司担任所谓的“活动频道”的主管。11月的北京,草黄,没有人下场打球,更不存在什么活动。我便每天给网站更新些新闻信息,顺带着看看网页,打打游戏。 我在论坛上总能看到许多80后的朋友抱怨小公司那种混日子的生活,斤斤计较的同事,欺上瞒下的leader。我只想说,千万别慢慢沦陷在这样的公司里,在多年后渐渐发现自己开始习惯那样的生活,成为那样的同事。我痛恨那里。 我是个爱笑的人,即使是现在,作为一个部门里一个小小的头目,也常常被下面的那帮兄弟笑称为阳光男孩。可是,我永远也记不起我在那个网站公司笑过几回,每天与同事相对无言,看着彼此的扑克脸,再把目光移回自己的屏幕上,各干各的,沉默。 那时找工作依然是我生活中最重要的事之一。网站公司是我维持生计的依靠,但决不是长期的泊位。 在那段混迹于小公司的日子里,大学时我的女友找到了我,她从大学同学那里打听到我在500强公司(我被解雇的事无人知晓),我们出现了和好的可能,初恋,迈入结婚的殿堂,五年的风雨分合,何等的浪漫。可现实却残酷,我回绝了她,我像是在一条漆黑的甬道里,前方看不到哪怕一点点光亮,我害怕她找到我,看见我深陷绝境。因为我明白,以她的性格,她绝不会袖手旁观,可那会击碎我最后一点小小的自尊。 我告诉她,我已经有女朋友了,现在就睡在我的身边。(这是当时电话里的原话,虽然有些像粗制连续剧的情节,大概是我也深受那些泡沫剧的影响吧)她不相信,哭,因为不想让大屋里的那一对听到,并引为谈资,我跑到楼下,穿着单衣在寒风里冲她大吼,我已经不喜欢你了!!然后挂上了电话。我那点可悲的自私的自尊。 我在寒风里戳了很久,然后上楼,睡觉。 前不久,她在MSN上对我说,收到你中秋祝福的短信了,我的父母也收到了,谢谢!我爸爸还说,再也没有人陪他喝酒了。我心酸,因为已经无可挽救得伤了两位老人的心。两位一直把我当儿子一样看的老人,两位逢年过节只要我在北京就会把我接到家里全家打边炉的老人。 06年的2月,经过3轮面试,幸运再次眷顾了我,我被一家世界可以排上前十的会展公司录用了。06年是狗年,本命年伊始,有一个完美的开始,对那时的我来说。 大逃亡般的辞职,我走出那家公司的大门,的确有这样的感觉。崭新的一切在等待着我,这是我所能把握住的最后一次机会了,我对自己这样说。我相信上天不会将机会卡无限次的派发给同一个人。 做过会展的朋友应该都知道,虽然十大最累的行业里面没有这一行,但并非因为它不够累,而是因为它比那些行业累得多。会展在中国一直没有受到过重视,只是把它作为市场营销,或是公关的一个附属品对待。而我,就在这样的一个夹缝行业中起步了。 公司的人手奇缺,可项目着实没少接,每个AE身上起码都背着5,6个项目,有发布会,有晚宴,也有展台搭建。 我就在一窍不通中背上了4个项目,那是一段没日没夜的时光,每天忙到深夜2,3点,手机随时待命。 一场最简单的新闻发布会,需要筹划场地斟选,场地租赁,现场摆台,流程,设计,搭建,道具,人员安排,表演,主持人台本,AV灯光音响,软件视频,摄影摄像,网络直播,礼品购买与包装,记者媒体,新闻通稿,媒体车马费用,接送飞机,嘉宾邀请,安排车辆,酒店入住,嘉宾台本,甚至是盒饭,停车证等等等等无比繁琐的事物,一场最简单的新闻发布会,仅仅落在电脑上的各种ppt,excel与word就有数万字之多,更别提前期各方面的沟通与修改,确切的说,只要客户方面有一点点修改,便是牵一发而动全身,需要会展人员做出最及时的各方面协调,而前期哪怕是最不起眼的一根AV数据线在现场没有到位,也足以使整场精心策划好的会议砸锅。而那时,我竟身背4个项目,与不同的客户周旋,与数十家vendor协调。而我甫入行,一窍不通。 刚开始的项目,我几乎做一个便砸一个。我意识到,做会展,需要有惊人的统筹力,规划力,沟通斡旋能力,需要你反应迅速,为人强硬却又进退有度,同时能说善写,当然,绝对要有无穷的精力体力和脑力。而我,似乎除了英文还不错,其他一无是处。 我能不能撑过试用期,这是我当时唯一的想法,那时,GM经常把我叫到他的小屋里,告诉我,XX客户又投诉你了。我低头,不知如何应对这样的诘难。 我被调组了,调到了一个新组,因为公司挖来了一个新的AD,据说是行业内数一数二的牛人,于是,公司决定把其他组里的累赘编进他那一组。至少,同事们都这样说。 我至今感谢那次调组,它让我碰到了一位非常好的leader,以及两位我引为患难知交的兄弟。 AD同学的办事方式绝对的雷厉,他手上有4,5个大客户,同时可以接下他们所有的会议和展位,并参加投标,他的脾气非常暴躁,但决不是对你有偏见,只是因为你跟不上他的节奏。他会将一切工作极有条理的分配给下面的AM与AE,他时常在饭桌上对我们说,我们是一条船上的人,现在全公司都看着我们这个新组能不能完成今年的任务,我们不能先垮了。那时的组里,气氛前所未有的团结,因为leader,他很真。 我们接了个大项目,上万人的晚会,现场的每一位观众都是嘉宾,那是我迄今为止做过的最大的项目,一个月不到的准备时间,我们忙疯了。组里还有另外两个AE,年龄与我相仿,最大的80年生。我们被分配了各自的工作,却需要相互协调,于是我们渐渐熟识了起来,他俩一个在公司已经做了1年,另一个却比我还新。于是,“老”人带着新人,我们被重压压的喘不过气,却每天挣扎着往返于公司,客户,工厂,会场,独独没有回过家,很多天,没有。 我犹记得晚会的前晚,我们搬到会场附近的酒店里,时隔8个月,我又一次住回了五星级酒店,可我那时完全没有了所谓“享受”的快感。脱下数天的臭衣,洗澡,然后直接去了会议现场,那里的搭建还在继续,礼品与兼职不知有没有到位,我得去盯场。还记得前两天,我在外地出差,住香格里拉,碰到MSN上一同学,丫问我,哪爽呢?我回说,福州,香格里拉。他说,爽嘛。我说,爽吊,就TM一睡觉地方,还不知是不是每天都能睡上。如此而已。 我现在信奉一句话,拔苗不能助长,但压苗却绝对可以。那时所面对的压力是无法用语言表述的,举个简单的例子,上万名受邀宾客的名字必须反复确认并打印成桌签,同时,还需要确认外地宾客的航班和入住信息,这已足够让人疯狂,作为邀请来的嘉宾,在桌签上,他们的名字绝对不能有一个字母的错误,当然,客户的嘉宾名单还总在变动,不到晚会开始,谁又知道哪位嘉宾会临时不来,或者临时想来呢?而这,仅仅是属于整场晚会最不起眼的一个小环节——嘉宾邀请所需要承担的工作。幸好,负责这个工作的人不是我,其实,现在我还是这样想。在这样压力下,我学到了如何操办一台真正的晚会的幕后流程,并疯狂的想要将这些存在我的记忆里。absorbingggg... 晚会结束时,我们连抱头痛哭的力气也没有了。客户一一上来向我们道谢,握手,欢笑。然后,我们坐在地上看着搭建工人撤场。我永远也忘不了当时leader同学站在一边发呆的样子。 经过了这场战役,我渐渐入行,慢慢也可以独立做一些小项目,似乎也没再接到什么投诉。在客户面前不再紧张和胆怯,敢和他们大胆的讨论并招待他们吃喝玩乐,也学会了和vendor们讨价还价,吃拿卡要……我渐渐脱离了月光的窘境,开始向家里汇钱,并开始考虑买房买车。 后来3个AE结拜了,分别是80,81和82年人,我是老三,共患难的感情是真的。我们一起做大项目,单独负责的小项目上也毫无保留的提供帮助。至今我都无比庆幸,这份工作带给我的东西,并不只是让我快速的成长,还有在其他任何工作中都不能带给你的,将同事变成你的至交兄弟。直到现在。我在现在公司,有个30多万的小活,发给“大哥”去做,他居然为了让我能向客户交个漂亮差,在成都盯了3周,他现在已经是AM了,顶着公司那边的压力,公司那里认为他放着一两百万的活不管,跑成都去盯一个30多万的项目,简直不可理喻。可他说,因为那是我发给他的活,他一定得给我干好喽…… 基本上,我的经历就到这里了,今年年中,有猎头给我打电话,让我去我现在的这家公司,因为有一个event manager的空缺,月薪16000,可以带一个4人的team。其实,在毕业了三年后,接到猎头的电话已经是家常便饭,大部分我都会礼貌的回绝掉。但那个电话不同,因为在展览公司时我曾经与这家公司合作过几次,在同类公司中或许能排在世界的top 1,至少我与我的同事现在还是这样认为的。作为我原来所在会展公司的甲方,我一直想去,甚至成为了我的一个梦想,因为他能让我接触到行业内更上层的建筑,市场部门的决策层面,于是为了实现这个梦想,我跳槽了,尽管我换过很多工作,但真正意义上的,光明正大跳槽,这是唯一的一次。 房子是开春时开始装修的,现在也住进来有两个多月了,还在付着按揭。车子买了快一年了,跑得不多,21000多公里,上月刚做过保养,我喜欢越野车,可又烧不起油(北京油价太贵),于是买了辆小的RAV4,双门,不实用,纯用在周末有空时出去玩。 我有了个新女朋友,在我在会展公司最累的时候,她一直陪在我身边,像个小孩子似的,总让我想要保护她,时间不长,才一年半,将来……不知道…… 现在很多人说我跋扈,我想,那是自信,这种自信是经过挫折和压力无情的摧残后重新发芽长成的参天大树,不会再被轻易摧断的东西。有些人说我阳光,阳光是因为我已无所畏惧,即使面对再大的难题,我也敢笑着对客户说,没问题,交给我来解决。实实在在的东西。 我感谢那段不堪回首的时光,尽管现在我还是不愿提起它。 就写到这里吧。写了很多,把这些年从来不敢说的话全码成了字,酣畅。但愿能收到同龄人的回响,谢谢大家看帖。 

class.forName

Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。 A a = (A)Class.forName(”pacage.A”).newInstance(); 这和你 A a = new A(); 是一样的效果。 关于补充的问题 答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。 Class.forName(xxx.xx.xx) 返回的是一个类 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段 动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象 String str = 用户输入的字符串 Class t = Class.forName(str); t.newInstance(); 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如: class c = Class.forName(“Example”); factory = (ExampleInterface)c.newInstance(); 其中ExampleInterface是Example的接口,可以写成如下形式: String className = “Example”; class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(); 进一步可以写成如下形式: String className = readfromXMlConfig;//从xml 配置文件中获得字符串 class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(); 上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。 从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。 现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。 最后用最简单的描述来区分new关键字和newInstance()方法的区别:

11.9日寄出三方协议

诚致的EMS一直没到,奇怪? 既然决定签了,那就不用管了,只选对的,不选贵的,呵呵 诚致挺适合自己的,自己不太适合去规模太大的僵化的公司,那样埋没了我的创造天赋,o(∩_∩)o...相信自己可以做出很好的东西,当然需要很多人的帮助。 早上九点多把三方协议寄了出去,以后再也不找工作了,每个人只能同时从事一份工作,既然找到了自己想要的,虽然诚致只是能满足我某一方面的需求。但是,互联网上似乎没人给我机会。那么,在嵌入式和无线方面好好做吧,可以创造新产品,想起来就觉得挺激动的。 地点选了南京,主要是因为南京是省会,mm找工作会方便一点。消费水平也是一方面,而且南京明年才开始办公,是不是有机会成为元老呢? 华硕的offer似乎今天也到了,到时候看看到底待遇怎样。华硕学院倒是一直想感受一下,不过华硕口碑太差,如果没有诚致,倒愿意去华硕锻炼锻炼。 虽然是海投,没想到收到的offer都是长三角的。威盛深圳除外,不准备去面了,耽误大家时间,呵呵 下周开始好好做项目了,这一周老师几乎每天都是晚上11点才回去,有点过意不去。上周和老师说一周内把工作搞定,然后安心做项目,老师既然不催我,那么,更应该以实际行动来感谢老师的支持和信任,加油! 接下来的日子可以安心学习了,真幸福!

offer开始满天飞

这两天瞬联,趋势,道富发offer了。 趋势二面的时候说,我们得赶紧把你们签了,要不都被别的公司抢走了。毕竟,签了以后违约是件很麻烦的事情。趋势也有几个人,不知道会不会有人签。今年比去年招人多。 瞬联发了一批offer,班上不少人收到,不过有几个人刚签完其它公司半小时就收到瞬联的offer 。还好,他们心态很好,觉得虽然签的公司待遇低点,但是那是自己想要的工作环境。似乎班上的同学都不愿意去外包公司,不想做纯编程人员。 我们班已知有6个人收到道富恒天的offer了,可能会有两个人签。室友总算安心了,恩杰,道富,网新,他的三大目标,达成了后两个。不错,可以安心科研了。 想起同学放弃的那些的offer,真的都是让很多人流口水。还好,大家都有追求,都还朝着自己最想要的目标努力。当然,有些人也遭到非议,不想去的就别瞎掺和。 我明天就签诚致了,很喜欢他们做的东西,很想在那里实现自己的价值。也许待遇不是很好,但那是我最想要的工作。既然养家糊口不是问题了,工作性质和兴趣就摆在第一位了。 华硕今天发offer了,不知道具体待遇怎样,应该不会太差,因为我写的期望薪资也不是很低,:-)HR电话说的时候没有具体说数字,只有个大概,具体薪资offer里才有。应该不会签,毕竟先答应了诚致,而且感觉诚致有更大的发展空间。虽然华硕IA部可以每天接触新产品,那也是自己的爱好,不过更期待自己做出新产品,让别人享受! 到时候再去威盛看一下吧,告诉他们我已经签了,如果不怕耽误他们的时间可以聊聊,毕竟有共同语言的人聊天是很幸福的一件事。 大唐没给我offer,呵呵,意料之中。 明天寄三方,下周开始用心做项目了,和老板说的一个星期左右解决工作问题的诺言可以实现了,呵呵。 可以有更多的时间用来学习而不是笔试面试了,开心……

Unable to read the project file ... 简单解决方法

原来好好的solution, 在硬盘上移动了下位置后就每次打开都出现unable to read the project file ...的错误 如果remove the web project from solution and then add it again, it works. But after save the solution and close VS2003, it will have the error again. 解决方案是: delete *.suo 文件 (跟*.sln 在一个目录下), 然后打开VS2003, 会有警告, 继续就行了. VS会生成一个新的*.suo文件,这样接下去重新打开 VS就不会有问题了。

libtool的作用及应用

注意:本文为转载,原文也是转载,但是为了尊重他人得劳动成果,我将将转载网址贴出来 libtool常见于autoconf/automake,单独用的例子很少,所以我想仔细研究一下,为将来兄弟们看起来方便。 一。libtool的作用 offer a standard procedure for creating shared libraries on different platforms libtool 是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移植的接口中,也就是说,你可以通过如下所示的标准方法,在不同平台上创建并调用动态库,我们 可以认为libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节,只要告诉libtool说我需要要编译哪 些库即可,并且,它只与libtool文件打交道,例如lo、la为后缀的文件。 二。libtool的使用 1.Creating object files # libtool --mode=compile gcc -g -O -c foo.c gcc -g -O -c foo.c -fPIC -DPIC -o .libs/foo.o gcc -g -O -c foo.c -o foo.o >/dev/null 2>&1 # libtool --mode=compile gcc -g -O -c hello.c gcc -g -O -c hello.c -fPIC -DPIC -o .libs/hello.o gcc -g -O -c hello.

生成缩略图代码(转帖)

/** /// 生成缩略图 /// /// 源图路径(物理路径) /// 缩略图路径(物理路径) /// 缩略图宽度 /// 缩略图高度 /// 生成缩略图的方式 public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) { System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath); int towidth = width; int toheight = height; int x = 0; int y = 0; int ow = originalImage.Width; int oh = originalImage.Height; switch (mode) { case "HW"://指定高宽缩放(可能变形) break; case "W"://指定宽,高按比例 toheight = originalImage.Height * width / originalImage.

fstream的用法

解析ifstream 与ofstream的用法 2007-01-29 10:23:17 大 中 小 这个小知识点迷糊了很久了,前段时间始终没有搞清楚,今天又拿过来看的时候好象明白了点...... 今天将ifstream 与ofstream的用法归纳一下 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'/n';就表示把字符串"Write Stdout"和换行字符('/n')输出到标准输出流。 2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。 一、打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char* filename,int mode,int access); 参数: filename: 要打开的文件名 mode: 要打开文件的方式 access: 打开文件的属性 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: ios::app: 以追加的方式打开文件 ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 ios::in: 文件以输入方式打开(文件数据输入到内存) ios::out: 文件以输出方式打开(内存数据输出到文件) ios::nocreate: 不建立文件,所以文件不存在时打开失败 ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 ios::trunc: 如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是: 0:普通文件,打开访问 1:只读文件 2:隐含文件 4:系统文件 可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:/config.sys fstream file1; file1.open("c://config.sys",ios::binary|ios::in,0); 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即: file1.open("c://config.sys"); <=> file1.open("c://config.sys",ios::in|ios::out,0); 另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了: fstream file1("c://config.sys");

李彦宏:百度为什么不建研究院?——我不认同的创新论

泉注:因为个人思维比较活跃,适合开发新产品、解决现有用户遇到的问题,所以在应聘百度时想看看百度是否有研究院一类的机构,结果找到下面的文章。 现在不予详细评价,不过看了这篇文章后,我对百度由工作的首选已经降低了不少。因为公司的文化可能不是很合适。当然,如果可以去百度的话还是很乐意的,毕竟在百度可以用很大的空间实现自己的各种新的创意。我会努力做好自己,尽力为用户服务,并且提高百度在大家心目中的地位。 李彦宏:百度为什么不建研究院? http://tech.tom.com 2007年08月19日 15时27分 Tom 科技 关键字:李彦宏 百度 研究院 关键字:李彦宏 百度 研究院 TOM科技讯 8月18日,段永基任会长的中国民营科技实业家协会举行成立二十周年庆典。出席庆祝活动的百度CEO李彦宏在演讲时表示——我的观点是我们不能建研究院,实际上去建研究院,用研究院的方法做创新的IT企业,我见到的下场都不好。 此前,有消息称,百度将建立一家独立的研究院。这也是李彦宏首次就百度建立研究院一事发表公开 看法并表态。 李彦宏表示,在企业创新方面,自己可能是跟很多企业家的做法不太一致,“不停地会有人跟我讲,说有一个新的想法,或者尝试一种新的方法,我作为CEO其实把大部分的精力都花在了说服他们,说这不行,这个东西不能做等等。” 我也注意到其实很多的创新者下场都不太好,我最近跟我们的首席科学家,他是今年1月份我们从美国硅谷请来的,实际上是我原来在美国公司的老板,应该说是在全球数得上的搜索引擎的专家,请他过来,也为我们技术人才做了很多工作。 最近我们在谈论一个问题,百度要不要搞一个研究院,因为我们已经看到很多的全球顶级的IT企业都有非常象样、非常有规模的研究院,我们百度要不要做一个这样的东西?因为很简单的理论,你要想有创新,你要想在竞争当中长期立于不败之地,一定要进行投入。 我的观点是我们不能建研究院,实际上去建研究院,用研究院的方法做创新的IT企业,我见到的下场都不好。 第一个例子是施乐公司,施乐公司有一个很著名的研究院,这个研究院在计算机领域其实有很多很多创新的,其中有一个是改变整个IT产业的发明,后来这个东西被苹果公司用去了,苹果公司后来做得还不错,但是真正的发明者,就是说施乐公司没有从中获得相应的收益。 第二个例子是IBM,IBM应该说做的,就是我在美国那些年代,在IT的研究上投入是很大的,他也有几个研究院,有很多很著名的计算机科学家,他的PC后来大家知道被微软、英特尔公司获得更大的收益。 互联网产业其实有更多的“暗礁”,很多东西在常人想来应该说是他做的最优秀的东西,他在技术上最先进,他应该获得最好的回报,事实上并没有。 我觉得有两点原因,一点,创新要基于市场的需求,很多大公司的研究院,因为我也在研究院里面待过,他们的科学家也好,或者研究人员也好,他的业绩的衡量主要是看主要一点就是你申请了多少专利; 第二原因,我觉得还是跟需求有关的,很多的公司对于市场的把握或者说对于市场的变化不是那么敏感,所以我在公司里头不停地在跟大家讲,不要天天盯着创新,我们不同的部门,不同的人时不时会跟我讲,我们做一个创意大赛吧,我们鼓励大家给公司提一些新的主意我们可以给他们一些奖励,总会在某种状况下或者某种时候提出类似的建议,每次我都否决,我不鼓励大家做这样的创意。 为什么呢?因为一旦你用一些比如说金钱上的回报,或者说其他什么机制鼓励大家想这些创新东西的话,他的出发点就变了,他不是依据市场的需求来提这些东西的,而是说为了做一些创新而进行创新。 但是尽管这样,并不是说百度不是一个有创新能力的公司,事实上我认为这个公司是很有创新能力的。 首先从公司文化上讲,大家穿着都是很随便的,上下班时间都是不固定的,我们也没有打卡的制度,上下级关系也非常不明显,很多这种公司文化层面的东西实际上是在无形当中鼓励创新,因为我觉得只有让这些有创新能力的人呆在一个他比较舒适的环境里他会比较自由,身体的自由才导致了他心理或者说他的头脑自由,他才能够真正想事情,去做一些新的东西。 但是做这个新的东西的时候不是说闭门造车,不是说关在屋子里自己突发奇想,而是他们不断研究用户的需求。所以在百度我们经常说的一句话就是你的用户想要什么,你首先要搞清楚这一点,然后再去决定你要做什么。 这一点我想是百度过去七年多的历史一直严格遵循的一个原则,也是很多百度产品能够推出来之后,大家半年、一年的时间就能够进入产业前两名,一般来说上了首页的服务都是推出一年之内业内的第一名,我想都是跟这些有关系的,他们很准确地能够把握用户的需求。 我们也不指望做得像韩国、日本那么好,能够更好一些的话,我想中国的互联网市场有很多很多新的需求会出来,当这些新的需求出来,而我们又能够比较准确地把握这些需求的时候,我们就会有真正有意义的符合市场的,能够产生比较大影响的创新出来,也只有这样我想中国的互联网企业才有机会走向世界,在其他的国家,在其他的市场上产生相应的影响。

CPoint,CSize,CRect类说明

CPoint类 类CPoint是对Windows结构POINT的封装,凡是能用POINT结构的地方都可以用CPoint代替。 结构POINT表示屏幕上的一个二维点,其定义为: typedef struct tagPOINT{ LONG x; LONG y; } POINT; 其中 x、y分别是点的横坐标和纵坐标。 由于CPoint提供了一些重载运算符,使得CPoint的操作更加方便。如运算符“+”,“-”,“+=”和“-=”用于两个CPoint对象或一个CPoint对象与一个CSize对象的加减运算,运算符“==”和“!=”用于比较两个CPoint对象是否相等。 CSize类 类CSize是对Windows结构SIZE的封装,凡是能用SIZE结构的地方都可以用CSize代替。 结构SIZE表示一个矩形的长度和宽度,其定义为: typedef struct tagSIZE{ LONG cx; LONG cy; } SIZE; 其中 cx、cy分别是长度和宽度。 与CPoint类似,CSize也提供了一些重载运算符。如运算符“+”,“-”,“+=”和“-=”,用于两个CSize对象或一个CSize对象与一个CPoint对象的加减运算,运算符“==”和“!=”用于比较两个CSize对象是否相等。 由于CPoint和CSize都包含两个整数类型的成员变量,他们可以进行相互操作。CPoint对象的操作可以以CSize对象为参数。同样,CSize对象的操作也可以以CPoint对象为参数。如可以用一个CPoint对象构造一个CSize对象,也可以用一个CSize对象构造一个CPoint对象,允许一个CPoint对象和一个CSize对象进行加减运算。 CRect类 类CRect是对Windows结构RECT的封装,凡是能用RECT结构的地方都可以用CRect代替。 结构RECT表示一个矩形的位置和尺寸,其定义为: typedef struct tagRECT{ LONG left; LONG top; LONG right; LONG bottom; } RECT; 其中 left、top分别表示矩形左上角顶点的横坐标和纵坐标,right、bottom分别表示矩形右下角顶点的横坐标和纵坐标。 由于CRect提供了一些成员函数和重载运算符,使得CRect的操作更加方便。 1.CRect的构造函数 CRect有如下6个构造函数: CRect( ); CRect( int l, int t, int r, int b ); CRect( const RECT& srcRect );

bmp文件格式

一个常用的bmp文件内容由以下结构组成: BITMAPFILEHEADER + BITMAPINFO + 数据 typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER, *PBITMAPFILEHEADER; typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO, *PBITMAPINFO; typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER; procedure TfrmServer.SaveBmpFile(pData: Pointer; DataLen: DWORD); var fhdr: TBitmapFileHeader;

学习ie5.5的Element Behaviors笔记

Element Behaviors is HTML component. be written in script using an HTC file, or it can be implemented with a binary by using ATL technoligic. 分两种: attached behaviorA DHTML behavior that binds asynchronously to standard HTML elements. It is possible to attach DHTML behaviors using the behavior attribute with CSS or by using the addBehavior method in script.element behaviorA feature of Internet Explorer 5.5 that allows DHTML behaviors to be bound synchronously to a custom element.

SimpleDateFormat的12小时制和24小时制

在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的,则使用hh:mm:ss 如果希望格式化时间为24小时制的,则使用HH:mm:ss Date date = new Date(); SimpleDateFormat sdformat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss a ZZZ"); String LgTime = formatter.format(LoginDate1); 结过为24小时:星期四 2005.07.14 11:07:812 上午 +0800 Date类,已经很少用了。更多使用的是Calendar Calendar date = Calendar.getInstance(); date.get(Calendar.HOUR_OF_DAY );//得到24小时机制的 date.get(Calendar.HOUR);// 得到12小时机制的 当然,SimpleDateFormat也可以格式化24机制或者12小时机制。 H 0-23 k 1-24 ---------------- K 0-11 h 1-12 

【c++】复数加减法类

自己编写的一个实现复数加减法类,主要练练运算符重载 #include < iostream.h > class complex ... { public: complex(double xx = 0.0, double yy = 0.0)...{x = xx;y = yy;} complex operator+(complex); complex operator-(complex); void display(); private: double x; double y; } ; complex complex:: operator + (complex b) ... { complex temp; temp.x = x+b.x; temp.y = y+b.y; return temp; } complex complex:: operator - (complex b) ... { complex temp; temp.x = x-b.x; temp.y = y-b.

oo编程

OO(Object-Oriented) 什么是OO? 就是面向接口编程。无论你是用vtable, 或gp的function object, 或就是C的函数指针,正交分解也好,各种pattern也罢,都是面向接口编程思想的一种实现。 为什么要面向接口编程? 为了解耦。 什么是解耦? 就是把程序中互相不相关或有限相关的模块分割开来。就象收拾屋子,你希望把不同的东西放到不同的地方。把酱油和醋倒进不同的瓶子里去。 这里,对完全不相关的功能,可以简单地分开实现。 但事实上,很多情况下,不同模块之间是有互相之间的关系的。这时,就需要接口。用接口准确定义模块之间的关系。解耦前,两个模块之间共享所有信息(这个信息包括数据,也包括各自的实现细节)。解耦后,需要共享的信息被准确地定义在接口中。同时,信息的流向也被确定。 解耦的好处是什么呢? 首先,程序变得清晰了。 其次,不该暴露的实现细节被隐藏了。代码的修改变容易了。 再次,结构灵活了,通过静态多态(function object)或动态多态(vtable), 一个模块可以和任意实现接口的模块协作。原来类A只能与类B协作,解耦后可以和所有实现接口IB的类如B1, B2, ... 协作了。扩展性大大增强。自然而然就代码重用了。 编译依赖也没有了。你可以专心写和编译一个模块,不用等待其它模块的完成。 调试容易了。只要模块对一个接口调试成功,其它的接口也没有问题。于是,甚至可以用一个simple naive的实现该接口的dummy类来调试。(这点,使用template的gp不适用) 那么解耦的坏处是什么呢? 接口的定义变得很关键。解耦就是隐藏一些信息,定义一些需要共享的信息。如果接口定义的不好,隐藏了不该隐藏的信息,那么对某些需要这些信息的复杂情况来说,这个解耦就失败了。 而如果没有隐藏一些应该隐藏的信息,那么不该有的耦合仍然存在。 那么怎样解耦,又怎样定义接口呢? 这是一个纯粹业务逻辑的思考过程。这里,对编程语言的知识变得无关紧要。事实上,只要精确掌握需求,严密地分析需求和模块内部子模块之间的需求,任何一个会逻辑思考的人都可胜任这个工作。就象歌星郑智化一样,虽然不识谱,但一样写歌,只不过最后要懂谱的人把歌纪录下来。 解耦的原则很简单:精确定义需求,仔细分析需求。不要隐藏任何“需求”也许会需要的信息。不要放过任何“需求”明显不需要的信息。 而对需求不清楚的情况,宁可错放一千,不能错杀一个。总而言之,决不能隐藏可能需要的信息。 不考虑重用,重用是解耦后的自然结果。不能倒因为果 

gexin 2410bp开发板调试笔记

gexin 2410bp开发板调试笔记 3.21 拿到开发板,原系统为WINCE,而实验系统为LINUX,故完成PPC、内核编译,利用JFLASH_NOR烧写不能成功。 3.22 利用WINDOWS下的SJF工具烧写2410loader.bin成功,可以在超级终端中看到启动信息。 3.25 首次在MiniCOM中看到板子的启动信息; 利用JFLASH_NAND烧写PPCBOOT.bin,烧写完后没有启动信息; 烧写VIVI,终于可以在MiniCOM中看到板子的启动信息。启动时按空格键可以进入VIVI的提示符。 在超级终端下写Linux内核(785K): 启动超级终端,启动板子进入提示符下; load flash kernel x ctrl +A s 选择传送下的传送文件,协议选取为XModem. 传送完成后提示,映象文件太大了。 试图装入RAM中运行,装载成功,但不能运行。 3.26 (S1右,S2下方)烧写PPCboot.bin成功,TFTP下载内核时出错:RETRY count exceeded!. 网络不通!!(后来发现居然没有接网线)。 NFS不通!!(加参数为 –ro后,MOUNT /NFS成功)。 成功烧入Linux内核及文件系统。 3.27 在ADS中进行调试 开发板只带一个JTAG小板,没有ARM ICE仿真器。运行AXD时不能找到ARM芯片。无法进行调试,但利用SJF2410可以下载。 利用JTAG.EXE及PORTTALK不能进行; 利用H-JTAG软件也不行; 利用调试代理软件ARMDEBUG,结合GIVEIO.sys也不行; 装了MULTI-ICE软件等,都提示不能找到芯片。 打电话到革新技术部,说要买他的价格为3800元的仿真器才能调试。我晕。 看到立宇泰论坛中,自定义JTAG连线,如图 在H-JTAG中自定义后可以找到板子,但在AXD中还是提示不能打开端口。 在ARM9.exe中自定义后,可以找到,并且可以在AXD中进行调试了。 哈哈!节约了3800大洋!! 目前主要问题: 1.如何让Linux启动在LCD上显示,而不是在minicom中显示? 2.如何进行MiniGUI的移植? 3.ADS中程序如何运行? 虽然可以调试,但运行LEDFLASH没有看到灯闪烁!! 3.28 编译内核 今天编译内核老是不能进入提示符。 在内核通过后,但不能进入linuxrc文件。经查原来是内核配置中没有选择 math emulation没有选择,我晕,我整整搞了一天。 3.29 LCD驱动问题?? 4.2 搞了几天,今天终于在LCD上看到显示信息了,原来是SYSTEM TYPE中的要去掉change AIJI.重新编译一下就可以显示小蜻蜓了。 下一步,移植miniGUI. 4.6 今天终于利用h-jtag结合ADS可以进行程序的调试了。将串口调通过了。 (要增加h-jtag的目标文件jtag.dll,还要去掉AXD中处理器配置Vector Catch) 利用AR9调试代理,也可以调试,但有时要出错。 串口和数码管实验可以正常做了。 4.7 ADS下调试通过实验程序:UART、LED、WDT、keypad、IICEPROM、GPIO、DA、2410Template等。另外,自己单独建立一工程,调试成功TESTGPIO,对LCD进行测试。

使用distinct在mysql中查询多条不重复记录值的解决办法

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是我们两人都郁闷了。。。。。。。。。 下面先来看看例子: table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。 比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。 select distinct name from table 得到的结果是: name a b c 好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧: select distinct name, id from table 结果会是: id name 1 a 2 b 3 c 4 c 5 b distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。 我们再改改查询语句: select id, distinct name from table 很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。。。。。。。 很麻烦吧?确实,费尽心思都没能解决这个问题。没办法,继续找人问。 拉住公司里一JAVA程序员,他给我演示了oracle里使用distinct之后,也没找到mysql里的解决方案,最后下班之前他建议我试试group by。 试了半天,也不行,最后在mysql手册里找到一个用法,用group_concat(distinct name)配合group by name实现了我所需要的功能,兴奋,天佑我也,赶快试试。 报错。。。。。。。。。。。。郁闷。。。。。。。连mysql手册也跟我过不去,先给了我希望,然后又把我推向失望,好狠哪。。。。 再仔细一查,group_concat函数是4.1支持,晕,我4.0的。没办法,升级,升完级一试,成功。。。。。。 终于搞定了,不过这样一来,又必须要求客户也升级了。 突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗? 赶紧用count函数一试,成功,我。。。。。。。想哭啊,费了这么多工夫。。。。。。。。原来就这么简单。。。。。。 现在将完整语句放出:

Win32 API消息函数:GetMessage

Win32 API消息函数:GetMessage 函数功能:该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。 函数原型:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilteMax 参数: lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。 hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。 wMsgFilterMin:指定被检索的最小消息值的整数。 wMsgFilterMax:指定被检索的最大消息值的整数。 返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是_1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。 备注:应用程序通常用返回值来确定是否终止主消息循环并退出程序。 GetMesssge只接收与参数hWnd标识的窗口或子窗口相联系的消息,子窗口由函数IsChild决定,消息值的范围由参数wMsgFilterMin和wMsgFilterMax给出。如果hWnd为NULL,则GetMessage接收属于调用线程的窗口的消息,线程消息由函数PostThreadMessage寄送给调用线程。GetMessage不接收属于其他线程或其他线程的窗口的消息,即使hWnd为NULL。由PostThreadMessage寄送的线程消息,其消息hWnd值为NULL。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。 常数 WM_KEYFIRST和WM_KEYAST可作为过滤值取得与键盘输入相关的所有消息:常数WM_MOUSEFIRST和WM_MOUSELST可用来接收所有的鼠标消息。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。 GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。 注意,此函数的返回值可非零、零或-1,应避免如下代码出现: while(GetMessage(IpMsg,hwnd,0,0))… -1返回值的可能性表示这样的代码会导致致命的应用程序错误。 速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:winuser.h;输入库:user32.Iib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。

DSP的C语言学习

DSP的C语言学习 CMD文件的作用: 在DSP里,程序执行过程中也有好多地方需要跳转,所以需要跳转的目标地址。如果你在编程序时知道你所要跳转的地址,那就更好的,但实际上,这是很不好控制的。所以就产生了.CMD。它有一个最大的好处,可以把每个段分配地址,所以比如你想从一个段跳到另一个段的时候,就很方便的知道这个段的起始地址。 CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据你的芯片进行修改.cmd文件分两部分.MEMORY和SECTIONS. MEMORY { PAGE 0 .......... PAGE 1......... } SECTIONS {SECTIONS { .vectors ................. .reset ................. ................ } MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间. PAGE 0 对应rom;PAGE 1对应ram PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度. 如: PAGE 0 : VECS(区间名字): origin(起始地址) = 0h , length (长度)=040h /*VECTORS*/ SECTIONS:(在程序里添加下面的段名如.vectors.用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。 如引用字段名“.vectors ”的程序或数据将被放到VECS ,VECS是PAGE0即是ROM空间 00H至40H的地方 SECTIONS { .vectors : { } > VECS PAGE 0 /* Interrupt vector table */ .reset : { } > VECS PAGE 0 /* Reset code */ .

window.opener 的用法

1>window.opener 的用法 在一般的用法中,只是用来解决关闭窗口时不提示弹出窗口, 而对它更深层的了解一般比较少。其 实 window.opener是指调用window.open方法的窗口。 在工作中主要是用来解决部分提交的。这种跨页操作对工作是非常有帮助的。 如果你在主窗口打开了一个页面,并且希望主窗口刷新就用这个,打开页面的window.opener就相当于 主窗口的window。 主窗口的刷新你可以用 window.opener.location.reload(); 如果你用虚拟的目录:如struts的*.do会提示你重试 你可以改成这样 window.opener.yourformname.submit() 就好了 2〉 在应用中有这样一个情况, 在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口 function closeWin(){ hasClosed = true; window.opener.location="javascript:reloadPage();"; window.close(); } function window.onbeforeunload(){ if(!hasClosed){ window.opener.location="javascript:reloadPage();"; } } </script> 上面的代码在关闭B窗口的时候会提示错误,说缺少Object,正确的代码如下: function closeWin(){ hasClosed = true; window.opener.location="javascript:reloadPage();"; window.opener=null; window.close(); } function window.onbeforeunload(){ if(!hasClosed){//如果已经执行了closeWin方法,则不执行本方法 window.opener.location="javascript:reloadPage();"; } } </script> reloadPage方法如下: function reloadPage() { history.go(0); document.execCommand("refresh") document.location = document.location; document.location.reload(); } PS:由于需要支持正常关闭和强制关闭窗口时能捕捉到事件,用了全局变量hasClosed ============================================== 补充,在父窗口是frame的时候在刷新父窗口的时候会出现问题: The page cannot be refreshed without resending the information.

解读IT架构管理中的四大重要规则

计算机系统的架构非常重要。不太合适的引用已故的Green Bay Packers的传奇教练Vince Lombardi话说,“架构不是所有的事情,但是它是唯一的事情。”或者曲解另一个古老的说法,“电脑程序潮起潮落,不好的架构永远存在。”通过观察许多IT部门的努力得出上述结论的。这些IT部门的架构不能迅速改变,或者不能被有效的管理,从而无法支持快速变化的商业模式。 我常常访问那些大公司,它们使用多于250种的软件、多种主机、上百个服务器、6种(或者更多)操作系统、许多网络协议,以及从6、7个供应商那里购买的硬件。这些公司的经理通常会问我,为什么他们的系统的成本如此之高,这么难改变或者升级,常常不可靠,而且还提供错误的客户服务意见。他们把这归罪与供应商和他们的员工。真相是,由于这些系统的复杂性和混乱性,它们能有效工作反倒会是一件令人惊讶的事。 没有计划的工作 许多公司的信息系统没有一个能够变化、能够反应的根本的架构。许多架构围绕的是基于客户需求和客户投诉的“点的解决方案”。 这让我想起了加州圣荷塞的Winchester神秘屋。1884年,一个叫Sarah Winchester的有钱的寡妇开始建造一个屋子,她不断的在里面添加东西,直到38年以后她死去。这个屋子包括47个火炉、40个卧室、两个地下室和至少5个厨房。她从没有一个大的蓝图,而且她常常的会变主意、添东西,使得木匠和工人不停的忙碌。所以说,这房子的架构是在“成长”的。不幸的是,就是这种反应模式使得许多IT组织陷入无效和混乱。 灵活一些 计算机架构不应该是强制的,或者僵化的。我们都见过这样的IT部门,他们认为控制架构的方式就是严格的执行客户控制标准。偶尔的,由于公司文化或者特殊的商业模式,这样的部门可能会成功。但是更多的情况是,要么客户准备抗议,要么总是有应用会超出现行的IT控制范围。客户是有创造力的,而且经常“盗用”软件和从事不同于正式程序的“秘密活动”。 另一方面,温驯的CIO们不断的在一个程序上加上另一个程序,不久面临一片混乱。要纠正这些错误,我建议你围绕公司的模式,建立一个基于标准的架构。 关注重要法则 架构原则应当从上至下,就是说,从最高层次的原则细化到IT各系统部件互相影响。很多时候,我发现IT组织努力对低层次的规范和协议达成一致,而没有先对“重要规则”达成一致。什么是“重要规则”?它们就是组织中的人员按照架构协调工作和分歧的基本原则。 第一条规则:认可 必须对架构中的所有人保持信任。那意味着不存在惊奇。在一个IT组织内,不能用访问优先权来获得控制权。你是不是常常走到会议室,惊奇的发现组织方向的变化,或者一些没有被共享的新信息? 所有的信息都应当被那些有关系的人共享,如果要确定一个方向,每个人都应当有机会去回应。不这样做就会破坏各方的信任关系。不信任是会促使人们脱离常规,通过建立灰色系统,或者破坏架构,从而“做自己的事”。 第二条规则:一致 没有人能破坏架构。如果需要,你可以防止,但是每个人都必须事先同意架构不能被忽略。如果这条规则没有被贯彻,你将陷入混乱。但是同时,必须要有一个上诉机制。架构不是让IT活动互相较量的俱乐部,所以高级经理应该对用户的关切保持敏感,并适当回应。 第三条规则:创建书面记录 架构必须被写下来,而且每个有关的人都应当对此有所贡献。口头的架构在许多的组织是一种传统,但是以我的经验看来,除非有一个简单和清晰的架构文件,而且每个管理人员和项目开发者有一个备份文件,你会面临误解和反感的威胁。 第四条规则:共同行动 没有一个IT组织内的人能够说“不是我的工作”。每个人都必须参与,而且没有人可以把担子给其他人,而对公司的成功无动于衷。这个价值观对于架构的成功至关重要。如果IT组织内的员工不理解共同行动的好处,组织就不会获得长期的成功。 IT“牛仔”需要理解组织工作的规则。一个有着强大架构的IT组织更加能适合牛仔和企业家精神,因为它能够清晰的表明所有活动的限制条件。

Lotus打开页面初始化顺序及几点知识点

以下都是针对BS结构来说。 顺序: 1, 初始化非显示时计算域 2, 初始化显示时计算域 3, 运行打开代理 4, 初始化计算文本 知识点: 如果显示时计算的域在文档内已经有值,那么该域就不再重新计算。 在后台对读者域赋值好象要带"CN="格式的全称才能生效。 计算域如果没有用@commond([filesave])进行前台保存,而用后台save保存时,不会重新计算。

计算机类期刊投稿心得 [ 添加中...现35种 ]

1、【杂志名称】 计算机应用研究 【杂志文章包含专业】建模,仿真,网络,人工智能,比较杂。 【投稿联系方式】http://www.arocmag.com/ 注册在线投稿审稿 【投稿费用】250元/页 【杂志级别】国家一级期刊,全国中文核心期刊 【稿酬回报】无 【投稿感受】录用率始终保持在60%以上,不包括增刊,想上增刊,交钱就行(250元/页)。无审稿费,1~2月就知道结果了! 2、【杂志名称】火力与指挥控制 【杂志文章包含专业】武器装备方面建模,仿真,评估等。主要针对军工方面文章。 【投稿联系方式】hlyz@chinajournal.net.cn 【投稿费用】版面费600元,审稿费50元。如果稿件质量高,免版面费。 【杂志级别】中文核心期刊,科技论文统计源期刊。 【稿酬回报】有,但不多,百十来元吧。 【投稿感受】录用率较高,70%左右,审稿周期2个月,发表周期1年左右。编辑态度较好。 【其他】如果忙着毕业,或评职称,可以投。 3、【杂志名称】系统仿真学报 【杂志文章包含专业】建模,仿真,计算机技术,网络,评估等。内容较杂。 【投稿联系绞健?/font >www.china-simulation.com 【投稿费用】版面费1200元左右,审稿费150元(中文)。 【杂志级别】中文核心期刊,EI统计源期刊。 【稿酬回报】有,但不多,百十来元吧。 【投稿感受】录用率不高20%左右,审稿周期2个月,发表周期1.3年左右。编辑态度较好。论文要求仿真结果。 【其他】2005年,论文被EI检索率90%以上。 4、【杂志名称】《宇航学报》 【杂志文章包含专业】飞行理论、航天飞行器系统、导弹系统、空气动力学、测量与信息传输、制导与控制、飞行器能源、遥感飞行器设计与制造、惯性技术、推进技术、计算机应用、材料与工艺、发射工程、结构强度、目标与环境、计量与测试、质量与可靠性等。 【投稿联系方式】yhxbbjb@263.net 【投稿费用】审稿费80元,版面费1100左右 【杂志级别】核心期刊,06年为EI 检索期刊 【稿酬回报】较少 【投稿感受】要求电子稿和打印稿投送,审稿2~3个月,录用率为10%左右、感觉投稿有难度。 5、【杂志名称】《导弹与航天运载技术》 【杂志文章包含专业】主要报道中国导弹与火箭系统及分系统技术及与其相关的学术研究论文与报告,并适当报道国际航天领域的热点、最新成果及新动态。设有综述与述评、专家论坛、运载器总体及分系统技术、论文与报告、研究简报、高科技窗口、国外进展、热点漫谈、简讯等栏目。 【投稿联系方式】edit@calt.com 【投稿费用】无审稿费80元,版面费500左右,优秀的文章免收版面费。 【杂志级别】核心期刊 【稿酬回报】有,约150 【投稿感受】可电子投稿,审稿2个月,录用率为50%左右。总的感觉难度不大。 【其他】编辑部态度不错。 6、【杂志名称】《小型微型计算机系统》 【杂志文章包含专业】发表我国计算机领域的科学研究、工程设计及应用、高等教育等方面的学术论文,并介绍国外先进计算机理论和技术。主要栏目有计算机硬件、软件、网络、多媒体等技术的研究、开发、应用。 【投稿联系方式】xwjxt@sict.ac.cn 【投稿费用】审稿费100元,版面费1000左右 【杂志级别】核心期刊,EI检索。 【稿酬回报】有 【投稿感受】先投打印稿投送,初审通过再投电子稿。审稿2~3个月,录用率为20%左右,难度中。 【其他】编辑部态度不错。 7、【杂志名称】《计算机仿真》 kwcoltd@public.bta.net.cn 【投稿费用】审稿费100元,版面费250/页(上涨中...)。 【杂志级别】中国核心期刊(统计源) 。 【稿酬回报】有,但不多。 【投稿感受】电子投稿。审稿1~2个月,录用率为70%左右。较容易,基本上有仿真结果就能发表。如果你交200,要求加急审稿的话,100%中。(据说是级别被降下来了,所以狂要文章,狂收钱) 【其他】编辑部态度不错。 8、【杂志名称】《自动化学报》 【杂志文章包含专业】自动化技术,计算机技术等。 【投稿联系方式】 【投稿费用】审稿费150元 【杂志级别】国家一级期刊,中文核心期刊。 【稿酬回报】有 【投稿感受】网上投稿。审稿2~4个月,录用率为20%左右。 【其他】编辑部态度不错。 9、【杂志名称】微计算机信息 【杂志文章包含专业】自动化为主,计算机其余方向少量。 【投稿联系方式】http://www.autocontrol.com.cn//magazine

关于Java文件路径问题

1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; import java.io.File; public class Test { public static void main(String[] args) throws Exception { System.out.println( Thread.currentThread().getContextClassLoader().getResource("")); System.out.println(Test.class.getClassLoader().getResource("")); System.out.println(ClassLoader.getSystemResource("")); System.out.println(Test.class.getResource("")); System.out.println(Test.class.getResource("/")); System.out.println(new File("").getAbsolutePath()); System.out.println(System.getProperty("user.dir")); } } 2.Web服务中 (1).Weblogic WebApplication的系统文件根目录是你的weblogic安装所在根目录。 例如:如果你的weblogic安装在c:\bea\weblogic700..... 那么,你的文件根路径就是c:\. 所以,有两种方式能够让你访问你的服务器端的文件: a.使用绝对路径: 比如将你的参数文件放在c:\yourconfig\yourconf.properties, 直接使用 new FileInputStream("yourconfig/yourconf.properties"); b.使用相对路径: 相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放在yourwebapp\yourconfig\yourconf.properties, 这样使用: new FileInputStream("./yourconfig/yourconf.properties"); 这两种方式均可,自己选择。 (2).Tomcat 在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin (3).Resin 不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET 的路径为根.比如用新建文件法测试File f = new File("a.htm"); 这个a.htm在resin的安装目录下 (4).如何读相对路径哪? 在Java文件中getResource或getResourceAsStream均可 例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web发布根路径下WEB-INF/classes (5).获得文件真实路径 string file_real_path=request.getRealPath("mypath/filename"); 通常使用request.getRealPath("/"); 3.文件操作的类 import java.io.*; import java.

MediaPlayer ActiveX访问自定义的URL协议时问题

问题:假如用MediaPlayer要访问类似的 abc://host/xxx 自定义的流媒体时,会出现一个提示,按确定可以正常。如用MediaPlayer ActiveX访问时,则不会出现提示,而且不能播放。 解决:安装软件时自动往注册表写: HKEY_CURRENT_USER/Software/Microsoft/MediaPlayer/Player/Schemes/ abc Runtime = 1 1 = 不提示可以播放 0 = 禁止播放 null=出现提示

公司内网账号

访问内部网注意事项 1. 登录方式: 文化大厦办公区内部: http://intra.zhong-ying.com 或 http://192.168.3.137 文化大厦以外: http://219.143.200.137

HTTP Streaming protocol 分析笔记

HTTP Streaming protocol 分析笔记 Windows Media service 提供mms:// 和http:// 协议进行音视频流播放。由于微软没有公开以上协议的技术细节,很难对流进行下载保存。http 相对简单,以下对其进行抓包分析。 mms/http/rstp 协议文档可参考 http://sdp.ppona.com HTTP 交互过程: GET /xfm2003/video/morrissey_-_first_of_the_gang_to_die_hi.wmv HTTP/1.0 Accept: */* User-Agent: NSPlayer/9.0.0.3250 Host: 195.173.73.27 X-Accept-Authentication: Negotiate, NTLM, Digest, Basic Pragma: no-cache,rate=1.000,stream-time=0,stream-offset=4294967295:4294967295, packet-num=4294967295,max-duration=0 Pragma: xPlayStrm=1 Pragma: xClientGUID={3300AD50-2C39-46c0-AE0A-EF4916E929D5} Pragma: stream-switch-count=3 Pragma: stream-switch-entry=ffff:1:0 ffff:2:2 ffff:3:0 Accept-Language: en-gb, *;q=0.1 HTTP/1.0 200 OK Content-Type: application/octet-stream Server: Cougar 4.1.0.3857 Via: netcache1-new (NetCache NetApp/5.6.2R1D17) Cache-Control: no-cache Pragma: no-cache Pragma: client-id=5382809 Pragma: features="seekable,stridable" <HTTP BODY> .. <HTTP BODY> 包格式: Command(2 bytes) Length(2 bytes) Data (length bytes) .