side project 清单

偶然闯进 这个 网站,某些想法和我不谋而合,有些是我没想到的。稍微整理做个备忘。

关于网站

这是一个 按照时间顺序排列的市场和销售策略 清单,可以用来尝试创建你的下一个 side project。它免费、开源,你可以基于它设计成符合自己的清单。

我多年来一直在构建软件方面的项目,但是 在营销和销售它们方面一直很糟糕 。我想出了一些主意,忘记了这些主意,随机做一些事情,然后失去兴趣。我希望市场营销和销售变得像清单一样简单,来解决我先前的问题。

清单

一、启动前

  1. 竞争对手研究

    我一生都在面对激烈的竞争。没有它我不会相处。_-沃尔特·迪斯尼

    • 列出竞争对手,收集竞争对手数据
      • 网站
      • slogan,标语
      • 定价和商业模式
      • blog/rss 链接
      • 社交媒体链接
      • 社交媒体上的主要员工
    • 订阅竞争对手博客RSS
    • 在社交媒体上关注您的竞争对手及其主要员工
    • 监视竞争对手的网站以进行更改
    • 订阅行业通讯,杂志,行业期刊等。
    • 使用Google趋势进行初始需求和搜索量研究。
  2. 客户研究

    如果我们知道自己在做什么,就不会称为研究。- 艾伯特·爱因斯坦

    • 在您的联系人列表中查找可能成为未来客户的人。得到他们对您想法的反馈。
    • 参加您目标市场的聚会或会议。
    • 结识具有相似或竞争产品的另一位企业家。
    • 列出竞争对手的客户:
      • 检查其Twitter关注者,交流者。
      • 通过他们的Facebook粉丝查看。
      • 在Linkedin上找到关注他们的人。
      • 检查他们的网站。一些公司在其网站上列出客户案例。
    • 与竞争对手的客户联系,找出他们喜欢/不喜欢的东西。
    • 为潜在的未来客户创建“早期访问”列表。
  3. 公共关系准备

    • 创建技术博客,创业博客和行业博客。
    • 创建本地小型企业期刊列表(例如:Crain’s Chicago)。
    • 创建您所在行业的本地博客作者和记者的列表。
    • 创建“媒体工具包”页面(查看此示例)。
  4. 网站设置

    • 提供名称和域名。
    • 写下场地标语和电梯间距。
    • 创建徽标(请参阅此徽标创建工具列表)。
    • 设置登录页面(请参阅此登录页面工具列表)。
    • 创建“关于”和“联系”页面。
    • 创建定价页面(请参阅此定价模型列表)。
      • 为您的付费产品创建免费或试用套餐。
      • 提供100%满意/退款保证。
      • 使产品仅受邀请开始。
      • 为早期采用者/ Beta测试人员提供免费/打折的访问权限。
    • 添加社交媒体,请遵循指向目标网页的链接。
  5. 电子邮件设置

    • 请参阅此电子邮件营销工具列表提供了使电子邮件管理更轻松的服务。

      • 设置电子邮件地址以发送和接收电子邮件。
      • 设置电子邮件列表和注册表单。
      • 为您的品牌创建标准的电子邮件模板。
      • 为用户注册/购买时创建交易电子邮件。
  6. 博客设置

    内容营销就是剩下的全部营销。_-塞思·戈丁(Seth Godin)

  7. 社交媒体设置

    社交媒体是最终的均衡器。它为任何愿意参与的人提供了声音和平台。-Digital Royalty CEO Amy Jo Martin

    • 使用KnowEm搜索社交网络上名称的可用性。
    • 选择您将使用的社交媒体帐户

      • Facebook
      • 推特
      • Linkedin
      • Pinterest
      • Instagram
      • Snapchat
      • YouTube
    • 跨社交渠道标准化个人资料图像,背景图片,链接和号召性用语。

二、发布后

销售和市场营销实际上是同一枚硬币的两个方面,因此您可能需要两者同时使用。

  1. 免费促销频道

    我不在乎您有多少钱,免费的东西总是一件好事。-拉蒂法皇后

  2. 付费促销频道

    您必须花钱才能赚钱。- 古罗马剧作家普拉乌图斯

