WordPress

WordPress

WordPress建站及WordPress SEO相关话题
Shopify

Shopify

Shopify建站及Shopify SEO相关话题
Google SEO

Google SEO

Google SEO相关话题
SEM

SEM

SEM相关话题
Zoho

Zoho

Zoho SAAS相关产品使用话题讨论
EDM

EDM

讨论Email Marketing相关话题
Symantec SSL

Symantec SSL

讨论Symantec SSL安全相关话题
隽永东方售后服务

隽永东方售后服务

隽永东方售后服务专区

HTTP的理解

Leo 发表了文章 • 0 个评论 • 111 次浏览 • 2018-04-03 16:30 • 来自相关话题

作为一个前端,如果对一个网页从发起请求到返回数据这期间具体发生了什么都不知道的话,那不是一个好前端。最近,读了图解http,以及有关http相关的文章,还有自己也下载了wireshark抓包工具,实际观察了一下这个过程,下面就此做些总结。

一.从输入一个url到返回数据,中间到底发生了什么?

假设,我们在浏览器输入http://www.baidu.com:80/index.html,假设解析出的ip地址是202.43.78.3

1.浏览器解析出主机名

解析出的主机名是www.baidu.com

2.浏览器查询这个主机名的ip地址(dns)

dns解析的作用就是把域名解析成ip地址,这样才能在广域网路由器转发报文给目标ip,不然路由器不知道要把报文发给谁。下面就讲下大概的过程,不会涉及太多细节。(以chrome为例子)

(1)浏览器启动时,首先浏览器会去操作系统获取dns服务器地址,然后把这个地址缓存下来。同时浏览器还会去读取和解析hosts文件,同样放到缓存中。浏览器对解析过的域名和ip地址,都会保存着这两者的映射关系。(存到cache中)

(2)当解析域名的时候,首先浏览器会去cache中查找有没有缓存好的映射关系,如果没有的话,就去hosts文件中查找,如果也没有的话,浏览器就会发起请求去dns服务器缓存查询了,如果缓存里面也没有,那最后就是dns服务器去查询了。

3.浏览器获取端口号

4.浏览器向目标ip地址发起一条到202.43.78.3:80的tcp连接

为了传输的可靠性,tcp协议要有三次握手过程:

(1)首先浏览器会向服务器发起一个连接请求

(2)服务器会对连接请求做出响应,表示同意建立连接

(3)浏览器收到响应后,再告知对方,它知道服务器同意它建立连接了。

5.ip层把ip地址转换成mac地址,一边传输,一边查找目标服务器的mac地址

6.数据链路层处理网络连接的硬件部分,比如网卡,找到服务器的网卡

7.浏览器向服务器发送一条http报文(重复5,6步)

每一条http报文的组成:

起始行+首部+主体(可选)

起始行:http/1.0 200 ok (一般包括http版本,返回状态码,返回码原因)

首部:content-type:text/plain content-length:19

主体:name=jane

8.服务器接受客户端请求,进行一些处理,返回响应报文

web服务器接收到请求之后,实际上会做些什么呢?

(1)建立连接,如果接受一个客户端连接,就建立连接,如果不同意,就将其关闭。

(2)接收请求,读取http请求报文

(3)访问资源,访问报文中指定的资源

(4)构建响应,创建带有首部的http响应报文

(5)发送响应,将响应回送给客户端

9.浏览器读取http响应报文

10.浏览器关闭连接

看了上面的一个简单过程,大家会不会有这样一个问题,难道每次发起一个http请求,都要建立一次tcp连接吗,我们经常写的并发ajax请求,每条请求都是各自独立建立的tcp连接?一条tcp连接建立之后,是什么时候关闭的?带着这些问题,看看下面要讲的http的特性

二.http的特性

1.http是不保存状态的协议

http协议是一种无状态的协议,意思就是说它不会对每次的请求和响应之间的通信状态进行保存。你之前发过的任何请求的信息,没有任何记录。之所以这样设计,也是为了让http变得比较简单,可以处理大量事物。但是无状态的特性,也会导致一些问题,比如说一个用户登录一家网站之后,跳到另一个页面,应该还保持着登录状态,所以后面就出了cookie状态管理技术。相信大家应该都很熟悉了。

2.请求只能从客户端开始。客户端不可以接收除响应以外的指令

服务器必须等待客户端的请求,才能给客户端发送响应数据,所以说服务器是不能主动给客户端推送数据的。对于一些实时监控的功能,常常用websocket来代替

3.没有用户认证,任何人都可以发起请求

在http协议通信时,是不存在确认通信方的处理步骤的,任何人都可以发起请求。另外,服务器只要收到请求,无论是谁,都会返回一个响应。所以会存在伪装的隐患。后面出现的https就可以解决这个问题。

4.通信使用的是明文

5.无法证明报文完整性

6.可任意选择数据压缩格式,非强制压缩发送

7.http持久连接和并行连接

一开始,http请求是串行的,一个http请求,就会建立一条tcp连接,浏览器收到响应之后,就会断开连接。等上一个请求回来了,下一个请求才能继续请求。这样做的缺点是,比较耗时间和内存,后面就出现了下面一系列的优化连接性能的方法。

(1)并行连接:

原理:通过多条tcp连接发起并发的http请求

并行连接可以同时发起多个http请求,每次发起一个http请求,就会建立一个tcp连接。每个http请求是独立的,不会相互等待,这样做,很可能会提高页面的加载速度,因为人们会看到页面上面,很多个东西会同时出现,所以感觉页面加载变快了。实际上有时候是真的变快了,因为它是并行工作的。但是有时候不是真的快了。比如说,客户端的网络带宽不足时,(浏览器是通过一个28kbps的modem连接到因特网上去的),如果并行加载多个请求,每个请求就会去竞争这个有限的带宽,每个请求就会以比较慢的速度加载。这样带来的性能提升就很小。

(2)持久连接:

原理:重用tcp连接,以消除连接及关闭时延

从http1.1开始,就允许当http响应结束后,tcp连接可以保持在打开状态,以便给未来的http请求重用现在的连接。那么,这个tcp连接什么时候会关闭呢,一般情况下,40s内,如果没有新的请求,就会关闭。

(3)管道化连接

原理:通过共享的tcp连接发起并发的http请求

并行连接可以提高复合页面的传输速度,但是也有许多缺点,比如每次都会建立一次tcp连接,会耗费时间和带宽。持久连接的优势就是降低了时延和tcp的连接数量。但是持久连接可能会导致的一个问题是,可能会累积大量的空闲连接。耗费资源。

持久连接和并行连接配合使用才是最高效的方式。

一般浏览器会限制,并行连接的个数是4个,即打开少量的并行连接,其中每个都是持久连接。这也是现在用的最多的方式。 查看全部

v2-a8143c9c27f6e2f65e1a398b894a5a74_hd.jpg


作为一个前端,如果对一个网页从发起请求到返回数据这期间具体发生了什么都不知道的话,那不是一个好前端。最近,读了图解http,以及有关http相关的文章,还有自己也下载了wireshark抓包工具,实际观察了一下这个过程,下面就此做些总结。

