首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

搭建手机APP远程监控物联网云平台

目前常见的水质在线监测仪器生产商有:美国哈希HACH 德国E+H 以色列Blue I 德国科泽kuntze 加拿大AVVOR、德国阿尔道斯ALLDOS、上海博取、河北科瑞达等。采集的水质参数包括温度、PH、电导率、浊度、余氯等。 数据统计:可在线实时24小时连续的采集和记录监测点位的各种水质状况,以数字、图形和图像等多种方式进行实时显示和记录存储监测信息,监测点位可多达上百个点。 故障报警:当出现被监控点位数据异常时可自动发出报警信号,报警方式包括:现场多媒体声光报警、网络客户端报警、手机短信息报警等。 Web监控:管理人员打开电脑,登陆平台即可看到所属的设备运行状况,整个过程无需安装软件。一切就像网上冲浪那样方便。 APP监控:将设备放到口袋里,无论身处何地,打开手机即可查看和控制水质监测设备。 设备发布:环保局或者小区物业门可以通过EMCP平台将水质监测设备进行发布,生成二维码张贴在公共区域、官方网站或者宣传海报上,民众可通过手机扫描得知水质实时情况。 冗余设计:系统设计时预留有接口,可随时增加硬件设备,系统只要做少量的改动即可,可以在很短的时间内完成。

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

云计算之openstack-newton版搭建(六)

nova计算节点服务安装 安装配置计算节点 安装软件包 #yuminstallopenstack-nova-compute-y 2.编辑/etc/nova/nova.conf [root@compute1~]#cd/etc/nova/ [root@compute1nova]#cpnova.confnova.conf.bak [root@compute1nova]#egrep-v"^#|^$"nova.conf.bak>nova.conf [root@compute1nova]#vimnova.conf 添加如下内容 [DEFAULT] ... enabled_apis=osapi_compute,metadata transport_url=rabbit://openstack:RABBIT_PASS@controller auth_strategy=keystone my_ip=192.168.23.61 use_neutron=True firewall_driver=nova.virt.firewall.NoopFirewallDriver [keystone_authtoken] ... auth_uri=http://controller:5000 auth_url=http://controller:35357 memcached_servers=controller:11211 auth_type=password project_domain_name=Default user_domain_name=Default project_name=service username=nova password=123456 [vnc] ... enabled=True vncserver_listen=0.0.0.0 vncserver_proxyclient_address=$my_ip novncproxy_base_url=http://controller:6080/vnc_auto.html [glance] ... api_servers=http://controller:9292 [oslo_concurrency] ... lock_path=/var/lib/nova/tmp 3.确定计算节点是否支持虚拟化。 #egrep-c'(vmx|svm)'/proc/cpuinfo 如果返回值大于1表示支持虚拟化 如果不支持请更改/etc/nova/nova.conf [libvirt] ... virt_type=qemu 4.启动服务 #systemctlenablelibvirtd.serviceopenstack-nova-compute.service #systemctlstartlibvirtd.serviceopenstack-nova-compute.service 如果nova-compute服务无法启动,请检查/var/log/nova/nova-compute.log。控制器上的错误消息AMQP服务器:5672无法访问可能表示控制器节点上的防火墙阻止访问端口5672,关闭防火墙和selinux即可。 5.在控制端进行检查 #.admin-openrc #openstackcomputeservicelist [root@controller~]#openstackcomputeservicelist +----+------------------+----------------------+----------+---------+-------+----------------------------+ |ID|Binary|Host|Zone|Status|State|UpdatedAt| +----+------------------+----------------------+----------+---------+-------+----------------------------+ |1|nova-conductor|controller.novalocal|internal|enabled|up|2017-01-13T01:48:04.000000| |2|nova-consoleauth|controller.novalocal|internal|enabled|up|2017-01-13T01:48:07.000000| |3|nova-scheduler|controller.novalocal|internal|enabled|up|2017-01-13T01:48:04.000000| |10|nova-compute|compute1.novalocal|nova|enabled|up|2017-01-13T01:48:09.000000| +----+------------------+----------------------+----------+---------+-------+----------------------------+ [root@controller~]#novaservice-list +----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+ |Id|Binary|Host|Zone|Status|State|Updated_at|DisabledReason| +----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+ |1|nova-conductor|controller.novalocal|internal|enabled|up|2017-01-13T01:48:24.000000|-| |2|nova-consoleauth|controller.novalocal|internal|enabled|up|2017-01-13T01:48:17.000000|-| |3|nova-scheduler|controller.novalocal|internal|enabled|up|2017-01-13T01:48:24.000000|-| |10|nova-compute|compute1.novalocal|nova|enabled|up|2017-01-13T01:48:19.000000|-| +----+------------------+----------------------+----------+---------+-------+----------------------------+-----------------+ 表示nova服务安装完成

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

