别让技术蒙蔽了双眼——语盒广告的手起刀落

很长一段时期,我都收着语盒用户的钱,用来支付所有的语盒服务器租用开销,但是在2011年8月才平衡。我在构建整个同步+支付系统的时候,第一驱动还是技术,虽然当时公司经济危机,没有发出来工资,导致心里压力有些大,但毕竟不是驱动我制作所谓的 yuchsign机制——也就是现在的官网的同步+支付模式。

技术未知,对于我来说跟前途未知一样恐怖,只有不断的工作,不断的提高自身的技术修养,才能面对时刻变换的市场环境和人才需求。很久以前……我在学校的时候花了大量的时间和精力去学习 C/C++ 开发游戏——游戏对于我来说,就像航塔灯一样,从 printf(“Hello world!”); 开始,一直到3D渲染技术,最后到游戏引擎,我都是使用 C/C++ 进行开发,自然就会对这个开发环境相当有依赖感,同时生活于老板画饼的氛围中,日子过的比较平静、简单,却不乏激情。直到开始找工作,突然发现,自己学的windows的C/C++开发没有用了,到处都是Java,JavaScript,Android,iOS,PHP的招聘,走出来,才发现自己的视野很小。

穷则思变,便开始了疯狂的学习,语盒项目就是我的探索。前前后后有一年了,不断的新技术的学习,让我找到了些许自信,那句话没错——任何一个C/C++ 高手能在2周内学习完Java,然后接着是GAE+GWT的网页构架系统的学习(官网就是这个构架),然后是HTML+CSS的学习,突然间的信息爆炸使得我开始一段时间十分痛苦,还好之前有学习MFC的经历,就像一个人如果是走缓坡,就是循序渐进的学习;如果是陡坡,就是突击式学习。MFC是攀岩。

这种状态下,又过了大半年,我变得比较敏感了,敏感于新技术的发布,新技术的学习,如何自动发邮件?如何添加广告?从技术驱动的方式考虑开发了——这点对于大公司来说完全没有可能,甚至中小非技术公司也没有可能,而我,只是一个技术工作者,面对用户的时候,也许我考虑的是这个技术很酷,或者这个方法我之前不会,现在我就得试试。

嗯,移动广告我还没有接触过。 继续阅读

关于语盒的收费方式

语盒的收费方式其实很简单,按推送账户的数量时间收费,多一个推送用户,使用时间多一点,就要多交一份钱,如果你中途觉得不好,行,自主降级,然后把升级的费用转化成时间,加到账户上面去。

用户等级 一个星期(168小时) 一个月(30天) 一个季度(90天)
VIP0 ¥2 ¥8 ¥20
VIP1 ¥2 ¥8 ¥20
VIP2 ¥3 ¥12 ¥30
VIP3 ¥3 ¥12 ¥30
用户等级 推送账户数量 升级费用(一次性)
VIP0 1个有效账户 (默认)
VIP1 2个有效账户 ¥3
VIP2 3个有效账户 ¥4
VIP3 4个有效账户 ¥5

当然,如果你选择一次性支付一个月,要比每个星期便宜2天的费用;如果一次性支付一个季度,会比支付一个月便宜14天的费用,这个策略也是跟市场上学的:比如我去联通办宽带,如果年付,则比月付少两个月的钱,还不要初装费;买2L的可乐,总比600ml的可乐要的单位毫升的价格便宜,这个也是一样的道理,问我为什么?经济学俺不懂,但是知道通货膨胀,贬值……

之所以我还保留了星期支付的方式,不是因为代码不好改,或者说懒,或者说给用户一种某种意义上的“比较”(老罗在他的2010演讲中也说过这种“价格比较”),而是留给用户一种选择,而不是绑架用户。 继续阅读

关于黑莓开发中的local i18n的冲突问题

昨天早上醒来,有人邮件我说,客户端报一个 错误 Uncaught Exception:java.lang.Error

我想,又是什么黑莓的问题吧,所以就草草的回复了这个事情,后来发现,报告的人挺多的,而且都是安装了新浪微博的最新的黑莓客户端导致的,这下紧张了,记得看《创业家》里面有一句话,”永远不要和(新浪)微博竞争“,这回不但竞争了,还TMD冲突了,这下玩完儿了。

火速解决这个问题!首先是在模拟器上测试,立刻发现是

import net.rim.device.api.i18n.ResourceBundle;
...
public static ResourceBundle sm_local = ResourceBundle.getBundle(localResource.BUNDLE_ID, localResource.BUNDLE_NAME);
public static final String[] fsm_apnListString =
{
	sm_local.getString(yblocalResource.APN_LIST_NULL),
	sm_local.getString(yblocalResource.APN_LIST_CMNET) 	+ " cmnet",
	sm_local.getString(yblocalResource.APN_LIST_UNINET) 	+ " uninet",
	sm_local.getString(yblocalResource.APN_LIST_3GNET) 	+ " 3gnet",
	sm_local.getString(yblocalResource.APN_LIST_CTNET) 	+ " ctnet",
};

其中运行到第一个就不行了,调试的时候直接代码中断到这一行,继续运行,就抛出所谓的 java.lang.Error 异常了。我第一感觉就是,和新浪客户端的ID重复了,只是一种感觉,没有依据,就找到 localResource.java 这个文件:

public interface localResource {
    // Hash of: "local.local".
    long BUNDLE_ID = 0xxxxxxxxxxxxxxxxL;
    String BUNDLE_NAME = "local.local";
...

把这个值告诉了开发新浪微博黑莓客户端技术人员,因为我没有看到那个 // Hash of: “local.local”. 的提示,认为RIM会把把包的资源路径加入进来参与生成的,比如什么com.yuchting.yuchberry.client 等等字符串标示。

但是惊人的是,在新浪技术人员的查看下,发现咱两的ID是一致的,当时我就蒙了——怎么可能?后来想到的原因,很可能是他们新加入的模块的开发工程师和我看了同一套教程,都命名为 local.local 那么这个字符串的标示的hash不就一样了么?

于是吧local.local 换成了 local.yblocal 就OK了,大量的替换,svn的版本处理迎面扑来。

RIM 的RUNTIME 没有android context 的概念,完全都是JVM大环境下的操作,读取另一个已经注册的资源的不存在的符号,当然会over。不管怎么样,这个事情在我积极的更改、发布之后就告一段落了,虚惊一场,虽然最后在晚上10点发布完毕之后还出了点小插曲,总归于要结束了,可以好好睡一觉了……

第二天……

可是事情还没有完,早上起来,发现微博粉丝多了40个,下午到了60个,注册用户两天上升100多个,同步数稳步上升,好现象!很happy,准备把安卓版本的上传附件功能写完了。

随手打开GAE,靠!发送邮件的 quota 又到限制了,刚刚才把GAE的Billing关闭(不然每周$2.1,实在受不了),总不能让我又开开吧,昨天才研究了php怎么发送邮件,今天就要赶上自己写一个?为啥都在我刚刚研究的时候就出问题了呢?谁给我测试时间?

急急忙忙的吧php的发送邮件功能添加上,前两天才研究的BlueHost 邮件系统,开了一个邮件帐户 noreply@yuchs.com ,php发送邮件代码,立刻派上用场,直接上!

<?php
	if(!isset($_GET['to']) ){
		echo "<H1>403 FORBIDDEN</H1> ";
		exit;
	}
	
	$to		= $_GET['to'];
	
	if(!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $to)){
		echo '\'' . $_GET['to'] . '\' is not mail address form.';
		exit;
	}
	
	$from	= "noreply@yuchs.com";
	$reply	= "yuchberry@gmail.com";
	
	$messageID = '<' . rand() . '-' . date("Y_m_d_H_i_s") . '@yuchs.com>';
		
	$headers  = 'MIME-Version: 1.0' . "\r\n".
				'Content-type: text/plain; charset=utf-8' . "\r\n".
				'From: '. $from . "\r\n".
				'Reply-To: '. $reply . "\r\n".
				'Message-Id: '. $messageID . "\r\n";
				
	$subject = "=?UTF-8?B?".base64_encode("语盒官方服务提醒")."?=";
 
	$content = '你的语盒使用时间已经快到了,稍等一段时间后服务器会暂停服务。'."\r\n".
				'你可以登录官方网站 http://www.yuchs.com/ 进行时间的充值,继续使用,或者查看FAQ,进行自架服务器使用。' . "\r\n".
				'感谢你对语盒的关注和支持!' . "\r\n".
				"\r\n".
				'语盒开发者敬上!';

    $result = mail($to, $subject, $content, $headers);  
	
	if($result){
		echo 'OK';
	}else{
		echo 'Failed';
	}
	
?> 

这段代码是不是要求在自己的web主机上开启一个邮件帐户,我现在还是不知道,反正我是在web主机上加了一个邮件帐户 noreply@yuchs.com ,总之能解决问题就行。乒乓五四又一天过去了,终于,帐户邮件又能发送了。

哎,一天的劳命哪~

“不可避免”的Jobs

【转自 点点开发者日志

如今在IT界,不知道乔帮主的,几乎很少了,一般闲聊,或者争辩的时候,总会拿出乔帮主的某某经历做自己的论据;或者看着昂贵 iphone 成为街机,等等等等,都无法避免他的影子出现在自己的周围,就像那天看见因为乔布斯辞职,新浪微访谈中,有人问周鸿炜,你认识乔布斯么?你见过他么?他对你产生影响么? 周说,每个人都无法逃避他的影响。

