利他才能利己


  • 首页

  • 标签

  • 归档

  • 搜索

RN: Mac 配置 ES6 简易开发环境

发表于 2016-09-16 | 分类于 ReactNative |

创建文件夹 ES6

1
2
3
ES6
-lib
-src

你可以任意取一个你喜欢的目录名称.

初始化项目

1
npm init

填写项目信息.

查看一下 package.json

1
cat package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "es6tutorials",
"version": "1.0.0",
"description": "Tutorial",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"es6",
".etc"
],
"author": "mark.zhang",
"license": "MIT"
}

目录结构如下

1

安装 babel-cli

1
npm install --save-dev babel-cli

也可以全局安装

1
npm install babel-cli -g

全局安装上后,会安装如下四个程序到全局环境中:

1
2
3
4
babel
babel-node
babel-doctor
babel-external-helpers

安装 babel-core

1
npm install babel-core --save

安装 ES2015 插件

1
npm install babel-preset-es2015

编写配置文件 .babelrc

注意该文件有个点符号.

在工程目录下新建该文件

1
touch .babelrc

写入如下内容

1
2
3
4
5
6
{
"presets": [
"es2015",
],
"plugins": []
}

编写测试代码 tutorials.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function test()
{
console.log(a);
var a = 0;
}
test();
var a = [];
for (var i = 0; i < 10; i++) {
var c = i;
a[i] = function () {
console.log(c);
};
}
a[6](); // 9
var b = [];
for (var i=0; i<10; i++) {
let c = i; //let 是 es6中的关键字
b[i] = function() {
console.log(c)
};
}
b[6]();

编译

1
babel src/tutorials.js

运行

1
babel-node src/tutorials.js

1

这里可以下载 工程源码.

其他操作

1.将 ES6 语法的文件转换为 ES5 的语法

1
babel -d lib/ src/

在 lib 目录下会生成 src 目录中对应的文件.

2.进入交互模式

1
babel-node

两次 ctrl+c 退出

3.检查babel状况

1
babel-doctor

检查以下内容

  • 配置文件.babelrc

  • 是否有重复的babel安装包,比如说安装了5和6

  • babel安装包是否已经升级到了最新版

  • npm >= 3.3.0

1

4.卸载全局的 babel-cli

1
npm uninstall --global babel-cli

感谢

  • Babel comes with a built-in CLI which can be used to compile files from the command line.

  • 阮一峰老师的 ECMAScript 6入门

iOS: 手机是否设置网络代理

发表于 2016-09-16 | 分类于 iOS |

情景

项目开发过程中, 会遇到下面这样一种情景:

产品或者设计同事需要体验目前产品开发的进度, 然后要求开发人员, 将现在的版本给他们体验.
做过程序开发的人都知道, 开发版本会有不少问题.
这时, 产品和设计同事就会抱怨, 怎么登录不了, 这里没有数据了!
有个小伙伴被折腾的实在受不了, 连网页都打不开了.
最后找到原因:
他手机被之前的程序猿设置了网络代理, 代理到程序猿哥哥的电脑上来抓包调试问题, 忘记取消设置了.

假如可以判断当前手机是否设置了网络代理, 就可以很好地解决上面情景中提到的问题了.

找到线索

在 ASIHttpRequest 中找到如下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- (BOOL)configureProxies
{
// Have details of the proxy been set on this request
if (![self isPACFileRequest] && (![self proxyHost] && ![self proxyPort])) {
// If not, we need to figure out what they'll be
NSArray *proxies = nil;
// Have we been given a proxy auto config file?
if ([self PACurl]) {
// If yes, we'll need to fetch the PAC file asynchronously, so we stop this request to wait until we have the proxy details.
[self fetchPACFile];
return NO;
// Detect proxy settings and apply them
} else {
#if TARGET_OS_IPHONE
NSDictionary *proxySettings = [NSMakeCollectable(CFNetworkCopySystemProxySettings()) autorelease];
#else
NSDictionary *proxySettings = [NSMakeCollectable(SCDynamicStoreCopyProxies(NULL)) autorelease];
#endif
proxies = [NSMakeCollectable(CFNetworkCopyProxiesForURL((CFURLRef)[self url], (CFDictionaryRef)proxySettings)) autorelease];
// Now check to see if the proxy settings contained a PAC url, we need to run the script to get the real list of proxies if so
NSDictionary *settings = [proxies objectAtIndex:0];
if ([settings objectForKey:(NSString *)kCFProxyAutoConfigurationURLKey]) {
[self setPACurl:[settings objectForKey:(NSString *)kCFProxyAutoConfigurationURLKey]];
[self fetchPACFile];
return NO;
}
}
if (!proxies) {
[self setReadStream:nil];
[self failWithError:[NSError errorWithDomain:NetworkRequestErrorDomain code:ASIInternalErrorWhileBuildingRequestType userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"Unable to obtain information on proxy servers needed for request",NSLocalizedDescriptionKey,nil]]];
return NO;
}
// I don't really understand why the dictionary returned by CFNetworkCopyProxiesForURL uses different key names from CFNetworkCopySystemProxySettings/SCDynamicStoreCopyProxies
// and why its key names are documented while those we actually need to use don't seem to be (passing the kCF* keys doesn't seem to work)
if ([proxies count] > 0) {
NSDictionary *settings = [proxies objectAtIndex:0];
[self setProxyHost:[settings objectForKey:(NSString *)kCFProxyHostNameKey]];
[self setProxyPort:[[settings objectForKey:(NSString *)kCFProxyPortNumberKey] intValue]];
[self setProxyType:[settings objectForKey:(NSString *)kCFProxyTypeKey]];
}
}
return YES;
}

