Long Luo's Life Notes

每一天都是奇迹

By Long Luo

2014.06.03 Apple举行了万众瞩目的WWDC2014,发布了OS X Yosimite和iOS8,最近几天看了一部分Keynote,从网上搜集了一部分资料,将这次WWDC14的一些新功能点汇总出来,同时加入了自己的一些想法,探讨下码农群体应该注意哪些趋势。

Continuity & Seamlessly

总体来说:

系统功能更加完善,更加人性化,更加开放,与其他iOS、Mac设备整合度扩大,并且预示了未来与可穿戴设备、智能家居的紧密结合的趋势,预计Health和Home两大产业将发生重大变革,将有一系列的新App和硬件改变我们的生活。

WWDC的报道会分别讲解Mac OS Yosemite和iOS 8的各项功能。可是整场看下来,觉得这两个系统的更新都有一个指针:统一。爷就是关键的2个词,Continuity & Seamlessly

Mac OS Yosemite的扁平化和透明统一了Mac OS和iOS的视觉风格。 Mac OS也追加了iOS上特有的功能,比如打电话、IM。

两个系统在视觉和功能上统一的同时,通过 iCloud 的升级,实现了数据同步。 「视觉」,「功能」和「数据」统一了之后, Handoff 实现了Mac OS和iOS工作的无缝切换。

最终,所有“苹果设备”都将无缝的融合到一起。随时拿起iPad,打开Macbook或者掏出 iPhone,你都能看到同样的视觉风格,得到一致的数据,使用同样的功能。

iOS8 新功能点

HealthKit

健康管理软件

这是一个私人健康数据平台,它可以整合其他第三方健康应用数据,也就说可以在HealthKit中统一浏览其他应用监测的数据。同时,它也将与梅奥诊所和其他医疗机构合作,允许医疗机构接受或传输你的数据。

HomeKit

把iPhone变成智能家居中心控制器
可以实现远程遥控智能家居设备,如智能门锁、灯泡或是监控摄像头。操作非常简单,只需对siri说:“我要上床睡觉了”,灯光就会变暗、门就会锁上。

Mail

1. 支持直接从邮件中添加日历事件。
2. 在邮件中将会引入全新的邮件手势,下滑消息可触发新动作。  
3. 图像编辑和草图分享,能够直接通过浏览器来提供强悍的图片编辑能力,并快速进行邮件分享。
4. 支持群组通信。群发功能——你可以直接在会话中添加或移除对象。                                                                                   
5. 轻松切换和快速访问联系人。                                                                   
6. 当你在手机上写了一半邮件之后,还可以在就近的电脑上继续完成  
7. 在当前消息中打开另一封邮件,然后再切换回来(工作进度依然保存着)。                                                                                                           
8. 可以在通知中直接为Facebook上的消息点赞!  
                            

iMessage

变身为一个没有朋友圈和公众号的微信

1. 支持群组通信。你可以直接在会话中添加或移除对象。                      
2. 支持多达14个国家和地区的语言,加快打字速度
3. 发送语音消息的功能很有趣。 
4. 图片支持以“相册”形式快速查看。
5. 支持语音信息,与对话的人共享位置。                                               
6. 支持发短视频                                                                                        
7. 在群聊短信设置中有“不要打扰”的相关选项

优化输入法

1. iOS8中在键盘中能够实现的第三方输入法,QuickType可智能预测。

当用户输入完当前单词之后,QuickType会提供3个智能预测的单词供用户选择。当然,如果你不喜欢这种“输入建议”,也可以轻松移除。

2. 在键盘中还引入了全新的Tap to Talk功能

新的Tap to Talk功能,语音输入短信,用户能够录制一段音频或视频并将其发送给收件人。

阅读全文 »

By Long Luo

2014年的06月01日,去参观了2014年深圳·香港·澳门国际车展,算是第一次参加车展吧,按照惯例谈谈感(tu)想(cao)吧:

一、学到的东西:

English:

车展:Auto Show or Motor Show 手动挡:MT(Manual Transmission) 自动挡:AT(Automatic Transmission) 手自一体:AMT(Automated Mechanical Transmission) 档位:P(Parking) R(Reverse) N(Neutral) D(Drive)

Car Brand:

A

奥迪-Audi 
阿斯顿马丁-Aston Martin   

B

宝马-BMW   
宾利-Bentley   
别克-Buick  
       

C 

凯迪拉克-Cadillac   
雪铁龙-Citroen   
雪佛兰-Chevrolet   

F 

法拉利-Ferrari   
菲亚特-Fiat   
福特-Ford 

H 

本田-Honda   
现代-Hyundai   

J 

捷豹(美洲虎)-Jaguar

K 

起亚-Kia   

L 

