首页 文章 精选 留言 我的

精选列表

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

4-学会刷Wi-Fi模块固件(刷AT指令固件)

http://www.cnblogs.com/yangfengwu/p/8965054.html 基础教程源码链接如果失效,请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-18540610442.6.36a74814ZSaRsu&id=569295486025 有可能有人问,怎么是串着讲的,因为Air202和WiFi都是用Lua开发,后面大家会看到几乎程序都是一样的, 而且都用的一样调试软件调试同样的功能,所以串着讲,不过实现同样的功能会把文章分开,方便大家学习,大家可以直接看标题,想学什么功能就看哪一节就行. AT指令下载地址 一个32M版本的,一个8M版本的 可以看一下这个图 http://wiki.ai-thinker.com/_media/esp8266/esp8266_module_list.png 开发板可以接8M的ESP02,和32M的ESP12 最新版 可以直接对接,不需要接线 其实刷固件都是GPIO0接低电平,然后复位一下,然后就可以刷固件了 先看ESP01刷固件 拨码开关 然后GPIO0接低电平的时候复位一下模块(ESP8266所有型号都是这样) 或者 然后 复位一下Wi-Fi 在8266开发工具里面找到 按照自己的固件位置 如果是用跳线帽短接的GPIO0就去掉跳线帽然后复位一下 打开串口调试助手 复位下 现在发个AT测试下 http://www.cnblogs.com/yangfengwu/p/9336274.html

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

除了AI,你不该忽视Python在这4大领域的应用!

人工智能为Python火热增长动力 借着人工智能的东风,Python在这两年逐渐火了起来,Python在编程语言排行中的不断攀升,不得不说有着人工智能的很大功劳。凭借Python简洁易于上手的语法和丰富的扩展,Python在人工领域的应用越来越广泛。 越来越多的培训机构也以“Python”和“人工智能”作为旗号和噱头,打着“21天精通Python,3个月掌握人工智能”的口号,收割了一波又一波迷茫的应届毕业生和在其他行业郁郁不得志的转行从业人员。 仿佛学了Python就会人工智能,又仿佛要学习人工智能就必须学习Python。 诚然,Python各种第三方机器学习、神经网络模块的诞生大大降低了对机器学习算法、模型的建构、训练和测试的难度。使得普通人通过简单地调用模块的API就能够实现可进行预测的某某神经网络。 但是Python不只是为了人工智能

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

4_1 偶数分解 (不明白为什么0)

歌德巴赫猜想:任何一个大于六的偶数可以拆分成两个质数的和,打印出所有的可能 输入n为偶数,输出n的所有分界可能 如输入 100 输出: 100=3+97 100=11+89 100=17+83 100=29+71 100=41+59 100=47+53 1 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] np = new int[n/2]; int cnt = 1; np[0] = 2; for(int i = 3; i < n; i += 2) { if(IsPrime(i)) { np[cnt++] = i; } } for(int i = 0; i < cnt; i++) { for(int j = i + 1; j < cnt; j++) { if(np[i] + np[j] == n) { System.out.println(n + "=" + np[i] + "+" + np[j]); } } } } static boolean IsPrime(int n) { if(n % 2 == 0) {return false;} for(int i = 3; i < Math.sqrt(n); i += 2) { if(n % i == 0) {return false;} } return true; } }

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

带你用4行代码训练RNN生成文本(附资源)

如何在无需构建和调整神经网络的情况下,轻松地生成文本?让我们来看看下面这个项目,它允许您用几行代码就能在任意文本数据集上轻松地训练出任意大小和复杂度的文本,这便是神奇的神经网络文本发生器。 文本生成对机器学习和NLP初学者来说是很有趣的项目之一,但同时也是一个相当令人生畏的项目。至少对于我来说是这样的。 值得庆幸的是,网上有各种各样的很棒的材料可以用来学习如何利用RNN生成文本,从理论到技术深入,再到那些明确地专注于实践的材料。也有一些非常好的帖子,涵盖了所有内容。所有这些材料都有一个特别的共同点:在这个过程中的某个时刻,你必须构建和调整一个RNN来完成这项工作。 这显然是一项有价值的工作,尤其是为了学习,但如果你对更高层次的抽象(无论你的原因是什么)感兴趣,又该怎么办呢?如果你是一个数据科学家,需要以RNN文本生成器的形式构建块来插入

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

