月度归档:2015年03月

「晨读推荐」Apple Watch 开发系列专题

晨读推荐2

关于「晨读推荐」

由 LeanCloud 的工程师和设计师,以周为单位进行阅读分享,包含每位工程师和设计师想加入自己读到的「有价值、有趣味、有分享意义」的文章以及推荐理由。

技术向 Geek Must Read

《Apple WatchKit 初探》
LeanCloud 导读:
11 月 19 日,Apple 发布了第一版的 Watch Kit 的 API,对于开发者来说,这款新设备的一些更详细的信息也算是逐渐浮出水面。可以说第一版的 WatchKit 开放的功能总体还是令人满意的。Apple 在承诺逐渐开放的方向上继续前进。本文介绍了 Watch app 架构和主要的类等相关知识。

工具向 The Best Tools

《WatchKit 的 WKInterfaceTable 简单使用》
LeanCloud 导读:
WKInterfaceTable 类似 UITableView, 其用途即展示一个表格并且用户可以与之交互。但不同的是 WKInterfaceTable 的功能更加简单,使用上也很粗暴直接。本文一步步演示了创建一个简单的包含 WKInterfaceTable 的 Apple Watch App!

设计向 Design More, Design Better

《「热潮过后」畅想 Apple Watch 的美好前景》
LeanCloud 导读:
Apple Watch 身材娇小,咋一看去,貌似没它大哥 iPhone 那么尿性。可事情没有绝对,只要处理得当,劣势也能转化成优势。更何况在我看来,Apple Watch 内部那些传感器绝对可以派上大用场——小到触感式导航,大到拯救生命,它都能拿出独到的解决方案。本文以精彩的配图和详细的场景解说,带你看看 Apple Watch 你没想到的功能。
001-apple-watch-ideas

新知向 Ren chou jiu yao duo du shu

《细数攻城掠地中的 Apple Watch 精彩应用》
LeanCloud 导读:
玲珑小巧的 Apple Watch,蕴含的功能和商机却不少。如何利用好有限的屏幕空间,打造出实用耐看的 Watch 应用呢?幻灯片马上开始,爱学习的同学快入座。本文收集到一些先公布出来的 Apple Watch 应用,大家看看能不能从中获得些启发,为自己未来的项目找到素材和方向。

「重要通知」LeanCloud 系统中现金账户与短信账户将进行拆分

尊敬的用户:

此前, LeanCloud 的短信服务一直采用实时扣费,即要提前充足够现金,每发一条短信将扣费 0.06 元。由此,在每月初因其它服务的费用扣款时,会将用户的短信预算也扣除,导致某些用户余额不足无法使用短信功能。为解决该问题,我们决定从 4 月 15 日起,正式拆分 LeanCloud 系统中的现金余额和短信余额。

我们建议需要使用短信服务的用户,即日起购买足够的短信额度,以避免因短信余额不足而无法发送短信。您既可以用现金余额也可以用支付宝购买短信额度
Screen Shot 2015-03-26 at 7.09.33 PM
此外,在您的短信余额用完之前,LeanCloud 系统会通过短信和邮件向您发送通知。因此,我们强烈建议您在开发者账户信息中填写手机联系方式,以接收我们的提醒短信。

在过渡期间——即日至 4 月 15 日,短信消费将先从「当前账户余额」中扣除,如若失败将从「短信账户」中扣除。

感谢您选择使用我们的服务。

The LeanCloud Team

「晨读推荐」《这个 API 很迷人 —— 新的 Fetch API》等

晨读推荐

关于「晨读推荐」

由 LeanCloud 的工程师和设计师,以周为单位进行阅读分享,包含每位工程师和设计师想加入自己读到的「有价值、有趣味、有分享意义」的文章以及推荐理由。

技术向 Geek Must Read

《漫谈:机器学习中距离和相似性度量方法》
LeanCloud 导读:
在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,本篇文章就介绍了机器学习的入门知识,介绍了几种简单的距离计算算法。

工具向 The Best Tools

《这个 API 很迷人—— 新的 Fetch API》
LeanCloud 导读:
JavaScript 通过 XMLHttpRequest(XHR) 来执行异步请求,这个方式已经存在了很长一段时间。虽说它很有用,但它不是最佳 API 。它在设计上不符合职责分离原则,将输入、输出和用事件来跟踪的状态混杂在一个对象里。而且,基于事件的模型与最近 JavaScript 流行的 Promise 以及基于生成器的异步编程模型不太搭。
新的 Fetch API 打算修正上面提到的那些缺陷。 它向 JavaScript 中引入和 HTTP 协议中同样的原语。具体而言,它引入一个实用的函数 fetch() 用来简洁捕捉从网络上检索一个资源的意图。

设计向 Design More, Design Better

《关于实践 Material Design 的三个基本问题》
LeanCloud 导读:
我们的应用要不要采用 Material Design?要想清楚这个决定,那 Material Design 是什么、为什么要采用 Material Design 以及在自己的产品中怎样实践 Material Design 会成为首先要回答的三个问题。

新知向 Ren chou jiu yao duo du shu

《Netty 系列之 Netty 高性能之道》
LeanCloud 导读:
作为当前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于 Netty 的 NIO 框架构建。但是,Netty 怎么做到的如此高效,能说出一二三来的人很少。本文详细分析了 Netty 高性能的解决之道,包括异步非阻塞通信、零拷贝数据传递、内存池、React 线程模型,以及无锁串行的设计理念,非常值得一读。

03/22 活动回顾《大规模、高并发实时聊天平台的挑战和思路》By 丰俊文

SegmentFault D-Day 2015 北京站 在中关村车库咖啡顺利地举行了。沙龙的内容主要是四个重量级的嘉宾分享和简单的圆桌讨论,涉题前端技术、趋势展望和创业历程,内容甚是丰富。接下来我们就详细回顾一下今天的分享内容。

LeanCloud CTO 丰俊文的分享主题是《大规模、高并发实时聊天平台的挑战和思路》,就实时通信所面临的高并发、实时、扩展性、安全性、手段多样性、使用便利性等多个问题,详细分享了 LeanCloud 的解决方式。从他们服务端架构的变化,由以前的单一集中服务存储变成现在的集群存储,到将架构的功能模块、技术栈、部署架构、负载均衡、安全通道以及其他一些特性都进行了详细的讲解,非常值得一听。对 IM 感兴趣的开发者可以看下这次的 ppt 内容

晨读推荐《「豆瓣 APP2.0」产品体验报告》等

晨读推荐4

关于「晨读推荐」

由 LeanCloud 的工程师和设计师,以周为单位进行阅读分享,包含每位工程师和设计师想加入自己读到的「有价值、有趣味、有分享意义」的文章以及推荐理由。

技术向 Geek Must Read

《Method Swizzling 和 AOP 实践》
LeanCloud 导读:
我们上周的晨读推荐了一篇利用 Objective-C 的 Runtime 特性,给语言做扩展,帮助解决项目开发中的一些设计和技术问题的文章。这一篇,我们来探索一些利用 Objective-C Runtime 的黑色技巧。这些技巧中最具争议的或许就是 Method Swizzling 。

工具向 The Best Tools

《编译器基础知识》
LeanCloud 导读:
作为一个经常使用编译器的开发者,了解一下编译器的原理可以方便快速定位解决开发中遇到的问题。本篇文章概括了编译器相关的基础原理。

设计向 Design More, Design Better

《「豆瓣 APP2.0」产品体验报告》
LeanCloud 导读:
本文以多张简图的方式,阐述了作者对「豆瓣 App 2.0」从产品设计到交互分析上的一些看法,阅读起来方便请悉,思路简洁明了,推荐阅读。

新知向 Ren chou jiu yao duo du shu

《扫盲 HTTPS 和 SSL/TLS 协议 2:可靠密钥交换的原理》
LeanCloud 导读:
上周晨读推荐的一篇《扫盲 HTTPS 和 SSL/TLS 协议 1:背景知识、协议的需求、设计的难点》介绍了相关的背景知识以及设计 SSL 需要考虑的需求。当时作者提到:设计 HTTPS 的最大难点(没有之一)是——如何在互联网上进行安全的 「密钥交换」。这篇就是介绍密钥交换的原理,并不包含技术实现部分。

实时通信 2.0:对话 API 和多媒体消息

自去年 LeanCloud 发布实时通信服务之后,我们收到了很多用户反馈,经过工程师对需求的消化和对业务的提炼,我们很高兴今天正式发布了实时通信 2.0 版本。新版本除了继续坚持我们的设计理念(灵活、解耦、可组合、可定制),我们更主要地针对第一版用户使用中的痛点做了重点改进,增加了 「对话」 这一实体概念和相应的 API,帮助开发者更有效地管理消息的上下文。另外值得一提的是,新版本中提供的多媒体消息格式类,开发者可以更加快捷地发送音频、视频、文件和地理位置等富媒体消息。

对话

新版本中,我们用「对话」这一概念整合所有的聊天形式:单聊、群聊和开放聊天室。每一个对话对应数据存储中 _Conversation 表的一条记录,因此开发者可以随时获取自己最近参与对话列表,这解决了我们先前版本在这方面的不足。而且,基于 LeanCloud 强大的数据存储、查询的基础,开发者还可以对「对话」记录增加自定义属性,并通过自定义的查询获取。消息现在通过对话来索引和管理,除了以被动推的方式实时到达客户端之外,用户还可以主动拉取某一对话从任意时刻开始向前的消息记录。实时通信中所有的概念和机制都对开发者透明,尽可能多地满足开发者个性化的需求。更多关于对话的信息可以在文档中找到。

新版本的 iOS 发送消息示例:

AVIMMessage *message = [AVIMMessage messageWithContent:@"hello"];
[_conversation sendMessage:message callback:^(BOOL succeeded, NSError *error){
if (error) {
    // 出错了 :(
} else {
    // 成功!
}
}];

接收消息:

-(void)conversation:(AVIMConversation *)conversation didReceiveCommonMessage:(AVIMMessage *)message {
    // 下面的逻辑会把消息直接存入本地数据库缓存。注意:你完全可以根据自己的需要来决定实际如何处理
    [self saveMessageToDatabase:message callback:^(BOOL succeeded, NSError *error) {
        [[NSNotificationCenter defaultCenter] postNotificationName:LC_NOTIFICATION_MESSAGE_UPDATED object:conversation];
    }];
}


富媒体消息

在第一版中,我们提供的是一个纯粹的传输层接口,用户可以通过这个接口发送各种格式的消息,比如纯文本或是格式化的消息。这曾经引起了一部分开发者关于其是否可以发送多媒体消息的困惑。在这方面,回答当然是肯定的。第二版中,我们针对这方面的疑惑,增加有补充:一套可扩展的富媒体消息格式。目前我们提供:文本(TextMessage)、图片(ImageMessage)、音频(AudioMessage)、视频(VideoMessage)、位置(LocationMessage)消息。对于图片、音频和视频等二进制消息,我们包装了文件上传等必要步骤,简化开发者的使用步骤。另外针对个性化的需求,开发者还可以在这套消息体系下定义自己特殊的消息类型,满足个性化的需求。

我们此次发布包含所有平台(Android,iOS,WindowsPhone 和 Web)的 SDK,此外还包括 REST API 用于对对话数据进行增删改查、拉取消息记录和发送消息等功能。文档中包含了整套系统中的主要概念和机制,各个平台 SDK 的使用说明等。SDK 现在已经可以在下载页面获取,欢迎大家体验。

「人生苦短,我用 Python」LeanCloud Python SDK 1.0.0 正式发布

以往在服务端环境中基于 LeanCloud 进行开发,只能选择使用 JavaScript-SDK,或者直接使用 RESTful API 来进行开发。现在我们正式发布了 LeanCloud Python SDK,您可以使用 Python 语言来进行项目开发。

目前 LeanCloud Python SDK 只支持 Python 2.x,请确保您的环境满足需求。我们推荐您使用 pip 或者 easy_install 来安装 Python SDK,只要执行:

pip install leancloud-sdk

或者

easy_install leancloud-sdk

即可进行安装。根据您的操作系统环境不同,您可能需要在上述命令之前加上 sudo 。

安装结束后,我们就可以进行开发了。打开 Python 交互式解释器,输入 import leancloud ,就可以进行下一步开发了。接下来我们需要做的是使用 Application Id 与 Application Key 对应用进行初始化:

