微软今天宣布了 Windows Live Essentials Wave 4 的 Beta Refresh 版,也就是上次预告的 Beta 2。感谢 Damaster,新版 Essentials 安装包已经可以在下面的地址下载。

Windows Live Essentials Wave 4 Beta 2 更新包括:新增 Facebook Chat 的支持、Windows Live 照片库、Writer 和影音制作的一些改进和增强。我会在新文章中介绍,先下载安装吧。

对了,完整安装包共 151 MB,版本号 15.4.3001.0809:

 

[转载至]http://livesino.net/archives/2876.live

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

//
// Thread pool wait callback function template
//
VOID
    CALLBACK
    MyWaitCallback(
    PTP_CALLBACK_INSTANCE Instance,
    PVOID                 Parameter,
    PTP_WAIT              Wait,
    TP_WAIT_RESULT        WaitResult
    )
{
    //
    // Do something when the wait is over.
    //
    _tprintf(_T("MyWaitCallback: wait is over.\n"));
}


//
// Thread pool timer callback function template
//
VOID
    CALLBACK
    MyTimerCallback(
    PTP_CALLBACK_INSTANCE Instance,
    PVOID                 Parameter,
    PTP_TIMER             Timer
    )
{
    //
    // Do something when the timer fires.
    //
    _tprintf(_T("MyTimerCallback: timer has fired.\n"));

}


//
// This is the thread pool work callback function.
// The callback demonstrates correct behavior when changing the
// state of the thread inside the callback function.
//
// Any changes to the thread state must be restored to original
// before exiting the callback routine.
//
VOID
    CALLBACK
    MyWorkCallback(
    PTP_CALLBACK_INSTANCE Instance,
    PVOID                 Parameter,
    PTP_WORK              Work
    )
{
    BOOL bRet = FALSE;
    DWORD dwPriorityOriginal = 0;

    //
    // Record the original thread priority.
    //
    dwPriorityOriginal = GetThreadPriority(GetCurrentThread());

    if (THREAD_PRIORITY_ERROR_RETURN == dwPriorityOriginal) {
        _tprintf(_T("GetThreadPriority failed.  LastError: %u\n"),
            GetLastError());
        return;
    }

    //
    // Increase the priority of the thread pool thread.
    //
    bRet = SetThreadPriority(GetCurrentThread(),
        THREAD_PRIORITY_ABOVE_NORMAL);

    if (FALSE == bRet) {
        _tprintf(_T("SetThreadPriority failed.  LastError: %u\n"),
            GetLastError());
        return;
    }

    _tprintf(_T("MyWorkCallback: thread priority increased.\n"));


    //
    // Perform tasks at increased priority.
    //
    {
        _tprintf(_T("MyWorkCallback: task performed at increased priority.\n"));

    }

    //
    // Restore thread state by resetting the original priority.
    //
    bRet = SetThreadPriority(GetCurrentThread(),
        dwPriorityOriginal);

    //
    // If restore fails, maybe retry or throw an exception.  Otherwise,
    // the thread will continue to execute other work items at increased
    // priority.
    //
    if (FALSE == bRet) {
        _tprintf(_T("Fatal Error! SetThreadPriority failed. LastError: %u\n"),
            GetLastError());
        return;
    }

    _tprintf(_T("MyWorkCallback: thread priority restored.\n"));

    return;
}

VOID
    DemoCleanupPersistentWorkTimer()
{
    BOOL bRet = FALSE;
    PTP_WORK work = NULL;
    PTP_TIMER timer = NULL;
    PTP_POOL pool = NULL;
    PTP_WORK_CALLBACK workcallback = MyWorkCallback;
    PTP_TIMER_CALLBACK timercallback = MyTimerCallback;
    TP_CALLBACK_ENVIRON CallBackEnviron;
    PTP_CLEANUP_GROUP cleanupgroup = NULL;
    FILETIME FileDueTime;
    ULARGE_INTEGER ulDueTime;
    UINT rollback = 0;

    InitializeThreadpoolEnvironment(&CallBackEnviron);

    //
    // Create a custom, dedicated thread pool.
    //
    pool = CreateThreadpool(NULL);

    if (NULL == pool) {
        _tprintf(_T("CreateThreadpool failed. LastError: %u\n"),
            GetLastError());
        goto main_cleanup;
    }

    rollback = 1; // pool creation succeeded

    //
    // The thread pool is made persistent simply by setting
    // both the minimum and maximum threads to 1.
    //
    SetThreadpoolThreadMaximum(pool, 1);

    bRet = SetThreadpoolThreadMinimum(pool, 1);

    if (FALSE == bRet) {
        _tprintf(_T("SetThreadpoolThreadMinimum failed. LastError: %u\n"),
            GetLastError());
        goto main_cleanup;
    }

    //
    // Create a cleanup group for this thread pool.
    //
    cleanupgroup = CreateThreadpoolCleanupGroup();

    if (NULL == cleanupgroup) {
        _tprintf(_T("CreateThreadpoolCleanupGroup failed. LastError: %u\n"),
            GetLastError());
        goto main_cleanup;
    }

    rollback = 2;  // Cleanup group creation succeeded

    //
    // Associate the callback environment with our thread pool.
    //
    SetThreadpoolCallbackPool(&CallBackEnviron, pool);

    //
    // Associate the cleanup group with our thread pool.
    // Objects created with the same callback environment
    // as the cleanup group become members of the cleanup group.
    //
    SetThreadpoolCallbackCleanupGroup(&CallBackEnviron,
        cleanupgroup,
        NULL);

    //
    // Create work with the callback environment.
    //
    work = CreateThreadpoolWork(workcallback,
        NULL,
        &CallBackEnviron);

    if (NULL == work) {
        _tprintf(_T("CreateThreadpoolWork failed. LastError: %u\n"),
            GetLastError());
        goto main_cleanup;
    }

    rollback = 3;  // Creation of work succeeded

    //
    // Submit the work to the pool. Because this was a pre-allocated
    // work item (using CreateThreadpoolWork), it is guaranteed to execute.
    //
    SubmitThreadpoolWork(work);


    //
    // Create a timer with the same callback environment.
    //
    timer = CreateThreadpoolTimer(timercallback,
        NULL,
        &CallBackEnviron);


    if (NULL == timer) {
        _tprintf(_T("CreateThreadpoolTimer failed. LastError: %u\n"),
            GetLastError());
        goto main_cleanup;
    }

    rollback = 4;  // Timer creation succeeded

    //
    // Set the timer to fire in one second.
    //
    ulDueTime.QuadPart = (LONGLONG) -(1 * 10 * 1000 * 1000);
    FileDueTime.dwHighDateTime = ulDueTime.HighPart;
    FileDueTime.dwLowDateTime  = ulDueTime.LowPart;

    SetThreadpoolTimer(timer,
        &FileDueTime,
        0,
        0);

    //
    // Delay for the timer to be fired
    //
    Sleep(1500);

    //
    // Wait for all callbacks to finish.
    // CloseThreadpoolCleanupGroupMembers also releases objects
    // that are members of the cleanup group, so it is not necessary
    // to call close functions on individual objects
    // after calling CloseThreadpoolCleanupGroupMembers.
    //
    CloseThreadpoolCleanupGroupMembers(cleanupgroup,
        FALSE,
        NULL);

    //
    // Already cleaned up the work item with the
    // CloseThreadpoolCleanupGroupMembers, so set rollback to 2.
    //
    rollback = 2;
    goto main_cleanup;

main_cleanup:
    //
    // Clean up any individual pieces manually
    // Notice the fall-through structure of the switch.
    // Clean up in reverse order.
    //

    switch (rollback) {
    case 4:
    case 3:
        // Clean up the cleanup group members.
        CloseThreadpoolCleanupGroupMembers(cleanupgroup,
            FALSE, NULL);
    case 2:
        // Clean up the cleanup group.
        CloseThreadpoolCleanupGroup(cleanupgroup);

    case 1:
        // Clean up the pool.
        CloseThreadpool(pool);

    default:
        break;
    }

    return;
}

VOID
    DemoNewRegisterWait()
{
    PTP_WAIT Wait = NULL;
    PTP_WAIT_CALLBACK waitcallback = MyWaitCallback;
    HANDLE hEvent = NULL;
    UINT i = 0;
    UINT rollback = 0;

    //
    // Create an auto-reset event.
    //
    hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

    if (NULL == hEvent) {
        // Error Handling
        return;
    }

    rollback = 1; // CreateEvent succeeded

    Wait = CreateThreadpoolWait(waitcallback,
        NULL,
        NULL);

    if(NULL == Wait) {
        _tprintf(_T("CreateThreadpoolWait failed. LastError: %u\n"),
            GetLastError());
        goto new_wait_cleanup;
    }

    rollback = 2; // CreateThreadpoolWait succeeded

    //
    // Need to re-register the event with the wait object
    // each time before signaling the event to trigger the wait callback.
    //
    for (i = 0; i < 5; i ++) {
        SetThreadpoolWait(Wait,
            hEvent,
            NULL);

        SetEvent(hEvent);

        //
        // Delay for the waiter thread to act if necessary.
        //
        Sleep(500);

        //
        // Block here until the callback function is done executing.
        //

        WaitForThreadpoolWaitCallbacks(Wait, FALSE);
    }

new_wait_cleanup:
    switch (rollback) {
    case 2:
        // Unregister the wait by setting the event to NULL.
        SetThreadpoolWait(Wait, NULL, NULL);

        // Close the wait.
        CloseThreadpoolWait(Wait);

    case 1:
        // Close the event.
        CloseHandle(hEvent);

    default:
        break;
    }
    return;
}

