重新理解创业

《重新理解创业》 周航

作者是2018年左右 易到用车 的创始人,当年这个产品是颠覆互联网创业圈的,概念先进,需求旺盛,资金青睐;对所有从事互联网的人来说都是神话级别的创业故事;当年甚至还没有一个像样的支付产品。

作者将自己在 易到 的始末做了一个全盘的回顾,尤其在一些错误的决策上将自己做了深度的剖析,不留余地的,毫无保留的揭开了那块结了痂的伤疤;成功的创业故事是无法复制和借鉴的,因为「势」无法复制,即使用同样的一班人马也无法在另外一个时间去完成同样的成果;我们能学到的就是从失败的例子里总结不应该去做什么,有时候人就是这么喜欢模仿成功,觉得成功是有固定的套路的,但事实证明成功的路就是失败的路,就像生死一样,生的终点就是死,无论怎样努力,结局都注定了,没有死亡的生活就失去了时间的意义,同时也没有了生命的意义。伟大的成功和最糟的失败仅一步之遥,无数的例子也证明,失败就是创业的常态;我们该努力去接受失败,结识那些能宽容你失败的良师益友,甚至是学会管理失败,控制失败带来的风险和损失,以及在一次次的失败中复盘,成长,为下一次成功做准备。

Node中的Cluster

Node.js 通常采用 Single-threaded 的模式运行,即始终只有一个进程,也就是只能使用到计算机的一颗CPU,因此在选择服务器作为 Node 的运行环境时,CPU的主频是关键,而不是核心的数量。如何能够激发更多的核心参与运算,Cluster模块被设计了出来,使用 IPC 的基本通讯方式,在master进程中fork出若干的worker进程,彼此协调,共同完成任务。这个对于从未接触过分布式的开发者来说非常适合学习和理解。

基本概念

  • IPC (Inter-Process Communication) 一种非常通用的多进程通讯方式,可以实现不同程序之间的协作,举个简单的例子:cat ~/foo.txt | grep bar 这样一个简单的linux指令就是一次 IPC 通信,中间的管道符用于将前面的程序的输出作为输入给到后面的程序,catgrep 就是2个独立的进程。由此可见,现代计算机中普遍使用IPC,只是我们尚未察觉。不过IPC只限于一台机器内部通讯,区别于传统意义上的分布式。

  • Node中的Cluster可以监听本地的一个端口,并将请求转发到不同的 worker 内进行处理,每一个worker都是一个独立的进程,可以享用单独的CPU,在资源不够的情况下也会根其它的worker进程共享。Master进程内部有一个简单的负载机制,可以通过轮询或者饥饿模式(不知这么翻译是否妥当?)下面有原文的引用:

    The cluster module supports two methods of distributing incoming connections. The first one (and the default one on all platforms except Windows) is the round-robin approach, where the primary process listens on a port, accepts new connections and distributes them across the workers in a round-robin fashion, with some built-in smarts to avoid overloading a worker process. The second approach is where the primary process creates the listen socket and sends it to interested workers. The workers then accept incoming connections directly.

    除了简单的转发请求之外,master和workers之间也可以进行通讯,相互之间发送指令,限于 master → all workers 以及 worker → master 之间,也就是 worker 之间无法直接通讯,master 也无法单独给某一个 worker 发信息,当然可以通过编码的方式来实现,方案也非常简单。

Node中的EventLoop

Node.js 借助于V8的加持,在性能方面表现优异,在 single-thread 的基本架构下,可以达到NIO的惊人效果,这里必然存在一个超强的任务处理框架,那就是 Event Loop.

Node中的OOM

Node.js 中的内存管理和垃圾回收是怎样的? 如何解决内存溢出的问题,以及如何找出导致OOM的根因?

内存溢出会怎样?

于其它编程语言一样,Node内存溢出之后会抛出一个OOM的异常,并强行结束当前进程,导致服务不可用,通常的容器编排系统会重新启动一个新的实例,所以如果没有搜集日志并进行分析的话可能会忽略这类型的错误;通常日志会这样:

关于自己(三)

写这些只为总结总结自己,希望能从过去能回忆起来的一切来更好的发现自己。

尝试突破

加入新公司之前,有一个Offer让我觉得世界真的很小,之前公司的面试官,在我入职之后不久便辞职创业了,时隔一年,创业不顺利,他重新出来工作,加入了这家公司,面试过程中恰巧碰到了,简单的聊了一下,有一种心心相惜的感觉。经过一番思想斗争,最终没有接受那份Offer,总觉得团队里应该有不同的声音和视角,我和他太像了。

在选择公司的这些日子,每天上午会沿着外滩跑步,以理清思路,面对不同的Offer,从各个方面去了解团队,公司,行业,未来等。跑步和游泳是2个最能让人想清楚问题的方式,经过了半个月左右的考虑,我接受了现在公司的邀请。

Node中的Stream

Node.js 中的 Stream 模块是非常厉害,高效却不容易理解的模块。

常常因为不太理解而不太敢用。

关于解决类似「大众点评」字体反爬的方法

关于解决类似「大众点评」字体反爬的方法

