首页 文章 精选 留言 我的

精选列表

搜索[超融合软件],共10000篇文章
优秀的个人博客,低调大师

超全!基于Java的机器学习项目、环境、库...

你是一名希望开始或者正在学习机器学习的Java程序员吗? 利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法,但是利用现有的开源库,你可以取得更大的进步。 本文介绍了主要的平台和开放源码的机器学习库。你可以使用这些机器学习库。 环境 本节描述了用于机器学习的Java环境或工作域。它们提供了用于执行机器学习任务的图形用户界面,还提供了用于开发自己应用程序的Java API。 WEKA 怀卡托环境知识分析(Weka)( https:// www.cs.waikato.ac.nz/ml/weka/)是一个由新西兰怀卡托大学开发的机器学习平台。提供Java的图形用户接口,命令行接口和Java API接口。它可能是最流行的Java机器学习库,也是开始或练习机器学习的好地方。 KNIME 康斯坦茨信息挖掘(KNIME)(https://www.kn

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

[Android Studio] Android studio 多渠道打包(超简洁版)

转载:http://xuyazhou.com/archives/461 http://relex.me/using-manifestplaceholders/ 最近一直用android studio进行开发,在开发和发版的时候,遇到一个多渠道打包的问题,由于公司里是有七个渠道的包进行分发,由于每次去AndroidManifest.xml修改渠道的值,甚是麻烦。。。 最后去google了一番,发现有些方法,是在gradle文件里切换各种不同的AndroidManifest.xml文件,感觉这样也太麻烦些了。。。后面搜索了些,发些大家写得都差不多,发现一个在gradle利用manifestPlaceholders这个属性来替换渠道值的方法,但我按照这个方法,没有成功,我就去扒官方的文档才彻底搞定。下面就讲讲怎么实现的吧。 一般用渠道的统计无非是用友盟或者其它之类的,今天就以友盟的为例吧。 渠道信息一般在AndroidManifest.xml中修改以下值: <meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" /> 首先你必须在AndroidManifest.xml中的meta-data修改以下的样子: <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。 build.gradle文件就利用productFlavors这样写: productFlavors { wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] } c360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"] } uc { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"] } } 其中[UMENG_CHANNEL_VALUE: "wandoujia"]就是对应${UMENG_CHANNEL_VALUE}的值。 最新更新 后来发现上面的重复代码太多,就在网上又发现了一个更简洁的写法 productFlavors { wandoujia {} baidu {} c360 {} uc {} productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } 其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。 这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。 一次生成所有渠道包 在android studio底栏中有个命令行工具Terminal,打开后就CMD可以自动切换到当前项目的目录下。 有的项目下会有graldew.bat这个文件,你就可以输入这个命令: gradlew assembleRelease 就可以一次性生成所有的渠道包了 不过我一般不建议大家使用这个命令,gradlew这个命令的gralde的版本无法控制,有时候会莫名其妙的下载老版本的gradle 所以我个人推荐大家使用以下的用法。 先找到gralde的根目录,在系统变量里添加两个环境变量: 变量名为:GRADLE_HOME,变量值就为gradle的根目录; 所以变量值为:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1 还有一个在系统变量里PATH里面添加gradle的bin目录 我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin 这里配置完成了,接着在Terminal中敲下gradle assembleRelease就可以一次性生成所有的渠道包了。 所有生成的apk在项目的build\outputs\apk下。 如果只是想生成单个渠道的包呢? 打开Android Studio的Gradle tasks面板(右边侧边栏),会发现模块多了很多任务,如下图所示。 此时可以直接双击该任务生成对应的apk,也可以用命令行单独生成,比如 gradle assembleWandoujiaRelease 多渠道打包从此就非常快捷了,今天就写到这里,以后Android studio有相应的tips还是会分享给大家。 参考:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-mergerhttp://www.cnblogs.com/shanpow/p/4097320.html 分类: Android Studio 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/4203997.html如需转载请自行联系原作者 demoblog

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

Android Transition Framework详解---超炫的动画框架

前言 早在Android 4.4,Transition 就已经引入,但在5.0才得以真正的实现。而究竟Transition是用来干嘛的呢。接下来我将通过实例和原理解析来分析下Google这个强大的动画框架。 先来张效果图镇住场面 这个效果下文会介绍如何实现,不过要先理解透这个框架的一些基础概念。 Transition Framework 核心就是根据Scene(场景,下文解释)的不同帮助开发者们自动生成动画。通常主要是通过以下几个方法开启动画。 TransitionManager.go() beginDelayedTransition() setEnterTransition()/setSharedElementEnterTransition() 我们来逐一解释以上各种情况 TransitionManager.go() 首先,先介绍下Scene这个类,看看官方的解释 A scene represents the collection of values that various properties in the View hierarchy will have when the scene is applied. A Scene can be configured to automatically run a Transition when it is applied, which will animate the various property changes that take place during the scene change. 通俗的解释就是这个类存储着一个根view下的各种view的属性。通常由getSceneForLayout (ViewGroup sceneRoot,int layoutId,Context context)获取实例。 sceneRoot scene发生改变和动画执行的位置 layoutId 即上文所说的根view 可能这样解释有点无力,下面我举个例子。 privateScenescene1; privateScenescene2; privatebooleanisScene2; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_scene); initToolbar(); initScene(); } privatevoidinitScene(){ ViewGroupsceneRoot=(ViewGroup)findViewById(R.id.scene_root); scene1=Scene.getSceneForLayout(sceneRoot,R.layout.scene_1,this); scene2=Scene.getSceneForLayout(sceneRoot,R.layout.scene_2,this); TransitionManager.go(scene1); } /** *scene1和scene2相互切换,播放动画*@paramview */ publicvoidchange(Viewview){ TransitionManager.go(isScene2?scene1:scene2,newChangeBounds()); isScene2=!isScene2; } scene1: scene2: 注意,两个scene布局中1和4,2和3除了图片位置大小不一样,其id是一样的。可以当成一个view.因为分析比较起始scene 的不同创建动画是针对于同一个view的。 上述简单的例子是通过第一种方式TransitionManager.go()触发动画。即在进入Activity的时候,手动将start scene通过TransitionManager.go(scene1)设置为scene1。点击button通过TransitionManager.go(scene2,new ChangeBounds())切换到end scene状态:scene2.Transition 框架通过ChangeBounds类分析start scene和end scene的不同创建并播放动画。由于ChangeBounds类是分析比较两个scene中view的位置边界创建移动和缩放动画。发现从scene1->scene2其实是1->4,2->3。于是就执行相应的动画,即是如下效果: 类似于ChangeBounds类的还有以下几种,他们都是继承Transiton类 ChangeBounds 检测view的位置边界创建移动和缩放动画 ChangeTransform 检测view的scale和rotation创建缩放和旋转动画 ChangeClipBounds 检测view的剪切区域的位置边界,和ChangeBounds类似。不过ChangeBounds针对的是view而ChangeClipBounds针对的是view的剪切区域(setClipBound(Rect rect)中的rect)。如果没有设置则没有动画效果 ChangeImageTransform 检测ImageView(这里是专指ImageView)的尺寸,位置以及ScaleType,并创建相应动画。 Fade,Slide,Explode 这三个都是根据view的visibility的不同分别创建渐入,滑动,爆炸动画。 以上各个动画类的实现效果如下: AutoTransition 如果TransitionManager.go(scene1)不指定动画,则默认动画是AutoTransition类。它其实是一个动画集合,查看源码可知其实是动画集合中添加了Fade和ChangeBounds类。 privatevoidinit(){ setOrdering(ORDERING_SEQUENTIAL); addTransition(newFade(Fade.OUT)). addTransition(newChangeBounds()). addTransition(newFade(Fade.IN)); } 说到动画集合,其实动画类不仅可以通过类似new ChangeBounds()方法创建,也可以通过xml文件创建。且如果对于动画集合,xml方式可能会更加方便。 只需要两步,第一步在res/transition创建一个xml文件,如下: res/transition/changebounds_and_fade.xml: <?xmlversion="1.0"encoding="utf-8"?> <transitionSetxmlns:android="http://schemas.android.com/apk/res/android"> <changeBounds/> <fade/> </transitionSet> 然后再代码中调用: Transitionsets=TransitionInflater.from(this).inflateTransition(R.transition.changebounds_and_fade); 最后补充一点,关于和TransitionManager.go(scene2)其实是调用当前的scene(scene1)的scene1.exit()以及下一个scene(scene2)的scene2.enter() 而它们又分别会触发scene1.setExitAction()和scene1.setEnterAction().可以在这两个方法中定制一些特别的效果. beginDelayedTransition() 接下来介绍下一个触发方式,如果上面的理解透了话下面的就很简单了。之前的那种TransitionManager.go()一直都是根据xml文件创造start scene和end scene,这样未免有些麻烦。 而beginDelayedTransition()原理则是通过代码改变view的属性,然后通过之前介绍的ChangeBounds等类分析start scene和end Scene不同来创建动画。 依然举个例子: @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_begin_delayed); initToolBar(); initView(); } @Override publicvoidonClick(Viewv){ //startscene是当前的scene TransitionManager.beginDelayedTransition(sceneRoot,TransitionInflater.from(this).inflateTransition(R.transition.explode_and_changebounds)); //nextscene此时通过代码已改变了scenestatue changeScene(v); } privatevoidchangeScene(Viewview){ changeSize(view); changeVisibility(cuteboy,cutegirl,hxy,lly); view.setVisibility(View.VISIBLE); } /** *view的宽高1.5倍和原尺寸大小切换*配合ChangeBounds实现缩放效果*@paramview */ privatevoidchangeSize(Viewview){ isImageBigger=!isImageBigger; ViewGroup.LayoutParamslayoutParams=view.getLayoutParams(); if(isImageBigger){ layoutParams.width=(int)(1.5*primarySize); layoutParams.height=(int)(1.5*primarySize); }else{ layoutParams.width=primarySize; layoutParams.height=primarySize; } view.setLayoutParams(layoutParams); } /** *VISIBLE和INVISIBLE状态切换*@paramviews */ privatevoidchangeVisibility(View...views){ for(Viewview:views){ view.setVisibility(view.getVisibility()==View.VISIBLE?View.INVISIBLE:View.VISIBLE); } } 当触发点击事件时候,此时记录下当前scene status,然后改变被点击view的尺寸,并改变其他view的visibility,再记录下改变后的scene status。而本例中beginDelayedTransition()第二个参数传的是一个ChangeBounds和Explode动画集合,所以这个集合的中改变尺寸的执行缩放动画,改变visibility的执行爆炸效果。整体效果如下: 界面切换动画 前面说了那么多终于到了重头戏了:Activity/Fragment之前的切换效果。界面切换有两种,一种是不带共享元素的Content Transition一种是带有共享元素的Shared Element Transition。 Content Transition 先解释下几个重要概念: A.exitTransition(transition) Transition框架会先遍历A界面确定要执行动画的view(非共享元素view),执行A.exitTransition()前A界面会获取界面的start scene(view 处于VISIBLE状态),然后将所有的要执行动画的view设置为INVISIBLE,并获取此时的end scene(view 处于INVISIBLE状态).根据transition分析差异的不同创建执行动画。 B.enterTransition() Transition框架会先遍历B界面,确定要执行动画的view,设置为INVISIBLE。执行B.enterTransition()前获取此时的start scene(view 处于INVISIBLE状态),然后将所有的要执行动画的view设置为VISIBLE,并获取此时的end scene(view 处于VISIBLE状态).根据transition分析差异的不同创建执行动画。 根据上文解释,界面切换动画是建立在visibility的改变的基础上的,所以getWindow().setEnterTransition(transition);中的参数一般传的是Fade,Slide,Explode类的实例(因为这三个类是通过分析visibility不同创建动画的)。通常写一个完整的Activity Content Transiton有以下几个步骤: 在style中添加 <itemname="android:windowActivityTransitions">true</item> Material主题的应用自动设置为true. 设置相应的A离开/B进入/B离开/A重新进入动画。 //A不设置默认为null getWindow().setExitTransition(transition); //B不设置默认为Fade getWindow().setEnterTransition(transition); //B不设置默认为EnterTransition getWindow().setReturnTransition(transition); //A不设置默认为ExitTransition getWindow().setReenterTransition(transition); 当然也可以在主题中设置 <itemname="android:windowEnterTransition">@transition/slide_and_fade</item> <itemname="android:windowReturnTransition">@transition/return_slide</item> 跳转界面 这里的跳转界面不能仅仅startActivity(intent),需要 Bundlebundle=ActivityOptionsCompat.makeSceneTransitionAnimation(activity).toBundle; startActivity(intent,bundle) ok到这里为止既可以运行activity之间的切换动画了。 但是你会发现,在界面切换的时候,A退出时,过了一小会,B就进入了,(真是过分,不给A完全展示ExitTransition)如果你是想等A完全退出后B再进入可以通过设置setAllowEnterTransitionOverlap(false)(默认是true),同样可以在xml中设置: <itemname="android:windowAllowEnterTransitionOverlap">false</item> <itemname="android:windowAllowReturnTransitionOverlap">false</item> 说了这么多我觉得又得举个简单例子。 A.Activity: @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initToolBar(); getWindow().setExitTransition(TransitionInflater.from(this).inflateTransition(R.transition.slide)); //未设置setReenterTransition()默认和setExitTransition一样 } publicvoidgoContentTransitions(Viewview){ Intentintent=newIntent(this,ContentTransitionsActivity.class); ActivityOptionsCompatactivityOptionsCompat=ActivityOptionsCompat.makeSceneTransitionAnimation(this); startActivity(intent,activityOptionsCompat.toBundle()); } res/translation/slide.xml: <transitionSetxmlns:android="http://schemas.android.com/apk/res/android"> <slideandroid:duration="1000"></slide> </transitionSet> B.Activity: @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_content_transitions); initToolbar(); Slideslide=newSlide(); slide.setDuration(500); slide.setSlideEdge(Gravity.LEFT); getWindow().setEnterTransition(slide); getWindow().setReenterTransition(newExplode().setDuration(600)); } 实现的效果如下: 仔细看着动画你其实可以发现A的状态栏也跟着下拉上拉了,而且和下面的视图有一定的间距。处女座表示不能忍。 其实从原理上来解释,Activity的切换动画针对的是整个界面的view的visibility,而有没有什么方法能让Transition框架只关注某一个view或者不关注某个view呢。当然,transition.addTarget()和transition.excludeTarget()可以分别实现上述功能。 方便的是也可以在xml设置该属性,那么我们现在要做的是将statusBar排除掉,可以在slide.xml这样写: <transitionSetxmlns:android="http://schemas.android.com/apk/res/android"> <slideandroid:duration="1000"> <targets> <!--表示除了状态栏--> <targetandroid:excludeId="@android:id/statusBarBackground"/> <!--表示只针对状态栏--> <!--<targetandroid:targetId="@android:id/statusBarBackground"/>--></targets> </slide> </transitionSet> 大功告成,效果我就不贴了,各位可以脑补一下... Shared Element Transition 界面切换中往往Content Transition和Shared Element Transition是同时存在的,区别于Content Transition,主要有以下几个不同点: startActivity() Bundlebundle=ActivityOptionsCompat.makeSceneTransitionAnimation(activity,pairs).toBundle; startActivity(intent,bundle) 这里的pairs是Pair<View, String>类的实例集合,存储着两个activity之间共享view和name。这里的name要和B界面的共享view的transitionName一致。就像这样: Intentintent=newIntent(this,WithSharedElementTransitionsActivity.class); ActivityOptionsCompatactivityOptionsCompat=ActivityOptionsCompat.makeSceneTransitionAnimation(this ,newPair<View,String>(shared_image,"shared_image_") ,newPair<View,String>(shared_text,"shared_text_")); startActivity(intent,activityOptionsCompat.toBundle());//xml<TextView android:text="withShared" android:transitionName="shared_text_" style="@style/MaterialAnimations.TextAppearance.Title.Inverse" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ><de.hdodenhof.circleimageview.CircleImageView android:id="@+id/icon_gg" android:layout_centerInParent="true" android:src="@mipmap/xkl" android:transitionName="shared_image_" android:layout_width="150dp" android:layout_height="150dp"/> setSharedElementEnterTransition()/setSharedElementReturnTransition() 不设置的话默认是@android:transition/move动画。而setExitTransition()和setEnterTransition()默认为null和Fade. 其实Shared Element Transition原理和Content Transition类似都是根据始末scene status的不同创建动画。 不同的是Content Transition是通过改变view的visibility来改变scene状态从而进一步创建动画,而Shared Element Transition是分析A B界面共享view的尺寸,位置,样式的不同创建动画化的。所以前者通常设置Fade等Transition后者通常设置ChangeBounds等Transition. 最后的最后让我们来分析如何实现文章一开始的那个gif图效果。 整个动画包括Content Transition和Shared Element Transition。而A界面的setExitTransition()并没有设置为null。 当进入B界面,这里的共享view只是单纯的移动所以setSharedElementEnterTransition(transition)可以不用设置,默认为move。同时会执行一个水纹展开动画,这个可以通过ViewAnimationUtils.createCircularReveal()方法实现。在Shared Element Transition结束之后执行Content Transition,可以看出是Slide动画。所以可以通过设置setExitTransition(new Slide())完成。注意这里Slide只作用于底部的item(要设置target),否则就作用于一整个视图了。 最关键的来了,在B退出时候,可以看到屏幕上半部分向上滑过,下半部分向下滑过。一种从中间撕开的视觉效果。所以可以将布局一分为二并指定为用两个不同方向的Slide的Target,差不多像这样: <transitionSet android:duration="800"xmlns:android="http://schemas.android.com/apk/res/android"> <slideandroid:slideEdge="top"> <targets> <targetandroid:targetId="@id/viewGroup_top"></target> </targets> </slide> <slideandroid:slideEdge="bottom"> <targets> <targetandroid:targetId="@id/viewGroup_bottom"></target> </targets> </slide> </transitionSet> 这里其实有个坑,我们先来看看isTransitionGroup()这个方法: publicbooleanisTransitionGroup(){ if((mGroupFlags&FLAG_IS_TRANSITION_GROUP_SET)!=0){ return((mGroupFlags&FLAG_IS_TRANSITION_GROUP)!=0); }else{ finalViewOutlineProvideroutlineProvider=getOutlineProvider(); returngetBackground()!=null||getTransitionName()!=null|| (outlineProvider!=null&&outlineProvider!=ViewOutlineProvider.BACKGROUND); } } 返回值为true表示这个ViewGroup作为一个整体执行Activity Transition,false表示这个ViewGroup中子view各自执行各自的。如果这个ViewGroup设置了background或者TransitionName,或者setTransitionGroup(true)则返回值为true表示作为一个整体执行动画. 所以这里的viewGroup_bottom和viewGroup_top最好设置下setTransitionGroup(true). 实现效果如下,自己加了点其他特效 具体代码我就不贴了,本文的所有的代码已上传Github(我是链接),包括Fragment的切换本文未作介绍代码中有写。希望大家能点个star。 如果你看了一遍还是不知所云那我强烈建议你结合代码运行下在看一遍,其实搞懂了还是蛮简单的。 最后我想说的是关于这个Transition Framework还有一些内容没说完,可能要等过段时间更新了,接下来还会写关于Dagger 2的相关文章以及NavigationBar的加强版,敬请期待吧。 作者:陈留年 来源:51CTO

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

爱立信:物联网连接数会超手机连接

爱立信发布预测称,到2018年,全球物联网连接数将超过手机连接数。爱立信在报告中称,到2021年,全球的移动连接数将达到275亿,其中物联网连接数将达到157亿、手机连接数为86亿。 届时,亚太地区将成为物联网连接的最大市场,其次是西欧和北美。移动运营商需要注意的是,爱立信预测,到2021年,基于蜂窝网络的物联网连接在总的物联网连接中的占比仅为不到10%。这表明,WiFi和LoRaWAN等使用未授权频谱的技术至少在未来5年里成为物联网的主导技术。但从2020年起,随着运营商开始5G商用,蜂窝网络为对物联网将越来越重要。 爱立信预测,到2021年年底,全球5G连接数将达到1.5亿。届时,LTE连接将从今年第一季度末的12亿增长到43亿。同时,3G连接数也有望从2015年年底的21亿增长到31亿,而2G连接数则将从36亿下降至12亿。本文转自d1net(转载)

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

Gmail 活跃用户数量超 10 亿

谷歌CEO Sundar Pichai在日前举行的Alphabet电话财报会议上称,谷歌邮箱服务Gmail现已经拥有10亿多名活跃用户。去年5月,该服务活跃用户数量为9亿。Gmail是谷歌在2004年推出的一项邮箱服务,不过直到2009年,它的beta标签才被拿掉。2014年,谷歌又为Gmail推出了Inbox(收件箱)邮箱客户端。 去年,谷歌为Inbox带来了一个有趣的功能:智能回复,即为用户提供快速、简单的回复信息。根据最近的统计数据显示,在Inbox回复的邮件中有10%都是来自这项功能。 据悉,Alphabet另外活跃用户数量超过10亿的服务有Google Search、YouTube、Google Maps、Android、Chrome。 ====================================分割线================================文章转载自 开源中国社区[http://www.oschina.net]

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

zabbix3.2超详细搭建过程+邮件报警机制

博客更换地址为www.qxfell.com Zabbix:zabbix 3.2 Linux : CentOS 7 Yum源:163 epel 随便哪个都可以 163 wgethttp://mirrors.163.com/.help/CentOS7-Base-163.repo epel yum –y installepel-release 关闭selinux :setenforce 0 关闭防火墙: systemctl stop firewalld.service 或者开放10050 1005180端口 firewall-cmd–permanent–add-port=10050/tcp firewall-cmd–permanent–add-port=10051/tcp firewall-cmd–permanent–add-port=80/tcp firewall-cmd–reload 快速重新加载防火墙规则 Xshell连接虚拟机NAT模式(也可以新建2块网卡 内网用来连接Xshell ) 打开虚拟网络编辑器 这样的话Xshell就能连接NAT模式的Linux系统了。 Centos7 的perl版本默认是5.16用sendemail发送邮件会报错,所以要先卸载5.16然后源码安装5.10的版本 卸载perl5.16时 vim 会被当作依赖关系也一起卸载掉可以使用vi来编辑文件(其实我也没搞的很明白,5.16版本的perl发邮件貌似也可以正常发送这个说法在第一次实验时有这个报错在网上查到的解决办法是perl版本问题) wget http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz ./configure.gnu -des -Dprefix=/usr/local/perl (源码安装记得安装gcc*) make make test (有报错 请忽视) make install mv /usr/bin/perl /usr/bin/perl.bak ln -s /usr/local/perl/bin/perl /usr/bin/perl perl-v (查看perl版本) 在安装完sendemail之后发送测试邮件如果perl版本是5.16会出现以下报错 下载zabbix3.2 rpm源 (放到/etc/yum.repos.d/) rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm 服务端 yum install zabbix-server-mysqlzabbix-web-mysql 客户端 yum install zabbix-agent (因为要监控本机所以需要安装客户端) 安装数据库 yum -y installmariadb mariadb-server (centos7 的数据库不在使用mysql而是mariadb) 修改数据库的编码格式为utf8vim /etc/my.cnf (web界面更好的支持中文) 添加 character_set_server=utf8 init_connect='SETNAMES utf8' 初始化数据库 mysql_secure_installation 回车设置数据库密码 Remove anonymous users? 删除匿名用户? Disallow root login remotely? 禁止root远程登陆 Remove test database and access to it? 删除测试数据库并且和访问它 Reload privilege tables now? 重新载入特权表 创建数据库和用户并且grant授权 create databasezabbix_db; grantallprivilegesonzabbix_db.*tozabbix@localhostidentifiedby'zabbix'; flushprivileges; (刷新privileges授权) exit 导入zabbix3.2数据库 cd/usr/share/doc/zabbix-server-mysql-3.0.4/ gunzipcreate.sql.gz mysql-uroot-pzabbix_db<create.sql 修改php参数 Vim /etc/php.ini max_execution_time = 300 memory_limit = 128M post_max_size = 16M upload_max_filesize = 2M max_input_time = 300 always_populate_raw_post_data = -1 date.timezone = Asia/Shanghai 修改zabbix_server的配置文件 vim/etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix_db数据库名 DBUser=zabbix授权的数据库用户 DBPassword=zabbix授权的数据库用户密码 修改zabbix-agent配置文件 vim/etc/zabbix/zabbix_agent.conf Server=127.0.0.1 (服务端IP) ServerActive=127.0.0.1 (服务端IP) Hostname=zabbix (被监测主机的主机名) 开启服务 systemctlstartmariadb systemctlenablemariadb systemctlstarthttpd systemctlenablehttpd systemctlstartzabbix-server systemctlenablezabbix-server systemctlstartzabbix-agent 打开浏览器输入 ip/zabbix 安装zabbix3.2 默认登陆用户名admin 密码zabbix Web界面修改为中文 正常界面 监控Linux主机(需要关闭selinux和开放防火墙) rpm-ivhhttp://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm yuminstall-yzabbix-agent 修改zabbix-agent客户端配置文件 vim/etc/zabbix/zabbix_agentd.conf server=192.168.110.10 (服务端IP) serveractive=192.168.110.10 (服务端IP) hostname=fei00 (被监控主机的主机名) 保存退出后 开启zabbix-agent服务/etc/init.d/zabbix-agentstart 设置开机自启 chkconfigzabbix-agenton 在web界面添加主机 可用性是绿色的 说明开启成功 通过图形查看检测主机 解决web界面 中文乱码显示不全 下载(本机windows就有)微软雅黑或其他字体ttf格式 上传到 /usr/share/zabbix/fonts目录下 修改配置前端文件 vim /usr/share/zabbix/include/defines.inc.php 保存退出即可 sendemail邮件报警 wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar –xvf sendEmail-v1.56.tar.gz cp sendEmail-v1.56/sendEmail /usr/local/bin/ chmod 755 /usr/local/bin/sendEmail 进入zabbix默认脚本目录 /usr/lib/zabbix/alertscripts 创建脚本 vim SendEmail.sh 别忘了给脚本设置执行权限和属组 Chmod777 SendEmail.sh Chown zabbix.zabbix SendEmail.sh 邮件发送测试bash SendEmail 1183766365@qq.com “主题” “内容” 如果发送测试邮件出现 验证失败 25端口无法打开 Dec 03 22:47:02 zabbixsendEmail[3439]: ERROR => ERROR => SMTP-AUTH: Authentication tosmtp.163.com:25 failed. 请确认你的邮箱客户端是否开启smtp服务 web界面设置 {ALERT.SENDTO}收件人地址 {ALERT.SUBJECT}主题 {ALERT.MESSAGE}详细内容 报警信息 博主也是新手 文章中如果有什么错误请联系我及时修改 邮箱17601611570@163.com

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

工信部:5G套餐用户已超3.5亿户 中国移动第一已超1.8亿户

目前5G套餐用户已经超过了3.5亿户,5G套餐的单价目前下降到每个G为4.4元,大额流量可以满足很多人的上网需求,一定程度上使很多原来使用流量套餐副卡的双卡用户转为了单卡用户。 工信部信息通信管理局局长赵志国表示,随着全国实施提速降费和5G的发展,我国网络流量单价大幅下降,5G套餐用户快速推广。 目前5G套餐用户已经超过了3.5亿户,5G套餐的单价目前下降到每个G为4.4元,大额流量可以满足很多人的上网需求,一定程度上使很多原来使用流量套餐副卡的双卡用户转为了单卡用户。 据了解,目前,中国已建成全球最大规模的5G移动网络,5G手机终端连接数达2.6亿,累计建成71.8万个5G基站。 在提速方面,我国已建成全球规模最大的宽带网络基础设施,实现了农村和城市‘同网同速’;在降费方面,固定宽带单位带宽和移动网络单位流量平均资费降幅超过95%。 值得一提的是,中国移动公布2021年3月份运营数据显示,3月5G客户大增1559.3万,累计达到1.88761亿户,4G客户净增700万,累计达到7.88333亿户。 中国移动3月5G客户大增1559.3万,4G客户净增700万当月,中国移动有线宽带客户数净增271.9万户,累计达到2.18419亿户。

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

工信部刘郁林:移动物联网连接数超10亿 NB-IoT连接数超1亿

借“新基建”东风,5G、物联网等新兴产业迎来重大发展机遇。 在日前举行的5G NB-IoT亿征程线上产业峰会上,工信部信息通信发展司副司长刘郁林表示,工信部一直以来高度重视移动物联网发展,2017年印发《关于全面推进移动物联网NB-IoT建设发展的通知》,吹响了以NB-IoT为代表的移动物联网快速发展的号角。截至去年底,我国已建成NB-IoT基站超过70万个,实现全国主要城市、乡镇以上区域连续覆盖,为各类应用的发展奠定良好的网络基础。 目前,全网移动物联网连接数超过10亿,其中NB-IoT经过3年的快速发展,连接数已经超过1亿。智能水表、智能燃气表、烟感、电动车监控等典型应用的连接数达到数百万,甚至超过千万,智慧路灯、智慧停车、智能门锁等新兴规模化应用不断涌现。 刘郁林指出,今年出现的新冠肺炎疫情给各行各业和全国人民的生活带来很大影响,减少人际接触的管控要求使得物联网大显身手,远距测温仪、巡逻无人机、防疫机器人、隔离区感应门磁等一系列产品,在疫情防控和复工复产中得到广泛应用。 刘郁林同时指出:“以NB-IoT为代表的移动物联网虽然取得了突破性成绩,但是也面临一些挑战。” 第一,NB-IoT应用有待进一步普及。目前我国大部分NB-IoT连接集中在少数城市,在全国范围内得到普及的程度还有所欠缺,大量基站处于轻载、空载状态。 第二,采用先进移动技术的比例有待进一步提升。现有存量物联网连接中,2G、3G连接仍占较大份额,需要加快形成以4G、5G技术梯次承接各类物联网连接的发展格局。 第三,NB-IoT网络覆盖还有待进一步完善,部分地区NB-IoT网络覆盖水平还不能完全满足承载2G连接迁移的要求,在局部覆盖深度方面还需加强。 刘郁林还对移动物联网产业的发展提出了几点建议: 第一,加快5G网络建设,统筹完善NB-IoT网络覆盖。物联网要发展,网络是基础,各基础电信企业要加快5G网络部署进程,以SA独立组网为目标,加快推进主要城市的网络建设,并向有条件的重点县镇延伸覆盖,为移动物联网发展奠定良好基础。针对重要应用场景需要,进一步完善优化NB-IoT网络质量,加强深度覆盖,有力支撑各类应用继续发展。 第二,加强物联网管理平台建设和能力开放。电信企业的连接管理平台要和垂直行业的应用管理平台打通连接,特别是运营商的管理平台,应该向行业应用平台开放接口和能力,帮助行业客户更加灵活、便捷的管理业务,更大程度的发挥NB-IoT网络的价值。 第三,充分发挥产业联盟和公共服务平台的支撑作用,创造良好的产业发展环境。开展移动物联网发展监测工作,促进和指导各地NB-IoT应用和产业发展,鼓励有能力的大企业和单位建设开放实验室,面向中小企业提供研发、测试、验证等,催生更多物联网新应用、新模式、新业态

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

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部分的功能。

用户登录
用户注册