import leancloud

leancloud.init('your application id', 'your application key')

之后假设我们想实现一个简易的博客系统的话,我们需要有如下两个用于存储的 class:Post, Comment。我们可以直接使用 leancloud.Object.extend 方法来创建 class,或者直接从 leancloud.Object 继承一个子类,这样就可以创建与 LeanCloud 数据存储对应的 Class 了:

import leancloud
from leancloud import Object
from leancloud import LeanCloudError

Post = Object.extend('Post')

# 然后可以直接像一个正常 Python 类一样使用 Post 和 Comment 来创建对象了
my_post = Post(title="Hello LeanBlog!", content="Life is short, use Python!")

# 除了在创建对象的时候进行初始化数据之外,我们还可以使用 set 方法来对对象进行赋值
my_post.set('title', 'First Blog on LeanBlog')

# 我们可以使用 get 方法来获取 Object 对象上的值
my_post.get('content')  # => "Life is short, use Python!"

# 我们可以直接调用 save 方法来将对象保存到 LeanCloud 服务器上(不需要回调函数,吔!)
try:
    my_post.save()
except LeanCloudError:
    do_something_to_handle_error()

同样的方式,我们可以创建一个 Comment 对象,填充数据,并且将一个 Post 作为一对多的关系添加进来:

Comment = Object.extend('Comment')

my_comment = Comment()
my_comment.set('content', 'Hello World!')
my_comment.set('post', my_post)
try:
    my_comment.save()
except LeanCloudError:
    do_something_to_handle_error()

使用 leancloud.Query 可以从 LeanCloud 上查询已经存在的数据:

from leancloud import Query

# 构造一个 Query 对象
query = Query(Post)
# 调用 find 方法,即可获取最多一百条的 Post
posts = query.find()
for post in posts:
    show_post(post)

# 另外我们还可以直接使用字符串来构造 Query 对象
query = Query('Comment')
# 直接根据 id 来查询 Comment
query.get(comment_id)

大概的介绍就到这里,详细文档可以参考这里API doc。您可以使用任意自己喜欢的 Python Web 开发框架来配合 LeanCloud Python SDK 来进行开发。另外 LeanCloud 云代码也即将支持 Python 运行环境,到时候您就可以直接将您的代码部署到我们的服务器上来了。

另外如果您使用上遇到任何问题,可以直接在 github 上开源的仓库中提交 issue,或者在我们的工单系统上反馈问题。

「热潮过后」畅想 Apple Watch 的美好前景

「热潮过后」畅想 Apple Watch 的美好前景
原文:5 Ideas for the Apple Watch
引言:想知道怎么利用 Apple Watch 的先天优势来开发应用,吸引用户,抢占商机吗?快进来寻找灵感,打开思路,为 Apple Watch 生态圈添砖加瓦吧!

001-apple-watch-ideas
我死党娜娜,是个不折不扣的 Apple 粉,苹果一出新品她必须跟随。Apple Watch 发布会当天,深更半夜她发来微信,说自己虽然不觉得这表有啥实用之处,但就凭那好卖相也非入不可。哈哈,看来这位任性的小女子就当它是 iPhone 的贴身丫鬟,除了语音和消息通知这些基本功能以外,就没其他特长了……
这也难怪。Apple Watch 作为新生事物,围绕它的生态圈子还没有形成,其潜质自然难以发挥。想想互联网问世之初,大家也没意识到它会改变历史;智能手机刚步入江湖,也受尽了键盘手机党们的挤兑,才登上了如今的盟主之位。大众认知都要经历一个或长或短的过程。

Apple Watch 身材娇小,咋一看去,貌似没它大哥 iPhone 那么尿性。可事情没有绝对,只要处理得当,劣势也能转化成优势。更何况在我看来,Apple Watch 内部那些传感器绝对可以派上大用场——小到触感式导航,大到拯救生命,它都能拿出独到的解决方案。
下面就跟大家分享一下我看好它的地方,都是些猜想和期待,欢迎大家一起来补充和点评。

触感式导航