int _tmain(int argc, _TCHAR* argv[])
{
    DemoNewRegisterWait();
    DemoCleanupPersistentWorkTimer();
    return 0;
}

最后觉得项目中的控制台不大好用,就添加了一些小功能,比如清屏;当然最简单的方法是调用系统自带的函数system(“cls”);,这里提供一个方法一样可以清屏(测试要比cls快一些):

 /* Standard error macro for reporting API errors */ 

 #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ 

    on line %d\n", __FILE__, GetLastError(), api, __LINE__);}



 void cls( HANDLE hConsole )

 {

    COORD coordScreen = { 0, 0 };    /* here's where we'll home the

                                        cursor */ 

    BOOL bSuccess;

    DWORD cCharsWritten;

    CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ 

    DWORD dwConSize;                 /* number of character cells in

                                        the current buffer */ 



    /* get the number of character cells in the current buffer */ 



    bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );

    PERR( bSuccess, "GetConsoleScreenBufferInfo" );

    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;



    /* fill the entire screen with blanks */ 



    bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',

       dwConSize, coordScreen, &cCharsWritten );

    PERR( bSuccess, "FillConsoleOutputCharacter" );



    /* get the current text attribute */ 



    bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );

    PERR( bSuccess, "ConsoleScreenBufferInfo" );



    /* now set the buffer's attributes accordingly */ 



    bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,

       dwConSize, coordScreen, &cCharsWritten );

    PERR( bSuccess, "FillConsoleOutputAttribute" );



    /* put the cursor at (0, 0) */ 



    bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );

    PERR( bSuccess, "SetConsoleCursorPosition" );

    return;

 }



下载地址:http://explore.live.com/windows-live-essentials-beta

默认是完全安装版,可以在右边选择可定制版

image

可定制版中文版:http://g.live.com/1rebeta4_webc/zh-cn/wlsetup-webc.exe

Windows Live Essentials Wave 4 Beta 组件包括:照片库、Mail、影音制作、Messenger、Writer、家庭安全设置、Bing 工具栏、Messenger Companion、Sync,以及 Silverlight 和 Office Outlook Connector

 

安装完成

image


安装过程中出现一个问题:

可能是另一个程序使安装程序无法正常运行
错误:0×80070643
源:Contacts

解决方法是打开windows防火墙再安装就可以了。

预编译头文件的最大好处在于如果只改动一小处代码,不用把相关有依赖的代码全部编译一次,这样可以很大的节约编译时间。

对于没有添加预编译头文件的项目,在添加时有个认识误区,就是认识只要在工程里设置使用预编译头文件就可以了,最近在项目里设置发现有问题,比如找不到导出符号,或符号重定义之类错误。

最后才发现原来在项目属性里设置过使用预编译头文件后,还要在stdafx.cpp里设置创建预编译头文件,这样才行(原来的设置可以是因为这个设置还在)。另外如果有的cpp需要预编译头文件要单独设置“不使用预编译头文件”。

看来用了多年VS还有不知道的地方,还要继续努力。

这个原因是因为原来的QQ安装不正确或MSI文件丢失,解决方法很简单XP可以使用WCL就可以了;

在Windows 7下先打开安装文件,如果出错也不点,打开
C:\Users\用户名\AppData\Roaming\Tencent\QQ\STemp\,会看到有个~TXQQ2052~0之类的文件夹,在这有个QQ2010.msi,直接在“添加删除”里支持QQ的删除程序指向这个文件,等完成后重新安装就可以了。

//

// Usage: SetThreadName (-1, "MainThread");

//

#include <windows.h>

#define MS_VC_EXCEPTION 0x406D1388



#pragma pack(push,8)

typedef struct tagTHREADNAME_INFO

{

   DWORD dwType; // Must be 0x1000.

   LPCSTR szName; // Pointer to name (in user addr space).

   DWORD dwThreadID; // Thread ID (-1=caller thread).

   DWORD dwFlags; // Reserved for future use, must be zero.

} THREADNAME_INFO;

#pragma pack(pop)



void SetThreadName( DWORD dwThreadID, char* threadName)

{

   Sleep(10);

   THREADNAME_INFO info;

   info.dwType = 0x1000;

   info.szName = threadName;

   info.dwThreadID = dwThreadID;

   info.dwFlags = 0;



   __try

   {

      RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info );

   }

   __except(EXCEPTION_EXECUTE_HANDLER)

   {

   }

}





转载至http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx

纵览,国内比较大的软件公司(以下统一简称"国软"),清一色都是做政府项目的(他们能做大的原因我就不用说了吧),真正能做大的国软又有几家呢?更何况开源企业,这是为什么呢?
今天风吹就给大家简单分析下:
1."作坊"式管理
"作坊"往往是效率最高的, 国软几乎都是从作坊走过来的,但把作坊式的管理模式套用到一个不断壮大的公司中显然是不行的.组织架构到达一定程度后就必然要进行分工的细化,依靠作坊式的"暴力开发"是行不通的.
2."法制社会"
上班必须打卡,迟到要扣钱,还一次比一次多,加班没有加班费,反正算下来就是,只有扣钱的项目,没有加钱的项目.比起外企,人家上班不打卡,迟到不扣钱,加班有加班费,这样宽松点的环境不好吗?
3. 自身自灭
国软一般没有师徒制,有的话也只是形式上的,公司基本没人管你,你也不用去管别人,新进的员工,不管会不会,先丢个东西给你做,自己研究,不懂的google去.这也是为什么国软喜欢招有经验的人,因为没经验的人熬不住,跑了几个以后,国软就不招了.
4. 销售-开发-维护脱节
这点是非常严重的,会直接导致项目流产的.国软的典型的做法是,销售为了业绩,在没有调研的情况下就签了合同 (这里主要是指项目型的,产品型的一般可以控制),而且合同的范围也非常模糊,可大可小,接下来就是调研人员上场,调研后发现,10w块钱的合同,调研出来了100w的需求,接下来就是和客户扯皮,最后直接导致项目流产,甚至打上官司.项目或产品上线后,维护人员对系统不了解(一方面是没有文档,另外一方面维护人员一般没有参与到开发中),接下来往往就会发生两种情况:
a.维护人员在不了解系统的情况下擅自修改,结果导致系统越改问题 越多.
b.维护人员一不做二不休,所有客户反馈的问题全部打回给开发人员,于是开发人员就生不如死,在做别的项目的同时还要维护以前的项目,结果就是导致几个项目都失败.
5.缺乏规划
今天要用这个,明天想用那个(笔者就经历了公司在半年的时间内对框架进行了两次大的变动,导致开发人员都必须重新学习框架)产品也接,项目也接,大的也接,小的也接.今天领导说往左走,明天说往右走,也不能怪领导,他也没经验,我们就是他的DEMO.公司没有一个明确的目标,要做成什么样,只是一味的提出做大做强,但是没有规划出如何做大做强.(和我的标题一样哦)
6.三无-无需求,无设计,无测试.
a.没有文档是国软的通病,曾几何时,产品经理丢过来的那一句话:" 喂,**,给我做一个**模块来",然后开发人员就开始埋头苦写了.
b.当然如果你天资聪慧,可以轻易理解出产品经理的意思,那有没有设计都无所谓了,但是,当有一天别人要维护你的程序的时候问题就出现了,没有文档,代码又那么天马行空,怎么维护?改了这个地方,又影响了那个地方...
c.其实程序员都懂得测试的意义,可以工时安排的那么紧,哪来的时间测试?测试又没有算工时.所以几乎所有的程序员的做法就是,直接丢给用户测试
这时候有人肯定要问:那项目经理呢?他不是可以测试吗?请记住这是国软,刚才写代码的那个人就是项目经理,还是售前,还是设计人员,还是维护,还是...归结还是成本问题,在外资软件公司中,做文档的工时是比做开发的工时更多的,国软为了节省成本,这块当然要 CUT掉了.不必去追去文档有多么详细多么美观,需要做的就是找到一个平衡点,一份适合自己的文档.
7.员工都是"十项全能"
在国软里面的员工各个都是十项全能(笔者就是一个鲜明的例子,从系统调研分析设计,到进度管理,开发,测试,验收,实施,维护,甚至拉给客户拉网线都需要我去.)直接导致的结果就是这些员工每过多久就直接出来自己开公司了...嘿嘿又一家作坊诞生了...这样做对员工个人其实是有好处的,但是对于企业本上来说是没有好处的,并不是说员工成立了作坊,成为了你的竞争对手,而是让员工各个都是十项全能的结果就是
a.员工都是"十项全不 能".
b.员工一旦离职,他手头的项目必定流产.
c.对公司的发展是不利的(细化分工).
8.莫不关心
老板并不知道员工在做什么,员工也不知道老板在做什么.上级很少去关心下级的工作,更别说去关心下级的生活,一个东西丢给你,一个月后交差,中间不管你任何事情,交不了差就唯你是问.下级也不知道能为上级分担什么,只有等着上级分配任务.甚至还有些老板都不不知道员工的名字,在这样的国软的,每个人都是孤立的,又怎么能做大做强呢?
9.企业文化
所谓十年树木,百年树人.国软的企业文化表面功夫算是做的很好的了,什么"为客户创造价值","做最好的行业解决方案","软件公司的最大资源就是人才"等等,要多华丽有多华丽,重复体现了"口号文化".真正做到企业文化又有多少呢?有多少仅仅是为了做给客户看的呢?
10.盲目跟风
很多国软看到人家外企软件公司最近在搞什么推进活动,就跟风,效仿外企做,可是无法领悟精髓,纯粹只是在模仿.(外企集体笑:"一直被模仿,从未被超越")做完了也不知道这么做的意义,劳民伤财.
11.缺乏"执行力"
国软的通病,就是"执行力",国软的学习劲头很足,今天提出要完善测试标准,明天提出要每周写工作报告,可是又有哪些东西能真正的去执行呢?
导致这个问题的主要原因有两个:
a.提出来的东西到底有没必要做,还是只是应付领导走个过场.
b.谁来跟踪这些东西?员工写了工作报告,领导没有去查看,去反馈,员 工觉得写的也没意义,自然不会继续执行下去.
12.管理混乱
没有划分清楚员工的归属组织,员工并不明确他的上级领导是谁,导致有的员工处于游离状态,有的是员工又是多个领导,不懂要听谁的,有些人忙的要死,有些人又闲的要命,最后搞的最痛苦的就是员工,导致员工离职.
13.缺乏团队精神
为什么会缺乏团队精神呢?并不是国软没有这方面的概念,国软也很希望培养员工的团队观念 和精神,
无奈因为国软,一般都是一个人负责一个或者多个项目,连团队都没有,何来的团队精神?
14.无法做到补 足
一个项目一旦中途有人辞职,这个项目就会流产.一个员工一旦辞职,会有N个项目没人维护.A组的员工无法胜任B组的工作,归根结底就是组织上根本没有考虑过组织变动对项目的影响,没有提前培养人员.
15.一成不变和随心所欲
有两类人一种是把前辈的东西COPY过来,不作任何修改,因为他深信,前辈的一定是对的,还有一类是不管前人怎么做的,一律不要,全凭自己的"经验",随心所欲,天马行空的进行自主研发,造成的结果就是错的还是错的,乱的更乱了.
16.人才育成
成本,还是成本,培养一个人要多少成 本?这就是国软做不大的原因,永远只能停留在"作坊"的原因.
17.向心力.
老板做的是事业,员工做的是事情, 这是国软员工的一致观点.
18.恶性循环
a.人员力量不足 -> 接不了项目 -> 收入少 -> 人员流失.
b.人员力量不足 -> 强行接项目 -> 亏本 -> 破产.
最后 我想说一句的是:成也国软,败也国软.
说的不对的地方请大家指出,或者补充下没说到的地方.

    卫斯理大学校长迈克尔·罗斯(Michael Roth)近日撰文《超越评判式思维》(Beyond Critical Thinking),警告学生不要变成只会批评,不会思维,却还一个个自鸣得意的废人。“批判性思维”一说缘起于1962年《哈佛教育评论》上罗伯特·恩尼斯(Robert H. Ennis)的一篇文章,此后这个说法就不胫而走,成为教育界多年以来一直追捧的一个话题 。

    恩尼斯当初提出批判性思维,重点是“思维”,只不过如罗斯所述,不少人借“批评”来彰显自己的聪明,倒把“思维”给边缘化了。2002年,恩尼斯重新说明了批判性思维的一些特征,比如“思维开放,熟知多个选项的优劣”、“力求多方查证”、“善于判断信息来源” 、“识别言论的结论、推论和潜在假设”、“能形成合理的立场”、“善于发问,澄清问题本质”等。一言以蔽之,他是要大家养成严谨的思维习惯,不被人随意忽悠、人云亦云。

    时隔半个世纪,恩尼斯老调重弹,再次强调批判性思维应该重“思维”,是而今传播方式的改变使然。 2009年,中国网络在不少公共事件中的正面作用显著,但网络也不是世外桃源,瞎起哄、瞎围观者也不少。中国社会科学院教授于建嵘在分析“泄愤事件”时说,“自从有了互联网,有了手机短信,现时代的中国已经没有了权威信息。”没有权威信息未必是坏事,就怕出现了错误的“权威信息”,一家独大。现在恰恰就是过去来自政府的“权威信息”,被网络“意见领袖”的“权威信息”所取代。网络推手能掀起波澜,制造出种种伪热点,让网民趋之若鹜,把网络变成了是非之地。

    与此同时,追捧网络超级偶像的粉丝则自甘放逐到隧道式思维里,坐井观天,不去看学人的真知灼见,围观几个所谓“网络红人”的吃喝拉撒。北京大学新闻与传播学院教授胡泳曾指出,中国整个社会日益童稚化,他指的是舆论监管。其实还有另一种“童稚化”,那就是在接受信息,选择信息来源的时候,由于缺乏思考而导致的“无脑化”。

    由于负面消息和批评容易引起轰动,在网络这个江湖里,一些本可善用其影响的人,堕落成了为否定而否定的人,比如海外一些不论青红皂白“逢中必反”的人。在否定的时候,他们又提不出什么建设性意见,变得“怨妇化”。

    “怨妇化”的“意见领袖”,外加“无脑化”的粉丝大军,就是目前中国网络上最大的景观。

    笔者在上文提到的于建嵘,他的批评总是有建设性。因为他的真知灼见总是来自调查研究。当下,社会轻易就把“知识分子”头衔加在某人身上,理由是敢说话,却不在乎其话语到底是否有质量。见到几条负面消息,就把专家统统当作“砖家”,教授全部唤作“叫兽”。这样的反智倾向令人忧虑。

    网络影响甚至左右舆论已成了既成事实。 网络能让愚蠢的人更蠢,让聪明的人更聪明,善用之者鉴别黑白,去伪存真,不善用者随波逐流,任人催眠。如罗斯教授强调的那样,在网络言论良莠不齐,牢骚过盛之时,读者或许应该把“批判性思维”的重点,从“批评”移到“思维”上。

昨天安装上10.4感觉还不错,主要看了下那个软件在线商店(名字忘记了),可以安装很多常用的软件,比如Google浏览器,Adobe Reader等。

后来重启时发现我安装的MaxDOS没了,我还想是不是MaxDOS在Win7下安装没使用什么正规方法,后来在我家电脑上试试还是这样。

还是觉得Ubuntu不会犯这种低级错误吧,没想到今天早上起来就看到,他们已经修正了这个BUG。

 

新版Ubuntu是不错,不过只能当玩具看看,开发还是要用Windows 7 & Office 2010 & VS 2010,gcc和OpenOffice只能当小菜。

如何升级?

Visual Studio 2010支持来自VC6、Visual Studio 2002、Visual Studio 2003、Visual Studio 2005和Visual Studio 2008的升级。同Visual Studio的早期版本一样,你可以选择通过IDE的转换向导或者是命令行工具(Devenv/upgrade)来完成升级。

以下是升级过程中的一些建议:

1) 把升级环境与构建环境设置成相同的

升级过程中会尝试加载一些文件,另外还会评估一些值。如果你的项目中所使用的值不是在项目文件中自己定义的,例如在环境变量中定义的值,那就需要在升级之前事先设置好这些环境变量。如果这些环境变量设置不当,则可能会因为无法对值进行评估而出现警告或错误。

2)  在升级之前确保你已经安装了必要的平台

