认准大哥,拜好山头

凡夫俗子,步入社会,第一件事:“认准大哥,拜好山头”

大哥谁都相当,但当自己都没得肉吃的时候,自然当不了大哥。

若想有肉吃,先要入圈子,入圈子则要“认准大哥,拜好山头”

认准大哥

好大哥,会让自己的一帮小弟有肉吃,不但授之以鱼,还会授之以渔。

识别大哥,一看大哥自己有多少肉,再看大哥的小弟有多少肉。大哥肉多,分给小弟的肉也多,此大哥自然有跟随的价值。

拜好山头

好山头,风水绝佳,有现成的肉,也有未来的肉。

认准大哥,比拜好山头,更重要。

centos7安装锐速采坑记

国内用户访问海外服务器速度慢,遂想装个锐速提高下速度,减少丢包率。

安装锐速前需注意:

  • 先检查centos系统内核是否支持锐速安装。锐速破解版仅支持部分内核安装:https://www.91yun.co/serverspeeder91yun

  • 若内核版本不匹配,需要更换内核。内核更换有风险,本渣将centos7原有内核版本更换之后,重启系统ssh就登陆不上了,联系机房,也没办法,只能重装系统。机子上的数据未备份,于是蛋疼了。

  • 端口号需要为eth0,尤其多IP的机子,默认端口名称一般都不是eth0,需另行更改

  • 综上,若购买海外机子,且大部分访问用户都在国内,最好在购买前联系IDC客服,安装指定内核版本的centos系统,可以直接安装锐速不用更换内核的版本即可

锐速一键安装脚本:https://github.com/91yun/serverspeeder

交易、偷抢、暴力、回报率与财富

交易

交易创造财富,即dT>0

交易越多,则财富越大;交易减少,则财富减少;没有交易,则没有财富;

该公式,作用于微观与宏观,适用于世界中各个角落,大到国家政策,小到个人选择。

比如政府出台的某项政策,或商人搞的某个项目,执行最终的结果,并没有产生交易(创造新的交易,或提高已有交易效率),甚至是阻碍交易,徒增交易成本,则不会创造财富。

偷抢(抢劫&偷窃)

交易,在双方自愿的前提下,是有效的交易,双方均能够财富增长。

若双方有一方是非自愿(抢劫)、不自知(偷窃)的进行交易,则一方财富增长,一方财富损失,长此以往,双方总财富不断减少。

抢劫,既包含暴力意义上的抢劫,也包含政府出台的政策(苛政猛于虎)

暴力

自古以来,有人的地方,就有暴力,暴力无法被磨灭,只能用更强大的暴力去压制,所以需要政府介入,政府是最大的暴力机构。

对内,政府需要促进交易产生,并利用无可匹敌的暴力,去维护市场自由,保障交易自愿进行

对外,构建国防,抵御外族入侵,保证国内市场正常运作

回报率

回报率的分子分母,均需要折算成购买力,在进行回报率的计算。

比如余额宝,年化3.9%,放10万,存一年,一年后,利息4000上下,提出本金+利息,共计104000元。

余额宝的利息和本金,都是人民币,折算成购买力,则需要把人民币通缩的影响加进来。

人民币每年通缩贬值13%,13%是对实际购买力有啥影响,就是今天你去超市,花20块钱买一袋10个鸡蛋,但明年的今天再去超市买一袋鸡蛋,同样花20块钱,但仔细一数,发现袋子里比去年少1个蛋。

余额宝存10万,放一年,实际收益率为:3.9%-13% = -9.1%,回报率是负数。

所以,计算回报率,均需要折算成购买力,在进行计算。比如现金,需要加入通缩率,比如房产,需要加上折旧率

财富

于个人而言,积累财富无外乎:开源、节流

开源,在于创造新交易,或提高交易效率。

节流,在于将现金转化成资产,合理配置,其结果是回报率,资产价值折合实际购买力能够跑赢通缩