反爬虫的常规方式通常包括: IP限流, UA 限制, Cookie 限制等。解决办法也比较常规,通过在 Header 中不断更换伪造的信息或者使用代理IP的方式来隐藏自己的爬虫。

不过机智的反爬虫工程师从来没有停止思考,想出了通过字体文件来隐藏数据;

大众点评中包含很多商家信息,是一个巨大的数据中心,对于电话和地址这些信息,需要进行反爬;正常用户能看到的信息,通过控制台分析和HTML源码分析得到的却是乱码。

Phaser3与微信小游戏的集成

Phaser3 是一个非常轻巧灵活且活跃的游戏框架,可以用来方便的开发2D游戏,在 github 上也有很多关注,开发团队也在持续维护。 对于我来说,比较关注它的易用性,本身并没有游戏开发经验,所以需要一个文档相当全面的框架来实现游戏逻辑。经过筛选,决定使用这个小型的2D引擎。 如果仅仅用它来开发web版,那可以开箱即用,迅速进入撸代码的环节,但是对于微信小游戏来说,本身提供的 windows 和 document 对象都是经过处理的,不能直接拿来用,所以需要做一个适配,google了一圈确实没有找到现成的东西,于是只能盲人摸象,根据自己的理解结合一些过时的文档资料进行整理和实践。终于找到了一个可行的方案。

关于自己(二)

写这些只为总结总结自己,希望能从过去能回忆起来的一切来更好的发现自己。

创业失败

创业重要的就是有销售意识,对于3个搞技术的人来说,太难了,空有一腔热血和技能,却不能转化为销售,就这么熬着;当时是代理了一家乳胶枕产品,然后开了淘宝店,设计商品页,产品包装等等; 最高峰,那年双十一卖了2w块钱的货,然后动用全部家庭成员去打包发货;慢慢一屋子的货,现在想来也蛮有趣的;

当时为了推广也想了很多方法,直通车性价比真的低,后来还是通过hack的方式,在一个海淘论坛里面机器注册了若干小号,然后自动发帖,马甲号自动回复跟帖,虽然很low,但是确实带来了不少流量,也慢慢有了销量;

Convert RTSP to RTMP with FFMPEG

本文主要介绍在浏览器上播放监控摄像头的方法。一些主流的监控摄像头都提供了 rtsp 流媒体协议,这种协议只能通过特定的播放器才能正常播放,想要在浏览器中播放,必须要通过转码;具体细节这里不一一列举,可以搜索rtsprtmp 的原理。

北京之旅

满怀期待

做为首都,北京一直都让我们很自豪,无论如何都是要去看看的;平时也都挂在嘴上,找机会一定要去;过年了,没啥特殊安排,约上好友了了这个心愿。

都说到了春运时期,北京是座空城,我们信了;从首都机场下了飞机,进3环的路上确实很顺畅,我们更坚信了这个说法;对接下来几天的行程也很期待,憧憬着用悠然自得的态度游览首都。

关于自己看过和想看的一些书,整理一下,记录一下感悟。

python实现简单的图像识别

这里说的图像识别只是简单的图片对比,并不是通过机器学习之后实现的人脸识别等。

实现目标

  • 1.截取屏幕中的一块区域并保存到硬盘中
  • 2.将图片中的内容识别为数字
  • 3.调用鼠标和键盘模拟操作

Ionic1.x 小总结

一些小牢骚:

在这个前端框架非常丰富的时代,选择一个合适的框架来做产品或做项目是一个相对纠结的决定;毕竟这些作品都还在发展,很多人甚至还没来得及使用它们就已经不在或者淘汰了,甚至原创团队都不得不做很大的break change;用户在发展,需求在变化,前端这个新兴的产业很吸引人又很淘气;用java就会用到spring,这点已经毋庸置疑;而面对前段这么多的选择,似乎很难统一意见。


最近结束了一个小项目,今天做一个小总结:

推荐资源整理

整理了一些工作中可能会经常用到的提升工作效率的资源,包括前端和一些效率工具。

如何实现一个简单的插件扩展

为什么需要插件扩展?

任何一个易用的系统都强调易用,易维护,模块化是nodejs的核心思想(显然并不是nodejs首先提出的);nodejs有很多优秀的package都支持插件式开发:hexo(非常流行的静态博客生成工具),egg(ali团队推出的企业级开发框架),etc…

封装Angularjs Websocket并支持Promise

最近完成了一个ionic项目,服务端是用的websocket,之前还没应用过ws来做前后端的交互;经过这个项目的实践,将这段代码进行封装,并做简要的说明。

关于自己(一)

写这些只为总结总结自己,希望能从过去能回忆起来的一切来更好的发现自己。

平凡出生

1988.1.23 出生于江苏省盐城市的一个普通的乡村,没有兄弟姐妹,4岁随父母安顿在江苏扬州的一个县:江都(如今已隶属扬州的一个区)。

资质平庸

从小学习一般,偏科严重(只是文科差得没法看了而已,理科并没有好到哪里去),父母还是很希望能考个靠谱的大学,改善一下自己的命运,高中没有好好学,还动了歪脑经,练习了体育特长生,其实身体素质着实一般;最终念了个普通的大专院校。