命名规则

命名规则类似Java,Javascript的通用的命名规则可以参考此处。下文提到的小Small Camel是指首字母小写Camel命名规则;Big Camel首字母大写Camel命名规则。

类型 规则
命名空间 全小写,子空间使用英文点号‘.’分隔
Big Camel
类方法 Small Camel(不含命名空间)
常量 全大写,下划线分隔词
局部变量 Small Camel
全局变量 Small Camel,首词为小写g
全局函数 Small Camel
文件 1.       文件中包含0个或多个类则使用命名空间作为文件名2.       文件中为单一类则使用类全名(含命名空间)作为文件名

3.       源码中仍有不符合上述命名规范的文件,它们多为占位文件,

a)       占位文件是AdService编译后会生成的同名文件,通常只有一句,下图中的‘ads.trunk.js’就是一个占位文件。

b)       exp.js用于实现为小流量平台的流量切换;

c)       app.js用于流量交换详细页面;

d)       sdk.ios.js是iOS平台加载的Native接口文件;

e)       另外一些不符合规范的文件是各种JS库文件

5.6 时序

MySQL内置函数uuid和uuid_short简析

有同学问到MySQL的uuid这个函数。简要介绍一下。
用法
简单看到,这个值,每次执行都是不同的。
生成规则
第1 2 3 段是与时间有关的。
  www.2cto.com  
time_low、time_mid、time_high_and_version转成16进制后分别对应第1 2 3段。这个时间是从1582-10-15 00:00:00.00到当前时间的100ns值。(实际上系统只能取到精确us,再乘以10)。所以你短时间连续执行的话,比较可能只有第一个值在改, 实际上1 2 3都可能会改变。
第4段是你启动这个MySQL后第一次执行select uuid()时的随机数,每次重启会改变。
第5段是mac值转过来的,同一个机器多实例的一般相同。如果mac值获取不到,则是一个随机值。
所以这个值可以认为是每次执行都不相同。并且不同实例之间也只有极微小概率重复。
Uuid_short
         与uuid返回固定长度字符串不同, uuid_short的返回值是一个unsigned long long类型。MySQL启动后第一次执行的值是通过server_id << 56 + server_start_time << 24来初始化。server_start_time单位是秒。 之后每次执行都加1。
         由于每次加1都会加全局mutex锁,因此多线程安全,可以当作sequence来用,只是初始值有点大。
Sequence
         MySQL没有Oracle那样的sequence,在不是很精确的情况下,可以考虑上面提到的uuid_short。有一些不足:  www.2cto.com
1、初始值太大,无法重设
2、存在一个问题是每次重启后第一次执行的值不是重启前的那个值+1
3、而且如果重启在1s内完成,可能出现不单调递增(虽然这个可能性微乎其微)。
         要满足上面的需求,可以考虑用udf实现。

Linux系统常用命令

1,文件内查找字符串

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行
find / -type f -name “*.log” | xargs grep “ERROR”
例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行
find . -name “*.in” | xargs grep “thermcontact”

MySql支持Emoji表情,iOS等设备显示Emoji表情,需要 MySQL 数据库建议都提前采用 utf8mb4 字符集。

utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以能支持更多的字符集。

解决方案:将Mysql的编码从utf8转换成utf8mb4。

需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错

停止MySQL Server服务

修改 my.cnf或者mysql.ini

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4′

重启 MySQL Server、检查字符集

mysql> SHOW VARIABLES WHERE Variable_name LIKE ‘character\_set\_%’ OR Variable_name LIKE ‘collation%';

150406062777081

 

修改数据库字符集:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

 

修改表的字符集:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

修改字段的字符集:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

如果只是某个字段需要 只需要修改那个字段的字符集就可以了

另外服务器连接数据库 Connector/J的连接参数中,不要加characterEncoding参数。 不加这个参数时,默认值就时autodetect。

libWeChatSDK.a(WXApiObject.o)’ does not contain bitcode

更新完毕xcode到7.0后,出现libWeChatSDK.a(WXApiObject.o)’ does not contain bitcode错误,

