day49_BOS项目_01

  • 项目12天安排:
    • 1-2天:项目概述、搭建开发环境、主页设计、持久层和表现层设计
    • 3-6天:项目业务开发(取派员、区域、分区、定区、业务受理) --> 整个项目分为基础设置、取派、中转、路由、报表
    • 7-8天:权限控制、权限管理 --> apache shiro
    • 9-11天:工作流开发 --> activiti
    • 12天:总结
  • 今天内容安排:
    • 1、项目概述(背景介绍、常见软件类型、软件开发流程(瀑布模型))
    • 2、搭建开发(数据库、web项目、SVN管理项目)
    • 3、主页设计(jQuery的插件easyUI)
    • 4、UML工具使用PowerDesigner

1、项目概述

1.1、项目背景介绍

  • BOS --> Bussiness Operating System 业务操作系统
    • 甲方:宅急送物流公司,软件的使用方
    • 乙方:用友软件,软件的开发方
  • 本项目属于宅急送公司二期改造项目。
  • ERP--> Enterprise Resource Planning 企业资源计划,如下图所示:
  • 项目的团队人数20多个人,项目开发周期1年多(13个月),编码阶段4个月。

1.2、常见的软件类型

  • OA:Office Automation办公自动化系统
  • CRM:Customer Relationship Management客户关系管理系统
  • ERP:Enterprise Resource Planning企业资源计划平台(物资流、人力流、财务流、信息流)
  • CMS:Content Mangement System内容管理系统

1.3、软件开发流程

  • 本案例使用:瀑布模型,该模型适用于规模小、周期短的项目。
    • 0、可行性分析
    • 1、需求调研分析 --> 需求规格说明书
    • 2、设计阶段(概要设计、详细设计) --> 数据库设计、原型设计
    • 3、编码阶段(单元测试)
    • 4、测试阶段(系统测试、性能测试、白盒测试(需要检查代码,懂技术)、黑盒测试(不懂技术))
    • 5、上线和运维
  • 敏捷开发 --> 思想:分阶段,分模块

1.4、开发环境

  • 如下图所示:

1.5、技术选型

  • 如下图所示:
  • Webservice和Hession都属于远程调用技术。二者区别如下:
    • Webservice,传输的数据格式是xml格式,数据冗余比较多,网络传输比较大的话,会成为性能的瓶颈。
    • Hession,传输的数据格式是二进制格式,传输效率更高。

2、搭建开发环境

2.1、数据库环境

  • 第一步:创建一个数据库 mysql -uroot -proot
  • 第二步:创建一个数据库用户 create database bos19;
  • 第三步:为创建的用户授权 grant all on bos19.* to heize;
  • 第四步:使用新创建的数据库用户登录MySQL系统,并查看数据库 mysql -uheize -p1234 show databases;

2.2、web项目环境

  • 第一步:使用ecplise,创建一个动态web项目,将Dynamic web module version 设置为2.5,创建完成后修改jdk版本为jdk1.7。
    • 方法:选中项目右键 --> Bulid Path --> Configure Bulid Path… --> Libraries --> JRE System Library [J2SE-1.5] --> Remove,然后再 Add Library… --> JRE System Library --> Next --> Workspace default JRE (jdk1.7.0_80)
    • 由于 EAR Libraries 是一个空的库,没有什么用,所以我们把它也Remove掉。
  • 第二步:导入jar包
    • Struts 11个jar + 1个整合Springj的jar = 12个
    • Spring 10个jar + 5个依赖jar = 15 个
    • Hibernate 1个Hibernate3的jar + 6个必须jar + 1个jpa的jar + 1个slf4j-log4j12-1.7.2.jar = 9个
    • 1个数据库驱动jar
    • 共计37个jar
    • 干掉重复的低版本的jar
  • 第三步:配置web.xml(配置struts2的过滤器、配置spring的监听器、配置解决Hibernate延迟加载问题的过滤器、配置解决中文乱码的过滤器)

示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>bos19</display-name>

    <!-- 配置解决中文乱码的过滤器,注意:该方式不能解决get方式提交中文乱码,除此之外,其余的都可以 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!--        
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param> 
        -->
        <!-- encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式 -->
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 配置解决Hibernate延迟加载问题的过滤器 -->
    <filter>
        <filter-name>openSession</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openSession</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 指定spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 配置spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 配置struts2的过滤器 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>
  • 第四步:创建项目目录结构 如下图所示:
  • 第五步:在config目录下提供struts2的配置文件struts.xml和日志配置文件log4j.properties

