??xml version="1.0" encoding="utf-8" standalone="yes"?>少妇高潮惨叫久久久久久,国产精品欧美久久久久无广告 ,欧美久久久久久http://www.shnenglu.com/sunshinealike/半完主?/description>zh-cnTue, 06 May 2025 23:11:02 GMTTue, 06 May 2025 23:11:02 GMT60SVN的一点用介l?/title><link>http://www.shnenglu.com/sunshinealike/archive/2010/07/30/121695.html</link><dc:creator>Sunshine Alike</dc:creator><author>Sunshine Alike</author><pubDate>Fri, 30 Jul 2010 06:24:00 GMT</pubDate><guid>http://www.shnenglu.com/sunshinealike/archive/2010/07/30/121695.html</guid><wfw:comment>http://www.shnenglu.com/sunshinealike/comments/121695.html</wfw:comment><comments>http://www.shnenglu.com/sunshinealike/archive/2010/07/30/121695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunshinealike/comments/commentRss/121695.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunshinealike/services/trackbacks/121695.html</trackback:ping><description><![CDATA[SVNQ ? subversion. Is a version control system, open source, and free.<br /><br />通常有两U用用模式:<br />    Lock-modify-Unlock    独占式,代表VSS<br />    Copy-modify-Merge    q行式,CVS/SVN<br />方式1单易?Q但是不能支持多人协同工作,其它人在文g被签出后必须要等<br /><br />待它被提交确认后才能q行更改?br />方式2效率更高一些,但是多h同时q行修改操作时有可能会引发冲H?br /><br />SVN常用的命令:<br />    checkout, authentication, update, add, delete, commit, rename, import, export...<br /><br />关于命o的一点说明:<br />commit: 不要把垃圾文件提到到服务器,垃圾文g包括中间文gQ与具体机器环境相关的文Ӟ可以由其它文件生成的文g{?br />rename: Windowspȝ对于文g名不区别大小写而SVN区分Q所以在改名时请注意。SVN的rename功能实际是delete再add?br />import: 用于本地文件导入SVNQ导入内容不包含当前目录?br />export: 用于导出SVN目录l构Q导出的l果不会带有隐藏?svn目录?br />resloved: 用于解决完冲H之后确认新的文件。当两个人先后修改了同一部分的内容后Q再提交׃产生conflictsQ小模型的冲H可以手动用differ工具修改再resloved认Q大规模的冲H就需要放弃修改结果重新编辑了?br /><br />Log MessageQ?br />每次提交的时候都应该写上logQ来说明所做的改动Q可自己定义某种log格式?br /><br />属性:<br />SVN中可l目录增加propertyQ比较重要的属性是externalQ这用来表示一个外部引用,使用Ҏ为:FloderName    URLQ结果是在目录下创徏一个以URL地址为内容的文g夏Vexternal link始终保持最斎ͼ只要修改原始内容Q所有的引用都会更新。这很适合来管理系l的公共部分的内宏V?br /><br /><b>tag</b>Q一个非常有用的命oQ用来创Z个系l的快照Q把所有的文g锁定到某一个指定的版本受需要注意的是在tagging的时候external link仍然会保持到最新的版本Q所以在tagging之前需?b>手动指定一个external的版本号</b>Q在URL前面加上-r xxx来指定是哪个版本的external。ƈ在tagging完成之后<b>q原</b>q些externalQ否则它们就不始l保持到最新的版本?img src ="http://www.shnenglu.com/sunshinealike/aggbug/121695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunshinealike/" target="_blank">Sunshine Alike</a> 2010-07-30 14:24 <a href="http://www.shnenglu.com/sunshinealike/archive/2010/07/30/121695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows动态链接库DLL[实践]http://www.shnenglu.com/sunshinealike/archive/2010/07/08/119658.htmlSunshine AlikeSunshine AlikeWed, 07 Jul 2010 16:24:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/07/08/119658.htmlhttp://www.shnenglu.com/sunshinealike/comments/119658.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/07/08/119658.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/119658.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/119658.html动态链接库的原理,好处那些先不说了,直接来看怎么使用?br />首先写一个动态链接库Q其?span style="color: rgb(0, 0, 0);"> __declspec(dllexport)是用于MS~译器的一个关键字Q用来将DLL中的内容导出而不需?def文g了?br />下面的cpp里就函数的定义了QDllMain函数跟普通的win32 console的main函数很像?br />使用cl /c DLLImplement.cpp
link /dll DLLImplement.obj
可以得C个DLLImplement.dllZ也会导出一?/span>DLLImplement.libq个跟静态链接库很像的东西,实际上它的作用只是导出那些方法和变量的名字?br />
1 extern "C"
2 {
3     __declspec(dllexport) void Set(int i);
4     __declspec(dllexport) int Get();
5     __declspec(dllexport) void SayHello();
6 
7     int value;
8 }
 1 #include <iostream>
 2 #include <objbase.h>
 3 #include "DLLHeader.h"
 4 
 5 
 6 void Set(int i)
 7 {
 8     value = i;
 9 }