React Native商城项目实战02 - 搭建主框架

1.安装插件,cd到项目根目录下执行: npm i react-native-tab-navigator --save 1 1 1.1阅读README.md可以了解该模块基本用法 2.主框架文件Main.js /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, Image, Platform //判断当前运行的系统 } from 'react-native'; /*=============导入外部组件类==============*/ import TabNavigator from 'react-native-tab-navigator'; var Home = require('../Home/Home'); var Shop = require('../Shop/Shop'); var Mine = require('../Mine/Mine'); var More = require('../More/More'); // ES5 var Main = React.createClass({ // 初始化函数(变量是可以改变的,充当状态机的角色) getInitialState(){ return{ selectedTab:'home' // 默认选中的tabBar } }, render() { return ( <TabNavigator> {/*--首页--*/} <TabNavigator.Item title="首页" renderIcon={() => <Image source={{uri:'icon_tabbar_homepage'}} style={styles.iconStyle} />} renderSelectedIcon={() => <Image source={{uri:'icon_tabbar_homepage_selected'}} style={styles.selectedIconStyle} />} badgeText="1" selected={this.state.selectedTab === 'home'} onPress={() => this.setState({ selectedTab: 'home' })} > <Home /> </TabNavigator.Item> {/*--商家--*/} <TabNavigator.Item title="商家" renderIcon={() => <Image source={{uri:'icon_tabbar_merchant_normal'}} style={styles.iconStyle} />} renderSelectedIcon={() => <Image source={{uri:'icon_tabbar_merchant_selected'}} style={styles.selectedIconStyle} />} badgeText="1" selected={this.state.selectedTab === 'shop'} onPress={() => this.setState({ selectedTab: 'shop' })} > <Shop /> </TabNavigator.Item> {/*--我的--*/} <TabNavigator.Item title="我的" renderIcon={() => <Image source={{uri:'icon_tabbar_mine'}} style={styles.iconStyle} />} renderSelectedIcon={() => <Image source={{uri:'icon_tabbar_mine_selected'}} style={styles.selectedIconStyle} />} badgeText="1" selected={this.state.selectedTab === 'mine'} onPress={() => this.setState({ selectedTab: 'mine' })} > <Mine /> </TabNavigator.Item> {/*--更多--*/} <TabNavigator.Item title="更多" renderIcon={() => <Image source={{uri:'icon_tabbar_misc'}} style={styles.iconStyle} />} renderSelectedIcon={() => <Image source={{uri:'icon_tabbar_misc_selected'}} style={styles.selectedIconStyle} />} badgeText="1" onPress={() => this.setState({ selectedTab: 'more' })} selected={this.state.selectedTab === 'more'} > <More /> </TabNavigator.Item> </TabNavigator> ); } }); const styles = StyleSheet.create({ iconStyle:{ width: Platform.OS === 'ios' ? 30 : 25, height:Platform.OS === 'ios' ? 30 : 25, }, selectedIconStyle:{ width:Platform.OS === 'ios' ? 30 : 25, height:Platform.OS === 'ios' ? 30 : 25, }, }); // 输出 module.exports = Main; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 3.预览效果 安装效果

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

在Windows下搭建React Native Android开发环境