智能媒体管理产品文档转换/预览功能介绍(4)--快速搭建

一、导语 智能媒体管理 提供了 Cloud Native 架构的文档转换/预览服务,本文介绍快速搭建的示例,让您用 DIY 的体验方式实现文档预览功能。 二、环境准备 2.1 准备 RAM 子账号 为了实现安全的文档转换/预览功能,本文使用 RAM 子账号来管理资源并进行代码开发。 2.1.1 创建 test 子账号 登陆 访问控制 页面,点击“用户管理”,选择“新建用户”,创建子账号 test ,创建成功如下图所示: 2.1.2 子账号授权 在创建子账号成功后的界面,选择 test 子账号,点击“授权”,确保给该子账号授予如下策略: AliyunOSSFullAccess。具有完整访问 OSS 的权限,让文档转换能够在 OSS 存储转换数据。本文为了快速搭建而选择此权限,如果需要更精细的权限控制,可以参考 OSS 子账号设置常见问题 。 Aliyu

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

Python多进程并行编程实践-mpi4py的使用

前言 在高性能计算的项目中我们通常都会使用效率更高的编译型的语言例如C、C++、Fortran等,但是由于Python的灵活性和易用性使得它在发展和验证算法方面备受人们的青睐于是在高性能计算领域也经常能看到Python的身影了。本文简单介绍在Python环境下使用MPI接口在集群上进行多进程并行计算的方法。 MPI(Message Passing Interface) 这里我先对MPI进行一下简单的介绍,MPI的全称是Message Passing Interface,即消息传递接口。 它并不是一门语言,而是一个库,我们可以用Fortran、C、C++结合MPI提供的接口来将串行的程序进行并行化处理,也可以认为Fortran+MPI或者C+MPI是一种再原来串 行语言的基础上扩展出来的并行语言。 它是一种标准而不是特定的实现,具体的可以有很多

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

