分类目录归档:编程

编程从业五年的十四条经验/zz/

排列不分先后:

1. 当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL,sqlite更容易掌控。

2. 关于并行计算,如果能避免就尽量避免。如果无法避免,记住,能力越大,责任越大。如果有可能,尽量避免直接对线程操作。尽可能在更高的抽象层上操作。例 如,在iOS中,GCD,分发和队列操作是你的好朋友。人类的大脑没有被设计成用来分析那些无穷临时状态——这是我的惨痛教训所得。

3. 尽可能简化状态,尽可能局部本地化。适用至上。

4. 短小可组合的方法是你的好朋友。

5. 代码注释是危险的,因为它们很容易更新不及时或给人误导,但这不能成为不写注释的理由。不要注释鸡毛蒜皮的事情,但如果需要,在某些特殊地方,战略性的长篇注释是需要的。你的记忆会背叛你,也许会在明天早上,也许会在一杯咖啡后。

6. 如果你认为一个用例场景也许“不会有问题吧”,它也许就是一个月后让你在发布的产品中遭受惨痛失败的地方。做一个怀疑主义者,测试,验证。

7. 有疑问时,和团队中所有相关人交流。

8. 做正确的事情——你通常会知道这指的是什么。

9. 你的用户并不傻,他们只是没有耐心理解你的捷径。

10. 如果一个开发人员没有被安排长期的维护你们开发的系统,对他保持警惕。80%的血、汗、泪水都是在软件发布后的时间里流的——那时你会变成一个厌世者,但也是更聪明的“行家”。

11. 任务清单是你的好朋友。

12. 主动让你的工作更有乐趣,有时这需要你付出努力。

13. 悄无声息的崩溃,我仍然会为此从噩梦中惊醒。监控,日志,警报。清楚各种的假警报和不可避免的感觉钝化。保持你的系统对故障的敏感和及时警报。

14. 复杂是大敌。

WordPress 语言文件.po .pot和.mo简介以及修改

 

使用WordPress的朋友都会发现有一些.pot或是.mo为后辍名的文件,这些文件其实就是WordPress程序的语言包及编译文 件.我们把做的就是把这些文件翻译成中文并编辑为.mo格式.现在先介绍一些基本知识,让我认识pot文件、po文件、mo文件分别是什么和它们之间的关 系。

继续阅读

帮你免于失业的十大软件技术/zz/

1. XML
首先,你要了解XML。我不是说仅仅是XML规格本身,还包括一系列相关的基于XML的语言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在过去5年内从未碰过键盘的人,可能不知道XML为何物。XML是一种文本文件,使用与HTML 类似的标记。XML能定义一个树状结构,并能描述所含的数据。 XML最好的一点是既能存结构化数据也能存非结构化数据。它既能存贮和描述“规格的”(regular)表格数据,也能容纳和描述“粗糙的”(ragged)文件数据。XHTML是现今写HTML的首选方法。因为它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件, XHTML格式的文件更容易处理。XSLT和XSL是用于把XML文件转成其它格式的语言。可转换的格式包括:文本文件、PDF文件、HTML、以逗号为分隔符的文件,或其它XML文件。 DTD和XML Schema描述XML文件所能包含的内容的类型,并让你“验证”XML文件内容的合理性,而不用写特殊代码以确保内容符合规则要求。

继续阅读

在Webpart中以Post方式提交数据到SharePoint站点/zz/

因为我通常都是配合UserControl来开发复杂的Webpart的,所以这里指的是包装在Webpart中的UserControl如何以Post方式提交数据到SharePoint数据库。

WSS站点默认不支持WEB应用程序通过POST的方法更新数据库数据,需要在Web应用程序中加入安全较验信息,这类安全较验信息包含两个不同的安全层次:为更新单个站点或站点集的安全较验、为更新网站所在虚拟服务器或WSS设置的安全较验。
第一种安全较验通常是应用程序更新站点中的业务数据时需要使用的安全较验,添加方法如下:

1 在ASPX页面头部加入以下申明(请注意该代码段必须在同一行上,否则编译器较验出错

):<%@ Register Tagprefix=”SharePoint” Namespace=”Microsoft.SharePoint.WebControls”   Assembly=”Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral,    PublicKeyToken=71e9bce111e9429c” %>

2 在ASPX页面中为要提交的数据加入FormDigest较验控件,添加后的表单类似:

<form id=”Form1″ method=”post” runat=”server”>
<SharePoint:FormDigest runat=”server”/>
<asp:Button id=”Button1″ style=”Z-INDEX: 101; LEFT: 282px; POSITION: absolute; TOP: 282px” runat=”server” Text=”Button”></asp:Button>
</form>

添加后ASPX页面有时候会出现不能进行可视化设计(原因未知),可以在加入FormDigest之前将页面部局设计好。