先对手表说要去哪儿,确认好路线,出发。
002-apple-watch-ideas-route-1
当接近转弯或方向要改变时,手表会发出脉冲振动。距离越近,振动越频繁。
003-apple-watch-ideas-route-2
马上要拐弯了,如果行进方向正确,手表振动加强。
004-apple-watch-ideas-route-3
转弯后,如果方向正确,手表嗡嗡振动,再以清脆的铃声给出确认。
005-apple-watch-ideas-route-4
如果方向错误,手表小抖一下,发出沉闷的铃声,然后马上重新规划路线。
006-apple-watch-ideas-route-5
在交岔口或前方路段尚不明确的情况下,把手表指向不同的方向,方向若正确,它又会嗡嗡振动。
007-apple-watch-ideas-route-6
我相信这种触觉感应在其他场景中也会非常实用,比如,乘坐拥挤的交通工具时不方便看屏幕或听语音;穿越岔路较多的树林或缺少路标和明显建筑物的开阔空间(包括海面);置身于通道较多的博物馆、图书馆和写字楼,以及对于那些要独立出行的视障人群。

可感知场景的提醒事项

创建一个新提醒,从 iCloud 选择联系人,向他们发出协作邀请。
012-apple-watch-ideas-list-5
应用会为新增的事项加上标签,以便将来在适合的场景中使用。
009-apple-watch-ideas-list-2
当你接近某一位置时,如果该位置出现在提醒列表中,或与任何提醒事项有关联,应用会向你发出通知。
010-apple-watch-ideas-list-3
此时,应用会向所有关注这个列表的人推送通知。
011-apple-watch-ideas-list-4
这样他们能赶在最后一刻告诉你还有什么需要,省得你来回跑腿了。
012-apple-watch-ideas-list-5
目前,iPhone 的「提醒事项」可以跟位置信息绑定,但还不能共享给多人;Wunderlist 支持多人分享,但没有地理位置功能。所以我期望会有一个更强大的应用,能通过 GPS 定位和 Apple Pay 付款记录,分析出我购物和行踪之间的关系模式,这样就可以在正确的地点提醒我做正确的事了。
再进一步说,应用一旦掌握了我的行为模式,那它还可以根据我的购物频率,算出哪些东西又到了该买的时候,适时地给个建议性提醒,那就太帅了!

让音乐随心而动

打开 iTunes,选择一个播放列表或 iTunes 广播,切换到「自由活动」模式。
021-apple-watch-ideas-heart-4
开始运动……
014-apple-watch-ideas-itune-2
当手表侦测到心率加快,便播放节奏更快的音乐。运动幅度越大,心率越快,音乐风格也会越来越劲爆。
015-apple-watch-ideas-itune-3
当这些指标下降时,音乐也会舒缓下来。
016-apple-watch-ideas-itune-4
017-apple-watch-ideas-itune-5
iTunes 还可以把时间、地点、情绪这些因素考虑进去,这样,用不着你刻意选择,懂你的音乐自然飘来。

挽救生命

有意外发生,伤者疑似没了心跳……
018-apple-watch-ideas-heart-1
电话求援后,下一步要检查伤者是否还有脉搏。
019-apple-watch-ideas-heart-2
如果不好判断,摘下手表,将手表心率监测仪的部位顶在伤者的手腕上。
020-apple-watch-ideas-heart-3
开始监测。如果仍然没有脉搏,自己重新带上表,然后从菜单中选择与伤者匹配的一项:婴儿、儿童或成人。
021-apple-watch-ideas-heart-4
按手表的振动频率,按压伤者胸部。
022-apple-watch-ideas-heart-5
有数据表明,88% 的突发性心脏骤停病例都发生在家里,而发病前病人并无明显征兆。对于这种病情,实施胸外按压式心肺复苏术(CPR)已被证实与实施口对口人工呼吸方式的 CPR 一样有效。
但是,70% 的人在危机发生时不知如何对伤者或病人进行正确施救,而且胸外按压还要讲究频率,成人和儿童的频率不同,如果有了手表的指导,问题就迎刃而解了。这时手表还有一个优势,就是让施救者双手都能腾出来做重要的事。

找人

在公园或公共场所,不小心与家人走散。先从 iCloud 上找到他们的名字。
023-apple-watch-ideas-lost-1
开始发送呼叫信号……
024-apple-watch-ideas-lost-2
当彼此距离越近,双方手表振动得越快。
025-apple-watch-ideas-lost-3
以上就是我的大致想法。配了插图,希望有助于理解。

