我对Retrofit的认识

Retrofit的想的文章很多,先罗列下 我在看过觉得不错的几篇文章:

这两篇文章都是stay写的,觉得真心赞。当然我也不重复他文章里面的内容了,读者们完全可以直接看他的文章。当然我写这篇文章,主要想自我总结下,谈谈自己的认识而已。

首先Retrofit之所以这么火。我觉得他里面设计模式用的好,特别是适配器模式那里。总体来说,我觉得Retrofit精髓就在三点。1、动态代理,用注解来生成请求参数;2、适配器模式的应用,请求返回各种CallAdapter,可扩展到RxJava、Java8,还有任何你自己写的Adapter;3、Converter,你可以把请求的响应用各种Converter转成你的需求上。>

我看Google I/O 2016

终于为了给自己充值信仰,从1点坚持到3点,看完了所有的Google I/O Keynote。还是没有让我失望,其中不乏一些能让我高潮的技术和产品。

Google Assistant

Google Now的改进版,利用各种人工智能、机器学习的技术,你可以向它提问任何问题。从Keynote上的演示来看,你无须先给出你提问的场景,它会自动感知你的提问场景。比如:当你站在一个著名的建筑物面前,你可以直接问他谁设计的这个建筑,你无须给他这个建筑物的名字,他就能给你答案。你也可以理解他就是一个Siri或者一个微软小冰。但是背靠强大的搜索引擎,我觉得Google Assistant能给出给精准,你最需要的答案。不单单仅仅的一问一答得形式,你可以通过Google Assistant完成从『近期上映电影』->『电影预告片』->『电影评价』->『预定电影票』->『导航电影院』这样事件过程。让你感受他就是一个贴身的助手。

谈谈对RxJava的认识

RxJava以及扩展的RxAndroid已经越来越火热了,于是我也便在最近的项目中试水了下。当然这方面的文章也有不少了,最为著名的就是朱凯写的 『给 Android 开发者的 RxJava 详解』, 还有就是 Android开发前的RxJava系列文章。我也是从这两篇文章中学习,并在实践中运用,然后得到一点自己的理解。在我理解看来RxAndroid主要有两个部分,一个是其观察者模式,一个是其调度器部分。

首先要在项目中使用RxAndroid,需要现在build.gradle中引入依赖

1
2
compile 'io.reactivex:rxjava:1.0.14' 
compile 'io.reactivex:rxandroid:1.0.1'

一、Observable与Observer

RxJava也是用的观察者模式,观察者模式简单的的说来就是观察者和被观察者之间预先建立一种订阅的管理,然后在被观察者发生变化的时候,通知观察者自己发生变化了。Observable 名为 可观察的,就是这里的被观察者,Observer 就是这里的观察者。

Android相册选取、拍照上传遇到的坑

以前项目中的Imagview加载图片,经常会使用图片加载框架:比如 Picasso,Facebook的Fresco以及Universal Image Loader,从没有关心过OOM的问题,因为框架已经替我们考虑到了。今天在做相册选取、拍照上传的需求,才真切让我感觉了一波坑。

一、相册选取

现在的手机像素高,随便拍一张照片都是2M左右,差不多都是4000 2000左右的图。卧槽,你知道这些图decode成Bitmap会占用多少内存。 比如这张:图片的真实大小是1.23M,3264 1836,decode成Bitmap,一个像素4byte,所以加载到内存中的Bitmap约占用23MB的内存啊。

有些可能一上来,decode大的Bitmap,就直接OOM了。

可以试试:在AndroidManifes.xml加上

1
2
3
<application
android:largeHeap="true"
.../>

刚开始时,因为没有注意,没有及时回收Bitmap,还直接 ImageView.setBitmap(bmp),加上一些性需要上传4张图片。所以传到第二张图就OOM了。

Hadoop贝叶斯文本分类器

这篇文章是我这学期在学校的Hadoop课程的课程报告。包括训练数据集、测试数据集都是老师给的,在老师的要求下完成的基于Hadoop实现的贝叶斯文本分类器。

一、贝叶斯分类器原理介绍

根据贝叶斯公式,后验概率


但在比较不同C值的后验概率时,他们分母P(X)总是常数,忽略掉,后验概率P(C|X)=P(X|C)P( C),先验概率P( C)可以通过计算训练集中属于每一个类的训练样本所占的比例,容易估计,对类条件概率P(X|C)的估计,这里我只说朴素贝叶斯分类器方法,因为朴素贝叶斯假设事物属性之间相互条件独立,


在本实验中,贝叶斯分类器应用在文本分类的问题上。这里的问题就可以描述成:设训练样本数据集分类m类,记为 C={C1,C2,C3…Cm},对于先验概率P(Cj)就是Cj类发生的概率。

对于任意一个文档 Di=(W1,W2,W3,…W|V|),包含V中特征词,其类条件概率


