Android Studio 2.3调试小米手机安装失败

Android Studio 2.3调试小米手机MIUI 8.7.4的时候,安装APK一直失败,错误信息如下:

$ adb install-multiple -r /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_7.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_6.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_8.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_9.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_3.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_4.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/dep/dependencies.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_2.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_5.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_0.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_1.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/outputs/apk/app-debug.apk 
$ adb shell pm uninstall com.guo.duoduo.anyshareofandroid
$ adb install-multiple -r /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_7.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_6.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_8.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_9.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_3.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_4.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/dep/dependencies.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_2.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_5.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_0.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_1.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/outputs/apk/app-debug.apk 
$ adb shell pm uninstall com.guo.duoduo.anyshareofandroid
DELETE_FAILED_INTERNAL_ERROR
Error while Installing APKs

网上查询了一下,是MIUI自身的优化导致的问题。
解决方法就是在MIUI->设置->更多设置->开发者选项->启用MIUI优化,关闭这个选项就可以了。

参考链接


Android Studio 2.3 adb install-multiple Failed to create session Failure [UNS...

Python 2.7 基于twisted实现简单的web服务器

Python 2.7自带的SimpleHTTPServer默认是HTTP/1.0,导致在投放简单的视频的时候,一般是无法通过FFMPEG进行播放的,主要是HTTP/1.0不支持Content-Range导致无法快进以及视频的Seek操作。并且比较悲剧的是,如该修改成HTTP/1.1协议,默认只有一个连接在处理,导致只要第一个用户不断开,第二个连接基本上连接不上。

网上搜索了以下,找到了用twisted代码来实现比较简单,并且性能还不错的服务器。

本文实例讲述了Python基于twisted实现简单的web服务器,分享给大家供大家参考。具体方法如下:
1.首先是通过PIP安装twisted

$ sudo pip install twisted

2. 新建htm文件夹,在这个文件夹中放入显示的网页文件

3. 在htm文件夹的同级目录下,建立web.py,代码如下:

from twisted.web.resource import Resource 
from twisted.web import server 
from twisted.web import static 
from twisted.internet import reactor 
  
PORT = 1234
  
######################################################################## 
class ReStructed(Resource): 
  """"""
  
  #---------------------------------------------------------------------- 
  def __init__(self, filename, *a): 
    """Constructor"""
    self.rst = open(filename).read() 
  def render(self, request): 
    return self.rst 
    
resource = static.File('htm/') 
resource.processors = {'.html':ReStructed} 
resource.indexNames = ['index.html'] 
  
reactor.listenTCP(PORT, server.Site(resource)) 
reactor.run()

执行脚本

$ python web.py

然后浏览器访问:http://127.0.0.1:1234/就可以看到内容了。

参考链接


Python基于twisted实现简单的web服务器

禁止Chrome的页面缓存

Chrome总是缓存页面,Internet Explorer,FireFox,Opera都提供了自己方式可以关掉缓存,实在不行在HTTP头中加上 "Cache-Control"为"no-cache",可是顽固的Chrome无效,依旧自动缓存。现在新版的ChromeDeveloper ToolsF12调出来)的Network标签中有了个Disable cache选项,可以解决这类问题。

如下图:

参考链接


ubuntu 16.04 LTS使用开源面部识别库Openface

Openface是一个基于深度神经网络的开源人脸识别系统。该系统基于谷歌的文章FaceNet: A Unified Embedding for Face Recognition and ClusteringOpenface是卡内基梅隆大学的Brandon Amos主导的。

1.准备系统环境

如果是服务器版本的ubuntu,可能默认Python都没有安装

#如果没有安装python的话,执行最小安装命令即可,目前我们需要的是Python2
$ sudo apt-get install python-minimal
$ sudo apt-get install python-pip
$ sudo pip install --upgrade pip

#如果没有安装git的话,此处需要手工安装
$ sudo apt-get install git