所以,100个理财故事,99个说:存1万,每年利率3%,30年后连本带利51万,本来就是错的。

投机价值

投资一个A和投机一个B,两者关键区别在于,A往往是稀缺品、不可替代品,B往往是替代品

那为什么有非常多的人去投机B这个可替代品?因为在当下时间,A是有价值的,B也是有价值的,甚至B的价值远远大于A的价值。

这里的价值,不是A或B本身的价格,价值永远是消费者眼中的价值,消费者觉得B是价值的,B就是有价值的,即便B的价值存在非常大的泡沫。

但随着时间拉长,拉长到5年后、10年后,不断撇去泡沫,B会逐渐回归到本身的真实价值。

很多面子上的投资行为,里子上都是投机行为,本质上是牛人坐庄鼓舞骗子去忽悠韭菜的行为。

所以,“投机价值=消费者眼中的价值-B的真实价值”,当消费者眼中价值>B的真实价值,就存在泡沫,泡沫越大,获利越多。

庄家和骗子,知道B的真实价值,所以要通过一系列运营手段,拉高消费者眼中的价值,以拉高利润。

而只有韭菜坚信,自己眼中B的价值=B的真实价值。

那A的范围一般有啥:

  • 无法替代,如房产(除非供求关系巨变)、智慧、健康...
  • 可替代但替代门槛很高:一个战斗力爆表的team...

薅注册返现羊毛


#coding:utf-8

import requests,re,time,sys,json,datetime,urllib,os,random,linecache
import multiprocessing
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.proxy import *
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

def get_yima(url):

    headers = {
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding":"gzip, deflate",
        "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control":"max-age=0",
        "Connection":"keep-alive",
        "Cookie":"__cfduid=d122450b84d9e008a1337aac8df9b97811511877258",
        "Host":"api.51ym.me",
        "Upgrade-Insecure-Requests":"1",
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
    }


    html = requests.get(url,headers=headers,timeout=30)
    code = html.encoding
    return html.content


def get_tianma(url):
    headers = {
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding":"gzip, deflate",
        "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control":"max-age=0",
        "Connection":"keep-alive",
        "Cookie":"__cfduid=dc7085e092fe2b17bb572f8f694e12d051512015018",
        "Host":"api.tianma168.com",
        "Upgrade-Insecure-Requests":"1",
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",

    }
    html = requests.get(url,headers=headers,timeout=30)
    code = html.encoding
    return html.content


def get_zhima_ip():

    url = "{芝麻代理API链接}"

    html = requests.get(url,timeout=30)
    ip = html.content.strip()
    return ip


def search(req,html):
    text = re.search(req,html)
    if text:
        data = text.group(1)
    else:
        data = 'no'
    return data


def gain_mobile():
    url = '{接码平台获取手机号API}'
    a = get_yima(url)
    mobile = search('(\d{11})',a)
    return mobile

def gain_sms(input_mobile):
    url = '{接码平台获取短信API}' 
    a = get_yima(url)
    return a

def gain_black(input_mobile):
    url = '{接码平台拉黑手机号API}'
    a = get_yima(url)
    return a


def tm_login():
    url = ''
    a = get_tianma(url)
    token = search('([^&].*?)&',a)
    return token

def tm_gain_mobile(token):
    url = "" % token
    a = get_tianma(url)
    mobile = search('(\d+)',a)
    return mobile

def tm_gain_sms(token,mobile):
    url = "" % (token,mobile)
    a = get_tianma(url)
    code = search(r' (\d{4}) ',a)
    return code

def tm_black(token,mobile):
    url = '' % (token,mobile)
    a = get_tianma(url)
    return a

def get_ip():
    a = os.popen('curl -x "http://http-cla.abuyun.com:9030" --proxy-basic --proxy-user xxx:xxx http://proxy.abuyun.com/switch-ip')
    return a


