永不消逝的蓝 永不消逝的蓝
关注数: 5 粉丝数: 6 发帖数: 3,510 关注贴吧数: 5
我掐,我掐,我掐掐掐 2007-04-02 14:47发现自己真是太纯洁了。来百度这么久,居然一次也没跟人掐过。印象最深一次,是还没注册“永不消逝的蓝”这个ID的时候,有天晚上看到某砣杂碎,在那里喋喋不休的辱骂靓颖,言语刻薄恶毒。我忍无可忍,光着身子骂了它一句脏话。仅此而已。后来渐渐的心平气和,开始学会无视这些垃圾。但看到有些逻辑可笑,行为弱智的人,还是忍不住露出一丝苦笑,你说人区别怎么就那么大呢?很多人都喜欢百度的简洁、自由,这种优势使得大规模的快速汇聚人气成为可能,百度贴吧也因此火爆。但这也太容易给人利用来捣乱破坏了,几个变化的ID、IP就可以把一个论坛搅得鸡犬不宁,让吧主疲于奔命。我以前写过一篇帖子,说要利用市场准入的原则,提高发贴的门槛,最大程度的给蓄意破坏增加成本,这也会大幅减轻吧主的管理强度。比如说,你注册了ID后,必须先当观察员,不能发言,过了一段时间后才能正式发言;又或者采取严格的注册机制,必须自己合法的邮箱才能进行注册,且每个邮箱只能注册一个ID。。。等等。当然这只是一厢情愿的理想,因为这只有百度才能做出这种举措。但我觉得这是自由的必要平衡,毕竟一个很浅显的道理,一个论坛要长久发展,就必须尊重一定的道德底线。光靠业余性质的吧主们来保证这个底线,实在太难为他们了。因此我觉得百度应该承担起这个责任,听取大家的意见,设计出更好论坛形式,才能根本解决问题。
zt:socket编程之登峰造极------完成端口 socket编程之登峰造极------完成端口 主  题: socket编程之登峰造极------完成端口 << span="" />网络编程技术>>“完成端口”模型是迄今为止最为复杂的—种I/O模型。然而。假若—个应用程序同时需要管理为数众多的套接字,那么采用这种模型。往往可以达到最佳的系统性能,然而不幸的是,该模型只适用于以下操作系统(微软的):Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候、而且希望随着系统内安装的CPU数量的增多、应用程序的性能也可以线性提升,才应考虑采用“完成端口”模型。要记住的一个基本准则是,假如要为Windows NT或windows 2000开发高性能的服务器应用,同时希望为大量套接字I/O请求提供服务(Web服务器便是这方面的典型例子),那么I/O完成端口模型便是最佳选择. 从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程对重叠I/O请求进行管理。以便为已经完成的重叠I/O请求提供服务。要注意的是。所谓“完成端口”,实际是Win32、Windows NT以及windows 2000采用的一种I/O构造机制,除套接字句柄之外,实际上还可接受其他东西。然而,本节只打算讲述如何使用套接字句柄,来发挥完成端口模型的巨大威力。使用这种模型之前,首先要创建一个I/O完成端口对象,用它面向任意数量的套接字句柄。管理多个I/O请求。要做到这—点,需要调用CreateIoCompletionPort函数。该函数定义如下: HANDLE CreateIoCompletionPort( HANDLE FileHandle, HANDLE ExistingCompletionPort, DWORD CompletionKey, DWORD NumberOfConcurrentThreads );在我们深入探讨其中的各个参数之前,首先要注意意该函数实际用于两个明显有别的目的: ■用于创建—个完成端口对象。 ■将一个句柄同完成端口关联到一起。 最开始创建—个完成端口的时候,唯一感兴趣的参数便是NumberOfConcurrentThreads 并发线程的数量);前面三个参数都会被忽略。NumberOfConcurrentThreads 参数的特殊之处在于.它定义了在一个完成端口上,同时允许执行的线程数量。理想情况下我们希望每个处理器各自负责—个线程的运行,为完成端口提供服务,避免过于频繁的线程“场景”切换。若将该参数设为0,说明系统内安装了多少个处理器,便允许同时运行多少个线程!可用下述代码创建一个I/O完成端口:CompetionPort=CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0) 该语加的作用是返问一个句柄.在为完成端口分配了—个套接字句柄后,用来对那个端口进行标定(引用)。 1.工作者线程与完成端口 成功创建一个完成端口后,便可开始将套接字句柄与对象关联到一起。但在关联套接字之前、首先必须创建—个或多个“工作者线程”,以便在I/O请求投递给完成端口对象后。为完成端口提供服务。在这个时候,大家或许会觉得奇怪、到底应创建多少个线程。以便为完成端口提供服务呢?这实际正是完成端口模型显得颇为“复杂”的—个方面, 因为服务I/O请求所需的数量取决于应用程序的总体设计情况。在此要记住的—个重点在于,在我们调用CreateIoComletionPort时指定的并发线程数量,与打算创建的工作者线程数量相比,它们代表的并非同—件事情。早些时候,我们曾建议大家用CreateIoCompletionPort函数为每个处理器都指定一个线程(处理器的数量有多少,便指定多少线程)以避免由于频繁的线程“场景”交换活动,从而影响系统的整体性能。CreateIoCompletionPort函数的NumberofConcurrentThreads参数明确指示系统: 在一个完成端口上,一次只允许n个工作者线程运行。假如在完成端门上创建的工作者线程数量超出n个.那么在同一时刻,最多只允许n个线程运行。但实际上,在—段较短的时间内,系统有可能超过这个值。但很快便会把它减少至事先在CreateIoCompletionPort函数中设定的值。那么,为何实际创建的工作者线程数最有时要比CreateIoCompletionPort函数设定的多—些呢?这样做有必要吗?如先前所述。这主要取决于应用程序的总体设计情况,假设我们的工作者线程调用了一个函数,比如Sleep()或者WaitForSingleobject(),但却进入了暂停(锁定或挂起)状态、那么允许另—个线程代替它的位置。换行之,我们希望随时都能执行尽可能多的线程;当然,最大的线程数量是事先在CreateIoCompletonPort调用里设定好的。这样—来。假如事先预料到自己的线程有可能暂时处于停顿状态,那么最好能够创建比CreateIoCompletionPort的NumberofConcurrentThreads参数的值多的线程.以便到时候充分发挥系统的潜力。—旦在完成端口上拥有足够多的工作者线程来为I/O请求提供服务,便可着手将套接字句柄同完成端口关联到一起。这要求我们在—个现有的完成端口上调用CreateIoCompletionPort函数,同时为前三个参数: FileHandle,ExistingCompletionPort和CompletionKey——提供套接字的信息。
zt:socket编程之登峰造极------完成端口(二) socket编程之登峰造极------完成端口(二)Tag: CreateIoComplet 2.完成端口和重叠I/O 将套接字句柄与一个完成端口关联在一起后,便可以套接字句柄为基础。投递发送或接收请求。开始I/O请求的处理。接下来,可开始依赖完成端口,来接收有关I/O操作完成情况的通知。从本质上说、完成瑞口模型利用了Win32重叠I/O机制。在这种机制中。象WSASend和WSARecv这样的Winsock API调用会立即返回。此时, 需要由我们的应用程序负责在以后的某个时间。通过一个OVERLAPPED结构,来接收调用的结果。在完成端口模型中。要想做到这一点,需要使用GetQueuedCompletionStatus(获取排队完成状态)函数。让一个或者多个工作者线程在完成端口上等待。该函数的定义如下: BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOfBytesTransferred, LPDWORD lpCompletionKey, LPOVERLAPPED *lpOverlapped, DWORD dwMilliseconds )其中,CompletionPort参数对应与要在上面等待的完成端口.lpNumberOfBytesTransferred参数负责在完成了—次I/O操作后(如WSASend或WSARecv)、接收实际传输的字节数。lpCompletionKey参数为原先传递进入CreateCompletionPort函数的套接字返回“单句柄数据”。如我们早先所述,大家最好将套接字句柄保存在这个“键”(Key)中。lpOverlapped参数用于接收完成的I/O操作的重叠结果。这实际是一个相当重要的参数,因为要用它获取每个I/O操作的数据。DwMilliseconds用于指定调用者希望等待一个完成数据包在完成端门上出现的时间。假如将其设为INFINITE。调用会无休止地等持下去。 3.单句柄数据和单I/O操作数据 —个工作者线程从GetQueuedCompletionStatus这个API调用接收到I/O完成通知后。在lpCompletionKey和lpOverlapped参数中,会包含—些必要的套接字信息。利用这些信息,可通过完成端口,继续在一个套接字上的I/O处理,通过这些参数。可获得两方面重要的套接字数据: 单句柄数据,以及单I/O操作数据。 其中,lpCompletionKey参数包含了“单句柄数据”,因为在—个套接字首次与完成端口关联到—起的时候。那些数据便与一个特定的套接字句柄对应起来了。这些数据正是我们在进行CreateIoCompletionPort API调用的时候,通过CompletionKey参数传递的。 如早先所述。应用程序可通过该参数传递任意类型的数据。通常情况下,应用程序会将与I/O请求有关的套接字句柄保存在这里。 lpOVerlapped参数则包含了—个OVERLAPPED结构,在它后边跟随“单I/O操作数据”。我们的工作者线程处理—个完成数据包时(将数据原封不动打转回去,接受连接,投递另—个线程,等等). 这些信息是它必须要知道的. 单I/O操作数据可以是追加到一个OVERLAPPED结构末尾的任意数量的字节。假如一个函数要求用到一个OVERLAPPED结构,我们便必须将这样的—个结构传递进去,以满足它的耍求。要想做到这一点,一个简单的方法是定义—个结构。然后将OVERLAPPED结构作为新结构的第一个元素使用。举个例子来说。 可定义上述数据结构,实现对单I/O操作数据的管理: typedef struct { OVERLAPPED Overlapped; WSABUF DataBuf; CHAR Bufferl[DATA_BUFSIZE]; BOOL OperationType;}PER_IO_OPERATION_DATA;该结构演示了通常要与I/O操作关联在—起的某些重要数据元素,比如刚才完成的那个I/O操作的类型(发送或接收请求).在这个结构中。我们认为用于已完成I/O操作的数据缓冲区是非常有用的。要想调用—个Winsock API函数,同时为其分配一个OVERLAPPED结构,既可将自己的结构“造型”为一个OVERLAPPED指针,亦可简单地撤消对结构中的OVBRLAPPED元素的引用。如下例所示:
火箭失去姚明,将会变得怎样? (随便写的,勿掐) 火箭失去姚明,将会变得怎样? 2007-01-14 17:19 从最近火箭的成绩来看,似乎也没啥:) 先说说我对姚明的看法吧。我觉得他是一位相当优秀的中锋,但还不是一位伟大的中锋。他还有很长的路去证明自己的伟大。我所指的伟大,并不是说自己的数据如何了不起,而是能够感染、激励整个团队,让团队的每一个人都发挥出最大的潜能。这也许就是所谓领袖的气质吧。 当然姚明还有足够的时间去做到这一点。事实上他训练非常刻苦,也在不断进步,我希望并且相信他有朝一日能够带领火箭取得久违的总冠军。 再回过头来看看最近的形势。为什么在姚明离开之后,火箭反而打得更好? 首先我觉得跟主教练范甘迪有关。由于姚明逐渐成长为核心,所以范甘迪要求大家尽量把球传给姚明,由姚明来负责搞定一切。这固然是对姚明的信任,但间接上也造成了大家对姚明的依赖心理。从火箭队员的很多赛后访谈中就可以看出这一点。既然有依赖心理了,又怎么能强迫自己发挥最大的能力呢?现在姚明受伤了,每个人都必须承担更大的责任,反而把大家激活起来了。 其次也跟中锋的战术有关。虽然我不是篮球专家,不过也可以感觉到,中锋战术很容易变得很机械。外线想办法传进去,姚明强攻,或者看时机不好,又传给外线。如此反复。虽然有效,但也可能遏制了球员的创造力。再加上姚明的速度相对较慢,也拖累了全队的速度,使全队快不起来。这几场看火箭一快起来,打的也是蛮不错的。 NBA的趋势就是中锋越来越少了,相对于高而言,现在似乎大家追求的都是更快,更灵活。 最后,每个队、每个球员都有状态起伏的周期,有高潮也有低谷,不以人的意志为转移。火箭现在打得好,也许就是因为进入了这个良性周期,所以连胜也就不奇怪了,因为他们本来就有这个实力。像麦迪,最近的助攻越来越多,这就使整个球队受益。其他球员也有不同的进步。现在火箭虽然打的好,但还不具备总冠军得实力,而姚明在火箭里面,也决不会是可有可无,锦上添花的角色。 现在范甘迪的当务之急,就是考虑好在姚明回来后,怎样把现在的有效打法跟姚明的中锋战术糅合起来。在一个优秀的团队里,不应该是谁遏制谁的问题,而是应该互相促进,也就是所谓的“化学反应”,而姚明和麦迪,应该是当仁不让的催化剂。 假如这个问题解决好了,火箭的前景还是非常令人看好的。
火箭失去姚明,将会变得怎样? 火箭失去姚明,将会变得怎样?2007-01-14 17:19从最近火箭的成绩来看,似乎也没啥:)先说说我对姚明的看法吧。我觉得他是一位相当优秀的中锋,但还不是一位伟大的中锋。他还有很长的路去证明自己的伟大。我所指的伟大,并不是说自己的数据如何了不起,而是能够感染、激励整个团队,让团队的每一个人都发挥出最大的潜能。这也许就是所谓领袖的气质吧。当然姚明还有足够的时间去做到这一点。事实上他训练非常刻苦,也在不断进步,我希望并且相信他有朝一日能够带领火箭取得久违的总冠军。再回过头来看看最近的形势。为什么在姚明离开之后,火箭反而打得更好?首先我觉得跟主教练范甘迪有关。由于姚明逐渐成长为核心,所以范甘迪要求大家尽量把球传给姚明,由姚明来负责搞定一切。这固然是对姚明的信任,但间接上也造成了大家对姚明的依赖心理。从火箭队员的很多赛后访谈中就可以看出这一点。既然有依赖心理了,又怎么能强迫自己发挥最大的能力呢?现在姚明受伤了,每个人都必须承担更大的责任,反而把大家激活起来了。其次也跟中锋的战术有关。虽然我不是篮球专家,不过也可以感觉到,中锋战术很容易变得很机械。外线想办法传进去,姚明强攻,或者看时机不好,又传给外线。如此反复。虽然有效,但也可能遏制了球员的创造力。再加上姚明的速度相对较慢,也拖累了全队的速度,使全队快不起来。这几场看火箭一快起来,打的也是蛮不错的。NBA的趋势就是中锋越来越少了,相对于高而言,现在似乎大家追求的都是更快,更灵活。最后,每个队、每个球员都有状态起伏的周期,有高潮也有低谷,不以人的意志为转移。火箭现在打得好,也许就是因为进入了这个良性周期,所以连胜也就不奇怪了,因为他们本来就有这个实力。像麦迪,最近的助攻越来越多,这就使整个球队受益。其他球员也有不同的进步。现在火箭虽然打的好,但还不具备总冠军得实力,而姚明在火箭里面,也决不会是可有可无,锦上添花的角色。现在范甘迪的当务之急,就是考虑好在姚明回来后,怎样把现在的有效打法跟姚明的中锋战术糅合起来。在一个优秀的团队里,不应该是谁遏制谁的问题,而是应该互相促进,也就是所谓的“化学反应”,而姚明和麦迪,应该是当仁不让的催化剂。假如这个问题解决好了,火箭的前景还是非常令人看好的。
zt:CDialogBar加入一个Button CDialogBar加入一个ButtoncToolBox是继承CDialogBar,我将对话盒工具列置於视窗框架上方我想加一个按钮IDC_BUTTON_OPENXFILE,可是他都一直是disenable,就算我初始化有设定它还是变成disenable.我只要这个Button可以按下,并且执行OnButton_OpenXFile请问我应该如何修改呢?#include "stdafx.h"#include "cToolbox.h"#include "resource.h" // main symbols#include "MainFrm.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endifBEGIN_MESSAGE_MAP(cToolBox, CDialogBar)//{{AFX_MSG_MAP(cToolBox)ON_BN_CLICKED(IDC_BUTTON_OPENXFILE, OnButton_OpenXFile)//}}AFX_MSG_MAPEND_MESSAGE_MAP()void cToolBox::OnButton_OpenXFile() {// TODO: Add your control notification handler code here}cToolBox::cToolBox(){}cToolBox::~cToolBox(){}void cToolBox::DoDataExchange(CDataExchange *pDX) //资料交换函数{}BOOL cToolBox::OnCommand(WPARAM wParam, LPARAM lParam) //回应WM_COMMAND讯息{UpdateData(); //呼叫cToolBox::DoDataExchange进行更新资料UINT wID=LOWORD(wParam); switch (wID){case IDC_BUTTON_OPENXfile:TRACE(">>> open xfile\n");break; case IDC_RADIO_X_STATIC:SetXMode(ENUM_XFILE_STATIC_MODE);break;case IDC_RADIO_X_DYNAMIC:SetXMode(ENUM_XFILE_ANIMATION_MODE);break;}return CDialogBar::OnCommand(wParam, lParam);}BOOL cToolBox::CreateDlgBar(){main = (CMainFrame *)AfxGetMainWnd(); if( !IsWindow(m_hWnd) ) { if( Create(main,IDD_TOOLBOX,CBRS_TOP,AFX_IDW_CONTROLBAR_FIRST+32)){ UpdateData(FALSE); EnableDocking(CBRS_ALIGN_TOP);main->DockControlBar(this,AFX_IDW_DOCKBAR_TOP);//CButton* but=(CButton*)GetDlgItem(IDC_RADIO_X_STATIC);but->SetCheck(1);GetDlgItem(IDC_BUTTON_OPENXFILE)->EnableWindow(TRUE);}}return TRUE;}//.hclass cToolBox : public CDialogBar //TooBar类别{public:......// Generated message map functions//{{AFX_MSG(cToolBox)afx_msg void OnButton_OpenXFile();//}}AFX_MSGDECLARE_MESSAGE_MAP()};
zt:打造完美的DialogBar 打造完美的DialogBarJohn.Y DialogBar相比Dialog有很多优势。因CDialogBar继承于CControlBar,因此其可以Docking在窗口一边,而把CView挤压开,但是 CDialogBar 的使用并不是很容易,因为 MFC 里面并没有提供直接可以使用的CDialogBar,我们需要自己动手,打造自己的完美的 DialogBar。首先,你需要建立一个CDialog的子类(比CMyDlgBar)。然后,我们来把他一步步转换成CDialogBar的子类。 1、改变基类和消息映射 我们头文件中把CMyDlgBar的基类改成CDialogBar (原来CDialog),并且在cpp文件中的BEGIN_MESSAGE_MAP也做同样的修改。修改头文件和cpp文件里的构造函数,并且修改DoDataExchange()的三处地方: CMyDlgBar:: CMyDlgBar (CWnd* pParent /*=NULL*/) : CDialog(CMyDlgBar::IDD, pParent) { ... void CMyDlgBar::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); ... 修改为: CMyDlgBar (); //标准构造函数 CMyDlgBar:: CMyDlgBar (){ ... void CMyDlgBar::DoDataExchange(CDataExchange* pDX) CDialogBar::DoDataExchange(pDX); ...2、改写OnInitDialog 在头文件的消息函数声明中插入: afx_msg LONG OnInitDialog(UINT, LONG); 在cpp文件的消息映射中插入: ON_MESSAGE(WM_INITDIALOG, OnInitDialog); 并且在cpp文件中实现这个函数: LONG CPfctDlgBar::OnInitDialog(UINT wParam, LONG lParam){ BOOL bRet = HandleInitDialog(wParam, lParam); if(!UpdateData(FALSE)){ TRACE0("Warning, Unalbe to init update.\n"); } // Add Code here return bRet; } 不错,现在你可以在DialogBar里面初始化控件了。 3、使用CMyDlgBar 首先确定CMyDlgBar的属性,如果不是以下设置,就修改过来: Style: Child Boarder: None Visible: Unchecked 好了,现在让我们来使用这个CMyDlgBar,比如在CMainFrame里面声明一个: class CMainFrame : public CFrameWnd { ... CMyDlgBar m_myDlgBar; ... } 然后在CMainFrame::OnCreate()函数里面这样写: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... if (!m_myDlgBar.Create(this, IDD_DLGBAR1, CBRS_LEFT, IDD_DLGBAR1)) { TRACE0("Failed to create dialog bar\n"); return -1; // fail to create } ... } 或者如果你想让其动态的停靠在面板的任何一个地方,那就加上CBRS_FLYBY和CBRS_SIZE_DYNAMIC,这两个都是CControlBar的属性,具体可查询MSDN: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... m_myDlgBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_myDlgBar.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_myDlgBar); return 0; } 到此,你基本上可以像使用其它控件一样使用CDialogBar了,当然,还有一些小技巧。 4、实用技巧 (1)、如果有很多个CDialogBar同时出现在你的面板上,那可能会出现显示错误的问题,你可以在ShowWindow()之后,调用MainFrame的RecalcLayout()来将屏幕位置合理调整。 (2)、CButton不能使用,如何解决?同样是添加函数,头文件中插入: afx_msg void OnUpdateButton(CCmdUI * pCmdUI); 在cpp文件中插入: ON_UPDATE_COMMAND_UI(IDC_BUTTON, OnUpdateButton)并且在cpp文件中实现之: void CMyDlgBar::OnUpdateButton(CCmdUI * pCmdUI){ pCmdUI -> Enable(TRUE); } (3)、如何在Button上添加bitmap? 还是消息函数,在OnInitDialog中添加: OnInitDialog(){ …; HBITMAP hBitmap = LoadBitmap(AfxGetApp() ->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP); HWND hwnd = ::GetDlgItem(this -> GetSafeHwnd(), IDOK); ::SendMessage(hwnd, BM_SETIMAGE, IMAGE_BITMAP, (long)hBitmap); …; }(4)、改变CMyDlgBar的大小,比如永远为主窗口的左1/3:在头文件的重载函数声明中插入: Virtual CSize CalcDynamicLayout(int nLength, DWORD nMode); 在cpp文件中实现: CSize CMyDlgBar::CalcDynamicLayout(int nLength, DWORD nMode){ CRect rcFrame; GetDockingFrame() ->GetClientRect(&rcFrame); return CSize(rcFrame.width() / 3, rcFrame.Height()); } 好了,以上就是我个人使用CDialogBar的全部经验,相信各位现在对使用CDialogBar也是游刃有余了。
关于超粽的一点思考 关于超粽的一点思考2007-01-01 23:58超粽是在火热的2005年诞生的,流连于此的网友应该都是05超女的关注者,这也是这个论坛最大的共性和根基。超粽的黄金岁月是在建立之初的几个月,可惜我当时主要在靓吧和笔吧潜水,并没有给超粽太多关注,所以遗憾的错过了。超粽慢慢的发展壮大,但是最早的一批粽子,大部分都已经消失。且美其名曰:回归生活。回归生活当然是不错的。这些朋友里面,有一些可能是对超女不再感兴趣,有一些可能觉得累了不想耗费太多时间在论坛,还有一些可能是对超粽不满意,所以选择潜水或者干脆退出。不管如何,少了一批有创造力的活跃的网友,是论坛很大的损失。尽管铁打的营盘流水的兵,但是看看超粽的现在,到处充斥着低级无聊的帖子,就能体会到那种缺乏人才的困境。为什么他们会潜水或者退出呢?以我对经济学的皮毛了解,经济学有个劣币驱逐良币的道理,来解释这种现象很合适。低素质的人,低素质的帖子多起来,就会使高素质的人(相对而言)觉得体现不了自己的价值,又很难改变这种状况,只好选择退出。想一想,自己辛辛苦苦写了一篇帖子,刚刚发表就湮没在一堆垃圾文字里,明珠暗投的心情谁能理解?而且这种垃圾帖子一多起来(声明一下,我也制造了不少垃圾文字),马上又会产生一个破窗效应(汗,我今晚怎么老喜欢掉书包?),大家一看你都写了垃圾文字,那我也随便好了,反正又不费什么脑子。这样垃圾文字就越来越多。 我这里说的垃圾文字,是指那些没有一点营养价值的帖子。有些灌水帖子,很搞笑,是大家展示自己行为艺术的好地方;有些呢,又很温馨,比如一些聊天楼,这些都不能算垃圾。垃圾文字多了,而且还占用了太多的版面。经常有这种感觉,从首页开始翻,翻了好几页都找不到一张有营养的帖子,这时候失望的心情可想而知。归根到底,这还是跟论坛的网友构成有关,最主要的还是年龄的关系。超粽的网友,从十几岁到三四十岁的都有,导致了一种杂乱的论坛风格。百花齐放是好的,但这应该建立在某种基础之上,也就是一个市场准入的原则,达到了这个原则我就让你百花齐放,达不到你就墙角一支梅,凌晨独自开吧。超粽始于超女,但假如天天说着超女的那些破事,谁都会审美疲劳的,凉粉如是,凉黑想必也一样:)所以很多人开了很多其他话题的楼,这也是保持超粽生气勃勃的一个重要因素。我觉得一个论坛的红火,光靠吧主的控制是不行的,还是要靠网友们的自律以及贡献。在目前的情况下,我觉得百度要能改下版就好了。可以把版面分成多个板块,在首页就能轻松的找到相关的板块,以及板块下最新的文章。其实说白了,就是把(超粽)论坛下面又分成很多小论坛。喜欢PK的可以去PK的板块,喜欢严肃话题的可以去严肃话题的板块,喜欢灌水捣乱的可以去灌水的板块。。。这样各取所需,并且能保证精品贴的曝光机会,让更多人看到。经常看到有人顶精品老贴,其实就是这个道理。假如我们也能细分一下市场,让不同的网友群体都能寻找到自己的乐趣,在超粽的这个大家庭里和谐共处,其乐融融,相信应该明天更美好。超粽曾经带给我很多欢乐,我是真心希望超粽能红火下去的,而且这个红火不是虚假的所谓人气,这需要大家的共同努力。让我们来开创大场面!
聊点别的吧 书,不是这么搞滴 作为一个挨踢精英,不得不经常性的对自己充充电,这本来也没什么,从小到大我都挺喜欢看书的。但有时候也不得不郁闷的哀叹:为什么这些技术类图书要整得那么枯燥呢?写得生动活泼一些会死吗?!看书的时候经常出现这种情况:昏昏欲睡,不敢去睡;忍无可忍,还得再忍。 我来揣摩一下。第一种情况是作者文笔确实不咋的。碰上这种情况你要么换一本,要么只能自认倒霉;第二种情况是作者太学究气,把写书当成写论文,就象经典的《设计模式》这本书,嘣掉多少人的大牙,但没办法,你只能去啃,因为只此一家别无分号(这是几年前的情况);第三种就是翻译的问题。劣质的“翻译家”毁掉了多少的经典外文书啊!据我所知,许多书都是由在校学生赚外快翻译的,你就能想像是什么水平了。有些甚至连基本的术语都翻译错,看到这样的书想死的心都有了。当然还要一种情况就是作者居高临下,故弄玄虚,什么“道”啊,“法”啊,这种书我建议鄙视他一万遍后就不要看了。 可能写技术书的人都想追求所谓的科学严谨性,但我觉得书就是应该让人读懂的,而不是来为难人的,为难人的是考卷。基于这个目的,能不能在书里面加入一些活泼轻快的内容,加入一些妙趣横生的比喻,加入一些浅显易懂的图片呢?就我而言,我很喜欢在书中看到一项技术的历史演化,这都会帮助我的理解。 我有时候在想,假如看技术图书能跟看金庸的武侠小说一样令人痴迷,那么挨踢精英的生活一定很幸福。整个IT届的生产力也会出现翻天覆地的变化,扯远了。 PS:欢迎大家到我的空间做客:) hi.baidu.com/blue_never_died
【靓颖快乐】发泄一下对技术图书的不满 书,不是这么搞滴作为一个挨踢精英,不得不经常性的对自己充充电,这本来也没什么,从小到大我都挺喜欢看书的。但有时候也不得不郁闷的哀叹:为什么这些技术类图书要整得那么枯燥呢?写得生动活泼一些会死吗?!看书的时候经常出现这种情况:昏昏欲睡,不敢去睡;忍无可忍,还得再忍。我来揣摩一下。第一种情况是作者文笔确实不咋的。碰上这种情况你要么换一本,要么只能自认倒霉;第二种情况是作者太学究气,把写书当成写论文,就象经典的《设计模式》这本书,嘣掉多少人的大牙,但没办法,你只能去啃,因为只此一家别无分号(这是几年前的情况);第三种就是翻译的问题。劣质的“翻译家”毁掉了多少的经典外文书啊!据我所知,许多书都是由在校学生赚外快翻译的,你就能想像是什么水平了。有些甚至连基本的术语都翻译错,看到这样的书想死的心都有了。当然还要一种情况就是作者居高临下,故弄玄虚,什么“道”啊,“法”啊,这种书我建议鄙视他一万遍后就不要看了。可能写技术书的人都想追求所谓的科学严谨性,但我觉得书就是应该让人读懂的,而不是来为难人的,为难人的是考卷。基于这个目的,能不能在书里面加入一些活泼轻快的内容,加入一些妙趣横生的比喻,加入一些浅显易懂的图片呢?就我而言,我很喜欢在书中看到一项技术的历史演化,这都会帮助我的理解。我有时候在想,假如看技术图书能跟看金庸的武侠小说一样令人痴迷,那么挨踢精英的生活一定很幸福。整个IT届的生产力也会出现翻天覆地的变化,扯远了。 PS:欢迎大家到我的空间做客:)hi.baidu.com/blue_never_died
1 下一页