今晚不想看书,不想写程序,刚看完乔布斯的斯坦福大学演讲,比较激愤。

之前,我对乔布斯的唯一印象,就是《Pirates of Silicon Valley》里面那个追求自身价值近乎于宗教般执着的疯子,比片子里面阴险的比尔盖茨更让人受不了。我倒是比较崇拜沃兹尼克,一个技术达人——当时我的人生定位就是做一名技术,或者说,一个木匠,一个工程师。或许是那部片子拍的比较片面,而且是1999年拍的,那个时候没有ipod,没有iphone,ipad等等,也许拍的不是很全面吧。

之后,我对他的就不怎么了解了,今天偶尔看到他的演讲,说说我的看法。

首先是演讲的声音,我之前总以为,老大应该是比较沙哑,具有穿透力的声音,该像《教父》里面的马龙白兰度那样让人觉得害怕,敬畏。还有之前唯一亲眼见过的身价过亿的大Boss,也是声音洪亮,低沉,让男人皮软,让女人撒娇。可是乔布斯却是比较中性的声音,和他的白胡子秃顶完全不相匹配,那应该是年轻人的幼稚的声音,应该是小伙子的表白的声音。这点,我相当无法理解。

然后是“演讲稿”,的确,乔布斯作为一个大学毕业的邀请发言嘉宾,必须得有像样的演讲,那么演讲稿必然不可少;要在短短的十几分钟内把自己的人生前面有价值的东西告诉后生们,必须得有长时间的准备,必须要演讲稿,这点无可厚非,但是——这里的“但是”转的有点大,我曾经参加过国内两所顶级大学之一毕业典礼,典礼上也邀请了一名校友企业家,也上台做了十几分钟的演讲,没有演讲稿,没有层次,没有组织,一顿乱侃,说了自己的找投资的经历,说做技术就得到处让人知道你做的技术,不然人家打电话相互询问好友是不是可以投资的意见的时候就不知道你的价值,云云,我是如此的仔细倾听这个演讲(因为我是旁听的毕业典礼,所以很仔细地听),都只能听出这一点点他自认为有价值的内容,其他的同学们呢?好了,不说了,不然晚上要喷火,睡不着了。

再者是演讲内容,不得不承认——相当精彩,相当让人有回味的余地,我得出的结论就是3点:

  1. 不能逼迫自己从事不喜欢的事情,做自己喜欢并且认为有价值的事情。
  2. 与死神见一面之后才能懂得更多
  3. 成为一个饥饿的疯子,疯狂的向未知领域觅食

这些都是在各种励志、创业的期刊书籍里面常见得到的,乔布斯巧妙的将其结合自己的经历,再说一遍,非常具有说服力。当你看得这些书,这些演讲越多的时候,你就难免会发现他们相互关联的地方,再听,就都一个样了,然后,就会发生共鸣,共鸣,就会模仿着去做。

也许,人生就是在学习、模仿之中成长,只不过在最辉煌的时候,做出了那一点点创新,之后,很多人都因为那些创新而记住了你,然后你又重新被人学习、模仿,然后创新,万物轮回。

乔帮主,一路好走,你当初所说的改变世界,你已经做到了,现今人们几乎无法避开你所带来的影响了。

PS:写完这个日志之后,老乔竟然挂了,哎最后一句“一路好走”实在不吉利。

第一次团队会议

【转自 点点开发者日志

前天晚上,也就是2011年的8月19日的晚上,我和团队一起通过YY畅想了一下未来。

没错,我在画饼,因为自从语盒研发加入两位团队成员以后,就不是在为自己一个人负责了,而是为了了整个团队。之前我一个人,很自由,因为我喜欢编程,也喜欢写完程序后,很对人因为这个产品而感激我的那种奇妙的感觉,哪怕我不要钱也会干,也的确到目前为止,赚取的费用完全交给了主机出租商,或者买了开发机,所剩不多,我等于没有拿到一分劳务费,就仅仅自己爽了一把。

可是现在不同了,因为我一个人无法画出很好的UI,必须请人帮忙,这个时候我又没有多少钱可以支付,只能给他画饼;我一个人也做不了论坛,网站,多平台等等,都需要人来帮我,唯一的办法就只能是画饼。

画饼的过程是相当刺激的,相当有迷惑人的,就像吸鸦片,可是带来的后果,如果没有达到预期的目标,可以想象,是更加的失望,更加让人觉得我这个人信誉全无。

也就在同一天的上午,刚刚经历过自己的第一个团队(公司)被全权收购,老板兼创始人成为了同事,一起划到新公司的名下,还好,名字没了,团队还在。我本来很想写一下自己从一开始进入公司当萝卜,再经历过一次性涨一倍的工资的辉煌,再到最后被收购的全部过程,可是,提起十指,却不知如何说起。

