首页 文章 精选 留言 我的

精选列表

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

Developerkit & Link Develop Demo 环境配置指南

一、设备端开发 Visual Studio Code 本体:https://code.visualstudio.com/ 插件: C/C++ 和 alios-studio Python 2.7 下载地址:https://www.python.org/downloads/。 注意:macOS 及部分 Linux 系统已预装,Windows 及 部分 Linux 系统需要手动安装。 Windows 用户注意:安装 Python 时,务必选择 Add Python to environment variables 及 Install pip。 Git 下载地址:https://git-scm.com/downloads Windows 用户安装后,在任意文件夹右键快捷进入 Git bash,就可以使用 UNIX 终端指令,方便开发。 开发板 USB 驱动 下载

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

Developerkit & Link Develop Demo 开发指南

一、设备端接入 0. 功能概要 本实例通过在设备端运行 AliOS Things 系统,并采集加速度传感器数据上报到云端,同时联动 Web App 显示数据图表,帮助开发者深度体验物联网一站式开发。 1. 注册阿里云账号 Link Develop 平台依托阿里云,使用前需要先注册阿里云账号:打开浏览器书签注册阿里云账号:https://account.aliyun.com/register/register.htm 2. 开通试用 Link Develop 平台 打开浏览器书签 Link Develop 平台网页:https://linkdevelop.aliyun.com/,点击开通服务。 平台即申请即开通,目前免费使用。 3. 新建项目 新建一个项目,名称任意。进入项目,点击资源管理 —— 添加官方服务 —— 勾选物的管理服务 —— 确定 ——

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

jQuery案例demo -- 鼠标移入显示蒙版

效果展示 效果展示.png HTML代码: <ul id="fourth_tab"> <li> <img src="img/camera_green.png" alt="绿色相机" class="camera"> <p class="title"><span>摄影小白成长记</span></p> <p>The best preparation for tomorrow is doing your best today.</p> </li> <li style="background-color: red"> <div class="show_more"><a href="html/test.html">点击查看更多</a></div> <img src="img/bus.webp" alt="公交车"> </li> <li style="background-color: red"> <div class="show_more"><a href="html/test.html">点击查看更多</a></div> <img src="img/life.png" alt="落叶"> </li> </ul> CSS代码: #fourth_tab li{ position: relative; border-radius: 6px; } .show_more{ width: 100%; height: 100%; line-height: 230px; background-color: #9f594d; position: absolute; display: none; font-size: 22px; font-weight: bolder; letter-spacing: 4px; cursor: pointer; } .show_more a{ text-decoration: none; color: #fbfff9; } Javascript代码: $('#fourth_tab li').mouseenter(function(){ $(this).find('.show_more').slideDown(200); }); $('#fourth_tab li').mouseleave(function(){ $(this).find('.show_more').slideUp(200); }); 个人笔记: 1.这里主要使用到jQuery的slideUp()、slideDown()函数 2.在js代码中,使用$(this)来做限制。鼠标移入第二张图片,那么这张图片上面显示蒙版,其他的图片不显示

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

一个简易的区块链demo

别人写的python版本 python版本源码地址: https://github.com/dvf/blockchain#installation 环境准备 我使用的是ubuntu 16.04,其它linux版本也可以。 需要安装python3.6+(步骤省略) 安装pipenv $ pip install pipenv 1 创建虚拟执行环境(类似docker一样) root@pony-virtual-machine:~# pipenv --python=python3.6 Creating a virtualenv for this project… Using /usr/bin/python3.6tocreate virtualenv… ⠋Running virtualenv with interpreter /usr/bin/python3.

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

【Android Demo】简单手机通讯录