示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 设置为开发者模式 -->
    <constant name="struts.devMode" value="true"/>
    <!-- 使Spring对象工厂成为自动默认值,struts2与spring整合,该句不是必须的,在整合jar中已经配置过了 ,这里只是为了强调-->
    <constant name="struts.objectFactory" value="spring"/>

    <package name="basicstruts2" extends="struts-default">
        <!-- 需要进行权限控制的页面访问,使用默认的类和默认的方法,默认的类和默认的方法可以不用写,这里写出来为了强调 -->
        <action name="page_*_*" class="com.opensymphony.xwork2.ActionSupport" method="execute">
            <result name="success" type="dispatcher">/WEB-INF/pages/{1}/{2}.jsp</result>
        </action>
    </package>
</struts>
  • 第六步:在config目录下提供spring的配置文件applicationContext.xml

示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 添加命名空间 ,让spring扫描含有注解类 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                              http://www.springframework.org/schema/beans/spring-beans.xsd
                              http://www.springframework.org/schema/tx 
                              http://www.springframework.org/schema/tx/spring-tx.xsd
                              http://www.springframework.org/schema/aop 
                              http://www.springframework.org/schema/aop/spring-aop.xsd
                              http://www.springframework.org/schema/context 
                              http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 加载 JdbcInfo.properties配置文件 -->
    <context:property-placeholder location="classpath:JdbcInfo.properties" />
    <!-- 配置数据源,基本四项 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- spring框架用于整合hibernate的工厂bean -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- 注入数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 注入hibernate相关属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <!-- 注入hibernate的映射文件 -->
        <property name="mappingDirectoryLocations">
            <list>
                <value>classpath:com/itheima/bos/domain</value>
            </list>
        </property>
    </bean>

    <!-- 事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 使用注解:组件扫描 -->
    <context:component-scan base-package="com.itheima.bos"/>
    <!-- 引入注解解析器:就可以使用它们了:@Controller @Service @Repository @Resource @Autowrired -->
    <context:annotation-config/>

    <!-- 事务注解:transaction-manager属性可以省略 -->
    <tx:annotation-driven/>
</beans>
  • 第七步:提供项目所需的资源文件,如下图所示:
  • `注意1`:如果所需的资源文件图标上有红色的叉,说明需要引入外部jar包servlet-api.jar和jsp-api.jar。
  • `注意2`:由于本系统的很多页面使用了`标签`,属于服务器内部转发,会跳转到WEB-INF目录下对应的页面,而该目录下的页面是受保护的,所以web.xml中需要配置服务器内部转发也要经过struts2过滤器处理后才能跳转,否则的话服务器会报404错误,配置如下图所示:

2.3、使用svn管理项目代码

  • 第一步:创建一个SVN仓库,在bos目录下右键 --> TortoiseSVN --> Create repository here
  • 第二步:修改SVN的配置文件,如下图所示: svnserve.conf

passwd

authz

  • 第三步:启动SVN服务
    • 法一:我们将启动SVN服务的操作注册成操作系统的“服务”,我们的电脑开机时SVN服务器就启动了。
    • 法二:使用批处理文件。(本案例我们采用法二)
    • `注意`:我们启动的是多仓库。
    • 批处理文件创建好后,我们双击运行该文件即可启动svn服务。
  • 第四步:eclipse上安装svn插件
  • 第五步:将搭建的web项目共享到SVN仓库
    • 首先新建资源库位置,如下图所示:

    其余步骤参考如下链接: https://www.cnblogs.com/chenmingjun/p/9513143.html#_label0 右键项目 --> Team --> Share Project…

    点击SVN --> Next --> 创建新的资源库位置 --> Next --> svn://localhost:3690/bos/code --> Next

    再次确认下,没问题,点击Next --> 第一次使用默认注释即可 --> Finish --> Yes --> 切换到提交视图,即已经纳入到svn的版本控制了,但是还没有真正上传。 在提交视图下,右键项目 --> 提交(C)

    稍等一会儿,代码提交至svn仓库界面如下:

    然后,我们切换至SVN资源库视图进行查看,如下图所示:

3、主页设计 --> jQuery EasyUI 插件

  • jQuery EasyUI的目录结构,如下图所示:
  • 在jsp页面中引入jQuery EasyUI相关的资源文件

