控制macOS的开机启动

Mac开机启动的配置与其他类Unix系统相比较麻烦,Linux配置rc.local文件即可。
macOS系统上开机启动这个叫法不准确,应该叫“自启动”或者“登录时启动”。macOS上启动项可分为登陆项(Login Items)和启动项(Startup Items)。Login items在用户登录后立即启动并一直运行,直到用户退出登录或者手动终止才会停止运行。Startup items苹果官方不推荐再使用,Startup items在系统装载的最后阶段启动。

下面简要介绍如何配置自启动项。

使用登录项添加自启动项

这种方式支持有用户界面的程序。
进入设置->用户与群组->登录项,点击+号找到想自动启动的软件,选择后按确定即可。

删除自启动项,重新进入登录项,选中目标项点击减号后确定即可。

使用launchctl工具添加启动项

从OS X 10.4 Tiger开始,Apple要求开发者使用launch daemons and agents配置自启动项,launch daemons和launch agents由launchd进程管理。launchd是macOS下用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程。采用这种方式来配置自启动项只需要一个plist文件,该plist文件存在于以下目录,各目录决定了其启动的先后和拥有的权限:
~/Library/LaunchAgents //特定用户登录后以当前用户启动,第三方程序一般都放这里
/Library/LaunchAgents //任一用户登录后以当前用户启动,管理员使用
/System/Library/LaunchAgents //系统组件,任一用户登录后以当前用户启动
/Library/LaunchDaemons //系统装载时以root用户启动,管理员使用
/System/Library/LaunchDaemons //系统组件,系统装载时以root用户启动

目录区别:
/System/Library //存放Apple开发的系统组件。
/Library //存放系统管理员安装的程序。
~/Library //存放普通用户安装的程序。

launch daemon和launch agents区别:
它们本质上都是守护进程,launch daemons在系统装载时启动,属于所有用户;launch agents是某个用户拥有的程序,在这个用户登录后启动。

Apache header cookie设置

# a2enmod expires
# a2enmod deflate

# vi /etc/apache2/sites-available/example.com.conf
# gzip html, css and js
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript

#启用过期header功能
ExpiresActive On
#缺省过期时间为“访问后的1天”
ExpiresDefault "access plus 1 days"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType image/jpg "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/png "access plus 1 months"
ExpiresByType image/vnd.microsoft.icon "access plus 1 months"
ExpiresByType image/x-icon "access plus 1 months"
ExpiresByType image/ico "access plus 1 months"
ExpiresByType application/javascript "now plus 1 months"
ExpiresByType application/x-javascript "now plus 1 months"
ExpiresByType text/javascript "now plus 1 months"
ExpiresByType text/css "now plus 1 months"

Apache X-Frame-Options配置

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe> 或者 <object>中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

X-Frame-Options有三种可配置值
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Frame-Options: ALLOW-FROM https://example.com/

DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。
注: 在网页中设置meta标签是无用的!例如,<meta http-equiv="X-Frame-Options" content="deny"> 是没有效果的。不要使用这种方式。需要在下面的配置实例中配置HTTP Header的方式来进行配置,X-Frame-Options才会起作用。

# a2enmod headers

# vi /etc/apache2/sites-available/example.com.conf

Header always append X-Frame-Options SAMEORIGIN
Header set X-Frame-Options DENY
Header set X-Frame-Options "ALLOW-FROM https://example.com/"

# service apache2 restart

数据驱动的产品优化

如今,随着大数据和精益数据分析的普及流行,不会看数据的产品经理也不能称作合格的产品经理了。为了能够使我们的产品设计更加智能,避免拍脑袋/因果驱动的产品设计,产品经理在产品设计阶段就要考虑结合自己产品的业务目标来定义对应的数据统计指标,在产品灰度或者上线时跟踪产品运营数据的变动,分析趋势,发现问题。

阅读全文…

读懂活跃数据

用户运营核心的方法论就三个:拉新,促活和留存。拉新可以作为渠道推广单独讨论,而促活和留存则相辅相成。

非运营岗,或者其他类型的运营,通常只会注重一个活跃数据的果,而不会注意活跃数据的因。我们在这里就抽丝剥茧,教大家比较快速地了解活跃体系。

互联网公司对活跃用户的定义大同小异,主要以用户打开APP一次记为一个活跃用户。

按此基础可以在时间维度引申出周活跃用户,月活跃用户。即在一个自然周内打开一次APP,则本周为周活跃用户。月活跃用户同理。

我们假设有一款新产品,这是它四个月内的活跃数据。嗯,看来不错。 阅读全文…

Hive常见操作命令

1. hive模糊搜索表
show tables like ‘*name*’;

2. 查看表结构信息
desc formatted tablename;
desc table_name;

3. 查看分区信息
show partitions tablename;

4. 根据分区查询数据
select table_coulm from tablename where partitionname = ‘2016-02-25’; 阅读全文…

ubuntu 16.04升级php7.0至7.2

直接命令升级
1. apt-get update && apt-get upgrade
2. apt-get install software-properties-common
3. add-apt-repository ppa:ondrej/php
4. apt-get update
5. apt-get upgrade php

升级后安装对应的扩展
apt-get install php7.2-mbstring
apt-get install php7.2-gd
apt-get install php7.2-mysql
apt-get install php7.2-curl

查看已安装的php包

dpkg -l | grep php

删除旧版本

sudo apt-get purge php7.0 php7.0-common

# 查看php版本

php -v

微信小程序内嵌web-view并实现小程序支付的几个坑

最近实现了微信小程序web-view内嵌Joomla商城并实现小程序支付。

记录一下几个坑(折腾了很久才搞通)

#code的获取

一开始在小程序端使用wx.login获取到code并通过get方法传递给webview里面的接口页面,想要返回openid给小程序并记录,但是发现等到支付环节的时候,无法再次取得openid,于是在这个地方卡了很久,最后的解决方案是:

  1. 在着陆页立即使用cookie记录code,防止页面跳转后code丢失
  2. 在支付环节才调用方法获取openid,在小程序端先不存储openid,因为小程序端只是完成支付动作,而且通过同一个code只能调用一次接口获取openid

(待更新)