在一台没有可用平台的机器上对项目进行转换,可能会导致转换错误。例如,如果你想在Visual Studio Professional SKU中对安腾平台的一个项目进行转换,由于它不支持安腾平台,你就会看到像下面这样的转换出错信息:

  1. Failed to upgrade 'Debug|<Itanium>'. Please make sure you have the corresponding platform 
  2. installed under '%vctargetspath%\platforms\Itanium'. Cannot load the project due to a corrupt 
  3. project file. The following error has occurred during XML parsing:  
  4. File: D:\Sample\ConsoleApp\ConsoleApp.vcproj  
  5. Line: 28  
  6. Column: 5  
  7. Error Message:  
  8. System error: -2147154677.  
  9. The file 'D:\Sample\ConsoleApp\ConsoleApp.vcproj' has failed to load.

  这是因为转换过程需要那些平台的属性值才能成功进行。你可以通过查看以下目录获悉已安装了哪些平台:%ProgramFiles%\MSBuild\Microsoft.cpp\V4.0\Platforms (或者查看x64平台下的 %ProgramFiles(x86)%\MSBuild\Microsoft.cpp\V4.0\Platforms )。

  3) 如果可能的话,使用本地的多定向支持来对Visual Studio 2008工具集进行构建

  在Visual Studio  2010中,我们新增了本地的多定向支持(Multi-Targeting),通过使用新的基于MSBuild的项目系统,你可以在Visual Studio 2010的IDE中为Visual Studio 2008工具集构建目标。关于这一特性,你可以看看这篇博客。我们建议用户,特别是拥有大型代码库的用户,在升级时先利用这一特性在Visual Studio 2010中构建Visual Studio 2008工具集的程序。这样,当你在升级过程中碰到问题,就可以把那些跟项目系统或构建系统相关的问题与工具的问题区别开来。这将会让你更加平滑地升级到Visual Studio 2010 工具集。

  一旦升级完成,属性表文件(.Visual Studio props)就会被转换成新的格式(.props)。同样,项目文件(.vcproj)也会被转换为新的格式(.vcxproj)。值得注意的是,新的项目文件会与旧的项目文件同时生成。在转换过程中还产生了一种新的文件类型(.filter .vcxproj),该过滤器文件包含用来显示解决方案的资源管理器文件夹信息。该过滤器信息原本是项目文件的一部分,然而这种变化是必要的,因为只要项目文件发生变化,MSBuild就会请求重新构建。通过在一个单独的文件中保存过滤器信息,就可以在避免重新构建整个项目的情况下修改过滤器。

  注意:升级过程不会转换.user文件。因此,你的调试和部署设置在转换后将不会被保留。

  在Visual Studio 2010中,一个新的命令行升级工具 VCUpgrade.exe也被加入了进来。此命令行工具,适合在只有一个项目的情况下进行升级,因为它无法把解决方案文件作为输入,并将其解析成项目文件。VCUpgrade.exe位于 $(Visual Studio InstallDir)\ common7 \ Tools目录下,该工具也将附带在WinSDK的下一个版本中,这样用户就可以在没有Visual Studio IDE的情况下用命令行对WinSDK中的项目文件进行升级。

  升级过程中的警告

  以下是转换过程中,你可能会遇到的一些常见警告:

  1) 链接器输出目录

  在升级时你可能会看到的一个警告是MSB8012:$(TargetPath)和链接器的OutputFile属性的值不匹配:

  1. - MSB8012: $(TargetExt) ('.dll') does not match the Linker's OutputFile 
  2. property value 'C:\foo\Debug\MFCActiveX.ocx' ('.ocx') in project configuration 'Debug|Win32'. 
  3. This may cause your project to build incorrectly. To correct this, please make sure that $(TargetExt) 
  4. property value matches the value specified in %(Link.OutputFile).  
  5. - MSB8012: $(TargetPath) ('C:\foo\Debug\MFCActiveX.dll') does not match the Linker's OutputFile 
  6. property value 'C:\foo\Debug\MFCActiveX.ocx' ('C:\foo\Debug\MFCActiveX.ocx') in project 
  7. configuration 'Debug|Win32'. This may cause your project to build incorrectly. 
  8. To correct this, please make sure that $(TargetPath) property 
  9. value matches the value specified in %(Link.OutputFile).

  Link.OutputFile是在属性页中Linker-> General -> Output File 这一项中定义的值。默认情况下,它的值是$(OutDir)$(TargetName)$(TargetExt),与$(TargetPath)相同。当我们把一个应用程序从之前的版本转换过来时,并没有办法可以很好地解析出Link.OutputFile被$(TargetName)和$(TargetExt)的值,因为不同的用户可能用不同的方法对其进行了赋值。为了解决这一点,我们决定在转换过程中保留Linker.OutputFile中的值。在转换之后,$(TargetName)将默认为$(ProjectName),$(TargetExt)将默认为该类应用程序的默认扩展名:动态库文件为.dll,静态库为.lib,应用程序则为.exe,而Link.OutputFile值则将被保留。如果Link.OutputFile与$(TargetPath)不同,警告MSB8012会被记录在转换日志中。在构建应用程序时你也会看到同样的警告。

  $(OutDir),$(TargetName)和$(TargetExt)在“常规”属性页中分别对应“Output Directory”,“Target Name”,“Target Extension”。你可以手动更改这些属性的值,这样你就不会再看到警告了。

  -如果你的项目生成了导入库(Linker -> Advanced -> Import Library),而且链接器的输出目录不是默认目录,那么你可能还需要更改导入库的输出文件夹。否则,生成的导入库所在的目录就可能会与链接器的输出不同。

  -调试。转换后命令被设为默认的$(TargetPath)。你可能需要做一些改动,这样当按下F5 (Debugging)或 Ctrl + F5 (Start without debugging)之后才能加载正确的可执行程序。

 

 2) 属性表的排序

  如果你的应用程序有属性表,那么在转换过程中你可能会遇到下面的警告中:

  1. - All user macros reported below for configuration 'Debug|Win32' are used before their definition, 
  2. which can cause undesirable build results; this is not supported in this release. 
  3. You can resolve this by changing the inclusion order            
  4. of the consuming property sheets and making sure they come after the property sheets defining the user macros.  
  5.             - MSB4211: C:\foo\PropertySheet\foo.props; 
  6. The property "MyIncludePath" is being set to a value for the first time, 
  7. but it was already consumed at "C:\foo\PropertySheet\bar.props".

  该警告归因于MSBuild对其属性的评估方式:MSBuild按顺序依次评估其属性值。如果在派生的属性表中定义的属性在父属性表中被使用,那么其值就会被设为空。然而,VCBuild采用的是延迟评估方式。这样,即使是在派生属性表中定义的属性也可以在父属性表中使用。若要解决此问题,请按照警告消息改变属性表中的顺序,从而确保属性在定义后才被使用。

  升级后的行为变化

  尽管底层的构建系统已经发生了改变,但我们仍尽力让用户在迁移到Visual Studio 2010后有相同的使用体验。另外,我们还采取了一些措施来改进构建体验或是迎合MSBuild的某些特定要求。因此,一旦你迁移到Visual Studio 2010,就可能就会注意到以下一些变化。

  1) 从“解决方案依赖”到“项目到项目的引用”

  如果在一个旧版本Visual Studio版本下进行编译的C++程序被转换到Visual Studio 2010后,解决方案级定义的项目依赖关系便会被转化成项目到项目的引用(project to project references)。这一变化确保了C + +项目依赖关系能够在项目文件中被捕获。下面就是一个项目到项目的引用在项目文件中的样子:

  1. <ItemGroup>
  2. <ProjectReference Include="..\Cpp\Cpp.vcxproj">
  3. <Project>{c58574bf-9dd8-4cf8-b5b6-6551f2f3eece}</Project>
  4. <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  5. </ProjectReference>
  6. </ItemGroup>


  在项目文件中存放依赖关系有几个优点。首先,用户可以在不用解决方案的情况下构建一个项目,相关的项目会自动被构建。第二,它为那些拥有巨大的代码树又可能不会使用解决方案文件的用户提供了方便。 此外,许多客户都有好几个解决方案文件,每个文件都包含项目的不同子集。通过这种方式就可以让用户避免为每个解决方案设置依赖关系。另一个重要因素就是,使用项目到项目的引用使得构建过程更加可靠,尤其是在多核的环境下。这与Visual Studio早期版本的情况也是一致的。

  -如果某个C#程序依赖于一个C++程序,并且这一依赖只使用了解决方案依赖关系表示,那么现在的这种转换并不会把解决方案依赖关系转换成项目到项目的引用。你可能会碰到因为不正确的构建顺序而导致的构建错误,尤其是使用命令行直接进行MSBuild构建的时候。要解决该问题,你得为C#和C++程序手动设置项目到项目的引用。

  -在Visual Studio 2010中设置新的构建依赖关系时,通常都要用项目到项目的引用替代解决方案依赖。

  2)  项目到项目引用属性的变化

  转换后,CopyLocalDependencies和UseDependenciesInBuild属性会被去除。“Use in Build”属性改为“Reference Assembly Output”,以更好地表示该属性的作用。另外两个属性:“Link Library Dependencies”和“Use Library Dependency Inputs”增加到了被引用的那个项目中,以便被引用的项目控制它的输出是否被传递到引用它的那个项目中。以下是Visual Studio 2008和Visual Studio 2010项目到项目引用属性的对比图。

