记录:我眼中的产品经理

送给想做一个产品经理的人

产品经理就是把人话翻译成技术语言,或者把技术语言翻译成人话。

产品经理可替代性强?

不同人对产品理解的不同导致他是不可被替代的。一旦替代整个项目的进度把控、上线周期规划、产品市场定位都可能发生变化,技术只负责每个技术细节的实施,产品经理or技术经理负责整体推进和把控。想想工地的包工头。

不同的公司、项目、需求对产品经理的要求也不一样:

比如我认为产品经理必须要有市场敏锐的洞察力和产品分析能力,对一个陌生产品不需要多长时间能分析出运营模式。懂点技术的能分析出技术应用和技术实施成本,再进一步还要能分析出整个产品开发可能需要多少人,什么水平,多少钱,多长时间能出什么样的版本。相关法规如何规定该产品的运营方法等等。

一个大型产品的某个小功能点也是可以要求一个产品经理盯梢的。让后他向整个项目的大leader做报告就可以了。

产品经理不需要实际参与开发(甚至可能压根儿就不懂技术)但是他必须每天都知道项目今天有什么进度,谁请假了今天本来该干什么他的活要交给谁做,跟技术怎么沟通,今天是不是需要开个会了,是不是可以向公司申请点钱开开荤,项目碰到了什么问题,新出台的什么法律法规是不是要给老板报告一下是不是需要砍掉某个小功能。

使用acme.sh通过验证DNS签发泛域名证书

  1. 安装acme.sh

    curl https://get.acme.sh|sh

  2. 签发证书

    我的域名使用的是Cloudflare的DNS,为了能让acme可以创建对应的TXT记录,需要先设置一下API秘钥。

    export CF_Key="32位秘钥"
    export CF_Email="用户邮箱"
    

    这里设置上下文环境变量一定要注意大小写。

    ./.acme.sh/acme.sh --issue --dns dns_cf -d domain.com -d *.domain.com

    其中--dns为设置使用DNS进行域名所有权验证。dns_cf表示域名DNS服务商为Cloudflare。
    acme支持的DNS服务商有很多,详细的支持列表点击这里查看

    证书签发成功后,之前设置的DNS服务接口秘钥信息就会自动保存在~/.acme.sh/account.conf文件中,后续renew的时候无需再次设置或填写。

最终签发结果如下:

使用GPG对git commits进行签名

  1. 你需要有一个GPG key,怎么生成自行百度
  2. 获取私钥ID
    [email protected]:# gpg -K --keyid-format LONG
    /Users/username/.gnupg/pubring.kbx
    -------------------------------
    sec   rsa4096/B2CE49E4A541068D 2018-02-19 [SC]
                912EC803B2CE49E4A541068D495AB570
    uid                 [ 绝对 ] username (username public) 
    ssb   rsa4096/96B05A4A2FB32B64 2018-02-19 [E]
    

    其中,B2CE49E4A541068D 则为私钥ID

  3. 设置git签名私钥ID

    git config user.signingkey B2CE49E4A541068D

    修改git全局设置加--global,否则仅对当前项目生效

  4. 设置默认开启GPGSign

    git config commit.gpgsign true

    修改git全局设置加--global,否则仅对当前项目生效

  5. 设置完成测试commit并查看效果,如无意外将能看到commit的verified标识

    Gitea将如下显示并对commit进行标记,防止伪造


搬家到了Linode,顺便开启Linode的GoogleBBR

一直在Vultr JP DC,但是近期被Q的速度太快了,头天刚开了个新的机器第二天IP就连不上了,不知道是不是Wall又升级了。
花了个把小时时间在Linode Fremont新开了台机器,用rsync从vultr把所有数据都迁移过来。速度还不错,200M/s。

nohup rsync -avz --delete /data/ [email protected]:/data/ > /tmp/rs.log 2>&1 &

搬家完了以后感觉速度一般,因为酸酸乳忒慢,比Vultr慢多了。想着换到GoogleBBR是不是会好点,换完以后感觉还不错(反正是比没开之前快多了 🙂 )


