月度归档: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,或者在我们的 工单系统 上反馈问题。