对比图

  -把“Reference Assembly Output”设为“false”会允许该项目成为项目到项目引用的一部分,从而设置构建依赖关系,而它的输出不会被传递到引用它的那个项目的CL中。此属性用于被托管的程序。

  -把“Link Library Dependencies”设为“false”,会允许该项目成为项目到项目引用的一部分,从而设置构建依赖关系,而它的输出不会被传递到引用它的那个项目的链接器中。

  3)VC + +目录变化

  Visual Studio 2010不再支持在Tools->Options中设置VC + +目录。相反,Visual Studio 2010引入了用户设置文件(Microsoft.cpp.<Platform>.users.props)以控制包括全局搜索路径在内的全局设置。这些文件位于$(USERPROFILE)\appdata\local\microsoft\msbuild\v4.0目录。当迁移到Visual Studio 2010后,Visual Studio 2005或Visual Studio 2008的目录设置将会被移动到这些用户文件中。这些文件全局设置也会被导入到所有转换而来的以及新创建的项目中。

  下面是通过用户界面更改设置文件的步骤

  ◆点击View.Property Manage打开属性管理器。

  ◆展开项目节点,然后是Configuration|Platform 节点,你将会看到针对每个Configuration|Platform 的"Microsoft.cpp.<Platform>.users" 文件。这些就是提供全局设置的文件,跟以前的 tools/Options/VC++ 目录是类似的。

  ◆复选"Microsoft.cpp.<Platform>.users",右键点击弹出窗口的属性页

  ◆在属性窗口页中,单击左窗格中的"VC++ Directories",添加诸如“Include Directories"的目录的路径,以分号隔开。

  ◆请确保关闭Visual Studio之前保存了刚才的设置。

  ◆重新启动Visual Studio,新的设置将会生效。

  -注意:如果你想只改变一个项目的设置,你可以右键单击该项目,弹出属性页。更改“VC++ Directories”的设置,这些设置便被保存到项目文件中。

  4) 自定义生成规则的改变

  在Visual Studio 2008中,自定义生成规则是由.rules文件定义的。转换后,.rules文件将会变成三个单独的文件:.targets, .xml以及.props。转换后,你会在.rules所在的目录中发现这三个文件。请注意,没有UI可用于添加新的自定义生成规则。

  5) 改动检查的变化

  当你按下F5键,检查改动情况的窗口可能每次会弹出,即使是刚刚才重新构建了一次。你可以参照这个博客来解决这一问题。最有可能的的原因是某些文件被列为了该项目的的一部分,但却不在磁盘上了。由于这些文件是项目文件的一部分,更新检查机制每次都会检查它们是否存在。而如果在磁盘上不存在该文件,Visual Studio 2010就会认为需要重新构建一次。解决方法是,如果那些文件不存在了,请把它们从项目文件中删除掉。

  Visual Studio 2010中的一个限制是,它还不支持可控增量构建(Managed Incremental build)。我们正在研究如何在未来版本中支持这一功能。

  在Visual Studio 2010转换过程中的已知问题

  以下是在Visual Studio 2010的转换过程中已知存在的一些问题:

  1)  TargetFrameworkVersion

  转换后,托管的C++项目将设为默认为针对4.0 Framework。这种设计背后的原因是,Visual Studio 2010构建器的不支持2.0,3.0或3.5 Framework。Visual Studio 2008的构建器则必须使用2.0,3.0或3.5 Framework。为了使转换后的C++应用程序能马上就能运行,我们决定将C++程序的默认TargetFrameWorkVersion 属性改成4.0。可以通过下面其中一种方法把C++应用程序重新定向到其它Framework(如3.5):

  编辑vcxproj文件,并在第一组定义中加入以下内容:

<TargetFrameworkVersion>器v3.5“/ TargetFrameworkVersion”

  打开Visual Studio 2010的命令行,设置TargetFrameworkVersion = v3.5,然后从命令行运行devenv.exe。这将把所有C++应用的目标框架设为v3.5。

  在构建程序时传递/p:TargetFrameworkVersion = v3.5参数给MSBuild:MSBuild my.vcxproj /p:TargetFrameworkVersion =v3.5

  请注意,要在安装了Visual Studio 2008的情况下才能把应用程序的定向到2.0,3.0或3.5 Framework。

  对于C#/ VB应用程序,如果目标Framework已经安装在了计算机上,转换过程中则不会改变目标Framework。 如果目标Framework没有安装,你可以选择下载所需要的Framework或将目标Framework升级到4.0版。

  -如果在你的解决方案中混合有CSharp / VB/托管C++项目,你可能会碰到它们分别针对不同目标Framework的情况。如果被引用项目的目标Framework比引用它的项目的Framework版本还高,你可能会收到警告MSB3258:

-The primary reference “foo, Version=x.x.xxx.xxxx, Culture=neutral, processorArchitecture=x86” has an indirect dependency on the .NET Framework assembly “mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” which has a higher version “4.0.0.0” than exists in the current target framework. The version found in the current target framework redist list is “2.0.0.0”. By including the primary reference you may get compile and/or runtime errors.

  -你也可能如C4691这样的警告:type referenced was expected in the unreferenced assembly ‘file’, type defined in current translation unit used instead, if the Framework version of the referencing project is higher.

  -你需要把解决方法中的所有项目设为同一个版本的Framework。

  2)     在makefile的"Output"属性中使用引号

  如果某个项目的makefile中"Output"属性里有引号,转换将无法进行。解决方法是在转换前把"Output"属性里的引号去掉。

  1. <Tool
  2. Name="VCNMakeTool"
  3. BuildCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"
  4. ReBuildCommandLine="nmake /a /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"
  5. CleanCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot; clean"
  6. Output="&quot;$(OutDir)hlekernel.rom&quot; &quot;$(IntDir)hlekernel_gen.inl&quot; &quot;$(IntDir)hlekernel_gen.h&quot;"
  7. PreprocessorDefinitions="WIN32;_DEBUG"
  8. IncludeSearchPath=""
  9. ForcedIncludes=""
  10. AssemblySearchPath=""
  11. ForcedUsingAssemblies=""
  12. CompileAsManaged=""
  13. />

  3)  $(IntDir) 和 $(OutDir)中的反斜杠。

  $(IntDir)和$(OutDir)分别对应属性页中的“General -> Intermediate Directories”和“General -> Output Directories”。为了统一$(IntDir)和$(OutDir)的格式,如果没有以"\"结尾的话,转换过程中会自动在它们的属性值末尾追加“\”。如果末尾有“/”的话将会被删掉。

  不过,如果$(IntDir)或$(OutDir)用在makefile或自定义生成中,Exec任务会用到它,这就可能导致构建过程中断。

  在makefile中,如果它们以"\"结尾,nmake工具就无法评估它的值。例如,使用如下命令,

  BuildCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"

  因为$(OutDir)和$(IntDir)末尾有“\”,nmake工具不能正确地将其展开,OUT和OBJ的值会被置为空。为了解决这个问题,你需要在属性页删除$(IntDir)和$(OutDir)中的"\"。

  如果$(OutDir)或$(IntDir)被传递给自定义生成,包括生成事件、自定义生成工具,以及自定义生成步骤,你可能会遇到构建失败,其原因是“\”可能被这些工具当成了转义字符。例如,如果你有一个跟下面类似的预生成事件:

  1. <PreBuildEvent>
  2. <Command>cl /c  /Fo"$(IntDir)" "$(ProjectDir)\win32.cpp"</Command>
  3. </PreBuildEvent>


  命令行是:cl /c /Fo"Debug\" "C:\foo\win32.cpp" instead of cl /c /Fo"Debug\\" "C:\foo\win32.cpp"

  要解决这个问题,在传递给/Fo的值中的添加一个额外的“\”(C/C++ -> Output Files -> Object File Name),以补偿被当作转义字符的"\"。

  4) 解决方案资源管理器界面

  在Visual Studio 2010中,解决方案资源管理器里的文件和文件夹显示由.vcxproj.filters文件控制。如果你有名字相同但位置不同的文件夹,例如“Native\Include”和 "Include",那么在转换后,第二个"Include"和它里面的文件将不会显示在解决方案资源管理器中。若要解决此问题,你可以重新在解决方案资源管理器创建这个文件夹,并将相应的文件添加到文件夹中。

  5) 只读的项目文件或目录

  当你从一个只读目录中开始升级,或是对以前只读的项目文件进行重新转换时,都有可能碰到问题。务必确保这些目录和文件都是可写的,除非你能对这些文件自动进行检查,就像在集成资源管理系统(integrated source control system)中能做到的那样。

禁止灵格斯2.7弹出“新奇英语 互动锐词”广告窗口的解决方法
用记事本打开并清空C:\Documents and Settings\Administrator\Application Data\Lingoes\Translator\tip.xml里的内容,保存后改属性为只读。

win7 下的路径是C:\Users\用户名\AppData\Roaming\Lingoes\Translator\tip.xml

 

为仿意外和日后所需,请自行备份。

迅雷5.9.19.1390下载地址:http://down.sandai.net/Thunder5.9.19.1390.exe
把补丁放到原版迅雷5.9.19.1390的Program目录下使用,(请注意这一点是迅雷5.9.19.1390下的Program 不是系统的Program Files,一定要先关了迅雷再使用)
然后登陆就可以使用会员功能,去除广告和使用会员的皮肤。而且同时自动打上了快车旋风专用链补丁
说没有用的,说明他补丁要么就是没有放对路径或者不是迅雷5.9.19.1390,要么就是应用了补丁后没有去设置迅雷的会员功能里的界面定制。
(由于我以前的论坛用户名是:lacool被限制发贴,所以用这个用户发.而管理员认为这不是原创,所以我把作者改过来了.)
很多网友说打补丁时,提示正在运行,因为你没有退出迅雷,打补丁前请先退出迅雷。
怀疑有毒的可以在http://www.virscan.org/这个网站扫描一下.

 

 http://files.cnblogs.com/flying_bat/%e8%bf%85%e9%9b%b75.9.19.1390%e4%bc%9a%e5%91%98%e7%a0%b4%e8%a7%a3%e4%b8%8e%e5%bf%ab%e8%bd%a6%e6%97%8b%e9%a3%8e%e4%b8%93%e7%94%a8%e9%93%be%e8%a1%a5%e4%b8%81.rar

