小米路由常用操作

常用命令

  1. ssh登录

     局域网登录:
     ssh [user@]hostname [command]
      例如:ssh root@192.168.31.1  或  远程登录:ssh root@222.35.145.28 -p 2195
     回车
     输入密码
    
     **修改密码:**
     root@xiaoqiang:~#passwd   
     回车
     输入新密码
     回车
     再次输入新密码
    
  2. 远程拷贝数据

     scp Desktop/ar71xx/* root@192.168.31.1:/userdisk/myWorkspace/ar71xx
    
  3. 每次重启路由获取IP:

     vi /etc/rc.local
     sh /etc/getIP.sh
    

//启动后,等待20秒,然后,获取当前时间作为文件名称 //使用ifconfig 获取路由器的ip信息 //使用 | grep 通道,和grep正则来过滤出,wan口的ip所在行 // > 使用重定向,将过滤的ip行,写入路由硬盘/userdisk/data/my/ip目录中 //通过小米路由手机客户端,找到该txt文件,并下载到手机sd卡中 //查看该文件,既有路由重启后的当前IP

Xcode7编译发布问题

Xcode7编译发布问题 ERROR ITMS-90535: “Unexpected CFBundleExecutable Key. The bundle at ‘Payload/PBBReader.app/TencentOpenApi_IOS_Bundle.bundle’ does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to

Xcode和Jenkins持续集成的几种实现方式

CI服务器

写到这儿,对于iOS开发者来说,需要准备好:

  • 一个比较容易获取的源代码仓库(包含源代码)
  • 一套自动化构建脚本
  • 一系列围绕构建的可执行测试

接下来就需要一个CI服务器来根据源代码的变更触发构建,监控测试结果。

目前,业界比较流行的,支持iOS构建的CI服务器有

  • Travis CI:是一个免费的云服务平台,基本上支持所有目前主流的语言,Object-C自然也在其中,但是只支持github极大的限制了其应用场景。目前国内无法访问,详见
  • Jenkins:经过多年的发展,其活跃的社区和丰富的插件让其成为了业界最受欢迎的CI服务器。通过使用Xcode插件,可以非常方便在Jenkins中运行iOS项目的构建脚本。

快速正确的安装Ruby,Rails运行环境

安装ruby环境: 方法一:下载源码,编译安装:配置中制定安装目录
方法二:使用rvm安装:可以提供一个便捷的多版本 Ruby 环境的管理和切换
方法三:使用macport安装 port install ruby

详细教程

问题:
ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/rake stackoverflow方法测试结果没走通。
最终通过OS X 10.11中Rootless的实现与解释以及关闭方法解决.

Gem介绍

Gem是一个ruby库和程序的标准包,它通过RubyGem来定位、安装、升级和卸载,非常的便捷。

Ruby 1.9.2版本默认安装RubyGem,如果你使用其它版本,请参考如何安装RubyGem。

Git中的储藏工具stash

  1. Stashing
  2. 储藏工作
  3. 应用储藏
  4. 被暂存的文件重新暂存
  5. 应用后,移除储藏的内容
  6. 取消储藏(Un-applying a Stash)
  7. 新建stash-unapply别名
  8. 从储藏中创建分支

Git工具 - 储藏(Stashing)git


原文 场景:当项目中某一部分正在编码中,突然接到新任务,又必须换至其他分支去完成。

问题:你不想提交进行了一半的工作,否则以后你无法回到这个工作点。

解决:**git stash **命令。

“Stashing”可以获取工作目录的中间状态,即:将修改过的被追踪的文件和暂存的变更,保存到一个未完结变更的堆栈中,随时可以重新应用。

储藏工作


  1. 进入项目目录,修改某个文件,有可能还暂存其中的一个变更。
  2. **git status **命令,查看中间状态: {%codeblock lang:bash %} $ git status

On branch master

Changes to be committed:

(use “git reset HEAD …” to unstage)

modified: index.html

Changes not staged for commit:

(use “git add …” to update what will be committed)

modified: lib/simplegit.rb

{%endcodeblock%} 3. 切换分支,但不提交step 1 中的变更,所以储藏这些变更。 执行**git stash 命令,往堆栈中推送一个新的储藏: {%codeblock lang:bash %} $ git stash Saved working directory and index state
“WIP on master: 049d078 added the index file” HEAD is now at 049d078 added the index file (To restore them type “git stash apply”) {%endcodeblock%} 4. 执行step 2查看目录库,中间状态就不见了: {%codeblock lang:bash %} $ git status #######On branch master nothing to commit, working directory clean {%endcodeblock%} 这时,你可以方便地切换到其他分支工作;你的变更都保存在栈上。 5. 使用
git stash list**要查看现有的储藏: {%codeblock lang:bash%} $ git stash list stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051 Revert “added file_size” stash@{2}: WIP on master: 21d80a5 added number to log {%endcodeblock%} 在这个案例中,之前已经进行了两次储藏,所以你可以访问到三个不同的储藏。

应用储藏


执行**git stash apply命令, 可以重新应用最近的一次储藏; 执行git stash apply stash@{2}**命令,即通过指定储藏的名字,来应用更早的储藏。 {%codeblock lang:bash%} $ git stash apply

On branch master

Changes not staged for commit:

(use “git add …” to update what will be committed)

modified: index.html

modified: lib/simplegit.rb

{%endcodeblock%}

XMPP简单研究[转]

最近想做一个游戏服务器和 IM 互通的服务。最初的想法是可以增进游戏帐号的安全,比如游戏用户可以通过绑定一个 IM 帐号,从而不用登陆游戏就向游戏服务器

代码实现AutoLayout相关特性

按比例缩放

按比例缩放,这是在Interface Builder中无法设置的内容。
而在代码中,有如下两种实现方式:

  1. 使用NSLayoutConstraint类型的初始化函数中的multiplier参数就可以非常简单的设置按比例缩放。
  2. 同时也可以设置不同NSLayoutAttribute参数来达到意想不到的效果,比如“A的Width等于B的Height的2倍”这样的效果。

现在就拿一个简单的**UIButton**做示例,在ViewController中创建一个UIButton字段:
{%codeblock lang:objc%} UIButton *btn;
{%endcodeblock%}

需求 1:

  1. 要求**UIButton水平居中,始终距离父View底部20**单位,其高度是父View高度的三分之一。
  2. 使用KVO来监控**UIButton**的大小并实时输出到屏幕上。
    {%codeblock lang:objc%}
  • (void)viewDidLoad { [super viewDidLoad];

    //创建UIButton,不需要设置frame btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [btn setTitle:@“mgen” forState:UIControlStateNormal]; btn.backgroundColor = [UIColor greenColor]; [self.view addSubview:btn];

    //禁止自动转换AutoresizingMask btn.translatesAutoresizingMaskIntoConstraints = NO;

    //居中 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];

    //距离底部20单位 //注意NSLayoutConstraint创建的constant是加在toItem参数的,所以需要-20。 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-20]];

    //定义高度是父View的三分之一 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:0.3 constant:0]];

    //注册KVO方法 [btn addObserver:self forKeyPath:@“bounds” options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial context:nil];
    }

在IOS中自定义URLSchemes教程

URL Schemes

iPhone SDK中最酷的功能之一是一个应用程序能够把自己和自定义的URL协议绑定,这个URL协议可用于启动该应用程序(通过浏览器或者iPhone上的另一个程序)。创建这样的绑定并不难,难得的是你忍不住要在你的程序里用它!

首先,你需要说明你想如何在程序中响应这个URL。最简单的自定义协议的方法是“唤醒”,而且可以通过URL把数据信息传递给程序,这样,程序被唤醒后能做更多的事情。

注册自定义URL协议

首先需要向iPhone注册一个自定义URL协议。这是在你的项目文件夹的info.plist文件进行的(就是你改变应用程序图标的同一个文件)。

默认,Xcode在图形窗口中打开info.pllist,当然也可以直接用文本模式打开——对有的人来说这反而更简单。

Step1. 右键,选择“Add Row”,在下拉选框中选择“URL types”,类型为Array:
Step2. 打开“Item 0″类型为Dic,添加新key为"URL identifier",类型为String。可以是任何值,但建议用“反域名”(例如 “com.myapp”)。
Step3. 打开“Item 0″类型为Dic,添加新key为“URL Schemes”,类型为Array:

XcodeHeaderDoc教程

HeaderDoc 是在Xcode 5 和 iOS7 发布时,新增的一个命令行工具,功能:可以从代码中自动生成格式良好的HTML文档——当然,必须依赖于特定格式的注释来完成的。

另外,Xcode 还会在 quick look 面板中以HeaderDoc风格显示你的注释。

通过本教程,将学习如下几点:

  • 如何书写 HeaderDoc 风格的注释
  • 分如何在 Xcode 中预览文档
  • 如何生成 HTML 文档
  • 如何使用 VVDocumenter-Xcode(一个易于使用的第3方文档制作工具)

准备工作

下载本教程中用到的 示例项目

这个简单的示例程序只包含了两个类:

  • Car: 包含几个属性及一个 “drive” 方法以及一个 completion 块。
  • MathAPI: 包含了1个方法,用于累加两个数。 现在,这两个类还没有任何注释。以便演示如何通过 HeaderDoc 为这两个类创建文档。

Storyboard之Segue

Segue原理:

在iOS开发中,segue用来实现storyboard中源视图控制器和目标视图控制器连接,当segue被触发时,系统将完成下列操作:

  1. 实例化目标视图控制器
  2. 实例化一个新segue对象,该对象持有所有的信息
  3. 调用源视图控制器的prepareForSegue:sender:方法,
  4. 调用segue的 perform 方法将目标控制器带到屏幕上。
    这个动作行为依赖segue的类型如modal,push,custom,modal segue告诉源视图控制器present目标视图控制器。

在源视图控制器的prepareForSegue:sender:的方法中,执行对目标视图控制器所有必要的属性配置,包括委托设置(如目标视图控制器有协议)。