10 int Get()
11 {
12     return value;
13 }
14 void SayHello()
15 {
16     std::cout<<"Hello, I'm DLL, value is "<<value<<std::endl;
17 }
18 
19 
20 BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved)
21 {
22     HANDLE g_hModule;
23 
24     switch(dwReason)
25     {
26     case DLL_PROCESS_ATTACH:
27        std::cout<<"DLL is attached!"<<std::endl;
28        g_hModule = (HINSTANCE)hModule;
29        break;
30 
31     case DLL_PROCESS_DETACH:
32        std::cout<<"DLL is detached!"<<std::endl;
33        g_hModule=NULL;
34        break;
35     }
36 
37     return TRUE;
38 }
39 


使用DLL的方法,?U:使用def文g/使用LoadLibrary和GetProcAddressҎ/使用导出的lib配合头文件?br />W一U太ȝq里不介l,只说明一下后两种的用方法?br />
 1 #include <iostream>
 2 #include <windows.h>
 3 
 4 typedef void (*SET)(int);
 5 typedef int (*GET)(void);
 6 typedef void (*SAYHELLO)(void);
 7 
 8 int main(int argc, char **argv)
 9 {
10     SET pSet = 0;
11     GET pGet = 0;
12     SAYHELLO pSayHello = 0;
13 
14     HINSTANCE hinst=::LoadLibrary("DLLImplement.dll");
15     if (0 == hinst)
16     {
17         std::cout<<"load dll failed!"<<std::endl;
18         return -1;
19     }
20 
21     pSet = (SET)GetProcAddress(hinst, "Set");
22     pGet = (GET)GetProcAddress(hinst, "Get");
23     pSayHello = (SAYHELLO)GetProcAddress(hinst, "SayHello");
24 
25     if (0 == pSet || 0 == pGet || 0 == pSayHello)
26     {
27         std::cout<<"get function failed!"<<std::endl;
28         return -1;
29     }
30 
31     //ready to call the function
32     (*pSet)(10);
33     int i = (*pGet)();
34     std::cout<<"Get value from dll, value is "<<i<<std::endl;
35     (*pSayHello)();
36 
37     return 0;
38 }
q种调用Ҏ属于昄调用Q用的时候需要知道DLL文g的\径,q有DLL里面的方法的名字Q还是有点不太方ѝ更多的时候,都是使用最后一U隐式调用的ҎQ即配合头文件和导出的libQ需要在q行链接的时候加入DLLImplement.lib卛_Q方法如下:
 1 #include <iostream>
 2 #include "DLLHeader.h"
 3 
 4 using namespace std;
 5 
 6 
 7 int main (int argc, char **argv)
 8 {
 9     Set(100);
10     cout<<"Set value in DLL"<<endl;
11     int i = Get();
12     cout<<"Get value in DLL, value is "<<i<<endl;
13 
14     SayHello();
15     return 0;
16 }
到这里对DLL有了一个大概的感性认识,具体的理论性的知识Q等有机会慢慢再写出来?br />
抱怨一句,最q有Ҏ了,惌写的日志都没写?br />扑֮习也ȝQ写代码肩膀脖子酸痛?br />IT民工的命咋就q么苦哩?br />

Sunshine Alike 2010-07-08 00:24 发表评论
]]>
Python~程l习一QStaffSalaryApphttp://www.shnenglu.com/sunshinealike/archive/2010/04/23/113343.htmlSunshine AlikeSunshine AlikeFri, 23 Apr 2010 08:30:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/04/23/113343.htmlhttp://www.shnenglu.com/sunshinealike/comments/113343.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/04/23/113343.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/113343.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/113343.html上手非常单,有过一定编E经验的人大U可以在几个时之内掌握基本的Python~程Ҏ?br />正好在学习设计模式课E,会有几次评作业Q就直接拿过来权当Python的一ơ编E练习了
W一ơQ务简介:
实现一个管理雇员薪水的工具Q可以打印出员工的薪水信息?br />雇员分ؓ普通和l理Q各自有不同的薪水计方法?br />
OkQLet's goQ?br />首先复习一下Python里的面向对象相关知识Q定义一个雇员的基类EmployeeBase
q且在__init__Ҏ里定义了三个成员name, base_salary和overtime_days
需要注意的是所有的cL员方法在声明的时候都需要有一个默认的参数selfQ这个相当于this指针的东西必要写上Q而且讉KcL员或者方法也都要加上q个前缀Q不然会出错?br />
1 class EmployeeBase():
2     """Base class of all staffs"""
3     def __init__(self, name = "", basesalary = 0, overtime = 0):
4         self.name = name
5         self.base_salary = basesalary
6         self.overtime_days = overtime
7     def GetName(self):
8         return self.name