功能:强势优化+智能全图+RD固定英雄组+DOTA互通+建筑无敌+技能无CD+改名+踢人+伪装说话+挤房+喊话+改键+显钱+显战绩+防封号

37_1_40362ef94d4b338

  1. VSMapHack 6.00 更新日志
  2. 支持最新VS2.77防封与第三方插件随意开.
  3. 去除了单机限制开图和一些功能的限制.
  4. 修改了魔兽1.24b下关闭互通功能防止错误.
  5. 修正了魔兽1.24b开图显幻象和技能的问题.
  6. 修正了魔兽1.24b开图显敌军头像混乱的问题.
  7. 修正了魔兽1.24b有些人无法获取战绩的问题.
  8. 修正了显示战绩中胜率有时候乱码的问题.
  9. 修正了显示战绩中带战队的玩家的一些问题.
  10. 修正了有些用户显钱会导致软件错误的问题.
  11. 新增了魔兽争霸版本自动识别的功能选项.
  12. 新增了魔兽1.24b下DOTA的-RD命令固定英雄组.
  13. 新增了DOTA互通所有命令不显示 (原无命令模式).
  1. VSMapHack 6.01 更新日志
  2. 加强了防封号处理,并开放特殊方式.
  3. * 注:暴力将在VS2.78解决后开放,VS2.76还是可以暴力.
  4. 新增了支持Win7下不能过VS2.77的问题
  5. 修正了DOTA互通无命令模式的一些问题
  1. VSMapHack 6.05 更新日志
  2. 修正了对VS2.77开特殊防封会被关闭的问题.
  3. 修正了DOTA互通无命令模式很多人会失败的问题.
  4. 修正了三处功能选项和按钮细节上的一些问题.

下载地址

VS2010 Ultimate SN: YCFHQ-9DWCY-DKV88-T2TMH-G7BHP

初次安装后版本为试用版。这时进入控制面板的添加删除程序,点卸载VS2010后,有个Update Key的框,输入注册码就OK了。

下载地址:

http://www.microsoft.com/downloads/details.aspx?FamilyID=06a32b1c-80e9-41df-ba0c-79d56cb823f7&displaylang=en

分卷一:http://download.microsoft.com/download/A/B/F/ABF1F686-F442-49DD-8EC7-AC0991845CC3/VS2010UltimTrial_4PartsTotal.part1.exe
分卷二:http://download.microsoft.com/download/A/B/F/ABF1F686-F442-49DD-8EC7-AC0991845CC3/VS2010UltimTrial_4PartsTotal.part2.rar
分卷三:http://download.microsoft.com/download/A/B/F/ABF1F686-F442-49DD-8EC7-AC0991845CC3/VS2010UltimTrial_4PartsTotal.part3.rar
分卷四:http://download.microsoft.com/download/A/B/F/ABF1F686-F442-49DD-8EC7-AC0991845CC3/VS2010UltimTrial_4PartsTotal.part4.rar

直接ISO文件地址:
http://download.microsoft.com/download/2/4/7/24733615-AA11-42E9-8883-E28CDCA88ED5/X16-42552VS2010UltimTrial1.iso

 

 

Ctrl + A后会有好东西哟!

pp加速器简易去广告方法:
1、搜索AdConfig.ini和AdList6.Xml并删除其文件夹内的所有内容
2、新建 AdConfig.ini和AdList6.Xml并且设置文件属性为“只读”。 之后再不用开机忍受pplive那烦人的广告啦~~

引言:

程序员给很多人的印象一般是不善于交际、表情严肃、思维紧密、做事认真、沉着冷静等等。那么这些特征到底和程序开发有没有关系呢?不同性格的人在团队开发当中将面临什么样的问题以及不同性格的人在团队开发中又将发挥着什么样的作用呢?程序开发是人的一种社会行为(开发不可能脱离社会,脱离应用),对程序开发的管理也就是对人的管理,充分了解每个人的性格特征,才能有效的发挥除每个人的最大工作效率。因此人员的组成在很大程度上决定了这个团对的核心竞争力,也决定了这个团队的最终成败。

当然程序员的性格除了具有一定的普遍性外,也存在很多特殊性。有些人不仅是计算机方面的专家,同时也有可能是一位出色的作家;有些人不仅是某行业中出色的程序高手,也有可能是知名的社交名人;有些人不仅能带领一个团队做出很好的软件项目,而且对家庭也是无微不至的关怀。不过很多人包括管理人员或许都没有意识到性格特征的重要性以及他的特殊性。在国外很早就有人开始了性格人格方面的研究,并具体的应用到项目开发,事务管理及其他工作当中,发挥出了很好的效果。而在国内,更多的人关注的是将各种处理任务分配给程序员,下属人员,及其他执行者,然后确定完成的时间,性能及其效果如何。他不会关心你是否适合该任务的执行,是否对该任务有足够的了解,他最看中的就是结果。当你在充分了解了每个人的性格特征之后,也许你将这个任务分配给另外一名开发人员进行处理的最终效果会更好一点。

目的:

每篇文章都有他想要达到的效果,在这里将按照如下方式进行阐述:

1.       性格简述——简单的介绍性格的分类,以及什么是性格什么是人格作一个区分。

2.       性格分析——对一部分性格将他的行为、态度以及工作状态进行讨论。

3.       多重性格及性格转换——分析多种性格的相互作用。

4.       性格变化及影响变化的因素——对性格变化的原因及产生的影响进行剖析。

5.       性格的测量及评价——确定或者评测人的性格及相关行为。

6.       是否存在完美性格?对性格的相关方面进行总结。

最终目的是希望更多的人了解并关注能够影响每个人的行为的性格特征,并用于日常工作或者工作的管理当中。同样对于性格方面的分析不仅仅是应用与程序开发与管理中,在任何场所和事情上对性格特征的关注都将发挥重要的作用。

性格简述:

    有时候人们对人格或者性格的概念存在一些混淆,那么什么是性格,什么又是人格呢?通常对人格和性格的解释都没有非常明确的答案,一般来说性格是人的一种外在的表现,是每一个人心里特征的一种反映,是能够变化但却不经常变化的一部分,想对比较稳定,他主要体现在言行、态度和观念上,比如他/她的言行,脾气等。而人格则反映了每个人的内在特质,是个体特征,是由一些稳定的特性所组成。然而两者之间往往有非常紧密的联系,有时候也有人说人格是性格的另一种说法,这里不会去具体区分他们的定义如何,在该文中只对性格方面作相关的讨论。

人的性格多种多样,可以按照不同的方式进行划分,比如按脾气分就有暴躁型、平和型、温柔型等,按倾向分就有内向型、外向型等,按态度分又有悲观型、乐观型、积极型等。也有人将性格分为现实型、探索性、艺术型、社会型、管理型、常规型等几大类型,其他性格都是这几中性格的不同演化和组合。 如此多的性格如果都去详细讨论,将不是该文所能做到的事情。本文也不是专门研究性格分析性格的文章,主要在于将现有所了解的一些问题以及和工作中相关的一些问题进行说明,在以下段落中将重点讨论如下一些性格特征。

1.       依赖型性格;

2.       消极悲观型性格;

3.       积极乐观型性格;

4.       自私嫉妒型性格;

5.       胆怯懦弱型性格;

6.       偏执顽固型性格;

7.       独立果断型性格;

8.       急功近利型性格;

9.       平和热心型性格;

10.   粗心暴躁型性格;

11.   细仔完美型性格;

这些性格(所有的性格)是每个人的外在表现,他的形成与环境、事业、家庭、朋友、教育等先天的或者后天的因素都有很大的关系,所以有时候不能仅凭每个人的性格去决定他们的一生,去怀疑或者猜测他们的办事能力,因为前面说过性格是可以变化而不经常变化的部分。同样有时候一个人可以去改变另一个人的性格,去改变另一个人的外在表现。一个人的工作和事业是否成功,也主要取决于这个人的性格如何,只有性格与工作或者事业上的条件非常适应,那么将发挥出无法估计的效果。如果一位管理者对他所在的团队成员的性格或者人格都比较了解,那么他就能够非常娴熟和友好的去管理团队中的每一个成员。

依赖型性格:  

依赖型性格的人有可能在很小的时候就开始逐步经形成了,甚至有些研究追溯到了婴儿断奶期,过度的保护和关爱导致了高依赖性。在严重的情况下,该性格将使人失去最基本的解决问题和处理问题的能力。并且有研究表明具有依赖型性格的人会表现出较高水平的焦虑症,而焦虑程度与他们寻求帮助的程度呈正相关。不仅如此,具有依赖性格的人也往往不善于人际交往,他们总是想得到他人的帮助和保护,这样就会使他们表现得更加脆弱。

