写在前面
最近在和小伙伴一起创业,涉及到了公众号的开发和web服务器的部署操作,爬了不少的坑,总算是把Flask web应用顺利部署到了京东云的云服务器上。
我采用的部署方案是:
- Web 服务器采用 uwsgi host Flask
- 用 Supervisor 引用 uwsgi 作常规启动服务
- 基于 Nginx 作反向代理
最近在和小伙伴一起创业,涉及到了公众号的开发和web服务器的部署操作,爬了不少的坑,总算是把Flask web应用顺利部署到了京东云的云服务器上。
我采用的部署方案是:
今天android studio 3.0正式版正式发布了,第一时间下载了3.0试用。用了半天,3.0什么都好,就是方法默认增加了显示参数名,看着实在眼花。
关闭的方法很简单,只需要将鼠标光标移动到提示处,右键便会有选项卡出来关闭。如下图所示,:
前段时间薅羊毛了腾讯云的羊毛,花了360软妹纸买了6年的云服务。。。
打算把以前托管在github上的hexo部署到个人云服务器。折腾了良久,便有了以下的文章。
yum install gcc-c++ make |
验证:
node -v |
最近公司打算重构已有项目,打算把项目插件化处理,网上找了很多资料,发现滴滴公司的VirtualApk符合我们的业务需求。
本文主要讲解构建宿主工程和插件工程中遇到的各种问题。
请至少添加一个宿主工程或其它插件所没有的资源文件,随意一张图片都可以
参考地址
现在APT技术已经越来越成熟了,说到APT技术肯定离不开AbstractProcessor。但是AbstractProcessor的处理是在编译层实现的,而在开发中我们往往需要debug断点调试代码;本篇文章主要介绍了如何使用AndroidStudio来进行debug调试
org.gradle.daemon=true |
gradlew --daemon |
最近在给我的开源下载框架Aria增加FTP断点续传下载和上传功能,在此过程中,爬了FTP的不少坑,终于将功能实现了,在此把一些核心功能点记录下载。
FTP和传统的HTTP协议有所不同,由于FTP没有所谓的头文件,因此我们不能像HTTP那样通过设置header向服务器指定下载区间。
但是FTP协议提供了一个更好用的命令REST
用于从指定位置恢复任务,同时FTP协议也提供了一个命令SIZE
用于获取下载的文件大小,有了这两个命令,FTP断点续传也就没有什么问题。
FTP断点续传的原理和HTTP的断点续传原理差不多,在暂停时记录文件的停止位置,再次下载时,先读取记录的位置,如果位置存在,则通过REST
命令告诉服务器从指定区间进行下载。
本文主要介绍开源项目Aria的使用。
Aria项目源于15年工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。
以下为Aria的使用示例,使用Aria开发图片中的所有功能,只需要很短的时间,很少的代码。
最近因项目需求,需要在滚动列表中播放视频。查了半天资料,发现其实现没有想象中的那么难。
众所周知,由于SurfaceView没有UI同步缓冲区,就导致了在列表滚动的时候,正在播放的视频跟不上滚动的步伐;而在SDK 15的时候,谷歌官方提供了新的具有UI同步缓存的视频播放api TextureView。
本文真是基于该新Api实现。
最近在为河北电信做定制游戏平台开发的时候,遇到了一个很奇怪的问题,在某些盒子上,从平台打开某些游戏,玩上几分钟,然后该退出游戏,回到公司的游戏平台后,便出现了页面数据丢失的问题。
排查了几天(在这不得不吐槽电信的官僚主义,好话说尽,给予各种承诺,依然不提供可以进行adb调试的测试盒子)。最终发现是由于盒子内存太小(几年前的标准,1G内存!!!),当运行大型游戏后,盒子系统自动kill了公司的游戏平台,吐血啊。
该问题如下图所示:
从去年开始,从事Android TV开发已经大半年了,期间遇到过各种各样的坑,最严重、最难解决的莫过于焦点问题。痛定思痛,决定把TV开发中遇到的各种坑一一分享出来,让更多的人不再爬我所爬过的坑。
在TV开发中,VerticalGridView是谷歌专门为Android TV适配的RecyclerView,VerticalGridView很好的解决了列表的焦点问题,但是如果使用不当,很容易出现item子项焦点错乱问题。
在TV开发中尽量尽可能不适用没有优化过的RecyclerView!!!!!
进入列表界面,我希望的是按上下左右按键,item将能取得焦点,实现放大效果,但是我的实际效果如图所示,按上下键,变成了列表上下滚动,而不是我希望实现的item放大。
在开发中,总会遇到UI妹妹不标识颜色的情况,有时,找她们备注颜色,总会被骂个狗血淋头(说多了都是泪),求人不如求己。
colorcop是一款window下取色软件,在本人使用过的10多款软件中,在简洁易用性方面简直秒杀所有!
软件截图:
其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下载。
断点:线程停止的位置。
续传:从停止的位置重新下载。
用代码解析就是:
断点 : 当前线程已经下载完成的数据长度。
续传 : 向服务器请求上次线程停止位置之后的数据。
原理知道了,功能实现起来也简单。每当线程停止时就把已下载的数据长度写入记录文件,当重新下载时,从记录文件读取已经下载了的长度。而这个长度就是所需要的断点。
续传的实现也简单,可以通过设置网络请求参数,请求服务器从指定的位置开始读取数据。
而要实现这两个功能只需要使用到httpURLconnection里面的setRequestProperty方法便可以实现.
public void setRequestProperty(String field, String newValue) |
如下所示,便是向服务器请求500-1000之间的500个byte:
conn.setRequestProperty("Range", "bytes=" + 500 + "-" + 1000); |
以上只是续传的一部分需求,当我们获取到下载数据时,还需要将数据写入文件,而普通发File对象并不提供从指定位置写入数据的功能,这个时候,就需要使用到RandomAccessFile来实现从指定位置给文件写入数据的功能。
public void seek(long offset) |
如下所示,便是从文件的的第100个byte后开始写入数据。
raFile.seek(100); |
而开始写入数据时还需要用到RandomAccessFile里面的另外一个方法
public void write(byte[] buffer, int byteOffset, int byteCount) |
该方法的使用和OutputStream的write的使用一模一样…
以上便是断点续传的原理。
前段时间萌发自己搭建博客的念头,冲动之下买了个云服务器,奈何个人对html的东西实在不通,折腾了几天,blog依然丑的可以。后来无意间看见在github上可以搭建个人blog,就用谷歌折腾该如何在github上搭建blog,奈何网上很多教程都过于古老,或者很多细节都含糊不清,导致爬了好几天几天坑,才把blog搭建了起来。
Fragment 是android开发中最常用的组件之一,用了好几年,我都不知道Fragment到底是个什么东西,Activity加载Fragment的原理是怎样的,为什么官方会叫它为碎片?直到前段时间因为工作需要,从头看来一遍Fragment的源代码,然后就有了本文。
本文将从commit开始一步步带你走向Fragmnt的生命周期!!