示例代码如下:

    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/easyui/themes/icon.css">
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/easyui/jquery.easyui.min.js"></script>

3.1、layout 布局

详解如下:

    通过 $.fn.layout.defaults 重写默认的 defaults。
    这个布局(layout)是有五个区域(北区 north、南区 south、东区 east、西区 west 和中区center)的容器。
    中间的区域面板是必需的,边缘区域面板是可选的。每个边缘区域面板可通过拖拽边框调整尺寸,也可以通过点击折叠触发器来折叠面板。
    布局(layout)可以嵌套,因此用户可建立复杂的布局。

示例代码如下:

<body class="easyui-layout">
    <!-- 使用div指定区域 -->
    <div title="XX管理系统" data-options="region:'north'" style="height:100px">北部区域</div>
    <div title="系统菜单" data-options="region:'west'" style="width:200px">西部区域</div>
    <div data-options="region:'center'">中心区域</div>
    <div data-options="region:'east'" style="width:200px">东部区域</div>
    <div data-options="region:'south'" style="height:50px">南部区域</div>
</body>

效果如下图所示:

3.2、accordion 折叠面板

详解如下:

    通过 $.fn.accordion.defaults 重写默认的 defaults。
    折叠面板(accordion)允许您提供多个面板(panel),同时显示一个或多个面板(panel)。
    每个面板(panel)都有展开和折叠的内建支持。点击面板(panel)头部可展开或折叠面板(panel)主体。
    面板(panel)内容可通过 ajax 指定 'href' 属性来加载。用户可定义被选中的面板(panel)。如果为指定,则默认选中第一个面板(panel)。

示例代码如下:

<body class="easyui-layout">
    <!-- 使用div指定区域 -->  
    <div title="XX管理系统" data-options="region:'north'" style="height:100px">北部区域</div>
    <div title="系统菜单" data-options="region:'west'" style="width:200px">
        <!-- 折叠面板效果 -->
        <!-- data-options="fit:true"表示自适应或者叫填充父容器 -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 每个子div是其中的一个面板 -->
            <div title="面板一">棉衣一</div>
            <div title="面板二">test2</div>
            <div title="面板三">test3</div>
        </div>
    </div>
    <div data-options="region:'center'">中心区域</div>
    <div data-options="region:'east'" style="width:200px">东部区域</div>
    <div data-options="region:'south'" style="height:50px">南部区域</div>
</body>

效果如下图所示:

3.3、tabs 标签页/选项卡面板

详解如下:

    通过 $.fn.tabs.defaults 重写默认的 defaults。
    选项卡显示一组面板。它一次只显示一个选项卡面板。
    每个选项卡面板都有标题和一些迷你按钮工具,包括关闭按钮和其他自定义按钮。

示例代码如下:

<body class="easyui-layout">
    <!-- 使用div指定区域 -->
    <div title="XX管理系统" data-options="region:'north'" style="height:100px">北部区域</div>
    <div title="系统菜单" data-options="region:'west'" style="width:200px">
        <!-- 折叠面板效果 -->
        <!-- data-options="fit:true"表示自适应或者叫填充父容器 -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 每个子div是其中的一个面板 -->
            <div title="面板一">棉衣一</div>
            <div title="面板二">test2</div>
            <div title="面板三">test3</div>
        </div>
    </div>

    <div data-options="region:'center'">
        <!-- 选项卡面板效果 -->
        <div id="tt" class="easyui-tabs" data-options="fit:true">
            <!-- 每个子div是其中的一个面板 -->
            <div data-options="closable:true,iconCls:'icon-help'" title="面板一">棉衣一</div>
            <div title="面板二">test2</div>
            <div title="面板三">test3</div>
        </div>
    </div>
    <div data-options="region:'east'" style="width:200px">东部区域</div>
    <div data-options="region:'south'" style="height:50px">南部区域</div>
</body>

效果如下图所示:

3.4、动态添加选项卡面板

示例代码如下:

<body class="easyui-layout">
    <!-- 使用div指定区域 -->
    <div title="XX管理系统" data-options="region:'north'" style="height:100px">北部区域</div>
    <div title="系统菜单" data-options="region:'west'" style="width:200px">
        <!-- 折叠面板效果 -->
        <!-- data-options="fit:true"表示自适应或者叫填充父容器 -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 每个子div是其中的一个面板 -->
            <div title="面板一">
                <a class="easyui-linkbutton" onclick="doAdd();">百度</a>
                <script type="text/javascript">
                    function doAdd() {
                        // 动态添加一个选项卡面板
                        $("#tt").tabs("add", {
                            title:'这个可是动态添加的',
                            content:'<iframe frameborder="0" width="100%" height="100%" src="page_base_staff.action"></iframe>',
                            closable:true,
                            iconCls:'icon-search'
                        });
                    }
                </script>
            </div>
            <div title="面板二">test2</div>
            <div title="面板三">test3</div>
        </div>
    </div>

    <div data-options="region:'center'">
        <!-- 选项卡面板效果 -->
        <div id="tt" class="easyui-tabs" data-options="fit:true">
            <!-- 每个子div是其中的一个面板 -->
            <div data-options="closable:true,iconCls:'icon-help'" title="面板一">棉衣一</div>
            <div title="面板二">test2</div>
            <div title="面板三">test3</div>
        </div>
    </div>
    <div data-options="region:'east'" style="width:200px">东部区域</div>
    <div data-options="region:'south'" style="height:50px">南部区域</div>
</body>

效果如下图所示:

4、ztree 树形插件 --> jQuery 插件

  • 主要用于制作系统菜单。
  • ztree的目录结构:
  • 在jsp页面中引入ztree相关的资源文件

示例代码如下:

    <link rel="stylesheet" href="${pageContext.request.contextPath}/js/ztree/zTreeStyle.css" type="text/css">
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/ztree/jquery.ztree.all-3.5.js"></script>

4.1、使用标准json数据构造ztree

示例代码如下:

<div title="面板二">
    <!-- 展示树形菜单 :使用标准json数据构造-->
    <ul id="ztree1" class="ztree"></ul>
    <script type="text/javascript">
        $(function() {
            // 当页面加载完成后,动态创建ztree菜单
            // 设置ztree相关的属性,该属性中不用写数据,因为我们使用标准json数据构造
            var setting = {}; 
            // 构造json数据
            var zNodes = [ 
                // 每个json对象对应一个节点数据
                {name : '系统管理'}, 
                // 每个json对象对应一个节点数据
                {name : '用户管理', children : [{name : '用户添加'}, {name : '用户修改'}]}, 
                // 每个json对象对应一个节点数据
                {name : '权限管理'} 
            ];
            // 创建ztree
            $.fn.zTree.init($("#ztree1"), setting, zNodes);
        });
    </script>
</div>

效果如下图所示:

4.2、使用简单json数据构造ztree(建议使用)

由于使用标准json数据构造ztree,代码的层级结构太深,不利于阅读,所以使用简单json数据构造ztree。 示例代码如下:

<div title="面板三">
    <!-- 展示树形菜单 :使用简单json数据构造-->
    <ul id="ztree2" class="ztree"></ul>
    <script type="text/javascript">
        $(function() {
            // 当页面加载完成后,动态创建ztree菜单
            // 设置ztree相关的属性
            var setting2 = {
                data : {
                    simpleData : {
                        // 启用简单json数据描述节点数据 
                        enable : true
                    }
                }
            }; 
            // 构造json数据
            var zNodes2 = [ 
                // 每个json对象对应一个节点数据
                {id : '1', pId : '0', name : '系统管理'},
                // 每个json对象对应一个节点数据
                {id : '2', pId : '0', name : '用户管理'},
                {id : '21', pId : '2', name : '用户添加'},
                {id : '22', pId : '2', name : '用户修改'},
                // 每个json对象对应一个节点数据
                {id : '3', pId : '0', name : '权限管理'}
            ];
            // 创建ztree
            $.fn.zTree.init($("#ztree2"), setting2, zNodes2);
        });
    </script>
</div>

效果如下图所示:

4.3、发送ajax请求获取菜单数据构造ztree

示例代码如下:

<div title="面板四">
    <!-- 展示树形菜单 :发送ajax请求获取菜单数据构造ztree-->
    <ul id="ztree3" class="ztree"></ul>
    <script type="text/javascript">
        $(function() {
            // 设置ztree相关的属性
            var setting3 = {
                data : {
                    simpleData : {
                        // 启用简单json数据描述节点数据 
                        enable : true
                    }
                }
            };
            // 发送ajax请求获取json数据构造ztree
            var url = "${pageContext.request.contextPath}/json/menu.json";
            $.post(url, {}, function(data) {
                // 创建ztree
                $.fn.zTree.init($("#ztree3"), setting3, data);
            }, 'json');
        });
    </script>