def mixin(n,token):

    try:
        # newip = get_ip()
        newip = get_zhima_ip()

        host = search('(\d+\.\d+\.\d+\.\d+):',newip)
        port = int(search(':(\d+)$',newip))

        profile = webdriver.FirefoxProfile()
        profile.set_preference("network.proxy.type", 1);
        profile.set_preference("network.proxy.socks_version", 5);
        profile.set_preference("network.proxy.socks", host);
        profile.set_preference("network.proxy.socks_port", port);
        profile.update_preferences()    
        browser = webdriver.Firefox(firefox_profile=profile)
    except:
        profile = webdriver.FirefoxProfile()
        browser = webdriver.Firefox()        

    try:

        print '@@@@@@@@@@@@ 第%s次执行 @@@@@@@@@@@@' % n

        # 输入mixin邀请网址
        print '>>> 打开mixin url'
        browser.implicitly_wait(20)
        browser.get(get_url())
        time.sleep(10)

        # 获取手机号
        print '>>> 获取手机号'
        #input_mobile = gain_mobile()
        input_mobile = tm_gain_mobile(token) 
        print '>>>> %s' % input_mobile

        # 输入手机号
        print '>>> 输入手机号'
        browser.find_element_by_id("phone").send_keys(input_mobile)
        time.sleep(2)

        # 点击获取邀请码按钮
        print '>>> 点击获取邀请码按钮'
        browser.find_element_by_xpath("/html/body/div/div/form/input").click()
        time.sleep(65)

        print '>>> 获取短信验证码'
        #sms_content = gain_sms(input_mobile)
        sms_content = tm_gain_sms(token, input_mobile)
        input_code = search('(\d{4})',sms_content)
        time.sleep(3)

        '''输入短信验证码'''
        print '>>> 输入短信验证码'
        browser.find_element_by_id("verification_code").send_keys(input_code)
        time.sleep(3)

        '''点击提交验证码'''
        print '>>> 点击提交短信验证码'
        browser.find_element_by_xpath("/html/body/div/div/form/input").click()

        '''判断该手机号是否被注册'''
        print '>>> 判断该手机号是否已被注册'
        try:
            browser.find_element_by_id("xin-token-button")
        except:
            print '>>>> 用户未注册'

            '''输入姓名'''
            print '>>>> 输入姓名'
            browser.find_element_by_id("full_name").send_keys(get_name())
            time.sleep(2)

            '''点击提交'''
            print '>>>> 提交姓名'
            browser.find_element_by_xpath('//*[@id="enroll-profile-form"]/input').click()
            time.sleep(4)

            '''关闭浏览器'''
            print '>>>> 注册成功'
            browser.delete_all_cookies()    
            browser.quit()

            '''手机号加入黑名单'''
            #gain_black(input_mobile)
            tm_black(token, input_mobile)

        else:
            print ">>>> 该手机号已被注册"
            time.sleep(3)

            print ">>>> 手机号加入黑名单"
            '''手机号加入黑名单'''
            #gain_black(input_mobile)
            tm_black(token, input_mobile)

            '''关闭浏览器'''
            browser.delete_all_cookies()    
            browser.quit()

    except Exception,e:
        print repr(e)

        # browser.delete_all_cookies()    
        browser.quit()   


def get_name():
    a = random.randrange(1, 50000) #1-9中生成随机数  
    theline = linecache.getline(r'people_name', a).strip()
    return theline.decode("utf-8")

def get_url():
    url_list = [
        "https://xxx1",
        "https://xxx2",
        "https://xxx3",
    ]
    slice = random.sample(url_list,1)[0]
    return slice

token = tm_login()

n = 1
while n:
    mixin(n,token)
    n += 1  

介绍几个上网+分流+图床工具

1、IPsec VPN 服务器一键安装脚本

买市面上的VPN,除了网速不稳定另说,主要是容易挂,挂了充值的钱拿不回来。即便像ExpressVPN这种号称全球最好的VPN,买了一段时间,也不咋稳定,间歇性断线。

