[译]Java中的CountDownLatch和CyclicBarrier

本文译自官方文档,有细微改动,Java多线程的时候,看了好多文档,还是官方说的最清楚。结合自己的理解,译之。 CountDownLatch 字面意思就是倒计数闩,后面会讲到,这里的同步允许一个或多个线程等待,,知道其他线程进行的一系列操作完成。而CountDownLatch通过一个参数count(数目)来构造,而await()则阻塞当前线程,直到countDown()将count减为了0,然后,所有的阻塞线程被释放,也就是那些调用了await方法的线程立即返回,注意,这是一次性的,也就是说count不能被自动重置,如果你想这么做,CyclicBarrier是可以的。 CountDownLatch用处很多,当用count=1来构造的时候,这就相当于一个开关,所有调用了await方法的线程都在等待,直到有一个线程调用了countDown(),CountDownLatch通过count=N构造的话,就可以使一个线程等待其他N个线程完成操作,或者一个操作被做N次。 简单的demo: 一组worker(工人)线程使用两个CountDownLatch 第一个是开始信号,用来阻止工人提前操作,直到(driver)传送带准备好了才允许开始 第二个是完成信号,他使传送带等待直到所有的worker都完成 class Driver { // ... void main() throws InterruptedException { CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(N); for (int i = 0; i < N; ++i) // 创建并启动线程 new Thread(new Worker(startSignal, doneSignal)).start(); doSomethingElse(); // 传送带做点准备工作 startSignal.countDown(); // 减为0,工人可以开始了 doSomethingElse(); doneSignal.await(); // 等待直到所有的工人完成任务 } } class Worker implements Runnable { private final CountDownLatch startSignal; private final CountDownLatch doneSignal; Worker(CountDownLatch startSignal, CountDownLatch doneSignal) { this.startSignal = startSignal; this.doneSignal = doneSignal; } public void run() { try { startSignal.await();//工人们等待开关打开 doWork(); //做事 doneSignal.countDown(); //做完了就给countdownlatch 减去1 } catch (InterruptedException ex) {} // return; } void doWork() { ... } } 另一个典型的例子就是把问题分成N部分,通过线程执行每一部分,具体的话是将线程入队到一个Executor对象里。然后调用execute方法。当执行完毕一部分,就并给latch 减去1,当减到0的时候调用await的方法就可以继续运行了,当需要重复计数的话,用CyclicBarrier代替 class Driver2 { // ... void main() throws InterruptedException { CountDownLatch doneSignal = new CountDownLatch(N); Executor e = ... for (int i = 0; i < N; ++i) // 创建并开始线程 e.execute(new WorkerRunnable(doneSignal, i)); doneSignal.await(); // 等待所有的线程完成 } } class WorkerRunnable implements Runnable { private final CountDownLatch doneSignal; private final int i; WorkerRunnable(CountDownLatch doneSignal, int i) { this.doneSignal = doneSignal; this.i = i; } public void run() { try { doWork(i); doneSignal.countDown(); } catch (InterruptedException ex) {} // 返回; } void doWork() { ... } } ...

2013-09-15 · 2 min · bystander

阿里巴巴5月5日综合算法题详解

之前参加了阿里的笔试和电面,让后天那个敏感的日子去参加现场面,就去看了一下那天笔试的最后一道综合题,看着网上清一色最后一道题不知道从哪转的答案,不忍直视,一看代码就是错的,最直接的就是求中位数连奇偶性都不判断,直接处以2..这,另外当在无法整除的情况下,数据结果错误。 这道题的大意是:有一个淘宝商户,在某城市有n个仓库,每个仓库的储货量不同,现在要通过货物运输,将每次仓库的储货量变成一致的,n个仓库之间的运输线路围城一个圈,即1->2->3->4->…->n->1->…,货物只能通过连接的仓库运输,设计最小的运送成本(运货量*路程)达到淘宝商户的要求,并写出代码。 解题思路: 假设n个仓库的初始储货量分别为warehouse[1],warehouse[2],…,warehouse[n] 计算平均储货量 average = (warehouse[1]+warehouse[2]+...+warehouse[n])/n 就算出来了最终的结果中,每个仓库应该有的存量 首先,从仓库1向仓库n运送k; 然后,从1到n-1,依次向下运送某一特定值,使得每一个仓库的余量都为average,剩下的问题就是求总代价的最小值了。 设第0步从1仓库向n仓库(注意因为是圆圈,所以路径长度是1)运出k存量,k可以为负,如果为负数,意味着从n向1运输|k|存量,然后从循环,从(1到n-1),从i仓库向i+1仓库运输,运输的量需要保证i仓库在运输完毕后等于average 第0步(从仓库1向仓库n运送k):花费代价为 |k|, 第1步(确保仓库1的余量为average):需要花费代价为 |warehouse[1]-average-k| 也就是从1向2伙从2向1运输 3. 第2步(确保仓库2的余量为average):代价为 |warehouse[2]+warehouse[1]-average-k-average|=|warehouse[1]+warehouse[2]-2*average-k| … n-1.第n-1步:代价为 |warehouse[1]+warehouse[2]+...+warehouse[n-1]-(n-1)*average-k| 此时,仓库n剩下的货物量: (warehouse[n]+k)+warehouse[1]+warehouse[2]+...+warehouse[n-1]-(n-1)*average-k=(warehouse[1]+warehouse[2]+...+warehouse[n])-(n-1)*average=average 刚好也满足,其实这里不用推导,因为平均值是算好的,所以最胡一定是刚好完成的。 总的代价为: |k|+|warehouse[1]-average-k|+|warehouse[1]+a[2]-2*average-k|+...+|warehouse[1]+warehouse[2]+...+warehouse[n-1]-(n-1)*average-k| 不妨令sum[i] = warehouse[1]+warehouse[2]+…+warehouse[i]-i*average 则,总代价可表示为:|k|+|sum[1]-k|+|sum[2]-k|+…+|sum[n-1]-k| 这个式子可以看成在水平数轴上寻找一个点k,使得点k到点0,sum[1],sum[2],sum[3],…,sum[n-1]的距离之和最小,显然k应该取这n个数的中位数。至此问题解决。 给出详细注释代码: #include "stdafx.h" #include <iostream> #include <algorithm> #include<string> using namespace std; const int X = 100000; double sum[X],warehouse[X]; int n; double Abs(double x) { return max(x,-x); } int _tmain(int argc, _TCHAR* argv[]) { while(true) { double total = 0; double mid=0; cout<<"请输入仓库数目:"; cin>>n; //读入n个仓库的值,并计算总数 for(int i=1;i<=n;i++) { cout<<"请输入第"<<i<<"个仓库的存量:"; cin>>warehouse[i]; total += warehouse[i]; } //计算每个仓库应该最终存储的值 double average = total/n; //计算sum数组 for(int i=1;i<n;i++) sum[i] = warehouse[i]+sum[i-1]-average; //排序后打算去中位数 //sort采用半开半闭区间,所以排序为0~n-1 sort(sum,sum+n); //这个可以自己举个数字就知道了 if(n%2!=0) { mid = sum[n/2]; } else { mid=(sum[n/2]+sum[n/2-1])/2; } cout<<"应该从1开始,运输"<<mid<<"货物,然后依次保证符合条件即可"<<endl; double ans = Abs(mid); for(int i=1;i<n;i++) ans += Abs(sum[i]-mid); cout<<"总成本花费是:"<<ans<<endl; cout<<"----------------------------------------------------------------------"<<endl; } return 0; } 思路借鉴了:http://hi.baidu.com/hujunjiehit/item/54204f01931ee6c49157184c 错误之处欢迎留言指出..

2013-06-02 · 1 min · bystander

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

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

2013-05-13 · 1 min · bystander

分享几个电子书资源站点

看到书签里有好些电子书的资源站。今天心情不错。遂起了分享的念头。。 对于计算机相关专业人隆重推荐小书屋 作者很认真的在分享技术/安全/心理学/技术PPT方面的书籍。算是国内技术书籍比较好的分享站点了。 如果你没有找到自己喜欢的书。那么试试forfrigg,是一个电子书籍整合站点。使用该网站。不只可以下载kindle书籍。更是能够搜索新浪,doukan等诸多网盘内容。实乃书籍下载必备引擎啊。 什么?你只想下载百度文库的?没积分?好吧。那我告诉你一个类似的镜像站点–文库大全,这个站和百度文库差不多。资源很丰富。想下什么。就去下吧。。 如果在这里没找到。。而你发现百度文科的积分是0 1 2 5那么试试帮手吧。免费下载。原版哦。稍多一点的积分就不可以了。如果你和博主私交不错。我帮你搞定。 如果你是大牛。。只喜欢看英文原版的。。那么先去七彩英语看看吧,优秀的英文电子书下载站。从技术到小说应有尽有。界面也漂亮。 还嫌少?那去国外溜达吧。ebook-downloader 随时欢迎你的光临。全球最大电子书下载平台。。尽情享受阅读的快感吧。。 update:感谢@Shiyao Yu的推荐-皮皮书屋。很小众。但资源很全。需注册。注册用户每天可下三本。最喜欢小众什么的了。我试着搜了一下计算机的。确实挺全。 ps:如果你收藏了其他的站点。不妨留言回复。

2012-10-18 · 1 min · bystander

C#调用Matlab引擎

 最近在使用matlab的时候。求多元函数取得最小值的时候。变量的值。于是就用到了sym符号。结果在C#中调用时总是出错。后来Google了N久发现是符号工具箱是无法编译的。。后来找到了替代方法。就是调用matlab 引擎。当然要稍微麻烦一点。因为调用引擎这种方法参数传递比较麻烦。我只想到了通过C#把需要计算的值保存到文本中。然后matlab中load进来。计算完成后 save出去。。 调用matlab引擎类似于在C#中新开了一个进程。然后执行一些命令。之前需要引用Matlab Application Type Library。这是个com组件 然后在程序里使用 using语句 using MLApp; 然后就可以正常使用了。使用我试过的有两种方法 MLApp.MLAppClass matlab = new MLApp.MLAppClass(); matlab.Visible = 1; string command="figure(1)"; matlab.Execute(command); matlab.Quit(); 很简单。Visible设置可见性。。command表示要执行的命令。 另一种是 MLApp.DIMLApp matlab = null; Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application"); matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.DIMLApp; matlab.Visible = 1; string command="figure(2)"; matlab.Execute(command); matlab.Quit(); 不知什么原因,第一种方法我没有调用成功。第二种调用成功。欢迎讨论。

2012-08-09 · 1 min · bystander

SQLServer超时时间已到解决和一套控件库

 在最近的一个程序中,因为频繁的操作数据库,莫名的出现了如下的错误: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 按理说这应该是没有关闭数据库连接或者dataset,可是查了一下。发现都关了啊。遂可以表述为原因不明,但是通过在数据库连接字符串中添加max pool size=512 这个数字可以自己设。就可以了 这篇文章短是短了点。。好吧。那顺带分享一套非常精美的C#控件。 RadControls-For-WinForms 控件2012 RadControls-for-WPF控件2012

2012-07-13 · 1 min · bystander

降级论

 相当精彩的一篇文章『降级论』,收藏分享。精彩的部分突出显示了。 几乎一年没有写博客了,说没时间那是借口,唯一的原因是,年纪越大越发觉自己肤浅。有些想法还没提笔,就发现很幼稚,就不敢发出来贻笑大方了。这次先给大家说个小故事: 从前有三个屌丝,聚在一起做网络,提供免费的网络服务,砸锅卖铁,通宵达旦,除了卖肾啥都做了。3年后终于做到了五百万用户,对于年轻人来说,能把五百万人玩弄于鼓掌之间,已经是很牛逼轰轰的事了,不过用户越多,成本越高,每年服务器、带宽租金、房租水电、广告运营等成本,已经达到了十七八万,屌丝们不得不面对一个终极问题:如何盈利? 屌丝们定了三盘沙县水饺,围着一箱子的冰啤酒开始计算:按照最近一月的登陆情况来看,四百万个账号已经不活跃了,真正有商业价值的只有一百万人,如 果开通xx功能,收点高级会员费,让其中1%的人升级为高级会员,每年付30块钱年费,那么每年收入就是100万x1%x30元=30万元!不错嘛, 扣除十七八万的运营成本,还剩毛利润12万,每个屌丝年底能分到4万大洋,如果按照打工者的算法,这三个人每人月薪3333元,木有奖金,木有津贴、木有任何福利,上班还得带自家的电脑。 尽管如此,屌丝们还是激动得热泪盈眶:老子有钱啦!老子有钱啦!!!那一夜,人们看到三个发疯的屌丝在屋顶翩翩起舞。 韩寒说,中国人民是最有忍耐力的族群,一点好处就感激涕零。他一定不知道,IT创业界里的屌丝,才是这群傻逼中的战斗机。他们可以平静地忍受每年都持续亏钱,而且还能信心十足的对所有人说公司的状态非常好,如果有一天居然收支平衡了,他们会激动的趁夜难眠,比北朝鲜倒掉还开心。 本文开头的三个屌丝,其实是非常幸运的,至少能做到月薪3333元。大部分的屌丝在第一年做到几万用户的时候就会挂掉,原因众多,最主要要的是意志太弱,受不了最初的寂寞;意志稍微坚强点的会在第二年第三年慢慢挂掉,原因主要是资金断裂、团队分裂;能成功熬到第四年还没饿死、还没被口水淹死、还没被肠胃病颈椎病腰肌劳损折磨死的,甚至员工不减反增的,基本上属于神仙级别了。 我为什么要说三个屌丝的故事呢。首先是因为这是身边每天都在发生的故事,其次是因为感到可惜, IT界在我眼里一直是一个无比高级的职业,聚集着全球最聪明、最富有的人类精英。以IT创业界的青年们的智商,他们可以做成任何一件事情,包括改造银行到制造汽车到发射航天飞机 。结果这帮人却整天在蓬头垢面得为3k的月薪而挣扎,太悲催了。 为什么用悲催这个词? 如果一个人生下来就在山沟沟里,一辈子都没机会去见什么好东西,这不叫悲催,这只叫苦难; 而如果一个人生出来有一个奇怪的特异功能:皮肤出来的汗水会凝结成昂贵的水晶,本来只靠出汗就能赚钱,结果这傻逼居然觉得出汗这个行为太低级,做手术把自己的汗腺全给切了,而且丝毫没有意识到他做了什么傻事,这才叫真的悲催。 我们IT界中的很多人,生下来就是有这个出汗成水晶的特异功能的,正是因为这种与众不同,这群人能混入牛逼的大学,整天打网游还能写出像样的毕业论文, 拿到学位,进外企,考CPA,做咨询、做证券分析,研究高分子材料,做电子商务,做云计算。。。一级一级的上升,直到有一天,发现身边的人里,已经没有一个不是CPA,不是咨询师,不是高级研究员了,身边的人全是业界精英,个个都超级强悍。在这个所谓的高级圈子里,自己并没有任何过人之处,只不过是just another analyst而已。在高级圈子里拼的头破血流,最后也只能混到给台湾人整理数据而已。莫然回首,发现当年的血气方刚、年少时的无限梦想,进化成了一身肥胖的赘肉。这个时候,有个旁观者说:“升级到头了,该降级了” 当一个社会疯狂鼓吹快节奏的时候,一定需要有人来宣扬慢生活;当全社会跟打了鸡血似的吹捧升级的时候,一定需要有人来说说降级论。 IT青年们喜欢打游戏,喜欢升级。他们的人生也和游戏一样,沉醉于不停的升级中,不仅喜欢升级自己手上的技术,把MySql改成MongoDB,把Apache升级为Nginx,在Mac上装Ubuntu,Ubuntu里再装个虚拟机去跑Mac OS。。。IT青年们也喜欢升级自己的人生,从程序员升级到项目经理,再升级到技术总监或产品总监,再升级到合伙人。。。 在不断追求升级的过程中,所面临的一个很大事实是:当一个人从A刚升级到A+级的时候,其实这个人的能力层级依然只是A的层级,还未胜任A+的层级,他必须要到A+的后期,才可以胜任A+。就好像一个高中生,高考完之后,虽然理论上已经属于大学生了,但是他的实际能力依然只是高三毕业的水平,除非他全部pass了大一的期末考试。同样的道理, 这个世界上有很多人的身份和称谓,都是在描述“未来的自己”,而不是现在的自己。 当你从销售员升级为销售经理的时候,你自我感觉很好:“我现在是销售经理了”,但是这个时候 ,你并未通过公司对你作为销售经理这一年的工作成果的考核,你只是一个“未来可能是合格的销售经理”的前身。如果年终考核你失败了,那么这一年最准确的描述是:一个销售员,占了整整一年销售经理的位子,最后失败了。而且这一年一定会过的很累,因为通过考核的其他销售经理,才是真正胜任这个层级的人,跟一帮真正属于这个圈子的人厮杀,就好像拳击馆里当陪练的小角色,去和泰森比了一年的武,怎么可能不累呢? 当我07年进入互联网行业的时候,就是那个拳击馆里陪练的小角色,我被迫去跟全国各地的泰森比拼,结果累的半死。后来我开始反思最初的目标,为什么要在自己身上挂一个“拳击高手”的招牌,被那么多泰森追着打? 我把这块招牌卸了,找个完全没练武的人去比拼,不是更容易赢么?于是果断照做,去找了一个没人懂拳击的小乡村,做了纯英文的Tucia.com(需翻墙),只做国外的业务。在那个地方,作为一个知名武馆的拳击小陪练,我成了村子里拳击技术最高超的人,受人仰慕,还开武馆教人拳击,活的非常滋润,而且在教人拳击的过程中,自己的拳术也比以前提高了很多,发展出一套属于自己的拳法,我虽然进不了泰森们的大圈子,但他们也进不了我的小圈子。 关于圈子,有一个很赤裸裸的现实:不会是你进入圈子,只能是圈子进入你。很多人会四处找关系,“帮我介绍给xxx吧,我想进入你们的圈子”,这样的人是永远进不去这个圈子的,因为圈子的天性是,永远追求更高一个层级的人。而我们的大部分人,其实都在以低一级的属性,占着更高一级的位子,徘徊在更高一级的圈子边缘,与更高一级的人竞争,幻想着自己可以升级到那个圈子里去。也许永远进不去,悲催的努力一辈子;也许运气好,某一天真的进入这个圈子了,但那个时候又会有下一个目标,希望进入更高级的圈子,这是一场没有终点的战斗。永远的追求升级,永远的累。 有没有想过降级呢? 如果一个来自微软的高级工程师,辞职去一个养猪场做开放平台经理,那么他的到来不仅会让养猪圈感到无比荣幸,更是意味着,利用他在IT界训练出来的高效工作方式和逻辑思维能力,他可以掀起一场养猪行业的革命,使得20年后才会出现的人性、高效、开放、协作、健康的养殖方式提前到达。在这场革命中,他会活的非常有价值。这种价值,在原先的圈子里,是完全体验不到的,因为他此前的所有工作,只是在满身疮痍的windows系统上不停的打补丁,无论打多少都逃不开产品衰落、被人鄙视的命运。 很多人的命运,都像是上面那个微软工程师。只需要降级,就能创造更大的价值,也能获得更大的满足。那为什么不呢?为什么要死死抱着那个所谓的“高级职业”不放呢? 去年我曾犯贱去趟了移动互联网的浑水,做了个手机app,刚开始的时候感觉很高级,但很快,铺天盖地的竞争对手就出现了,我又发现自己陷入了07年一样的场景:作为一个小小陪练,我他妈的又被一帮泰森们给围住了。当泰森中的战斗机—微信,变得无比牛逼之后,我就知道,战胜这群泰森是绝对不可能的事情了。于是我再次投靠了“降级论”,把自己从牛逼哄哄的移动互联网行业,降级到了一个被人不齿的低级项目:Tucia Baby。 这个项目虽然是传统行业,但是我们基本上是按照互联网产品的思路去做的,除了拍摄需要来店里以外,其他一切,包括营销、预约、客服、后期、选片、取片、客户关系等,所有环节都放在网络上,尤其是微博(@tuciababy官网)。当然,最重要的是,作为一个脑残的果粉,我按照iPhone的做工和品质去要求每一张作品,必须达到我们能力可以做到的最好水准,不计成本的最好水准,才允许送给客户。正式接客不到两个月时间,虽然还远未达到成功,但目前已做到每天都有客户订单,财务上已实现盈利,未来相信一定会比大部分app开发者更光明。(ps:我们没有请工商、税务、城管去吃饭喝酒泡桑拿,也没有塞钱给任何政府机关。 当你的产品真的用心做到很好的时候,其实你不需要讨好任何人的。 ) 这个项目让我沉思了很久:07年我曾把一个纯纯的web2.0网站做到了alexa中国区前1000名(如有质疑,请查询2010年附近的tucia.com排名),结果一路亏损,到最后只剩下一个员工;11年我把那个纯纯的app做到苹果官方推荐区免费榜的第一位(点此看截图),那段时间每天四五千iPhone安装量,结果一路烧钱,到最后濒临关闭;而如今,我只需把自己从纯纯的互联网降级下来,做一些看起来有些“低级”的项目,居然就能立即实现收支平衡。 除此以外,我还发现一个现象, 中国消费者在与奸商们的长期斗争中,已经培养出了一种非常苦B的品质:只要不被坑,他就谢天谢地。如果商家严格做到了承诺的每一件事情,客户就会感动的泪如泉涌。 如果商家不仅做到了所有承诺的事情,还很贴心的提供了一些额外的服务(比如我们给每位客户赠送非常好吃的樱桃和昂贵的进口巧克力作为甜点),那么客户就会激动的哭天喊地、奔走相告,推荐给他认识的每一个人。 其实这片肮脏的国土,就是上天赐予IT青年们的最好机会。 在一个不会练武的村子里,只要你会打两拳,你就是拳术最厉害的人;在一个没有服务意识、忽视产品质量的土地上,只要你用心做服务,用最高的标准去要求自己,你就会成为这块土地上最出色的商家;在一个没有现代管理意识,不懂网络、不懂微博、不懂用户体验、不懂口碑传播的粗犷社会里,你只需要把之前花在IT产品上的心思的10%拿过来用,就可以秒杀一切天朝对手。 所以, IT青年们,当你在为网站的转化率苦苦思索的时候,当你在为app的活跃度辗转反侧的时候,当你在为融资计划苦苦哀求各界大佬引荐的时候,也许犯了一个错误,也许你们的脑子最值得闪光的地方,不是去悲催的IT界当炮灰,而应该是去按摩界、餐饮界、烧烤界、早餐界、理发界、家政界、按摩界、送花界、纺织界、成人用品界、现代化养殖界、有机蔬果界、个人护理界、汽车修理界。。。。与IT界相比,这些行业的确无比低级,他们的老板连qq都会发音成“抠抠”,他们的员工一辈子都没用过Email;跟他们解释什么是SEO,什么是用户体验,什么是数据挖掘,他们会在听你说完之前就开枪自杀掉。正是因为如此,这些行业才是如此的不堪一击。正是因为如此,当智商高达147的IT青年还在为3k薪水拼命、而智商不到50的烧烤店老板正坐在porsche里玩着前面那位青年开发的app的时候,我就忍不住仰望星空。 这些原始而纯粹的行业,正在等待IT精英们的降级,如同蒲公英一般的伞兵,在黑夜里从天而降,长驱直入,用最智慧的产品、最优质的服务拯救这些早就该死的行业,屌丝的生命将会绽放出银色的羽翼,无比丰满,无比性感。 最后注意,请珍惜生命,远离我的微博:@meditic

2012-07-07 · 1 min · bystander