安装JDK 从Java官网下载JDK并安装。请注意选择x86还是x64版本。 推荐将JDK的bin目录加入系统PATH环境变量。 安装Android SDK 可以单独安装Android SDK,也可以通过Eclipse ADT或者Android Studio一并安装。推荐使用Android Studio,以下说明会默认以Android Studio的方式说明。请注意选择x86还是x64版本。 为了加速下载,推荐从AndroidDevTools下载。 然后进入SDKManager(可通过Android Studio菜单Tools-Android-SDK Manager),确保以下项目已经安装并更新到最新: Tools/Android SDK Tools (24.3.3) Tools/Android SDK Platform-tools (22) Tools/Android SDK Build-tools (23.0.1)(这个必须版本严格匹配23.0.1) Android 6.0 (API 23)/SDK Platform (1) Extras/Android Support Library(23.0.1) Extras/Android Support Repository 推荐使用腾讯Bugly的镜像加速下载。查看说明 推荐将SDK的platform-tools子目录加入系统PATH环境变量。 最后,把ANDROID_HOME环境变量设置为你sdk所在目录。 安装C++环境 推荐从itellyou下载并安装Visual Studio 2013或2015。也可选择Windows SDK、cygwin或mingw等其他C++环境。编译node.js的C++模块时需要用到。 如果使用VS2015,你需要在命令行中设置npm config set msvs_version 2015 --global 安装git for windows 在这里下载安装,安装过程中注意选择"Run Git from Windows Command Prompt"。 安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方4.1版本或更高版本。 建议设置npm镜像以加速后面的过程(或使用科学上网工具)。 npm config set registry https://registry.npm.taobao.org --global npm config set disturl https://npm.taobao.org/dist --global 安装react-native命令行工具 npm install -g react-native-cli 创建项目 进入你的工作目录,运行 react-native init MyProject 并耐心等待数(或数十)分钟。 运行packager react-native start 可以用浏览器访问http://localhost:8081/index.android.bundle?platform=android看看是否可以看到打包后的脚本(看到很长的js代码就对了)。第一次访问通常需要十几秒,并且在packager的命令行可以看到形如[====]的进度条。 如果你遇到了ERROR Watcher took too long to load的报错,请尝试修改node_modules/react-native/packager/react-packager/src/FileWatcher/index.js,将其中的MAX_WAIT_TIME 从25000改为更大的值(单位是毫秒) 运行模拟器 推荐使用BlueStacks不过要小心它推送的广告和垃圾应用。 如果有真机,可以不必运行模拟器,要配置好驱动,使得adb devices可以看到对应的设备。 安卓运行 保持packager开启,另外打开一个命令行窗口,然后在工程目录下运行 react-native run-android 首次运行需要等待数分钟并从网上下载gradle依赖。(这个过程屏幕上可能出现很多小数点,表示下载进度。这个时间可能耗时很久,也可能会不停报错链接超时、连接中断等等——取决于你的网络状况和墙的不特定阻断。总之要顺利下载,请使用稳定有效的科学上网工具。) 运行完毕后可以在模拟器或真机上看到应用自动启动了。 如果apk安装运行出现报错,请检查上文中安装SDK的环节里所有依赖是否都已装全,platform-tools是否已经设到了PATH环境变量中,运行adb devices能否看到设备。 至此,应该能看到APP红屏报错,这是正常的,我们还需要让app能够正确访问pc端的packager服务。 摇晃设备或按Menu键(Bluestacks模拟器按键盘上的菜单键,通常在右Ctrl的左边 或者左Windows键旁边),可以打开调试菜单,点击Dev Settings,选Debug server host for device,输入你的正在运行packager的那台电脑的局域网IP加:8081(同时要保证手机和电脑在同一网段,且没有防火墙阻拦),再按back键返回,再按Menu键,在调试菜单中选择Reload JS,就应该可以看到运行的结果了。 如果真实设备白屏但没有弹出任何报错,可以在安全中心里看看是不是应用的“悬浮窗”的权限被禁止了。 安卓调试 打开Chrome,访问http://localhost:8081/debugger-ui,应当能看到一个页面。按F12打开开发者菜单。 在模拟器或真机菜单中选择Debug JS,即可开始调试。

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

ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 good