接下来就是普通雇员类EmployeeQ承的语法Q?span style="color: rgb(0, 0, 0);">Employee(EmployeeBase)
以及cȝ__doc__Q养成写注释的习惯?br /> Line 6Q?br />__init__q不是构造函敎ͼq且Python里也没有构造函数这个概c所以要手动的调用基cȝ__init__Ҏ
GetSalary中计薪_普通雇员的加班工资是双倍计的?br />
 1 class Employee(EmployeeBase):
 2     """Common employee class derived from EmployeeBase.
 3     A employee can has overtime salary, every overtime work's salary will be doubled
 4     """
 5     def __init__(self, name="", basesalary=0, overtime=0):
 6         EmployeeBase.__init__(self,name,basesalary,overtime)
 7     def GetStaffType(self):
 8         return "Employee"
 9     def GetSalary(self):
10         return self.base_salary + self.base_salary/30*2*self.overtime_days
11     def GetSalaryInfo(self):
12         return self.name + " : " + self.GetStaffType()+ " : " + str(self.GetSalary())

到这里,雇员cdl完成,下面是—?b>单元试。一般我以前写程序都很少写单元测试的Q因为很ҎQ要写很多测试的代码?br />但是q里我想特别试一下,以展现Python里的各种Ҏ和工具?br />新版本的Python里有一个专门用于测试的unittest模块Q导入就可以使用了,下面新徏一个Testsalary.pyq行单元试?br />首先unittest模块里有一个测试用例的基类TestCaseQ我们只要在TestCase的派生类里定义自q试用例Ҏ可以用了Q这些测试用命方法甚至都不需要自p用,只要Ҏ名字以test开?/b>QTestCase׃自动的调用它们?br />在下面的试代码中,我定义了testNoneEmployee{几个测试方法,主要是用了TestCase里的assertEqualҎ?br />
"""Unit test for salary.py"""
import unittest
from salary importEmployee

class TestEmployee(unittest.TestCase):
    
"""Unit test for clas Employee"""
    
def testNoneEmployee(self):
        e 
= Employee()
        self.assertEqual(
"",e.GetName())
        self.assertEqual(0,e.GetSalary())
        self.assertEqual(
"Employee",e.GetStaffType())
    
def testBaseSalary(self):
        e 
= Employee("emp"300)
        self.assertEqual(
"emp",e.GetName())
        self.assertEqual(
300,e.GetSalary())
        self.assertEqual(
"Employee",e.GetStaffType())
    
def testNoOvertime(self):
        e 
= Employee("emp"300, 0)
        self.assertEqual(
300,e.GetSalary())
        self.assertEqual(
"emp : Employee : 300", e.GetSalaryInfo())
    
def testOvertime1(self):
        e 
= Employee("emp"3001)
        self.assertEqual(
320,e.GetSalary())
        self.assertEqual(
"emp : Employee : 320", e.GetSalaryInfo())
    
def testOvertime2(self):
        e 
= Employee("emp"3005)
        self.assertEqual(
400,e.GetSalary())
        self.assertEqual(
"emp : Employee : 400", e.GetSalaryInfo())
        
if __name__ == "__main__":
    unittest.main()
q行之,出现l果Q?br />
----------------------------------------------------------------------
Ran
5 tests in 0.007s

OK
全部通过Q太没意思了Q想着要加点什么好呢。下面我Ҏ造Employee的时候加上参数的查,不允怸正确的参数输入,例如名字太长Q工资和加班天数数等。我希望在试囄q些不正的参数q行创徏Employee对象的时候出现异常?br />在测试代码中加入另两个方法,使用了TestCase里的另一个方?b>assertRaises
Q这个方法可以检被对象是否按抛出了预期的异常。这个方法接受一个异常类型,和一个会产生q种异常的“对象”,通常是一个函敎ͼ以及它们的参?br />
    def testInvalidName(self):
        self.assertRaises(InvalidName, Employee, 
"name too long")
    
def testInvalidInput1(self):
        self.assertRaises(InvalidInput, Employee, 
"emp"-300)
    
def testInvalidInput2(self):
        self.assertRaises(InvalidInput, Employee, 
"emp"300-5)
两种异常cȝ名字分别叫InvalidName和InvalidInputQ这下测试通不q了。下面就需要修改Employeec,首先提一下Python里的异常处理Q用try...except...处理异常Qraise抛出异常Qfinally可以用来做一些善后处理工作?br />下面先要定义上面用到的这两种异常QInvalidName和InvalidInputQ这里简单的l承一下Python里的Exceptioncd可以了,然后修改Employee的__init__ҎQ进行参数的查检Q修正后如下Q?br />
#new type of Expceptions
class InvalidName(Exception):pass
class InvalidInput(Exception):pass


#Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-


    
def __init__(self, name="", basesalary=0, overtime=0):
        
#raise exceptions if input is invalidate
        if len(name) > 8:
            
raise InvalidName, "Error: Name too long!"
        
if basesalary < 0 or basesalary > 300000:
            
raise InvalidInput, "Error: Base salary should between 0~300000!"
        
#use int(overtime) != overtime to check if the input is int
        if overtime < 0 or overtime  > 31 or int(overtime) != overtime:
            
raise InvalidInput, "Error: Overtime should between 0~31!"
        EmployeeBase.
__init__(self,name,basesalary,overtime)
psQ异常类型后面的文字是ؓ了给Q异常处理提供信息用的?br />
OKQ第一步顺利完成,下面是l理cR经理的工资由加班工资和l效l成Q加班工资只跟经理的{有关Q它与W效工资都是一个固定|基本上没有什么难度?br />






Sunshine Alike 2010-04-23 16:30 发表评论
]]>
一点Y件设计的体会Q设计模式和UMLhttp://www.shnenglu.com/sunshinealike/archive/2010/04/10/112162.htmlSunshine AlikeSunshine AlikeSat, 10 Apr 2010 05:19:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/04/10/112162.htmlhttp://www.shnenglu.com/sunshinealike/comments/112162.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/04/10/112162.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/112162.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/112162.html先不这句话的正与否,但是有一Ҏ定的,软g的开发过E中Q设计是非常重要的。有一个好的设计能够将软g开发失败的机率降到最低?br />设计模式不应该被视ؓ软g开发的说明书,照着那一条一条的模式套用q不一定能写出来好的程序,正确的态度应该是把它们作ؓ软g设计的经验和来看?br />最q看了下那本《敏捯Y件开发:原则、模式与实践》,感觉实是本好书Q可以看出来作者对软g开发的功力非常丰富。我发现作者在说明软g开发过E的时候大量用了UMLQ以前我都认识这些东西很虚,很麻烦。现在看q本书的时候却有点了不同的体会Q哈哈,看来是我以前层次太低了。UML实在是一个好东西Q清晰明了,用来描述复杂的系l的时候真有种拨云见日的感觉?br />
下面单写一下UML的基本知识:
1.识别参与?br />2.抽取用例
用例中有两点需要说明一下:扩展(extension)/包含(include)
扩展Q它们之间互不引用,仅仅插入到被扩展用例?br />包含Q包含用例会引用被包含的用例
基本用例完成之后Q可以根据参与者将其分cȝlv来,形成pȝ的边界图来汇LC?br />
3.领域模式(domain)
q是一U类gUMLcd,但是它们之间有很大的差别Q它q不会对应于~码中的c?class)?br />4.cM间的关系
兌Q以一条线q接两个c表C,表示它们之间怺包含。更常见的是一U带头单向兌关系?br />聚合Q以一个白色菱形箭头表C类之间的“整?局部”关p,同样聚合关系的一个变体“组合”,以一个黑色菱形箭头表C,q也是一U“整?局部”关p,但是“部分”不能脱Z整体”而存在,“整体”也必须负责理“部分”的生存期?br />举例Q家庭和人是聚合关系Q而电脑与CPU是组合关p?br />

