自定义Tango Control设备服务在Ubuntu中的测试

news2024/11/18 16:52:10

文章目录

    • 环境
    • create a device class
    • compile the device class
    • register the device
    • start the device
    • explore the device
    • 故障问题解决
    • 参考

继续上一篇:

https://blog.csdn.net/woshigaowei5146/article/details/128443892?spm=1001.2014.3001.5501

环境

虚拟机:VMware
Ubuntu:20.04LTS
Tango:9.3.5

create a device class

启动Tango,jive,pogo,astor

sudo /usr/local/tango/bin/tango start

/usr/local/tango/bin/jive &

/usr/local/tango/bin/pogo &

/usr/local/tango/bin/astor &

后来发现pogo经常出现加载不出来的情况。但是偶尔会有一次可以打开,暂未找到规律,随机事件。
在这里插入图片描述
https://github.com/tango-controls/pogo/issues/83

在Pogo中定义类及变量在这里插入图片描述
:
File-Export package,检查所有的headers。该工具将创建一个包含packages的新文件夹。

File -> Generate 点击 OK。
在这里插入图片描述

compile the device class

cd packaging
./autogen.sh
./configure --prefix=$HOME/packaging
make
make install

如果报错:./autogen.sh: 3: autoreconf: not found

sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

https://www.iteye.com/blog/shangxun-1938687

如果提示:Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.,在bashrc添加:并重新configure

export PKG_CONFIG_PATH=/usr/local/tango/lib/pkgconfig

如果一切正常,您将在src目录中看到这些文件:
在这里插入图片描述

register the device

打开 Jive - Edit -> Create Server
在这里插入图片描述
填写如下表格:
在这里插入图片描述

TangoQuickStart/test
TangoQuickStart
training-laboratory/quick-start/0

点击 Register server.

start the device

为了启动设备,使用命令行,转到编译c++类的文件夹

cd packaging/src/

使用下面的命令:

<TangoClassName> <instance>

TangoClassName是Pogo和Jive创建的类名称,instance 是TANGO数据库的实例名称(在Jive创建)
输入:

./TangoQuickStart test

在这里插入图片描述

explore the device

修改 TangoQuickStart.cpp:主要是增加:set_state(Tango::RUNNING);

/*----- PROTECTED REGION ID(TangoQuickStart.cpp) ENABLED START -----*/
//=============================================================================
//
// file :        TangoQuickStart.cpp
//
// description : C++ source for the TangoQuickStart class and its commands.
//               The class is derived from Device. It represents the
//               CORBA servant object which will be accessed from the
//               network. All commands which can be executed on the
//               TangoQuickStart are implemented in this file.
//
// project :     test
//
// This file is part of Tango device class.
// 
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
// 
//
//
//=============================================================================
//                This file is generated by POGO
//        (Program Obviously used to Generate tango Object)
//=============================================================================


#include <TangoQuickStart.h>
#include <TangoQuickStartClass.h>

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart.cpp

/**
 *  TangoQuickStart class description:
 *    test description
 */

//================================================================
//  The following table gives the correspondence
//  between command and method names.
//
//  Command name  |  Method name
//================================================================
//  State         |  Inherited (no method)
//  Status        |  Inherited (no method)
//================================================================

//================================================================
//  Attributes managed is:
//================================================================
//  boolTest  |  Tango::DevBoolean	Scalar
//================================================================

namespace TangoQuickStart_ns
{
/*----- PROTECTED REGION ID(TangoQuickStart::namespace_starting) ENABLED START -----*/

//	static initializations

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::namespace_starting

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::TangoQuickStart()
 *	Description : Constructors for a Tango device
 *                implementing the classTangoQuickStart
 */
//--------------------------------------------------------
TangoQuickStart::TangoQuickStart(Tango::DeviceClass *cl, string &s)
 : TANGO_BASE_CLASS(cl, s.c_str())
{
	/*----- PROTECTED REGION ID(TangoQuickStart::constructor_1) ENABLED START -----*/
	init_device();
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::constructor_1
}
//--------------------------------------------------------
TangoQuickStart::TangoQuickStart(Tango::DeviceClass *cl, const char *s)
 : TANGO_BASE_CLASS(cl, s)
{
	/*----- PROTECTED REGION ID(TangoQuickStart::constructor_2) ENABLED START -----*/
	init_device();
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::constructor_2
}
//--------------------------------------------------------
TangoQuickStart::TangoQuickStart(Tango::DeviceClass *cl, const char *s, const char *d)
 : TANGO_BASE_CLASS(cl, s, d)
{
	/*----- PROTECTED REGION ID(TangoQuickStart::constructor_3) ENABLED START -----*/
	init_device();
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::constructor_3
}

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::delete_device()
 *	Description : will be called at device destruction or at init command
 */
//--------------------------------------------------------
void TangoQuickStart::delete_device()
{
	DEBUG_STREAM << "TangoQuickStart::delete_device() " << device_name << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::delete_device) ENABLED START -----*/
	
