首页 文章 精选 留言 我的

精选列表

搜索[php扩展],共10000篇文章
优秀的个人博客,低调大师

替代还是扩展:云的下一站真是雾计算?

云计算、雾计算、霾计算,关于计算的技术名词层出不穷,常常让人难以辨别。 云计算自从2006年,Google首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会(SES San Jose)首次提出“云计算”(Cloud Computing)的概念后,到现在正好十年,云计算已经以IaaS、PaaS、SaaS三个层次,不同方式融入到整个IT架构之中。 云计算已融入我们生活 Gartner、IDC等分析机构纷纷看好未来云形势,认为云计算市场可开发空间很大,公有云将成为主体。但是,在云计算仍在快速发展的今天,似乎有些人已经早在5年前,为我们想好了“退路”。 有人说,思科为了自己的战略发展需要发明了“雾计算(Fog Computing)”这个概念,但实际上雾计算的第一次出现是因为科学家对云计算数据安全问题而提出的。即美国纽约哥伦比亚大学的斯特尔佛教授(Prof. Stolfo)提出“雾计算”是希望利用“雾”来阻挡黑客入侵。 雾计算(图片来源于网络) 如今看来,不管当初“雾计算”的提出目的或者推广目的是什么,只要符合发展需求,都会实现的。 物联网的发展正需要雾计算的帮助。毫无疑问,未来世界的数据量会持续增加,传感器迅速发展。对于大量的数据信息,可以分为需要及时计算和无需及时计算的两种类型。而无需及时计算的数据可以在云端进行存储、计算;但是对于需要及时计算的这种数据,上传到云端会加大时延。所以雾计算是解决物联网时代数据及时分析的有效途径。 正如我们所理解的:雾是更贴近地面的云。 如此看来,雾计算无论是对于企业还是个人都有利处。对于个人用户来说,如果手机里的软件需要升级,也不必到云端去升级,只需在最近的地方通过“雾计算”的设备升级就可以了;对于企业而言,大连数据可以在雾计算中进行实时分析,避免了在云计算之间的传输,提升了企业的工作效率。 云计算or雾计算 可以说,雾计算在极低时延、辽阔的地理分布、带有大量网络节点的大规模传感器网络用来监控环境、支持高移动性、支持实时互动、支持多样化的软硬件设备、支持云端在线分析等方面具有优势。 但是雾计算也存在一些弊端。比如网络堵塞、软件架构、安全、隐私以及采用什么商业模式等等。 应该说,雾计算是云计算的一种延伸,是互补,并非相互替代关系。当然,雾计算也会像大多数新技术、新概念一样遇到各种各样的问题,但是最终都会得到解决。 本文转自d1net(转载)

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

android 图片选择,可选择图片,视频,音频,文件,方便扩展

AndroidFilePicker android file picker ,you can choose image,video,file,etc.. Image selector library for Android. Support single choice、multi-choice、cropping image and preview image. Quick start 1) Add Library module as a dependency in your build.gradle file. or Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url 'https://jitpack.io' } } } Step 2. Add the dependency dependencies { compile 'com.github.BrillantZhao:AndroidFilePicker:1.0.2' } 2) Declare permission in your AndroidManifest.xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 3) 图片选择 int mode = selectMode.getCheckedRadioButtonId() == R.id.mode_multiple ? ImagePickActivity.MODE_MULTIPLE : ImagePickActivity.MODE_SINGLE; boolean isShow = showCamera.getCheckedRadioButtonId() == R.id.camera_yes ? true : false; boolean isPreview = enablePreview.getCheckedRadioButtonId() == R.id.preview_enable ? true : false; boolean isCrop = enableCrop.getCheckedRadioButtonId() == R.id.crop_enable ? true : false; ImagePickActivity.start(ImageActivity.this, maxSelectNum, mode, isShow, isPreview, isCrop, ImagePickActivity.REQUEST_IMAGE); same this /** * 启动图片选择页面 * * @param activity * @param maxSelectNum 最大选择图片数量 * @param mode 单选or多选 * @param isShow 是否展示照相机 * @param enablePreview 是否允许预览 * @param enableCrop 是否允许裁剪 * @param requestCode 请求码 */ public static void start(Activity activity, int maxSelectNum, int mode, boolean isShow, boolean enablePreview, boolean enableCrop, int requestCode) { Intent intent = new Intent(activity, ImagePickActivity.class); intent.putExtra(EXTRA_MAX_SELECT_NUM, maxSelectNum); intent.putExtra(EXTRA_SELECT_MODE, mode); intent.putExtra(EXTRA_SHOW_CAMERA, isShow); intent.putExtra(EXTRA_ENABLE_PREVIEW, enablePreview); intent.putExtra(EXTRA_ENABLE_CROP, enableCrop); activity.startActivityForResult(intent, requestCode); } Receive result in your onActivityResult Method @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == ImagePickActivity.REQUEST_IMAGE) { ArrayList<ImageFile> images = data.getParcelableArrayListExtra(Constant.RESULT_PICK_IMAGE); // do something ... } } 4) 视频选择 boolean isShow = showCamera.getCheckedRadioButtonId() == R.id.camera_yes ? true : false; VideoPickActivity.start(VideoActivity.this, maxSelectNum, isShow,VideoPickActivity.REQUEST_VIDEO); same this /** * 启动视频选择 * * @param activity * @param maxSelectNum 最大选择数量 * @param isShow 是否展示摄像头 * @param requestCode 请求码 */ public static void start(Activity activity, int maxSelectNum, boolean isShow, int requestCode) { Intent intent = new Intent(activity, VideoPickActivity.class); intent.putExtra(EXTRA_MAX_SELECT_NUM, maxSelectNum); intent.putExtra(EXTRA_SHOW_CAMERA, isShow); activity.startActivityForResult(intent, requestCode); } Receive result in your onActivityResult Method @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == VideoPickActivity.REQUEST_VIDEO) { ArrayList<VideoFile> videoFiles = data.getParcelableArrayListExtra(Constant.RESULT_PICK_VIDEO); // do something... } } 5) 文件选择 String[] mSuffix = {"txt"}; NormalFilePickActivity.start(FileActivity.this, maxSelectNum, mSuffix, NormalFilePickActivity.REQUEST_FILE); same this /** * 启动文件选择 * * @param activity * @param maxSelectNum 最大选择数量 * @param mSuffix 文件格式集合 * @param requestCode 请求码 */ public static void start(Activity activity, int maxSelectNum, String[] mSuffix, int requestCode) { Intent intent = new Intent(activity, NormalFilePickActivity.class); intent.putExtra(EXTRA_MAX_SELECT_NUM, maxSelectNum); intent.putExtra(EXTRA_STUFFIX, mSuffix); activity.startActivityForResult(intent, requestCode); } Receive result in your onActivityResult Method @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == NormalFilePickActivity.REQUEST_FILE) { ArrayList<NormalFile> normalFiles = data.getParcelableArrayListExtra(Constant.RESULT_PICK_FILE); // do something... } } 5) 音频选择 boolean isNeedRecorder = showCamera.getCheckedRadioButtonId() == R.id.camera_yes ? true : false; AudioPickActivity.start(AudioActivity.this, maxSelectNum, isNeedRecorder, AudioPickActivity.REQUEST_AUDIO); same this /** * 启动录音选择 * * @param activity * @param maxSelectNum 最大选择数量 * @param isNeedRecorder 是否需要录音 * @param requestCode 请求码 */ public static void start(Activity activity, int maxSelectNum, boolean isNeedRecorder, int requestCode) { Intent intent = new Intent(activity, AudioPickActivity.class); intent.putExtra(EXTRA_MAX_SELECT_NUM, maxSelectNum); intent.putExtra(IS_NEED_RECORDER, isNeedRecorder); activity.startActivityForResult(intent, requestCode); } Receive result in your onActivityResult Method @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == AudioPickActivity.REQUEST_AUDIO) { ArrayList<AudioFile> audioFiles = data.getParcelableArrayListExtra(Constant.RESULT_PICK_VIDEO); // do something... } } 用到的第三方库 Glide compile ‘com.github.bumptech.glide:glide:3.7.0’ PhotoView compile ‘com.bm.photoview:library:1.4.1’ //=== compile ‘pub.devrel:easypermissions:0.2.1’ simplecropview compile ‘com.isseiaoki:simplecropview:1.0.13’ 项目地址(欢迎fork):https://github.com/BrillantZhao/AndroidFilePicker

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册