Android 系统给我们提供了访问通讯录的接口,通过接口获取通讯录信息。Adapter 与 View 的连接主要依靠 getView 这个方法返回我们需要的自定义 view。 ListView 是 Android App 中一个最最最常用的控件了,所以如何让 ListView 流畅运行,获取良好的用户体验是非常重要的。 对 ListView 优化就是对 Adapter 中的 getView 方法进行优化。 核心内容: 1.获取手机通讯录 2.数据封装 3.创建 Adapter 4.优化适配器 开发环境:Eclipse 效果图: 步骤: 1.新建项目,新建GetNumber.class 类,用来获取通讯录中的信息 package com.yanis.getmyphonenumber; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; public class GetNumber { public static List<PhoneInfo> lists = new ArrayList<PhoneInfo>(); public static String getNumber(Context context) { Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); String phoneNumber; String phoneName; while (cursor.moveToNext()) { phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));//电话号码 phoneName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));//姓名 PhoneInfo info = new PhoneInfo(phoneName, phoneNumber); lists.add(info); System.out.println(phoneName+phoneNumber); } return null; } } 2.添加权限 <!-- 读取联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS"/> 3.新建PhoneInfo.class 类作为通讯录信息封装类 package com.yanis.getmyphonenumber; /** * * @author yechao * @说明 通讯录信息封装类 */ public class PhoneInfo { private String phoneName; private String phoneNumber; public PhoneInfo(String phoneName, String phoneNumber) { setPhoneName(phoneName); setPhoneNumber(phoneNumber); } public String getPhoneName() { return phoneName; } public void setPhoneName(String phoneName) { this.phoneName = phoneName; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } } 4.自定义 ListView 的适配器类 MyAdapter.class package com.yanis.getmyphonenumber; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private List<PhoneInfo> lists; private Context context;//承接上下文 public MyAdapter(List<PhoneInfo> lists,Context context) { this.lists = lists; this.context = context; } //返回集合的数量 @Override public int getCount() { return lists.size(); } //返回当前数据 @Override public Object getItem(int position) { return lists.get(position); } //获取当前ID @Override public long getItemId(int position) { return position; } //返回当前视图 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder ; if(convertView==null) { convertView = LayoutInflater.from(context).inflate(R.layout.call,null); holder = new ViewHolder(); holder.tvName = (TextView)convertView.findViewById(R.id.tv_Name); holder.tvNumber = (TextView)convertView.findViewById(R.id.tv_Number); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.tvName.setText(lists.get(position).getPhoneName()); holder.tvNumber.setText(lists.get(position).getPhoneNumber()); return convertView; } private static class ViewHolder{ TextView tvName; TextView tvNumber; } } 5.最后就是主界面代码,至于布局太简单就不列出来了,有兴趣的童鞋可以查看源代码 package com.yanis.getmyphonenumber; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class MainActivity extends Activity { private ListView listView; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GetNumber.getNumber(this); initView(); } private void initView() { listView =(ListView) findViewById(R.id.listView); adapter = new MyAdapter(GetNumber.lists, this); listView.setAdapter(adapter); } } 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/4312221.html,如需转载请自行联系原作者

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

常用界面布局(LinearLayout以此做的DEMO)

线性布局 如果垂直排列,则每行仅包含一个界面元素,如果水平排列,则每列仅包含一个界面元素 框架布局 表格布局 相对布局(用的最多啦,你懂的) 绝对布局(最不常用的,你也懂的) Gravity: 该属性用于控制布局中控件的对齐方式,如果是没有子控件的控件设置此属性,则表示其内容的对齐方式,比如说TextView里面的文字的对齐方式,若是有子控件的控件设置此属性,则表示其子控件的对齐方式哦。 Layout_weight很有用的嘛,呵,,, 相对布局: 相对父控件的属性: android:layout_alignLeft=""----》》郁闷,此处我错了。 android:layout_alignParentRight="true" 相对子控件的属性: android:layout_toLeftOf="@id/Cancel" 临时小笔记: 所有控件中的ID详细解决为: @+id/TextView01 其中@表示后面的字符串是ID资源;加号(+)表示需要建立新资源名称,并添加到R.java文件中;斜杠后面的字符串(TextView01)表示新资源的名称,如果属于还是新添加的,或属于Android框架的ID资源,则不需要使用加号(+),但必须添加Android包的命名空间,例如:android:id="android:id/empty" 本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/733347,如需转载请自行联系原作者

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

【Android Demo】图片之画廊效果(Gallery Switcher)