	//	Delete device allocated objects
        if (attr_boolTest_read) {
            delete attr_boolTest_read;
            attr_boolTest_read = 0;
        
        }
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::delete_device
	delete[] attr_boolTest_read;
}

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::init_device()
 *	Description : will be called at device initialization.
 */
//--------------------------------------------------------
void TangoQuickStart::init_device()
{
	DEBUG_STREAM << "TangoQuickStart::init_device() create device " << device_name << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::init_device_before) ENABLED START -----*/
	
	//	Initialization before get_device_property() call
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::init_device_before
	
	//	No device property to be read from database
	
	attr_boolTest_read = new Tango::DevBoolean;
	*attr_boolTest_read = true;
        attr_boolTest_write = false;
	/*----- PROTECTED REGION ID(TangoQuickStart::init_device) ENABLED START -----*/
	
	//	Initialize device
	set_state(Tango::RUNNING);
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::init_device
}


//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::always_executed_hook()
 *	Description : method always executed before any command is executed
 */
//--------------------------------------------------------
void TangoQuickStart::always_executed_hook()
{
	DEBUG_STREAM << "TangoQuickStart::always_executed_hook()  " << device_name << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::always_executed_hook) ENABLED START -----*/
	
	//	code always executed before all requests
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::always_executed_hook
}

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::read_attr_hardware()
 *	Description : Hardware acquisition for attributes
 */
//--------------------------------------------------------
void TangoQuickStart::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
{
	DEBUG_STREAM << "TangoQuickStart::read_attr_hardware(vector<long> &attr_list) entering... " << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::read_attr_hardware) ENABLED START -----*/
	
	//	Add your own code
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::read_attr_hardware
}
//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::write_attr_hardware()
 *	Description : Hardware writing for attributes
 */
//--------------------------------------------------------
void TangoQuickStart::write_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
{
	DEBUG_STREAM << "TangoQuickStart::write_attr_hardware(vector<long> &attr_list) entering... " << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::write_attr_hardware) ENABLED START -----*/
	
	//	Add your own code
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::write_attr_hardware
}

//--------------------------------------------------------
/**
 *	Read attribute boolTest related method
 *	Description: 
 *
 *	Data type:	Tango::DevBoolean
 *	Attr type:	Scalar
 */
//--------------------------------------------------------
void TangoQuickStart::read_boolTest(Tango::Attribute &attr)
{
	DEBUG_STREAM << "TangoQuickStart::read_boolTest(Tango::Attribute &attr) entering... " << endl;
	/*----- PROTECTED REGION ID(TangoQuickStart::read_boolTest) ENABLED START -----*/
	//	Set the attribute value
	attr.set_value(attr_boolTest_read);
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::read_boolTest
}
//--------------------------------------------------------
/**
 *	Write attribute boolTest related method
 *	Description: 
 *
 *	Data type:	Tango::DevBoolean
 *	Attr type:	Scalar
 */
//--------------------------------------------------------
void TangoQuickStart::write_boolTest(Tango::WAttribute &attr)
{
	DEBUG_STREAM << "TangoQuickStart::write_boolTest(Tango::WAttribute &attr) entering... " << endl;
	//	Retrieve write value
	Tango::DevBoolean	w_val;
	attr.get_write_value(w_val);
	/*----- PROTECTED REGION ID(TangoQuickStart::write_boolTest) ENABLED START -----*/
        *attr_boolTest_read = w_val;
        attr_boolTest_write = w_val;
        DEBUG_STREAM << "Read and write attributes were set to the same value" << std::endl;
        DEBUG_STREAM << "w_val = " << w_val << std::endl;
        DEBUG_STREAM << "attr_boolTest_read = " << *attr_boolTest_read << std::endl;
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::write_boolTest
}

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::add_dynamic_attributes()
 *	Description : Create the dynamic attributes if any
 *                for specified device.
 */
