Fashion

Creative Photoshoot

Cupcake ipsum dolor sit amet jujubes. Bear claw chocolate cake bear claw marshmallow. Carrot cake tart cotton candy.
View Our Works

小程序终于发布了

个人版的小程序审核的时间一般是一天左右就会给出审核的结果,比之前要快了。

小程序审核的过程中也是有很多的规矩需要遵守的,过多的细节可以参考小程序开发文档,要不然很可能会审核不通过,心塞塞。

小程序的主要内容是文章分享。有文章列表页,文章详情页,自我介绍页。

其他功能还在完善中,当前的版本是V1.0。扫码体验一下吧。

  •  2018年11月13日 新增摇一摇随机文章
  •  2018年11月13日 简介页面数据改为动态获取

小程序生成二维码 并通过小程序自带扫码扫描

小程序生成的二维码一共有三个接口 官方文档

因为接口B的限制较少,所以采用了这个。
跳坑记录,接口B生成小程序码时需要填写的page参数(页面路径),但是这个页面路径需要是已经发布版本的页面路径。也就是需要先发布再测试。逼si强迫症!~(对于未发布的小程序可以参考下面的数据格式,亲测成功。)
调用方式。
调用

通过wx.scancode 扫描接口B生成的二维码返回的结果如下图:

返回结果

拿到了返回结果,可以看到我们需要的路径,以及所带的scene参数就在path参数里。这就可以接着写逻辑操作

#调用小程序自带的扫码api 扫上面通过接口B生成的二维码,res.path就是我们需要的参数
  scanCode: function () {
    wx.scanCode({
      onlyFromCamera: true,
      success: function (res) {
        console.log('扫码成功', res)
        if (res.path) {
          wx.navigateTo({
            url: '/' + res.path
          })
        }
      },
      fail: function (res) {
          wx.showToast({
            title: '暂不支持该二维码',
            icon: 'none',
            duration: 2000
          })
       },
      complete: function (res) { },
    })
  }