好了,亲爱的读者们,最后我想说 Apple Watch 火不火,要你们说了算。你们的创意、才华和技术,会给 Apple Watch 高冷的外表赋予充满人性的内涵。

你们,将改变不远的未来!其他人,只能先翘首期盼了。

「晨读推荐」《Swaag for iPhone redesign》等

晨读推荐3

关于「晨读推荐」

由 LeanCloud 的工程师和设计师,以周为单位进行阅读分享,包含每位工程师和设计师想加入自己读到的「有价值、有趣味、有分享意义」的文章以及推荐理由。

技术向 Geek Must Read

《扫盲 HTTPS 和 SSL/TLS 协议 1:背景知识、协议的需求、设计的难点》
LeanCloud 导读:
通俗地介绍 HTTPS 和 SSL/TLS 的 「设计思路」、「实现原理」,以及 「针对 HTTPS 的攻击手法」 和 「相关的安全防范措施」。

工具向 The Best Tools

《PH 产品快报 | 送礼神器 Spark Gift,用股票基金鉴定诚意》
LeanCloud 导读:
PH 快报是 Product X 项目下的一个媒体专栏,由一群产品爱好者自发编译来自 Producthunt 榜单上的产品,每日更新, 这一期也同样推荐了很多非常有意思的新产品,无论是用于自己的个人生活还是产品研究,都有很好的参考价值。

设计向 Design More, Design Better

《Swaag for iPhone redesign》
LeanCloud 导读:
Swaag 是一款老牌的照片分享应用,它主打为照片加标签和对比 PK 的功能,为照片增加了品牌、文字属性。国内同样有不少模仿者,该文重新对 Swaag 进行了模块调整,还加入了一些新的交互设计元素,很值得参考,另外值得一提的是,本文来自 Medium 的热门专栏「Weekly Design Challenge」

新知向 Ren chou jiu yao duo du shu

《如何自己动手实现 KVO》
LeanCloud 导读:
本文是 Objective-C Runtime 系列文章的第三篇。如果你对 Objective-C Runtime 还不是很了解,可以先去看看前两篇文章。本篇会探究 KVO (Key-Value Observing) 实现机制,并去实践一番 – 利用 Runtime 自己动手去实现 KVO 。BTW:如果您想面试 LeanCloud 热招的 iOS 工程师一职,推介阅读该系列文章。

「晨读推荐」《移动前端不得不了解的 HTML5 head 头标签》等

晨读推荐2

关于「晨读推荐」

由 LeanCloud 的工程师和设计师,以周为单位进行阅读分享,包含每位工程师和设计师想加入自己读到的「有价值、有趣味、有分享意义」的文章以及推荐理由。

技术向 Geek Must Read

《.NET 编译平台 (Roslyn) 概述》
LeanCloud 导读:
微软新任 CEO 带来了不同的战略方向,将微软核心技术框架 .NET 的诸多组件变为开源项目,其中编译器 Roslyn 终于揭开了神秘面纱。它的开源,为 C# 项目向 OS X/Linux 上移植提供了自定义编译器的物理级别的支持。本文介绍了 Roslyn 的层次设计、API 设计和语法树等诸多细节,推荐阅读。

工具向 The Best Tools

《An Introduction To Scala Parser Combinators》
LeanCloud 导读:
这篇文章介绍了如何用 Scala 内置的 API 来实现一个 Parser,篇幅适中,推荐给那些有需求的同学。

设计向 Design More, Design Better

《移动前端不得不了解的 HTML5 head 头标签》
LeanCloud 导读:
有人把 HTML5 中用到的 meta 信息全部整理了一遍,非常细心的收集工作,方便每一位开发 HTML5 移动端页面的人。

新知向 Ren chou jiu yao duo du shu

《Android 5.1 Lollipop SDK》
LeanCloud 导读:
Android 本周刚刚更新了 Lollipop 的小版本,虽然改动不大,但作为 Android 开发者,这是一定要关注的动态。本文来自官博,介绍了 Android 5.1 的新特性以及 SDK 的新 API。