//--------------------------------------------------------
void TangoQuickStart::add_dynamic_attributes()
{
	/*----- PROTECTED REGION ID(TangoQuickStart::add_dynamic_attributes) ENABLED START -----*/
	
	//	Add your own code to create and add dynamic attributes if any
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::add_dynamic_attributes
}

//--------------------------------------------------------
/**
 *	Method      : TangoQuickStart::add_dynamic_commands()
 *	Description : Create the dynamic commands if any
 *                for specified device.
 */
//--------------------------------------------------------
void TangoQuickStart::add_dynamic_commands()
{
	/*----- PROTECTED REGION ID(TangoQuickStart::add_dynamic_commands) ENABLED START -----*/
	
	//	Add your own code to create and add dynamic commands if any
	
	/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::add_dynamic_commands
}

/*----- PROTECTED REGION ID(TangoQuickStart::namespace_ending) ENABLED START -----*/

//	Additional Methods

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::namespace_ending
} //	namespace

修改TangoQuickStart.h:

/*----- PROTECTED REGION ID(TangoQuickStart.h) ENABLED START -----*/
//=============================================================================
//
// file :        TangoQuickStart.h
//
// description : Include file for the TangoQuickStart class
//
// project :     test
//
// This file is part of Tango device class.
// 
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
// 
//
//
//=============================================================================
//                This file is generated by POGO
//        (Program Obviously used to Generate tango Object)
//=============================================================================


#ifndef TangoQuickStart_H
#define TangoQuickStart_H

#include <tango.h>


/*----- PROTECTED REGION END -----*/	//	TangoQuickStart.h

/**
 *  TangoQuickStart class description:
 *    test description
 */

namespace TangoQuickStart_ns
{
/*----- PROTECTED REGION ID(TangoQuickStart::Additional Class Declarations) ENABLED START -----*/

//	Additional Class Declarations

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::Additional Class Declarations

class TangoQuickStart : public TANGO_BASE_CLASS
{

/*----- PROTECTED REGION ID(TangoQuickStart::Data Members) ENABLED START -----*/

//	Add your own data members

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::Data Members


//	Attribute data members
public:
	Tango::DevBoolean	*attr_boolTest_read;
	Tango::DevBoolean	attr_boolTest_write;
//	Constructors and destructors
public:
	/**
	 * Constructs a newly device object.
	 *
	 *	@param cl	Class.
	 *	@param s 	Device Name
	 */
	TangoQuickStart(Tango::DeviceClass *cl,string &s);
	/**
	 * Constructs a newly device object.
	 *
	 *	@param cl	Class.
	 *	@param s 	Device Name
	 */
	TangoQuickStart(Tango::DeviceClass *cl,const char *s);
	/**
	 * Constructs a newly device object.
	 *
	 *	@param cl	Class.
	 *	@param s 	Device name
	 *	@param d	Device description.
	 */
	TangoQuickStart(Tango::DeviceClass *cl,const char *s,const char *d);
	/**
	 * The device object destructor.
	 */
	~TangoQuickStart() {delete_device();};


//	Miscellaneous methods
public:
	/*
	 *	will be called at device destruction or at init command.
	 */
	void delete_device();
	/*
	 *	Initialize the device
	 */
	virtual void init_device();
	/*
	 *	Always executed method before execution command method.
	 */
	virtual void always_executed_hook();


//	Attribute methods
public:
	//--------------------------------------------------------
	/*
	 *	Method      : TangoQuickStart::read_attr_hardware()
	 *	Description : Hardware acquisition for attributes.
	 */
	//--------------------------------------------------------
	virtual void read_attr_hardware(vector<long> &attr_list);
	//--------------------------------------------------------
	/*
	 *	Method      : TangoQuickStart::write_attr_hardware()
	 *	Description : Hardware writing for attributes.
	 */
	//--------------------------------------------------------
	virtual void write_attr_hardware(vector<long> &attr_list);

/**
 *	Attribute boolTest related methods
 *	Description: 
 *
 *	Data type:	Tango::DevBoolean
 *	Attr type:	Scalar
 */
	virtual void read_boolTest(Tango::Attribute &attr);
	virtual void write_boolTest(Tango::WAttribute &attr);
	virtual bool is_boolTest_allowed(Tango::AttReqType type);


	//--------------------------------------------------------
	/**
	 *	Method      : TangoQuickStart::add_dynamic_attributes()
	 *	Description : Add dynamic attributes if any.
	 */
	//--------------------------------------------------------
	void add_dynamic_attributes();




//	Command related methods
public:


	//--------------------------------------------------------
	/**
	 *	Method      : TangoQuickStart::add_dynamic_commands()
	 *	Description : Add dynamic commands if any.
	 */
	//--------------------------------------------------------
	void add_dynamic_commands();

/*----- PROTECTED REGION ID(TangoQuickStart::Additional Method prototypes) ENABLED START -----*/

//	Additional Method prototypes

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::Additional Method prototypes
};

/*----- PROTECTED REGION ID(TangoQuickStart::Additional Classes Definitions) ENABLED START -----*/

//	Additional Classes Definitions

/*----- PROTECTED REGION END -----*/	//	TangoQuickStart::Additional Classes Definitions

}	//	End of namespace

#endif   //	TangoQuickStart_H

重新编译

make
make install
./TangoQuickStart test

在./TangoQuickStart test运行后,可以在Jive中打开AtkPanel并控制定义的变量。
在这里插入图片描述

自带例程:在/usr/local/tango/bin运行./TangoTest test 进行测试。
在这里插入图片描述

故障问题解决

  • ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)
  • sudo /usr/local/tango/bin/tango start时出现报错:
    在这里插入图片描述

Stop MySQL using

sudo service mysql stop

or

sudo /usr/local/mysql/support-files/mysql.server stop

Start it in safe mode:

sudo mysqld_safe --skip-grant-tables --skip-networking

(the above line is the whole command)

This will be an ongoing command until the process is finished, so open another shell/terminal window, log in without a password:

mysql -u root

UPDATE mysql.user SET Password=PASSWORD('mypassword') WHERE User='root';

实测有效。

https://stackoverflow.com/questions/21944936/error-1045-28000-access-denied-for-user-rootlocalhost-using-password-y

参考

https://tango-controls.readthedocs.io/en/latest/getting-started/development/cpp/cpp-quick-start.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

布隆过滤器 以及缓存穿透问题

1. 前言 今天从客观的角度来分析下&#xff0c;什么是缓存穿透&#xff0c;什么是布隆过滤器&#xff0c;布隆过滤器是如何解决缓存穿透的。 2. 适合人群 对布隆过滤器不熟悉的人对Redis 缓存穿透不熟悉的人 3. 开始 3.1 什么是缓存穿透 其实通过上图我们可以知道&#xff0…

(七)Filter

Filter 表示过滤器&#xff0c;是JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感字符处理等等..一、Filte…

彻底理解Redis持久化

前言 大家都知道Redis一个内存数据库,它支持2种持久化方式&#xff1a;RDB(Snapshot 内存快照) &#xff0c;AOF(append only file)。持久化功能将内存中的数据同步到磁盘来避免Redis发生异常导致数据丢失的情况。当Redis实例重启时&#xff0c;即可利用之前持久化的文件实现数…

软件项目管理教程

软件项目管理 1. 软件项目管理 1.1 概述 概念 项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力 软件项目特征 目标性 相关性 周期性 独特性 没有完全一样的项目”&#xff0c;项目的这种独特性对实际项目管理有非常重要的指导意义&#xff0c;因此…

跨境电商日本市场再创纪录,亚马逊失去流量第一位置

从跨境电商服务行业市场分析人员拿到的近期的各平台的销售数据和相关工作总结来看&#xff0c;美国市场微热&#xff0c;而反观欧洲市场则有些遇冷。 此外&#xff0c;近几年的疫情及各国相关政策并未影响到跨境电商市场的整体大好趋势&#xff0c;而伴随着疫情逐渐被控制&…

认真学习MySQL中的MVCC机制

什么是MVCC&#xff1f;MVCC&#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性操作有了保证。换言之&#…

Aspose.PDF for Java系列1-使用前说明

一、关于pdf文件说明 什么是pdf文件&#xff1f; PDF是Portable Document Format的缩写&#xff0c;用来以电子形式显示文档&#xff0c;不受软件、硬件或者操作系统的影响。 最初是由Adobe开发&#xff0c;是一种基于PostScript格式的通用兼容文件格式&#xff0c;现在已成为…

当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践

本文介绍了利用开源 API 网关 APISIX 加速 NebulaGraph 多个场景的落地最佳实践&#xff1a;负载均衡、暴露接口结构与 TLS Termination。 API 网关介绍 什么是 API 网关 API 网关是位于客户端和服务器之间的“中间人”&#xff0c;用于管理、监控和保护 API。它可以在 API 之…

GAMES101 现代计算机图形学入门