环境:OS X 10.10.5 + JDK 1.8 步骤: 一、下载ELK的三大组件 Elasticsearch下载地址:https://www.elastic.co/downloads/elasticsearch(目前最新版本:2.1.1) Logstash下载地址:https://www.elastic.co/downloads/logstash(目前最新版本:2.1.1) Kibana下载地址:https://www.elastic.co/downloads/kibana(目前最新版本:4.3.1) 下载后将其解压到某个目录即可,本文中的解压目录为: ~/app/elasticsearch-2.1.1 ~/app/logstash-2.1.1 ~/app/kibana-4.3.1-darwin-x64 注:这3个组件相互之间的关系及作用如下: Logstash(收集服务器上的日志文件) --》然后保存到 ElasticSearch(搜索引擎) --》Kibana提供友好的web界面(从ElasticSearch读取数据进行展示) 二、启动elasticsearch 2.1 进入elasticsearch目录\bin ./elasticsearch 顺利的话,启动成功后,在浏览器里输入http://localhost:9200/应该能看到类似下面的输出: 1 { 2 "name" : "Atalanta", 3 "cluster_name" : "elasticsearch", 4 "version" : { 5 "number" : "2.1.1", 6 "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71", 7 "build_timestamp" : "2015-12-15T13:05:55Z", 8 "build_snapshot" : false, 9 "lucene_version" : "5.3.1" 10 }, 11 "tagline" : "You Know, for Search" 12 } 2.2安装kopf插件 先按Ctrl+C停止elasticsearch,接下来准备安装插件,elasticsearch有大量插件资源,用于增加其功能,bin目录下,输入 ./plugin list可以查看当前安装的插件列表,我们刚刚全新安装,输出的是一个空列表,继续输入 ./plugin install lmenezes/elasticsearch-kopf 将会联网安装kopf插件,安装完成后,再次用./plugin list确认下: Installed plugins in /Users/yjmyzz/app/elasticsearch-2.1.1/plugins: - .DS_Store - kopf 如果输出上述类似,表明kopf安装成功。 然后重启elasticsearch,浏览器里输入http://localhost:9200/_plugin/kopf,将会看到类似下面的界面,可以很直观的看到elasticsearch的一些运行状况 以上操作都ok后,建议Ctrl+C关掉,改用nohup ./elasticsearch & 将其做为后台进程运行,以免退出。 三、logstash的启动与配置 3.1新建索引配置文件 ~/app/logstash-2.1.1/bin 下 mkdir conf vi conf/logstash-indexer.conf 内容如下: 1 input { 2 file { 3 path => ["/var/opt/log/a.log","/var/opt/log/b.log"] 4 } 5 } 6 7 output { 8 elasticsearch { hosts => ["localhost:9200"] } 9 stdout { codec => rubydebug } 10 } 上面几个步骤的意思就是创建一个名为logstash-indexer.conf的配置文件,input{file{...}}部分指定的是日志文件的位置(可以多个文件),一般来说就是应用程序log4j输出的日志文件。output部分则是表示将日志文件的内容保存到elasticsearch,这里hosts对应的是一个数组,可以设置多个elasticsearch主机,相当于一份日志文件的内容,可以保存到多个elasticsearch中。 至于第9行的stdout,则表示终端的标准输出,方便部署时验证是否正常运行,验证通过后,可以去掉。 3.2启动 继续保持在logstash的bin目录下,输入 ./logstash -f conf/logstash-indexer.conf 稍等片刻,如果看到Logstash startup completed,则表示启动成功。然后另开一个终端窗口,随便找个文本编辑工具(比如:vi),向/var/opt/log/a.log里写点东西,比如:hello world之类,然后保存。观察logstash的终端运行窗口,是否有东西输出,如果有以下类似输出: 1 { 2 "message" => "hello world", 3 "@version" => "1", 4 "@timestamp" => "2016-01-08T14:35:16.834Z", 5 "host" => "yangjunmingdeMacBook-Pro.local", 6 "path" => "/var/opt/log/a.log" 7 } 说明logstash工作正常,此时浏览http://localhost:9200/_search?pretty 也应该能看到一堆输出,表明elasticsearch接收到logstash的数据了。 四、kibana的配置及启动 4.1修改配置文件 ~/app/kibana-4.3.1-darwin-x64/config 下有一个配置文件kibana.yml,大概在12行的位置,改成下面这样: 1 # The Elasticsearch instance to use for all your queries. 2 elasticsearch.url: "http://localhost:9200" 即:指定elasticsearch的访问位置 4.2启动 ~/app/kibana-4.3.1-darwin-x64/bin 下,输入: ./kibana 注:如果启动不成功,请检查版本是否为4.3.1,kibana必须与elasticsearch的版本匹配,一般说来,都从官网下载最新版即可。 启动完成后,在浏览器里输入http://localhost:5601/即可看到kibana界面,首次运行,会提示创建index,直接点击Create按钮即可。 然后,就能看到类似下面的界面了: 参考文章: http://baidu.blog.51cto.com/71938/1676798?utm_source=tuicool&utm_medium=referral https://www.elastic.co/products http://www.cnblogs.com/yjf512/p/4199105.html http://kibana.logstash.es/content/ http://www.cnblogs.com/yjmyzz/p/ELK-install-tutorial.html

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

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等操作系统。

用户登录
用户注册