React Native 之IOS环境配置

搭建React Native的开发环境

我的相关版本

  • 目标平台:iOS
  • 开发平台:macOS Sierra 10.12.6
  • node: v8.5.0
  • react-native-cli: 0.50.3
  • npm:5.5.1
  • Xcode:9.1

安装

必需的软件

  • Homebrew,Mac系统的包管理器
  • Node(4.0+)
  • React Native的命令行工具(react-native-cli)
  • Xcode(7.0+),可以通过App Store或者到Apple开发者官网

推荐安装的工具

  • Watchman:brew install watchman

测试安装

1
2
3
react-native init appProject
cd appProject
react-native run-ios

安装障碍

1 执行react-native run-ios异常 react-native-ios-error
异常原因:
对于react-native版本高于0.45的创建项目,需要下载boost库,该库比较大,导致下载问题,参考issues-1issues-2

解决方案:

然后重新执行 react-native run-ios

说明

以上四个包是pro/node_modules/react-native/third-party中所需的,之所以异常,因为缺少了这几个包


title:ten wishes to accomplish during 2018
date:2017-11-17

tags:

有一种心情叫波澜不惊,不如一潭死水,渐渐干涸。
间断性的不在状态,想到这里,我又该去看看文档了
毕竟,听着许嵩的燕归巢,山水间歌声回荡,云水边静沐暖阳
毕竟,那些所谓的离开,与我何干,何来感伤

  • vocal concert of Zhangjie^s
  • A journey to Harbin,Hunan

纪念我的处女饺

食材是我的小可爱同事打理的,饺子皮两小袋,韭菜两把,鸡蛋七个,猪肉沫适量。她剁韭菜我打鸡蛋,一度因为鸡蛋多了或是韭菜多了小点尴尬,但最终,都刚刚好。
小可爱掌勺,一向如此,暂无例外,一煎鸡蛋二炒肉沫三下韭菜,最后三项综合。唯一让我执锅铲是因为鸡蛋不够碎,而靠手臂力量在锅里翻来覆去把鸡蛋捣的更碎相当果真是费劲。
如此一来,万事俱备,只欠饺子。材料都上桌了,人也郑重其事的上位了,摊一皮在手掌,小可爱指点两下,就包上了第一个,第二个。。。。。。然而,做卫生的阿姨凑过来瞅了一眼小可爱包的还可以,下意识瞅了一眼我的饺子,emmm,进步空间相当广阔。
第一锅饺子下锅了,20来个,在阿姨的指导下,饺子煮的似乎更入味了,喜不自胜,人生的处女饺。半饱腹一顿后,接着把剩下的饺子皮一一圆满了,一点小小的长进,足矣。
遗憾的是由于饺子包的确实不咋地,答应同学的自制饺子暂时缺席,下次再补。
在此,献上丑图一张!
饺子

application for myself

个人简历

联系方式


个人信息

  • 林奕缤/女/1992.10.21
  • 本科/福建农林大学/计算机科学与技术专业
  • 工作年限:2~3年
  • 博客:https://linyb.github.io
  • github: https://github.com/linyb
  • 应聘职位:前端开发工程师
  • 期望薪资:12K
  • 期望城市:深圳

工作经历

广州谷通科技有限公司 (2016年5月 ~ 2017年2月)


微现场

我在该项目中负责了后台管理页面开发、web页面开发、移动端页面开发。该产品由:签到、大屏抽奖、大屏互动、微信摇一摇比赛等模块组成。比较难的模块应该属摇一摇比赛和大屏互动,逻辑比较多而且涉及实时通信,跟后台的配合就很重要;其次这个项目中效果也比较多,包括无缝滚动,手机摇一摇,大屏消息轮播以及移动端聊天等。

移动商城

我在该项目中负责了移动端的超级销售员、购物车(普通购物车和批发购物车)等模块的页面开发以及商城详情页和菜单页面的改版。移动商城比较突出的问题是图片过多或者过大会导致页面加载缓慢,使用了延迟加载技术。

房产中介

我在该项目中负责了后台管理页面开发以及移动端页面开发。中介当中有二手房、租房、新房、学校、经纪人等模块。其中用了腾讯地图中的一些定位和搜索的功能。问题有:

  • 由于底部菜单是fixed定位,遇到input获得焦点的时候,软键盘弹出影响定位。
  • iOS系统的手机上滚动条不流畅
  • 文档内容是否超过一屏,底部菜单对应不同的处理
疯狂数钱

我在该项目中负责了移动端页面以及数钱效果实现。该小游戏经历了两个阶段,一开始数钱的效果使用css3的动画来实现,由于数量无法控制导致在移动端显示不流畅,后来的思路是,运用了canvas来绘制图片并衍生出图片的平移和缩放效果,使用了crateJS中的SoundJS来处理音频效果,图片由服务端传到客户端,通过移动端的touch事件,向上滑动一张就删除一张,问题总算迎刃而解。