3 客户端请求带有验证控件的网页时,服务端为该请求生成HTML页面,同时在页面中加入安全较验信息,当客户端提交数据时,服务端较验安全信息,如果没有修改则不会触发异常,否则触发异常停止执行程序。

4 如果后台代码是执行SharePoint网站的管理任务,则需要更高的权限,做法是在CodeBehind文件中加入以下代码

SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenField(“__REQUESTDIGEST”, globalAdmin.AdminFormDigest);

启动IIS时提示“服务没有及时响应启动或控制请求”几种解决方法

启动IIS时提示“服务没有及时响应启动或控制请求”几种解决方法因为系统用了时间太长了,所以重装了一下.重装完成后,先装了瑞星再装IIS的.但是等我启动IIS时长时间没有响应,最后才提示“服务没有及时响应启动或控制请求”.
我的系统环境是:Windowsxp sp2, IIS5.1
当然以为是IIS没有装好,拿出盘删除再装IIS,还是老问题.
于是当然是Google了.找了好多解决方法都没有用.
难道这些解决方案对我失效,我查看了一下计算机的服务项里,发现”World Wide Web Publishing”关闭了,启动也提示启动失败。看来是里程无法启动,这时候当然看看防火墙或是杀毒软件有没有相关的进程,”World Wide Web Publishing”的可执行文件是”inetinfo.exe”,在瑞星防火墙访问规则里找到”inetinfo.exe”访问规则设为全部放行.
再次启动”World Wide Web Publishing”,然后再启动IIS,一切OK.

网上提供的IIS解决方案不一样,因为情况跟不一样.我把我搜索到的解决方法也提供一下. Quote 1. 系统环境:Windowsxp+sp2,II5.0
故障现象:上午把IIS服务停止以后,103f程序长时间没响应,通过任务管理器关闭,启动时提示“服务没有及时响应启动或控制请求”,重启计算机未能解决。
解决办法:在Internet信息服务下有本地计算机(计算机机名),单击名键,选择断开,提示确实要断开本地计算机(计算机机名)吗?选择确定。
右键单击Internet,选择连接,计算机名填本机名称,用户名填本机管理员帐号(Administrator),确定。Quote 2.  昨天就发现了公司我用这台电脑的IIS启动不了,今天早上试着解决它,才发现问题并不简单。找呀找呀找呀,发现”WorldWideWebPublishing”关闭了,启动也提示启动失败。静下心来,再看看其它关闭了的服务,有一项Eventlog把它启动了,再启动WorldWideWebPublishing成功。问题就在这里。
虽然“WorldWideWebPublishing”服务和SMTP服务的依存关系列表中没有提到“eventlog”服务,但“eventlog”服务不启动的话,就会出现上述问题。启动“eventlog”服务,然后启动“WorldWideWebPublishing”服务,上述问题消失。Quote 3.  IIS元数据库可能坏了。。测试一下。
Try to enumerate metabase:
1. Open a command prompt and change to the C:InetpubAdminscripts folder.
2. At the command line, type “cscript adsutil.vbs enum ” (without the
quotation marks).
If this command is successful, it enumerates the settings in the
metabase.
If the command is not successful, you receive the -2146893792
(0x80090020) error code.
假如有备份,把数据回复。
如果没有,参考
How to Manually Restore the Metabase When No Proper Backup Exists or When
the MMC Does Not Start
http://support.microsoft.com/?id=234429
HOW TO: Download, Install, and Remove the IIS MetaEdit 2.2 Utility
http://support.microsoft.com/?id=232068 Quote 4.  解决IIS不能启动,提示服务器没有及时响应启动或控制请求!
问题现象:
1、在IIS中站点显示停止,点击开启IIS不能启动,提示:服务器没有及时响应启动或控制请求 点击重新启动IIS提示:服务器没有及时响应启动或控制请求!
2、World Wide Web Publishing Services不能启动,提示“错误1721,资源不足,无法启动”
解决方法:
1、刚刚我也出现了那个问题,弄了一上午现在解决了,我是查出了World Wide Web Publishing Service服务没有启动,也启动不了,按照他的依存关系,把其他的服务启动了就可以了,我启动的是HTTP SSL,然后World Wide Web Publishing Service就可以用了,iis也可以了
2、有一次站点访问失败,IIS服务无法启动,我的解决思路是这样的:
先打开Administrative Tools –> Service,发现World Wide Web Publishing Service停止了。于是试图启动该服务,结果报错。
于是查看World Wide Web Publishing Services所需要依赖的服务(Dependencies),看到是IIS Admin Service。进而发现IIS Admin Service也无法启动,再查IIS Admin Service的Dependencies,查的结果是Protected Storage和RPC(Remote Procedure Call),于是启动RPC,接着顺利启动IIS Admin Service,接着启动World Wide Web Publishing Services,于是IIS恢复正常。自己尝试根据这几种解决方法的思路肯定还有其它原因不同解决方法的.
本文遵循创作共用版权协议, 要求署名、非商业用途和保持一致.

