首页 文章 精选 留言 我的

精选列表

搜索[失败归因],共10006篇文章
优秀的个人博客,低调大师

MIT “AI 种菜”项目失败,还因环保问题被罚25125美元

五年时间,MIT 一个曾声称要造福难民的 AI 种菜项目被多方位证伪并且最终关停。 4月30日消息,麻省理工 MIT 永久关停由原麻省理工媒体实验室首席研究科学家 Caleb Harper 牵头的“开放农业计划(OpenAg)”项目。同一天,Caleb Harper 从 MIT 正式离职。 (MIT Media Lab 官网 OpenAg 专题页中,Harper 被标注为“过去的成员”) OpenAg 项目始于2015年,其核心产品形态类似迷你培育室,是一个四方的便携密闭箱,被称作个人食品计算机(PFC)。PFC 的硬件和软件全部开源,以便更多人做室内农业试验。PFC 内配备了农作物生长所需条件的生产装置,包括植物水培托盘、LED、传感器、泵、风扇、控制电子设备。通过开源的计算机软件,PFC 声称可培育多种植物,只要下载不同植物生长所需要的代码“食谱”,人们就可以控制密闭箱内的光照、湿度、营养成分、PH 值等参数,以帮助植物生长。 这个“开源食物计算机”PFC 一大的技术特色,就是利用深度学习来种菜。项目会搜集来自世界各地的食物计算机数据,然后利用机器学习算法,给植物生长提供更适合其习性的环境“食谱”。 起初,项目的发展设想非常美好——培育罗勒等作物,或在约旦沙漠环境中种植原属于叙利亚阿勒颇的辣椒。项目组成员称自己为“书呆子农民(nerd farmer)”,可以靠编程解决农民“靠天吃饭”的问题。Harper 还给这个产品规划了一个充满人情味的发展路线:从帮助叙利亚难民种菜开始,逐步延伸到对未来农业发展的探索,最后建造一个全球化的数字农场,让人们都能自由种植自己喜欢的植物。 Harper 曾在公开场合多次强调项目充满“人文关怀”: “PFC 的价值是文化意义上的,而不仅仅是生产意义上的”; “我不会告诉他们种什么,他们可以种植自己想要的东西,那些他们再也无法得到的东西”; “除了种出(让人们可以)活命的食物,更重要的是让难民找到了精神家园”。 但 IEEE Spectrum 的一份调查结果显示,2017至2019年期间,Harper 关于 PFC 在难民营的部署的言论被证明是在说谎。PFC 的产品功能也没得到实现。 Harper 从 OpenAg 项目中延伸,创办了 Fenome 公司。2017年1月,Fenome 派出团队前往约旦组装和安装食物计算机,计划安装完成后通过几名专门员工在犹他州远程监控项目进展,Fenome 的团队会定期与他们电话沟通,这批测试的植物包括黄瓜、罗勒和莴苣。然而计划实施非常不顺。 电源经常故障,约旦的自然条件恶劣,沙漠气候干旱,实验室室内温度有时可高达45℃。 Wi-Fi 经常失效,导致项目组无法很好完成远程的温度、湿度、PH 值等参数的监测。PFC 出现故障时,必须连上 Wi-Fi 之后重启生效。 成本上升。因机器时常故障,最初到约旦进行组装的人员,在首次部署完一个月后不得不返回约旦重启机器,之后的四个月又返回了三次…… 由于这些原因,2017年9月,约旦的项目便宣告结束。这期间,Harper 一直没有立刻停下他宣传 PFC 的脚步,而是继续在全国演讲,当然,演讲中的话也受到了质疑。 2017年3月,Harper 在佐治亚州技术峰会上说:“我们上周将 PFC 部署在了纽旦首都安曼的叙利亚难民营中。”2017年5月,Harper 在 Red Hat 的会议上还在描述约旦难民如何使用 PFC。Harper之后又在EAT 斯德哥尔摩食品论坛重申了自己的主张,称赞 PFC 为难民做的贡献。 当年9月,该项目的一个负责人在宣告项目结束时就表示,没有一台机器成功完成一个单一的生长周期。PFC也没按照原计划,完成在叙利亚难民居住地阿兹拉克营地的部署。但这时 MIT 还没有终止 OpenAg 计划。 直到2019年9月,MIT Media Lab 负责人伊藤襄一(Joichi Ito)卷入爱泼斯坦丑闻离职,OpenAg 计划才开始受到严格审查。 MIT 终于叫停OpenAg的直接原因也是审查出现问题,这次甚至涉及到环境保护。马萨诸塞州环境保护部4月22日结束了对OpenAg 项目的审查,并对 MIT 处以25125美元的罚金,原因是 OpenAg 项目将使用过的植物生长液和稀释的清洗液排入了地下排放控制井,这违反了地下井登记条款的相关规定。不过,OpenAg 永久关停之后,MIT只需支付15,000美元。 MIT 日前表示,所有托管在 MIT 媒体实验室服务器上的项目资料都将被关闭或转移。 至此,这场用 AI 帮助难民种菜的实验收场,项目牵头人 Harper 被冠上了“割韭菜”的帽子:根据 Spectrum 掌握的公司备案文件和 Fenome 内部文件,项目进行期间,Harper 为他的公司 Fenome 筹集了400万美元资金。 虽然OpenAg 被认为是在割投资人韭菜,PFC 的产品设计不切实际,但不可否认,AI+农业的项目和实践已经越来越多。实际上,单就 AI “种菜”的场景来说,已经成为一道通用的科技考题:去年,世界顶级农业大学荷兰瓦赫宁根大学举办了一场人工智能温室种植大赛,微软、英特尔、腾讯等企业参加比赛,专门研究如何用农业AI培育出高产、高性价比的黄瓜? 更为广泛的是,基于深度学习的图像识别、大数据研究、遥感等技术也被应用在农业生产中,如: 利用机器学习改进农业图像与光谱识别。图像与光谱被认为是智能农机装备的重要感知信息,机器学习可以帮助构建农工业图像与光谱数据分析模型,进而进行智能分析决策。 对农业大数据的深度学习与分析。农业大数据包括自然环境、生态环境、生物数据等等,海量的数据以及逐渐普及的智能终端为数据收集创造条件,也便于深度学习。 甚至,基于深度学习的无人机摄影也在农业生产中发挥作用。遥感影像处理领域已经实现传统的地物分类方法向深度学习完成高分遥感影像下地物分类的转变,这被认为可以实现农业地物信息的提取和分类。 …… 参考文献: 【基于深度学习的无人机影像设施农业典型地物识别方法研究】;2018.5;江西理工大学;张超 【基于机器学习的农业图像识别与光谱监测方法研究】;2018.6;山西农业大学;王璨 【面向农业领域的大数据关键技术研究】;2016.3;中国农业科学院;郭雷风

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