1.介绍 通过Gallery和ImageSwitcher结合的结果,上面的是ImageSwitcher,下面的是Gallery,通过滑动Gallery内的图片或单击图片,即可带动ImageSwitcher图片的跳转! 2.效果图 3.XML文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageSwitcher android:id="@+id/imageSwitcher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <Gallery android:id="@+id/gallery" android:background="#55000000" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:spacing="10dp" /> </RelativeLayout> 4.Java代码 package wei.ye.g1; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ViewSwitcher.ViewFactory; public class Hualang extends Activity { // 显示图片的资源 private static int[] images = { R.drawable.baos, R.drawable.caoc, R.drawable.chenyj, R.drawable.chenyy, R.drawable.gouj, R.drawable.guany, R.drawable.hanx, R.drawable.lp, R.drawable.liub, R.drawable.qinq, R.drawable.tiemz, R.drawable.wus, R.drawable.xiangy, R.drawable.yuef, R.drawable.zhaoky, R.drawable.zhugl, R.drawable.xis, R.drawable.yingz }; Gallery gallery; ImageSwitcher is; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.hualang); setTitle("这是Gallery和ImageSwitcher的效果"); gallery = (Gallery) findViewById(R.id.gallery); is = (ImageSwitcher) findViewById(R.id.imageSwitcher); gallery.setAdapter(new ImageAdapter(this)); // 让选定的图片在中心显示 gallery.setSelection(images.length / 2); // 为Gallery绑定监听器; gallery.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 当在Gallery中选定一张图片是 ImageSwitcher同步显示同一张 // position%images.length 为了让图片循环显示 is.setImageResource(images[position % images.length]); } public void onNothingSelected(AdapterView<?> parent) { } }); is.setFactory(new ImageFactory(this)); } private class ImageAdapter extends BaseAdapter { private Context context; public ImageAdapter(Context context) { this.context = context; } // 可以return images.lenght(),在这里返回Integer.MAX_VALUE // 是为了使图片循环显示 public int getCount() { return Integer.MAX_VALUE; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ImageView iv = new ImageView(context); iv.setImageResource(images[position % images.length]); iv.setLayoutParams(new Gallery.LayoutParams(90, 90)); iv.setAdjustViewBounds(true); return iv; } } private class ImageFactory implements ViewFactory { private Context context; public ImageFactory(Context context) { this.context = context; } public View makeView() { ImageView iv = new ImageView(context); iv.setLayoutParams(new ImageSwitcher.LayoutParams(200, 200)); return iv; } } } PS:图片是读取drawable文件里的,不是SD卡里的 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/archive/2012/04/12/2444263.html,如需转载请自行联系原作者

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

阿里云物联网平台广播消息示例Demo