#编译dlib时候需要
$ sudo apt-get install cmake
$ sudo apt-get install libboost-dev
$ sudo apt-get install libboost-python-dev
2.下载代码
$ git clone https://github.com/cmusatyalab/openface.git
3.安装opencv
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv
4.安装依赖的python
$ cd openface
$ pip install -r requirements.txt
$ sudo pip install dlib
$ sudo pip install matplotlib
5.安装Torch7

参考链接 ubuntu 16.04 LTS上安装Torch7

编译完成后,路径变量被加入了.bashrc,我们需要刷新一下Shell的环境变量

# 使 torch7 设置的刚刚的环境变量生效
source ~/.bashrc
6.安装依赖的lua
$ luarocks install dpnn

#下面的为选装,有些函数或方法可能会用到
$ luarocks install image
$ luarocks install nn
$ luarocks install graphicsmagick
$ luarocks install torchx
$ luarocks install csvigo
7.编译代码
$ python setup.py build
$ sudo python setup.py install
8.下载预训练后的数据
$ sh models/get-models.sh
#参考 https://cmusatyalab.github.io/openface/models-and-accuracies/ 下载对应的模型
$ wget https://storage.cmusatyalab.org/openface-models/nn4.v1.t7 -O models/openface/nn4.v1.t7
9.执行测试Demo

执行的脚本face_detect.py代码如下:

#!/usr/bin/env python2

import argparse
import cv2
import os
import dlib

import numpy as np
np.set_printoptions(precision=2)
import openface

from matplotlib import cm

fileDir = os.path.dirname(os.path.realpath(__file__))
modelDir = os.path.join(fileDir, '..', 'models')
dlibModelDir = os.path.join(modelDir, 'dlib')

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--dlibFacePredictor',
        type=str,
        help="Path to dlib's face predictor.",
        default=os.path.join(
            dlibModelDir,
            "shape_predictor_68_face_landmarks.dat"))
    parser.add_argument(
        '--networkModel',
        type=str,
        help="Path to Torch network model.",
        default='models/openface/nn4.v1.t7')
    # Download model from:
    # https://storage.cmusatyalab.org/openface-models/nn4.v1.t7
    parser.add_argument('--imgDim', type=int,
                        help="Default image dimension.", default=96)
    # parser.add_argument('--width', type=int, default=640)
    # parser.add_argument('--height', type=int, default=480)
    parser.add_argument('--width', type=int, default=1280)
    parser.add_argument('--height', type=int, default=800)
    parser.add_argument('--scale', type=int, default=1.0)
    parser.add_argument('--cuda', action='store_true')
    parser.add_argument('--image', type=str,help='Path of image to recognition')

    args = parser.parse_args()
    if (None == args.image) or (not os.path.exists(args.image)):
	print '--image not set or image file not exists'
	exit()

    align = openface.AlignDlib(args.dlibFacePredictor)
    net = openface.TorchNeuralNet(
        args.networkModel,
        imgDim=args.imgDim,
        cuda=args.cuda)

    cv2.namedWindow('video', cv2.WINDOW_NORMAL)

    frame = cv2.imread(args.image)  
    bbs = align.getAllFaceBoundingBoxes(frame)
    for i, bb in enumerate(bbs):
	# landmarkIndices set  "https://cmusatyalab.github.io/openface/models-and-accuracies/"
        alignedFace = align.align(96, frame, bb,
                                      landmarkIndices=openface.AlignDlib.OUTER_EYES_AND_NOSE)
        rep = net.forward(alignedFace)

        center = bb.center()
        centerI = 0.7 * center.x * center.y / \
                (args.scale * args.scale * args.width * args.height)
        color_np = cm.Set1(centerI)
        color_cv = list(np.multiply(color_np[:3], 255))

        bl = (int(bb.left() / args.scale), int(bb.bottom() / args.scale))
        tr = (int(bb.right() / args.scale), int(bb.top() / args.scale))
        cv2.rectangle(frame, bl, tr, color=color_cv, thickness=3)

    cv2.imshow('video', frame)

    cv2.waitKey (0)  

    cv2.destroyAllWindows()