在大多数人当中,都会表现出不同程度的依赖特征。这和当时的所处的环境以及自身的条件有着紧密的联系,但需要分清的是,寻求帮助并不等于依赖,他还和个体的心里因素有关。依赖型性格的人伴随着心里驱使,而不是理性的合理的去处理问题。严重的情况下还会产生依赖性人格障碍,将很大程度的影响工作的效率和质量。

在开发团队中,团队成员所面临任务的就是处理大量的问题、需求以及其他相关事情,有些团队成员或许在最初的时候并没有表现出依赖的特性,但有可能受环境的影响而变化,比如尤其是在新人培养的过程中,对他们施与过多的帮助,而不去锻炼他们自我处理问题的能力,如果不多加注意,就有可能使其养成依赖的特性。使他们在思想上就养成惯性思维,当面对问题的时候,他们首先想到的是怎样从别人那里获得解答问题的方法,却不会首先去独立思考如何才能解决问题,以及以怎样的方式和步骤去解决问题,常此以往,不仅给他带来很大的影响,而且给整个团队也带来很大的负担。

对于具有依赖型性格特征的人,需要加以适当的引导,否则会使他们产生消极、悲观、孤立的情绪,更有甚者转变为其他不好的性格特征。因为有些人在寻求帮助的过程中如果失败或者没有得到任何结果,就会使他们产生一种挫折感,就会对自己没有信心,所以当自己面对这样的境况的时候,需要给他们适当的指引,循序渐进的去改变他们的性格,不要让他们觉得自己不受重视,不要让他们觉得只有自己一个人在奋战。

只要不是属于依赖性特别严重或者依赖性人格障碍的人,在特定环境和特定时间以及特定的方法下就能够得到良好的转变,否则就需要药物或者心里方面的治疗。如果觉得自己具有较强的依赖型型格特征,如果你已经认识到这个问题对工作或者生活所带来的影响,说明你已经在开始改变这样的性格,假如你在每次处理问题的时候都能够注意到自己的言行 ,那么相信自己只要努力付出就会有收获,就会有成功。

消极悲观型性格:

消极悲观型性格实际上可以分别叫消极型和悲观型性格,然而之所以将他们联系在一起,是因为大多数情况下这两种性格都是同时出现,且相互联系,并且消极和悲观都是对问题的一种态度,包括积极乐观型性格、自私嫉妒型性格等都是相似的道理。

虽然消极悲观型只是态度上的一种表现,然而却会严重影响到工作中的工作效率,严重时影响他人的工作心情,造成整个团队的工作质量和效率下降。这种性格所带来的负面影响往往也是比较大的。他比积极乐观型的人更容易影响周围的环境。在处理很多问题和事务中,这种性格首先就会表现得非常不自信,有时候怨天尤人,甘愿堕落,在严重的情况下,对生活对社会都充满了深深的厌烦感,更严重的是产生郁郁症或者自杀的心态及念头。如果一个人长期处于这样的状态中,不仅会使自己的体质下降带来疾病,而且会对自己的其他方面(工作、家庭、朋友)都产生一定的不良影响。因此要转变这样的性格,所需要花费的时间也就更长。

产生这种性格往往有很多原因,比如对问题的认知能力不足,经常在受到挫折和打击的时候却没有被适当的开导,在长期承受外界压力的时候却没有得到充分的释放,情绪也长期处于低落的状态之中等。这些因素在一个人的心里充分积累交错,就产生了这样的性格特征,然后通过他的态度和言行而表现出来。

同样在大部分人群里面也不同程度的具有这样的性格特征,要预防或者改变这样的性格需要从心里和身体上进行引导。经常参加户外运动或者经常与朋友一起聚会,可以适当减轻自己的内心压力,提高自己的思维能力和认知范围,因为在一些高强度或者长时间的运动中,往往很少还能使自己在去想其他的一些事情,并且与朋友在一起还可以进行多方面的交流和探讨。心里上要有一个良好的心态,不要经常一个人的时候面对问题思考问题,将心中的焦虑和烦闷向朋友倾诉,尽量使自己的内心平和,要坚信没有做不到只有想不到,任何事情都可以得到很好的解决。当你希望改变这种性格的时候,自己则需要付出更多的努力,不要压抑自己心里的任何感受。对于程度比较严重或者产生郁郁症的人来说则需要心里治疗和药物治疗相结合的方法。

当团队中有这种性格的人存在时,或者在某个时间段内有这样性格的人产生时,或者有些人逐渐转变为这样的性格时,相关的人应该花更多的时间去了解他的生活以及工作状况,寻找产生这种性格的原因,才能更好的去帮助他们该变这样的性格。只有靠大家的努力,任何事情都能得到很好的解决。