福建富士通信息软件有限公司(2014年7月 ~ 2016年5月)


浙江服务台运维大屏

我在该项目中负责监控大屏页面的搭建以及功能实施,包括:全省服务台运维(包括全省服务台运维概览及全省服务台运维详细情况)、O/B域工单处理TOP10、全省服务台值班人员的签到情况等模块。使用fusionChart柱状图、折线图来呈现全省服务台运维、O/B域工单处理TOP10等模块的趋势图,通过自定义查询功能解析全省服务台值班人员的签到情况,集团派发单回复超时预警等模块信息,数据库使用Oracle,使用SVN来管控项目。

福建地税领导视窗

我在该项目中负责前端页面开发及功能实现,包括业务系统健康度模块和告警统计分析模块(包括告警产生最多的监控指标TOP3,平台告警分析,告警波动趋势);该项目适配了不同分辨率的屏幕,使用了比较多的sql和存储过程来封装并展示数据。

浙江基础设施监控大屏

我在该项目中负责前端页面开发及功能实现,包括基础设施告警模块(主机告警模块,数据库告警模块,网络设备告警模块等)和主要指标性能TOP(包括按照主机的所属域,按照超标CPU使用性能>超标内存使用性能>超标交换区使用性能>超标磁盘IO使用性能切换展示)。该项目主要使用jsp,html,xml.ajax进行浙江基础设施监控大屏页面开发,使用fusioncharts来展示实时展示数据,难点在于项目中的sql比较多,而且比较灵活。


技能清单

  • 前端技能:熟练使用HTML(HTML5)/CSS(CSS3)/Javascript/jQuery/JSP
  • 前端框架:熟悉Bootstrap,了解AngularJS应用
  • 前端工具:熟练使用Sass,了解Grunt自动化构建工具
  • 版本管理工具:Svn/Git
  • Web开发:Java
  • 数据库:Oracle
  • 能够简单使用Photoshop

语言能力

  • 英语六级,阅读文档基本没有障碍。

兴趣爱好

  • 游泳、羽毛球、看书

致谢

感谢您花时间来阅读我的简历,期待能有机会和您共事!

someting about function of javascript

函数声明与函数表达式

如何定义函数

函数声明

function fName(arg1,arg2,...) {<!--function body-->}

函数表达式
1
2
3
var fName = function(arg1,arg2,...) {<!--function body-->}
或者
var fname = function fName2(arg1,arg2,...) {<!--function body-->}
new Function 构造函数

var fName = new Function();

变量声明提前

用最直观的例子来呈现变量声明提前

1
2
3
4
5
6
var a = 'linyb';
(function() {
console.log(a);
var a = 'jjt';
console.log(a);
})();

上述的代码运行结果是:

1
2
undefined
jjt

也就是说,变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。在函数体内的局部变量覆盖了同名的全局变量,而且,程序只有在执行到var语句时,局部变量才真正被赋值。

以上代码等价于:

1
2
3
4
5
6
7
var a = 'linyb';
(function() {
var a;
console.log(a);
var a = 'jjt';
console.log(a);
})();

声明提前可以总结如下:

  • 变量声明会提前到函数的顶部。
  • 只是声明被提前,初始化不提前,初始化还在原来初始化的位置进行初始化。
  • 在声明之前变量的值是undefined

函数声明提前

举个栗子

1
2
3
4
5
a();<!--函数声明-->
function a() { console.log("a") }
b();<!--函数表达式-->
var b = function() {console.log("b")}

上述代码执行结果:

1
2
a
Uncaught TypeError: b is not a function(…)

可以得出:使用函数声明的函数定义方法的时候,可以在任意位置调用函数。也就是说函数声明提前的时候,函数声明和函数体均提前了。

那么函数表达式为什么不能被提前?

同上面的变量声明提前一个道理,只是声明被提前,初始化不提前,初始化还在原来的位置进行初始化。

About box-shadow

this 来聊三块钱的呗~

涵义

this,至关重要的存在。
总是返回一个对象,简言之,就是返回属性或方法“当前”所在的对象。

1
this.property

上面代码中,this表示property属性当前所在的对象

1
2
3
4
5
6
7
var person = {
name: 'linyb',
getName: function() {
return 'name:' + this.name;
}
};
person.getName();//"name:linyb"

上面代码中,this.name表示getName方法所在的当前对象的name属性。调用person.getName时,getName方法所在的当前对象是person,所以返回的是person.name

由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的。即this的指向是可变的。

1
2
3
4
5
6
7
8
9
10
11
12
13
var A = {
name: 'A',
getName: function() {
return 'name=' + this.name;
}
}
var B = {
name : 'B'
}
B.getName = A.getName;
B.getName(); //"name=B"