三、重复

  1. 写博客

    博客就像工作,但没有同事动every阻挠您。-迪尔伯特(Dilbert)的创建者Scott Adams

    • 为您的博客建立/更新发布日历。
    • 定期在您的博客上发布博客文章。
    • 招募早期客户和产品粉丝的来宾帖子。
    • 重新利用现有博客文章

      • 录制/发布您在YouTube上阅读帖子的视频。
      • 将帖子变成播客。
      • 根据信息创建信息图表。
      • 创建帖子的演示文稿(请参见下面的演示文稿列表)。
    • 推广您的博客内容

      • 将帖子发送到您的电子邮件列表。
      • 在您的社交媒体上推广。
      • 向亲朋好友发送电子邮件,请他们分享相关内容。
      • 发送给其他博客作者以征询反馈,要求分享是否喜欢。
      • 将最新的博客文章或登录页面添加到您的电子邮件签名中。
  2. 电子邮件

    任何包含“重要”或“紧急”字样的电子邮件都绝不会出现,并且会惹恼我,使我无法拒绝回复。-Minecraft的作者Markus Persson,又名“ Notch”

    • 发送带有博客文章,用例,客户案例等的常规电子邮件新闻。
    • 在社交媒体上推广电子邮件列表。
    • 每周发送20封冷电子邮件,与早期客户建立联系并获得直接反馈。
    • 向新用户发送一封自我介绍的电子邮件。
  3. 社交媒体

    我们终于有了技术,这是人类历史上第一次使人们能够真正与更多人保持丰富的联系。– eBay创始人Pierre Omidyar

    • 安排常规社交媒体内容(尝试使用这些社交媒体工具以帮助实现社交媒体流程自动化)。

      • 显示“幕后”情况(例如:工作区的图片,开发中的功能等)。
      • 来自您的博客(或合作伙伴博客)的博客文章。
      • 特别优惠或折扣。
      • 相关新闻,建议或博客。
      • 有趣或鼓舞人心的引号。
      • 对您的关注者的投票或问题。
      • 建议书籍。
      • 有用的工具或网站。
    • 加入Facebook和Linkedin组,可能对您的产品有所帮助。
    • 向LinkedIn / Facebook组所有者发送独家优惠。
    • 加入与您的行业/产品相关的Twitter聊天。
    • 为早期用户提供与您的产品合影的折扣。
  4. 公共关系

    宣传艺术是一种妖术;但是它已经存在了,并且每年都在增加其效力。– Thomas Paine

    • 向博客作者提供列表文章,以将您的网站添加到他们的内容中。
    • 与小型企业期刊,记者,博客作者接触。通知并要求承保。
    • 与播客联系,尝试在他们的节目中脱颖而出。
    • 通过.edu网站查找教授和学生以链接到您的内容(适用于SEO)。
    • 查找类似产品的评论或列表。要求添加或对您的产品发表评论。
    • 其他博客上的来宾帖子

      • 建立一个非常适合您的产品的博客列表并接受来宾帖子。保存他们的联系表格/信息。
      • 首先在您自己的博客上写几篇文章(用作演示)。
      • 创建“主题”列表,包括标题和一个段落摘要的博客文章提示,这些内容可能会吸引博客作者。
      • 向博客推荐一个想法。看看他们的反应。
      • 通过社交媒体,电子邮件列表等帮助宣传您的信息。
      • 一个月后再试一次,然后再尝试一次。尝试成为“常规”
    • 在与您的行业或产品有关的博客文章上留下非垃圾评论。
    • 加入并参加与您的产品或行业相关的论坛。
  5. 外部站点

四、优化

  • 进行客户调查(也可以为您的博客或社交媒体渠道生成内容)。
  • 创建另一个辅助项目来推广您的产品 (阅读更多)。
  • A / B测试您的着陆页/付款页 (请查看此A / B测试简介)。
  • A / B测试电子邮件新闻稿和促销。
  • 在您的博客文章上实施 Twitter卡
  • 实施 Google搜索结果中的丰富网页摘要
  • 分析用户注册流程(在此处查看拆解)。
  • 在多个平台上测试您的网站,请确保速度良好。
  • 使用网站分级器来确定网站的改进。
  • 创建并跟踪每周的流量和增长目标。
  • 将社交媒体帖子和电子邮件时事通讯发送给您的受众最有可能回复的时间。
  • 确保您网站上的每个页面都有清晰的号召性用语。
  • 审核并提高转化率(请参阅此清单以了解详细步骤,)
  • 设置每周自动发送给您的自动分析报告。
  • 试用各种注册表单的位置,颜色和大小。
  • 将“退出意图”弹出窗口添加到您的博客/网站。
  • 创建常见问题页面。
  • 使用Google Tag Assistant验证您网站的标签正确。
  • 观看首次使用您的产品的用户。
  • 收集并显示来自满意用户的推荐。
  • 调查或轮询您的用户以获取反馈(请参阅我们的调查工具列表,以任何预算获得许多不错的选择)。
  • 使用Monkey Test It查找网站的错误和损坏的链接。设置警报以通知您破损。
  • 使用您网站上的Checkbot测试并修复SEO,速度和安全性问题。

树莓派运行 nfs-server

1 安装

apt-get install portmap nfs-common nfs-kernel-server

modprobe nfs
modprobe nfsd

2 编辑配置文件

以上一篇挂载的移动硬盘为例,将它作为一个 nfs 目录

cat <<EOF > /etc/exports
/home/pi/disk2t *(rw,sync,no_subtree_check,no_root_squash)
EOF

3 运行服务

systemctl restart nfs-kernel-server.service

# 确认运行状况,显示active即说明成功(不用在意exited)
systemctl status nfs-kernel-server.service

# 或
ps aux | grep nfs

树莓派挂载移动硬盘

1 插上硬盘

lsblk

1591145558312

发现一个1.8T的磁盘,并且没有挂载点。

2 挂载

# 创建挂载点
mkdir -p /home/pi/disk2t

# 挂载
mount /dev/sda1 /home/pi/disk2t

3 挂载成功

lsblk

1591145655671

发现有了挂载点,再进去看看,发现已经能正常读写了。

4 卸载

umount -v /dev/sda1         #  通过设备名卸载  
umount -v /home/pi/disk2t   #  通过挂载点卸载  

kubernetes controller manager 报错 CIDRNotAvailable

今天查看集群事件

kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events -A -w

发现 controller manager 时不时有报错:

Node xxx status is now: CIDRNotAvailable

和同行稍微交流一会,参考官网文档 https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/

将controller-manager的配置 --allocate-node-cidrs 改为 false,错入日志就没有了。

实际上集群也没有问题,只是不断会有这样的错误日志。具体原因还待深究。目前只做记录。

这个配置的官方解释是:

--allocate-node-cidrs
Should CIDRs for Pods be allocated and set on the cloud provider.

【Calico系列】6 Calico 镜像初探

这篇文章从 calico 的安装内容中了解 calico 的组件,基于calico v3.10.3。

标准的 kubernetes 安装 calico 的过程,参考官网手册:https://docs.projectcalico.org/getting-started/kubernetes/

参考安装的 yaml 文件,calico 包含一个配置文件,一个密钥文件,几个角色配置,一个deployment和一个daemonset:

  1. secret: calico-etcd-secrets
  2. ConfigMap: cni的网络配置:
  3. ClusterRole: calico-kube-controllers/calico-node
  4. ClusterRoleBinding: calico-kube-controllers/calico-node
  5. ServiceAccount:calico-node/calico-kube-controllers
  6. Deployment:calico-kube-controllers
  7. DaemonSet:calico-node
    1. init容器
      1. install-cni (This container installs the CNI binaries)
      2. flexvol-driver ( Felix 通过socket与api交互,socket落盘.)
    2. calico-node
      1. felix 每个节点上的一个守护进程,负责编写路由和ACLs(访问控制列表). 还有一些其它节点上需要设置的东西。
      2. bird bgp广播
      3. confd 监听etcd修改BGP配置 AS number, logging levels, IPAM信息等

我们主要来看两个容器:

  1. calico-kube-controller
  2. calico-node

Calico Kubernetes controllers

源码地址:https://github.com/projectcalico/kube-controllers

官方文档:https://docs.projectcalico.org/reference/kube-controllers/configuration

必须有 k8s 的 api 读取权限,才可以监控数据变化。

必须使用 etcd 存储 calico 数据,下列controller才会生效:

  1. policy controller: 监控policies事件同步到 Calico 数据存储,和配置policies 。
  2. namespace controller: 监控 ns 事件同步到 Calico 数据存储和配置 Calico profiles 。
  3. serviceaccount controller: service accounts 监控和配置 Calico profiles。
  4. workloadendpoint controller: pod labels 监控和 Calico workload endpoints 配置。
  5. node controller: 监控节点增减,移除calico相关联的数据,可以配置监控 host endpoint 的创建和同步。默认情况下不启用这个controller。