路虎(陆虎)-Land Rover   
雷克萨斯-Lexus   
蓝伯基尼-Lamborghini  

M

马自达-Mazda 
梅赛德斯-奔驰-Mercedes-Benz   
玛莎拉蒂-Maserati 
迷你-Mini  

N

日产--Nissan  

P

标致-Peugeot   
保时捷-Porsche   

R

劳斯莱斯-Rolls-royce   

  S 

双龙-Ssangyong   
斯柯达-Skoda   
斯巴鲁-Subaru   
铃木-Suzuki     
精灵-Smart 
阅读全文 »

翻译 By Long Luo

原文链接:iOS Programming Basic: How Does the Hello World App Work?

译者注:
1. 由于这是技术文章,所以有些词句使用原文,表达更准确。
2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正.

我希望你享受了第一个iOS编程教程,同时已经创造了你的第一个App。在进入下一教程以及制作一个更复杂的App之前,我们有必要回过头,分析这个Hello World App。对于你理解一些Objective-C语言的语法和App的内部工作机制有很大帮助。

目前为止,想必你已经按照教程完成了你的第一个Hello World App。不过,当你完成了这个教程之后,你脑海里肯定冒出了更多疑问:

  • xib,.h,.m文件是做什么用的?
  • showMessage内部的代码是什么?用什么作用?
  • 当你按下Hello World的按钮发生了什么呢?按钮是如何触发了显示消息的动作呢?
  • Xcode中的Run按钮是如何运作的?

我希望你已经对Xcode IDE开发环境比较熟悉了,这样我就不用再解释一遍上面的内容了。对于每个开发者来说,理解代码的内部细节和抓住基本概念对于iOS编程是很有必要的。对于某些技术概念,如果你没有丝毫的编程背景来说,理解一些技术概念是有一定难度的。但是,别担心,这里仅仅是一个开始。如果你继续学习后续的教程,写出更多的代码,你就能更好的理解iOS编程。尽你所能努力学习更多知识吧!

Interface Builder, Header and Implementation Files

首先,.xib, .h, .m文件是什么呢?这是一位读者提出的一个非常好的问题。在项目导航中,你应该可以找到3种主要的文件类型:.xib, .h, .m。(如果你打开“Supporting Files”文件夹,你可以找到其他的文件类型,例如plist和framework。但到目前为此,我们先忘掉它们,在今后课程中我们会讨论它们。)

.xib

  • 如果一个文件也有.xib的扩展名,它们是Interface Builder文件,存储了应用的UI。当你点击了.xib文件,Xcode会自动的打开Interface Builder界面,你可以通过拖动和放下来编辑应用的UI。如下图所示:
Interface Builder in Xcode

Interface Builder in Xcode

.h and .m

  • .h扩展名的文件表示这是头文件.m扩展名表示是具体的实现。和其他大多数编程语言一样,Objective-C的源码也分为2部分:接口实现

为了便于你更好的理解这2者关系,我们拿电视遥控器打比方。我们可以很方便地使用无线遥控器调节电视的音量。你按下音量+按钮增大扬声器的音量。切换频道时,你只需要按下频道数字。那我来问问你,你知道当你按下音量按钮的背后发生了什么吗?估计你不知道吧。我相信大部分人都不知道遥控器和扬声器之间是如何通信的。我们仅仅知道的是,那个按钮是用来调节音量的。在这里,按钮就是接口,而按钮之后的具体细节我们称之为实现

现在你应该对接口和实现有了一个更深的理解。让我们回到代码,在Objective-C语言中,一个类的接口是放在.h文件中。我们使用语法标示符@interface来声明一个类的接口。看下HelloWorldViewController.h的具体实现:

@interface HelloWorldViewController : UIViewController

-(IBAction)showMessage;

@end

HelloWorldViewController这个类名以“@interface”开头。内部则声明了一个“showMessage”的实现,也可以称之为方法

就像音量按钮,显然我们不知道showMessage这个方法是如何运作的。你仅仅知道它是用于在屏幕上显示一条信息。具体的实现则放在HelloWorldViewController.m文件中,如下所示:

@implementation HelloWorldViewController

// I've removed other methods for better reading. Focus on the showMessage method first.