在扫码跳转的成功页,也就是我的detail页面,通过下面的方式获取到参数。

  onLoad: function (options) {
    if (options.scene) {
      let sku = decodeURIComponent(options.scene);
  }

Analytics Test

Flow:

Check the requset in Charles

1. Connect the Mobile Phone and Charles;

2. Perform the target behavior (eg. Click Login CTA);

3. Catch the specific request in Charles (the request url: https://analytics.nike.com; every user’s behavior will create a ‘batch’);

4. Find and check the specific request for the target behavior (eg. Find the Click Login request)

a. Open the https://confluence.nike.com/pages/viewpage.action?spaceKey=CDS&title=8.+WeChat+MP+Data+Dictionary

b. Find the target behavior in this document.

c. Find the related request in Charles accroding to the ‘Action’ value. (eg. wechatmap:nh_login)

5. Check the request in Charles. Make sure all the info list in the document (https://confluence.nike.com/pages/viewpage.action?spaceKey=CDS&title=8.+WeChat+MP+Data+Dictionary) for the target behavior are included in the specific Charles request.

Check the request in Nike

1. Open the url https://nike.okta.com/app/UserHome

2. Open the Segment app in the page.

3. Clcik on the Sources -> Debugger








4. Search the ‘Nike Wechat – Test’ Project. And find the target request

5. Check whether the request include all the list info.

ECMAScript 6学习总结

参考链接

编程风格

let 取代 var

ES6提出了两个新的声明变量的命令:letconst。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。

'use strict';

if (true) {
  let x = 'hello';
}

for (let i = 0; i < 10; i++) {
  console.log(i);
}

在 let 和 const之间,建议优先使用 const,尤其是在全局环境,不应该设置变量,只应设置常量。

const [a, b, c] = [1, 2, 3];

静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号。

const a = 'foobar';
const b = `foo${a}bar`;
const c = 'foobar';

使用数组成员对变量赋值时,优先使用解构赋值。 

const [first, second] = arr;

单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。

const a = { k1: v1, k2: v2 };
const b = {
  k1: v1,
  k2: v2,
};

使用扩展运算符(…)拷贝数组。

const itemsCopy = [...items];

那些需要使用函数表达式的场合,尽量用箭头函数代替。

立即执行函数可以写成箭头函数的形式。简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法。

(() => {
  console.log('Welcome to the Internet.');
})();

模块

使用import取代require

import { func1, func2 } from 'moduleA';

使用export取代module.exports

如果模块默认输出一个函数,函数名的首字母应该小写。

如果模块默认输出一个对象,对象名的首字母应该大写。

写在下班之后

我喜欢叫自己开发者,英文名字是Developer.这也是我的微信名字,很久了都没有改过.因为它给人一种创新,创造的感觉.每次想到这里,都会很神圣,因为我正在用我的双手,让世界变得更美好,也或许因为某个bug而变得更糟.哈哈.

以前我也讨厌过,软件开发这个行业,我认为软件开发的语言多种多样,我们只是使用了这种工具,来进行一些应用,就算是使用的多熟练,还都是应用端,不曾经历过这个语言的开发.总觉得学到的只是表面.就像是一个系统的研发,你只参与了功能的开发,而没有经历过系统架构的设计,总觉得少点什么.后来我也想明白了,就拿照相机来说,有些人并不知道相机是怎么制作的,但只是熟悉了相机的原理,弄懂了所有的参数,还有自己充满创意的思想,并不妨碍他在摄影方面有很大的成就.在比如说我们的计算机,大多数人是不会在自己去设计开发一个计算机的,但是我们却基于计算机的这个平台完成了我们工作,兴趣,爱好.把注意力集中在自己感兴趣的部分,你同样可以做的很好.
我不会称自己是某门语言的开发工程师,因为技术时刻变化,你要保持虚心,接受这些变化.有些人说写软件的一般都会有中年危机,什么学习不如年轻人,但是还需要更高的工资,这样的矛盾,成为他们的发展瓶颈,其实我觉得何必杞人忧天,把握社会发展的趋势,每天让自己变得更好一点,不要混日子.

说起来社会的发展趋势,最近杭州的云栖大会又亮相了一些令人激动的研发成果,阿里的达摩院是去年成立的,马云完全以一个东方的词语来命名了这个研究院,在武侠小说中,达摩院是武学最高研究机构。而马云本人就是个武侠迷,阿里的花名文化就是从他开始的——他给自己取的花名叫风清扬。而对于在这个名字的英文翻译也是以名字的拼音命名-DAMO,说大家叫着叫着也会习惯的,阿里是通过淘宝发家的,但是马云却不仅仅停留在做电商层面,而是发展起了研究院,眼光看的真是长远,这个研究院资金雄厚,它的创办也吸引了全球的计算机行业精英,所以必然会给中国乃至世界的技术进步做出巨大贡献.阿里成长成了一棵大树,担起了很多责任.在今年的云栖大会上,公布出来了自动驾驶汽车的研发进展,提出了物联网驱动的自动驾驶汽车,自动驾驶汽车发展了几十年没有突破的进展,还是不能应用生活,实在是因为它还不能够强大到处理所有的突发情况,特斯拉的自动驾驶也只是辅助驾驶,这次的会议提出了物联网,就是在路边的地方放置传感器,给行驶在这个地方的车辆反馈信息,而多个这个的传感器,可以组成一个信息网,处理这片区域的信息,我对于这种改进的方式持乐观的态度.这会是一个让自动驾驶技术落地的一个可行的方案.

同时,还有研发的芯片.前段时间,因为美国对中兴实施禁令,不能卖芯片给中兴,庞大的企业瞬间被扼住咽喉,而马云开始搞起了芯片,并且成立芯片公司,达摩院在做事让人惊喜的道路上越走越远,它会是技术的领导者.

Ubuntu下配置Apache监听多个端口访问不同目录

环境配置:

Ubuntu 16.04
Apache:
    Server version: Apache/2.4.18 (Ubuntu)
    Server built:   2018-06-07T19:43:03

开始配置.
第一步 打开进入到apache的目录下找到/etc/apache2/ports.conf
sudo gedit ports.conf
下面是我的ports.conf文件

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

# 8088是我新增监听的端口
Listen 8088
Listen 8089

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

第二步 进入到 /etc/apache2/sites-available,编辑 000-default.conf 文件,添加端口对应的访问目录

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
#新增端口的访问目录
NameVirtualHost *:8088
<VirtualHost *:8088>
    ServerName localhost:8088
    DocumentRoot "/var/www/demo"
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

重启Apache: sudo service apache2 restart
最后打开浏览器访问 localhost:8088

聊一聊篮球场上那些事

其实做事情都是一样的,你把一件事重复了一百次,你不加自己的思考,还是没有一点的进步,正如古人说,学而不思则罔.
我坐在篮球场下的时候,我作为旁观着看着场上的队员,他们是什么样的人就会做出什么样的动作,印象比较深的时候是又一次打球,我在防守,一个人持球进攻,他一个前探步,我原地坐倒,可是当我集中注意力做防守的时候,也不知道别人在我的脚下做了什么动作,后来我想了想,明白了是怎么回事.
打篮球不能只是蛮力,正常的情况下,对手探步徉突,我肯定后退防守,至于为什么坐在了原地,肯定是脚被定在了原地而身子还想着后撤,所以我知道我被踩脚了.真是够下烂的方式.希望你没有遇到过.
后来在场上看到的就更多了,而踩脚也是小儿科而已,双方队员在打球的时候,一般我都会以保护对手不受伤为先,再来防守.可以有些烂人就是要以你站不起来为目的,对对手实施各种摧残.崴脚,篮球场常见吧,其实崴脚大多数的情况下是在跳起将要落地的时候脚落在了不平整的物体上,而这个东西最有可能就是别人的脚.打篮球在场上都不用眼睛看就能过感觉出来,你身边的人跳起之后脚的落地位置,如果排除你这个人是篮球小白不懂得保护别人(一般打球的人也不会不知道),那么这个脚放的位置就值得深究了.
有一个比较直白的例子,对手持球原地跳投,作为防守方,你一定是跳起前扑干扰盖帽,如果防守很紧,这个时候两个人的身体就会撞在一起,两个落脚点也基本会在一个位置,自己YY一下吧..~我一般这种情况是手上动作做完以后,无论是防守成功还是失败,都是分开我的双脚,腾出空间让对方落脚.因为我是真的看到有的人吧脚放在哪里,等别人踩上去的,那种痛,真的是揪心.