自己弄个搬瓦工,确实稳定,但配置麻烦啊,翻了一堆教程还要敲一堆命令。

于是在github上发现个IPsec VPN 服务器一键安装脚本:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md

只需要在一台外国VPS上执行一个命令,便自动执行,完后返回登陆凭证(IPsec PSK、username、password)

关于VPS,个人配置VPN用的是遨游VPS:https://my.aoyouhost.com/page.aspx?c=referral&u=20914

个人偏爱韩国线路,之前网上找的优惠码,折合45一个月,Google看片无压力,顺便还放了一些小网站挂着。

2、分流程序:Proxifier

部分代理软件是支持分流的,比如访问国内网站,用本地IP,访问国外网站,用代理IP

或者是只针对某个软件(很多软件是不支持代理设置的),使用代理IP访问。但大部分代理软件是不支持类似功能的。

则可以用Proxifier

在proxies里添加代理,在rules里设置哪些程序走什么代理来访问网络

比方说上图:

Firefox在执行自动填表的任务,每次填表都要更换一个新的IP,所以Firefox走阿布云的动态代理。

公司网络屏蔽天猫、网易云音乐等娱乐网站,打开后显示空白页面,所以网易云音乐走国内的代理IP访问,绕过公司网络去访问,可以正常听歌了。

公司数据库、BI、wiki等,只能用公司网络去访问,公司之外的IP访问均在屏蔽范围之内,所以除了firefox和网易云音乐,其他程序均走本地IP请求网络,以能够正常工作。

于是,Firefox、网易云音乐和其他程序,均通过Proxifier实现各自走各自的IP去访问,互不干扰。

3、极简图床

用过markdown来写作、写文档的同学知道,markdown的图片语法很麻烦:

![图片名称](图片路径)

主要在于写图片路径,而且图片路径若是本地路径的话,某天将图片删除或者换个位置,markdown中的图片就显示不出来了

所以在markdown写作,图片都用云存储,比如存在七牛上,在七牛的路径写到markdown里,比word直接复制粘贴图片麻烦多了

为了解决这个问题,可以用极简图创:http://jiantuku.com/#/

4、做站服务器推荐

推荐之前做站群用过的服务器:https://my.cloudleft.com/aff.php?aff=1122

还是老习惯,偏爱韩国线路

判断线上流量渠道价值的基础逻辑

判断流量渠道价值,无论是用作产品获客还是品牌宣传,最根本性的指标还是要回归到“利润”上。

比如很多公司做品宣,看的是百度指数有没有增长,个人感觉不太合理,市场作为一线拳头部门,所有工作的最终结果都要落实到企业利润的增长上,广告投了半天,一堆人知道这东西,但CAC没降下去,利润同比之前也没增长,那结果等同于零。

只要是线上流量,无论渠道再怎么变,最终都要遵循广告产品的投放逻辑。

渠道能给产品带来的价值反应在“利润”上,则:

利润 = 收入 - 成本

那么套在一个贷款产品上:

利润 = (总放贷额 × 平均利率)- (获客成本 + 风控成本 + 坏账成本 + 催收成本)

在细分:

利润 = (放贷用户数 × 平均放贷额 × 平均利率)- (单放贷用户获取成本 × 放贷用户数 + 放贷额 × 坏账率 + 风控成本 + 催收成本)

衡量渠道价值,有3个重要指标:

  • 量级(有效用户数量),即公式里的“放贷用户数”

  • CAC(单有效用户获取成本),即公式里的“单放贷用户获取成本”,因为贷款产品,“放贷用户”=“有效用户”

  • LTV(平均单用户供献的总利润),即平均单个用户在整个生命周期内的总利润。

因为贷款产品有坏账、重复借款、贷款期限的影响,相对于其他互联网产品,渠道的LTV计算并不容易,一般就估算个大概。公式的话等于这个:

如果产品的获利不是对用户一次性收割,用户可以进行复购,则拉低CAC,将省下的钱获取更高的“量级”,从而拉高LTV,创造更多的利润。

当渠道的 LTV > CAC 时,这个渠道ROI为正,是能够创造利润的,LTV/CAC最多的几个渠道,拿到预算内的最高量级。

当渠道的 LTV < CAC 时,这个渠道ROI为负,是亏钱的,看渠道具体特型,要么优化广告投放,要么直接放弃。

所以本渣渣现阶段认为,线上广告投放逻辑,就是计算出每个渠道的CAC、量级、LTV,然后制定出投放组合,达到降低CAC,拉高量级,带动LTV增长的结果。

而降低CAC,除了放弃劣质渠道和优化广告之外,还可以对流量进行多次贩卖。

因为只要花钱买了流量,就会有创造不了利润的流量进来,而买这部分流量的钱是白花的。将买过来的流量收割完后,打包在卖给其他产品,通过卖流量获得的利润反补买流量的成本,来拉低CAC。

“量级”和“CAC”是市场人员相对可控的两个因素,通过四象限来划分渠道类别

第一象限“高量级、高CAC”是“主流渠道”,如信息流、ASO、SEO、SEM等,需要做的是“优化”,通过优化来降低CAC,拉高量级,但CAC再怎么低,都不会低于行业临界值,只能加大预算,获得更多流量,此时便需要出去寻找新渠道。

第二象限“高量级,低CAC”是“红利渠道”,如早期的微信公众号、早期的SEO站群,没有被过多商业化的流量洼地,处于渠道的红利期。需要趁着CAC低的时候“猛投”,直到该象限的渠道转移到“第一象限”

第三象限“低量级、低CAC”是“补量渠道”,如部分DSP、联盟、长尾流量等,需要做的是“控制”,一般补量渠道流量质量比较杂,加大投放后,可能往第四或第一象限转移,需要根据数据反馈逐步控制投放组合及预算,到月底、年末可用作补量。

第四象限“低量级、高CAC”是“垃圾渠道”,如果非渠道优化出了问题,直接抛弃。

上面都是我瞎编的。

新产品命名注意事项

  • 避免重复

    避免使用已注册商标、App Store已有app名称来进行命名,对后续工作会造成一定影响。

  • 品牌性命名 vs 功能性命名

    看产品对应业务的用户群是否对产品容易形成忠诚度。

    比如小额借贷类产品:

    汪汪贷,是品牌性命名。微闪借,是功能性命名。

    区别在于,功能性命名一般用户看一眼,就知道这个app是干啥的,有哪些功能特性。比如“微闪借”,就是快速小额借款,出款速度贼快。

    汪汪贷,只知道是个贷款的app,但是有什么功能特性从命名上看不出来。

    而小额借贷产品,不容易形成品牌忠诚度,这类用户,一般看哪个产品利息低、额度大,哪家撸的效率高就去哪家。品牌知名度是次要。

    所以针对这类产品,功能性产品命名更合适一些。

