I/O Extended 2017 Nanning Report/活动总结

I/O Extended 2017 Nanning Report

南宁I/O Extended 2017活动总结

Thanks for all GDG Nanning members & local developers came to the great moment of I/O Extended 2017 Nanning. And we got a high school student spent the whole night with us. Thank you. It was very great to have you here @ the event.

首先非常感谢GDG成员及本地的开发者们,冒着作息时间颠倒的不适应,前来参加这个激动人心的I/O Extended之夜。我们要特别感谢,我们当中来了一位高中生(本来有四位高中生报名,可惜基本三位同学没能来),与我们共渡了一个不眠之夜。谢谢你。

We are sorry for the developers who can not come to the event, but we have prepared wine and food for you.

对不能来参加活动的同学们表示遗憾,我们可是为你们准备了美酒,美食啊。

We hope that more & more local developers & people will come to the coming event: I/O 2017 Redux Nanning.

希望有更多的本地开发者和人们将会前来参加接下来的 I/O 2017 Redux 南宁回顾活动。

One more thing, we moving to Meetup now, plesase feel free to join us: http://meetu.ps/c/3cPvY/B2lkk/f .

另外,我们正在迁移到 Meetup 上,欢迎大家到 Meetup 上来,一起开心学习,进步:http://meetu.ps/c/3cPvY/B2lkk/f

#io17extended

Thank to Mr. Lee for he took a lot of wonderful photos, let’s see them.

感谢 Mr. Lee 给我们拍了很多精彩的相片,来欣赏一下现场照片吧。

For more photos please visit here: https://www.meetup.com/gdg-nanning/photos/27862304/

or here:

https://plus.google.com/u/0/events/gallery/cf41vrq4mu2anf4c1fd1gta7gis?sort=1

更多照片请看这儿:https://www.meetup.com/gdg-nanning/photos/27862304/ 或这儿:https://plus.google.com/u/0/events/gallery/cf41vrq4mu2anf4c1fd1gta7gis?sort=1

Set the newest OpenSSL for your Development Environment on macOS

在 macOS 上为你的开发环境设置最新的OpenSSL。