一.从输入一个url到返回数据,中间到底发生了什么?

假设,我们在浏览器输入http://www.baidu.com:80/index.html,假设解析出的ip地址是202.43.78.3

1.浏览器解析出主机名

解析出的主机名是www.baidu.com

2.浏览器查询这个主机名的ip地址(dns)

dns解析的作用就是把域名解析成ip地址,这样才能在广域网路由器转发报文给目标ip,不然路由器不知道要把报文发给谁。下面就讲下大概的过程,不会涉及太多细节。(以chrome为例子)

(1)浏览器启动时,首先浏览器会去操作系统获取dns服务器地址,然后把这个地址缓存下来。同时浏览器还会去读取和解析hosts文件,同样放到缓存中。浏览器对解析过的域名和ip地址,都会保存着这两者的映射关系。(存到cache中)

(2)当解析域名的时候,首先浏览器会去cache中查找有没有缓存好的映射关系,如果没有的话,就去hosts文件中查找,如果也没有的话,浏览器就会发起请求去dns服务器缓存查询了,如果缓存里面也没有,那最后就是dns服务器去查询了。

3.浏览器获取端口号

4.浏览器向目标ip地址发起一条到202.43.78.3:80的tcp连接

为了传输的可靠性,tcp协议要有三次握手过程:

(1)首先浏览器会向服务器发起一个连接请求

(2)服务器会对连接请求做出响应,表示同意建立连接

(3)浏览器收到响应后,再告知对方,它知道服务器同意它建立连接了。

5.ip层把ip地址转换成mac地址,一边传输,一边查找目标服务器的mac地址

6.数据链路层处理网络连接的硬件部分,比如网卡,找到服务器的网卡

7.浏览器向服务器发送一条http报文(重复5,6步)

每一条http报文的组成:

起始行+首部+主体(可选)

起始行:http/1.0 200 ok (一般包括http版本,返回状态码,返回码原因)

首部:content-type:text/plain content-length:19

主体:name=jane

8.服务器接受客户端请求,进行一些处理,返回响应报文

web服务器接收到请求之后,实际上会做些什么呢?

(1)建立连接,如果接受一个客户端连接,就建立连接,如果不同意,就将其关闭。

(2)接收请求,读取http请求报文

(3)访问资源,访问报文中指定的资源

(4)构建响应,创建带有首部的http响应报文

(5)发送响应,将响应回送给客户端

9.浏览器读取http响应报文

10.浏览器关闭连接

看了上面的一个简单过程,大家会不会有这样一个问题,难道每次发起一个http请求,都要建立一次tcp连接吗,我们经常写的并发ajax请求,每条请求都是各自独立建立的tcp连接?一条tcp连接建立之后,是什么时候关闭的?带着这些问题,看看下面要讲的http的特性

二.http的特性

1.http是不保存状态的协议

http协议是一种无状态的协议,意思就是说它不会对每次的请求和响应之间的通信状态进行保存。你之前发过的任何请求的信息,没有任何记录。之所以这样设计,也是为了让http变得比较简单,可以处理大量事物。但是无状态的特性,也会导致一些问题,比如说一个用户登录一家网站之后,跳到另一个页面,应该还保持着登录状态,所以后面就出了cookie状态管理技术。相信大家应该都很熟悉了。

2.请求只能从客户端开始。客户端不可以接收除响应以外的指令

服务器必须等待客户端的请求,才能给客户端发送响应数据,所以说服务器是不能主动给客户端推送数据的。对于一些实时监控的功能,常常用websocket来代替

3.没有用户认证,任何人都可以发起请求

在http协议通信时,是不存在确认通信方的处理步骤的,任何人都可以发起请求。另外,服务器只要收到请求,无论是谁,都会返回一个响应。所以会存在伪装的隐患。后面出现的https就可以解决这个问题。

4.通信使用的是明文

5.无法证明报文完整性

6.可任意选择数据压缩格式,非强制压缩发送

7.http持久连接和并行连接

一开始,http请求是串行的,一个http请求,就会建立一条tcp连接,浏览器收到响应之后,就会断开连接。等上一个请求回来了,下一个请求才能继续请求。这样做的缺点是,比较耗时间和内存,后面就出现了下面一系列的优化连接性能的方法。

(1)并行连接:

原理:通过多条tcp连接发起并发的http请求

并行连接可以同时发起多个http请求,每次发起一个http请求,就会建立一个tcp连接。每个http请求是独立的,不会相互等待,这样做,很可能会提高页面的加载速度,因为人们会看到页面上面,很多个东西会同时出现,所以感觉页面加载变快了。实际上有时候是真的变快了,因为它是并行工作的。但是有时候不是真的快了。比如说,客户端的网络带宽不足时,(浏览器是通过一个28kbps的modem连接到因特网上去的),如果并行加载多个请求,每个请求就会去竞争这个有限的带宽,每个请求就会以比较慢的速度加载。这样带来的性能提升就很小。

(2)持久连接:

原理:重用tcp连接,以消除连接及关闭时延

从http1.1开始,就允许当http响应结束后,tcp连接可以保持在打开状态,以便给未来的http请求重用现在的连接。那么,这个tcp连接什么时候会关闭呢,一般情况下,40s内,如果没有新的请求,就会关闭。

(3)管道化连接

原理:通过共享的tcp连接发起并发的http请求

并行连接可以提高复合页面的传输速度,但是也有许多缺点,比如每次都会建立一次tcp连接,会耗费时间和带宽。持久连接的优势就是降低了时延和tcp的连接数量。但是持久连接可能会导致的一个问题是,可能会累积大量的空闲连接。耗费资源。

持久连接和并行连接配合使用才是最高效的方式。

一般浏览器会限制,并行连接的个数是4个,即打开少量的并行连接,其中每个都是持久连接。这也是现在用的最多的方式。

jquery小思路

Leo 发表了文章 • 1 个评论 • 90 次浏览 • 2018-03-26 16:15 • 来自相关话题

碰到一个需求,可能是自己写html的时候走歪路了,本来是要给图片加个遮罩的,也很容易写好了,但是发现没有加载图片的时候,遮罩还是存在着。
那么我想了一下,可以做一个简单的if判断,当图片src值为空,那么遮罩隐藏
 
var imgsrc=$('.fourrightbox + img').attr('src');
        if(imgsrc == "" || imgsrc == null || imgsrc == undefined){
            $('.fourrightbox').css('display','none');
        }
 
隐藏方法有很多种,你也可以用jquery api里hide()等等 查看全部
碰到一个需求,可能是自己写html的时候走歪路了,本来是要给图片加个遮罩的,也很容易写好了,但是发现没有加载图片的时候,遮罩还是存在着。
那么我想了一下,可以做一个简单的if判断,当图片src值为空,那么遮罩隐藏
 
var imgsrc=$('.fourrightbox + img').attr('src');
        if(imgsrc == "" || imgsrc == null || imgsrc == undefined){
            $('.fourrightbox').css('display','none');
        }
 
