谷歌整体战略:关于人工智能、云服务和登月计划的未来

CB Insights 今日发布了一篇关于谷歌业务战略的深度分析报告: Google Strategy Teardown: Betting The Future On AI, Cloud Services, And (Tamed) Moonshots,盘点了谷歌在人工智能、云服务、虚拟现实/增强现实、电信与能源、运输与物流、硬件和服务平台等众多领域的业务和战略。其中人工智能是贯穿谷歌所有方面的创新的线索。

自 1998 年谷歌在加利福尼亚州门洛帕克的一间车库变成一家公司以来,它已经发展成为了后 .com 时代企业创新的火炬手。谷歌对长远创新的亲睐体现在多个方面——从其广为人知的员工可用于个人项目的「20% 个人时间」政策(这个政策导致了 Gmail 和 AdSense 的诞生),到其在 2009 年成立的准独立的风险资本部分 Google Ventures,再到其面向未来创新的「登月计划」的 Google X 创新实验室(已改称 X)。

但是,近些年来,该公司已经开始转变其实验性的方法、有风险的研发和分散式的公司结构了。

在 2011 年执掌谷歌后,CEO Larry Page(现为 Alphabet 的领导者)就宣布谷歌将在「更少的箭头后放更多木材」,要向更重要的方向投入更多资源:从民主化的自下而上的创新方法变成更为自上而下的重点式战略。

实际上,据报道「20% 个人时间」政策在近些年来已经受到了限制,需要更多的管理批准和监督。

与此同时,谷歌已经从核心的搜索和广告业务扩展到了更为广阔的业务领域,其涵盖了从消费硬件到汽车到电信到医疗到风险投资等众多领域。

深入了解Android Studio和Gradle

原文链接: 重新认识AndroidStudio和Gradle,这些都是我们应该知道的 — by 井方哥

前言

主要从AndroidStudio的环境安装升级,Gradle,Eclipse转AS,多渠道配置,Maven私服,Action,Option,快捷键等几个方面出发,讲一些操作技巧以及我对AndroidStudio使用的一些理解与经验。本文较全面的讲述了我们在开发中必须要了解的,比较多而全,可能不能马上记住,目的在于大家看我之后能有一个认识,在需要使用的时候知道有这么个东西。希望对你的开发工作有所帮助,不足之处,请批评指正。

一、Install&Settings&Update

1、Gradle

Gradle官方会不断更新,我们可以使用本地安装的方式,并配置path,我们就可以使用Terminal直接输入gradle命令执行构建任务。当然如果我们想快速更新,可以修改配置文件。 首先,修改project\gradle\warpper\gradle-wapper.properties 文件,其中distributionUrl的值:

1
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

这里实际是从网络下载配置的版本,会自动检测,如果不是的就会下载。

然后修改 project的build.gradle

1
2
3
4
5
6
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

Chrome自带的开发者工具进阶技巧

原文链接: Things you probably didn’t know you could do with Chrome’s Developer Console
作者:Swagat Kumar Swain

Chrome自带开发者工具。它的功能十分丰富,包括元素、网络、安全等等。今天我们主要介绍JavaScript控制台部分的功能。

我最早写代码的时候,也就是在JS控制台里输出一些服务器返回的内容,或者一些变量的值。但是后来通过一些深入的学习和了解,我发现Chrome的JS控制台原来还有这么多神奇的功能。

在这里我总结了一些特别有用的功能。要是你凑巧在Chrome里浏览这篇文章的话,现在就打开开发者工具,跟着随手试试吧!

1.选取DOM元素

要是你用过两天jQuery的话,一定对 $('.className') 或者 $('#id') 这种选择器不会陌生。上面这俩货分别是jQuery的类选择器ID选择器

在一个网页没有引入jQuery的情况下,在控制台里你也可以通过类似的方法选取DOM.

不管 $('tagName') $('.class') $('#id') 还是 $('.class #id') 等类似的选择器,都相当于原生JS的document.querySelector('') 方法。这个方法返回第一个匹配选择规则的DOM元素。

在Chrome的控制台里,你可以通过 $$('tagName') 或者 $$('.className') 记得是两个\$\$符号来选择所有匹配规则的DOM元素。选择返回的结果是一个数组,可以通过数组的方法来访问其中的单个元素。

举个栗子 $$('className') 会返回给你所有包含 className 类属性的元素,之后你可以通过 $$('className')[0]$$('className')[1] 来访问其中的某个元素。

【Android】抽象布局 — include、merge 、ViewStub