整理了一下开启方式的流程如下

  • 首先确定kernel版本 ( 低于4.9的kernel是没有bbr的)
[email protected]:~# uname -r
4.14.17-x86_64-linode99
  • 验证kernel是否支持
[email protected]:~# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno bic westwood htcp

如果内核不支持,需要到Linode Dashboard修改当前应用的Profile,切换kernel到4.9以上版本或不断尝试到支持bbr的版本。
修改完内核后必须重启才能正常开启

  • 修改sysctl.conf开启bbr
[email protected]:/etc# echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
[email protected]:/etc# echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
[email protected]:/etc# sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
[email protected]:/etc# reboot
  • 重启服务器然后就可以开心的玩耍了 🙂

使用ffprobe获取视频信息 以 json/xml/ini 等格式输出

Command :
/bin/ffprobe -i xxx.mp4 -print_format json -show_format -show_streams -v quiet -pretty

-show_format json|ini|xml 支持多种格式

将有如下输出:

XML 格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
    <streams>
        <stream index="0" codec_name="h264" codec_long_name="H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10" profile="High" codec_type="video" codec_time_base="1/120" codec_tag_string="avc1" codec_tag="0x31637661" width="1920" height="1080" coded_width="1920" coded_height="1080" has_b_frames="2" sample_aspect_ratio="0:1" display_aspect_ratio="0:1" pix_fmt="yuvj420p" level="42" color_range="pc" chroma_location="left" refs="1" is_avc="true" nal_length_size="4" r_frame_rate="60/1" avg_frame_rate="60/1" time_base="1/15360" start_pts="0" start_time="0:00:00.000000" duration_ts="8625930" duration="0:09:21.583984" bit_rate="3.152659 Mbit/s" bits_per_raw_sample="8" nb_frames="33695">
            <disposition default="1" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0" timed_thumbnails="0"/>
            <tag key="language" value="und"/>
            <tag key="handler_name" value="VideoHandler"/>
        </stream>
        <stream index="1" codec_name="aac" codec_long_name="AAC (Advanced Audio Coding)" profile="LC" codec_type="audio" codec_time_base="1/48000" codec_tag_string="mp4a" codec_tag="0x6134706d" sample_fmt="fltp" sample_rate="48 KHz" channels="2" channel_layout="stereo" bits_per_sample="0" r_frame_rate="0/0" avg_frame_rate="0/0" time_base="1/48000" start_pts="576" start_time="0:00:00.012000" duration_ts="26956368" duration="0:09:21.591000" bit_rate="129.131000 Kbit/s" max_bit_rate="129.131000 Kbit/s" nb_frames="26324">
            <disposition default="1" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0" timed_thumbnails="0"/>
            <tag key="language" value="und"/>
            <tag key="handler_name" value="SoundHandler"/>
        </stream>
    </streams>

    <format filename="未命名.mp4" nb_streams="2" nb_programs="0" format_name="mov,mp4,m4a,3gp,3g2,mj2" format_long_name="QuickTime / MOV" start_time="0:00:00.000000" duration="0:09:21.584000" size="220.556567 Mibyte" bit_rate="3.294542 Mbit/s" probe_score="100">
        <tag key="major_brand" value="isom"/>
        <tag key="minor_version" value="512"/>
        <tag key="compatible_brands" value="isomiso2avc1mp41"/>
        <tag key="encoder" value="Lavf57.83.100"/>
    </format>
</ffprobe>

Mac 关闭SIP

SIP 是在 OS X El Capitan 中有一个跟安全相关的模式叫 SIP(System Integrity Protection ),它禁止让软件以 root 身份来在 Mac 上运行。同时保障系统完整性。没特殊需求别瞎折腾

  1. 开机按住Command+R 进入 Recovery Mode
  2. 左上角菜单里找到实用工具 -> 终端
  3. 输入csrutil disable回车
  4. 重启

重新启用SIP,重复上述步骤在第三部执行csrutil enable即可
查看当前sip状态 执行 csrutil status