1. 代码只占生意的5%
2. 界面很重要,特别是和竞争对手相比
3. 考虑长远
4. 承认你对用户需求的不了解,并改正它
5. 爱你的用户
6. 设计要简洁,再高级的用户也喜欢简洁
7. 向其他领域的人讲述你的想法
8. 勇于删除没用的功能
9. 耐心是一种美德
10. 始终像学习编程一样对待创业
posted @
2012-06-02 12:12 张志松 阅读(247) |
评论 (0) |
编辑 收藏
NTDLL.DLL中有一个函数叫NtQueryInformationProcess,用它可以将指定类型的进程信息拷贝到某个缓冲。
其原型如下:NTSYSAPINTSTATUSNTAPINtQueryInformationProcess (IN HANDLE ProcessHandle, // 进程句柄IN PROCESSINFOCLASS InformationClass, // 信息类型OUT PVOID ProcessInformation, // 缓冲指针IN ULONG ProcessInformationLength, // 以字节为单位的缓冲大小OUT PULONG ReturnLength OPTIONAL // 写入缓冲的字节数); 第一个参数是希望操作的进程句柄,这个句柄必须以PROCESS_QUERY_INFORMATION模式存取。为了取得一个句柄,我们必须用OpenProcess函数:HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID); 第二个参数是请求信息的类型,这个参数可以有许多个值,本文例子中将用ProcessBasicInformation (值为0)。 因此,如果第二个参数是ProcessBasicInformation的话,则第三个参数必须为一个指针指向结构PROCESS_BASIC_INFORMATION:typedef struct{ DWORD ExitStatus; // 接收进程终止状态 DWORD PebBaseAddress; // 接收进程环境块地址 DWORD AffinityMask; // 接收进程关联掩码 DWORD BasePriority; // 接收进程的优先级类 ULONG UniqueProcessId; // 接收进程ID ULONG InheritedFromUniqueProcessId; //接收父进程ID} PROCESS_BASIC_INFORMATION; 这个结构的最后一个参数是InheritedFromUniqueProcessId,它就是我们所要的东西。DWORD dwParentPID;LONG status;PROCESS_BASIC_INFORMATION pbi;status = NtQueryInformationProcess( hProcess,ProcessBasicInformation,(PVOID)&pbi,sizeof(PROCESS_BASIC_INFORMATION),NULL );if (!status)dwParentPID = pbi.InheritedFromUniqueProcessId;
posted @
2012-02-16 17:30 张志松 阅读(1528) |
评论 (0) |
编辑 收藏
实例(Instancing)属性决定自己的类对于使用ActiveX组件的应用程序来说是否可见。若可见,则在任何时候可运行不止一个的实例。 实例属性有很多选项,我们来看一下: MultiUse —— 这可能是最常用的选项。它只提供给其他应用程序一个组件的实例,这个实例可以提供多个对象。这样就节约了内存空间并允许用户共享全局变量。 Private —— 除该组件内的对象,类对于其他对象是不可见的。它通常用于类单独被类中的其他对象所访问。 GlobalMultiUse —— 这个类的各种属性和方法可以象简单的全局函数那样被调用。另外,在VB中该类的实例不需要显式创建,因为它会自动创建。各种属性和方法都可从单独的一个组件实例中调用。 PublicNotCreatable —— 它表示只有在创建实例的前提下,该类才是可见的。换句话说,用户不能用New关键词创建一个类对象。用户的类对象必须选被创建,然后才可使用。这有点像 DAO的记录集,用户不能创建一个新的记录集,而只能用OpenRecordset方法简单地打开它。 SingleUse —— 它表示每次在代码中开始的一个组件的新的实例,只能运行另一个ActiveX组件的实例。换句话说,每个实例都获得自己的"进程空间"。虽然还有一些限制,没有什么奇怪的,它和MultiUse是相对的。 GlobalSingleUse —— 类似于GlobalMultiUse,除了代码中创建的对象运行一个组件的新实例。上述选项,我们很少全部都使用过。毫无疑问,MultiUse是最常见的,其次是Private和GlobalMultiUse,其他的一般很少使用。当然,我们不禁要问,在创建ActiveX DLLs时,我们能得到多少这样的选项呢?答案是明确,因为它们的工作方式是相同的。
posted @
2012-02-12 16:48 张志松 阅读(1053) |
评论 (0) |
编辑 收藏
1.需要引用 Microsoft Internet Controls。
2.工程配置中,“删除有关未使用的 ActiveX 控件的信息” 不能勾选。
3.具体代码如下
Option Explicit
Private WithEvents MyWebBrowser As WebBrowser
Private Sub Command1_Click() '创建
Set MyWebBrowser = Me.Controls.Add("SHELL.EXPLORER.2", "MyWebBrowser", Me)
MyWebBrowser.Visible = True
MyWebBrowser.Move 0, 0, 8000, 3000
MyWebBrowser.Navigate "http://www.cppblog.com/zezese"
End Sub
Private Sub Command2_Click() '移除
Me.Controls.Remove "MyWebBrowser"
End Sub
posted @
2012-02-07 14:19 张志松 阅读(485) |
评论 (0) |
编辑 收藏
C语言
函数名:randomize
功 能:初始化随机数发生器
用 法:void randomize(void);
程序例:
#include <stdlib.h>
int main(void)
{
int i;
randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
注:可以在TC2.0中运行通过,在VC6.0不能运行。
VC中的用法
VC中使用srand()来初始化为随机数生成器。代码实例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
main()
{
int i;
srand(time(0)); /*设置种子,并生成伪随机序列*/
for(i=0;i<N;++i)
printf("%d\n",rand()%100);/*得到[0,99]伪随机数*/
system("pause");
}
VB 中的用法
Randomize 语句示例
本示例用 Randomize 语句初始化随机数生成器。由于忽略了数值参数, 所以 Randomize 用 Timer 函数的返回值作为新的随机数种子值。
Dim MyValue
Randomize ' 对随机数生成器做初始化的动作。
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 7 之间(不包括7)的随机整数。
Delphi 中的用法
以下事例将随机产生0到100的数字,如果不使用Randomize函数,得到的结果将有规律性。
procedure TForm1.btn1Click(Sender: TObject);
begin
randomize;
ShowMessage(IntToStr(Random(100)));
end;
posted @
2012-02-07 11:08 张志松 阅读(454) |
评论 (0) |
编辑 收藏
时间管理的七点体会
文/王寒
关于时间管理,不想拾人牙慧Copy Paste一大堆,只想谈一些个人的实际体会。
明确什么是自己“To Be”的目标
很认同永锡的一句话:时间管理的目的是让自己成为一个“幸福行动家”,是从“To Do”到“To Be”的一个必经过程。
很多时间管理理论都提到过,要把事情按重要紧急的程度来分类,但很少有人清楚该如何确定分类。有了“To Be”的定位,再根据自己的实际情况来制订中短期目标,就很容易知道该如何给具体的事情分类。
时间碎片化管理
对于现代人来说,时间被无穷无尽的杂事分割成了无数个小的碎片。 大多数人都处在“To Do”状态,因此需要主动把自己的工作时间分割成小的时间碎片。我曾尝试使用一个小时作为时间碎片单位,后来发现在办公室工作时基本不太可能。后来调整为每半小时一个时间碎片,每个时间碎片要完成某一件工作,或实现某个阶段性的成果。当然,在分割时间碎片时,要考虑自己的工作性质、工作环境、上司和团队成员的做事风格等因素。
此外,时间碎片的长度并非固定不变,要根据实际情况灵活调整。但一旦设定了当前的时间碎片,从开始的那一刻就要全力以赴。
最后,时间碎片可以和场景结合,比如有些事情要出去办,那么最好可以一次出去全部搞定,即便不能全部搞定,也应该取得预定的阶段性成果。
总之,管理时间碎片的原则是:宁愿主动分割,不要被迫分割。
排除工作中的干扰
最难管理的、同时也最不受自己控制的是工作时间中的打扰。
我的做法是:在办公室工作时间,不使用一切即时通信工具,每小时定期看一次是否有电话、短信、QQ。具体来说,首先把手机调成静音,然后是QQ、MSN这类的即时聊天工具,始终设置成隐身或离线状态。尽量使用邮件、微博这种离散通信工具。
排除工作中的干扰,还可以借助头戴式耳机,让自己在音乐中进入沉浸状态。
当然,如果有可能,应该和Boss以及团队成员就时间安排的问题多沟通,争取他们的理解和支持,尽量给自己提供独立完整的时间段,避免随时随地受到干扰。
了解自己的精力曲线
每个人都有自己的精力曲线,需要知道自己什么时间工作效率最高,从而把最难的事情分配到这个时间段的碎片中,而在自己昏昏欲睡、精力不济时可以做点最简单的事情。
随身带上纸和笔
我曾用过很长时间的Things,还试过OmniFocus和其他几款时间管理软件,但现在只保留Things作为备忘录来使用。
目前使用最频繁的时间管理工具,还是纸和笔。我习惯用永锡的方法,在纸上画上两条线组成四个象限,分别代表重要且紧急、重要不紧急、不重要但紧急、不重要也不紧急。
不要花时间find my stuff
其实这个是我的弱项,写上来是要提醒大家,我们每天花在找各种小东西上的时间太多了。比如要吃饭时找钱包、要打电话时找手机、要写东西时找纸和笔。让一切井然有序可以大大节省这方面浪费的时间。
定期总结“To Do”和“To Be”
根据自己“To Be”的目标,定期来总结一下时间管理和自我的进步,无需沮丧,无需自傲,只要每次总结都有点小进步就OK了。
总之,时间管理的目标就是,从当前的“To Do”出发,最终达到“To Be”的状态。让自己来主动管理时间,而不是被时间管理
http://www.programmer.com.cn/9330/
posted @
2012-01-06 13:39 张志松 阅读(280) |
评论 (0) |
编辑 收藏
一点是,伟大的产品经理知道什么是他们所不知道的。他们不认为自己知道所有的事情,不知道的事情还是占大多数。他们坚信必须聚集一起才能确定哪些是能做的、哪些是不能做的,所有这些决定都是基于坚实的证据而不是凭空的想法。另一点是,伟大的产品经理知道他们不必是所有想法的源头,这些想法可以来自于世界上的任何地方、公司的所有员工。有时候,客户可能成为关键所在,因为他们知道你所不知道的一些事情。
posted @
2012-01-06 09:49 张志松 阅读(223) |
评论 (0) |
编辑 收藏
配置文件路径
C:\Documents and Settings\Administrator\Application Data\SogouExplorer\Config.xml
multicorestrategy="0" 智能模式
multicorestrategy="1" 高速模式
multicorestrategy="2" 兼容模式
posted @
2012-01-01 10:58 张志松 阅读(726) |
评论 (0) |
编辑 收藏