Sunshine Alike 2010-04-10 13:19 发表评论
]]>
一个小故事Q老师在毕业典Cg的讲?/title><link>http://www.shnenglu.com/sunshinealike/archive/2010/04/10/112153.html</link><dc:creator>Sunshine Alike</dc:creator><author>Sunshine Alike</author><pubDate>Sat, 10 Apr 2010 04:23:00 GMT</pubDate><guid>http://www.shnenglu.com/sunshinealike/archive/2010/04/10/112153.html</guid><wfw:comment>http://www.shnenglu.com/sunshinealike/comments/112153.html</wfw:comment><comments>http://www.shnenglu.com/sunshinealike/archive/2010/04/10/112153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunshinealike/comments/commentRss/112153.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunshinealike/services/trackbacks/112153.html</trackback:ping><description><![CDATA[   其一Q“世界上W一高峰是哪座山?”大家哄堂大W:“珠I朗玛峰!”老师q问Q“第二高峰呢?”同学们面面相觑Q无人应声。老师在黑板上写:“屈居第二与默默无闻毫无区别??<br />  <br />   其二Q“有烧壶开_{生好火发现柴不够,他该怎么?”有的说赶快LQ有的说d、去买。老师_“ؓ什么不把壶里的水倒掉一?”大家一听,表示佩服?<br />  <br />   其三Q“古代有一人,惛_立n的本领。经q反复比较,军_d屠龙之技。他拜名师,日夜苦练Q终有所成。他会怎么样呢?“同学们兴致勃勃Q说他能成ؓ英雄、明星,受世人崇拜。老师摇头Q“这个h一定会潦倒一生,因ؓ世上Ҏ没有龙。?<br />  <br />   你们应该要学会“如何做人、做事、做学问”:<b><br />   做h要力求出Ԍ勇争W一Q这样别人才能发C、记住你Q?br />   做事要敢于创斎ͼҎ灉|Q千万不可墨守成规;<br />   做学问要学以致用Q要懂得知识{化ؓ效益Q闭门造R没有路?/b><img src ="http://www.shnenglu.com/sunshinealike/aggbug/112153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunshinealike/" target="_blank">Sunshine Alike</a> 2010-04-10 12:23 <a href="http://www.shnenglu.com/sunshinealike/archive/2010/04/10/112153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有一些想法,慢慢开始整理一?/title><link>http://www.shnenglu.com/sunshinealike/archive/2010/04/05/111701.html</link><dc:creator>Sunshine Alike</dc:creator><author>Sunshine Alike</author><pubDate>Mon, 05 Apr 2010 13:27:00 GMT</pubDate><guid>http://www.shnenglu.com/sunshinealike/archive/2010/04/05/111701.html</guid><wfw:comment>http://www.shnenglu.com/sunshinealike/comments/111701.html</wfw:comment><comments>http://www.shnenglu.com/sunshinealike/archive/2010/04/05/111701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunshinealike/comments/commentRss/111701.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunshinealike/services/trackbacks/111701.html</trackback:ping><description><![CDATA[Dare比赛的事情暂时告下一D落Q虽然当时热情挺高,但是事过一半才发现原来其它人ƈ不是都这么想的。自从上了大学之后越发的感觉到再也很难跟别h惛_一块去了,单纯的年代已l远d。近来听说一个发都要结婚了Q啧啧,我这八字q没一撇呢。。?br /><br />以前一直觉得父母跟自己和不来,但是现在H然发现Q是自己太固执了。以前总觉得他们的处事方式不顺|现在自己l历q一些事情之后,才知道原来前Z留下的经验不可能都是吃饱了撑的没事干拍拍脑门凭空惛_来的Q今后还需多向他们hZh处事的经验?br /><br />再就是近来感觉常忘事Q本来自制力׃够。一疏忽浪费不时_以致于先前相好的计划常常完成不了。不应该啊不应该Q以后应该多写计划,写下来!把Q务分cd、管理好自己的时间。离毕业不远了,把握当下Q!<br /><img src ="http://www.shnenglu.com/sunshinealike/aggbug/111701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunshinealike/" target="_blank">Sunshine Alike</a> 2010-04-05 21:27 <a href="http://www.shnenglu.com/sunshinealike/archive/2010/04/05/111701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Command和ActiveObjcet模式http://www.shnenglu.com/sunshinealike/archive/2010/04/02/111453.htmlSunshine AlikeSunshine AlikeFri, 02 Apr 2010 09:04:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/04/02/111453.htmlhttp://www.shnenglu.com/sunshinealike/comments/111453.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/04/02/111453.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/111453.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/111453.htmlCommand模式Q一个传说中非常单的模式Q但是其应用q真不简单?br />通过接口某些方法封装v来以辑ֈ解除pȝ逻辑互联关系的耦合的效果,q且实现了Command接口的类对象可以在系l中自由的重新组合,参数传递也非常方便Qؓpȝ带来灉|性的提升?br />其应用范围包括数据库的事务操作、设备控制、多U程核心以及GUI的do/undo操作?br />
ActiveObject模式是用Command模式的应用之一Q这是实?strong>多线E控?/strong>的一U技术?br />
下面是一个简单的实例Q?br />1. 一个Command接口Q定义了ExecuteҎ?br />2. 两个cSleepingCommand和PrinterCommand实现了Command中的ExecuteҎ?br />   在PrinterCommand中调用Execute时打C个字Wƈ创徏一个新的PrinterCommand在指定的延时后执行?br />   SleepingCommand表示一个睡眠中的CommandQ他在执行时只是单的自己放到链表末到等待的事gQ设定的延时到来Q发生它才会自己唤醒等待下一步执行?br />3. 一个StopCommandc,实现了用于终止Command铑@环的ExecuteҎ?br />4. 一个ActiveObjectManager对象Q维护了一个Command对象链表Q用户可以像Manager中AddCommand对象或者便利链表ƈ依次调用Command对象的ExecuteҎ执行d?/p>