Fuck 2015,Hello 2016

这段时间看到很多朋友分享了自己的“年终总结”,另外秋百万还在GitHub开了这样一个项目,https://github.com/winter-fall/Bye2015Hi2016 技术人就是这样玩GitHub的😂。提交issue,写你的年终总结。

FUCK2015

实习

这一年里,听得太多的就是『实习』。『你还没毕业啊,那你可以来我们这里实习』,没毕业去干活就只能叫『实习』,而且一般稍大点的公司都是有制度的,给实习生的待遇都是不会太高,此处FUCK。

于是昌伟叫我去上海,一个创业公司,他居然是CTO,卧槽,可以想象多不靠谱。哈哈!当时没想太多,就去了。主要是早就决定下半年去上研究生,没有太多压力;还有就是比之前那些给的高些。去就去呗,谁怕谁。

去了之后,别的不说,氛围倒是挺轻松的,工作自然挺愉快,后来陆陆续续招了不少小伙伴,人渐渐多了,也都很逗比,相处得还合得来,没事互黑互黑。工作上任务也不重,基本不加班,到点就走人,不然就留公司来局游戏。偶尔发版的时候,就会忙一点。我在的时候,总共发了3个版本。

将博客从WordPress迁移到Hexo

大概半年前,把博客从SAE迁到Wordpress上,当时以为是SAE比较慢才体验差,所以打算迁到独立主机上会改善点,事实并不然。其实还是Wordpress太重了,每次打开Wordpress的后台都很慢,然后去新建一个文章,然后在一个富文本编辑框中编辑,还需要经常插入图片、代码啊,体验都很差。究其原因还是Wordpress太重了。写博客就应该在一个简简单单的编辑器中写,所以我选择了Hexo。为什么选择的是Hexo,不是jekyll,octopress,它们的区别好坏这里我就不多说了。总之各有所爱,我选择Hexo主要因为轻量级。

安装

因为Hexo是基于Node.js开发的,所以必不可少你需要安装Node.js的环境。还需要Git,因为部署其实就是基于Git的。这两个不多说了,不会的话,网上一大堆。

使用npm安装Hexo

1
npm install -g hexo-cli

这样就安装好了Hexo,简单吧~~

图解View的事件分发机制

在自定义视图的时候经常会遇到复杂的事件分发和消耗的问题。最近也经常写自定义组件的代码,做一些事件处理,花时间整理了下知识点。本文采用示意图的形式生动地讲解Android中View得事件分发机制。

谈到View的事件传递,主要就是在dispatchTouchEvent,onTouchEvent,onInterceptTouchEvent等几个生命周期函数。我写了这样一个demo,也就是在这些生命周期函数里打印出日志,然后加以分析。

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<RelativeLayout xmlns:android="http://schemas.android.com/apk<code/res/android">
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<info.fangjie.viewevent.CustomViewGroup
android:layout_width="fill_parent"
android:background="#00ff00"
android:id="@+id/custom_group"
android:layout_height="260dp">

<info.fangjie.viewevent.CustomView
android:layout_marginTop="30dp"
android:layout_width="200dp"
android:id="@+id/custom_btn"
android:background="#ff0000"
android:layout_centerHorizontal="true"
android:layout_height="200dp" />

</info.fangjie.viewevent.CustomViewGroup>
</RelativeLayout>

分享我的科学上网方案

最近科学上网服务商曲径被关闭了,另外土行好些也被搞了,之前用的vpnso也不稳定。感觉gfw越来越高了,翻墙的难度也越来越大了,成本也越来越高了。于是,便决定自己搭建科学上网服务。

声明:科学上网方案只为方便大家更好的使用网络资源,切勿做任何非法操作。

更新 @15-11-28

iOS 翻墙方案
在iOS上从未见过如此酸爽的翻墙神器–Surge Web,软件作者本意是用来做Web调试用的,用来当做shadowsocks客户端翻墙用是一个潜在的功能。App Store 69元,不过作者好像也被约喝茶了,好像1.1.1版本发布之后要被下架。要买赶紧买,不然买不到了。

这里就不说软件怎么配置了。自己去搜,网上一大堆~~

Android Tv应用开发体验

这两天为公司的产品做Tv版适配,以前只是以为Tv版应用和Pad版本应用一样,只是做下简单的屏幕适配就可以,实践了下,除了屏幕适配,还有焦点的处理和手势操作,以及有些区别。

1.屏幕适配
先看看主流的Tv及Tv盒子的设备参数:

  • MiBox:1280*720
  • MiTv1:1920*1080
  • MiTv2:4096×2160(4K)

(1)按照手机屏幕的处理的话,我们会计算出对应设备的屏幕密度值(dp),这里会发现问题,电视的尺寸在50inch左右,算出来的dp值在50dp左右,很明显Tv就不是这样算的。当我在新建模拟器的时候,就发现了对应的dp。