Lecture1 Overview of CG 计算机图形学概述Lecture2 Review of Linear Algebra 向量与线性代数Lecture3 2D Transformation 基础变换&#xff08;二维&#xff09;3.1 线性变换 (寻找变换前后直角坐标坐标关系)3.2齐次坐标 Homogeneous Coordinate3.3 仿射变换Affine Transform…

SpringBoot2核心技术(核心功能)- 05、Web开发【5.4 数据响应与内容协商】

4、数据响应与内容协商 1、响应JSON 1.1、jackson.jarResponseBody <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> web场景自动引入了json场景<dependenc…

在黑金zynqmp 上用emmc 启动的那些坑

缘由&#xff1a;由于硬件设计可能存在问题&#xff0c;导致sd 开启动失败&#xff0c;高速的时候&#xff0c;在建立VFS 时就会引起kernel 崩溃&#xff0c;官方的板子就正常&#xff0c;自己的板子第一版硬件可以&#xff0c;第二版就不行 思路&#xff1a;从emmc 启动 替代…

Hadoop 的基础知识

Hadoop 的基础知识1. Hadoop 简介2. Hadoop 的发展简史3. Hadoop 现状4. Hadoop 特性优点5. Hadoop 发行版本6. Hadoop 架构变迁7. Hadoop 集群集体概念1. Hadoop 简介 Hadoop 官网: https://hadoop.apache.org/ Apache Hadoop 软件库是一个框架, 是 Apache 软件基金会的一款开…

IoT 物联网将如何影响 SCADA ?

IoT 物联网将如何影响 SCADA &#xff1f;-钡铼技术 随着工业物联网&#xff08;IIOT&#xff09;或工业4.0的提出&#xff0c;未来工业自动化将是大势所趋&#xff0c;机器设备运行自动化&#xff0c;人不断被机器替代。那么&#xff0c;这些发展方向会对SCADA有什么影响&…

【DevOps:一、开始】

名词安全组类似于防火墙的设置&#xff0c;打开安全组&#xff0c;但要防止被当成矿机&#xff0c;需要设置主机的容器密码VPC专有网络&#xff0c;私有网络&#xff1a;VPC虽然网段相同&#xff1a;但资源物理层隔离&#xff0c;不能使用内网相互通Ipv4网段子网计数器容器平台…

产品设计表现技能的学习要点

在产品设计过程中&#xff0c;当你心中有创意设计时&#xff0c;你需要写下创意设计&#xff0c;并生成一个例子来总结你以前的想法。此时&#xff0c;您需要设计性能。在设计性能的过程中&#xff0c;我们需要使用各种设计工具&#xff0c;这些设计工具的应用技术和方法通常称…

玩以太坊链上项目的必备技能(内联汇编 [inline assembly]-Solidity之旅十八)

概要 大抵是讲到汇编&#xff0c;身为编程开发者的我们脑瓜子早就嗡嗡作响了。看那晦涩难懂的低级汇编代码&#xff0c;敢断言&#xff0c;那一行不是我写的&#xff0c;其他行也不是我写的。 自从C语言问世&#xff0c;而后类C语言犹如雨后春笋般地搅动着IT界&#xff0c;而…

【金猿人物展】实在智能创始人、CEO孙林君:我们为什么坚定在IPA方向努力?...

‍孙林君本文由实在智能创始人、CEO孙林君撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业充满“不确定性”的2022年即将过去&#xff0c;不确定性带来的不仅是挑战&#xff0c;还有新机…

安装 Azure CL 并生成 service principal 文件

1 安装 1.1 Yum⽅式安装 For Linux distributions with yum such as RHEL, Fedora, or CentOS, theres a package for the Azure CLI. This package has been tested with RHEL 7, Fedora 19 and higher, and CentOS 7. sudo rpm --import https://packages.microsoft.com/k…

【nowcoder】笔试强训Day11

目录 一、选择题 二、编程题 2.1最近公共祖先 2.2求最大连续bit数 一、选择题 1.下面哪个标识符是合法的&#xff1f; A. 9HelloWorld B. _Hello World C. Hello*World D. Hello$World java标识符的命名规则应以字母、下划线、美元符开头&#xff0c;后跟字母、下划线…

python实战案例——采集二手车数据并分析其价值

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 环境使用: Python 3.8 Pycharm 专业版是付费的 <激活码可以免费用> 社区版是免费的 模块使用: 第三方模块 需要安装的 requests >>> pip install requests parsel >>&…