Browsed by
分类:学习

学海无涯

Google AdWords 一点小经验

Google AdWords 一点小经验

古语有言:酒香不怕巷子深,然而今时今日这种观点已经过时了。好的产品如果不为人知,即对不起开发商自己,其实对消费者也是损害。好的产品就应该广而告之,让大家尽早享受,摆脱折磨,比如我们的产品(miniSIPServer)就挽救了很多迷失在 Asterisk、FreeSwitch 中的灵魂。

常见的广告手段无非是:

(1)传统方式。例如在电视、纸媒、报纸、杂志等撒钱做广告,这种方式适合有钱的主,对一般中小企业而言,这种方式的价值越来越低,尤其对我们这类小软件开发商而言,几乎毫无意义。

(2)网络搜索广告。作为中文用户,我们一度以为首先应该试试百度的广告推广方式,当然后来发生的一些事件以及我们自己的体会而言,建议放弃百度,不要抱任何幻想。本文推荐使用Google AdWords。 当然,由于众所周知的原因,您需要自行解决访问问题。

使用 AdWords 的经历积累了一点经验,“广而告之”的“广”有几个方面需要仔细考虑:

(1)人群。是不是所有人都适合点击、接受您的广告? 实际是要对自己的产品有准确认识。比如我们的产品是企业软件产品,那么一般的消费群众就不可能是目标客户,向他们提供广告就没有意义。

(2)地理。是不是需要向全球提供广告?这点其实也和产品本身的定位有关联。这里有个常见的误区:“应当尽量拓展新用户! 如果某个地区客户少,更应该加大该区域的广告推广!”。 如果您的客户大部分来自某个区域,那么向那个区域推广告其实更可能取得比较大的效果。比如我们的产品客户绝大部分来自欧美,因此我们在AdWords中,限制了广告的【地理范围】,只设置定位在欧美地区,基本上将广大亚非拉地区明确排除了(若干发达经济体除外,例如香港、新加坡等)。就我们的经验来说,亚非拉地区的欺诈性点击很多,对产品的推广毫无帮助。

(3)方式。AdWords 提供了很多推广告方式,例如搜索方式(这个最常见)、联盟网络推广等。我们可以明确的是:只要选择搜索方式即可。联盟网络推广等方式虽然能增加点击,但是帮助不大、欺诈也多,用户也可能只是看到广告,随手点击来看看而已,这类广告带来的用户往往并不是产品的目标客户。而通过搜索推广告,这契合了用户的搜索需求,极可能就是您产品的目标客户。

(4)关键词选择。通常我们都希望尽可能将所有的关键词都加入进去,哪怕只有一点点关联性的关键词也恨不得全部加入进去。这在初始阶段当然可以。运行一段时间后,需要观察关键词的效果,如果点击率小于1%,那这个关键词就应该放弃。有时候我们自认为某个关键词高度契合产品,实际搜索结果往往会大跌眼镜,这种情况下要果断砍掉,别犹豫。

(5)费用。不差钱的主可以忽略。如果费用预算有限制,自然需要精打细算。必须限制每个广告系列、默认每次出价的最高值。在这点上,不要相信 AdWords 的调价建议,这些建议基本是按照最高出价进行调整,如果盲目地跟随这些建议,您的广告费用就会直线上升。默认出价值仍然应该根据关键词的效果来调整,确保您希望的关键词能有合理的点击率。广告费用应当与您的产品销售收入要保持一致,过高的广告投入未必会换来产品销售增长。

乌合之众

乌合之众

周末终于挣扎着看完了勒庞写的《乌合之众》,一本言过其实的书。基本观点无非就是:群体会弱智化,即使这个群体是由精英组成。相比之下,大前研一的作品思考更深入、也更广泛一些,我更喜欢大前研一的书。

由于基本观点是群体性弱智,因此顺势就能推导出议会制的无效和荒谬。作者显然也意识到这点,因此最后一点章节又费力地硬拗,看得实在是替作者尴尬。

还是鲁迅说得对:看书就应该看二十年前,甚至一百年前的书。

SSHd使用强加密算法

SSHd使用强加密算法

默认情况下,SSH服务器会启用各种尽可能的加密算法,其中包含一些很弱的加密算法,这确保了客户端广泛的接入,但是的确会引入一些风险。企业环境中设备是可控的,因此可以去掉弱加密算法而只保留特定的强加密算法。

Linux环境中查询以下帮助,可以了解包含算法在内的各项配置信息:

man 5 sshd_config

修改/etc/ssh/sshd_config文件,指定Ciphers采用强加密算法即可,例如,将下列语句直接加入到该文件后面:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes256-cbc

当然,最后要重启ssh服务才能使配置生效。

RFC4235与RFC7463

RFC4235与RFC7463

基本上两篇RFC文档是传承的关系,RFC7463场景应用比RFC4235要详细很多,一些旧的SIP设备未必支持7463。

在兼容性方面,对于SIP-SUBSCRIBE消息,两篇RFC文档采用了不同的Event,rfc4235中定义“dialog”,而rfc7463中定义“dialog;shared”。rfc4235限定在只订阅SIP呼叫对话的状态,因此在dialog-info中,要求必须填充dialog元素,其中就包含call-id,remote-tag以及local-tag等典型呼叫参数。

而rfc7463不仅仅是关注呼叫,更关注“状态呈现”,因此凡是与“状态”相关的消息,都尽量进行了定义。比如在“11.1. Registration and Subscription”章节中,就定义了终端注册的状态呈现。在注册流程中,就没有dialog的信息。

呈现信息多,对用户当然有好处,对VoIP系统也很有意义,尤其是在企业应用场景中。但是需要注意的是这也大大增加了VoIP系统的负荷,实际部署中要慎重考虑。

Ubuntu 18.10

Ubuntu 18.10

这个版本更新了外观,基础色调没有变换。图标搞成圆角,有点像手机界面上的图标,deb的图标居然是粉红色的…… 其他似乎变换不大,依然是很慢。

jemalloc

jemalloc

看到一个redis新版本发布的新闻,注意到其中的内存管理采用了jemalloc,替代标准gcc中的malloc。搜索了相关的信息,感觉jemalloc是个相当不错的内存管理模块,尤其在碎片化管理方面很吸引人。作为需要长期运行的服务器软件,内存管理方面的确是需要慎重考虑,jemalloc 有facebook这样的大厂支持,又有redis做背书,值得我们尝试。

在Debian系统中可以直接安装jemalloc的dev库:

sudo apt install libjemalloc-dev

安装后,头文件在以下目录:

/usr/include/jemalloc

库文件在以下目录(X86系统):

/usr/lib/x86_64-linux-gnu

或者以下目录(Raspberry Pi):

/usr/lib/arm-linux-gnueabihf

Linux下的一些命令

Linux下的一些命令

这两天费了老大劲查一个linux系统下的问题,最终查出了原因,其中用到一些日常不太使用的命令,记录一下,以免以后忘记。

strace -e trace=write -p 1234

这个命令是获取进程(进程ID是1234)的输出信息。

cd /proc/1234/fd
ls | wc -l

检查进程1234打开的句柄数。

perror 24

显示errno的提示信息。上述例子显示“errno=24”时的具体提示信息。

ulimit -a

检查用户的各项资源配置,比如句柄数、进程数等。通常这些资源数配置在 /etc/security/limits.conf 文件中。

uname -a

查询内核版本。

另外,Debian 7是在tty7上启动xwindows,而初始信息是输出到tty1上,用组合键 Ctrl+Alt+F1/F7 即可进行切换。

粗浅理解数据库联合索引

粗浅理解数据库联合索引

在表中对多个列建立联合索引,比如(a, b, c),这种情况下实际建立了三个索引:

  • a
  • (a, b)
  • (a, b, c)

因此,如果对b或者c列进行查询,就需要另外建立索引进行优化。当然,不是索引越多越好,毕竟对插入、更新数据(实际也就是I/O)会有影响。

root用户也用sudo

root用户也用sudo

过往在升级Debian (Testing版本)时,总是以root身份进行操作,例如:

apt update
apt upgrade

最近使用同样的命令升级时,总是提示错误,意思大约是“找不到ldconfig”文件或者无权执行。这是很奇怪的问题,毕竟当前用户是root,而且ldconfig显然就在‘/sbin’目录下,肉眼可见。

检查了root用户的env,发现Path的设置为:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

确实没有包含‘/sbin’目录,因此root用户的确无法直接执行ldconfig命令。再次检查‘/etc/profile’文件,在路径设置时进行了以下判断:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

当然,可以直接修改该文件,或者修改root用户的.bashrc文件,将’/sbin’目录将入路径当中。
然而根据profile文件的判断条件,也可以不做任何修改,只是执行命令时,加上‘sudo’即可。例如上述更新命令修改为:

sudo apt upgrade
markdown中的换行

markdown中的换行

以前google notebook用来记笔记极好,可惜google放弃了这个产品,后续试了evernote,onenote,有道笔记,以及qmail中的记笔记等,都有这样那样的问题,实在不太满意。

有朋友推荐用markdown记笔记,使用程序员必备工具VS code就可以直接预览markdown文件。markdown文件本质上就是文本文件,因此结合github等版本管理工具,还很容易对笔记进行版本管理、永不丢失,挺有意思。

markdown语法比较简单,基本上不妨碍记笔记时的思维过程。最近遇到“换行”的问题,简单搜索了一下,原来是采用以下语法:

两下空格后,再按回车键。

稍显麻烦,不过还能接受。