Shell中如下执行代码:

$ python demos/face_detect.py --image=xx.jpeg

识别完成后会弹出识别到的面部图片。

macOS Sierra (10.12.4)下使用Android Studio打开Android Virtual Device Manager报告“/dev/kvm is not found”错误

Android Virtual Device Manager突然出现了/dev/kvm is not found这个错误,我猜测大概Hardware_Accelerated_Execution_Manager丢失了某些文件,或者没安装好HAXM

继续阅读macOS Sierra (10.12.4)下使用Android Studio打开Android Virtual Device Manager报告“/dev/kvm is not found”错误

ubuntu 16.04 LTS上16进制文件编辑&比较工具wxHexEditor

ubuntu 16.04 LTS上比较好用的16进制编辑&比较工具,当属wxHexEditor,官网地址在http://www.wxhexeditor.org/

Ubuntu系统上,可以使用如下命令安装:

$ sudo apt-get install wxhexeditor

$ wxHexEditor

参考链接


git删除未监视的文件(untracked files)命令用法

gitLinux下删除未监视的文件(untracked files),一般通过命令来执行更方便,具体执行如下:

# 删除 untracked files
$ git clean -f

# 连 untracked 的目录也一起删掉
$ git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
$ git clean -xfd

# 在用上述 git clean 前,建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
$ git clean -nxfd
$ git clean -nf
$ git clean -nfd

一般执行

$ git clean -xfd

即可。

ubuntu 16.04 LTS上安装Torch7

1.安装luarocks

$ sudo apt-get install luarocks

2.安装torch

$ git clone https://github.com/torch/distro.git ~/torch --recursive
$ cd ~/torch; bash install-deps;
$ ./install.sh

如果要使用NVIDIA CUDA加速版本的Torch7则使用如下方法

1.安装luarocks

$ sudo apt-get install luarocks

2.下载NVIDIA CUDA适配的代码

$ git clone https://github.com/torch/cutorch.git

3.安装编译依赖的库

$ sudo apt install nvidia-cuda-toolkit

4.编译代码

$ cd cutorch
$ mkdir build
$ cd build
$ cmake ..
$ make

参考链接


ubuntu 16.04 LTS编译最新的FFMPEG 3.3

ubuntu 16.04 LTS编译最新的FFMPEG 3.3的时候被Gitautocrlf折磨了好几天才搞定,在这里记录一下:

$ sudo apt-get install git
#关键操作,否在检出的代码无法正常编译
$ git config --global core.autocrlf false
$ git clone https://git.ffmpeg.org/ffmpeg.git
$ cd ffmpeg
#不要安装nasm否在编译不通过,应当使用yasm
$ sudo apt-get remove nasm
$ sudo apt-get install yasm
$ git fetch
$ git branch -a
$ git checkout -t remotes/origin/release/3.3
$ sudo apt-get update
$ sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
  libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
  libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev
$ ./configure
$ make

注意,如果检出的代码在执行./configure的时候报告错误:

bash: ./configure: /bin/sh^M: 解释器错误: 没有那个文件或目录

则目前看到原因是Gitautocrlf导致的。

其余的参考 https://trac.ffmpeg.org/wiki/CompilationGuide即可。

ubuntu 16.04 LTS更改机器名后执行sudo提示"sudo: 无法解析主机:xx-ubuntu: 连接超时"

ubuntu 16.04 LTS更改机器名后执行sudo提示"sudo: 无法解析主机:xx-ubuntu: 连接超时"。
出现这种问题是hosts文件没有配置好所导致的,linux无法解析到您的主机地址,解决方案如下:

$ sudo vim /etc/hosts

打开文件以后,将其中的:

127.0.1.1       xxx(旧主机名)

修改为新的主机名。