正所谓成功的经验都不同,失败却都差不离,但此时一时很难想起,到底有哪些问题的存在,哪些根本性的问题导致公司最后的散去,市场变化?产品无创新?这些都无法一一列举,但有一个原因却一直提醒着我,创世人自身的屡次判断失误和不作为,是导致最后崩溃的最最重要的原因。

我并不是之前团队的创始人——连之一也不是,所以我可能无法了解到,这些判断的失误,是什么最终导致的,可是他的不作为,我是看在眼里,力荐过几次,都没有凑效。正所谓:

创业如逆水行舟,不进则退!

时刻地提醒自己,如果你不想踢他个10比0,那么你连赢这场球的机会都没有——也许就是那种“置于死地而后生”的悲凉之苦吧。

语盒团队阐述了每个人的创业原因,阐述了对于未来3个月的期望,同时小小的争论了一下关于盈利模式,或者说商业模式的制定,有些所谓的创业经教导我们说,在创业之初,就应该把商业模式想好——不是找VC都需要一个神马《商业计划书》么?但是我现在还真的找不到一个固定商业模式,能够从头到尾的指导一个团队从小到大。但团队成员或许更加看好这个东西。

是找VC,还是做产品研发?是拿个小的基本收入,还是饥饿的度过艰苦的研发初期?

很难否定,这次创业,不会是从上一个失败走到另一个火坑。也就不乏新团队的第一次谈话从最初的商业模式,找到一个靠山VC之类的话题说起——拿着商业模式+产品,去找一个VC,然后把钱忽悠到手,拿着牛逼的工资,做着自己喜欢的事情。

但是直觉告诉我,这个现在行不通,不用别的什么理由。

那种“悲凉”的感觉又从心中泛起。自从看过《亮剑》(小说版),《狼图腾》,《乔家大院》,《我的团长我的团》,《再见萤火虫》等等一些列能够人无法回首的小说电影之后,一颗孤独、悲凉、壮烈的精神种子就在心中种下了,我自己的心提供了土壤,它在茁壮成长。

总会想到失败,总会想到一个人在很小的房间里面蓬头垢面的开发,总会想到吃着馒头喝着粥,总会想到老婆离我而去,总会想到自己生病之后拼命的争扎……没有万人空巷,没有欢呼一片,更没有奔驰宝马惊涛骇浪。

哪怕让父母真心的开心一次都可能成为奢侈的愿望。那个在《狼图腾》中出现的断臂滴血怒视猎人的狼,一直出现在我的脑海中,那个真的是我自己的命运?

天道酬勤,别无他法

忐忑

【转自 点点开发者日志

这个和“神曲”没有什么关系。

明天凌晨,新版的YB,新版的官网、论坛,就要上线了,就像小学生写作文描述自己的心情一样——我怀着忐忑不安的心情,写下这些文字。

于此同时,yuchberry已经有了中文名字——“语盒”,迅速传播语言信息的小盒子。

不久前YB成立了一个松散的团队,在团队成立之时,我就描述了一个美好的前景,说在路的那头,有一座金矿,而我大概知道如何走这条路,但是,在我迈开第一步的时候,忐忑了……

之前,我是兼职做YB,虽说要断不断的拿着那份不多的薪水,但还是有些生活保障的。YB做出点成绩来,受到一些用户的些许追捧,感觉不能说开演唱会吧,但当老大的滋味总还是让人“飘飘欲仙”。

可是现在迈开的却是一个创业者的步伐,团队中的一个朋友已经在公司走辞职交接工作流程了,他现在没有参与多少工作,我自己身上的担子感觉沉重许多。

自己能够迈出这一步,其实的确是像书上那样讲的“都是被环境逼的”:找不到工作,公司拖欠工资,CPI飙升,老婆挣得比自己多等等等,这些,都逼着自己,TMD倒不如干一票,多少还有个回忆,失败了还有些教训,知道某些路走不得。

我从来不怕谈论失败,在团队成立之初,在描述美好前景之外,更多的是说的失败,产品发布低于预期,找不到投资,黑莓本身市场太小,用户太少,程序出现问题等等等,都是促成团队+产品的嗝屁的原因,而每一条都是能够举出很详细的例证来说明的。你想想,一个在小型创业公司呆过的人,看到过公司“起高楼”、“宴宾客”,在最后公司几个月发不出工资,自己也找不到好的下家,头脑里面存在的绝对不是像许三多那样的乐观“打牌没意义,修路有意义”的信念,而是一堆堆管理、研发的问题,甚至是生存问题……

如何在困难重重中找到一条路子,杀出来,就是当下最紧急的事情。

我自认为已经做了很多事情足够杀出重围,现在就看天的了。