上面代码中,A.getName属性被赋给B,于是B.getNamethis的当前所在对象是B,所以返回的是B.name

等价于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function f() {
return 'name=' + this.name;
}
var A = {
name: 'linyb',
getName: f
}
var B = {
name: 'jjt',
getName: f
}
A.getName() //"name=linyb"
B.getName() //"name=jjt"

上面的内码中,函数f的内部使用了this关键字,伴随这f所在的对象的不同,this的指向也不同。

1
2
3
4
5
6
7
8
9
10
var C = {
name: 'zmj',
getName: function() {
return 'name=' + this.name;
}
}
var name = 'coco'
var d = c.getName;
d();//"name=coco"

上面代码中,C.getName被赋值给对象d,而d所在的对象是顶层对象window

综上所述,this可以说是所有函数运行时的一个隐藏参数,指向函数的运行环境。

使用场合

全局环境

在全局环境中使用this,它指的就是顶层对象window.

1
2
3
4
5
this === window // true
function f() {
console.log(this === window); //true
}

上面的代码说明,不管在函数内部还是外部,只要是在全局环境下进行,this 就是指向顶层对象 window

构造函数

构造函数中的this,指的是实例对象。

1
2
3
4
5
6
7
8
9
10
11
var Obj = function(name) {
this.name = name;
}
Obj.prototype.getName = function() {
return this.name;
}
var o = new Obj('linyb');
o.getName(); //"linyb"
o.name; //"linyb"

上面的代码中定义了个构造函数Obj,由于this指向实例对象,所以this.name表示实例对象有一个name属性,getName方法可以返回该属性。

对象的方法
1
2
3
4
5
6
var _obj = {
foo: function() {
console.log(this);
}
}
_obj.foo(); //Object{}

上面代码中,_obj.foo 方法执行时,它的内部this指向_obj。只有在_obj对象上调用foothis才指向_obj,其他用法,this都指向代码块当前所在对象。

2 days in Guangzhou

一个人、一座城

印象广州

二游广州已经是半个月前的事儿了,在回福州之前能跟你走一遭这个有着浓烈的文艺气息,文化底蕴的城市,不枉我深圳的这趟远行。

本来就没啥文笔的我就不班门弄斧恶心自己了。先说说对沙面的印象。

一个很特别的地方,沿街可见的欧陆风情建筑,对我这种眼界似井底蛙的无知小儿来说,略有味道,似乎还可以感受到中国近代史和租界的影子,我想,这里,应该见证了广州近代史的变迁,也留下了许多为振兴中华而奋斗的伟人事迹。那天,天气好的不像话,但很奇怪,路上的行人只有三三两两,无碍,正适合刷大街。

最令人瞻仰的建筑莫过于石室圣心大教堂了,赶巧了,遇上一对black办婚礼,对了,说到这,好像在这边看到的歪果仁不少,果然是带着点异国情调。大教堂的的结构是所谓的哥特式教堂建筑。我是一个局外人,只能从美不美的角度来欣赏它,但是说实在的,教堂,本身就是一个让人冷静,卸下浮躁的所在。对于虔诚的教徒来说,这个地方恐怕是神圣到不能自己了~~
石室圣心大教堂

广东菜我不做任何评价了,因人而异,风格略独特,对我这种除了酸甜苦辣以外的滋味都不太适应的人来说,有点困难。但是广东的地道小吃还是很赞的,可惜了,还是没有吃到早茶。肠粉跟在深圳、福州吃的都不一样,多了好几种馅,还有咸粥口味也是不错的,不会太清淡但也不腻。
小吃

说好的要去北京路,但是一直在刷街,我一直不知道目的地是哪里,下午两点左右,到了人满为患的上下九步行街,稍不慎,就能走散的那种人潮。除了在一家南信甜品店吃了一万姜撞奶,就是在磨鞋。如果有机会再去一次,我会选择晚上去,一个人也好,两个人也罢,三个人就显得拥挤了,我要逛他个整条街,吃上整条街!

珠江一日游,作为一个刷了一天街的完美ending,不负所望。我是一个生长在海边的孩纸,但对大海却一无所知。也从来没有正式的坐上一艘船去感受它的胸怀。夜晚的珠江,并非静谧安好。因为它承载着商业利益的压力。江上有许多艘轮船,形态不一,外观都贴着商家的标签,有种百花齐放,百花争妍的感觉。它们比我乘坐的这艘即便要好看太多,也无碍,我终于站在浪涛之上,体验江风的酷爽,这次没有安排上广州塔走一圈,虽然有点遗憾,但是在珠江上看它,先饱饱眼福,等我,下次,我一定登上小蛮腰,当然,速降跟摩天轮我担心这个小心脏受不了,我的愿望就是旋转餐厅!
小蛮腰