隐藏方法有很多种,你也可以用jquery api里hide()等等

前端图片延迟加载和滚动下拉加载

Leo 发表了文章 • 2 个评论 • 81 次浏览 • 2018-03-26 11:35 • 来自相关话题

最近看到一篇文章,看了大牛的讲解,感觉整体还是比较容易理解的,可以尝试着玩玩。以下是转载的正文:前端页面的用户体验对于一个网站来说是至关重要的,我们在访问一些图片量比较大的网站的时候,往往会有这样的感受:显示在我电脑屏幕可视区域的图片总是不能及时的刷出来,这就造成了对于一些没有什么耐心的用户而言,他们就不愿意多等下去,索性直接关闭了网站去看其他的网站,这就使得本网站的用户量的流失,这往往是一个网站最不愿意看到的情况,那么对于这样的情况而言,开发者们不断的努力,很快就想到了解决的方案,让在可视区域的图片立即加载进来,而让不在可视区域并且需要通过滚动条进行滚动显示的图片在图片滚动到可视区域内再显示出来,这就比一次性把所有的图片资源加载进来从而造成图片刷新较慢的用户体验好的多的多。 
 那么,图片延迟加载的技术具体如何实现呢?下面来做详细的介绍: 
首先,定义图片为三列,一共有5行,具体代码如下:  










 
里面用到的bootstrap的布局技术(当然,这不是重点),请看img标签中的src,一开始我们并没有给它具体的图片的资源路径,而是自己定义了一个属性 x-src,该属性的值是图片图片的资源路径,每一行的img都是如此,接下来,当页面载入的时候,我们使用jquery(当然,你想javascript原生的代码也可以,我这里只是为了省时间而已)来循环遍历每一个img,判断每一个图片是否在当前可视区域内,是则显示图片,否则稍后处理,这里需要知道三个数据: 

             注:因为我所写的是当图片的一半进入的浏览器的可视区域内才将这张图片进行加载,所以需要第三个数据,这个看个人的需求是什么,如果你的需求是图片只要已进入可视区域内就加载,可直接忽略第三个数据!!!! 

                                   1:浏览器可视区域的高度 

                                   2:图片相对于文档的偏移量(这里只需要高度上的偏移量) 

                                   3:图片元素本身的高度 

             如果图片先对于文档的偏移量+图片元素本身的高度的一半    <  浏览器可视区域的高度,即表明图片已经有一半进入的可视区域了,那么我就应该要把这张图片加载进来了,可是img标签的src是为空的,x-src的值才是图片的资源路径,这个时候就需要用jquery将img 标签的x-src值传给src,从而将图片加载进来,具体实现代码如下: 





 
  查看全部
最近看到一篇文章,看了大牛的讲解,感觉整体还是比较容易理解的,可以尝试着玩玩。以下是转载的正文:前端页面的用户体验对于一个网站来说是至关重要的,我们在访问一些图片量比较大的网站的时候,往往会有这样的感受:显示在我电脑屏幕可视区域的图片总是不能及时的刷出来,这就造成了对于一些没有什么耐心的用户而言,他们就不愿意多等下去,索性直接关闭了网站去看其他的网站,这就使得本网站的用户量的流失,这往往是一个网站最不愿意看到的情况,那么对于这样的情况而言,开发者们不断的努力,很快就想到了解决的方案,让在可视区域的图片立即加载进来,而让不在可视区域并且需要通过滚动条进行滚动显示的图片在图片滚动到可视区域内再显示出来,这就比一次性把所有的图片资源加载进来从而造成图片刷新较慢的用户体验好的多的多。 
 那么,图片延迟加载的技术具体如何实现呢?下面来做详细的介绍: 
首先,定义图片为三列,一共有5行,具体代码如下:  

3126f528-4229-4019-8698-7cf085f1e8bf.png


abc884da-5167-4ecb-9e03-def86e9eed6a.png

 
里面用到的bootstrap的布局技术(当然,这不是重点),请看img标签中的src,一开始我们并没有给它具体的图片的资源路径,而是自己定义了一个属性 x-src,该属性的值是图片图片的资源路径,每一行的img都是如此,接下来,当页面载入的时候,我们使用jquery(当然,你想javascript原生的代码也可以,我这里只是为了省时间而已)来循环遍历每一个img,判断每一个图片是否在当前可视区域内,是则显示图片,否则稍后处理,这里需要知道三个数据: 

             注:因为我所写的是当图片的一半进入的浏览器的可视区域内才将这张图片进行加载,所以需要第三个数据,这个看个人的需求是什么,如果你的需求是图片只要已进入可视区域内就加载,可直接忽略第三个数据!!!! 

                                   1:浏览器可视区域的高度 

                                   2:图片相对于文档的偏移量(这里只需要高度上的偏移量) 

                                   3:图片元素本身的高度 

             如果图片先对于文档的偏移量+图片元素本身的高度的一半    <  浏览器可视区域的高度,即表明图片已经有一半进入的可视区域了,那么我就应该要把这张图片加载进来了,可是img标签的src是为空的,x-src的值才是图片的资源路径,这个时候就需要用jquery将img 标签的x-src值传给src,从而将图片加载进来,具体实现代码如下: 

d67418a9-a587-47a4-8d0b-fc4425a7dc2e.png

 
 

Biz Lian -- Business Link Platform

Eastern_Design_Studio 发表了文章 • 1 个评论 • 90 次浏览 • 2018-02-27 15:08 • 来自相关话题

www.bizlian.com  LOGO征求意见:












 
www.bizlian.com  LOGO征求意见:

latest-logo.png



logo-s.png


 

阿里云ECS服务器推荐使用WDCP云镜像

Eastern_Design_Studio 发表了文章 • 4 个评论 • 157 次浏览 • 2018-02-11 16:17 • 来自相关话题

近期好多客人开通网站的时候购买了阿里云的ECS服务器,默认选择Centos 7,接下来还要手工安装WDCP等WEB环境,费时间和精力,我们发现其实阿里云官方云市场已经WDCP3.2的镜像安装了,这样服务器启动以后,系统就自带了WDCP3.2环境,里边有所有的PHP版本,非常方便:






此镜像的详细介绍如下: https://market.aliyun.com/products/53690006/cmjj018542.html?spm=5176.ecsbuyv3.image.1.220f3675eu8FhJ
  查看全部
近期好多客人开通网站的时候购买了阿里云的ECS服务器,默认选择Centos 7,接下来还要手工安装WDCP等WEB环境,费时间和精力,我们发现其实阿里云官方云市场已经WDCP3.2的镜像安装了,这样服务器启动以后,系统就自带了WDCP3.2环境,里边有所有的PHP版本,非常方便:

阿里云-wdcp-云镜像.png


此镜像的详细介绍如下: https://market.aliyun.com/products/53690006/cmjj018542.html?spm=5176.ecsbuyv3.image.1.220f3675eu8FhJ
 

iPhone X的刘海交互