概述 物联网平台支持广播通信,即向指定产品下的全量在线设备发送消息。设备无需订阅广播Topic,即可收到服务器发送的广播消息;也可以根据需求订阅带有:identifer自定义字符串的Topic,实现设备端广播消息接收。 Step By Step 1、Device Code import com.alibaba.taro.AliyunIoTSignUtil; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import java.util.HashMap; import java.util.Map; public class BroadCastDemo { // 设备三元组信息 public static String productKey = "a1o9N******"; public static String deviceName = "device1"; public static String deviceSecret = "7Ukl6Ka80nIEXhUwCmw7XrUC********"; public static String regionId = "cn-shanghai"; // 自定义topic,在产品Topic列表位置定义 private static String subTopic = "/broadcast/a1o9N******/group2"; ///broadcast/a1o9N******/${identifer} 广播topic,identifer用户自定义字符串 private static MqttClient mqttClient; public static void main(String[] args) { initAliyunIoTClient(); try { mqttClient.subscribe(subTopic); // 订阅Topic } catch (MqttException e) { System.out.println("error:" + e.getMessage()); e.printStackTrace(); } // 设置订阅监听 mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable throwable) { System.out.println("connection Lost"); } @Override public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { System.out.println("Sub message"); System.out.println("Topic : " + s); System.out.println(new String(mqttMessage.getPayload())); //打印输出消息payLoad } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { } }); } /** * 初始化 Client 对象 */ private static void initAliyunIoTClient() { try { // 构造连接需要的参数 String clientId = "java" + System.currentTimeMillis(); Map<String, String> params = new HashMap<>(16); params.put("productKey", productKey); params.put("deviceName", deviceName); params.put("clientId", clientId); String timestamp = String.valueOf(System.currentTimeMillis()); params.put("timestamp", timestamp); // cn-shanghai String targetServer = "tcp://" + productKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com:1883"; String mqttclientId = clientId + "|securemode=3,signmethod=hmacsha1,timestamp=" + timestamp + "|"; String mqttUsername = deviceName + "&" + productKey; String mqttPassword = AliyunIoTSignUtil.sign(params, deviceSecret, "hmacsha1"); connectMqtt(targetServer, mqttclientId, mqttUsername, mqttPassword); } catch (Exception e) { System.out.println("initAliyunIoTClient error " + e.getMessage()); } } public static void connectMqtt(String url, String clientId, String mqttUsername, String mqttPassword) throws Exception { MemoryPersistence persistence = new MemoryPersistence(); mqttClient = new MqttClient(url, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); // MQTT 3.1.1 connOpts.setMqttVersion(4); connOpts.setAutomaticReconnect(false); connOpts.setConnectionTimeout(10); // connOpts.setCleanSession(true); connOpts.setCleanSession(false); connOpts.setUserName(mqttUsername); connOpts.setPassword(mqttPassword.toCharArray()); connOpts.setKeepAliveInterval(60); mqttClient.connect(connOpts); } } 参考链接:基于开源JAVA MQTT Client连接阿里云IoT 2、 PubBroadcast 接口调用 3、设备端测试情况 4、PubBroadcast API 参数:TopicFullName 解释可选参数: 不赋值,表示推送消息到指定ProductKey的全量在线设备。设备端收到的广播Topic格式为/sys/${productKey}/${deviceName}/broadcast/request/${MessageId},其中MessageId由物联网平台生成。 赋值,表示推送消息到指定ProductKey的已订阅广播Topic的在线设备。传入要接收广播消息的Topic全称,格式为:/broadcast/${productKey}/自定义字段。其中,${productKey}是要接收广播消息的具体产品ProductKey;自定义字段中您可以指定任意字段 注意: 广播Topic是在设备开发时编码定义的,无需控制台创建。 一个广播Topic最多可被1,000个设备订阅。如果您的设备超过数量限制,您可以对设备进行分组。例如,如果您有5,000个设备,您可以将设备按每组1,000个,而分成5组。您需要分5次调用广播Topic,自定义字段分别设置为group1/2/3/4/5,然后让每组设备分别订阅各自分组的广播Topic。 更多参考 PubBroadcast广播通信

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

Casbin+Gin+XORM的权限控制demo(二)

casbin的增删查(casbin没有update的API,如果需要更新policy,那么只有先删除再添加) 还是直接上代码 package main import ( "fmt" "log" "github.com/casbin/casbin/v2" xormadapter "github.com/casbin/xorm-adapter/v2" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" ) func main() { a, err := xormadapter.NewAdapter("mysql", "rbac:123456@tcp(127.0.0.1:3306)/rbac_db?charset=utf8", true) if err != nil { log.Printf("连接数据库错误: %v", err) return } e, err := casbin.NewEnforcer("rbac_models.conf", a) if err != nil { log.Printf("初始化casbin错误: %v", err) return } //从DB加载策略 e.LoadPolicy() //获取router路由对象 r := gin.New() //增加policy r.POST("/api/v1/add", func(c *gin.Context) { fmt.Println("增加Policy") if ok, _ := e.AddPolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy已经存在") } else { fmt.Println("增加成功") } }) //删除policy r.DELETE("/api/v1/delete", func(c *gin.Context) { fmt.Println("删除Policy") if ok, _ := e.RemovePolicy("admin", "/api/v1/world", "GET"); !ok { fmt.Println("Policy不存在") } else { fmt.Println("删除成功") } }) //获取policy r.GET("/api/v1/get", func(c *gin.Context) { fmt.Println("查看policy") list := e.GetPolicy() for _, vlist := range list { for _, v := range vlist { fmt.Printf("value: %s, ", v) } } }) //使用自定义拦截器中间件 r.Use(Authorize(e)) //创建请求 r.GET("/api/v1/hello", func(c *gin.Context) { fmt.Println("Hello 接收到GET请求..") }) r.Run(":9000") //参数为空 默认监听8080端口 } //拦截器 func Authorize(e *casbin.Enforcer) gin.HandlerFunc { return func(c *gin.Context) { //获取请求的URI obj := c.Request.URL.RequestURI() //获取请求方法 act := c.Request.Method //获取用户的角色 sub := "admin1" //判断策略中是否存在 if ok, _ := e.Enforce(sub, obj, act); ok { fmt.Println("恭喜您,权限验证通过") c.Next() } else { fmt.Println("很遗憾,权限验证没有通过") c.Abort() } } }

资源下载

更多资源
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等操作系统。

用户登录
用户注册