install-cni

用来在本机生成一些配置。

https://github.com/projectcalico/cni-plugin

1591000684051

flexvol-driver

FlexVolumes的驱动,用来保障 Pods 和 守护进程的安全通信。

https://github.com/projectcalico/pod2daemon

1591000699990

Calico-node

核心容器,源码地址:https://github.com/projectcalico/node

1590720690537

calico-node 基本思路是将所有的组件打包到一个项目中进行管理,减少新手上手的难度。(不由得想起了Istio 1.5)。

calico-node 使用了 runit 进行进程管理, 简单说就是entrypoint 中将需要运行的应用拷贝到 /etc/service/enable 目录下, 当runsvdir检查应用时,runsvdir 会启动一个 runsv 进程来执行和监控run脚本。

runit 是个进程守护程序,有着纯净的进程状态、可靠的日志记录工具、并进行系统快速启停。同时可移植、封装友好、轻量。同类应用还有 systemd/monit/supervisor 等。

普通情况下 calico-node 中主要运行这三个应用:

  1. felix 每个节点上的一个守护进程
  2. bird bgp广播
  3. confd 监听etcd修改BGP配置 AS number, logging levels, IPAM信息等

贴一个启动脚本rc.local,可以帮助理解:

# Handle old CALICO_NETWORKING environment by converting to the new config.
if [ -n "$CALICO_NETWORKING" ]; then
	echo "WARNING: $CALICO_NETWORKING will be deprecated: use $CALICO_NETWORKING_BACKEND instead"
	if [ "$CALICO_NETWORKING" = "false" ]; then
		export CALICO_NETWORKING_BACKEND=none
	else
		export CALICO_NETWORKING_BACKEND=bird
	fi
fi

# Run the startup initialisation script.  These ensure the node is correctly
# configured to run.
calico-node -startup || exit 1

# Set the nodename based on the value picked by the startup procedure.
if [ ! -f "/var/lib/calico/nodename" ]; then
	echo "/var/lib/calico/nodename does not exist, exiting"
	exit 1
fi
NODENAME=$(cat /var/lib/calico/nodename)
export NODENAME

# If possible pre-allocate any tunnel addresses. 
calico-node -allocate-tunnel-addrs || exit 1

# Create a directly to put enabled service files
mkdir /etc/service/enabled

# XXX: Here and below we do all manupulations on /etc/service avoiding rm'ing
# dirs contained in Docker image. This is due to bug in Docker with graphdriver
# overlay on CentOS 7.X kernels (https://github.com/docker/docker/issues/15314)

# Allow felix to be disabled, for example, if the user is running Felix
# outside the container.
if [ -z "$CALICO_DISABLE_FELIX" ]; then
  cp -a /etc/service/available/felix /etc/service/enabled/
fi

case "$CALICO_NETWORKING_BACKEND" in
	"none" )
	# If running in policy only mode, we don't need to run BIRD / Confd.
	echo "CALICO_NETWORKING_BACKEND is none - no BGP daemon running"
	;;
	"vxlan" )
	# If running in VXLAN-only mode, we don't need to run BIRD / Confd.
	echo "CALICO_NETWORKING_BACKEND is vxlan - no need to run a BGP daemon"
	;;
	"gobgp" )
	# Run calico-bgp-daemon instead of BIRD / Confd.
	echo "CALICO_NETWORKING_BACKEND is gobgp - run calico-bgp-daemon"
	cp -a /etc/service/available/calico-bgp-daemon /etc/service/enabled/
	sh -c 'for file in `find /etc/calico/confd/conf.d/ -not -name 'tunl-ip.toml' -type f`; do rm $file; done'
	cp -a /etc/service/available/confd /etc/service/enabled/
	;;
	* )

	# Enable the confd and bird services
	cp -a /etc/service/available/bird  /etc/service/enabled/
	cp -a /etc/service/available/bird6 /etc/service/enabled/
	cp -a /etc/service/available/confd /etc/service/enabled/
	;;
esac

if [ "$CALICO_DISABLE_FILE_LOGGING" = "true" ]; then
	rm -rf /etc/service/enabled/bird/log
	rm -rf /etc/service/enabled/bird6/log
	rm -rf /etc/service/enabled/confd/log
	rm -rf /etc/service/enabled/felix/log
	rm -rf /etc/service/enabled/calico-bgp-daemon/log
fi

echo "Calico node started successfully"

参考资料