xml version="1.0" encoding="utf-8" standalone="yes"12bet++博客-brent's huthttp://www.fometaux.com/aqazero/zh-cnSat, 22 Jun 2019 19:55:05 GMTSat, 22 Jun 2019 19:55:05 GMT6012bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2019/04/04/216331.htmlbrentbrentWed, 03 Apr 2019 17:31:00 GMThttp://www.fometaux.com/aqazero/archive/2019/04/04/216331.htmlhttp://www.fometaux.com/aqazero/comments/216331.htmlhttp://www.fometaux.com/aqazero/archive/2019/04/04/216331.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/216331.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/216331.html
代码:
http://www.fometaux.com/Files/aqazero/DrawTools2005Xmlable.zip


brent 2019-04-04 01:31 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2019/04/04/216330.htmlbrentbrentWed, 03 Apr 2019 17:28:00 GMThttp://www.fometaux.com/aqazero/archive/2019/04/04/216330.htmlhttp://www.fometaux.com/aqazero/comments/216330.htmlhttp://www.fometaux.com/aqazero/archive/2019/04/04/216330.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/216330.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/216330.htmlreference:
https://en.wikipedia.org/wiki/Topological_sorting

代码:
http://www.fometaux.com/Files/aqazero/TopoSort.zip


brent 2019-04-04 01:28 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2019/04/04/216329.htmlbrentbrentWed, 03 Apr 2019 17:24:00 GMThttp://www.fometaux.com/aqazero/archive/2019/04/04/216329.htmlhttp://www.fometaux.com/aqazero/comments/216329.htmlhttp://www.fometaux.com/aqazero/archive/2019/04/04/216329.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/216329.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/216329.html
https://en.wikipedia.org/wiki/List_of_file_signatures
http://www.fileformat.info/format/tiff/corion.htm
https://mh-nexus.de/en/hxd/

代码:
http://www.fometaux.com/Files/aqazero/TiffTag.zip


brent 2019-04-04 01:24 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2017/04/29/214894.htmlbrentbrentFri, 28 Apr 2017 21:02:00 GMThttp://www.fometaux.com/aqazero/archive/2017/04/29/214894.htmlhttp://www.fometaux.com/aqazero/comments/214894.htmlhttp://www.fometaux.com/aqazero/archive/2017/04/29/214894.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/214894.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/214894.html
I failed to find anything that can be used directly, it is hard to believe, a lot of implement of red-black tree in Java or 12bet can be easily got from internet (although none of them meets my requirement), but none in C#.

So I had to implement one, it was translated from a 12bet implement and modified to provide an immutable node.

Source code 
Example:
 1         RBTree<int> rbt = new RBTree<int>(Comparer<int>.Default);
 2         rbt.Add(3);
 3         rbt.Add(1);
 4         rbt.Add(10);
 5         rbt.Add(6);
 6         rbt.Add(7);
 7         rbt.Remove(10);
 8         RBNode<int> node6 = rbt.GetNode(6);
 9         rbt.Remove(node6);
10 
11         RBNode<int> node = rbt.GetNode(3);
12         node = node.Prev;
13         while (null != node)
14         {
15             System.Diagnostics.Trace.WriteLine(node.Value);
16             node = node.Next;
17         }

Output:
1
3
7


brent 2017-04-29 05:02 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2016/05/10/213484.htmlbrentbrentTue, 10 May 2016 06:23:00 GMThttp://www.fometaux.com/aqazero/archive/2016/05/10/213484.htmlxmlns:lex="http://schemas.root-project.org/xaml/presentation"
xmlns:p="clr-namespace:Pasasoft.Fep.UI.Properties"

"{lex:LocText Key=([a-zA-Z_]+), Assembly=Pasasoft.Fep.UI}"
"{x:Static p:Resources.$1}"


brent 2016-05-10 14:23 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2014/01/17/205451.htmlbrentbrentFri, 17 Jan 2014 12:43:00 GMThttp://www.fometaux.com/aqazero/archive/2014/01/17/205451.htmlhttp://www.fometaux.com/aqazero/comments/205451.htmlhttp://www.fometaux.com/aqazero/archive/2014/01/17/205451.html#Feedback1http://www.fometaux.com/aqazero/comments/commentRss/205451.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/205451.htmlAlways code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. - (Martin Golding)

There are two ways to write error-free programs; only the third one works. - (Alan J. Perlis) 