Sunshine Alike 2010-04-02 17:04 发表评论
]]>
PythonQPythonQ!http://www.shnenglu.com/sunshinealike/archive/2010/03/30/111060.htmlSunshine AlikeSunshine AlikeTue, 30 Mar 2010 14:34:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/03/30/111060.htmlhttp://www.shnenglu.com/sunshinealike/comments/111060.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/03/30/111060.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/111060.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/111060.html
下面贴一点学习的W记Q?br />
一、基本知?/font>
Python同时x脚本解释器,又是一个可以运行命令行的shell。在shell里可以计Q务Python表达式,甚至包括变量赋|q些变量在shell打开时一直有效,关闭时丢失数据?br />
函数声明Q以def开始,函数名,参数Q冒号后面跟函数体。需要注意的是Python里的格式都以~进的Ş式来表达Q没有类C/C++中的大括受另外函? 不需要指定返回值类型,实际上,如果函数有return语句Q它返回指定类型|否则q回NoneQPython的空|?br />
Pythonx动态语aQ它不需要显C数据类型声?/b>Q赋值的同时卛_成变量声明。又是强cd语言Q一个变量一旦获得一个数据类型,它实际上׃直是q个cd的了?br />
Python里的“对象”概念,q里的“对象”不同于以前接触到的OO里的对象QPython里的对象定义更ؓq泛。一个程序块Q一个变量,甚至一个字W串都可以是一个对象。其具体含义q需要根据上下文来判断?br />
三种重要的内|数据类型:DictionaryQListQTupleQ?/b>
Dictionary对应于C++中的map和Java中的hashtableQ也是一个键值对集合?br />List对应于C++中的vector和java中的ArrayListQ一个可以动态自动扩展的数组?br />Tuple是一个不可变的listQ一旦创建就不能以方式改变它Q但是好在Python提供了在Tuple和List之间怺转换的函数?br />需要注意的是List和Tuple是可以存储؜合类型的数组的,q且都可以通过索引取|包括负的索引|其表CZ逆序取|

For语句Q?/b>
Python里的for语句不同于C/C++中的forQ更cM于C#中的foreach循环或者是Java中的for (int i : IntArray)。Python的for语句需要配合一个range函数使用Q它有三个参敎ͼq返回一个Tupe数组用于表示索引Q三个参数是start,stop,stepQ例如rangeQ?Q?Q?Q则q回[0Q?Q?Q?Q?]QrangeQ?Q?Q-1Q则q回[5Q?Q?Q?Q?]?br />
字符串格式化Q?/b>
与C中类?dQ?fQ?s{等Q通过字符串的join函数可以方便的将list的内容合q成字符丌Ӏ?br />
and/orQ?/b>
and和or负责执行布尔逻辑q算Q但是它们不q回布尔D是q回它们实际q行比较的g一。非I的对象被认为是真,I对象则被认为是假?b>andq算会返回第一个假|而orq算q回W一个真|其它部分都不会被计算?/b>?br />
lambda函数Q?/b>
一U快速定义的单行最函敎ͼ只有一行,cM于内联的感觉。例如一个例子:
ld = lambda i : i*i
ld(10) # == 100
理论上lambda函数可以有多个参敎ͼ包括可选参敎ͼq且隐含的返回单个表辑ּ的倹{?br />

两种导入QimportQ方法:

Python中有两种导入模块的方法: import xx / from xx import yy

它们的差别在于,from xx import yyq种方式Qyy被直接导入到了局部命名空间中Q?b>cM于C++中的using
Q,在以后用yy的时候不再需要(不能Q加上模块名U限定。也是_如果使用import方式导入模块Q在使用 它里面的一个变量的时候,你不得不每次都加上前~xx.来表CZ用的是位于xx模块中的变量Q而用from导入Ӟ则不需要加入前~?br />
异常处理Q?/b>
Python中?b>try...except
来处理异常,使用raise来引发异常。ƈ且,一个except后面可以跟一个else块来表示没有捕获预期异常时的行ؓ。一个try块后面也可以跟一?b>finally
块来保证一些代码L被执行到Q比如打开文g后的关闭操作?br />
注释Q?br />Python里?b>#
来作为单选注释开始符Q用三个冒号作为多行注?""content"""Q?br />需要注意的是后一UŞ式的注意l常被用来作为函数或者类?说明",写在q里的内容可以被其用者当作参考手册来使用QPtyhon里所有对象都h一个内|的__doc__属?/b>Q通过它可以查看各个对象的说明Q应该养成写__doc__的习惯。一般其格式?b>首行以大写字母开始,句号l尾。第二行是空行,从第三行开始是详细的描q?/b>?br />
引号Q?br />Python里有单引P双引号和三引受其?b>单引号和双引号都可以用来表示字符?/b>Q例?br />print 'string' == "string" 会打印出True
讄q两U字W串引号的目的是Z化引L表示Q例如如果字W串里含有引hw就需?b>使用\来进行标?/b>Q例如:'let\'s go!'Q“he said:\"get out!\"”?br />如果字符串里含有大量q种情况会显得非帔R烦,可以交替使用单引号和双引h避免q种情况。上面的例子可以改ؓQ?let's go!"Q?he said:"get out!"'?br />而三引号是用来表示一个多行字W串。它们经常被用来定义文档字符?/b>Q它的首行以大写字母开始,句号l尾。第二行是空行,从第三行开始是详细的描q。徏议从一开始就遵守q个惯例?br />

二、面向对?/font>

cȝ定义Q?/b>
以class开_pass表示l束Q实际上没有特定的uQ,例如一个简单的cd义ؓ
class Person:
    pass
如果要表C承关pd需要将基类用括号回到类名后面即可,Python支持多重l箋Q每个基cM间以逗号隔开?br />class StudentQPersonQ:
  pass
q里的pass语句仅表C占位之用,没有特别的含义?br />
cL员定义:
__init__ҎQ这个函数的功能很类gJava或者C++中的构造函敎ͼ但是仍存在一点细的差别Q__init__函数的第一个参C定是selfQ类gC++中的this指针?br />__init__Ҏ的定义ƈ不是必须?/b>Q但是一旦你定义了它Q就必须昄?/b>调用父类的__init__Ҏ?br />需要注意的是,所有的cL员方法都必须定义一?b>参数QselfQ?/b>Q?b>但它的名字不是一定的Q其作用cM于C++中的this指针?br />__del__ҎQ类g析构函数Q在使用del语句的时候被调用?br />
重蝲Q?/b>
Python的类没有M形式的函数重?/b>Q即一个方法名U只能对应一个方法,如果子类中定义的与基cM同名的方法,则会其覆盖掉?br />
成员属性:
Python中有两种cd的成员方法:普通类Ҏ和专用类Ҏ?br />成员也有两种讉KU别Q?b>公开的和U有?/b>?br />其中公开和私有成员的表示没有特别的关键字Q只是体现的Ҏ名称上,U有成员的名UC两个短小的下划线作ؓ开始例如:
class A:
  __privatevalue
  publicvalue
  def __set(self, v):
    __privatevalue = v
  def get(self):
    return publicvalue
  pass
q且Q一个成员是属于cȝq是属于对象的,是通过定义q个变量的域来确定的Q定义在cM内的变量由所有成员共享,通过self定义的变量则为成员变量?br />此外Q类的成员方法还分ؓQ?b>普通类Ҏ和专用类Ҏ
。普通方法的定义与普通函数定义类|它是公开的,在类外部可以被调用。而类?b>专用Ҏ
Q没有特D的关键字来表示Q只是在Ҏ的名U前后各加上两个短的下划U,例如def __getitem__。这U专用方法是qh式调用的Q它有点操作W重?/b>的意思在里面Q但是功能比操作W重载要强大一些。Python允许我们自己定义需要的cM用方法,例如M定义了__cmp__Ҏ的类可以用Q=q行比较QQ何定义了__len__Ҏ的类可以用len(instance)q行取长度?br />
三、标准库
1.文g操作
Python中有一个内|函数open可以用来打开文g
file = open("pictures/dog.bmp","rb")
open函数可以接受三个参数Q?b>文g名,模式和缓冲区参数
Q但是只有每一个参数是必须的,文g会默认以文本方式打开?br />文g的读取和C中类|tell()q回当前文g位置Qseek来移动文件操作的位置。具体的函数使用Ҏ可以使用print seek.__doc__来查?br />
处理I/O错误Q?br />try:
  file = open(filename, "rb", 0)
  try:
    file.seek(-128,2)
    data = file.read(128)
    file.seek(0,2)
    file.write("succeeded")
    finally:
      file.close()
  expect IOError:
    pass

Python提供了一个os.path模块来进行目录操作,具体使用Ҏ׃详细写出来了Q用q几ơ就C了?br />
2.序列?/font>
标准库里有两个模块都提供q个功能Q?b>pickle?b>cPickleQ用于将对象存储到文件中而后再读取出来?br />但是后者是使用C语言写的Q速度要比前面的快很多Q但是功能都是一L?br />使用也很便主要就是用dump和load函数

Q-Q-Q-Q-Q-Q-Q-Q-Q-待箋Q-Q-Q-Q-Q-Q-Q-Q-




Sunshine Alike 2010-03-30 22:34 发表评论
]]>
Life is Hard!http://www.shnenglu.com/sunshinealike/archive/2010/03/21/110205.htmlSunshine AlikeSunshine AlikeSun, 21 Mar 2010 07:17:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/03/21/110205.htmlhttp://www.shnenglu.com/sunshinealike/comments/110205.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/03/21/110205.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/110205.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/110205.html一个好的团队真是太重要了,而在学校里,q个太不靠谱了?br />L人来混事QL人来闹矛盾,L人有q样那样的想法,LZ理解你,完全无奈了?br />
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br />做游戏真是辛苦,需要学的东西太多了Q找不到方向
现在真是有点理解那句话:“当你把一个兴,变成了职业之后,悲剧开始了Q?br />Z当年心里的兴,转了方向来搞游戏Q我想现在是遇到瓉了,动力不。。。?br />


Sunshine Alike 2010-03-21 15:17 发表评论
]]>
Linux Notehttp://www.shnenglu.com/sunshinealike/archive/2010/03/14/109696.htmlSunshine AlikeSunshine AlikeSun, 14 Mar 2010 13:06:00 GMThttp://www.shnenglu.com/sunshinealike/archive/2010/03/14/109696.htmlhttp://www.shnenglu.com/sunshinealike/comments/109696.htmlhttp://www.shnenglu.com/sunshinealike/archive/2010/03/14/109696.html#Feedback0http://www.shnenglu.com/sunshinealike/comments/commentRss/109696.htmlhttp://www.shnenglu.com/sunshinealike/services/trackbacks/109696.html
1.g++~译问题
//main.cpp
#include <iostream>
using namespace std;

//headers
void show();

int main()
{

    cout
<<"library test function show(): ";
    show();
    
return 0;
}

//libtest.cpp
#include <iostream>
using namespace std;

void show()
{
    cout
<<"hello library test!"<<endl;
}

静态库Q?br />首先~译libtest.cpp生成中间文g libtest.o
g++ -c libtest.cpp
然后其打包成静态库 staticlib.a
ar -rc staticlib.a libtest.o
最后用静态库与main.cppq行~译得到执行文gstaticlib
g++ -o staticlib main.cpp staticlib.a
q行./staticlib 成功Q!

动态库Q?br />首先同样需要编译生成中间文?b>libteset.oQ但一般加?fPIC选项?br />其意思是位置独立代码 Q指C编译程序生成的代码要适合׃n库的内容q样的代码能够根据蝲入内存的位置计算内部地址
g++ -c -fPIC libtest.cpp
然后打包 生成动态库dynamiclib.so
g++ -shared libtest.o -o dynamiclib.so
最后生成可执行文gdynamiclib
g++ -o dynamic main.cpp dynamiclib.so
q行./dynamiclib l果出错了,提示找不到动态库?/b>
原因是linux下动态库不像windows里那样会自动L当前目录下的dllQ这需要把~译出来的动态库攑ֈpȝ?/usr/lib ?/lib下才能运行程序?br />或者还可以在编译的时候就指定路径也可以,例如在最后一步的时候:
g++ -o dynamic main.cpp ./dynamiclib.so
再次q行./dynamiclib 成功Q!


Sunshine Alike 2010-03-14 21:06 发表评论
]]>
ھƷþþþþþ| ݺɫþۺͼƬ| ˾þ777777| 99þþƷѾƷһ| &#228;v뾫Ʒþþ| ۺϾþĻӰ| ޾Ʒþþwww| ޾Ʒרþþ| ƷŮٸavѾþ| ƷŷþþþӰ| þþþþþ| vĻþ| þݺҹҹ2O2O| þrоƷƵ| ޹˾þһþ| þ޾ƷĻ| Ʒþþþþ99| þþƷav鶹С˵| Ժձһձþ| þþƷһۺ| Ʒþۺ| þþƷĻ| ۺһ˾þþƷ| þô㽶| ˾þô߽ۺͼƬ| ƷþþĻ| ޾þþþþ77777 ޾Ʒþþþϼ | 18պҹþó| ƷþþӰ| ƷþþĻһ| ޾ҹþþþþ| þþоƷ| ˾þһ| þ޹Ʒ| AAAþþþƷ| ŷһƷþ| ˾þۺ| һƷþð͹| Ʒһþ㽶߿| 97þþþ| һþ㽶߿ۿ|