</div>

效果如下图所示:

4.4、为ztree节点绑定事件

示例代码如下:

<div title="面板五">
    <!-- 展示树形菜单 :发送ajax请求获取菜单数据构造ztree,并为ztree节点绑定事件-->
    <ul id="ztree4" class="ztree"></ul>
    <script type="text/javascript">
        $(function() {
            // 设置ztree相关的属性
            var setting4 = {
                data : {
                    simpleData : {
                        // 启用简单json数据描述节点数据 
                        enable : true
                    }
                },
                // 绑定事件
                callback: {
                    onClick: function(event, treeId, treeNode) {
                        // alert(treeNode);
                        // alert(treeNode.page);
                        var page = treeNode.page;
                        if (page != undefined) {
                            // 判断当前选型卡是否已经打开
                            var e = $("#tt").tabs("exists", treeNode.name);
                            if (e) {
                                // 当前选型卡已经打开,就选中它
                                $("#tt").tabs("select", treeNode.name);
                            } else {
                                // 当前选型卡没有打开,需要动态添加一个选项卡面板
                                $("#tt").tabs("add", {
                                    title: treeNode.name,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="' + page + '"></iframe>',
                                    closable:true,
                                    iconCls:'icon-edit'
                                });
                            }
                        }
                    }
                }
            };
            // 发送ajax请求获取json数据构造ztree
            var url = "${pageContext.request.contextPath}/json/menu.json";
            $.post(url, {}, function(data) {
                // 创建ztree
                $.fn.zTree.init($("#ztree4"), setting4, data);
            }, 'json');
        });
    </script>
</div>

效果如下图所示:

5、UML工具 --> PowerDesiger 的使用

示例图片:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏为数不多的Android技巧

mac下自动切换输入法

长久以来,输入法一直是困扰mac用户的一个问题;不过随着国内厂商的跟进,这种状况得到了极大的改善。不用自己去折腾什么鼠须管了,狼厂和企鹅都做的不错。

61710
来自专栏企鹅号快讯

雅虎前端优化的35条军规

问题:我怎么才能收到你们公众号平台的推送文章呢? 内容部分 1.尽量减少HTTP请求数 80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各...

39350
来自专栏数据星河

如何对第一个Vue.js组件进行单元测试 (上)

  单元测试是持续集成的关键。通过专注于小的、独立的实体,确保单元测试始终按预期运行,使代码更加可靠,你可以放心地迭代你的项目而不必担坏事儿。

16320
来自专栏编程

VS Code+Anaconda打造舒适的Python环境

最近一直在用Anaconda编写代码,但是呢感觉对于调试不太方便,另外Anaconda更偏向于数据分析,对于Python可能更对人偏向于PyChram,但是我的...

65780
来自专栏三流程序员的挣扎

Flutter 学习记1 - Mac 下的安装配置

网上搜到一篇文章安装cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题,不知道...

1.1K30
来自专栏Fundebug

Vue UI:Vue开发者必不可少的工具

随着最新的稳定版本Vue CLI 3即将发布,是时候来看看有什么新鲜有趣的特性了。基于整个Vue.js开发者社区的反馈而大幅度改良,该版本提供了很多以工作流为中...

24150
来自专栏Jerry的SAP技术分享

小技巧:如何突破某些网站只能登陆后才能进行文字拷贝的限制

我写公众号文章时,经常需要从一些网站的文章上查阅一些资料。比如我想把这个网页上的一个标题“SAP Fiori 2.0用户体验设计概念获红点大奖”进行拷贝。

13230
来自专栏Linyb极客之路

IntelliJ IDEA 使用心得与常用快捷键

一.黑色主题 Darcula 眼睛舒服,最重要的是酷! 设置方式:FILE--Settings--Edit--Colors&Fonts--Scheme nam...

8330
来自专栏yang0range

React Native在Android当中实践(五)——常见问题

这个问题是由于ReactNative兼容64位Android手机导致的。 解决办法: 1.在项目的根目录的 gradle.properties 里面添加一行...

14620
来自专栏菩提树下的杨过

android 模拟器安装二三事

今天在测试一个手机版网站时,发现“微软的wp7”跟“苹果的iOS”对于<select>..</select>元素的触摸操作不太一样,wp7是全屏切换到一个上下滚...

390100

扫码关注云+社区

领取腾讯云代金券