同一个表单递交到不同页面

内容:看到好多朋友问怎么样在根据同一个表单递交到不同页面,现总结如下:方法一:(推荐)
<form method=”POST” name=”form1″>
……
<input type=”button” value=”del” name=”B1″ onclick=”document.form1.action=’del.asp’; document.form1.submit()” >
<input type=”button” value=”view” name=”B2″  onclick=”document.form1.action=’view.asp’;document.form1.submit()”>
<input type=”button” value=”addnew” name=”B3″ onclick=”document.form1.action=’addnew.asp’; document.form1.submit()”>
</form>
————————————————————
方法二
<script language=”vbscript”>
sub click1()

if window.event.srcElement.name=”del” then
form1.action=”del.asp”
form1.submit
end if

if window.event.srcElement.name=”view” then
form1.action=”show.asp”
form1.submit
end if

if window.event.srcElement.name=”add” then
form1.action=”add.asp”
form1.submit
end if

end sub
</script>
———-
<FORM method=POST name=”form1″>
……………..
<input type=”su103fbmit” value=”del”  name =”del” onclick=”click1()”>
<input type=”submit” value=”view” name=”view” onclick=”click1()”>
<input type=”submit” value=”add” name=”add”
onclick=”click1()”>
</form>

VC制作系统服务/zz/

本文主要介绍了 OpenSCManager、CreateService、OpenService、ControlService、DeleteService、RegisterServiceCtrlHandler、SetServiceStatus、StartServiceCtrlDispatcher等操作服务程序的主要几个API的用法,具体的函数参数大家可以查阅MSDN。

为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。下面就跟着我一步一步地教你怎么去创建一个服务应用程序吧。

一、建立 Win32 Application 应用程序(当然你也可以建立其它的应用程序,但服务一般是没有用户界面的),并命名为 ServiceTest。

二、定义全局函数变量。这里主要是设置服务句柄和状态。 BOOL IsInstalled(); BOOL Install(); BOOL Uninstall(); void LogEvent(LPCTSTR pszFormat, …); void WINAPI ServiceMain(); void WINAPI ServiceStrl(DWORD dwOpcode); TCHAR szServiceName[] = _T(“ServiceTest”); BOOL bInstall; SERVICE_STATUS_HANDLE hServiceStatus; SERVICE_STATUS status; DWORD dwThreadID;

三、添加Init初始化函数。 void Init() { hServiceStatus = NULL; status.dwSer103fviceType = SERVICE_WIN32_OWN_PROCESS; status.dwCurrentState = SERVICE_STOPPED; tatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; status.dwWin32ExitCode = 0; status.dwServiceSpecificExitCode = 0; status.dwCheckPoint = 0; status.dwWaitHint = 0; }

四、添加安装和删除服务函数。这里主要是用到了五个函数 OpenSCManager,CreateService,OpenService,ControlService和DeleteService 。
OpenSCManager 用于打开服务控制管理器;CreateService 用于创建服务;OpenService用于打开已有的服务,返回该服务的句柄;ControlService则用于控制已打开的服务状态,这里是让服务停止后才删除;DeleteService 用于删除指定服务。

BOOL Install(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //创建服务
SC_HANDLE hService = ::CreateService( hSCM, szServiceName, szServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NULL, _T(“”), NULL, NULL);
::CloseServiceHandle(hService);

::CloseServiceHandle(hSCM); }

BOOL Uninstall(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

//打开服务
OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);

//停止服务
ControlService(hService, SERVICE_CONTROL_STOP, &status);

//删除服务
DeleteService(hService); … }

五、添加服务主线程函数和控制函数。这里调用 RegisterServiceCtrlHandler 来注册服务的控制函数,这里要设置status.dwControlsAccepted 为 SERVICE_ACCEPT_STOP,否则你不能控制这个服务的状态。

void WINAPI ServiceMain() { // Register the control request handler
status.dwCurrentState = SERVICE_START_PENDING;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制
//注册服务控制
hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
if (hServiceStatus == NULL) { LogEvent(_T(“Handler not installed”));
return; }
SetServiceStatus(hServiceStatus, &status);
status.dwWin32ExitCode = S_OK;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hServiceStatus, &status);
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } //
status.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hServiceStatus, &status);
LogEvent(_T(“Service stopped”)); }

六、在主线程函数里注册控制函数和程序执行主体。这里主要是说明这就是程序的执行体。
void WINAPI ServiceMain() { …
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } … }

七、最后,要在main函数里注册添加安装、删除、注册主函数。

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { Init(); dwThreadID = ::GetCurrentThreadId(); SERVICE_TABLE_ENTRY st[] = { { szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } }; if (stricmp(lpCmdLine, “/install”) == 0) { Install(); } else if (stricmp(lpCmdLine, “/uninstall”) == 0) { Uninstall(); } else { if (!::StartServiceCtrlDispatcher(st)) { LogEvent(_T(“Register Service Main Function Error!”)); } } return 0; }

八、总结。其实做一个服务程序并不难,主要是懂得程序的执行体放于哪里?和注册程序的主函数和注册控制函数,如果这两个没有注册的话,你就程序就不知道如何去控制了。statu103fs.dwControlsAccepted = SERVICE_ACCEPT_STOP;这个也重要,如果你没有设置的话,那么服务就不会受你控制了。

Windows SharePoint Services的备份与还原/zz/

不久前在MICROSOTE网站上看到一份关于WSS的备份与恢复,在这里,我在简单的引用一下,已便大家共享。移动、备份和还原站点内容或整个站点的选项包括:
。列表或站点模板
。Web 数据包
。FrontPage
。SQL Server
。Windows SharePoint Services 工具

1、列表和库模板

您可以获取 Windows SharePoint Services 列表或库,将其转换为模板,用于创建新列表或新库。列表和库模板保存在每个站点中,您可以选择是将列表或库数据保存到模板中,还是只保存列表或库结构。列表和库模板大小只能限制在 10 MB。

2、站点模板

您可以获取使用 Windows SharePoint Services 创建的站点,将其转换为模板,用于在同一站点集合中创建新站点。您可以选择是将站点数据作为模板的一部分保存,还是只保存站点结构。站点模板创建后,该模板将显示在站点模板选取页上,用户可从该页跳转开始创建新站点。站点模板大小只能限制在 10 MB。

3、Web 数据包

Microsoft Office Front103fPage 2003 包括新型 Web 数据包功能,该功能允许您将基于 FrontPage 2003 或 Windows SharePoint Services 创建的站点中的全部或某些文件及结构放在一起,放入一个数据包中,然后便可以使用此数据包在其他子站点或服务器上创建相同的站点。Web 数据包可以包含站点中所有内容,或仅包含一些指定元素;例如,您可以选择忽略特定网页、列表或库。Web 数据包可以包含网页内容和列表及库结构,但不能包含特定的站点内容 (如列表和库数据或文档) 及站点导航结构。不过,它们却可以包含自定义链接栏。

4、数据库备份和还原

因为基于 Windows SharePoint Services 创建的站点包含在 SQL Server 数据库中,因此,如果备份然后还原数据库,也就备份和还原了站点。要具有备份和还原 SQL Server 数据库的能力,需要具有访问服务器的管理权限。这个选项可备份和还原所有站点内容,包括安全性和权限。

5、管理员通过 Stsadm.exe 备份和还原

Windows SharePoint Services 中包含一个被称为 Stsadm.exe 的强大命令行管理工具。此工具允许管理员添加或删除用户、创建或删除站点、备份或还原站点,等等。还允许备份和还原站点集合,包括所有的站点内容及安全性和权限。使用 Stsadm.exe 需要具有访问服务器 (运行 Windows SharePoint Services) 的管理权限。

我只使用了其中最后的两种方式,在这之中用STSADM.EXE工具是最方便而且不容易出现错误的,如果想知道具体还原的做法,大家只要上网搜索一下就可以看到更为详细的内容了。

计算农历的函数汇编原码(1)/zz/

;>>>>>>>>>>>农历计算函数原代码<<<<<<<<<<<<<<<<<
;=============检测阳历对应年份是否闰年==========
;       输入:年份
;       输出:eax = 1 是闰年,否则 eax = 0
_IsLeapYear proto dwYear:dword
;=============取阳历对应年月的天数==============
;       输入:年份,月份
;       输出:eax = 天数
_GetMonthDays proto dwYear:dword,dwMonth:dword
;=============取阳历对应星期几==================
;       输入:年份,月份,日
;       输出:eax=星期,星期日=0,星期一=1…
_GetWeekDay proto dwYear:dword,dwMonth:dword,dwDay:dword
;=============取对应阳历月的节气日==============
;       输入:年份,月份
;       输出:al =第一节气日,ah =第二节气日
_sTermOff proto dwYear:dword,dwMonth:dword
;=============取对应阳历日期的节气序号==========
;       输入:年份,月份,日
;       输出:eax=节气序号,小寒=1,大寒=2…
_GetHolDay proto dwYear:dword,dwMonth:dword,dwDay:dword
;=103f============取两个阳历日期之间的天数==========
;       输入:年份1,月份1,日1,年份2,月份2,日2(第一个为被减数)
;       输出:天数

继续阅读