Android应用程序键盘(Keyboard)消息处理机制分析(4

Step 18. EventHub.getEvent 这个函数定义在frameworks/base/libs/ui/EventHub.cpp文件中: boolEventHub::getEvent(RawEvent*outEvent) { outEvent->deviceId=0; outEvent->type=0; outEvent->scanCode=0; outEvent->keyCode=0; outEvent->flags=0; outEvent->value=0; outEvent->when=0; //NotethatweonlyallowonecallertogetEvent(),sodon'tneed //todolockinghere...onlywhenadding/removingdevices. if(!mOpened){ mError=openPlatformInput()?NO_ERROR:UNKNOWN_ERROR; mOpened=true; mNeedToSendFinishedDeviceScan=true; } for(;;){ //Reportanydevicesthathadlastbeenadded/removed. if(mClosingDevices!=NULL){ device_t*device=mClosingDevices; LOGV("Reportingdeviceclosed:id=0x%x,name=%s\n", device->id,device->path.string()); mClosingDevices=device->next; if(device->id==mFirstKeyboardId){ outEvent->deviceId=0; }else{ outEvent->deviceId=device->id; } outEvent->type=DEVICE_REMOVED; outEvent->when=systemTime(SYSTEM_TIME_MONOTONIC); deletedevice; mNeedToSendFinishedDeviceScan=true; returntrue; } if(mOpeningDevices!=NULL){ device_t*device=mOpeningDevices; LOGV("Reportingdeviceopened:id=0x%x,name=%s\n", device->id,device->path.string()); mOpeningDevices=device->next; if(device->id==mFirstKeyboardId){ outEvent->deviceId=0; }else{ outEvent->deviceId=device->id; } outEvent->type=DEVICE_ADDED; outEvent->when=systemTime(SYSTEM_TIME_MONOTONIC); mNeedToSendFinishedDeviceScan=true; returntrue; } if(mNeedToSendFinishedDeviceScan){ mNeedToSendFinishedDeviceScan=false; outEvent->type=FINISHED_DEVICE_SCAN; outEvent->when=systemTime(SYSTEM_TIME_MONOTONIC); returntrue; } //Grabthenextinputevent. for(;;){ //Consumebufferedinputevents,ifany. if(mInputBufferIndex<mInputBufferCount){ conststructinput_event&iev=mInputBufferData[mInputBufferIndex++]; constdevice_t*device=mDevices[mInputDeviceIndex]; LOGV("%sgot:t0=%d,t1=%d,type=%d,code=%d,v=%d",device->path.string(), (int)iev.time.tv_sec,(int)iev.time.tv_usec,iev.type,iev.code,iev.value); if(device->id==mFirstKeyboardId){ outEvent->deviceId=0; }else{ outEvent->deviceId=device->id; } outEvent->type=iev.type; outEvent->scanCode=iev.code; if(iev.type==EV_KEY){ status_terr=device->layoutMap->map(iev.code, &outEvent->keyCode,&outEvent->flags); LOGV("iev.code=%dkeyCode=%dflags=0x%08xerr=%d\n", iev.code,outEvent->keyCode,outEvent->flags,err); if(err!=0){ outEvent->keyCode=AKEYCODE_UNKNOWN; outEvent->flags=0; } }else{ outEvent->keyCode=iev.code; } outEvent->value=iev.value; //Useaneventtimestampinthesametimebaseas //java.lang.System.nanoTime()andandroid.os.SystemClock.uptimeMillis() //asexpectedbytherestofthesystem. outEvent->when=systemTime(SYSTEM_TIME_MONOTONIC); returntrue; } //Finishreadingalleventsfromdevicesidentifiedinpreviouspoll(). //ThiscodeassumesthatmInputDeviceIndexisinitially0andthatthe //reventsmemberofpollfdisinitializedto0whenthedeviceisfirstadded. //SincemFDs[0]isusedforinotify,weprocessregulareventsstartingatindex1. mInputDeviceIndex+=1; if(mInputDeviceIndex>=mFDCount){ break; } conststructpollfd&pfd=mFDs[mInputDeviceIndex]; if(pfd.revents&POLLIN){ int32_treadSize=read(pfd.fd,mInputBufferData, sizeof(structinput_event)*INPUT_BUFFER_SIZE); if(readSize<0){ if(errno!=EAGAIN&&errno!=EINTR){ LOGW("couldnotgetevent(errno=%d)",errno); } }elseif((readSize%sizeof(structinput_event))!=0){ LOGE("couldnotgetevent(wrongsize:%d)",readSize); }else{ mInputBufferCount=readSize/sizeof(structinput_event); mInputBufferIndex=0; } } } ...... mInputDeviceIndex=0; //Pollforevents.Mindthewakelockdance! //Weholdawakelockatalltimesexceptduringpoll().Thisworksduetosome //subtlechoreography.Whenadevicedriverhaspending(unread)events,itacquires //akernelwakelock.However,oncethelastpendingeventhasbeenread,thedevice //driverwillreleasethekernelwakelock.Topreventthesystemfromgoingtosleep //whenthishappens,theEventHubholdsontoitsownuserwakelockwhiletheclient //isprocessingevents.Thusthesystemcanonlysleepiftherearenoevents //pendingorcurrentlybeingprocessed. release_wake_lock(WAKE_LOCK_ID); intpollResult=poll(mFDs,mFDCount,-1); acquire_wake_lock(PARTIAL_WAKE_LOCK,WAKE_LOCK_ID); if(pollResult<=0){ if(errno!=EINTR){ LOGW("pollfailed(errno=%d)\n",errno); usleep(100000); } } } } 这个函数比较长,我们一步一步来分析。 首先,如果是第一次进入到这个函数中时,成员变量mOpened的值为false,于是就会调用openPlatformInput函数来打开系统输入设备,在本文中,我们主要讨论的输入设备就是键盘了。打开了这些输入设备文件后,就可以对这些输入设备进行是监控了。如果不是第一次进入到这个函数,那么就会分析当前有没有输入事件发生,如果有,就返回这个事件,否则就会进入等待状态,等待下一次输入事件的发生。在我们这个场景中,就是等待下一次键盘事件的发生了。 我们先分析openPlatformInput函数的实现,然后回过头来分析这个getEvent函数的具体的实现。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966613,如需转载请自行联系原作者

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

Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素

上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息。在GraphicsLayer中也提供了这样的方法。下面我们来学习在GraphicsLayer中如何点击查找要素。首先在MapView中添加两个Graphic要素。代码如下,注意这里用Graphic(Geometrygeometry,Symbolsymbol, Map<String,Object> attributes)来实例化Graphic,Map<String,Object> attributes是要素的属性值。详细见以下代码。TILED_WORLD_STREETS_URL为网络图层地址。 privatevoidinitLayer(){ mapView.addLayer(newArcGISTiledMapServiceLayer( TILED_WORLD_STREETS_URL)); graphicsLayer=newGraphicsLayer(); mapView.addLayer(graphicsLayer); Polygonpolygon=newPolygon(); polygon.startPath(newPoint(1.2575908509778766E7,2879410.9266042486)); polygon.lineTo(newPoint(1.284360696117901E7,3021972.232083669)); polygon.lineTo(newPoint(1.2826182801620414E7,2713089.403544925)); Map<String,Object>attr1=newHashMap<>(); attr1.put("name","广州"); attr1.put("mark","广州是南方的城市"); Graphicgraphic1=newGraphic(polygon,newSimpleFillSymbol(Color.RED),attr1); graphicsLayer.addGraphic(graphic1); Polygonpolygon2=newPolygon(); polygon2.startPath(newPoint(1.3388507951011453E7,3611225.628065273)); polygon2.lineTo(newPoint(1.3607101952746565E7,3858331.890896268)); polygon2.lineTo(newPoint(1.3613438010767872E7,3449656.14852193)); Map<String,Object>attr2=newHashMap<>(); attr2.put("name","上海"); attr2.put("mark","上海是中部的城市"); Graphicgraphic2=newGraphic(polygon2,newSimpleFillSymbol(Color.GREEN),attr2); graphicsLayer.addGraphic(graphic2); } 效果图如下: 准备工作完成后,设置MapView的点击事件, mapView.setOnSingleTapListener(newOnSingleTapListener(){ @Override publicvoidonSingleTap(floatx,floaty){ //TODOAuto-generatedmethodstub handleSingleTap(x,y); } }); 在handleSingleTap方法中来处理查询事件,GraphicsLayer查询要用到getGraphicIDs(float x, float y, int tolerance, int numberOfResults)或者getGraphicIDs(float x, float y, int tolerance)方法,前面两个参数是地图点击时的 x与y的值,tolerance是围绕x与y这个点所查询的范围,numberOfResults是要返回结果的大小。 /** *GraphicsLayer的点击查询 *@paramx *@paramy */ protectedvoidhandleSingleTap(floatx,floaty){ int[]graphicIds=graphicsLayer.getGraphicIDs(x,y,8); if(graphicIds!=null&&graphicIds.length>0){ for(inti=0;i<graphicIds.length;i++){ Graphicgraphic=graphicsLayer.getGraphic(graphicIds[i]); Map<String,Object>attr=graphic.getAttributes(); Log.i(TAG,attr.get("name")+"===="+attr.get("mark")); } } }这样当我们点击要素时,会打出以下的信息。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7751872.html ,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

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

Mario

Mario

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

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

用户登录
用户注册