最后的最后,中山大学Sun Yat-sen University,令人敬仰的孙中山先生的雕像屹立在一片视野宽阔的草坪上,校训也是,在一排整齐的棕榈树的映衬下博学 审问 慎思 明辨 笃行加上中大的logo,显得格外美好。从南到北,从北到南,这条逸仙路,我来回走了三趟,逸仙,因为这个人,有了这座城。
Sun yat-sen

About box-shadow

box-shadow的那些事儿

语法

  1. E {box-shadow:<length> <length> <length>? <length>? || <color>}也就是E {box-shadow:inset x-offset y-offset blur-radius spread-radius color}等价于对象选择器:{box-shadow:投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色}
  2. box-shadow 可以使用一个或多个投影,多个投影之间必须用逗号分隔开。
  3. 阴影类型:默认是外阴影,如果取其唯一值inset即投的是内阴影。

效果

单边效果

1
2
3
4
5
6
.border-shadow {
@include box-shadow(-2px 0 0 green,
0 -2px 0 blue,
0 2px 0 red,
2px 0 0 yellow)
}

简单描述下,给对象四边设计阴影,我们是通过改变x-offset和y-offset的正负值来实现,其中x-offset为负值时,生成左边阴影,为正值时生成右边阴影,y-offset为正值是生成底部阴影,为负值时生成顶部阴影。设置模糊半径:

1
2
3
4
5
6
.multi-shadow{
@include box-shadow(-2px 0 5px green,
0 -2px 5px blue,
0 2px 5px red,
2px 0 5px yellow);
}

在使用多层次的阴影时还需注意一个细节问题,如果前面的阴影模糊值小于后面的阴影模糊值,那么前面的显示在后面之上,如果前面阴影的模糊值大于后面的阴影模糊值,那么前面的阴影将遮住后面的阴影效果。如下面例子:

1
2
3
4
5
6
.multi-radius1-shadow {
@include box-shadow(0 0 15px green,0 0 25px red);
}
.multi-radius2-shadow {
@include box-shadow(0 0 25px green,0 0 15px red);
}

box-shadow

四边具有相同的阴影效果(只设置阴影模糊半径和阴影颜色)

1
2
3
.vague-shadow{
@include box-shadow(0 0 15px red);
}

四边具有相同的阴影(只设置阴影扩展半径和阴影颜色)

1
2
3
.extend-shadow{
@include box-shadow(0 0 0 15px red);
}

该效果与border:15px solid red产生的效果相似,实则不同。阴影不会影响页面的任何布局,border的边框大小会被记在元素的宽高中,但阴影却不会。

内阴影inset

1
2
3
.inset-shadow{
@include box-shadow(inset 0 0 15px red);
}

box-shadow样式通过scss的mixins展示

1
2
3
4
5
6
7
8
9
// prefixer不展示
@mixin box-shadow($shadow...) {
@if length($shadow) >= 1 {
@include prefixer(box-shadow, $shadow);
} @else{
$shadow:0 0 4px rgba(0,0,0,.3);
@include prefixer(box-shadow, $shadow);
}
}

测试

box-shadow

引用

w3cplus.box-shadow

autoprefixer in webstorm

如何在webstorm下使用autoprefixer

小白晚上好,又到了该整理的时间惹~~

需求分析

虽然内置了css3自动补全功能,当输入user-select时,webstorm会自动补全,但是很多情况下这种自动补全并不令人满意,比如,当输入display:flex;时,webstorm就不会自动补全。而Autoprefixer是一个后处理器(Postprocessor),它是在CSS代码产生之后才进行后续处理。不像Sass,Less,Stylus之类的预处理器(Preprocessor),它适用于普通的CSS,可以实现CSS3代码自动补全,也可以跟Sass,Less,Stylus集成,在CSS编译前或编译后运行。当Autoprefixer添加前缀到你的CSS,还不会忘记修复语法差异,这种方式,CSS是基于最新的W3C规范产生;

安装&配置

  1. 安装 nodeJS,可用node -v查看是否已经安装。
  2. 使用命令npm install autoprefixer -g安装Autoprefixer。
  3. 使用命令npm install postcss-cli -g安装postcss-cli。
  4. 启动webstorm,File -> Settings -> Tools -> External Tools -> add
  5. 设置快捷键File -> Settings -> Keymap,搜索External Tools,配置autoprefixer,不与其他快捷键冲突即可,我的配置是(Ctrl + Shift + Alt + Space)。
  6. 配置如下:
    1
    2
    3
    4
    5
    Name: autoprefixer
    /*你所安装的postcss-cli的PATH,由于我的window不能识别autoprefixer,故改用postcss.cmd*/
    Program: C:\Users\Administrator\AppData\Roaming\npm\postcss.cmd
    Parameters: -u autoprefixer -o $FileDir$/$FileName$ $FileDir$/$FileName$
    Working directory: $ProjectFileDir$