验签失败自查方案-支付宝接口常见错误系列

说明:验签只需要使用到支付宝公钥错误原因:1.支付宝公钥使用错误导致2.验签方法使用错误3.参数错误导致,例如乱码,带自定义参数,编码格式。自查流程(按照推荐流程检查)第一步(重点检查):支付宝公钥使用是否错误参考这个帖子自查:[url]https://openclub.alipay.com/read.php?tid=1495&fid=25[/url]第二步:验签方法错误(请使用下方的demo中的地址接收异步通知进行验签测试) 说明: 正常接口使用 AlipaySignature.rsaCheckV1,sign_type不参与签名特殊说明:AlipaySignature.rsaCheckV2方法生活号异步通知需要使用,会保留sign_type参数参与验签。

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

Android 手机插入电脑后提示“”ADB Interface"安装失败的问题

安装ADB Interface 1. Android Studio开发时,如果在真机上测试并不是那么的顺利。直接将手机插入电脑,并不能识别。往往提示ADB Interface驱动未安装。如下图所示。 2. 此时 在计算机管理中找到下面的一项,并按图操作。将本文提供的驱动安装进去(ADB_Interface安装与配置.rar,中的 adb_interface_usb_driver.zip; 最新版本的下载Android ADB Interface Drivers Download),或者你自己在网上搜这个驱动。 3. 选中驱动文件夹并安装 Android Studio ADT 但,以上并未结束。在Studio中点击Run App时,可能会提示“Connected Device offline”。此时,无法进行真机调试,原因就是android 4.2以上的版本过高,sdk的adb驱动不匹配,需要升级。我原本的adb是1.0.29,升级为1.0.31,问题就解决了。又或者在第一部分中,你直接一步到位升级到最新的ADT驱动。 对于第一种方法,具体操作为下载文件(ADB_Interface安装与配置.rar)后,找到adb1.0.32进行解压,再按照下图2进行升级操作,我就不过多废话了。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6764279.html ,如需转载请自行联系原作者

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

在Docker中运行Java:为了防止失败,你应该知道的

