CI框架源码完全分析之核心文件Codeigniter.php
$assign_to_config['subclass_prefix']));
}
/*
*php 程序运行默认是30s,这里用set_time_limt延长了,关于set_time_Limit() http://www.phpddt.com/php/set_time_limit.html
* 扩展阅读,关于safe_mode:http://www.phpddt.com/php/643.html ,你会完全明白的
*/
if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
{
@set_time_limit(300);
}
/*
* 加载Benchmark,它很简单,就是计算任意两点之间程序的运行时间
*/
$BM =& load_class('Benchmark', 'core');
$BM->mark('total_execution_time_start');
$BM->mark('loading_time:_base_classes_start');
//加载钩子,后期会分析到,这玩意特好,扩展它能改变CI的运行流程
$EXT =& load_class('Hooks', 'core');
//这里就是一个钩子啦,其实就是该钩子程序在这里执行
$EXT->_call_hook('pre_system');
//加载配置文件,这里面都是一些加载或获取配置信息的函数
$CFG =& load_class('Config', 'core');
// 如果在index.php中也有配置$assign_to_config,则也把它加入到$CFG
if (isset($assign_to_config))
{
$CFG->_assign_to_config($assign_to_config);
}
//加载utf8组件、URI组件、Router组件
$UNI =& load_class('Utf8', 'core');
$URI =& load_class('URI', 'core');
$RTR =& load_class('Router', 'core');
$RTR->_set_routing();
//如果在index.php中定义了$routing,那么就会覆盖上面路由
if (isset($routing))
{
$RTR->_set_overrides($routing);
}
//加载output输出组件,不然你怎么用$this->Load->view()啊
$OUT =& load_class('Output', 'core');
//又见钩子,这里你可以自己写钩子程序替代Output类的缓存输出
if ($EXT->_call_hook('cache_override') === FALSE)
{
if ($OUT->_display_cache($CFG, $URI) == TRUE)
{
exit;
}
}
//安全组件啦,防xss攻击啊,csrf攻击啊
//关于xss攻击:http://www.phpddt.com/php/php-prevent-xss.html
//关于csrf:攻击:http://www.phpddt.com/reprint/csrf.html
$SEC =& load_class('Security', 'core');
//加载输入组件,就是你常用的$this->input->post();等
$IN =& load_class('Input', 'core');
//加载语言组件啦
$LANG =& load_class('Lang', 'core');
//引入CI的控制器父类
require BASEPATH.'core/Controller.php';
function &get_instance()
{
return CI_Controller::get_instance();
}
//当然你扩展了CI_Controller控制器的话,也要引入啦
if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
{
require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
}
//加载你自己应用中的控制器Controller,如果没有当然error啦
if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
{
show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
}
include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
// 好的基础的类都加载完毕了,咱可以mark一下
$BM->mark('loading_time:_base_classes_end');
//路由获取了控制器名和方法名,比如说默认welcome/index
$class = $RTR->fetch_class();
$method = $RTR->fetch_method();
//这里CI规定一般非公共的方法以_开头,下面是判断,如果URI不可访问就show_404()
if ( ! class_exists($class)
OR strncmp($method, '_', 1) == 0
OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
)
{
if ( ! empty($RTR->routes['404_override']))
{
$x = explode('/', $RTR->routes['404_override']);
$class = $x[0];
$method = (isset($x[1]) ? $x[1] : 'index');
if ( ! class_exists($class))
{
if ( ! file_exists(APPPATH.'controllers/'.$class.'.php'))
{
show_404("{$class}/{$method}");
}
include_once(APPPATH.'controllers/'.$class.'.php');
}
}
else
{
show_404("{$class}/{$method}");
}
}
//又是钩子,该钩子发生在控制器实例化之前的
$EXT->_call_hook('pre_controller');
//又mark一个点
$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');
//终于实例化控制器了
$CI = new $class();
//钩子,不想多说了
$EXT->_call_hook('post_controller_constructor');
/*
* ------------------------------------------------------
* Call the requested method
* ------------------------------------------------------
*/
// Is there a "remap" function? If so, we call it instead
if (method_exists($CI, '_remap'))
{
$CI->_remap($method, array_slice($URI->rsegments, 2));
}
else
{
// is_callable() returns TRUE on some versions of PHP 5 for private and protected
// methods, so we'll use this workaround for consistent behavior
if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI))))
{
// Check and see if we are using a 404 override and use it.
if ( ! empty($RTR->routes['404_override']))
{
$x = explode('/', $RTR->routes['404_override']);
$class = $x[0];
$method = (isset($x[1]) ? $x[1] : 'index');
if ( ! class_exists($class))
{
if ( ! file_exists(APPPATH.'controllers/'.$class.'.php'))
{
show_404("{$class}/{$method}");
}
include_once(APPPATH.'controllers/'.$class.'.php');
unset($CI);
$CI = new $class();
}
}
else
{
show_404("{$class}/{$method}");
}
}
// 终于调用方法了,$this->load->view()把内容放到缓存区
call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
}
$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end');
$EXT->_call_hook('post_controller');
//这里就是把缓存区的内容输出了
if ($EXT->_call_hook('display_override') === FALSE)
{
$OUT->_display();
}
$EXT->_call_hook('post_system');
//关闭数据库的链接
if (class_exists('CI_DB') AND isset($CI->db))
{
$CI->db->close();
}
10 个不错的 jQuery 代码片段
[代码] 图片预加载
01 |
( function ($) { |
02 |
var cache = []; |
03 |
// Arguments are image paths relative to the current page. |
04 |
$.preLoadImages = function () { |
05 |
var args_len = arguments.length; |
06 |
for ( var i = args_len; i--;) { |
07 |
var cacheImage = document.createElement( 'img' ); |
08 |
cacheImage.src = arguments[i]; |
09 |
cache.push(cacheImage); |
10 |
} |
11 |
} |
12 |
13 |
jQuery.preLoadImages( "image1.gif" , "/path/to/image2.png" ); |
[代码] 在新窗口打开链接 (target=”blank”)
1 |
$( 'a[@rel$=' external ']' ).click( function (){ |
2 |
this .target = "_blank" ; |
3 |
}); |
4 |
5 |
/* |
6 |
Usage: |
7 |
<a href="http://www.catswhocode.com" rel="external">catswhocode.com</a> |
8 |
*/ |
[代码] 当支持 JavaScript 时为 body 增加 class
1 |
/* 该代码只有1行,但是最简单的用来检测浏览器是否支持 JavaScript 的方法,如果支持 JavaScript 就在 body 元素增加一个 hasJS 的 class */ |
2 |
$( 'body' ).addClass( 'hasJS' ); |
[代码] 平滑滚动页面到某个锚点
01 |
$(document).ready( function () { |
02 |
$( "a.topLink" ).click( function () { |
03 |
$( "html, body" ).animate({ |
04 |
scrollTop: $($( this ).attr( "href" )).offset().top + "px" |
05 |
}, { |
06 |
duration: 500, |
07 |
easing: "swing" |
08 |
}); |
09 |
return false ; |
10 |
}); |
11 |
}); |
[代码] 鼠标滑动时的渐入和渐出
1 |
$(document).ready( function (){ |
2 |
$( ".thumbs img" ).fadeTo( "slow" , 0.6); // This sets the opacity of the thumbs to fade down to 60% when the page loads |
3 |
4 |
$( ".thumbs img" ).hover( function (){ |
5 |
$( this ).fadeTo( "slow" , 1.0); // This should set the opacity to 100% on hover |
6 |
}, function (){ |
7 |
$( this ).fadeTo( "slow" , 0.6); // This should set the opacity back to 60% on mouseout |
8 |
}); |
9 |
}); |
[代码] 制作等高的列
1 |
var max_height = 0; |
2 |
$( "div.col" ).each( function (){ |
3 |
if ($( this ).height() > max_height) { max_height = $( this ).height(); } |
4 |
}); |
5 |
$( "div.col" ).height(max_height); |
[代码] 在一些老的浏览器上启用 HTML5 的支持
01 |
( function (){ |
02 |
if (! /*@cc_on!@*/ 0) |
03 |
return ; |
04 |
var e = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video" .split( ',' ),i=e.length; while (i--){document.createElement(e[i])} |
05 |
})() |
06 |
07 |
//然后在head中引入该js |
08 |
<!--[ if lt IE 9]> |
09 |
<script src= "http://html5shim.googlecode.com/svn/trunk/html5.js" ></script> |
10 |
<![endif]--> |
[代码] 测试浏览器是否支持某些 CSS3 属性
01 |
var supports = ( function () { |
02 |
var div = document.createElement( 'div' ), |
03 |
vendors = 'Khtml Ms O Moz Webkit' .split( ' ' ), |
04 |
len = vendors.length; |
05 |
06 |
return function (prop) { |
07 |
if ( prop in div.style ) return true ; |
08 |
09 |
prop = prop.replace(/^[a-z]/, function (val) { |
10 |
return val.toUpperCase(); |
11 |
}); |
12 |
13 |
while (len--) { |
14 |
if ( vendors[len] + prop in div.style ) { |
15 |
// browser supports box-shadow. Do what you need. |
16 |
// Or use a bang (!) to test if the browser doesn't. |
17 |
return true ; |
18 |
} |
19 |
} |
20 |
return false ; |
21 |
}; |
22 |
})(); |
23 |
24 |
if ( supports( 'textShadow' ) ) { |
25 |
document.documentElement.className += ' textShadow' ; |
[代码] 获取 URL 中传递的参数
1 |
$.urlParam = function (name){ |
2 |
var results = new RegExp( '[\\?&]' + name + '=([^&#]*)' ).exec(window.location.href); |
3 |
if (!results) { return 0; } |
4 |
return results[1] || 0; |
5 |
} |
[代码] 禁用表单的回车键提交
1 |
$( "#form" ).keypress( function (e) { |
2 |
if (e.which == 13) { |
3 |
return false ; |
4 |
} |
5 |
}); |
网站建设公司赚钱的案例分析
现在我想用托尔斯泰的一句话:“赚钱的公司都是一样的,不赚钱的公司各有各的问题”。就在今年,2013年,遇到了一个建站公司的“奇葩”,之所以叫奇葩,是因为如今那么多的建站公司中,绝大多数都赔钱或者支出平衡,竟然有这么一家还真是赚钱的。(不便写出公司名称,奇葩有点贬义,以下简称JP“极品”的意思)
前些日子加入了一个HMTL5群,里面成员是全国各地的建站公司,北京的也不少,北京做百度推广的建站公司,提起名字相互并不陌生,而且存在一种“好奇心”,你懂的,相互问问工资、提成、业绩、什么的。聊着聊着,这位“极品”就脱颖而出了。
他们有如下特点:
* 只有三名销售,主要负责报价、方案、跟进、合同、跟踪和结款。
* 每名销售每天能接10个客户咨询电话(公司每天接30个咨询电话,全国范围)
* 每名销售每月能签20-60万网站建设合同(公司主要经营网站建设,以企业网站为主)
* 销售月收入1万左右
* 普通企业网站成交价在2万以上
* 设计师和程序的月薪在8000以上
* 客户来源以SEO为主,百度推广为辅,公司有一名厉害的SEOer,只有在需要的时候才会打开百度推广
* 公司注册资金30万,地理位置北京4环边上,2008年成立,20名员工
* 公司网站百度权重2,谷歌PR4,日IP估计1500-2000
* 排在百度前三的关键词:北京网站设计,北京高端网站建设,北京网站设计公司,网站设计制作,网站建设制作,网站建设 北京,北京 网站设计,北京网站建设,北京 网站建设,北京网站制作。
我知道,你肯定不信,认为是在瞎吹。我跟一些朋友说的时候,他们的反应和你们一样。
以上信息有一部分是道听途说,有一部分是客观获得。不过有些信息是可以通过分析推倒出来的,我认为可信度80%。
我的分析如下:
第一:业务人员
人不在多,在于精。我相信这句话,有经验、有签单能力的销售,3名足以。能力不足的销售被称为(客户)“杀手”,比如“有名新销售来了一个月,给了60多个客户,一单都没出”。JP的业务员不仅是销售,还是项目经理,网站建设执行最麻烦,单独依靠项目经理、设计师、程序哪一方都是不成的,要求哪一方都要靠得住,不能存在短板(木桶理论),我想三名月薪1万的人组成的TEAM,能轻松搞定一个几万块钱的项目。
第二:客户
1 客户数量:我们公司有个网站日IP100多,每天来3-5个咨询。由此推断,日IP1500,的网站,每天30个咨询不是什么难事儿,更何况是全国范围。
2 客户来源:JP公司百度推广占40%,SEO占60%。百度推广来的客户有很多不怎么靠谱,都是比价的,或者随便问问,要做也得等几个月,所以还是自己优化靠谱,命运掌握在自己手里。百度跟烧钱没什么区别,要咨询你的话,平均一个客户得300元(支付给百度推广)。
3 客户质量:每人每天接10个客户咨询电话,里面肯定有不少质量差的(预算低的难以置信、意向低、随便问问)。不过JP不愁客户,遇到不靠谱的客户直接Pass,几十分钟后又能来个新客户,每天新客户源源不断。与大多数建站公司不同,遇到个意向低的客户,也要死缠烂打,为什么,因为一天可能就来这一个,错过这个,今天就没有客户上门了,哪怕是“随便问问”的客户,也竭尽全力,浪费资源(不要在一棵树上吊死)。
第三:核心竞争力
我曾问过JP签单的主要理由,他们自称是:客户喜欢他们的案例。我也看过他们的案例,企业网站设计水平确实不一般,属于高端大气上档次的那种,而且案例数量还真多。一般的建站公司也就只有几个拿得出手的“漂亮案例”或者“知名客户”。由此可见,JP的核心竞争力是“设计”,再往前推,“设计”依靠设计师,据我多年从业经验来看,能做出这些案例与如今月薪8000-1万的设计师水平相符。估计几年来,这家公司在设计方面的投资不是一笔小数目,“不简单呢”。
第四:客户感受与成交率
客户在咨询JP之前,一般都是看过他们的官网的,里面大量案例,甚至有自己同行的案例,客户对他们的信任感油然而生。拿起电话咨询之时,心理已经有了倾向性。“不用比老虎跑得快,只需比你跑得快。”客户在寻找建站供应商时,看过诸多公司的案例,谁的“高端大气上档次”的案例多,谁就是赢家(看谁的家底厚)。而且他们从不比稿(合同前出设计图)。
结论:
客户数量多意向大+案例好又多+销售能力强+公司消化能力强=挣钱的原因
供应链的竞争
今后的竞争是供应链的竞争,就企业建站这行来看,我分析JP公司的供应链如下:
1 客户来源:依靠SEO+百度推广,公司有一名NB的SEOer,潜心研究三年SEO技术,让客户每天都能源源不断从祖国各地来到他们网站
2 客户转化:多年来高端设计师案例积累,客户看到大量高端大气上档次的案例之后,对公司产生好感,转化成高质量的意向客户
3 签单能力:月薪一万、经验丰富、销售能力强的业务员促成签单
4 消化能力:项目经理+设计师+程序,三人均能独当一面,1万月薪代表了1万的效力。
5 利润分配:员工都属于高要求、高能力、高工资的三高人员,另外公司配备专车,地处北京四环,能给客户留下很好的印象和感觉。用对人,做对事儿,老板也得到了高回报,是一个良性循环。
我们再看看普通的建站公司供应链:
每天来客户数量不多而且不稳定,销售、设计、程序收入在5000左右(能力和效力也在5000左右),客户多的时候消化不了,客户少的时候又没有活干,人员能力不足导致在客户服务方面问题多多,人员流动大,学习成本高,一年算下来,客户多的那几个月挣的钱要填补到客户少的那几个月给员工发工资,老板挣的都是辛苦钱,恶性循环。
今日写这个,主要是自我反省,也分享给他人。哪个行业都有赚钱的,也有赔钱的。赚钱的少,赔钱的多。成功的企业都是一样的,用对人,做对事儿,赶上机会了。不成功的企业各有各的不同,没找对人,人不对自然事儿就做不对,有了机会也会错过。
企业高管个人离职的25个原因
10、不喜政治斗争
13、年老病衰、自然退役
Linux VPS CentOS 5 实例图解网站搭建
详细图文解说下linux vps CentOS 5 搭建wordpress网站:
1,从VPS服务商那里获得 IP(购买后服务商分配给你) 、SSH密码(VPS管理面板可以修改)、SSH名(基本都是root) ,确保你的VPS系统为 linux CentOS 5 32bit(也可以是64bit) ,其他系统请绕行。如果不是CentOS,进入VPS管理面板重新做系统;
2,本地电脑 安装 Xshell 4.0 SSH管理 :http://www.chinaz.com/web/2011/1026/216023.shtml ;然后进入 Xshell 4.0 在你的VPS上安装LNMP ,详情点击 :http://www.chinaz.com/web/2011/1026/216027.shtml;安装好后退出页面 Xshell 页面;
3.1,下载 WinSCP SSH客户端 ;安装到你的电脑上;
3.2,登陆 WinSCP SSH 客户端,如图所示:
3.3,在WinSCP下可清晰可见VPS服务器上所有安装的文件,下面是lnmp的常用文件夹说明:
默认网站文件夹 /home/wwwroot/ ,进入这个文件夹,里面就是你的网站所有文件了,里面包括安装lnmp时默认的 phpmyadmin 、ftp;
默认伪静态文件夹 /usr/local/nginx/conf/ ,已经有了Discuz、Wordpress、typecho、emlog等伪静态;
默认绑定的域名文件夹 /usr/local/nginx/conf/vhost/ , 这里是你添加绑定的所有域名地址;
默认MYSQL文件夹 /usr/local/mysql/var/ ,这里就是你所有建立的MYSQL文件了,当然你也可以用你的phpmyadmin 来管理它;
4.1,如果你已经完成了上面所有步骤,现在就来实例图文演示添加网站和管理。
譬如:
绑定的域名 cn.weidao.net
绑定的文件夹为 /home/wwwroot/china/
绑定域名时也添加了伪静态 /usr/local/nginx/conf/wordpress.conf
已经绑定域名列表 /usr/local/nginx/conf/vhost/ 里面有一个文件 cn.weidao.net.conf ,说明cn.weidao.net 已经绑定好了,双击打开确保添加域名时配置正确。
4.2,打开 http://你的IP/phpmyadmin/ 登陆,如图所示 新建一个MYSQL数据库;
4.3,下载最新版本 wordpress 3.2.1 中文版 : http://cn.wordpress.org/wordpress-3.2.1-zh_CN.zip到本地上传至 VPS 域名绑定的文件夹里;
4.3.1,下载好 wordpress3.2.1 后,本地解压下,将 wordpress 文件夹下所有的文件用 ZIP 格式打包为 wordpress.zip ,然后用 WinSCP 上传至 VPS域名绑定的文件夹china里面, 如图所示:
4.3.2,右键上传好的文件,选择“自定义命令” – “输入(E)” 如图所示:
输入口令 unzip wordpress.zip 进行解压文件包;
4.3.3,返回上一层,右键 china 文件夹,选择“自定义命令” – “输入(E)” 如图所示:
输入口令 chown www -R china 批量改变文件为 www 属性,不然网站无法安装,提示属性问题。
5,现在你可以打开你绑定的域名地址,进行安装wordpress了。
6,OK!收工!一个简单的Linux下VPS搭建的wordpress网站已经成功了。
Python 入門語法和類型
Python的设计目标之一是让源代码具备高度的可读性。它设计时尽量使用其它语言经常使用的标点符号和英语单词,让源代码整体看起来很整洁美观。它不像静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。
缩进
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且在Python语言里,缩进而非花括号或者某种关键字,被用于表示语句块的开始和退出。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如
if
语句:
if age < 21: print("你不能買酒。") print("不過你能買口香糖。") print("這句話處於if語句塊的外面。")
根据PEP的规定,必须使用4个空格来表示每级缩进。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为了兼容很旧的Python程序和某些有问题的编辑器。
语句和控制流
if
语句,当条件成立时执行语句块。经常与else
,elif
(相当于else if
)配合使用。for
语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。while
语句,当条件为真时,循环执行语句块。try
语句。与except
,finally
配合使用处理在程序运行中出现的异常情况。class
语句。用于定义类型。def
语句。用于定义函数和类型的方法。pass
语句。表示此行为空,不执行任何操作。assert
语句。用于程序调试阶段时测试运行条件是否满足。with
语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行结束后释放它。yield
语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
表达式
Python的表达式写法与C/C++类似。只是在某些写法有所差别。
- 主要的算术运算符与C/C++类似。
+, -, *, /, //, **, ~, %
分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <<
表示右移和左移。&, |, ^
表示二进制的AND, OR, XOR
运算。>, <, ==, !=, <=, >=
用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>
必须应用于整数。 - Python使用
and
,or
,not
表示逻辑运算。 is, is not
用于比较两个变量是否是同一个对象。in, not in
用于判断一个对象是否属于另外一个对象。- Python支持"列表推导式"(list comprehension),比如计算0-9的平方和:
>>> sum(x * x for x in range(10))285
- Python使用
lambda
表示匿名函数。匿名函数体只能是表达式。比如:
>>> add=lambda x, y : x + y>>> add(3,2)5
- Python使用
y if cond else x
表示条件表达式。意思是当cond
为真时,表达式的值为y
,否则表达式的值为x
。相当于C++和Java里的cond?y:x
。 - Python区分列表(list)和元组(tuple)两种类型。list的写法是
[1,2,3]
,而tuple的写法是(1,2,3)
。可以改变list中的元素,而不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,比如:
>>> x, y=1, 2 #同时给x,y赋值,最终结果:x=1, y=2
特别地,可以使用以下这种形式来交换两个变量的值:
>>> x, y=y, x #最终结果:y=1, x=2
- Python使用'(单引号)和"(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不一样,两种符号作用相同。一般地,如果字符串中出现了双引号,就使用单引号来表示字符串;反之则使用双引号。如果都没有出现,就依个人喜好选择。出现在字符串中的\(反斜杠)被解释为特殊字符,比如
\n
表示换行符。表达式前加r
指示Python不解释字符串中出现的\。这种写法通常用于编写正则表达式或者Windows文件路径。
- Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的类型有
str, bytes, list, tuple
等。它的语法是...[left:right]
或者...[left:right:stride]
。假定nums
变量的值是[1, 3, 5, 7, 8, 13, 20]
,那么下面几个语句为真:
-
nums[2:5] == [5, 7, 8]
从下标为2的元素切割到下标为5的元素,但不包含下标为2的元素。nums[1:] == [3, 5, 7, 8, 13, 20]
切割到最后一个元素。nums[:-3] == [1, 3, 5, 7]
从最开始的元素一直切割到倒数第3个元素。nums[:] == [1, 3, 5, 7, 8, 13, 20]
返回所有元素。改变新的列表不会影响到nums。nums[1:5:2] == [3, 7]
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写”文档字符串“(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()
打印出函数的使用帮助。比如:
1 >>> def randint(a, b): 2 ... "Return random integer in range [a, b], including both end points." 3 ... 4 >>> help(randint) 5 Help on function randint in module __main__: 6 7 randint(a, b) 8 Return random integer in range [a, b], including both end points.
对象的方法
对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)
。它等价于调用Class.method(instance, arguments)
。当定义对象方法时,必须显式地定义第一个参数为self
,用于访问对象的内部数据。self
相当于C++, Java里面的this
变量。比如:
class Fish: def eat(self, food): if food is not None: self.hungry=False #构造Fish的实例: f=Fish() #以下两种调用形式是等价的: Fish.eat(f, "earthworm") f.eat("earthworm")
Python认识一些以”__“开始并以"__"结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
类型
Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。
与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的Fish
类型,使用Fish()
。类型本身也是特殊类型type
的对象(type
类型本身也是type
对象),这种特殊的设计允许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
类型 | 描述 | 例子 |
---|---|---|
str | 一个由字符组成的不可更改的有串行。在Python 3.x里,字符串由Unicode字符组成。 | 'Wikipedia' "Wikipedia" """Spanning multiple lines""" |
bytes | 一个由字节组成的不可更改的有串行。 | b'Some ASCII' b"Some ASCII" |
list | 可以包含多种类型的可改变的有串行 | [4.0, 'string', True] |
tuple | 可以包含多种类型的不可改变的有串行 | (4.0, 'string', True) |
set, frozenset | 与数学中集合的概念类似。无序的、每个元素唯一。 | {4.0, 'string', True} frozenset([4.0, 'string', True]) |
dict | 一个可改变的由键值对组成的无串行。 | {'key1': 1.0, 3: False} |
int | 精度不限的整数 | 42 |
float | 浮点数。精度与系统相关。 | 3.1415927 |
complex | 复数 | 3+2.7j |
bool | 逻辑值。只有两个值:真、假 | True False |
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。
数学运算
Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数abs()
外,大多数数学函数处于math
和cmath
模块内。前者用于实数运算,而后者用于复数运算。使用时需要先导入它们,比如:
>>> import math >>> print(math.sin(math.pi/2)) 1.0
fractions
模块用于支持分数运算;decimal
模块用于支持高精度的浮点数运算。
Python定义求余运行a % b
的值处于开区间[0, b)
内,如果b
是负数,开区间变为(b, 0]
。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程式:b * (a // b) + a % b = a
恒真,整除运行需要向负无穷小方向取值。比如7 // 3
的结果是2
,而(-7) // 3
的结果却是-3
。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。
Python允许像数学的常用写法那样连着写两个比较运行符。比如a < b < c
与a < b and b < c
等价。C++的结果与Python不一样,首先它会先计算a < b
,根据两者的大小获得0或者1两个值之一,然后再与c进行比较。
PHP的简单正则判断字符串类型
前两天写PHP代码的时候遇到要判断一个变量是否为数字,所以就把相关的文章简单的摘抄了过来:
php 正则验证字符串是否为数字
方法一:
php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数字的方法。
<?
if($str){
if(eregi("^[0-9]+$",$str)){
$str=(int)$str;
}else{
echo "获取到的数据不是有效的数字类型,操作将停止!";
exit();
}
}else{
echo "需要验证的数据为空,操作停止!";
exit();
}
?>
方法二:
建议大家对关键的参数必须做过滤。
如数字正则过滤
if(preg_match("/^\d*$/",$fgid)) {echo('是数字');}else{echo('不是数字');}
或者用函数
if(is_numeric($fgid)) {echo('是数字');}else{ echo('不是数字');}
这两种方法的区别是
附一些常用的正则运算:
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0)
验证非正整数(负整数 + 0)
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&‘,;=?$\” 等字符:[^%&‘,;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:–正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数
浮点数
腾讯TNT解码1-209期
搜狐回购阿里所持搜狗股份_邵珠庆_shaozhuqing.com
雷军大战周鸿祎_邵珠庆_shaozhuqing.com
中国概念股泡沫初破_邵珠庆_shaozhuqing.com
腾讯暴雪合作启示_邵珠庆_shaozhuqing.com
iPad mini要打谁的7寸?_邵珠庆_shaozhuqing.com
Twitter十字路口_邵珠庆_shaozhuqing.com
HTC高端策略显“畸形”_邵珠庆_shaozhuqing.com
广电视听新政解读_邵珠庆_shaozhuqing.com
优酷土豆并购背后_邵珠庆_shaozhuqing.com
分类信息网中国学徒:团购梦碎_邵珠庆_shaozhuqing.com
揭秘刘强东阎焱旧日恩怨_邵珠庆_shaozhuqing.com
Digg卖身入土_邵珠庆_shaozhuqing.com
《名利场》:微软“失落的十年”_邵珠庆_shaozhuqing.com
还原阿里腐败案主角阎利珉_邵珠庆_shaozhuqing.com
当当跌出电商第一阵营_邵珠庆_shaozhuqing.com
离开诺基亚:MeeGo悲情重生_邵珠庆_shaozhuqing.com
新东方VIE调整风暴_邵珠庆_shaozhuqing.com
陈一舟再度转身_邵珠庆_shaozhuqing.com
苹果热在华退烧_邵珠庆_shaozhuqing.com
Facebook被低估?变现能力受质疑_邵珠庆_shaozhuqing.com
三月之痒:华为与360合作现裂痕_邵珠庆_shaozhuqing.com
国内游戏机市场年内或开放_邵珠庆_shaozhuqing.com
电子书阅读器退烧 当当抄kindle_邵珠庆_shaozhuqing.com
宏碁王振堂困局:奥运营销受挫_邵珠庆_shaozhuqing.com
智能机中国厮杀:洋手机现颓势_邵珠庆_shaozhuqing.com
Zynga灾难上演:积重难返?_邵珠庆_shaozhuqing.com
互联网手机争夺战:销售遇冷_邵珠庆_shaozhuqing.com
携程衰退论蔓延_邵珠庆_shaozhuqing.com
海外移动互联企业图谋中国_邵珠庆_shaozhuqing.com
国内手游进入爆发前夜!_邵珠庆_shaozhuqing.com
奢侈品电商:货源成致命问题_邵珠庆_shaozhuqing.com
Facebook手机不是镜花水月_邵珠庆_shaozhuqing.com
苹果快车逼近十字路口_邵珠庆_shaozhuqing.com
诺基亚中国变局:渠道模式调整_邵珠庆_shaozhuqing.com
落寞盛大:陈天桥只是战略家_邵珠庆_shaozhuqing.com
天猫流量大 京东品质优_邵珠庆_shaozhuqing.com
少年知乎烦恼:内遇困外遇敌_邵珠庆_shaozhuqing.com
电商物流互通之路:物流跟错觉走_邵珠庆_shaozhuqing.com
百思买衰败:已沦为线下体验店_邵珠庆_shaozhuqing.com
第一代手机厂商波导放贷科健拍卖_邵珠庆_shaozhuqing.com
孵化器模式遇困 创新工场转型_邵珠庆_shaozhuqing.com
分众私有化 或引发中概股退市潮_邵珠庆_shaozhuqing.com
京东国美苏宁三国大战_邵珠庆_shaozhuqing.com
重审京东苏宁国美价格战_邵珠庆_shaozhuqing.com
摩托罗拉移动陷裁员风暴_邵珠庆_shaozhuqing.com
电商淘汰战复盘:估值体系崩溃_邵珠庆_shaozhuqing.com
《纽约时报》数字脱困记_邵珠庆_shaozhuqing.com
开发者反思诺基亚衰退_邵珠庆_shaozhuqing.com
优酷土豆版权与广告整合细节曝光_邵珠庆_shaozhuqing.com
360搜索蝴蝶效应:与搜狗必战_邵珠庆_shaozhuqing.com
电商公司升级迫在眉睫_邵珠庆_shaozhuqing.com
360搜索进攻路线猜测_邵珠庆_shaozhuqing.com
优酷土豆并购异常交易遭调查_邵珠庆_shaozhuqing.com
百度360攻防战升级_邵珠庆_shaozhuqing.com
百度战360后招猜想_邵珠庆_shaozhuqing.com
360通用搜索是借尸还魂_邵珠庆_shaozhuqing.com
摩托罗拉十年分拆变卖_邵珠庆_shaozhuqing.com
硅谷生物科技梦_邵珠庆_shaozhuqing.com
58同城革命:两条战线并行_邵珠庆_shaozhuqing.com
百度移动新战略:云与端结合_邵珠庆_shaozhuqing.com
3B大战会让百度改变吗?_邵珠庆_shaozhuqing.com
围剿苹果!手机巨头9月开火_邵珠庆_shaozhuqing.com
凡客危机未解除:乱象丛生_邵珠庆_shaozhuqing.com
解读联想PC并购图谱_邵珠庆_shaozhuqing.com
告别XP时代:微软孤注一掷_邵珠庆_shaozhuqing.com
诺基亚押宝WP8赌未来_邵珠庆_shaozhuqing.com
iPhone 5特性不足 苹果变平庸_邵珠庆_shaozhuqing.com
阿里云自主研发炒作惹怒谷歌_邵珠庆_shaozhuqing.com
中移动引入iPhone破冰_邵珠庆_shaozhuqing.com
移动支付十年 依然概念大于实质_邵珠庆_shaozhuqing.com
阿里云OS迷雾:急删Google字样_邵珠庆_shaozhuqing.com
视频网站自制内容生存调查_邵珠庆_shaozhuqing.com
电商导购网站遭淘宝打压_邵珠庆_shaozhuqing.com
土豆患并购综合症_邵珠庆_shaozhuqing.com
阿里云幕后:独立OS到兼容模式_邵珠庆_shaozhuqing.com
三星被判侵权苹果:输不起的战争_邵珠庆_shaozhuqing.com
Zynga为何走向困境:高层心态急_邵珠庆_shaozhuqing.com
谷歌音乐关闭幕后_邵珠庆_shaozhuqing.com
红孩子折戟多元化 传苏宁收购_邵珠庆_shaozhuqing.com
红孩子幕后隐秘交易_邵珠庆_shaozhuqing.com
iPhone5接口芯片已被破解_邵珠庆_shaozhuqing.com
独立位置服务平台面临困境_邵珠庆_shaozhuqing.com
陈年:自我膨胀致凡客失控_邵珠庆_shaozhuqing.com
飞机上能不能开手机_邵珠庆_shaozhuqing.com
华为海外布局 十年内融入美国_邵珠庆_shaozhuqing.com
谷歌市值超微软沃尔玛_邵珠庆_shaozhuqing.com
默多克向谷歌低头_邵珠庆_shaozhuqing.com
Instagram大爆炸_邵珠庆_shaozhuqing.com
连线FINRA:发过优酷土豆调查函_邵珠庆_shaozhuqing.com
Kickstarter:从梦想到生意_邵珠庆_shaozhuqing.com
二维码悄悄野蛮成长 向O2O探路_邵珠庆_shaozhuqing.com
揭秘网易手机半年流产内幕_邵珠庆_shaozhuqing.com
破解O2O:业内焦躁痛苦_邵珠庆_shaozhuqing.com
莫言获诺贝尔奖_邵珠庆_shaozhuqing.com
三星成功秘诀_邵珠庆_shaozhuqing.com
社交大数据掘金之路_邵珠庆_shaozhuqing.com
中兴通讯巨亏幕后_邵珠庆_shaozhuqing.com
YY野蛮生长_邵珠庆_shaozhuqing.com
中电信基地独立运作幕后_邵珠庆_shaozhuqing.com
苹果地图使命探秘_邵珠庆_shaozhuqing.com
苹果富士康联盟面临危机_邵珠庆_shaozhuqing.com
专访盛大文学CEO侯小强_邵珠庆_shaozhuqing.com
3D打印从梦想到现实_邵珠庆_shaozhuqing.com
音乐网站酝酿下载收费_邵珠庆_shaozhuqing.com
盛大果壳生变_邵珠庆_shaozhuqing.com
平板战争2.0_邵珠庆_shaozhuqing.com
亚马逊VS沃尔玛_邵珠庆_shaozhuqing.com
短信没落_邵珠庆_shaozhuqing.com
谷歌小绿人遭遇微软WP8赌徒_邵珠庆_shaozhuqing.com
亚马逊中国7年之痒_邵珠庆_shaozhuqing.com
邹胜龙还原迅雷真相_邵珠庆_shaozhuqing.com
团购乱局下众生相_邵珠庆_shaozhuqing.com
eBay卷土重来_邵珠庆_shaozhuqing.com
百度收购爱奇艺股份_邵珠庆_shaozhuqing.com
华为美国梦_邵珠庆_shaozhuqing.com
YY音乐产业链调查_邵珠庆_shaozhuqing.com
天猫双11大促遇反弹_邵珠庆_shaozhuqing.com
MSN坠落记_邵珠庆_shaozhuqing.com
运营商转型加速_邵珠庆_shaozhuqing.com
电商平台乱战_邵珠庆_shaozhuqing.com
美国新能源困局_邵珠庆_shaozhuqing.com
京东阻击天猫枪打出头鸟_邵珠庆_shaozhuqing.com
双11大战推动生态转移线上_邵珠庆_shaozhuqing.com
盛大转型投资集团:游戏渐受冷落_邵珠庆_shaozhuqing.com
雷军:粉丝批评让人痛心_邵珠庆_shaozhuqing.com
轻博客热闹过后_邵珠庆_shaozhuqing.com
客厅娱乐归来_邵珠庆_shaozhuqing.com
移动时代的搜索危机_邵珠庆_shaozhuqing.com
圣诞大战斗争图谱_邵珠庆_shaozhuqing.com
阿里巴巴入股新浪微博或成定局_邵珠庆_shaozhuqing.com
欧德宁时代落幕_邵珠庆_shaozhuqing.com
惠普的并购丑闻 谁该买单?_邵珠庆_shaozhuqing.com
新浪微博业务调整_邵珠庆_shaozhuqing.com
争议窝窝团徐茂栋_邵珠庆_shaozhuqing.com
小米盒子监管疑云_邵珠庆_shaozhuqing.com
IT“茫一代”转型记:创业维艰_邵珠庆_shaozhuqing.com
科技巨头生态系统战_邵珠庆_shaozhuqing.com
龚宇:视频行业烧钱还要两年_邵珠庆_shaozhuqing.com
解读人人:游戏私有化“太麻烦”_邵珠庆_shaozhuqing.com
魅族复仇之战:目标直指小米_邵珠庆_shaozhuqing.com
手机大会战:诺基亚对决苹果三星_邵珠庆_shaozhuqing.com
中移动WLAN烦恼:内斗4G_邵珠庆_shaozhuqing.com
联通电信iPhone5将12月14日上市_邵珠庆_shaozhuqing.com
任天堂沉浮录_邵珠庆_shaozhuqing.com
京东快速布局讲中国亚马逊故事_邵珠庆_shaozhuqing.com
中移动谋划九大基地公司化运作_邵珠庆_shaozhuqing.com
好耶释放冲击IPO信号_邵珠庆_shaozhuqing.com
中美审计分歧 中概股危机空前_邵珠庆_shaozhuqing.com
1号店狂飙背后_邵珠庆_shaozhuqing.com
库克应该如何重新打造苹果电视_邵珠庆_shaozhuqing.com
9158和YY效应_邵珠庆_shaozhuqing.com
苹果中国渠道调整_邵珠庆_shaozhuqing.com
网秦林宇回应:国内调研数据混乱_邵珠庆_shaozhuqing.com
SNS电商试验梦碎:淘宝投入减弱_邵珠庆_shaozhuqing.com
iPhone5国内开售 联通电信对阵_邵珠庆_shaozhuqing.com
国内电商仿美国Decide仍是传说?_邵珠庆_shaozhuqing.com
媒体业颠覆 老牌媒体如何防守_邵珠庆_shaozhuqing.com
乐淘转型阵痛:供应链换血裁_邵珠庆_shaozhuqing.com
新浪微博联合云云布局移动搜索_邵珠庆_shaozhuqing.com
新浪变局猜想:曹国伟仍掌大局_邵珠庆_shaozhuqing.com
魅族求变应对小米竞争_邵珠庆_shaozhuqing.com
RIM错失移动互联网_邵珠庆_shaozhuqing.com
新浪移动互联布局遭质疑_邵珠庆_shaozhuqing.com
垂直B2C生死时刻_邵珠庆_shaozhuqing.com
O2O冷思考_邵珠庆_shaozhuqing.com
啪啪:许朝军的下一个路口_邵珠庆_shaozhuqing.com
京东高层变动幕后:技术偏保守_邵珠庆_shaozhuqing.com
新浪人事调整细节曝光_邵珠庆_shaozhuqing.com
Rovio前世今生_邵珠庆_shaozhuqing.com
陌陌:需避走51失败之路_邵珠庆_shaozhuqing.com
别了!上网本!_邵珠庆_shaozhuqing.com
互联网广告新三国大战_邵珠庆_shaozhuqing.com
微软危局_邵珠庆_shaozhuqing.com
传统媒体突围新媒体_邵珠庆_shaozhuqing.com
万达电商业务慢行_邵珠庆_shaozhuqing.com
联想保卫进攻战_邵珠庆_shaozhuqing.com
周鸿祎“温故”3721_邵珠庆_shaozhuqing.com
赶集“出逃者”狙击老东家_邵珠庆_shaozhuqing.com
中移动试水互联网电视业务_邵珠庆_shaozhuqing.com
揭秘黄宏生隐性回归_邵珠庆_shaozhuqing.com
网络垄断新势力涌现_邵珠庆_shaozhuqing.com
诺基亚2013期待重生_邵珠庆_shaozhuqing.com
苏宁重组红孩子_邵珠庆_shaozhuqing.com
百度投资金山大战360_邵珠庆_shaozhuqing.com
马云卸任阿里巴巴CEO_邵珠庆_shaozhuqing.com
三四线移动互联网用户价值凸显_邵珠庆_shaozhuqing.com
苏宁易购三大争议_邵珠庆_shaozhuqing.com
2013将成平板手机年_邵珠庆_shaozhuqing.com
FB移动为先战略见成效_邵珠庆_shaozhuqing.com
浏览器抢票软件火热背后_邵珠庆_shaozhuqing.com
谷歌归来?释放重返中国信号_邵珠庆_shaozhuqing.com
独家专访科技预言家安德森_邵珠庆_shaozhuqing.com
苹果利润增长神话终结_邵珠庆_shaozhuqing.com
塞班之死:曾经辉煌成绝唱_邵珠庆_shaozhuqing.com
Twitter掘金移动终端_邵珠庆_shaozhuqing.com
Facebook图谱搜索争议_邵珠庆_shaozhuqing.com
91无线带“原罪”启动上市_邵珠庆_shaozhuqing.com
国美变局:黄光裕控盘启动转型_邵珠庆_shaozhuqing.com
苹果建中国研发中心传闻诞生记_邵珠庆_shaozhuqing.com
新浪微博商业化争议_邵珠庆_shaozhuqing.com
携程大变革前夜_邵珠庆_shaozhuqing.com
唱片已死音乐永生_邵珠庆_shaozhuqing.com
视频免费时代渐行渐远_邵珠庆_shaozhuqing.com
中移动开启4G试商用_邵珠庆_shaozhuqing.com
“酷讯派”创业记_邵珠庆_shaozhuqing.com
“酷讯派”创业记 唱吧、食神摇摇这些热门应用是如何诞生的
“当个拳击手,要不然就根本不要到场。”
这是一群声名并不算太显赫的连续创业者。他们曾经试图开创大场面,却经历了惨痛的教训,不少人随后也在创业路上几度蹉跎。但如同《铁甲钢拳》里被人遗弃却最终闪耀全场的小个子机器人,他们并不是生来的陪练者,移动互联网就是他们重新迸发能量的舞台。
陈华和吴世春曾经是一对创业搭档,7年前这两人联合创办了酷讯,以“生活搜索”概念闪亮一时,但又在公司陷入低谷时双双出局。几经换道,他们先后进入移动互联网,前者做了现在火爆的手机K歌应用“唱吧”,后者则成为美食搜索应用“食神摇摇”的创办者。
出身酷讯的创业者并非只有陈吴二人,还有一批在酷讯动荡期离开的产品和技术精英。相比国内赫赫有名的“谷歌创业帮”,抑或颇受关注的网易系创业者,“酷讯派”略显低调,但这群曾在一起战斗过的人却在经历了不同挫折之后集体选择了移动互联网作为新的战场。
张一鸣,原酷讯技术委员会主席,他离开酷讯后做了房产搜索网站99房(合并原酷讯房产),但后因政策变化无法继续为继,他转而创办了字节跳动公司,专注做社交数据挖掘类移动应用,如已拥有750万活跃用户的个性阅读应用《今日头条》。
曾廷坤,曾经在酷讯做技术开发。农场游戏最火的时候他离开酷讯,和他人联合成立了游戏公司玩蟹科技,任CTO。这家公司去年推出的手机游戏《大掌门》,目前是苹果应用商店最畅销的游戏之一,月收入超过2000万人民币。
周青松,原酷讯房产搜索产品经理;严峻,原酷讯高级工程师。他们曾经从酷讯过渡到99房工作,去年则一起创办了517旅行网,最近推出了手机应用“旅行记”。
不完全统计,2008-2009年间先后出走的前酷讯员工近一两年已经创办了十几家公司。尽管大多数仍在大众视线之外,但上述几个集中爆发的明星应用产品,却已经开始让人关注起这个以早期酷讯工作经历为情感纽带的创业群体。
一群失意于互联网垂直搜索的创业者,如今集体在移动互联网上焕发青春。他们从过去数年的跌宕起伏中吸取了哪些教训?
出酷讯记
陈吴时代的酷讯完美演绎了一家“热钱宠儿”的起落曲线,这家曾声名鹊起的创业公司以火车票搜索起家,拥有梦幻开局:一年时间就融到了过千万美元资金,并试图在生活搜索领域开创大场面。但不过三年,美妙幻梦即遭遇现实挫折,找不到商业模式,资金耗尽,裁员,2008年中,酷讯宣布放弃原定路线转型在线旅游,陈华和吴世春先后黯然离职。
离开酷讯之后,他们一开始都没有能摆脱搜索心结和路径依赖。陈华去了阿里巴巴继续做搜索研发,之后又跳出来继续创业,他先是基于搜索技术做了电商导购促销网站最淘,没过几个月就失败了。吴世春也折腾了一段时间后创立乐呵互动,最初产品形态有点像原来的酷讯的餐饮搜索,但又做成了一个SNS社区,做的也并不顺利。直到陈华做了唱吧,吴世春改做食神摇摇,才开始慢慢火了。
其他“酷讯派”创业者也多来搜索或酷讯情结。张一鸣做的阅读应用《今日头条》,与信息订阅派的路径相左,核心是信息聚合和数据挖掘。“他做的产品还是用搜索引擎的技术,跟原来酷讯(的思路)是一样的。”在陈华看来,张一鸣是“酷讯派”中最专注搜索的人。即使是周青松和严峻,他们创办的517旅游网看似和搜索无关,实际上也从陈华当年在酷讯时立项的旅游社区“一起玩”中萌发了灵感。
但他们已经不可能再走与酷讯相似的道路。这是个移动互联网的时代,也是一个全新的时代。
“互联网已经没有太大的机会了,在互联网上再想建立一个新的品牌非常困难。不是个人能力的问题,跟能力已经没有关系了。”
陈华对腾讯科技说。
唱吧2012年5月31上线,数月间用户超过千万。在陈华看来,移动互联网是一片空白,没有东西是已经确定的,每一个应用都有生存的价值空间,只要切到一部分用户,那部分就会有价值。
曾廷坤之所以选择手机游戏创业,也是出于同样的原因。现在页游和端游的格局已经很稳定,新加入者面临的门槛会很高,而且推广成本不菲,相较之下,手机游戏刚刚开始,充满了机会。
但真正要做成一件事并不容易。曾廷坤创业路上过了三四年苦日子,用吴世春的话说是“憋大招”,直到去年推出《大掌门》。公开的数字显示,在去年12月苹果App Store中国区收入榜上,《大掌门》以423万美元的收入排名第二,这在国内手机游戏产品中可谓首屈一指。
酷讯的基因
每个公司都有自己的基因。酷讯系创业的人基本都是清一色的技术人员,最初是工程师,后转型公司的掌舵人。
这与酷讯创立时的状态有关。2005年底,陈华跟吴世春创立酷讯,从一开始这就是一家技术型、产品型的公司。陈华当时不到30岁,招的很多人都是技术很强、有想法、有激情的同龄人,这种工程师文化贯穿在酷讯早期的创业氛围中。而且,酷讯当时采用事业部独立核算,每个团队都要考虑怎么做品牌、产品、市场和开发,团队成员经常一起分析和讨论,而不是像大公司那样角色分明。
“那个时候其实他们已经在积累独立创业的经验。”陈华指出。毕业即进入酷讯工作的曾廷坤回忆,他当时在空闲时间也会考虑自己未来要做的事情,打算等时机成熟自己单独创业。
这种共同作战的经历形成了“酷讯派”的特殊感情,也让他们在行事风格中非常一致。
比如,唱吧团队和食神摇摇的推广模式如出一辙,食神摇摇比唱吧早半年进行推广,后来唱吧也参考其经验进行推广,微博营销公司甚至都是同一家公司。后来,张一鸣也找这家公司进行推广。陈华做唱吧,从酷讯挖了一个人,现在是唱吧的市场部总监。吴世春那里也有两三个酷讯的人,其中之一原来负责酷讯市场,张一鸣团队中负责市场的人也是出自酷讯市场部。
“我们是一条路数,所有的营销方式、营销话语很像。”陈华说。甚至在图标设计上,“酷讯派”做的几个应用也非常相像,食神摇摇占了“吃”字,唱吧占了“唱”字。旅行记占了“旅”字。
吴世春提倡”酷讯派“的创业者多相互分享一些经验。他常挂在嘴边的话是,创业就像消防队天天都面临不一样的火情,只要你经历过这些事情的话,别人再经历过的话就可以给他一些意见,可以少走一些弯路。
这种交流常常能开拓思路。前不久,陈华请曾廷坤到唱吧做讲座。“不是我要做游戏,我想知道我唱吧手机上的产品,能不能参考游戏上的思路,使得我更好赚钱。”陈华说。
经验和教训
陈华和吴世春都是连环创业者,现在产品红了,背后各有一把辛酸泪,也有很多经验以及教训。
“很大的经验就是一个公司不能有那么多的方向。”陈华说,“尤其是一个公司很小的时候,玩事业部就是浪费精力。”吴世春也认为,选准方向是最重要的。小公司创业,肯定要做一些相对比较垂直的,在合适的时间做合适的方向。
“不要梦想着一口吃个胖子。非得去做一个淘宝出来,或者非得做一个QQ出来。这个梦想很大,但是你的资源不支持这种梦想。”吴世春说。
“酷讯派”创业者很强调团队作战。吴世春认为,缺少什么,就要找到匹配的合作方,一起来成立核心创始团队。
陈华以自己现身说法。他当时选择做唱吧是个很大的的冒险,一个唱片公司的人不认识,一个明星不认识,公司里面唱歌唱得好的都没有。但优势是团队,“我们最后发现,这个团队的执行力,技术团队很强,产品团队很强,市场团队很强,三个东西结合在一起,在这个市场上一打,别人连影子都不见了。”
对于做过多次天使投资的吴世春而言,他强调管理好公司的发展节奏也很重要。
他认为,快速扩展对公司不利。怎么管理预期,比如说对于行业的波动的把握,每两三年出现一次波峰波谷,融资环境也在极寒与极热之间转化。怎么能够在极热的时候融到钱,在极寒的时候积蓄一点,这是很重要的。
更加技术宅的曾廷坤似乎无法像陈、吴两位一样讲出创业的大道理。“我自己没想那么多,只是希望给这个团队带来一些成就感。坚持做就行了。”谈及自己的创业时他说。
曾廷坤的愿望很朴素且真诚,他说了最重要的:坚持。
-
疑问:
“酷讯派”有谁?
-
解读:
酷讯联合创始人陈华和吴世春;原酷讯技术委员会主席张一鸣;原酷讯工程师曾廷坤;原酷讯房产搜索产品经理周青松;原酷讯高级工程师严峻。
-
疑问:
他们创业做了啥?
-
解读:
《唱吧》、《今日头条》、《食神摇摇》、《大掌门》等。
-
疑问:
酷讯有啥基因?
-
解读:
这与酷讯创立时的状态有关。2005年底,陈华跟吴世春创立酷讯,从一开始这就是一家技术型、产品型的公司。陈华当时不到30岁岁,招的很多人都是技术很强、有想法、有激情的同龄人,这种工程师文化贯穿在酷讯早期的创业氛围中。而且,酷讯当时采用事业部独立核算,每个团队都要考虑怎么做品牌、产品、市场和开发,团队成员经常一起分析和讨论,而不是像大公司那样角色分明。
- TMT解码:系腾讯科技频道鼎力打造深度报道栏目,力求过滤信息干扰,还原科技事件和趋势背后的本源力量。
- 我们坚持:
- 深度:挖掘事件真相,梳理产业大势,探索实践真知;
- 独家:倾力提供首次进入公众领域的热门科技新闻;
- 独到:反传统智慧,不人云亦云;化繁为简,走在曲线前面;
- 权威:小心求证,谨慎思辨;去伪存真,一锤定音。
- 责任编辑:黄顺芳
- 设计制作:于春慧 杜连强