There thousands of questions asking about upgrade of OpenSSL. I think I just got my best answer from Patrick Bougie (GitHub link: https://github.com/pbougie ).

网上有成千上万的贴子在问如何升级OpenSSL。经过一轮老司机式的谷歌搜索和比较,我觉得我从Patrick Bougie (GitHub链接:https://github.com/pbougie) 那里找到了最适合我的答案。

So thank you, Patrick Bougie for the great works.

感谢 Patrick Bougie ,你做了这么棒的指南。

And here is the url for the detail: http://mac-dev-env.patrickbougie.com/openssl/. Please check the ‘ Compiling a Web Development Environment on macOS ‘ article from him here: http://mac-dev-env.patrickbougie.com.

这儿是该指南链接:http://mac-dev-env.patrickbougie.com/openssl/。同时别忘了访问 ‘ 在 macOS 上编译 Web 开发环境 ‘ 全集指南,链接是:http://mac-dev-env.patrickbougie.com

🙂

Is that message authentication code (MAC) causes The resource cannot be found?

Is that message authentication code (MAC) causes The resource cannot be found?

This two days I deploy a .Net 4.0 website onto a web farm (multi-server environment) hosting in USA. I was got error after HttpModule, see below:

Server Error in ‘/’ Application.


The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /aspx/main/index.aspx

I tried everything, but never got the problem solved. I was tried to give up. Then I went to try the login function. Then I got the MAC failed.

After I generated a machineKey for the website I found that ‘The resource cannot be found.‘ just went away.

So I just think is that MAC problem causes this ‘The resource cannot be found.‘ problem?

It’s very easy to generate a machineKey for your own. Just see the steps below:

  1. Open IIS Managment & select a website.
  2. You’ll see a Machine Key icon & click on it.
  3. Click on ‘Generate Keys’ you’ll see the keys.
  4. Copy the Keys into your Web.config files, it looks like:
    <system.web>
        <machineKey validationKey=”96…” decryptionKey=”99…” validation=”SHA1″ />

 

过去的一年以来,我做了进口葡萄酒行业

我自工作以来,一直从事IT及编码行业工作,做得相当快乐和辛苦,也非常有成就感,但是很多事情光有成就感已经远远不足以生存在我朝,人生需要有很多东东,很多体验,于是我过去的一年开始,做起了进口葡萄酒行业,直接销售了来自法国、美国、德国、西班牙、智利、阿根廷、澳洲等世界葡萄酒。

欢迎大家支持我的新事业,在这儿,我保证我销售的进口葡萄酒是一批高品质,而价格非常公道的原瓶进口葡萄酒。如果您能够买到品质比我的好,价格比我的低的同款行货(非假货,非仿货,非次货。。。),请告诉我它们的出处,我将非常乐意为您补单,或是给您意外惊喜。

欢迎查看我所销售的进口葡萄酒:请猛击这里。

同时也非常欢迎您直接跟我联系,我的手机:13132914138,我的微信号和QQ号:1272000

同时您也可以直接打开我的微店:请猛击这里。

HTML5演示Demo

Just clone some html5 js code from lightapp & make a demo. It’s used to build simple app for book, manual and posters. It supports audio, video & baidu map, etc.
刚刚从lightapp上克隆了一些javascript代码,用于手机端展示html5动态页面的,可以非常方便的制作一些简单的宣传类应用,它支持声音,视频,百度地图展示等功能。

It’s here. 猛击这里展示。 直接输入:http://airflypan.com/ttpogx/ 也行。

iOS日期处理

Dates

        NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能。Date对象是不可改变的。

        如果你要创建date对象并表示当前日期,你可以alloc一个NSDate对象并调用init初始化:

  1. NSDate *now = [[NSDate alloc] init];  

        或者使用NSDate的date类方法来创建一个日期对象。如果你需要与当前日期不同的日期,你可以使用NSDate的initWithTimeInterval…或dateWithTimeInterval…方法,你也可以使用更复杂的calendar或date components对象。

        创建一定时间间隔的NSDate对象:

  1. NSTimeInterval secondsPerDay = 24 * 60 * 60;  
  2.   
  3. NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:secondsPerDay];  
  4.   
  5. NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];  
  6.   
  7. [tomorrow release];  
  8. [yesterday release];  


        使用增加时间间隔的方式来生成NSDate对象:

  1. NSTimeInterval secondsPerDay = 24 * 60 * 60;  
  2.   
  3. NSDate *today = [[NSDate alloc] init];  
  4. NSDate *tomorrow, *yesterday;  
  5.   
  6. tomorrow = [today dateByAddingTimeInterval: secondsPerDay];  
  7. yesterday = [today dateByAddingTimeInterval: -secondsPerDay];  
  8.   
  9. [today release];  


        如果要对NSDate对象进行比较,可以使用isEqualToDate:, compare:, laterDate:和 earlierDate:方法。这些方法都进行精确比较,也就是说这些方法会一直精确比较到NSDate对象中秒一级。例如,你可能比较两个日期,如果他们之间的间隔在一分钟之内则认为这两个日期是相等的。在这种情况下使用,timeIntervalSinceDate:方法来对两个日期进行比较。下面的代码进行了示例:

  1. if (fabs([date2 timeIntervalSinceDate:date1]) < 60) …  

 