在布局优化中,Androi的官方提到了这三种布局<include/><merge /><ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。

一、布局重用<include/>

<include />标签能够重用布局文件,简单的使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
android:orientation="vertical"
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:background="@color/app_bg"
android:gravity="center_horizontal">

<include layout="@layout/titlebar"/>

<TextView android:layout_width=”match_parent”
android:layout_height="wrap_content"
android:text="@string/hello"
android:padding="10dp" />

</LinearLayout>

【Java】设计模式:深入理解单例模式

什么是设计模式?简单的理解就是前人留下来的一些经验总结而已,然后把这些经验起了个名字叫Design Pattern,翻译过来就是设计模式,通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更优雅。设计模式理论上有23种,今天就先来分享下最常用的单例模式。

引言

对于单例模式,有工作经验的人基本上都使用过。面试的时候提到设计模式基本上都会提到单例模式,但是很多人对单例模式也是一知半解,当然也包括我哈哈哈=_=。所以我们有必要深入理解一下所谓的「单例模式」。

单例模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式结构图:

使用单例的优点:

  • 单例类只有一个实例
  • 共享资源,全局使用
  • 节省创建时间,提高性能

【Go语言】基本类型排序和 slice 排序

Go 是通过 sort 包提供排序和搜索,因为 Go 暂时不支持泛型(将来也不好说支不支持),所以,Go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。

引言

Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。

排序(接口)的三个要素:

  • 待排序元素个数 n ;
  • 第 i 和第 j 个元素的比较函数 cmp ;
  • 第 i 和 第 j 个元素的交换 swap ;

乍一看条件 3 是多余的, c 和 c++ 都不提供 swap 。 c 的 qsort 的用法: qsort(data, n, sizeof(int), cmp_int); data 是起始地址, n 是元素个数, sizeof(int) 是每个元素的大小, cmp_int 是一个比较两个 int 的函数。

c++ 的 sort 的用法: sort(data, data+n, cmp_int); data 是第一个元素的位置, data+n 是最后一个元素的下一个位置, cmp_int 是比较函数。

【Android 】TextView 局部文字变色

TextView 对于富文本效果的实现支持不支持呢?比如“局部文字颜色的变动”,“局部字体的变动”

一、需求效果

比如这个

二、解决方案

针对这类问题,Android提供了 SpannableStringBuilder,方便我们自定义富文本的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
textView = (TextView) findViewById(R.id.textview);
SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString());

//ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色
ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);
ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE);
ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE);
ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN);
ForegroundColorSpan yellowSpan = new ForegroundColorSpan(Color.YELLOW);


builder.setSpan(redSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(whiteSpan, 1, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
builder.setSpan(blueSpan, 2, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(greenSpan, 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(yellowSpan, 4,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(builder);

【Android】获取View的截图

引言

在Android应用开发过程中,可能会遇到需要对整个界面或者某一部分进行截图的需求。

Android中对View的截图也有以下两种方式,值得注意的是两个方法都不适用于SurfaceView

使用DrawingCache

如果使用DrawingCache,则对要截图的View有一个要求:View本身已经显示在界面上。如果View没有添加到界面上或者没有显示(绘制)过,则buildDrawingCache会失败。这种方式比较适合对应用界面或者某一部分的截图。步骤很简单:

1
2
3
4
5
6
view.setDrawingCacheEnabled(true);  
view.buildDrawingCache(); //启用DrawingCache并创建位图

//创建一个DrawingCache的拷贝,因为DrawingCache得到的位图在禁用后会被回收
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false); //禁用DrawingCahce否则会影响性能

【Android】如何加速 AndroidStudio 的编译效率

引言

如果你之前用eclipse开发过Android app的话,转到android studio的第一反应也许就是:”编译速度有点慢“,表现的最明显的一点就是,每次android studio使用gradle编译,即便是更改的代码量很少,也会按照预先设置的task的顺序,依次走完编译的各项流程。这时候如果电脑CPU配置不高的时候,就会超级卡界面,更别说改代码了。

所以 这点就让人很痛苦, 然而问题总还是要被解决的,作者曾经亲眼看到过使用android studio仅仅用了2.5秒就编译完毕(在代码更改很少的情况下)。 现在把如何优化gradle编译速度的方法记录在此,希望可以 帮助到广大的同行们。

准备工作

首先,保证项目使用的Gradle是最新的,我这里用的是2.10版本。因为Gradle 2.4之后在编译效率上面有了一个非常大的提高,看下图官方的速度对比。

这是官方的速度对比,下一代编译速度更快


Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :