[藏]社交网络,电子时代的人生绑架者

作者:负二 bystander:本文回答了你刷社交网络的内在因素.希望读到的人不只是读到那么简单. 大家在互相打招呼之前,先各自拿出手机,其中几个人用手机“签到”,然后把“签到”信息转发给在场的每一个人,而另一些人则用手机给饭桌上的菜肴拍照,然后同样转发给在场的每一个人,直到各种提示音消失之后,大家开始一边动筷子,一边心不在焉地聊八卦,如果没有爆炸性的话题出现,吸引在场的每一个人的注意力,那么大家的注意力都会被自己的手机虏获——比如我会收到坐在对面的那人发来的一张用手指画的拙劣的涂鸦,然后让我根据此图猜一个单词。 现在,一次聚餐的情景差不多就是这样,把一盘菜的照片转发给就坐在你身边和你一起吃饭的那个人,这种事说起来真是要多蠢有多蠢,但人们仍是乐此不疲——当一台饮水机都拥有一个微博账号时,我们意识到任何事情都已经无法阻止网络社交了,无论是美食还是同学聚会。 大多数热衷于用手机刷新SNS网站的人并不认为对网络社交上瘾是什么问题——他们有种幻觉:需要的时候,我肯定能够克制自己,那肯定比戒烟容易。但事实并非如此,网络社交上瘾与烟瘾截然不同,如果你对它背后的机制有所了解,一定会对它能够利用人类心理的弱点到如此地步深感惊讶——一个正常人只要掉进这个圈套,就几乎不可能不对这玩意上瘾。 如果你有过在泡论坛时不断刷新页面的经历,你就会明白社交网站的通知系统是一个多么精巧的引人上钩的设计——人们难以容忍等待,他们需要新状态的刺激,现代化的机场都将下飞机口到取行李处的距离设计得要多漫长有多漫长,就是为了避免旅客在取行李处叉着双手等行李,因为“走”比“等”更容易让人接受——而创造通知系统的产品经理们显然深谙此道,只要通知系统不断地给出状态更新的通知,就能够让人每天乖乖地登录,然后长时间地留在你的社交网站上,这一招就像用香肠逗狗一样好用。 许多人认为社交网站降低了人与人之间交流的成本,促进了信息流动和世界大同——他们显然是被Facebook、新浪微薄之类的网站给蒙骗了;而对人类社会的本质有所了解的人则会同意窥私欲是支撑社交网站的动力之一——有一定道理,人们总是有无穷的动力想去瞧瞧多年不见的老朋友、老同学,或是初恋情人,看他们是不是过得比自己更差,我的表弟曾向我坦白,在他听说前女友离婚的消息后,他曾连续一个月关注她的微博和开心网账号,并且觉得很爽——巴菲特说,竞争并不是推动人类前进的动力,嫉妒才是。 但实际上,窥私欲在社交网络这盘大菜中顶多只能算是几滴酱油——如果你对人性有更透彻的认识,你会从“把一盘菜的照片转发给和你一起吃饭的每一个人”这一举动上看到更深层次的动机。只有够自恋的人才会认为“我在吃这盘菜”这件事很重要,重要到有必要让每个人知道的地步——不幸的是,这世界上除了抑郁症患者,每个人都够自恋,你只要稍加注意就会发现,社交网络中的大多数信息都与“交流”没半毛钱关系,只是某人发布的“自以为很重要”的自我推销信息而已。根据“人类自我表现理论”,人们的自我表现往往根据相互关系中对方的特点而采取某种相应的对策,人们会不断地调节和控制呈现给其他人的信息,特别是有关自我的信息,以便建立起有利于自己的形象——所以人们会狂热地维护自己的微博形象,对隐私泄露视而不见,而对爱你的家人恶言相向。 最新的研究表明,热衷社交网络,也很有可能是你不够成功的表现——美国人4个中有3个是Facebook用户,但在可支配财产超过100万美元的人群中,这一比例只有26%,而百万富翁中上Twitter的比例更是只有可怜的3%——心理学家指出,原因可能是财富给予人更多的独立意识,对他人的依赖越少,对他人就越少在意,产生自我关注的倾向。想必扎克伯格自己也不会一天到晚泡在自己的网站上——而这世界上大多数人都“不够成功”,毫无疑问。 只要看透这一切,你就会明白,社交网络热潮,根本不是什么科技革命,它只不过是人性弱点的一次集中爆发而已,并且在它不为人所见的屁股后面,多多少少都能闻出一丝阴谋家的味道——自由软件基金会主席Richard Stallman认为,基于实名制的Facebook是一个国际寄生项目,而Jonathan Nolan(《盗梦空间》编剧)则在他的新剧中直接说,Facebook的幕后金主其实是CIA,自从全世界的人们都那么乐意泄露隐私后,CIA的工作简单了不少。 现在看来,远离通知提示音的诱惑,从社交网络那里为自己“赎身”,才是人生正途。