SEO一本道-10-研发SEO规范

  • 【新建页面URL层级<=4】一般新建未来具有搜索流量捕获能力的,均由SEO来设计url路径规则。

  • 【禁用iframe框架、异步、flash、javascript等源码中无法显示具体内容的加载方式】商业爬虫虽有模拟浏览器加载的能力,但限于成本短期不会大规模铺开,所以iframe、异步加载的内容对爬虫属于暗网。

  • 【网页埋点添加跟踪参数,使用onmousedown方式而非tracelog】全站埋点均通过先鼠标点击触发,url在拼接统计参数的形式。而非直接在href中把统计参数加在url上

  • 【URL不包含参数或会话ID】这些技术可能会导致spider对网站检索不完整,因为spider或许无法排除url不同,但实际都是同一套页面的地址。

  • 【请求头添加If-Modified-Since】爬虫spider一定概率根据该标签获知网页是否更新,判定是否进入抓取列表。一定程度上减少重复页面的抓取次数,提高抓取新页面/更新页面的效率

  • 【禁用隐藏文本及链接】

  • 【禁用隐藏内容或欺骗性的重定向】常见如登陆打断(各种论坛、及之前看准网也存在),若因产品需求必须面向用户隐藏,则需对符合爬虫spider的UA或者IP开放完整内容。

  • 【页面正式开发前需要SEO介入】产品部门进行产品评审阶段,需要SEO介入,以确保页面是否符合SEO友好规范。以避免页面上线后,SEO在发现问题,出需求调整,增加本可避免的时间成本。

  • 【全站添加移动适配标签(若有对应的M页)】

    • PC页面,如:

      <meta name="mobile-agent" content="format=html5;url=https://m.1688.com/offer_search/-BBFAD6C6C4CDBBF0C7F2.html">

      <meta name="mobile-agent" content="format=xhtml;url=https://m.1688.com/offer_search/-BBFAD6C6C4CDBBF0C7F2.html">

      <link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.1688.com/offer_search/-BBFAD6C6C4CDBBF0C7F2.html" />

      PS:三个都加

    • M页面,如:

      <link rel="canonical" href="http://m.1688.com/offer_search/-BBFAD6C6C4CDBBF0C7F2.html"/>

  • 【全站添加禁止转码标签(M和PC页面均添加)】

    `<meta http-equiv=”Cache-Control” content=”no-transform” />`
    `<meta http-equiv=”Cache-Control” content=”no-siteapp” />`
    
  • 【添加结构化数据标签】

    详情文档见360文档:[http://www.so.com/help/help_3_9.html]

    360搜索结果中的略缩图,全部引用结构化数据标签中的property="og:image"

  • 【统计代码】所有页面均需要添加GA统计代码

SEO一本道-9-大胆假设小心求证

SEO似乎是一个很容易充满偏见的行业。

比如说,群里发了个快排的广告,就有人说用了网站都会挂的。
比如说,百度公布外链不做为排名的参考,就有人说外链已经不管用了。
比如说,从培训中了解到某个手段,就直接套在公司网站上了。
比如说,听到某人做XX赚了XX万,然后想也没想自己也跟着去做了。

识别一个人是否具备独立思维,一个典型特征是在“接受新信息”和“做出反应”之间,有一段时间是会用来思考。而缺乏独立思考的人,在“接受新信息” 之后马上就“做出反应”。

正确的做法是,保持好奇,大胆假设,小心求证,证实结果,然后出去胡说,迷惑众人

所以我感觉,SEO工作里面的关于需求测试、数据分析的经验,可以完整的同步到其他岗位。

现在SEO有那么几种,要么快排直接把几十万词搞上去的,要么大规模铺词做流量站的,要么各种黑帽劫持蹭流量的,要么跟搞科研一样的常规SEO

但要找到有效的SEO手段,都需要通过合理的测试来验证。

首先呢,要明确测试点,你测的是一个区块,还是整个模板,还是....

然后制定测试规则,测试规则千千万,唯独一条不能变:其他条件同等的情况下,对该点进行测试。

比如要测试title哪个好?

总共测试10套title,页面ID末尾0-9的,每个数字分别套上一个title,一个月后,看哪套titleSEO流量正向增长比例最大,就同步哪套。

比如测试外链是否影响SEO排名?

从5118拉出来同一套URL排名2、3页的页面,分两组,两组页面对应的关键词在搜索量上差不多,给其中一组怼上几千万条外链,一个月后,看流量正向增长是否超过没怼的那组

比如测试新出的模板是否对SEO有影响?

页面ID末尾0-4,上线新模板,页面ID末尾5-9,沿用旧模板,一个月后,看哪套模板流量正向增长比例最大,则保留哪套