首页 文章 精选 留言 我的

精选列表

搜索[AI可见性],共10000篇文章
优秀的个人博客,低调大师

TensorFlow Hub介绍:TensorFlow中可重用的机器学习模块库

在软件开发中,最常见的失误就是容易忽视共享代码库,而库则能够使软件开发具有更高的效率。从某种意义上来说,它改变了编程的过程。我们常常使用库构建块或模块,并将其连接在一起进行编程。 开发人员是如果使用库的呢?除了共享代码之外,我们还可以共享预训练模型。共享预训练模型能够使开发人员有针对性的开发该模型,而不需要访问计算资源或手头上用于训练模型的原始数据。例如,NASNet架构在GPU上花费数千个小时进行训练。通过共享学习到的权重,其他开发人员就能够更容易重用库和构建模型或架构。 机器学习模型内部的“组成部分”,可以使用TensorFlow Hub进行打包和共享。从某种意义上来讲,除了架构本身,共享预先训练好的模型的同时,也共享了开发模型的计算时间和数据集。 为机器学习开发者提供库产生了TensorFlow Hub库。TensorFlow

优秀的个人博客,低调大师

02.自定义View(RippleTextView可颜色渐变的TextView)

感谢红橙Darren博主 package com.rzm.commonlibrary.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; /** * Created by renzhenming on 2018/3/22. * 颜色渐变效果的TextView,可用于音乐播放的字幕 */ public class RippleTextView extends TextView{ //最初的画笔 private Paint mOriginPaint; //颜色改变后的画笔 private Paint mChangedPaint; //当前滑动进度 private float mCurrentPercent = 0.6f; //当前设置的文本 private String mText; // 当前朝向 private Direction mDirection = Direction.DIRECTION_LEFT; // 绘制的朝向枚举 public enum Direction { DIRECTION_LEFT, DIRECTION_RIGHT } public RippleTextView(Context context) { this(context,null); } public RippleTextView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,-1); } public RippleTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } private void initPaint() { mOriginPaint = getPaintByColor(Color.BLACK); mChangedPaint = getPaintByColor(Color.RED); } private Paint getPaintByColor(int color) { Paint paint = new Paint(); //抗锯齿 paint.setAntiAlias(true); //防抖动 paint.setDither(true); paint.setColor(color); // 字体的大小设置为TextView的文字大小 paint.setTextSize(getTextSize()); return paint; } /** * 自己绘制,不继承super * @param canvas */ @Override protected void onDraw(Canvas canvas) { //获取textView的文本 mText = getText().toString().trim(); //获取textView宽度 int width = getWidth(); if (!TextUtils.isEmpty(mText)){ //mCurrentPercent进度下,滑动到控件的位置 int position = (int) (width* mCurrentPercent); // 根据不同的朝向去画字体 if (mDirection == Direction.DIRECTION_LEFT) { drawOriginDirectionLeft(canvas, position); drawChangeDirectionLeft(canvas, position); } if (mDirection == Direction.DIRECTION_RIGHT) { drawOriginDirectionRight(canvas, position); drawChangeDirectionRight(canvas, position); } } } /** * 画朝向右边变色字体 */ private void drawChangeDirectionRight(Canvas canvas, int position) { drawText(canvas, mChangedPaint, getWidth() - position, getWidth()); } /** * 画朝向左边默认色字体 */ private void drawOriginDirectionRight(Canvas canvas, int position) { drawText(canvas, mOriginPaint, 0, getWidth() - position); } /** * 画朝向左边变色字体 */ private void drawChangeDirectionLeft(Canvas canvas, int position) { drawText(canvas, mChangedPaint, 0, position); } /** * 画朝向左边默认色字体 */ private void drawOriginDirectionLeft(Canvas canvas, int position) { drawText(canvas, mOriginPaint, position, getWidth()); } /** * 设置当前的进度 * @param currentProgress 当前进度 */ public void setCurrentProgress(float currentProgress) { this.mCurrentPercent = currentProgress; // 重新绘制 invalidate(); } /** * 设置绘制方向,从右到左或者从左到右 * @param direction 绘制方向 */ public void setDirection(Direction direction) { this.mDirection = direction; } /** * 根据滑动位置绘制文本 * @param canvas * @param paint * @param start * @param end * * 基准点是baseline * Ascent是baseline之上至字符最高处的距离 * Descent是baseline之下至字符最低处的距离 * Top指的是指的是最高字符到baseline的值,即ascent的最大值, * bottom指的是最下字符到baseline的值,即descent的最大值,字能达到的最小值 */ private void drawText(Canvas canvas, Paint paint, int start, int end) { //保存画笔状态 canvas.save(); //截取绘制的内容,该方法用于裁剪画布,也就是设置画布的显示区域 //主要用于部分显示以及对画布中的部分对象进行操作的场合。 canvas.clipRect(start,0,end,getHeight()); //获取文字的范围 Rect bounds = new Rect(); mOriginPaint.getTextBounds(mText,0,mText.length(),bounds); // 获取文字的Metrics 用来计算基线 Paint.FontMetricsInt fontMetrics = mOriginPaint.getFontMetricsInt(); //获取文字的高度 int fontHeight = fontMetrics.bottom - fontMetrics.top; // 计算基线到中心点的位置,fontHeight/2是文字中心点, fontMetrics.bottom是基线到文字最低点的高度, int offY = fontHeight/2 - fontMetrics.bottom; // 计算基线位置,为什么基线的位置这样计算,如果想不通,可以这样,假设,文字在控件正中间,控件高度的一半 //也就是控件顶部到文字中心点的垂直距离,文字高度的一半也就是文字中心点到文字最顶部或者最底部的距离,二者相加 //可以看作是从控件顶部到文字最底部的距离,这个距离是等于控件顶部到基线的距离加上 int baseline = (getMeasuredHeight() + fontHeight) / 2 - offY; //绘制文字 canvas.drawText(mText,getMeasuredWidth()/2-bounds.width()/2,baseline,paint); //恢复画笔状态 canvas.restore(); } }

优秀的个人博客,低调大师

VirtualBox中CentOS7网络配置(可连外网)

本文所述的方法在RHEL6.5、RHEL7和CentOS6.5中同样适用。 1.工具:VirtualBox,虚拟机:CentOS7 2.VirtualBox工具中的网络配置 (1)VirtualBox全局设置:管理——>全局设定——>网络——>仅主机(host-only) 注:因为我本次配置是要搭建OpenStack的网络环境,所以我这里又新建了一块网卡Virtualbox Host-Only Ethernet Adapter#2来作为openstack的管理网络,若是只想配一个网卡,则直接使用VirtualBox中原本就存在的Host-Only网络Virtualbox Host-Only Ethernet Adapter即可。 第一块网卡Virtualbox Host-Only Ethernet Adapter设置如下: 新增的第二块网卡Virtualbox Host-Only Ethernet Adapter#2设置如下: 且两块网卡的DHCP服务器选项都不启用 (2)为了连接外网,将本机的无线网络共享给VirtualBox Host-Only Network,即第一块网卡 (3)在VirtualBox中给虚拟机配置网卡: 网卡一: 网卡二(若不需要两块网卡则无需做这步): 注意两块网卡的MAC地址是不一样的,记住它们,有助于在下一步中确定哪块网卡对应的是哪个配置文件(ifconfig命令中的ether后面就是MAC地址)。 3.虚拟机中的网络配置 在配置之前,先了解一下网卡配置文件各个参数的意义: DEVICE=eth0 #指出设备名称 NM_CONTROLLED=yes #network mamager的参数,实时生效,不需要重启 ONBOOT=yes #设置为yes,开机自动启用网络连接 IPADDR=192.168.21.129 #IP地址 BOOTPROTO=none #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务 NETMASK=255.255.255.0 #子网掩码 DNS1=8.8.8.8 #第一个dns服务器 TYPE=Ethernet #网络类型为:Ethernet GATEWAY=192.168.21.2 #设置网关 DNS2=8.8.4.4 #第二个dns服务器 IPV6INIT=no #禁止IPV6 USERCTL=no #是否允许非root用户控制该设备,设置为no,只能用root用户更改 HWADDR=00:0C:29:2C:E1:0F #网卡的Mac地址 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=yes NAME="System eth0" #定义设备名称 接下来进行配置 (1)ifcfg-xxx文件的配置 由于virtualbox中给虚拟机分配了两块网卡,因此进入虚拟机中能看到两个网络配置文件ifcfg-xxx 两个文件具体配置如下 ifcfg-enp0s3(由MAC地址可知其对应的是VirtualBox中的Virtualbox Host-Only Ethernet Adapter): 注:BOOTPROTO也可以设置为static,这样配置的IP就是静态的了。 ifcfg-enp0s8: (2)/etc/resolv.conf文件的配置 修改DNS,在 /etc/resolv.conf文件中增加一个域名服务器,使得虚拟机可以连通外网 nameserver 192.168.137.1 (3)重启网络:service network restart,然后使用ifconfig命令查看 注:有时候即使ifcfg-xxx文件都配置对了,并且使用service network restart命令重启了网络,用ifconfig命令看到IP依然没有配置成自己想要的,这个时候可以使用ifdown 命令(如ifdown enp0s3)先关闭网卡,再用ifup命令开启,就可以了。若是还不行,那么就需再返回去查看文件是否真的配置对了。 4.网络测试: (1)ping自己 ping -c 4 10.0.0.11 ping -c 4 192.168.137.110 ping -c 4 controller(/etc/hosts文件中需添加ip到主机名的映射) (2)ping外网 至此,网络配置完成。

优秀的个人博客,低调大师

“爱思助手”曝为iOS木马:可绕过苹果DRM机制

一款新的iOS木马已在国内曝光,它可以通过PC感染未越狱的iOS设备,而无需利用企业证书。Palo Alto Networks指出,其名叫“爱思助手”(AceDeceiver),目前正在影响我国的iOS用户。“爱思助手”利用了苹果数字版权管理(DRM)上的FairPlay漏洞来感染iOS设备。 据Palo Alto Networks所述,其采用了所谓的“FairPlay中间人”技术,此前曾被用于传播盗版iOS应用。 该技术借助假冒iTunes软件和欺骗性质的授权代码来将应用安装到iOS设备上,但现在也被用于传播“爱思助手”(AceDeceiver)恶意软件。 苹果允许用户通过计算机上的iTunes客户端里的App Store购买和下载iOS应用,然后将之安装到自己的iOS设备上。 每款安装到iOS设备上的应用都需要提供一个切实购买的授权码,而在FairPlay中间人攻击中,攻击者在App Store上购买了一款应用,然后拦截并保存了该授权码。 之后,他们用开发出来的PC软件来模拟iTunes客户端的行为,欺骗iOS设备相信应用是由受害人购买的。 用户因而可以安装他们实际未支付过的应用,但软件开发者也能够借此向无知用户的设备偷偷安装恶意软件。 从2015年7月到2016年2月,已经有三款“AceDeceiver”应用被上传到了官方iOS App Store。其冒充为一款壁纸应用,从而让攻击者拿到了一个用于攻击的虚假授权代码。 它还有一款配套的“爱思助手”Windows iPhone管理应用,虽自称可提供系统备份和清理服务,但却会给连接的设备安装恶意的iOS应用。 其设计伪装成一个可提供免费内容的第三方应用市场,然后引诱用户递交他们的Apple ID和密码,并将相关信息上传到AceDeceiver服务器。 尽管苹果已经在2月份移除了它,但由于仍然可以用授权码来在iOS设备上安装虚假应用,其攻击仍然持续着。Palo Alto Networks警告称,尽管当前仅限于国内,但类似恶意软件或很快传播到其它地区。 作者:蓝雨泪 来源:51CTO

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册