A good programmer is someone who always looks both ways before crossing a one-way street. - (Doug Linder)

It should be noted that no ethically -trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter.  ― Nathaniel S. Borenstein

You've baked a really lovely cake, but then you've used dog sh*t for frosting. ― Steve Jobs

http://www.codeproject.com/Messages/4739776/Quotes-to-live-by.aspx


brent 2014-01-17 20:43 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2012/09/12/190456.htmlbrentbrentWed, 12 Sep 2012 15:26:00 GMThttp://www.fometaux.com/aqazero/archive/2012/09/12/190456.htmlhttp://www.fometaux.com/aqazero/comments/190456.htmlhttp://www.fometaux.com/aqazero/archive/2012/09/12/190456.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/190456.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/190456.htmlC:\PROGRA~2\COMMON~1\FLOORC~1\FEP\PRIMOA~2\PrimoRun.exe
1) disable driver digital signatures
http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3 

You can disable digitally signed signatures, however it is not recommended.
Important: The driver signing enforcement in Windows 7 and Vista is there for a reason. Unsigned drivers could theoretically contain malicious code and harm your computer.

Step 1: Click Start button on the left bottom corner of desktop. In the search box, type "cmd"

Step 2: Go to Run command, and right click on command prompt and click on "Run as administrator".

Step 3: In the command prompt, type in these commands: Be very careful here. BCDEDIT controls how your computer boots up.

IMPORTANT:make a backup of your bcd file first. To do that, type:
bcdedit /export C:\savedbcd

This will create a file c:\savebcd which is your boot entry backup.
If you mess up, you can always undo changes by:

bcdedit /import c:\savedbcd

Then type these commands:

bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON

After you finished the steps above mentioned, you have made digital driver signing signature disabled for all installation. So you can install device drivers on Windows 7 without warning message that those drivers should be digitally signed.


2) install gpedit on window 7 basic 
http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments 

NOTE: For Windows 7 64-bit (x64) users! You'll also need to go to "SysWOW64" folder present in C:\Windows folder and copy "GroupPolicy", "GroupPolicyUsers" folders and gpedit.msc file from there and paste them in "C:\Windows\System32" folder. 

http://www.fometaux.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip


3) uninstall AOL 
http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT 
AOL ANTIVIRUS AOL SPYWARE PROTECTION  AOL FIREWALL AOL SAFETY AND SECURITY CENTER 

http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html 





brent 2012-09-12 23:26 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2010/09/09/126241.htmlbrentbrentThu, 09 Sep 2010 07:27:00 GMThttp://www.fometaux.com/aqazero/archive/2010/09/09/126241.htmlhttp://www.fometaux.com/aqazero/comments/126241.htmlhttp://www.fometaux.com/aqazero/archive/2010/09/09/126241.html#Feedback20http://www.fometaux.com/aqazero/comments/commentRss/126241.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/126241.htmlhttp://www.fometaux.com/Files/aqazero/OffsetDemo6.zip



brent 2010-09-09 15:27 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2010/04/15/112672.htmlbrentbrentThu, 15 Apr 2010 07:49:00 GMThttp://www.fometaux.com/aqazero/archive/2010/04/15/112672.htmlhttp://www.fometaux.com/aqazero/comments/112672.htmlhttp://www.fometaux.com/aqazero/archive/2010/04/15/112672.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/112672.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/112672.html
Method A:
::SetWindowsHookEx(WH_FOREGROUNDIDLE, YourIdleProc, AfxGetInstanceHandle(), GetCurrentThreadId());

Method B (my way):
 1 static HHOOK s_hGetMsgHook = NULL;
 2 
 3 LRESULT FAR PASCAL GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
 4 {
 5     AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
 6 
 7     LPMSG lpMsg = (LPMSG) lParam;
 8     if( (nCode >= 0&& PM_REMOVE == wParam)
 9     {
10         //your code here. maybe to deal with hot-keys, accelerators ...
11         //see http://support.microsoft.com/kb/187988
12 
13         //my code to simulate OnIdle
14         static BOOL bIdle = FALSE;
15         CWinApp* pApp = AfxGetApp();
16         if(!bIdle && pApp->IsIdleMessage(lpMsg))
17             bIdle = TRUE;
18         
19         if(bIdle)
20         {
21             MSG msgPeek = {0};
22             if(!::PeekMessage(&msgPeek, NULL, NULL, NULL, PM_NOREMOVE))
23             {
24                 VERIFY(PostMessage(AfxGetMainWnd()->GetSafeHwnd(), WM_USER+0x120x340x56));
25             }
26         }
27 
28         if(lpMsg->hwnd == AfxGetMainWnd()->GetSafeHwnd() &&
29             lpMsg->message == WM_USER+0x12 && lpMsg->wParam == 0x34 && lpMsg->lParam == 0x56)
30         {
31             lpMsg->message = WM_NULL;
32             lpMsg->lParam = 0L;
33             lpMsg->wParam = 0L;
34 
35             pApp->OnIdle(0);
36             bIdle = FALSE;
37         }
38     }
39 
40     return ::CallNextHookEx(s_hGetMsgHook, nCode, wParam, lParam);
41 }
42 
43 int CYourOleControl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
44 {
45     //...
46     
47     if(NULL == s_hGetMsgHook)
48         s_hGetMsgHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, AfxGetInstanceHandle(), GetCurrentThreadId());
49 }
50 
51 void CYourOleControl::OnDestroy() 
52 {
53     //...
54     
55     ::UnhookWindowsHookEx(s_hGetMsgHook);
56     s_hGetMsgHook = NULL;
57 
58     COleControl::OnDestroy();
59 }

Method A is far more simple, but with Method B:

1) You can override CWinApp::IsIdleMessage to filter some special messages, such as a frequent timer which will not affect what you want to do in CWinApp::OnIdle. Because timer will affect message queue and if you don't filter it, OnIdle will be called every time after the timer is invoked.

2) Sometimes your action in OnIdle will affect message queue inevitably, thus you will get a infinite loop: OnIdle->the special messages in message queue->OnIdle->... But with Method B, with SPY++ you can find the special messages, and filter them in IsIdleMessage.


brent 2010-04-15 15:49 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2010/03/04/108868.htmlbrentbrentThu, 04 Mar 2010 03:12:00 GMThttp://www.fometaux.com/aqazero/archive/2010/03/04/108868.htmlhttp://www.fometaux.com/aqazero/comments/108868.htmlhttp://www.fometaux.com/aqazero/archive/2010/03/04/108868.html#Feedback4http://www.fometaux.com/aqazero/comments/commentRss/108868.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/108868.html
void CMoveHandlerStateDraw::OnLButtonUp(UINT nFlags, CPoint point)
{
    
    
    AdjustPoint(point);

    m_pHandler
->Drop(point, m_ptHandlerPos);

    
}
但是,一旦往这个函数中插入用来dump数据的代码, bug就不再出现, 不论是将数据写到文件还是显示在messagebox上。
启用release版本的"Debug Information", bug也不再出现。
就算只是在该函数中声明一个CString变量, 这个狡猾的bug似乎马上就知道,马上就藏起来, 把这个变量一去掉, 它马上又跑出来了。

但后来发现, 这只是一只很普通的bug,根本没什么超能力。

聪明的你,知道这是为什么吗?



brent 2010-03-04 11:12 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2009/11/06/100283.htmlbrentbrentFri, 06 Nov 2009 03:56:00 GMThttp://www.fometaux.com/aqazero/archive/2009/11/06/100283.htmlhttp://www.fometaux.com/aqazero/comments/100283.htmlhttp://www.fometaux.com/aqazero/archive/2009/11/06/100283.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/100283.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/100283.html
http://stackoverflow.com/questions/313792/disabling-progress-bar-animation-on-vista-aero
http://msdn.microsoft.com/en-us/library/aa511486.aspx

用"meters"? 没空啊。

我的暴力方法是:
g_xpStyle.SetWindowTheme(m_hProgressWnd, L"",L"");

g_xpStyle 就是那个 CVisualStylesXP, google 一下就有了。


brent 2009-11-06 11:56 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2009/11/05/100221.htmlbrentbrentThu, 05 Nov 2009 08:01:00 GMThttp://www.fometaux.com/aqazero/archive/2009/11/05/100221.htmlhttp://www.fometaux.com/aqazero/comments/100221.htmlhttp://www.fometaux.com/aqazero/archive/2009/11/05/100221.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/100221.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/100221.html
1, 是Bitmap(RT_BITMAP)类型的图片无法加载, RT_BITMAP是预定义类型, 资源里面没有bmp文件的头, SizeofResource 的返回值要比图片文件少几个字节,因为少了这几个字节, 所以GDI+会返回invalid parameter错误。

2, 从IStream里面创建出来的Image对象似乎会引用到堆里面的内存, 如果hBuffer被释放了, 创建的Image的内容就会被破坏,有时只能画出一小部分图片, 有时整个图片就是空白, 视当时的内存状况而定。调用Image的Clone也没用。


CYourClass::~CYourClass()
{
    
for(IMG_VECTOR::iterator it = m_arImage.begin(); it != m_arImage.end(); it++)
        delete 
*it;
    
for(HGLB_VECTOR::iterator it = m_arGlobal.begin(); it != m_arGlobal.end(); it++)
    {
        ::GlobalUnlock(
*it);
        ::GlobalFree(
*it);
    }
}

void CYourClass::AddImage(HMODULE hInst, UINT nResourceID, LPCTSTR lpType)
{
    
if(lpType == RT_BITMAP)
    {
        
//GDI+ can not load RT_BITMAP resouce, 
        
//because they are predefined resource, 
        
//they don't contains the image file header.
        assert(FALSE);
        
return;
    }

    HRSRC hResource 
= ::FindResource(hInst, MAKEINTRESOURCE(nResourceID), lpType);
    
if (!hResource)
        
return;

    DWORD imageSize 
= ::SizeofResource(hInst, hResource);
    
if (!imageSize)
        
return;

    
const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
    
if (!pResourceData)
        
return;

    HGLOBAL hBuffer 
= ::GlobalAlloc(GMEM_FIXED, imageSize);
    
if (NULL == hBuffer)
        
return;

    
void* pBuffer = ::GlobalLock(hBuffer);
    
if (pBuffer)
    {
        CopyMemory(pBuffer, pResourceData, imageSize);
        IStream
* pStream = NULL;
        
if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK)
        {
            Gdiplus::Image 
* pImage = Gdiplus::Image::FromStream(pStream);
            pStream
->Release();
            
if (pImage)
            { 
                
if (pImage->GetLastStatus() == Gdiplus::Ok &&
                    pImage
->GetWidth() > 0)
                {
                    m_arImage.push_back(pImage);
                    
//it seems the image will take usage of the global memory.
                    
//so the global memory should be kept until the image destroy.
                    m_arGlobal.push_back(hBuffer);
                    
return;
                }

                delete pImage;
            }
        }
        ::GlobalUnlock(hBuffer);
    }
    ::GlobalFree(hBuffer);
}



brent 2009-11-05 16:01 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2009/10/29/99731.htmlbrentbrentThu, 29 Oct 2009 03:56:00 GMThttp://www.fometaux.com/aqazero/archive/2009/10/29/99731.htmlhttp://www.fometaux.com/aqazero/comments/99731.htmlhttp://www.fometaux.com/aqazero/archive/2009/10/29/99731.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/99731.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/99731.htmlbcgcontrolbar

人世间最痛苦的事莫过于此。



brent 2009-10-29 11:56 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2009/04/06/79108.htmlbrentbrentMon, 06 Apr 2009 10:30:00 GMThttp://www.fometaux.com/aqazero/archive/2009/04/06/79108.htmlhttp://www.fometaux.com/aqazero/comments/79108.htmlhttp://www.fometaux.com/aqazero/archive/2009/04/06/79108.html#Feedback3http://www.fometaux.com/aqazero/comments/commentRss/79108.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/79108.html
1,一个state machine workflow(Fund Request Process work flow)
2, 使用Polic来控制业务逻辑
3,实现了xoml和dll的分离,动态加载xoml,提供一个编辑工具,可以edit the workflow on-the-fly

1, 并没有传说中的那么难
ASP.net和WF我都不熟, 根据两本书,一个msdn上的例子"Web Form Workflow Approvals Stater kit"和另一个例子Orders http://www.odetocode.com/Articles/465.aspx的基础上把prototype搞出来了。

2,理解概念很重要
如果不理解WF是怎么调用外部函数(CallExternalMethodActivity), 是怎么传Event给WF(HandleExternalEventActivity),DependencyProperty是怎么回事, 基本不用再搞了。

3,很多设计可做
WF只实现了workflow最内核的部分,非常灵活。 同样的实现可以采用完全不同的实现方式。 怎么实现workflow definition, 怎么设计Activities, 需要为Activities添加那些DependencyProperty, 这些DependencyProperty是怎么互相关联的, 怎么只在xoml里面保存workflow definition, 怎么实现Workflow和业务数据的交互, 怎么实现Workflow和组织结构或者role的关联, 都可以有完全不同的设计。

4,还有很多概念。。
因为是prototype, 很多东西没考虑, 比如事务transation或者Compensate, 异常处理等。






brent 2009-04-06 18:30 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/11/19/67287.htmlbrentbrentWed, 19 Nov 2008 07:10:00 GMThttp://www.fometaux.com/aqazero/archive/2008/11/19/67287.htmlhttp://www.fometaux.com/aqazero/comments/67287.htmlhttp://www.fometaux.com/aqazero/archive/2008/11/19/67287.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/67287.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/67287.html
And now, sometimes , i need CMyDialog to be a model dialog (WS_POPUP), sometimes be a child of another dialog(WS_CHILD).

How to make this done without duplicating the template in resource?

Call ModifyStyle after creation? Failed
Modify the LPCREATESTRUCT's style in CMyDialog::OnCreate ? Failed.
Override PreCreateWindow? Failed.

After a lot of tracing and a lot of googling. I worked out something like this:

BOOL CMyDialog::CreateAsChild(CWnd * pParent)
{
    
if(!IsWindow(pParent->GetSafeHwnd()))
        
return FALSE;

    m_lpszTemplateName 
= ATL_MAKEINTRESOURCE(IDD_WALLLAYER_PROPERTYPAGE);  // used for help
    if (m_nIDHelp == 0)
        m_nIDHelp 
= LOWORD((DWORD_PTR)m_lpszTemplateName);

    HINSTANCE hInst 
= AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
    HRSRC hResource 
= ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
    HGLOBAL hTemplate 
= LoadResource(hInst, hResource);
    LPCDLGTEMPLATE lpDialogTemplate 
= (LPCDLGTEMPLATE)LockResource(hTemplate);
    DLGTEMPLATEEX
* lpDlgTmpEx = (DLGTEMPLATEEX* )lpDialogTemplate;
    DWORD dwOldStyle 
= 0;
    BOOL bIsDlgEx 
= lpDlgTmpEx->signature == 0xFFFF;
    
if(bIsDlgEx)
    {
        dwOldStyle 
= lpDlgTmpEx->style;
        lpDlgTmpEx
->style = DS_SETFONT | WS_CHILD;
    }
    
else
    {
        dwOldStyle 
= ((LPDLGTEMPLATE)lpDialogTemplate)->style;
        ((LPDLGTEMPLATE)lpDialogTemplate)
->style = DS_SETFONT | WS_CHILD;
    }
    m_lpDialogInit 
= NULL;
    BOOL bResult 
= CreateDlgIndirect(lpDialogTemplate, pParent, hInst);
    
if(bIsDlgEx)
        lpDlgTmpEx
->style = dwOldStyle;
    
else
        ((LPDLGTEMPLATE)lpDialogTemplate)
->style = dwOldStyle;
    UnlockResource(hTemplate);
    FreeResource(hTemplate);
    
return bResult;
}

If you need your dialog to behavior as WS_POPUP or WS_CHILD without duplicating your dialog template, you just get an ugly answer. And anyone who know another better way, let me know please.

MFC


brent 2008-11-19 15:10 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/10/08/63485.htmlbrentbrentWed, 08 Oct 2008 09:06:00 GMThttp://www.fometaux.com/aqazero/archive/2008/10/08/63485.htmlhttp://www.fometaux.com/aqazero/comments/63485.htmlhttp://www.fometaux.com/aqazero/archive/2008/10/08/63485.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/63485.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/63485.html
"释放托管资源"。莫非是"release managed resource"?

什么叫做释放托管资源(release managed resource)? 莫非是把成员的引用设置为null?

一般来说如果一个对象被dispose了,那它也要马上人间蒸发了,GC从全局变量和栈里面就要找不到它了,更不要说它的内部成员变量了,这时候设置它的成员为null有什么必要呢?

看了MSDN才知道,人家是"dispose managed resource",就是调用managed的对象的dispose方法。

太囧了,无法用中文表达。

有牛人在研究用中文写程序,为什么IG诺贝尔奖不颁发给它呢? 同时,我终于知道为什么英文影印版的书比中文翻译版的要贵了。