搜到以下结果得到解决,不过只是在buildsetting 选项中搜索 bitcode  把选项设置成NO,后面没有操作。

link异常

libWeChatSDK.a(AppCommunicateData.o)’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

在buildsetting 选项中搜索 bitcode  把选项设置成NO

linked framworks 里加一个ios9的

libsqlite3.0.tbd   设置成 option

UITextView 垂直显示在顶端

老外重新定义了UITextView支持了 垂直显示在顶端,用了感觉很好。分享下。下载地址在文章的最后,示例代码是写的一个意见反馈输入框。

#import “UITextView+VerticalAlignment.h”

    //

    msg =[[UITextView alloc] init];

    msg.frame = CGRectMake(10, 74, SCREENWIDTH-20, 150.0);

    msg.alignToTop;

    msg.text = @”您的宝贵意见将帮助我们不断改进;

    msg.backgroundColor = UIColorFromRGB(0xffffff);

    //msg.font = [UIFont fontWithName:@”Arial” size:14];

    msg.font = [UIFont systemFontOfSize:14];

    msg.delegate = self;

 

    msg.textColor = [UIColor lightGrayColor];

    msg.scrollEnabled = NO;//是否可以拖动

    [self.view addSubview:msg];

 

https://gist.github.com/toms972/8330377

在应用内展示App Store

在ios6.0前跳转到appstore评分一般是直接跳转到appstore评分
NSString *evaluateString = [NSString stringWithFormat:@”itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=587767923″];
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:evaluateString]];

在ios6.0,APPle增加了一个心得功能,当用户需要给APP评分时候,不再跳转到appstore了,可以在应用内实现打开appstore,苹果提供了一个框架StoreKit.framework,实现步骤如下:
1:导入StoreKit.framework,在需要跳转的控制器里面添加头文件#import

#import <StoreKit/StoreKit.h>

2:实现代理SKStoreProductViewControllerDelegate
3:- (void)evaluate{
  
   //初始化控制器
   SKStoreProductViewController *storeProductViewContorller = [[SKStoreProductViewController alloc] init];
   //设置代理请求为当前控制器本身
   storeProductViewContorller.delegate = self;
   //加载一个新的视图展示
   [storeProductViewContorller loadProductWithParameters:
    //appId唯一的
    @{SKStoreProductParameterITunesItemIdentifier : @”587767923″} completionBlock:^(BOOL result, NSError *error) {
        //block回调
       if(error){
           NSLog(@”error %@ with userInfo %@”,error,[error userInfo]);
       }else{
           //模态弹出appstore
           [self presentViewController:storeProductViewContorller animated:YES completion:^{
              
           }
            ];
       }
   }];
}

//取消按钮监听
– (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController{
   [self dismissViewControllerAnimated:YES completion:^{
      
   }];
}
就很轻松实现了应用内置appstore评分功能。

UISlider按段滑动

SMECP

@interface MyViewController : UIViewController {
    UISlider *slider;
    NSArray *numbers;
}
@end

@implementation MyViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    slider = [[UISlider alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:slider];

    // These number values represent each slider position
    numbers = @[@(-3), @(0), @(2), @(4), @(7), @(10), @(12)];
    // slider values go from 0 to the number of values in your numbers array
    NSInteger numberOfSteps = ((float)[numbers count] - 1);
    slider.maximumValue = numberOfSteps;
    slider.minimumValue = 0;

    // As the slider moves it will continously call the -valueChanged: 
    slider.continuous = YES; // NO makes it call only once you let go
    [slider addTarget:self
               action:@selector(valueChanged:)
     forControlEvents:UIControlEventValueChanged];
}
- (void)valueChanged:(UISlider *)sender {
    // round the slider position to the nearest index of the numbers array
    NSUInteger index = (NSUInteger)(slider.value + 0.5);
    [slider setValue:index animated:NO];
    NSNumber *number = numbers[index]; // <-- This numeric value you want
    NSLog(@"sliderIndex: %i", (int)index);
    NSLog(@"number: %@", number);
}