- (IBAction)showMessage 
{
    UIAlertView *helloWorldAlert = [[UIAlertView alloc]
                                initWithTitle:@"My First App" message:@"Hello, World!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    // Display the Hello World Message
    [helloWorldAlert show];
}

@end

正如你上面所示,你使用“@implementation”去声明一个实现。在“showMessage”中,代码用于定义在屏幕中弹出一条警告。你不需要弄明白在“showMessage”的方法中每一行代码具体含义。简单来说,创建了一个以“My First App” 为标题,“Hello, World”作为消息的UIAlertView。然后调用“show”方法去请求iOS用于在屏幕上显示一个弹出消息。如下图所示:

Hello World App
阅读全文 »

By Long Luo

2014年的51 3天假期,有2个上午都去学车去了,因为不久之后我就要去考试了,总之呢,很多事情都是做的越早越好。今天把科目二考试的一些注意事项给记下来:

0. 准备工作

上车之后,第一步是调好靠背,后视镜,注意座椅不要调到太靠前,系好安全带。后视镜要保持后轮车毂在后视镜中间位置,把手在后视镜上方。

松手刹,踩住离合器和刹车,离合器踩到底,挂一档起步,慢慢松离合器,直到车头开始震动,离合不动,慢慢松刹车,车辆起步。

最重要的是要踩好离合器,保持很慢的速度,因为速度慢了可以慢慢调整,快了的话就没办法调整了。

1. 曲线行驶

车身调正,保持车身偏右进入,“”字压着右边边线,进入之后,保持”“字压着边线,转弯时,方向盘不动,直到车头角压着左边边线,方向盘右转一圈半,之后保持字压着边线。

Ok。

2. 直角转弯

车身调正,保持车身偏右进入,“”字压着右边边线。直到车头盖压住前面边线,迅速向左打死方向盘,车身平行之后,迅速调正方向盘。

Ok。

3. 坡道定点停车

车身调正,一直打左转向灯,保持字和字的中间压着黄线左边缘,慢速行驶。当左后视镜刚好可以看到双黄线的上边缘,踩住刹车。

Ok。

4. 侧方停车

车身调正,保持字压着右边黄线,慢速行驶。慢慢调到距离右边黄线为30公分左右,从右后视镜观察。当与二号角与窗口锁重合时,停车。方向盘向左打到死,直到字压到黄线中间,停车。

方向盘调正,右转半圈,踩住刹车,挂倒档,开始倒车,注意左后视镜,当观察到后轮轮胎碰到黄线时,迅速向左打死方向盘,直到车头盖缝隙与左边线平行,停车。

打左转向灯,踩住刹车离合器,挂一档,直到字压住左边黄线,向右调整方向盘。直到字压住右边线,方向盘回正。

Ok。

5. 倒车入库

倒车入库是5项中最难的。

调整车头盖左边缝隙压住左边边线,车身调正,当桩与右窗口重合时,下车查看,保持车尾与2个桩在一条直线上。

上车,方向盘向右打死挂倒档,观察右后视镜,当车毂与角间隔一个篮球宽度时,方向盘向左回一圈,观察左后视镜,当车身与边线平行,方向盘回正,当后视镜完全遮住时,间隔0.5s,停车。

起步观察,车身两边距离宽度是否一致,哪天多向哪边调,调半圈后回正,观察左窗口锁,当与线重合时,方向盘向左调一圈半,保持方向盘不动,直到左车门把手与线重合,停车。挂倒档,方向盘不动,观察左后视镜,直到左车毂与角间隔30公分,向左打死方向盘,车身回正时,方向盘回正,观察后视镜是否压住线。

Ok。

Long Luo Created at AM12:20 ~ 13:15 @May 03rd, 2014 at Shenzhen, China.

By Long Luo

最近面试时遇到一个算法题:

仿照Excel的列编号,给出一个数字,输出该列编号字符串。 例如:A对应1,Z对应26,AA对应27,AZ对应52 ……

这个题目是一个典型的26进制思路去处理,一个整数除26然后但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近半个多小时的编写,完成的代码如下:

C++

C++实现如下所示:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <string.h>

using namespace std;

//函数itos:正整数到编号转换
//num:输入的正整数,pcout:输出,Max:输出控件最大长度
void itos(int num, char *pcout )
{
char *res = new char[255];
int m = 0, n = 0;

while((num >= 1) && (n < 255))
{
m = num % 26;
if (m != 0)
{
res[n] = 'A' + m - 1;
}
else
{
res[n] = 'Z';
num--;
}

num /= 26;
n++;
}

for(m = n; m > 0; m--)
{
pcout[n - m] = res[m - 1];
}

pcout[n] = '\0';
delete[] res;

return;
}

//soti:字符串到数字的转换
int stoi(char *cha)
{
int m = 0, n = 0, i = 0, val = 0, a = 0;
char *pc = cha ;

while(*pc != '\0' )
{
//后移到个位
pc++;
n++;
}

for(i = 1; i <= n; i++)
{
//位循环
pc--;
a = i;
m = 1;

while(a > 1)
{
//位权
m *=26;
a--;
}

m *= (*pc - 'A' +1);
val += m;
}

return val;
}

int main()
{
char out[255] = {0};
printf( "out = %s\n", out);
itos(32, out);
printf( "out = %s\n", out);

getchar();

return true ;
}
阅读全文 »
0%