brent 2008-10-08 17:06 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/08/27/60165.htmlbrentbrentWed, 27 Aug 2008 08:05:00 GMThttp://www.fometaux.com/aqazero/archive/2008/08/27/60165.htmlhttp://www.fometaux.com/aqazero/comments/60165.htmlhttp://www.fometaux.com/aqazero/archive/2008/08/27/60165.html#Feedback5http://www.fometaux.com/aqazero/comments/commentRss/60165.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/60165.html自己实现图形文本编辑器 或者 Graphical Text Proposal (Draft)

Demo EXE 地址 (无公害,因为是用wxWidgets,连Icon都没有,经常把人给吓着了。该程序对硬件无要求,对使用者有一定要求...)

源代码地址

编译需要wxWidgets。在这之后再没用过wxWidgets了,感觉就是另一套MFC。

抓个图:


写到Table和导出html部分的时候就力不从心了,草草了事。 导出html是做得最人模狗样,但却最败絮其中的部分。(英文版操作系统下导出html会crash,原因未知)

一直有用C#重新写一个的冲动,只是到时一定又是虎头蛇尾。


brent 2008-08-27 16:05 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/08/27/60134.htmlbrentbrentWed, 27 Aug 2008 04:01:00 GMThttp://www.fometaux.com/aqazero/archive/2008/08/27/60134.htmlhttp://www.fometaux.com/aqazero/comments/60134.htmlhttp://www.fometaux.com/aqazero/archive/2008/08/27/60134.html#Feedback0http://www.fometaux.com/aqazero/comments/commentRss/60134.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/60134.html
最近无意中发现,作者TigerX原来系地球村中国银,欧耶。
地址:http://www.codeproject.com/KB/tree/ctreelistctrl.aspx

还以为codeproject上没其它中国土人呢,华人倒是知道有好几个。

俺也在codeproject发了篇文章,讲xml序列化复杂对象模型的,门可罗雀啊。
http://www.codeproject.com/KB/cs/xmlable.aspx

嗯,很有差别。



brent 2008-08-27 12:01 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/08/21/59506.htmlbrentbrentThu, 21 Aug 2008 02:40:00 GMThttp://www.fometaux.com/aqazero/archive/2008/08/21/59506.htmlhttp://www.fometaux.com/aqazero/comments/59506.htmlhttp://www.fometaux.com/aqazero/archive/2008/08/21/59506.html#Feedback1http://www.fometaux.com/aqazero/comments/commentRss/59506.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/59506.html
在12bet中,库的地位是非常高的。12bet之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,12bet的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比 较著名的大型库。

标准库

标准库中提供了12bet程序的基本设施。虽然12bet标准库随着12bet标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。

1、   Dinkumware 12bet Library

参考站点:http://www.dinkumware.com/
P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其 C/12bet的产品中采用Dinkumware的库。

2、   RogueWave Standard 12bet Library

参考站点:

http://www.roguewave.com
这个库在Borland 12bet Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。

3、SGI STL

参考站点:

http://www.roguewave.com

SGI公司的12bet标准模版库。

4、STLport

参考站点:http://www.stlport.org/

SGI STL库的跨平台可移植版本。

 

准标准库——Boost

Boost库是一个经过千锤百炼、可移植、提供源代码的12bet库,作为标准库的后备,是12bet标准化进程的发动机之一。 Boost库由12bet标准委员会库工作组成员发起,在12bet社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。

Boost中比较有名气的有这么几个库:

Regex
正则表达式库

Spirit
LL parser framework,用12bet代码直接表达EBNF

Graph
图组件和算法

Lambda
在调用的地方定义短小匿名的函数对象,很实用的functional功能

concept check
检查泛型编程中的concept

Mpl
用模板实现的元编程框架

Thread
可移植的12bet多线程库

Python
把12bet类和函数映射到Python之中

Pool
内存池管理

smart_ptr
5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:

Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr. Dobb's Journal软件研发杂志》第7辑上的译文。


Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准12bet的强调,是编写平台无关,现代12bet的开发者必 备的工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧 的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在 产品代码中多多利用。

参考站点:http://www.boost.org(国内镜像:http://www.c-view.org/tech/lib/boost/index.htm

GUI

在众多12bet的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。

1、   MFC

大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过V12bet的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 12bet 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在 Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。

 

2、   QT

参考网站:http://www.trolltech.com
Qt 是Trolltech公司的一个多平台的12bet图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面 向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是 流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。

 3、WxWindows

参考网站:http://www.wxwindows.org

跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日 趋完善的GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的12bet Builder X的GUI设计器就是基于这个库的。

4、Fox

开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。

参考网站:http://www.fox-toolkit.org/

5、   WTL

基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。

6、   GTK

参考网站:http://gtkmm.sourceforge.net/

GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而GTK就是这个库的12bet封装版本。


网络通信

ACE

参考网站:

http://www.cs.wustl.edu/~schmidt/ACE.html

12bet库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用12bet 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内 存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

StreamModule

参考网站:http://www.omnifarious.org/StrMod
设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。

SimpleSocket

参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm

这个类库让编写基于socket的客户/服务器程序更加容易。

A Stream Socket API for 12bet

参考网站:

http://www.pcs.cnu.edu/~dgame/sockets/sockets12bet/sockets.html

又一个对Socket的封装库。

XML

Xerces

参考网站:http://xml.apache.org/xerces-c/

Xerces-12bet 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XML Schema 的基本完整的开放标准。

XMLBooster

参考网站:http://www.xmlbooster.com/
这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。

Pull Parser

         参考网站:

http://www.extreme.indiana.edu/xgws/xsoap/xpp        
这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。

Xalan

         参考网站:http://xml.apache.org/xalan-c/

         Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。

CMarkup

         参考网站:http://www.firstobject.com/xml.htm

         这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。

libxml++

http://libxmlplusplus.sourceforge.net/

libxml++是对著名的libxml XML解析器的12bet封装版本

 

科学计算

Blitz++

参考网站:http://www.oonumerics.org/blitz
Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像12bet 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用12bet所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用12bet的template技术,程序执行甚至可以比Fortran更快。 Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供 的函数来构建。

POOMA

参考网站:

http://www.codesourcery.com/pooma/pooma

POOMA是一个免费的高性能的12bet库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。

MTL

参考网站:http://www.osl.iu.edu/research/mtl/
Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。

CGAL

参考网站:www.cgal.org

Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以12bet库的形式提供给工业和学术界的用户。

 

游戏开发

Audio/Video 3D 12bet Programming Library

参考网站:

http://www.galacticasoftware.com/products/av/

AV3D是一个跨平台,高性能的12bet库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。

KlayGE

参考网站:http://home.g365.net/enginedev/

国内游戏开发高手自己用12bet开发的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。

OGRE

参考网站:http://www.ogre3d.org

OGRE(面向对象的图形渲染引擎)是用12bet开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备的应 用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其它 类。

 

线程

12bet Threads

参考网站:http://threads.sourceforge.net/

这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境中很难看到的大量的线程方面的功能。

ZThreads

参考网站:http://zthread.sourceforge.net/

一个先进的面向对象,跨平台的12bet线程和同步库。

 

序列化

s11n

参考网站:http://s11n.net/

一个基于STL的12bet库,用于序列化POD,STL容器以及用户定义的类型。

Simple XML Persistence Library

参考网站:http://sxp.sourceforge.net/

这是一个把对象序列化为XML的轻量级的12bet库。

 

字符串

12bet Str Library

参考网站:http://www.utilitycode.com/str/

操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的代码,并且支持多线程环境和Unicode,同时还有正则表达式的支持。

Common Text Transformation Library

参考网站:http://cttl.sourceforge.net/

这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入,替换以及用EBNF的语法进行解析。

GRETA

参考网站:http://research.microsoft.com/projects/greta/

这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况下有非常优秀的表现。

综合

P::Classes

参考网站:http://pclasses.com/

一个高度可移植的12bet应用程序框架。当前关注类型和线程安全的signal/slot机制,i/o系统包括基于插件的网络协议透明的i/o架构,基于插件的应用程序消息日志框架,访问sql数据库的类等等。

ACDK - Artefaktur Component Development Kit

参考网站:http://acdk.sourceforge.net/

这是一个平台无关的12bet组件框架,类似于Java或者.NET中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。

dlib 12bet library

参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/

各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的API等等。

Chilkat 12bet Libraries

参考网站:

http://www.chilkatsoft.com/cpp_libraries.asp

这是提供zip,e-mail,编码,S/MIME,XML等方面的库。

12bet Portable Types Library (PTypes)

参考网站:http://www.melikyan.com/ptypes/
这是STL的比较简单的替代品,以及可移植的多线程和网络库。

LFC

参考网站:http://lfc.sourceforge.net/

哦,这又是一个尝试提供一切的12bet库

 

其他库

Loki

参考网站:

http://www.moderncppdesign.com/
哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中把12bet模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。

ATL

ATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。

F12bet: The Functional 12bet Library

这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另一分的乐趣,可以去看看函数式程序设计的世 界。大师Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就将函数式语言列为至少应当学习的6类编程语言之一。

FACT!

参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html

         另外一个实现函数式语言特性的库

Crypto++

提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。还有很多非常激动人心或者是极其实用的12bet库,限于我们的水平以及文章的篇幅不能包括进来。在对于这些已经包含近来的库的介绍中,由于并不是每一个我们都使用过,所以难免有偏颇之处,请读者见谅。

 

资源网站

正如我们可以通过计算机历史上的重要人物了解计算机史的发展,12bet相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没有 介绍的必要,只因下面的人物在12bet领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂 商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作……

Bjarne Stroustrup  http://www.research.att.com

Stanley B. Lippman

http://blogs.msdn.com/slippman/(中文版

http://www.zengyihome.net

http://www.zengyihome.net/slippman/index.htm

Scott Meyers  http://www.aristeia.com/

David Musser  http://www.cs.rpi.edu/~musser/

Bruce Eckel  http://www.bruceeckel.com

Nicolai M. Josuttis  http://www.josuttis.com

Herb Sutter  http://www.gotw.ca/

Andrei Alexandrescu  http://www.moderncppdesign.com/







brent 2008-08-21 10:40 发表评论
]]>
12bet++博客-brent's huthttp://www.fometaux.com/aqazero/archive/2008/08/18/59204.htmlbrentbrentMon, 18 Aug 2008 03:33:00 GMThttp://www.fometaux.com/aqazero/archive/2008/08/18/59204.htmlhttp://www.fometaux.com/aqazero/comments/59204.htmlhttp://www.fometaux.com/aqazero/archive/2008/08/18/59204.html#Feedback1http://www.fometaux.com/aqazero/comments/commentRss/59204.htmlhttp://www.fometaux.com/aqazero/services/trackbacks/59204.html
“初中时学习高中和大学的数学” ,丫的还在农村呢,哪里来的书? “微积分的思想。”

“按兴趣发展。” 和我初中时学物理一样嘛,可惜俺当年找不到书看,不然俺也是牛人了,哈哈。

1是兴趣,2是能超前学习。

“15岁上大学” 。真是终生教育啊

“两最牛逼的同学自杀” 经得起磨练

“不知道下一步学什么” 有人能在宏观上指导是多么重要。

教育学生“只要告诉他一个方向”

“有鲜明个性的学生” “批评老师” “交大的计算机硕士” “成为世界著名的数学家” “两三年之内”

“奥数” “竞赛 ” -“激励兴趣 自己买书 自己去看 自己思考” “没有培训班” “想好几个月” “做研究 想好几年”

“进入大学就是人生目标” “为父母读书,不是为自己的兴趣读书”

“美国孩子每天就是想着怎么去玩” “不重视数学技巧”

“小学一二年级开始,做一些研究性的东西” “展板” “演讲” “讲的能力”

“美国高中生压力非常大” “考试不比国内少”

“(电子游戏)小的时候没接触过,一上大学家里不管了”

“机械训练” “没有成就感 ” “不是智力的表现”

“国内学生基础好” “微积分很好”

“缺乏自信” “请他们吃饭” “吃了很多次饭” “表达能力欠缺”


“数学学习的方法”

“超前学习” “预习” “学高年级的知识” “走在老师前面” 站得高看得远啊。

“做题太多” “不要为技巧而技巧”

“兴趣之所以能产生” “自己的想法能解决问题, 成就感, 觉得自己有与众不同的地方”

“拓宽知识面” “看得远一些”

“奥数” “很大的利益链”

“物理学家学数学的方法” “在研究中学习” 又是超前学习

“多看点传记,大学的时候”

“美国大学的培养方式:扔到水里游泳”

google, 线性代数 矩阵

“数学训练非常重要”

费曼? “天才:脑袋里放几个问题,学到一个新的方法后把这些问题试一遍,说不定哪天就打开了,别人就觉得你是个天才”

“数学品味” 知道什么是好,什么是差

“研究 research” “反复查找”



brent 2008-08-18 11:33 发表评论
]]>