NSCalendar & NSDateComponents

        日历对象封装了对系统日期的计算,包括这一年开始,总天数以及划分。你将使用日历对象对绝对日期与date components(包括年,月,日,时,分,秒)进行转换。

        NSCalendar定义了不同的日历,包括佛教历,格里高利历等(这些都与系统提供的本地化设置相关)。NSCalendar与NSDateComponents对象紧密相关。

        你可以通过NSCalendar对象的currentCalendar方法来获得当前系统用户设置的日历。

  1. NSCalendar *currentCalendar = [NSCalendar currentCalendar];  
  2.   
  3. NSCalendar *japaneseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSJapaneseCalendar];  
  4.   
  5. NSCalendar *usersCalendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];  

        usersCalendar和currentCalendar对象是相等的,尽管他们是不同的对象。

        你可以使用NSDateComponents对象来表示一个日期对象的组件——例如年,月,日和小时。如果要使一个NSDateComponents对象有意义,你必须将其与一个日历对象相关联。下面的代码示例了如何创建一个NSDateComponents对象:

  1. NSDateComponents *components = [[NSDateComponents alloc] init];  
  2.   
  3. [components setDay:6];  
  4. [components setMonth:5];  
  5. [components setYear:2004];  
  6.   
  7. NSInteger weekday = [components weekday]; // Undefined (== NSUndefinedDateComponent)  


        要将一个日期对象解析到相应的date components,你可以使用NSCalendar的components:fromDate:方法。此外日期本身,你需要指定NSDateComponents对象返回组件。

  1. NSDate *today = [NSDate date];  
  2.   
  3. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  4.   
  5. NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];  
  6.   
  7. NSInteger day = [weekdayComponents day];  
  8. NSInteger weekday = [weekdayComponents weekday];  
  9.   
  10. 同样你也可以从NSDateComponents对象来创建NSDate对象:  
  11. NSDateComponents *components = [[NSDateComponents alloc] init];  
  12.   
  13. [components setWeekday:2]; // Monday  
  14. [components setWeekdayOrdinal:1]; // The first Monday in the month  
  15. [components setMonth:5]; // May  
  16. [components setYear:2008];  
  17.   
  18. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  19.   
  20. NSDate *date = [gregorian dateFromComponents:components];  


        为了保证正确的行为,您必须确保使用的组件在日历上是有意义的。指定“出界”日历组件,如一个-6或2月30日在公历中的日期值产生未定义的行为。

        你也可以创建一个不带年份的NSDate对象,这样的操作系统会自动生成一个年份,但在后面的代码中不会使用其自动生成的年份。

  1. NSDateComponents *components = [[NSDateComponents alloc] init];  
  2.   
  3. [components setMonth:11];  
  4. [components setDay:7];  
  5.   
  6. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  7.   
  8. NSDate *birthday = [gregorian dateFromComponents:components];  


        下面的示例显示了如何从一个日历置换到另一个日历:

  1. NSDateComponents *comps = [[NSDateComponents alloc] init];  
  2.   
  3. [comps setDay:6];  
  4. [comps setMonth:5];  
  5. [comps setYear:2004];  
  6.   
  7. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  8.   
  9. NSDate *date = [gregorian dateFromComponents:comps];  
  10.   
  11. [comps release];  
  12. [gregorian release];  
  13.   
  14. NSCalendar *hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];  
  15.   
  16. NSUInteger unitFlags = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;  
  17.   
  18. NSDateComponents *components = [hebrew components:unitFlags fromDate:date];  
  19.   
  20. NSInteger day = [components day]; // 15  
  21. NSInteger month = [components month]; // 9  
  22. NSInteger year = [components year]; // 5764  

 

历法计算

        在当前时间加上一个半小时:

  1. NSDate *today = [[NSDate alloc] init];  
  2.   
  3. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  4.   
  5. NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];  
  6.   
  7. [offsetComponents setHour:1];  
  8. [offsetComponents setMinute:30];  
  9.   
  10. // Calculate when, according to Tom Lehrer, World War III will end  
  11. NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0];  


        获得当前星期中的星期天(使用格里高利历):

  1. NSDate *today = [[NSDate alloc] init];  
  2.   
  3. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  4.   
  5. // Get the weekday component of the current date  
  6. NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:today];  
  7.   
  8. /*  
  9. Create a date components to represent the number of days to subtract from the current date.  
  10.   
  11. The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question.  (If today is Sunday, subtract 0 days.)  
  12. */  
  13.   
  14. NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];  
  15.   
  16. [componentsToSubtract setDay: 0 – ([weekdayComponents weekday] – 1)];  
  17.   
  18. NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0];  
  19.   
  20. /*  
  21. Optional step:  
  22. beginningOfWeek now has the same hour, minute, and second as the original date (today).  
  23.   
  24. To normalize to midnight, extract the year, month, and day components and create a new date from those components.  
  25. */  
  26.   
  27. NSDateComponents *components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate: beginningOfWeek];  
  28.   
  29. beginningOfWeek = [gregorian dateFromComponents:components];  

        如何可以计算出一周的第一天(根据系统的日历设置):

  1. NSDate *today = [[NSDate alloc] init];  
  2.   
  3. NSDate *beginningOfWeek = nil;  
  4.   
  5. BOOL ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:NULL forDate: today];  


        获得两个日期之间的间隔:

  1. NSDate *startDate = …;  
  2. NSDate *endDate = …;  
  3.   
  4. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
  5.   
  6. NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;  
  7.   
  8. NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0];  
  9.   
  10. NSInteger months = [components month];  
  11. NSInteger days = [components day];  

        使用Category来计算同一时代(AD|BC)两个日期午夜之间的天数:

  1. @implementation NSCalendar (MySpecialCalculations)  
  2.   
  3. -(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate {  
  4.      NSInteger startDay=[self ordinalityOfUnit:NSDayCalendarUnit inUnit: NSEraCalendarUnit forDate:startDate];  
  5.   
  6.      NSInteger endDay=[self ordinalityOfUnit:NSDayCalendarUnit inUnit: NSEraCalendarUnit forDate:endDate];  
  7.   
  8.      return endDay-startDay;  
  9. }  
  10.   
  11. @end  


        使用Category来计算不同时代(AD|BC)两个日期的天数:

  1. @implementation NSCalendar (MyOtherMethod)  
  2.   
  3. -(NSInteger) daysFromDate:(NSDate *) startDate toDate:(NSDate *) endDate {  
  4.   
  5.      NSCalendarUnit units=NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;  
  6.   
  7.      NSDateComponents *comp1=[self components:units fromDate:startDate];  
  8.      NSDateComponents *comp2=[self components:units fromDate endDate];  
  9.   
  10.      [comp1 setHour:12];  
  11.      [comp2 setHour:12];  
  12.   
  13.      NSDate *date1=[self dateFromComponents: comp1];  
  14.      NSDate *date2=[self dateFromComponents: comp2];  
  15.   
  16.      return [[self components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0] day];  
  17. }  
  18.   
  19. @end  


        判断一个日期是否在当前一周内(使用格里高利历):

  1. -(BOOL)isDateThisWeek:(NSDate *)date {  
  2.   
  3.      NSDate *start;  
  4.      NSTimeInterval extends;  
  5.   
  6.      NSCalendar *cal=[NSCalendar autoupdatingCurrentCalendar];  
  7.      NSDate *today=[NSDate date];  
  8.   
  9.      BOOL success= [cal rangeOfUnit:NSWeekCalendarUnit startDate:&start interval: &extends forDate:today];  
  10.   
  11.      if(!success)  
  12.         return NO;  
  13.   
  14.      NSTimeInterval dateInSecs = [date timeIntervalSinceReferenceDate];  
  15.      NSTimeInterval dayStartInSecs= [start timeIntervalSinceReferenceDate];  
  16.   
  17.      if(dateInSecs > dayStartInSecs && dateInSecs < (dayStartInSecs+extends)){  
  18.           return YES;  
  19.      }  
  20.      else {  
  21.           return NO;  
  22.      }  
  23. }  

iOS将字符串转换为日期时间格式

1、如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面列举两种类型:
   NSString* string = @”20110826134106″;
    NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@”en_US”] autorelease]];
    [inputFormatter setDateFormat:@”yyyyMMddHHmmss”];
    NSDate* inputDate = [inputFormatter dateFromString:string];
    NSLog(@”date = %@”, inputDate);
    
    NSDateFormatter *outputFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [outputFormatter setLocale:[NSLocale currentLocale]];
    [outputFormatter setDateFormat:@”yyyy年MM月dd日 HH时mm分ss秒”];
    NSString *str = [outputFormatter stringFromDate:inputDate];
    NSLog(@”testDate:%@”, str);