踏破铁鞋无觅处…

判断 iphone 是否设置网络代理的示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
+ (BOOL)hasSetProxy
{
BOOL proxy = NO;

NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef)(url),
(__bridge CFDictionaryRef)(proxySettings)));
MZLOG(@"proxies:%@", proxies);
NSDictionary *settings = proxies[0];
MZLOG(@"kCFProxyHostNameKey: %@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
MZLOG(@"kCFProxyPortNumberKey: %@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
MZLOG(@"kCFProxyTypeKey: %@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"]) {
proxy = NO;
}
else {
proxy = YES;
}

return proxy;
}

用户体验

判断如果设置了代理, 提示用户, 帮他直接跳到 wifi 设置界面.

下面说说如何跳到系统的 wifi 设置界面.

1.配置 URL TYPES

1

注意这里的配置是 prefs.

2.openURL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSString * urlString = @"prefs:root=WIFI";
NSURL *url = [NSURL URLWithString:urlString];
UIApplication *app = [UIApplication sharedApplication];
if ([app canOpenURL:[NSURL URLWithString:urlString]]) {

if ([[UIDevice currentDevice].systemVersion doubleValue] >= 10.0) {

[app openURL:url options:@{} completionHandler:nil];
}
else {

[app openURL:url];
}
}

另外, 跳转到系统其他界面的 URL 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1.系统设置
prefs:root=INTERNET_TETHERING
2.WIFI设置
prefs:root=WIFI
3.蓝牙设置
prefs:root=Bluetooth
4.系统通知
prefs:root=NOTIFICATIONS_ID
5.通用设置
prefs:root=General
6.显示设置
prefs:root=DISPLAY&BRIGHTNESS
7.壁纸设置
prefs:root=Wallpaper
8.声音设置
prefs:root=Sounds
9.隐私设置
prefs:root=privacy
10.打开 APP Store
prefs:root=STORE
11.打开 Notes
prefs:root=NOTES
12.打开 Safari
prefs:root=Safari
13.打开 Music
prefs:root=MUSIC
14.打开 photo
prefs:root=Photos

与 CSDN 的诀别

发表于 2016-09-10 | 分类于 随笔 |

写这个话题, 内心还是蛮沉重的.

几年前与 CSDN 不期而遇, 在里面各种折腾, 翻阅大牛们的博客, 写评论, 甚至打印出来. 在技术论坛不停地”灌水”, 订阅 CSDN 杂志, 准备练就一身武艺.

互联网的蓬勃发展, 让我原来不安的心有了更加狂躁的冲动.

在某个夜深人静的夜晚, 开启了奋笔疾书的历程, 踏上了 CSDN 的博客之旅.
这么多年以来, CSDN 就像我的一个朋友, 不管是家长里短, 还是技术讨论, 各种心酸, 我都会记录在那里.

一坚持就是几年…

如今, 要离开 CSDN 的博客了, 不准备在那里继续’耕耘’了.
总结起来有如下几个原因:

  1. 文章被任意的转载, 没经过本人的允许.我在论坛也问过该事, 没有任何回应, 很失望!
  2. 广告越来越多.
  3. 相比以前, 很难找到让人满意的有质量的文章.

再见, CSDN! 请原谅我的不辞而别!

<1…1920

193 日志
16 分类
163 标签
© 2024 veryitman