如果你尝试在容器中运行Java程序,或者专注于Docker,你可能会遇到一些关于JVM和堆大小的问题。本篇文章将介绍如何解决这些问题。 很多开发者会(或者应该)知道,当我们为运行在Linux容器(docker, rkt, runC, lxcfs, etc,)中的Java程序去设置JVM的GC、堆大小和运行时编译器的参数时并没有得到预想的效果。当我们通过“java -jar mypplication-fat.jar”的方式而不设置任何参数来运行一个Java应用时,JVM会根据自身的许多参数进行调整,以便在执行环境中获得最优的性能。 本篇博客将通过简单的方式向开发人员展示在将Java应用运行在Linux容器内时需要了解的内容。 我们倾向于认为容器可以像虚拟机一样可以完整的定义虚拟机的CPU个数和虚拟机的内存。容器更像是一个进程级别的资源(CPU、内存、文件系统、网络等)隔离。这种隔离是依赖于Linux内核中提供的一个 cgroups 的功能。 然而,一些可以从运行时环境中收集信息的应用程序在cgroups功能出现之前已经存在。在容器中执行命令 ‘top‘, ‘free‘, ‘ps’,也包括没有经过优化的JVM是一个会受到高限制的Linux进程。让我们来验证一下。 问题 为了展示遇到的问题,我使用命令“docker-machine create -d virtualbox –virtualbox-memory ‘1024’ docker1024”在虚拟机中创建了一个具有1GB内存的Docker守护进程,接下来在3个Linux容器中执行命令“free -h”,使其只有100MB的内存和Swap。结果显示所有的容器总内存是995MB。 即使是在 Kubernetes/OpenShift集群中,结果也是类似的。我在一个内存是15G的集群中也执行了命令使得Kubernetes Pod有511MB的内存限制(命令:“kubectl run mycentos –image=centos -it –limits=’memory=512Mi’”),总内存显示为14GB。 想要知道为什么是这样的结果,可以去阅读此篇博客文章 “ Memory inside Linux containers – Or why don’t free and top work in a Linux container? ” 我们需要知道Docker参数 (-m, –memory和–memory-swap)和Kubernetes参数 (–limits)会让Linux内核在一个进程的内存超出限制时将其Kill掉,但是JVM根本不清楚这个限制的存在,当超过这个限制时,不好的事情发生了! 为了模拟当一个进程超出内存限制时会被杀死的场景,我们可以通过命令“docker run -it –name mywildfly -m=50m jboss/wildfly”在一个容器中运行WildFly Application Server并且为其限制内存大小为50MB。在这个容器运行期间,我们可以执行命令“docker stats”来查看容器的限制。 但是过了几秒之后,容器Wildfly将会被中断并且输出信息:*** JBossAS process (55) received KILL signal *** 通过命令 “docker inspect mywildfly -f ‘{{json .State}}'”可以查看容器被杀死的原因是发生了OOM(内存不足)。容器中的“state”被记录为OOMKilled=true 。 这将怎样影响Java应用 在Docker宿主机中创建一个具有1GB内存的虚拟机(在之前使用命令已经创建完毕 “docker-machine create -d virtualbox –virtualbox-memory ‘1024’ docker1024”) ,并且限制一个容器的内存为150M,看起来已经足够运行这个在 Dockerfile中设置过参数-XX: PrintFlagsFinal 和 -XX: PrintGCDetails的Spring Boot application了。这些参数使得我们可以读取JVM的初始化参数并且获得 Garbage Collection (GC)的运行详细情况。 尝试一下: $dockerrun-it--rm--namemycontainer150-p8080:8080-m150Mrafabene/java-container:openjdk 我也提供了一个访问接口“/api/memory/”来使用String对象加载JVM内存,模拟大量的消耗内存,可以调用试试: $curlhttp://X41X:8080/api/memory 这个接口将会返回下面的信息 “Allocated more than 80% (219.8 MiB) of the max allowed JVM memory size (241.7 MiB)” 在这里我们至少有2个问题: 为什么JVM会允许241.7MiB的最大内容? 如果容器已经限制了内存为150MB,为什么允许Java分配内存到220MB? 首先,我们应该重新了解在 JVM ergonomic page 中所描述的 “maximum heap size”的定义,它将会使用1/4的物理内存。JVM并不知道它运行在一个容器中,所以它将被允许使用260MB的最大堆大小。通过添加容器初始化时的参数-XX: PrintFlagsFinal,我们可以检查这个参数的值。 $dockerlogsmycontainer150|grep-iMaxHeapSize uintxMaxHeapSize:=262144000{product} 其次,我们应该理解当在docker命令行中设置了 “-m 150M”参数时,Docker守护进程会限制RAM为150M并且Swap为150M。从结果上看,一个进程可以分配300M的内存,解释了为什么我们的进程没有收到任何从Kernel中发出的退出信号。 更多的关于Docker命令中内存限制 (–memory)和Swap (–memory-swap)的差别可以参考 这里 。 更多的内存是解决方案吗? 开发者如果不理解问题可能会认为运行环境中没有为JVM提供足够的内存。通常的解决对策就是为运行环境提供更多的内存,但是实际上,这是一个错误的认识。 假如我们将Docker Machine的内存从1GB提高到8GB(使用命令 “docker-machine create -d virtualbox –virtualbox-memory ‘8192’ docker8192”),并且创建的容器从150M到800M: $dockerrun-it--namemycontainer-p8080:8080-m800Mrafabene/java-container:openjdk 此时使用命令 “curl http://X 58X:8080/api/memory” 还不能返回结果,因为在一个拥有8GB内存的JVM环境中经过计算的MaxHeapSize大小是2092957696(~ 2GB)。可以使用命令“docker logs mycontainer|grep -i MaxHeapSize”查看。 应用将会尝试分配超过1.6GB的内存,当超过了容器的限制(800MB的RAM 800MB的Swap),进程将会被kill掉。 很明显当在容器中运行程序时,通过增加内存和设置JVM的参数不是一个好的方式。当在一个容器中运行Java应用时,我们应该基于应用的需要和容器的限制来设置最大堆大小(参数:-Xmx)。 解决方案是什么? 在Dockerfile中稍作修改,为JVM指定扩展的环境变量。修改内容如下: CMDjava-XX:PrintFlagsFinal-XX:PrintGCDetails$JAVA_OPTIONS-jarjava-container.jar 现在我们可以使用JAVA_OPTIONS的环境变量来设置JVM Heap的大小。300MB看起来对应用足够了。稍后你可以查看日志,看到Heap的值是 314572800 bytes ( 300MBi)。 Docker下,可以使用“-e”的参数来设置环境变量进行切换。 $dockerrun-d--namemycontainer8g-p8080:8080-m800M-eJAVA_OPTIONS='-Xmx300m'rafabene/java-container:openjdk-env $dockerlogsmycontainer8g|grep-iMaxHeapSize uintxMaxHeapSize:=314572800{product} 在Kubernetes中,可以使用“–env=[key=value]”来设置环境变量进行切换: $kubectlrunmycontainer--image=rafabene/java-container:openjdk-env--limits='memory=800Mi'--env="JAVA_OPTIONS='-Xmx300m'" $kubectlgetpods NAMEREADYSTATUSRESTARTSAGE mycontainer-2141389741-b1u0o1/1Running06s $kubectllogsmycontainer-2141389741-b1u0o|grepMaxHeapSize uintxMaxHeapSize:=314572800{product} 还能再改进吗? 有什么办法可以根据容器的限制来自动计算Heap的值? 事实上如果你的基础Docker镜像使用的是由Fabric8提供的,那么就可以实现。镜像fabric8/java-jboss-openjdk8-jdk使用了脚本来计算容器的内存限制,并且使用50%的内存作为上限。也就是有50%的内存可以写入。你也可以使用这个镜像来开/关调试、诊断或者其他更多的事情。让我们看一下一个Spring Boot应用的 Dockerfile : FROMfabric8/java-jboss-openjdk8-jdk:1.2.3 ENVJAVA_APP_JARjava-container.jar ENVAB_OFFtrue EXPOSE8080 ADDtarget/$JAVA_APP_JAR/deployments/ 就这样!现在,不管容器的内存限制如何,我们的Java应用将在容器中自动的调节Heap大小,而不是再根据宿主机来设置。 总结到目前为止,Java JVM还不能意识到其是运行在一个容器中 — 某些资源在内存和CPU的使用上会受到限制。因此,你不能让JVM自己来设置其认为的最优的最大Heap值。 一个解决对策是使用Fabric8作为基础镜像,它可以意识到应用程序运行在一个受限制的容器中,并且在你没有做任何事情的情况下,可以自动的调整最大Heap的值。 在JDK9中已经开始进行尝试在容器 (i.e. Docker)环境中为JVM提供cgroup功能的内存限制。 作者:Rafael Benevides 来源:51CTO

资源下载

更多资源
Nacos

Nacos

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

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

用户登录
用户注册