Leo 发表了文章 • 2 个评论 • 151 次浏览 • 2018-02-07 14:19 • 来自相关话题

转载自“css大牛”张鑫旭
 
交互视频效果戳这里体验:http://t.cn/Rp01GKc

就是页面滚动的时候,列表会自动绕着iPhone X的刘海排列。

看上面微博截图的反应,好像觉得这个效果实现很难,实际上,CSS3里面针对这种特定形状环绕的效果已经支持很久了,CSS3 Shapes和CSS3 Regions都是可以实现的,本文就将展示如何使用CSS3 Shapes实现元素内容在滚动的时候自动环绕iPhone X的齐刘海的效果。

一、CSS3 Shapes实现元素滚动自动环绕iPhone X头部刘海效果

可以直接手机(如果是iPhone的话)扫下面二维码体验:





环绕齐刘海滚动实现原理

CSS Shapes中有个CSS属性名为shape-outside,可以让内联元素以不规则的形状进行外部排列,其语法如下
 

/* 关键字值 */ 
shape-outside: none; 
shape-outside: margin-box; 
shape-outside: content-box; 
shape-outside: border-box; 
shape-outside: padding-box;
 /* 函数值 */
 shape-outside: circle(); 
shape-outside: ellipse(); 
shape-outside: inset(10px 10px 10px 10px);
 shape-outside: polygon(10px 10px, 20px 20px, 30px 30px); 
/* <url>值 */ 
shape-outside: url(image.png);
 /* 渐变值 */ 
shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);
 
shape-outside属性要想生效,本身需要是浮动float元素。
本文demo效果实现使用的是shape-outside:polygon(),通过点坐标勾勒出和齐刘海形状相似的多边形形状,CSS代码为:

.shape { 
float: left; 
shape-outside: polygon(0 0, 0 150px, 16px 154px, 30px 166px, 30px 314px, 16px 326px, 0 330px, 0 0);
 }
如下图紫色区域示意:





此时,后面没有设置BFC(块状格式化上下文)的列表元素就会自动环绕这个形状排列,也就是自动避开了齐刘海区域。

然后,只要搞个假的iPhone X的齐刘海图片覆盖在区域上就可以了。

至此,一个静态的列表环绕齐刘海的效果就完成了。

下面关键的问题是如何让滚动的时候,列表元素动态的跟着环绕呢?

由于shape-outside所在的元素是浮动元素,因此,必定会跟着容器一起滚动,我们需要的效果是我们所绘制的这个刘海区域需要是固定的,怎么办?此时,我是借助JavaScript处理的。

原理很简单,监听容器的滚动事件,让我们的shape-outside绘制的区域实时偏移滚动的大小。此时肉眼看上去的效果就是shape-outside区域永远固定在了滚动容器clientHeight的中间。

整个效果就这么实现了,相关JS如下:

box.addEventListener('scroll', function () { var scrollTop = box.scrollTop; // 滚动偏移应用在shape-outside上 shape.style.shapeOutside = 'polygon(0 0, 0 '+ (150 + scrollTop) +'px, 16px '+ (154 + scrollTop) +'px, 30px '+ (166 + scrollTop) +'px, 30px '+ (314 + scrollTop) +'px, 16px '+ (326 + scrollTop) +'px, 0 '+ (330 + scrollTop) +'px, 0 0)'; });
 
二、CSS Shapes环绕iPhone X刘海的其它更简易方法

如果我们的技术选型是更看重简单易懂,而不是资源消耗与占用,还可以使用shape-outside:url(image.png)语法实现类似的效果,其中'image.png'就是用来被环绕的图片,环绕与否是基于计算alpha通道决定,用句简单的话描述,就是沿着图片非透明区域环绕。

由于使用url()的形状计算是基于图片元素,和inset(), circle(), ellipse()或者polygon()这些基础形状方法的计算性质不一样,因此,可以直接使用垂直方向的margin进行偏移。这要比polygon()这样实时计算坐标位置要好理解的多。

我们不妨看下CSS和JS代码,如下:

.shape { 
float: left;
 shape-outside: url(liu-outside.png); 
margin-top: 150px;
 }
box.addEventListener('scroll', function () { 
var scrollTop = box.scrollTop; // 滚动偏移应用在margin-top上 
shape.style.marginTop = (150 + scrollTop) + 'px'; 
});
可以看到,当我们滚动容器的时候,改变的就一个marginTop值就好了;而上面的 shape-outside:polygon()实现需要同时改变多个坐标值。
如果是iPhone手机,还可以扫下面码体验:






有个细节说明
这里有个细节需要说明下,那就是作为环绕区域的图片和前面显示的那个刘海图片不是一张图片,因为我们的刘海区域需要和后面的文字有一段的间隙,因此,url(liu-outside.png)中的这张'liu-outside.png'图片是有特别的实色填充处理的(扩展右侧环绕区域尺寸):





 
三、CSS Shapes的兼容性以及结束语

CSS Shapes的兼容性为Chrome浏览器和Safari浏览器(包括iOS)都是支持的,也就意味着我们是可以在iPhone上使用的,完美。只是需要注意的是在iOS10.2及其之前的版本,CSS Shapes的使用还是需要加webkit私有前缀的,但据说iPhone X至少默认iOS 11,而刘海头交互效果就是针对iPhone X处理的,因此webkit私有前缀不加也没关系。
 
转载自“css大牛”张鑫旭 !important 查看全部
转载自“css大牛”张鑫旭
 
交互视频效果戳这里体验:http://t.cn/Rp01GKc

就是页面滚动的时候,列表会自动绕着iPhone X的刘海排列。

看上面微博截图的反应,好像觉得这个效果实现很难,实际上,CSS3里面针对这种特定形状环绕的效果已经支持很久了,CSS3 Shapes和CSS3 Regions都是可以实现的,本文就将展示如何使用CSS3 Shapes实现元素内容在滚动的时候自动环绕iPhone X的齐刘海的效果。

一、CSS3 Shapes实现元素滚动自动环绕iPhone X头部刘海效果

可以直接手机(如果是iPhone的话)扫下面二维码体验:

640.png

环绕齐刘海滚动实现原理

CSS Shapes中有个CSS属性名为shape-outside,可以让内联元素以不规则的形状进行外部排列,其语法如下
 

/* 关键字值 */ 
shape-outside: none; 
shape-outside: margin-box; 
shape-outside: content-box; 
shape-outside: border-box; 
shape-outside: padding-box;
 /* 函数值 */
 shape-outside: circle(); 
shape-outside: ellipse(); 
shape-outside: inset(10px 10px 10px 10px);
 shape-outside: polygon(10px 10px, 20px 20px, 30px 30px); 
/* <url>值 */ 
shape-outside: url(image.png);
 /* 渐变值 */ 
shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);
 
shape-outside属性要想生效,本身需要是浮动float元素。
本文demo效果实现使用的是shape-outside:polygon(),通过点坐标勾勒出和齐刘海形状相似的多边形形状,CSS代码为:

.shape { 
float: left; 
shape-outside: polygon(0 0, 0 150px, 16px 154px, 30px 166px, 30px 314px, 16px 326px, 0 330px, 0 0);
 }
如下图紫色区域示意:

640_(1).png

此时,后面没有设置BFC(块状格式化上下文)的列表元素就会自动环绕这个形状排列,也就是自动避开了齐刘海区域。

然后,只要搞个假的iPhone X的齐刘海图片覆盖在区域上就可以了。

至此,一个静态的列表环绕齐刘海的效果就完成了。

下面关键的问题是如何让滚动的时候,列表元素动态的跟着环绕呢?

由于shape-outside所在的元素是浮动元素,因此,必定会跟着容器一起滚动,我们需要的效果是我们所绘制的这个刘海区域需要是固定的,怎么办?此时,我是借助JavaScript处理的。

原理很简单,监听容器的滚动事件,让我们的shape-outside绘制的区域实时偏移滚动的大小。此时肉眼看上去的效果就是shape-outside区域永远固定在了滚动容器clientHeight的中间。

整个效果就这么实现了,相关JS如下:

box.addEventListener('scroll', function () { var scrollTop = box.scrollTop; // 滚动偏移应用在shape-outside上 shape.style.shapeOutside = 'polygon(0 0, 0 '+ (150 + scrollTop) +'px, 16px '+ (154 + scrollTop) +'px, 30px '+ (166 + scrollTop) +'px, 30px '+ (314 + scrollTop) +'px, 16px '+ (326 + scrollTop) +'px, 0 '+ (330 + scrollTop) +'px, 0 0)'; });
 
二、CSS Shapes环绕iPhone X刘海的其它更简易方法

如果我们的技术选型是更看重简单易懂,而不是资源消耗与占用,还可以使用shape-outside:url(image.png)语法实现类似的效果,其中'image.png'就是用来被环绕的图片,环绕与否是基于计算alpha通道决定,用句简单的话描述,就是沿着图片非透明区域环绕。

由于使用url()的形状计算是基于图片元素,和inset(), circle(), ellipse()或者polygon()这些基础形状方法的计算性质不一样,因此,可以直接使用垂直方向的margin进行偏移。这要比polygon()这样实时计算坐标位置要好理解的多。

我们不妨看下CSS和JS代码,如下:

.shape { 
float: left;
 shape-outside: url(liu-outside.png); 
margin-top: 150px;
 }
box.addEventListener('scroll', function () { 
var scrollTop = box.scrollTop; // 滚动偏移应用在margin-top上 
shape.style.marginTop = (150 + scrollTop) + 'px'; 
});
可以看到,当我们滚动容器的时候,改变的就一个marginTop值就好了;而上面的 shape-outside:polygon()实现需要同时改变多个坐标值。
如果是iPhone手机,还可以扫下面码体验:

640_(2).png


有个细节说明
这里有个细节需要说明下,那就是作为环绕区域的图片和前面显示的那个刘海图片不是一张图片,因为我们的刘海区域需要和后面的文字有一段的间隙,因此,url(liu-outside.png)中的这张'liu-outside.png'图片是有特别的实色填充处理的(扩展右侧环绕区域尺寸):

640_(3).png

 
三、CSS Shapes的兼容性以及结束语

CSS Shapes的兼容性为Chrome浏览器和Safari浏览器(包括iOS)都是支持的,也就意味着我们是可以在iPhone上使用的,完美。只是需要注意的是在iOS10.2及其之前的版本,CSS Shapes的使用还是需要加webkit私有前缀的,但据说iPhone X至少默认iOS 11,而刘海头交互效果就是针对iPhone X处理的,因此webkit私有前缀不加也没关系。
 
转载自“css大牛”张鑫旭 !important

常用Linux命令行收藏

Eastern_Design_Studio 发表了文章 • 0 个评论 • 105 次浏览 • 2018-01-30 17:33 • 来自相关话题

LINUX常用命令收藏:
因为关闭了sendmail以后,删除/var/spool/clientmqueue/底下大量的邮件信息的命令:
find /var/spool/clientmqueue/ -type f -exec rm {} \+
经常需要在centos服务器上的项目文件里做给予文件夹和文件不同权限的操作,如果挨个给,几千个文件绝无可能,于是乎命令行成了最好的方式。
假设之前为了某些权限问题,直接给予了所有文件跟文件夹777的权限,现在想恢复到之前文件夹是755,文件是644的权限,可以通过以下命令行来实现:
    find . -type d -exec chmod 755 {} \;
    find . -type f -exec chmod 644 {} \;
第一个命令是查找所有的文件夹并强制给予755的权限,第二个命令是查找所有的文件并强制给予644的权限。
以下命令可拷贝隐藏文件:
yes | cp -a new/files/* files

192.81.132.6
压缩包含隐藏文件:
zip -r 1.zip .
解压缩 .tgz 文件
gtar xvzf file.TGZ
执行以下命令查看当前占用了88端口的进程是哪个进程netstat -ltnp | grep ':88'tcp 0 0 :::88 :::* LISTEN 3697/httpd
由上边可以看出占用88端口的是3697/httpd,因此执行以下命令杀死这个进程,然后再次重启apache就可以了:
# kill -9 3697
# service httpd restart
WordPress数据库命令行备用:
update  wp_options set option_value=replace( option_value ,'http://www.iwiss.com','https://www.iwiss.com')

update wp_posts set post_content=replace(post_content,'http://yhzxcrystal.eastdesign.net/','http://www.yhzxcrystal.com/')
update wp_posts set guid=replace(guid,'http://eaqlighting.eastdesign.net/','http://cn-eaqlighting.eastdesign.net/')

update wp_posts set post_content=replace(post_content, 'http://oceanmarine.good-ocean.com','https://www.grandoceanmarine.com')
update wp_postmeta set meta_value=replace(meta_value,'http://iirain.eastdesign.net/','http://itiirain.eastdesign.net/')

The 'host' command is a DNS lookup utility. It shouldn't be active as a process like you've described. Is there a cron entry or some script that is executing it? You can tell with the command:

ps auxf | grep -i host | grep -v grep

The column on the far left should be the user executing it.
su - www
crontab -l

You might also check for other processes started by the 'www' user:

ps auxf | grep -i www
grep -i "host" /www/wdlinux/wdcp/task/*.php

zip命令排除子文件夹不要被压缩的命令如下:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
centos OOMing 解决方案:
https://library.linode.com/tro ... rking
每一秒返回一次系统负载:
vmstat 10
查看apache 进程数:
ps -ef|grep httpd|wc -l
按照内存使用量倒序排列:
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
Apache 内存被耗光以后处理方法:
netstat -ltnp | grep ':88’

列出所有占用88端口的PID,比如这里列出的PID为3697接着用下列命令杀死这个进程:

kill -9 3697

然后重启httpd 就可以了

service httpd restart

列出当前文件夹目录大小,以G,M,K显示。
du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf"%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"):$1>=2**10? ($1/2**10, "K"): ($1, "")}e'
查询大小超过100m的文件 
find / -type f -size +100000k -ls一:查看cpu

more /proc/cpuinfo | grep “model name”
grep “model name” /proc/cpuinfo

如果觉得需要看的更加舒服

grep “model name” /proc/cpuinfo | cut -f2 -d:

二:查看内存

grep MemTotal /proc/meminfo

grep MemTotal /proc/meminfo | cut -f2 -d:

free -m |grep “Mem” | awk ‘{print $2}’

三:查看cpu是32位还是64位

查看CPU位数(32 or 64)

getconf LONG_BIT

四:查看当前linux的版本

more /etc/redhat-release
cat /etc/redhat-release

五:查看内核版本

uname -r

uname -a

六:查看当前时间,如果不对则设置为北京时间

date
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate us.pool.ntp.org
没有安装ntpdate的可以yum一下:
yum install -y ntpdate

加入定时计划任务,每隔10分钟同步一下时钟
crontab -e
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

上面已经介绍如何同步时间了,

七:查看硬盘和分区

df -h

fdisk -l

也可以查看分区

du -sh

可以看到全部占用的空间

du /etc -sh

可以看到这个目录的大小

du –max-depth=1 -h

查看各个目录占用空间大小

八:查看安装的软件包

查看系统安装的时候装的软件包

cat -n /root/install.log

more /root/install.log | wc -l

查看现在已经安装了那些软件包

rpm -qa

rpm -qa | wc -l

yum list installed | wc -l

不过很奇怪,我通过rpm,和yum这两种方式查询的安装软件包,数量并不一样。没有找到原因。

九:查看键盘布局

cat /etc/sysconfig/keyboard

cat /etc/sysconfig/keyboard | grep KEYTABLE | cut -f2 -d=

十:查看selinux情况

sestatus

sestatus | cut -f2 -d:

cat /etc/sysconfig/selinux

十一:查看ip,mac地址

在ifcfg-eth0 文件里你可以看到mac,网关等信息。

ifconfig

cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR

cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR | cut -f2 -d=

ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-

ifconfig   | grep ‘inet addr:’| grep -v ’127.0.0.1′ | cut -d: -f2 | awk ‘{ print $1}’

查看网关

cat /etc/sysconfig/network

查看dns

cat /etc/resolv.conf

十二:查看默认语言

echo $LANG $LANGUAGE

cat /etc/sysconfig/i18n

十三:查看所属时区和是否使用UTC时间

cat /etc/sysconfig/clock

十四:查看主机名

hostname

cat /etc/sysconfig/network

修改主机名就是修改这个文件,同时最好也把host文件也修改。

十五:如何杀死mysql进程

pkill mysqld

十六:查询大小超过100m的文件

find / -type f -size +100000k -ls

十七:开机自启动设置

编辑rc.local文件
#vim /etc/rc.d/rc.local

# du -sh # 查看指定目录的大小

# uptime # 查看系统运行时间、用户数、负载

# cat /proc/loadavg # 查看系统负载

# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务

linux CentOS5.4如何修改主机名

一:使用hostname命令
[root@test ~]# hostname yourname
这样只是临时更改了主机名。
二: 修改linux主机的配置文件/etc/sysconfig/network 和 /etc/hosts
1.修改/etc/sysconfig /network里面的主机名字。
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yourname                //在这修改hostname
GATEWAY=192.168.1.1
2.修改/etc/hosts里面 的名字
# vi /etc/hosts
127.0.0.1              localhost.localdomain localhost
192.168.1.121          yourname //在这修改hostname
//有时候只有这一 行
127.0.0.1              yourname localhost.localdomain localhost
3. 让更改的名字在不重启机器下生效
# hostname yourname
# su 查看全部
LINUX常用命令收藏:
因为关闭了sendmail以后,删除/var/spool/clientmqueue/底下大量的邮件信息的命令:
find /var/spool/clientmqueue/ -type f -exec rm {} \+
经常需要在centos服务器上的项目文件里做给予文件夹和文件不同权限的操作,如果挨个给,几千个文件绝无可能,于是乎命令行成了最好的方式。
假设之前为了某些权限问题,直接给予了所有文件跟文件夹777的权限,现在想恢复到之前文件夹是755,文件是644的权限,可以通过以下命令行来实现:
    find . -type d -exec chmod 755 {} \;
    find . -type f -exec chmod 644 {} \;
第一个命令是查找所有的文件夹并强制给予755的权限,第二个命令是查找所有的文件并强制给予644的权限。
以下命令可拷贝隐藏文件:
yes | cp -a new/files/* files

192.81.132.6
压缩包含隐藏文件:
zip -r 1.zip .
解压缩 .tgz 文件
gtar xvzf file.TGZ
执行以下命令查看当前占用了88端口的进程是哪个进程netstat -ltnp | grep ':88'tcp 0 0 :::88 :::* LISTEN 3697/httpd
由上边可以看出占用88端口的是3697/httpd,因此执行以下命令杀死这个进程,然后再次重启apache就可以了:
# kill -9 3697
# service httpd restart
WordPress数据库命令行备用:
update  wp_options set option_value=replace( option_value ,'http://www.iwiss.com','https://www.iwiss.com')

update wp_posts set post_content=replace(post_content,'http://yhzxcrystal.eastdesign.net/','http://www.yhzxcrystal.com/')
update wp_posts set guid=replace(guid,'http://eaqlighting.eastdesign.net/','http://cn-eaqlighting.eastdesign.net/')

update wp_posts set post_content=replace(post_content, 'http://oceanmarine.good-ocean.com','https://www.grandoceanmarine.com')
update wp_postmeta set meta_value=replace(meta_value,'http://iirain.eastdesign.net/','http://itiirain.eastdesign.net/')

The 'host' command is a DNS lookup utility. It shouldn't be active as a process like you've described. Is there a cron entry or some script that is executing it? You can tell with the command:

ps auxf | grep -i host | grep -v grep

The column on the far left should be the user executing it.
su - www
crontab -l

You might also check for other processes started by the 'www' user:

ps auxf | grep -i www
grep -i "host" /www/wdlinux/wdcp/task/*.php

zip命令排除子文件夹不要被压缩的命令如下:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
centos OOMing 解决方案:
https://library.linode.com/tro ... rking
每一秒返回一次系统负载:
vmstat 10
查看apache 进程数:
ps -ef|grep httpd|wc -l
按照内存使用量倒序排列:
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
Apache 内存被耗光以后处理方法:
netstat -ltnp | grep ':88’

列出所有占用88端口的PID,比如这里列出的PID为3697接着用下列命令杀死这个进程:

kill -9 3697

然后重启httpd 就可以了

service httpd restart

列出当前文件夹目录大小,以G,M,K显示。
du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf"%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"):$1>=2**10? ($1/2**10, "K"): ($1, "")}e'
查询大小超过100m的文件 
find / -type f -size +100000k -ls一:查看cpu

more /proc/cpuinfo | grep “model name”
grep “model name” /proc/cpuinfo

如果觉得需要看的更加舒服

grep “model name” /proc/cpuinfo | cut -f2 -d:

二:查看内存

grep MemTotal /proc/meminfo

grep MemTotal /proc/meminfo | cut -f2 -d:

free -m |grep “Mem” | awk ‘{print $2}’

三:查看cpu是32位还是64位

查看CPU位数(32 or 64)

getconf LONG_BIT

四:查看当前linux的版本

more /etc/redhat-release
cat /etc/redhat-release

五:查看内核版本

uname -r

uname -a

六:查看当前时间,如果不对则设置为北京时间

date
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate us.pool.ntp.org
没有安装ntpdate的可以yum一下:
yum install -y ntpdate

加入定时计划任务,每隔10分钟同步一下时钟
crontab -e
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

上面已经介绍如何同步时间了,

七:查看硬盘和分区

df -h

fdisk -l

也可以查看分区

du -sh

可以看到全部占用的空间

du /etc -sh

可以看到这个目录的大小

du –max-depth=1 -h

查看各个目录占用空间大小

八:查看安装的软件包

查看系统安装的时候装的软件包

cat -n /root/install.log

more /root/install.log | wc -l

查看现在已经安装了那些软件包

rpm -qa

rpm -qa | wc -l

yum list installed | wc -l

不过很奇怪,我通过rpm,和yum这两种方式查询的安装软件包,数量并不一样。没有找到原因。

九:查看键盘布局

cat /etc/sysconfig/keyboard

cat /etc/sysconfig/keyboard | grep KEYTABLE | cut -f2 -d=

十:查看selinux情况

sestatus

sestatus | cut -f2 -d:

cat /etc/sysconfig/selinux

十一:查看ip,mac地址

在ifcfg-eth0 文件里你可以看到mac,网关等信息。

ifconfig

cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR

cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR | cut -f2 -d=

ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-

ifconfig   | grep ‘inet addr:’| grep -v ’127.0.0.1′ | cut -d: -f2 | awk ‘{ print $1}’

查看网关

cat /etc/sysconfig/network

查看dns

cat /etc/resolv.conf

十二:查看默认语言

echo $LANG $LANGUAGE

cat /etc/sysconfig/i18n

十三:查看所属时区和是否使用UTC时间

cat /etc/sysconfig/clock

十四:查看主机名

hostname

cat /etc/sysconfig/network

修改主机名就是修改这个文件,同时最好也把host文件也修改。

十五:如何杀死mysql进程

pkill mysqld

十六:查询大小超过100m的文件

find / -type f -size +100000k -ls

十七:开机自启动设置

编辑rc.local文件
#vim /etc/rc.d/rc.local

# du -sh # 查看指定目录的大小

# uptime # 查看系统运行时间、用户数、负载

# cat /proc/loadavg # 查看系统负载

# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务

linux CentOS5.4如何修改主机名

一:使用hostname命令
[root@test ~]# hostname yourname
这样只是临时更改了主机名。
二: 修改linux主机的配置文件/etc/sysconfig/network 和 /etc/hosts
1.修改/etc/sysconfig /network里面的主机名字。
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yourname                //在这修改hostname
GATEWAY=192.168.1.1
2.修改/etc/hosts里面 的名字
# vi /etc/hosts
127.0.0.1              localhost.localdomain localhost
192.168.1.121          yourname //在这修改hostname
//有时候只有这一 行
127.0.0.1              yourname localhost.localdomain localhost
3. 让更改的名字在不重启机器下生效
# hostname yourname
# su

已修复隽永智库在Mac端Firefox部分版本上提示https不安全的问题

Eastern_Design_Studio 发表了文章 • 0 个评论 • 84 次浏览 • 2018-01-29 22:28 • 来自相关话题

已修复隽永智库在Mac端Firefox部分版本上提示https不安全的问题。





 
已修复隽永智库在Mac端Firefox部分版本上提示https不安全的问题。

1517236026340.jpg

 

创业杂谈–茅侃侃自杀事件之我见

Eastern_Design_Studio 发表了文章 • 0 个评论 • 97 次浏览 • 2018-01-26 12:41 • 来自相关话题

这两天被80后创业偶像茅侃侃自杀事件给刷屏了,遍地都是遗憾和同情,作为同样也是80后创业的我,总觉得很多话不吐不快。

说实话要不是这两天被茅侃侃自杀事件给刷屏,同样作为80后,甚至比他还大两岁的我,竟然在此之前从来没听过这个人,这里不排除我是小人物,眼光视野窄的原因,但是众所周知,互联网自媒体大爆炸的年代,如我这种一年几乎360天都在网上的人,会不认识一个如此大知名度的创业奇才?不幸的是我还真的就没听过这个“名人”,说明了什么?

纵观整个互联网头条,都是蹭热度,刷存在感的人,什么互联网创业奇才,80后创业偶像,怪才等等标签到处都是,显而易见这些标签大都是自杀后被强加上去的,真实情况是,绝大多数人都不认识这个所谓的创业奇才,至少普通网民,我敢说过半数没听过这个人,至少可以肯定的是他并没与那么的出名。

反思这个悲剧,归根结底还是自我私欲的膨胀,创业本身就是一个九死一生,甚至是九十九死一生的小概率事件,一家企业的成功需要创始人在相当长一段时间内保持绝对清醒的头脑,做出一系列没有致命错误的决策,这是非常非常困难的事情,人非圣贤孰能无过,问题就是创业要求的就是人要像圣贤一般,不可以有丝毫错误,哪怕一点点失误也可能把几年或者几十年创下的事业带进失败的深渊。

那么茅侃侃为何走到了今天的悲剧局面,反观众多媒体所报道的蛛丝马迹,我觉得就是自我私欲膨胀,自我才华无法驾驭私欲膨胀带来的必然结局,要知道一家企业最终能够决胜于市场,靠的不是创始人每天的频频曝光,到处像明星一样刷存在感,靠的是有核心竞争力的产品和服务,靠的是时刻保持技术的创新和一定程度的市场领先,而这些都需要创始人保持时刻的市场敏锐洞察力,时刻保持团队以最佳的状态保持住核心竞争力,无论公司规模大小,是否盈利是判断好公司和坏公司的唯一标准,当然类似京东这种达到绝对化规模,有众多资本市场持续投入的除外,因为京东布的是一个相当大的局,绝非小的创业者能达到的高度。

当你的公司在10人左右的时候无法保持盈利,如果你这个时候不是想着去寻找原因,提升产品竞争力,改进服务,而是想着我是否因为规模太小才导致不盈利,我是否应该赶紧引入投资,扩大规模,搬迁公司到5星级写字楼,豪装办公室,这样以后,一定能盈利,如果真的这样我告诉你,你公司离倒闭不远了,创业不是比拼排场,比拼规模,10人团队的时候一定要实现盈利,至少你要知道你赢利点在哪里,未来多久内可以实现持续的盈利,就像马云说的那样,一家好的公司一定要有一个就算天塌下来也能盈利的核心业务。

而反观茅侃侃创业历程看来,他最大的问题就是太早成功了,太早的被贴上了创业奇才,电脑天才的标签,正是这些光环最终害死了他,看他这几年的历程看来,没有一份事业是创造了真的有足够竞争力的产品和服务的,基本都是在蹭行业的热度,在画大饼,在向大众兑现他作为创业偶像的承诺,也就是说他已经是成功人士了,不可能从小生意做起,脚踏实地不适合他了,没有几千万的流水,他无法对公众交代。

而要知道,一家企业哪能轻松做到一年几千万的流水,退一万步来说就算你做到了几千万的流水,你又能否保证有足够的利润来兑现给团队员工的回报,如何确保后续几年内持续的利润增长,而且一旦引入了资本以后,核心创始人如何确保自己能够100%的掌控这家公司的命脉,不会沦为资本市场的牺牲品呢,显然茅侃侃这方面都没有做好,看他创办的几家公司,严格意义上来说都不是他自己最拿手的行业,仅仅是为了快速吸引资本入场,快速成功,快速赚钱,快速兑现上市企业CEO头衔的光环,急功近利加上资本市场的无情,都最终快速的兑现了他最终的命运。

同样作为80后创业的我,和他没有可比性,但是我们一步一个脚印的脚踏实地,不盲目扩张,不盲目跟风,不盲目过于自信,时刻保持足够的市场敏锐度,同时对市场经济运作规律保持足够的敬畏心,不做自己能力不可企及的事情,心甘情愿的在相当长一段时间里做一名普普通通的创业者,带个小团队,尽一份社会责任,赚点养家糊口的钱,无愧于家庭,无愧于社会,也无愧于这个80后的标签。

最后声明一下,这篇文章绝无蹭热度的意思,本人对同时80后的茅侃侃的自杀表示非常的痛心和同情,仅仅因为自己也是80后,同样又没有任何名校学历的光环,感同身受的同时觉得有些话不吐不快,洋洋洒洒写完近两千字,心理舒坦了很多,以此作为80后创业同仁们共勉,2018年继续艰难前行,但充满信心。 查看全部
这两天被80后创业偶像茅侃侃自杀事件给刷屏了,遍地都是遗憾和同情,作为同样也是80后创业的我,总觉得很多话不吐不快。

说实话要不是这两天被茅侃侃自杀事件给刷屏,同样作为80后,甚至比他还大两岁的我,竟然在此之前从来没听过这个人,这里不排除我是小人物,眼光视野窄的原因,但是众所周知,互联网自媒体大爆炸的年代,如我这种一年几乎360天都在网上的人,会不认识一个如此大知名度的创业奇才?不幸的是我还真的就没听过这个“名人”,说明了什么?

纵观整个互联网头条,都是蹭热度,刷存在感的人,什么互联网创业奇才,80后创业偶像,怪才等等标签到处都是,显而易见这些标签大都是自杀后被强加上去的,真实情况是,绝大多数人都不认识这个所谓的创业奇才,至少普通网民,我敢说过半数没听过这个人,至少可以肯定的是他并没与那么的出名。

反思这个悲剧,归根结底还是自我私欲的膨胀,创业本身就是一个九死一生,甚至是九十九死一生的小概率事件,一家企业的成功需要创始人在相当长一段时间内保持绝对清醒的头脑,做出一系列没有致命错误的决策,这是非常非常困难的事情,人非圣贤孰能无过,问题就是创业要求的就是人要像圣贤一般,不可以有丝毫错误,哪怕一点点失误也可能把几年或者几十年创下的事业带进失败的深渊。

那么茅侃侃为何走到了今天的悲剧局面,反观众多媒体所报道的蛛丝马迹,我觉得就是自我私欲膨胀,自我才华无法驾驭私欲膨胀带来的必然结局,要知道一家企业最终能够决胜于市场,靠的不是创始人每天的频频曝光,到处像明星一样刷存在感,靠的是有核心竞争力的产品和服务,靠的是时刻保持技术的创新和一定程度的市场领先,而这些都需要创始人保持时刻的市场敏锐洞察力,时刻保持团队以最佳的状态保持住核心竞争力,无论公司规模大小,是否盈利是判断好公司和坏公司的唯一标准,当然类似京东这种达到绝对化规模,有众多资本市场持续投入的除外,因为京东布的是一个相当大的局,绝非小的创业者能达到的高度。

当你的公司在10人左右的时候无法保持盈利,如果你这个时候不是想着去寻找原因,提升产品竞争力,改进服务,而是想着我是否因为规模太小才导致不盈利,我是否应该赶紧引入投资,扩大规模,搬迁公司到5星级写字楼,豪装办公室,这样以后,一定能盈利,如果真的这样我告诉你,你公司离倒闭不远了,创业不是比拼排场,比拼规模,10人团队的时候一定要实现盈利,至少你要知道你赢利点在哪里,未来多久内可以实现持续的盈利,就像马云说的那样,一家好的公司一定要有一个就算天塌下来也能盈利的核心业务。

而反观茅侃侃创业历程看来,他最大的问题就是太早成功了,太早的被贴上了创业奇才,电脑天才的标签,正是这些光环最终害死了他,看他这几年的历程看来,没有一份事业是创造了真的有足够竞争力的产品和服务的,基本都是在蹭行业的热度,在画大饼,在向大众兑现他作为创业偶像的承诺,也就是说他已经是成功人士了,不可能从小生意做起,脚踏实地不适合他了,没有几千万的流水,他无法对公众交代。

而要知道,一家企业哪能轻松做到一年几千万的流水,退一万步来说就算你做到了几千万的流水,你又能否保证有足够的利润来兑现给团队员工的回报,如何确保后续几年内持续的利润增长,而且一旦引入了资本以后,核心创始人如何确保自己能够100%的掌控这家公司的命脉,不会沦为资本市场的牺牲品呢,显然茅侃侃这方面都没有做好,看他创办的几家公司,严格意义上来说都不是他自己最拿手的行业,仅仅是为了快速吸引资本入场,快速成功,快速赚钱,快速兑现上市企业CEO头衔的光环,急功近利加上资本市场的无情,都最终快速的兑现了他最终的命运。

同样作为80后创业的我,和他没有可比性,但是我们一步一个脚印的脚踏实地,不盲目扩张,不盲目跟风,不盲目过于自信,时刻保持足够的市场敏锐度,同时对市场经济运作规律保持足够的敬畏心,不做自己能力不可企及的事情,心甘情愿的在相当长一段时间里做一名普普通通的创业者,带个小团队,尽一份社会责任,赚点养家糊口的钱,无愧于家庭,无愧于社会,也无愧于这个80后的标签。

最后声明一下,这篇文章绝无蹭热度的意思,本人对同时80后的茅侃侃的自杀表示非常的痛心和同情,仅仅因为自己也是80后,同样又没有任何名校学历的光环,感同身受的同时觉得有些话不吐不快,洋洋洒洒写完近两千字,心理舒坦了很多,以此作为80后创业同仁们共勉,2018年继续艰难前行,但充满信心。