2013-05-13 · 1 min · bystander

[已失效]Csdn免积分下载器

作者:bystander 转载请注明来源:http://leaver.me 原理很简单,目前好像还没有大规模传开,我就不透露了,大家低调使用.为了方便,我写了个客户端,下载地址在文章末尾 使用方法直接把你想下载的地址复制过去,点击下载就会调用ie来下载了. 文章太短了,发两个可乐的吧: 第一个是: "网上发言,请不要随便自称笔者,毕竟有没有在用笔在写一目了然。这个词汇已经要汇入历史长河了,虽然曾经的那么疯狂存在过,但至少在互联网上该消失了。" "那以后自称什么?" "键人。" ---------------------------------------------------------------------------------------------------------- 第二个: ---光棍君:五一快到了,你还是一个人吗? ---你MB,难道我会变成狗吗? ---------------------------------------------------------------------------------------------------------- 第一个冷笑话,第二个是热笑话,冷暖自知。一个成语瞬间提升了整篇文章的境界。 下载地址:[Csdn下载器](http://pan.baidu.com/share/link?shareid=468747&uk=1493685990)

2013-05-01 · 1 min · bystander

一道笔试指针题目详解

看到本题是在搜狗某年的笔试题上,看也没人给出非常详细的讲解,直接给出了答案,我来尝试写一写, 貌似本题来源自<**The C Puzzle Book> ,**搜狗也只是换了一下字符串,直接看题吧 #include <stdio.h> char *c[]={"ENTNG", "NST","AMAZI","FIRBE"}; char** cp[]={c+3, c+2, c+1, c}; char ***cpp= cp; int main() { printf("%s",**++cpp); printf("%s ",*--*++cpp+3); printf("%s",*cpp[-2]+3); printf("%s",cpp[-1][-1]+1); } <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">请写出程序的执行结果....</span> 首先从左到右看: char *c[]= { "ENTNG", "NST", "AMAZI", "FIRBE" }; *c[] 是一个字符,因此,c[]是指向该字符,c就是一个数组(数组的内容为指向字符的指针),c已经被初始化了. char** cp[]={c+3, c+2, c+1, c}; 再看第二行,**cp[]是一个字符,*cp[]就是一个指针,指向该字符,cp[]就是一个指针,指向该指针,而cp就成为了指针数组,内容是指向字符的指针的指针。并且通过c的元素进行了初始化 char ***cpp= cp; 第三行,***cpp是一个字符,**cpp指向该字符,*cpp指向该指针,cpp就指向该字符的指针的指针. 然后我画一张图表示初始的情况看看 然后对于下面的输出语句,通过操作符优先级使用括号来区分一下: *(*(++cpp)); 这个嘛,就是把cpp后移(注意cpp已经改变了)然后就指向了cp[1],然后两次取其值即可得到AMAZI 推导过程如下: ++cpp -> cp[1] // cp[1] -> c+2 ++cpp = &cp[1] // &(c+2) *++cpp = *(&c+2) // c[2] **++cpp = *&c[2] 然后看第二个 (*(--(*(++cpp))))+3; 加括号后如上,cpp再加一,就指向了cp[2],取一次值(也就是*号)就变成了c[1],然后--c[1]就指向了c[0],取值就成了c[0]的地址,然后地址+3,就是NG了 (*(cpp[-2]))+3; 上面,cpp指向cp[2]了,然后呢,cpp[-2] 相当于*(cpp-2),间接引用cp[2],这样cpp[-2]就指向了cp[0]了,然后,就是FIRBE了,加3就是BE了 最后 (cpp[-1][-1])+1; cpp还是之前的cp[2],cpp[-1][-1]相当于*(*(cpp-1)-1),先减1指向了cp[1],取一次值就是c[2]了,然后c[2]-1就成为c[1]了,然后+1之后就是ST了. 所以,最后输出就是 AMAZINGBEST 错误之处还望指正.

2013-04-17 · 1 min · bystander

模板优先级队列及堆排序(C++实现)

模板优先级队列,数组实现,再熟悉一下常用算法,同时简单的堆排序应用 写了一个是队列自增长,另一个为了演示我还添加了一个叫做FillPq的方法,这个方法可以使用一个数组直接填充到优先级队列里,此时,优先级队列并不优先,然后进行下滤调整,之后建堆完成,输出即可 #include "stdafx.h" template< class T> class PriorityQueue { private: T *pq; int N; int capacity; public: PriorityQueue(void); ~PriorityQueue(void); void Insert(T x); T DelTop(); void Swim(int k); void Sink(int k); bool Less(int i,int j); void Swap(int i,int j); bool Resize(); void FillPq(T arr[],int size); }; template< class T> void PriorityQueue<T>::FillPq( T arr[],int size ) { N=size; capacity=2*size; for (int i=0;i<size;i++) { pq[i+1]=arr[i]; } } template< class T> PriorityQueue<T>::PriorityQueue(void) { pq=new T[10]; N=0; capacity=10; } template< class T> void PriorityQueue<T>::Insert( T x ) { if (N==capacity) { Resize(); } pq[++N]=x; Swim(N); } template< class T> T PriorityQueue<T>::DelTop() { T max=pq[1]; Swap(1,N--); Sink(1); pq[N+1]=NULL; return max; } //下滤 template< class T> void PriorityQueue<T>::Sink( int k ) { while (2*k<=N) { int j=2*k; if (j<N && Less(j,j+1)) { j++; } if (!Less(k,j)) { break; } Swap(k,j); k=j; } } //上浮 template< class T> void PriorityQueue<T>::Swim( int k ) { while (k>1 && Less(k/2,k)) { Swap(k,k/2); } } template< class T> void PriorityQueue<T>::Swap( int i,int j ) { T temp=pq[i]; pq[i]=pq[j]; pq[j]=temp; } template< class T> bool PriorityQueue<T>::Less( int i,int j ) { return pq[i]<pq[j]; } template< class T> bool PriorityQueue<T>::Resize() { T *newPq=new T[capacity*2]; capacity=capacity*2; for (int i=1;i<=N;i++) { newPq[i]=pq[i]; } pq=newPq; return true; } template< class T> PriorityQueue<T>::~PriorityQueue(void) { } 然后是堆排序 ...

2013-04-16 · 2 min · bystander

模板栈以及中缀表达式求值(C++实现)

栈直接用链表实现,这个比较简单,不多说,不过C++写程序,IDE的错误检测不是很给力。 至于给定一个中缀表达式,如何不转换成后缀表达式,直接求值,方法就是使用两个栈,一个操作符栈,一个操作数栈,然后从左到右扫描表达式,我这里中缀表达式计算实现的很简单,不完整,大家可以扩展。栈的实现是我想写的,思路如下: 1.如何是操作数,压入操作数栈 2.如果是操作符,压入操作符栈 3.如果是左括号,直接忽略 4.如果是有括号,弹出操作符栈栈顶元素,然后弹出操作数栈两个元素,进行操作以后结果压入操作数栈 看个图就好了 最后给出栈顶实现代码 #include "stdafx.h" #pragma region Node定义 template <class T> class Node { template<class T> friend class Stack; private: T m_data; Node *pNextNode; public: Node(); Node(T d); }; template <class T> Node<T>::Node() { m_data=default(T); pNextNode=NULL; } template <class T> Node<T>::Node(T d) { m_data=d; pNextNode=NULL; } #pragma endregion #pragma region Stack定义 template <class T> class Stack { private: Node<T> *m_pTopNode; int m_nNodeCount; public: Stack(); ~Stack(); bool IsEmpty(); bool Push(T e); T Pop(); int Size(); }; template <class T> Stack<T>::Stack() : m_pTopNode(NULL),m_nNodeCount(0) { } template <class T> Stack<T>::~Stack() { while (!IsEmpty()) { Node<T> *pTempNode = m_pTopNode; m_pTopNode = m_pTopNode->pNextNode; delete (pTempNode); pTempNode = NULL; } m_nNodeCount = 0; m_pTopNode = NULL; } template <class T> bool Stack<T>::IsEmpty() { return (m_pTopNode == NULL); } template <class T> bool Stack<T>::Push(T e ) { Node<T> *pNewNode = new Node<T>(e); if (NULL == pNewNode) { return false; } if(! IsEmpty()) { pNewNode->pNextNode = m_pTopNode; } m_pTopNode = pNewNode; m_nNodeCount ++; return true; } template <class T> T Stack<T>::Pop() { if(IsEmpty()) { return T(-1); } T e; e = m_pTopNode->m_data; Node<T> *pNode = m_pTopNode; m_pTopNode = m_pTopNode->pNextNode; delete (pNode); m_nNodeCount--; return e; } template <class T> int Stack<T>::Size() { return m_nNodeCount; } #pragma endregion 然后是main函数代码 ...

2013-04-11 · 2 min · bystander

并查集(C++实现)

并查集这个很有意思,并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。昨天看书看到了,然后用C++简单实现了下。在Dijkstra算法中,用来判断两个顶点是否在同一个集合里。 里面定义了两个类,都是并查集,一个是QuickFind,查找很快,一个是QuickUnion,合并较快。写了一些注释,有一些优化的提示.看代码吧,有什么问题指出来吧。 QuickFind的实现 #include "QuickFind.h" QuickFind::QuickFind(int N) { size=N; id=new int[N]; for(int i=0;i<N;i++) { id[i]=i; } } bool QuickFind::Find(int p,int q) { return id[p]==id[q]; } void QuickFind::Unite(int p,int q) { int pid=id[p]; for(int i=0;i<size;i++) if(id[i]==pid) id[i]=id[q]; } QuickFind::~QuickFind(void) { delete []id; } QuickUnion的实现 #include "QuickUnion.h" QuickUnion::QuickUnion(int N) { size=N; id=new int[N]; for(int i=0;i<N;i++) { id[i]=i; } } int QuickUnion::root(int i) { while (i!=id[i]) { //id[i]=id[id[i]]; 若添加这句话则为压缩路径 i=id[i]; } return i; } bool QuickUnion::Find(int p,int q) { return root(p)==root(q); } void QuickUnion::Unite(int p,int q) { //将p的根挂在q的根上, //这样会导此数变高,若需要优化,需要设置另一个 //数组sz[],sz[i]表示所以根为i的节点的数目,然后将 //小树靠在大树上 /* int i=root(p); int j=root(q); if(sz[i]<sz[j]) { id[i]=j;sz[j]+=sz[i]; } else { id[j]=i;sz[i]+=sz[j]; }*/ int rootp=root(p); int rootq=root(q); id[rootp]=rootq; } QuickUnion::~QuickUnion(void) { delete []id; } 参考文档(英文):UnionFind.pdf 工程代码下载:并查集Demo

2013-04-11 · 1 min · bystander

和 浅析

这两个转义字符最初学习C++的时候看到了,当时没多想,后来某一天突然想起来,回车不就是换行吗?这不是多此一举吗?今天又看到,索性查了下相关资料,整理一下,留作记录. 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行(这句的意思是把纸向上拉,然后打印头就定位到了下一行),可以想象一下,这个打印头只能在一个固定的水平线上左右移动,而不能上下移动,我们通过移动纸来完成打印下一行。 不明白的我在youtube上找到一个这种打字机的演示视频,为了方便读者观看,我提供一个下载地址。 后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。 Unix系统里,每行结尾只有"<换行>",即"\n"; Windows系统里面,每行结尾是"<换行><回车>",即"\n\r"; Mac系统里,每行结尾是"<回车>",不过mac基于unix,所以换行也应该是可以的。 一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。这个如果你在windows下使用vim也会发现这个情况 用C++来说明 如: int main() { cout << "leaver.me" << "\r" << "bystander" ; return 0; } 最后只显示 bystander 而 leaver.me 背覆盖了 \n 是换行,系统会将其替换成回车+换行 把光标 先移到 行首 然后换到下一行 也就是 下一行的行首拉 int main() { cout << "leaver.me" << "\n" << "bystander" ; return 0; } 则 显示 leaver.me bystander 一句话,这看起来是一个历史遗留问题……

2013-04-05 · 1 min · bystander

[E].Net 多线程指南

这是codeproject上的一个系列。我看完了。收获匪浅。可惜作者之后未能更新预想中的总结贴,多少有些可惜,不过。此系列非常非常不错。建议想学习.net多线程的看看。 1.net 多线程介绍 Introduction into threading in .NET 2.线程周期/线程优势/陷阱 Lifecycle of threads/Threading opportunities/Traps 3.线程同步 Synchronization 4.线程池 Thread Pools 5.UI中的线程应用 Threading in UIs (WinForms / WPF / Silverlight)

2013-03-06 · 1 min · bystander

C#中的Debug类

位于命名空间System.Diagnostics中 1.Debug.Print方法 Debug.Print("Today: {0}", DateTime.Today); 2.Debug.WriteLine方法 Debug.WriteLine("Have a nice day"); 3.TraceListener类 DelimitedListTraceListener创建的时候指定一个文件名,当Flush调用的时候,就被覆写到文件里。 TraceListener listener = new DelimitedListTraceListener(@"C:\debugfile.txt"); // Add listener. Debug.Listeners.Add(listener); // Write and flush. Debug.WriteLine("Welcome"); Debug.Flush(); 4.Debug.Write和WriteIf以及WriteLineIf方法 Debug.WriteLineIf(IsThursday(), "Thursday"); 第一个参数一个bool值,为真则输出。 5.Debug.Assert方法 Debug.Assert(value != -1, "Value must never be -1."); 如果表达式为false,则输出。

2013-03-01 · 1 min · bystander

消费者行为学

 今天一直在自习。。中午遇到了初中同桌。。5年没见了吧。聊了一会。被各种叮嘱“一定不要找太娇生惯养的,太粘人的,太无理取闹的。要听我的话,不然受苦的可是你。”哈哈。当时笑喷了。谢谢同桌。好好工作吧。 这本书是寒假在家看的一本书。一点点笔记。 选择喜爱的网站在很大程度上是一种生活方式的声明,它说明了一个人的兴趣和他想成为哪一类型的人,人们选择一种产品。通常是因为他们喜欢他的个性,觉得和自己比较温和。甚至有些人认为,使用产品后,他所拥有的令人渴望的品质会转移到自己身上。 每一年,人们都会购买大量几乎没有任何味道,没有任何营养的食品,这说明现代消费者行为学领域的一个基本前提是,人们购买产品往往并非因为他们能做什么,而是因为他们意味着什么。在其相同的情况下,人们会选择那些具有与其潜在需求一致的形象/个性的品牌。 营销者与消费者共处于一种复杂的双向关系中,往往很难判断营销活动是在哪里结束,而“真实世界”又在哪里开始,这种界限的模糊带来一个结果,那就是我们不再确定(或者也不在意)区分虚构世界和现实的界限究竟在哪里。有时候,我们呢愉快地加入到这个幻想中。 商业道德是引导市场行为的原则。包括诚实,可信赖,公平,尊重,正义。消费者认为行为道德的公司制造的产品评价较高。 品牌是在消费者头脑中设立的账户,也许巨额投入的营销策略只可以提高一个品牌的小小美誉度,而一次不大的产品质量危机则可能会一夜之间让该品牌资产荡然无存。 需求是一种基本的生物动机,欲望是社会教给我们的可用以满意需求的一种方式,比如口渴是生物意义上的,而我们被教会用可口可乐而不是(比如)羊奶来满足解渴的需要,因此,需求是本来就已经存在的。营销者只是推荐满足他的方法。营销的一个基本目标就是引起人们认识到需要的存在,而不是创造需求。 广告人对于人们的了解还远远未达到操纵他们的程度,新产品的失败率从40-80%,尽管人们认为神奇手段和科学技术在操纵他们,而事实上。只有设法销售优秀产品时才会成功。 绿色营销越来越普遍。强迫性消费是指反复的而且常是过度的购物行为,他被当作压力/焦虑/沮丧/无聊的宣泄渠道。和毒品类似。女性观有强迫购物失常的概率是男性的4倍,女性被服装和化妆品吸引,男性则被小配件,工具,枪支等吸引。

2013-02-26 · 1 min · bystander