Kids Return
所有内容未经说明都是原创。注明出处后欢迎转载。
Saturday, May 28, 2016
Hadoop 基本指令
format the namenode:
hdfs namenode -format
$ sbin/start-dfs.sh
$ sbin/stop-dfs.sh
主要配置文件
core-site.xml
hdfs-site.xml
Wednesday, December 17, 2014
[Python] Class间大小比较(达到全序)
在Python 2.x中, 可以方便的使用 __cmp__ 方法来实现class object之间的大小比较.
在Python 3以后, __cmp__ 方法被移除了. 实现Foo object间的大小比较, 需要用functools.total_ordering修饰这个class以后, 实现__eq__方法以及__lt__(或者__lt__, __le__, __gt__, __ge__中的任意一个).
class Foo: def __init__(self, key): self.key = key def __cmp__(self, other): return cmp(self.key, other.key)如此Foo类型的object间的大小比较就可以用key这个域的值来实现.
在Python 3以后, __cmp__ 方法被移除了. 实现Foo object间的大小比较, 需要用functools.total_ordering修饰这个class以后, 实现__eq__方法以及__lt__(或者__lt__, __le__, __gt__, __ge__中的任意一个).
import functools @functools.total_ordering class Foo: def __init__(self, key): self.key = key def __eq__(self, other): return self.key == other.key def __lt__(self, other): return self.key < other.key
Monday, August 11, 2014
[iOS] Apple的Push Notification Service: APNS
官方介绍
实现Push功能的例子
实现Push功能的例子
- Server端Php代码的例子: Learn PHP by Example - Working with Apple Push Notification
- 一步一步实现iOS应用PUSH功能
- Apple Push Notification Services in iOS 6 Tutorial: Part 1(APNS的设置), Part 2(iOS App的编程)
- Provider Communication with Apple Push Notification Service
- Changes in the APNS Binary Interface and Notification Format
PHP中二进制数据的处理
Saturday, August 09, 2014
Base64 Encoding
base64 encode是一种编码方式. 这种编码方式用来将一段二进制数据变换成为"方便传输"的文本数据. 它的核心思想是把二进制数据按每3个字节划分为一段, 然后每一段里每6个bit映射为一个文本字符来表示. 6个bit最多只有64种可能, 所以可以用a-zA-Z0-9+/ 这64个大多数字符集里都有的文本来对应.
在Objective C中, 使用如下的方法可以在二进制数据(NSDate类型)和based64 encoded数据(保存在NSString中)相互转换.
在Objective C中, 使用如下的方法可以在二进制数据(NSDate类型)和based64 encoded数据(保存在NSString中)相互转换.
// From binary data to base64 encoded string NSString string; if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) { string = [data base64EncodedStringWithOptions:kNilOptions]; // iOS 7+ } else { string = [data base64Encoding]; // pre iOS7 } // From base64 encoded string to binary data NSData *data; if ([NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)]) { data = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions]; // iOS 7+ } else { data = [[NSData alloc] initWithBase64Encoding:string]; // pre iOS7 }
Tuesday, August 05, 2014
[iOS] iOS开发涉及到的Certificate, Provisioning Profile
iOS development/distribution
iOS开发最基本的证书. 其实是一个private key, Xcode使用该private key对App的code签名.- iOS Development Certificate: 该证书用来在Xcode上开发一个iOS app
- iOS Distribution Certificate: 该证书用来将一个iOS使用App Store或者AdHoc方式来分发给用户
iOS Push service
一个经过Apple授权的SSL Certificate, 使得App后端的notification server可以连接到Apple的APNS服务.- APNS Development SSL Certificate: 在开发测试期使用该证书. APNS的sandbox 服务器:gateway.sandbox.push.apple.com:2195
- APNS Production SSL Certificate: 在App运行期使用该证书. 并连接APNS production 服务器:gateway.push.apple.com:2195
什么是Provisioning Profile
一个被Apple使用PKCS#7标准签名过的plist文件. 这个plist文件里以key-value pair的形式保存了关于这个App的一些基本属性. 比如AppIDName,证书创建和过期日期等等. 每一个Provisioning Profile需要对应- 一个AppID
- 一个development/distribution certificate
验证一个Provisioning Profile
$ openssl smime -in /path/to/your/foo.mobileprovision -inform der -verify这个命令会输出该plist文件的文本内容, 以及"Verification successful" 如果验证成功
参考
Thursday, July 17, 2014
SSL certificate
记点笔记
什么是SSL? https协议如运作:
http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html
检查你的server上的SSL certificate是否有效:
http://www.digicert.com/help/
创立一个self-signed ssl certificate:
http://www.akadia.com/services/ssh_test_certificate.html
什么是SSL? https协议如运作:
http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html
检查你的server上的SSL certificate是否有效:
http://www.digicert.com/help/
创立一个self-signed ssl certificate:
http://www.akadia.com/services/ssh_test_certificate.html
Wednesday, May 21, 2014
[git] 建立以及使用Git的bare repo
git repo分为bare和non-bare两种. non-bare repo最最常见, 它包括一个working tree(你提交到这个git repo里的文件和目录结构)以及一个.git文件夹(其中有各种git系统文件). 而bare repo仅仅有系统文件. 一般在git server上,所有的repo都是以bare形式存在的. 通常除了admin以外,大家是不需要和bare repo打交道的.
不过事事无绝对, 我就在工作中遇到这样的一个问题需要和bare repo打交道: 我的所有源代码都放在一个远端的git的repo(比如放在github上), 可是由于某些缘故我或者不能或者不愿意在我工作环境里直接和github上的repo同步. 一个折衷的方案就是在一台自己的server上建立这个github上的repo, 然后在我的工作环境中首先和server上得 repo同步, 然后再登陆到server上把server里地repo和github上的repo同步.
这样造成的问题就是server上的repo必须得是bare. 如果它含有working tree, 那么就算将server上的repo里的.git目录作为upstream加入, pull的时候没有问题, 但push的时候也会有问题
不过事事无绝对, 我就在工作中遇到这样的一个问题需要和bare repo打交道: 我的所有源代码都放在一个远端的git的repo(比如放在github上), 可是由于某些缘故我或者不能或者不愿意在我工作环境里直接和github上的repo同步. 一个折衷的方案就是在一台自己的server上建立这个github上的repo, 然后在我的工作环境中首先和server上得 repo同步, 然后再登陆到server上把server里地repo和github上的repo同步.
这样造成的问题就是server上的repo必须得是bare. 如果它含有working tree, 那么就算将server上的repo里的.git目录作为upstream加入, pull的时候没有问题, 但push的时候也会有问题
$ git remote add some_remote_name ssh://apc999@myhost/home/apc999/some-repo/.git $ git pull some_remote_name master .. works file ... $ git push --set-upstream ssh://apc999@myhost/home/apc999/some-repo/.git master ... ! [remote rejected] master -> master (branch is currently checked out) error: failed to push some refs to '/home/apc999/some-repo'
如何使用bare repo
1 建立一个bare的git repo
$ git clone --bare my_project_on_github my-project.git注意上面命令和普通git clone不一样的地方在于参数--bare. 普通的git clone命令会生成一个working tree和.git文件夹, 而--bare这样复制出来的bare repo就不包括working tree.
2 bare和 non-bare repo的转换
比如你的/home/apc999/my-project是一个git working tree$ cd /home/apc999/my-project $ git config --bool core.bare true
3 更新bare repo
注意, 在一个bare repo里, 不能使用git pull来更新这个repo. 而需要使用git fetch
Subscribe to:
Posts (Atom)