TinyXML有两个不爽的地方,一是它的接口使用FILE*,另外一个是它对 wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTree,他在处理XML时用到了另外一个小的库 –RapidXML。既然间接的是Boost库的一部分,所以是值得一试的。于是找到其官方网站(http://rapidxml.sourceforge.net/)研究了一番。一看之下,甚是满意,也推荐给大家看看!

首先就是速度,据它自己宣称比TinyXML快30到60倍,比Xerces DOM快50到100倍!详细的测试比较请见其用户手册(http://rapidxml.sourceforge.net/manual.html)的“4. Performance ”一节。

其次它的设计非常的简洁,只依赖于标准库中的几个基本的类。它的输入输出都是字符串,这样很好,一个库就应该关注自己核心的内容,做尽量少的事情。它的API其实和TinyXML倒是有几分相似,用过TinyXML的人应该很容易上手:

TinyXML主要接口类     RapidXML的主要接口类

TinyXML主要接口类
RapidXML的主要接口类

class TiXmlDocument
template<class Ch = char>
class xml_document

class TiXmlNode
template<class Ch = char>
class xml_node

class TiXmlAttribute
template<class Ch = char>
class xml_attribute

下面还是看一个具体的例子来体验一下,下面是TinyXML官方教程中创建XML文档的一段代码:

void build_simple_doc( )
{
// Make xml: <?xml ..><Hello>World</Hello>
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( “1.0″, “”, “” );
TiXmlElement * element = new TiXmlElement( “Hello” );
TiXmlText * text = new TiXmlText( “World” );
element->LinkEndChild( text );
doc.LinkEndChild( decl );
doc.LinkEndChild( element );
doc.SaveFile( “madeByHand.xml” );
}

下面是使用RapidXML实现类似功能的代码:

void build_simple_doc_by_rapidxml()
{
xml_document<> doc;
xml_node<>* decl = doc.allocate_node(node_declaration);
xml_attribute<>* decl_ver =
doc.allocate_attribute(“version”, “1.0″);
decl->append_attribute(decl_ver);
doc.append_node(decl);

xml_node<>* node =
doc.allocate_node(node_element,    “Hello”, “World”);
doc.append_node(node);

string text;
rapidxml::print(std::back_inserter(text), doc, 0);

// write text to file by yourself
}

下面是使用RapidXML分析XML的样例代码:

void parse_doc_by_rapidxml(char* xml_doc)
{
xml_document<> doc;        // character type defaults to char
doc.parse<0>(xml_doc);  // 0 means default parse flags

xml_node<> *node = doc.first_node(“Hello”);
string node_val = node->value();
}

好东西,大家分享!:D

以前把傲游收藏导入谷歌浏览器的方法是:

先把傲游收藏导出到IE,再从IE把收藏导入的谷歌,这样以来因为很多地方都有中英文收藏,这样以来很多地方的排序都改变了,因为这个原因一直没有换成.

今天把谷歌和傲游的收藏都导出到文件进行比较了下,比较明显的是:

谷歌多了一行"<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">",而傲游没有.

用UE打开发现谷歌的使用的U8-DOS(UFT8)格式,而傲游使用的是DOS(ANSI).

把傲游收藏导出文件"<TITLE>Bookmarks</TITLE>"上面加上"<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">",另存为UTF8格式;

导入谷歌后一切正常,从此可以抛弃吊车尾的傲游了.

 

------------------------------------------------------------------------------------

在此希望傲游认真的反省下,原来你们是做的不错的,从08,09年开始新版本是不少,但BUG更多.

而你们的傲游3也是长时间不更新,比起后来的TW,搜狗等你们进度太慢,BUG太多.

而陈明杰还天天在外面做秀,说后来者都是垃圾,我真的不想说你们什么了,再见了傲游.

同时作为一个傲游的老用户,也希望你们可以认真做出一个好的版本出来,挽回老用户的心,很多人是因为在线收藏的原因才不得不用傲游的.

北京时间3月23日凌晨2点31分,google.cn自动跳转至google.com.hk,同时界面显示:“欢迎来到谷歌搜索在中国的新家”。北京时 间3月23日凌晨3点07分,雅虎新闻频道援引美联社的报道称,谷歌将转移中国大陆的搜索引擎服务,但会继续保持在中国大陆的其它业务服务。

google.cn自动跳转至google.com.hk

 
北京时间3月23日凌晨2点31分,google.cn自动跳转至google.com.hk,同时界面显示:“欢迎来到谷歌搜索在中国的新家”。
 
另据网友反映,若此前用户设置的是谷歌的个性化界面,则在输入google.cn时,域名不会有跳转现象。

UPDATE:谷歌声明:仍保留技术、销售办事处 
 
北京时间3月23日凌晨3点07分,雅虎新闻频道援引美联社的报道称,谷歌将转移中国大陆 的搜索引擎服务,但仍会保留谷歌音乐、谷歌热榜、iGoogle等服务,以及在中国大陆的技术和销售办事处,以便为中国大陆的网民做技术支持服务以及继续 为中文版的搜索引擎做销售支持。但销售团队需要按照google.com.hk的有关事项行事。
 
谷歌表示,该决定来自于谷歌美国总部,没有任何的谷歌中国员工参与该决定。

06年注册的ClustrMaps,08年换成Google Analytics了,发现ClustrMaps的图片还是挺的,现在重新启用ClustrMaps记数. 

用 Google Analytics发现每天访问量在100人以上,最高有700人(IP).

 

不过搞笑的是最高的访问量是这个链接

  有人以文明爱心名义要求国家立法禁止屠食猫狗肉,原因大约是狗儿猫儿是人类的宠物,视食此动物者为残忍不文明没有爱心,大约饲养猫狗宠物者,皆以有爱心者自居也未尝不可,但要把食猫狗肉归类于违法,笔者很不以为然:世界上还有人把鸡鸭牛羊猪驴马兔当宠物饲养的,也有把鱼鸟甚至虫蛇王八当宠物饲养的,那么我们何以证明对这些动物的屠食就不残忍就文明就不违爱心了呢?若人类非要较真同样处置,那人类只能成为吃素的食草动物了,人类可以为某种信仰一不怕苦二不怕死,但人类不会为这种迂腐的爱心,而一不食猫狗二不食荤腥吧?

  笔者并非不知饲养猫狗之乐趣,也曾养过小狗狗儿,那小狗狗儿对着你摇尾巴撒欢,见着你时的那份亲热劲儿,确实惹人怜爱不已,后来因为不便及时照料它,就送给了他人,但有空闲也去看看它,那家人多家境不怎么好,两年后又得了一小狗狗,于是把我送他的长大了些的狗狗打了牙祭,虽然我心里有些不悦遗憾,也并不视他为残忍不文明没有爱心,也不能为一只狗狗跟人家翻脸,不能为了爱狗儿而不爱人吧?我的信条是:爱物者不过是小爱,大爱者先必爱人,然后才爱人及物。爱物而不爱人者,那不是真的爱,有的还是混蛋,比如那些爱狗胜过爱父母的,宁愿给宠物买高档狗食,而吝啬孝敬父母的人;又比如,旧时地主资本家爱自己的狗,爱到他家的狗咬了穷人,却容不得穷人还手打狗一棒的恶人。所以,以爱不爱宠物来分辨一个人是不是有爱心,那是很片面有失公正的,有人有能力财力有时间饲养宠物,而有人或无能力无财力或无时间饲养宠物,或有人非常恶心食狗肉,有人却十分喜好食狗肉,那都不是有无爱心的分水岭。人类认识自己应该与世界其它动植物共生存,但也不能本末倒置,把爱宠物凌驾于爱人之上,忘记人类首先爱的应该是人类自己,属于这个世界文明的人类,有许多可以实现体现自己爱心的地方。我看过某个记录片,是在一个很贫穷的地方,为了救一个老得将垂死的大象,出动了一大帮动物专家和科研人员,调用了大型机械设备和机械师,打造了专门装大象的大笼子,花钱雇佣了当地很多村民,千辛万苦把大象弄到动物医院精心救治,并称总共花费了十多万,并且救治完了还要住院疗养一段时间,然后才能放归山林,估计最终花费不会小于二十几万,这个记录片的主题当然是宣传咱们人类宽广的爱心。可我看得心里发毛:花二十几万,费那么多人力物力,救这么一头不久又将垂死又非特殊的老象,有这个必要吗?看看那些被雇佣的当地村民穿着的破旧的衣物,想象一下他们那里孩子有没有书读,看看他们住着那简陋的茅草房屋,想想他们得了病是否有钱医治,我当时心里就发毛就质疑,二十几万花费了下去,垂死的大象很快还将死去,多延续几天而已!这二十几万就不能化在更加需要帮助救治的人身上吗?就算这个是拯救动物的专项经费,你就放着不化行不行?人类还有很多少人因为没这个十万二十万钱,无奈地放弃生命啊,这只垂死的大象真够有造化的,人类的爱心何必这样本末倒置?

  凡事太过就物极必反,人类对同生于我们这个世界的动物有爱心是不错的,但将对动物的爱心置于对人类的爱心之上,不能不说是本末倒置,猫猫狗狗毕竟不是珍稀濒危灭种动物,何必立法禁食呢?如果屠食猫猫狗狗残忍的话,何以见得屠食猪马牛羊就不残忍了呢?难不成我们人类非要让自己不食荤腥作茧自缚吗?民以食为天啊,即便是半人半仙的济公和尚都“狗肉穿肠过,佛主心中留”有谁敢说他非善类无爱心呢?

  人食狗肉与人食鸡鸭牛羊只有味儿不同,而没有性质上的区别,不要让狗吃了人就好。不要将爱狗置于爱人之上就行,根本没有必要立法禁食猫狗肉,现代文明以人为本,而如果立法禁食猫狗肉,则是以宠物为本而人为末了,如此颠倒岂非太荒唐?所以我说:大爱者先必爱人,至善者贵善于人,这才符合现代文明以人为本的先进政治理念

KyouHelper 主要功能:

防封号(保证不封号)

主机/非主机互通

挤房间

去广告

改名、

指定T人(读秒/直接掉线)

非主机网络异常(相当于不败)

MH(MapHack)

改键

自动喊话!

建议配合VS2.7.6使用,正常使用不会封号.

 

注册下载地址

 

 

FMOD最新API—Event Sytem,提供了比FMOD Ex更高层的接口,使引擎开发人员无需关注诸如音频数据管理、播放控制、channels管理等底层细节,而把精力放在考虑如何为上层应用(如:场景/技能/UI编辑器中的音效、音乐的编辑,游戏中各种音效、音乐的播放)设计适合的框架。此外,它还提供了相应的设计工具—FMOD Designer,让音效制作人员既可以很容易地实现各种复杂音效,也能方便地对各种参数(如:3D音效的范围、播放属性)进行设置,最终打包输出事件索引文件(.fev)和音频数据文件(.fsb)给应用程序使用。

    FMOD Event System有一些核心概念需要编程者知晓,我抽空对前段时间使用该API时产出的文档(基本上是译文+自己的理解)进行了整理,希望对使用该API的朋友有所帮助。[ P.S. 后面有时间再整理出更为详尽的文档 ]

术语

事件—事件树的叶子节点。获得其句柄后可以播放它,更新它的参数。

事件组—包含事件和子事件组的’文件夹’,用于组织和加载目的。

波形库(wave banks)—被加载的.fsb文件。

事件实例内存(event instance memory)—事件播放所要求的内存。如果在编辑工具中,事件的’max playbacks’属性被设置,FMOD将为对应数量的实例分配足够的内存,以使它们能被同时播放。通常,如果不使用特殊的DSP效果(诸如,反射、回音、和声等),内存的使用是很小的,而且有些DSP效果并不需要内存。

事件层次和波形库的组织

    应该将事件划分到多个逻辑组中,便于一起加载和使用,例如关卡音效和公共音效。因此,你可以使用EventGroup::loadEventData加载整个分支,其中占有内存最大的通常是波形库数据。如果事件引用的FSB(即波形库)已经在加载其它事件时载入,绝不会发生重复加载。(注:FSB可以调用预加载函数预先加载到内存)

加载/分配概览

  • EventSystem::load加载fev文件,仅分配保存事件树结构对象的小块内存。
  • EventGroup::loadEventData从FSB文件加载所有波形数据(需要指定组和其子组)。该函数会递归加载所有子组。
  • 如果没有调用Event::loadEventData加载,当用户调用 EventGroup::getEvent/EventGroup::getEventByIndex加载指定事件时,会自动加载其所需的波形数据。
  • 如果EventSystem::getGroup/EventGroup::getGroupByIndex的cacheevents参数被置为true,将会为指定组中的所有事件分配事件实例内存(包括DSP特效内存)。这些函数不会递归加载。如果cacheevents参数被置为false,FMOD会等到你调用EventGroup::getEvent/EventGroup::getEventByIndex时分配事件实例内存。
  • EventGroup::freeEventData卸载所有波形数据并且释放该组包含的所有事件实例内存(包括子组)。递归释放。
  • 如果EventGroup::loadEventData被调用,或者cache了group,EventGroup::getEvent/EventGroup::getEventByIndex不会有任何读盘开销。

一些提示

  • 在游戏加载阶段调用EventGroup::loadEventData加载静态波形库(static banks)。
  • 如果需要有选择性的加载,不要使用EventGroup::loadEventData,使用EventGroup::getEvent/EventGroup::getEventByIndex,或者使用cacheevents = true调用GetGroup。
  • EventGroup::freeEventData会释放组及其包含的子组和孩子相关的所有内存,包括波形库数据和事件实例内存。如果后面又要使用到该组数据,就不得不重新加载。

参考文献

[1]  FMOD Ex & Designer Documents