两次打印的结果为:
    date = 2011-08-26 05:41:06 +0000
    testDate:2011年08月26日 13时41分06秒

说明:上面的时间是美国时间,下面的没有设置

   NSString* string = @”Wed, 05 May 2011 10:50:00 +0800″;
    NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@”en_US”] autorelease]];
    [inputFormatter setDateFormat:@”EEE, d MMM yyyy HH:mm:ss Z”];
    NSDate* inputDate = [inputFormatter dateFromString:string];
    NSLog(@”date = %@”, inputDate);

2、以前一直为这个事情纠结,无奈只能拼接字符串:

NSString *str=@”20120403000000″;

NSString *dateStr=[NSString stringWithFormat:@”有效期至:%@年%@月%@日”,
                           [str substringWithRange:NSMakeRange(0, 4)],
                           [str substringWithRange:NSMakeRange(4, 2)],
                           [str substringWithRange:NSMakeRange(6, 2)]];
这个方法笨,可是没办法,查了好多资料,都没明白,今天突然明白了,呵呵,只要把那个[inputFormatter setDateFormat:@”EEE, d MMM yyyy HH:mm:ss Z”];@“”里面的格式转化为你字符串的格式一切就OK了,不知道我说明白了吗?


3、iOS-NSDateFormatter 格式说明:

G: 公元时代,例如AD公元
    yy: 年的后2位
    yyyy: 完整年
    MM: 月,显示为1-12
    MMM: 月,显示为英文月份简写,如 Jan
    MMMM: 月,显示为英文月份全称,如 Janualy
    dd: 日,2位数表示,如02
    d: 日,1-2位显示,如 2
    EEE: 简写星期几,如Sun
    EEEE: 全写星期几,如Sunday
    aa: 上下午,AM/PM
    H: 时,24小时制,0-23
    K:时,12小时制,0-11
    m: 分,1-2位
    mm: 分,2位
    s: 秒,1-2位
    ss: 秒,2位
    S: 毫秒

常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy