- Python实现图像(边缘)锐化:梯度锐化、Roberts 算子、Laplace算子、Sobel算子的详细方法
闲人编程
pythonpython计算机视觉人工智能SobelLaplaceRoberts锐化
目录Python实现图像(边缘)锐化:梯度锐化、Roberts算子、Laplace算子、Sobel算子的详细方法引言一、图像锐化的基本原理1.1什么是图像锐化?1.2边缘检测的基本概念二、常用的图像锐化算法2.1梯度锐化2.1.1实现步骤2.2Roberts算子2.2.1实现步骤2.3Laplace算子2.3.1实现步骤2.4Sobel算子2.4.1实现步骤三、Python实现图像锐化3.1导入必
- QT +MYSQL+PYTHON,完成一个数据库表的增删改查
laocooon523857886
QTPython数据库qtmysql
ui_form.py#-*-coding:utf-8-*-##################################################################################FormgeneratedfromreadingUIfile'form.ui'####Createdby:QtUserInterfaceCompilerversion6.8.1#
- 【上市公司文本分析】Python正则表达式从非结构化文本数据中提取结构化信息——以从上市公司高管简历中提取毕业院校信息为例
Ryo_Yuki
#上市公司文本分析Pythonpython正则表达式
从CSMAR中可以获取上市公司高管的简历文本信息,虽然是非结构化的,但是隐约可以从中发现一些规律,例如毕业院校很多出现在毕业于、就读于等词语之后,专业很多出现在大学名之后,但这些又不是绝对的,也会有其他一些规则。下方代码是我基于我的300多条示例数据(如果需要练习,可以评论邮箱),经过反复修改正则表达式规则去编制的,能够做到节约85%左右的人工工作量,但无法保证绝对精确。对于其他非结构化但又有规律
- python中全局变量和局部变量详解_Python局部变量与全局变量区别原理解析
weixin_39998795
1、局部变量name="YangLi"defchange_name(name):print("beforechange:",name)name="你好"print("afterchange",name)change_name(name)print("在外面看看name改了么?",name)输出:beforechange:YangLiafterchange你好在外面看看name改了么?YangLi2
- python中全局变量的使用
weixin_33737774
python
python中在module定义的变量可以认为是全局变量,而对于全局变量的赋值有个地方需要注意。test.py--------------------------------------------------importsysusername="muzizongheng"password="xxxx"defLogin(u,p):username=upassword=pprint("usernam
- C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
weixin_30777913
c++python数据库数据仓库sqlserver
用C++实现高性能数据处理,Python实现操作Redshift导入数据文件。在VisualStudio2022中用C++和ODBCAPI导出SQLServer数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据去掉前后的空格,数据中如果包含双引号,则将一个双引号替换为两个双引号,创建gzip压缩文件,输出数据流写入到gzip压缩文件包中的
- scikit-learn基本功能和示例代码
weixin_30777913
深度学习机器学习pythonscikit-learn
scikit-learn(简称sklearn)是一个广泛使用的Python机器学习库,提供了丰富的工具和算法,涵盖了数据预处理、模型训练、评估和优化等多个方面。scikit-learn是一个功能强大的机器学习库,涵盖了数据预处理、分类、回归、聚类、降维、模型选择与评估等多个方面。通过上述代码示例,您可以快速上手并使用scikit-learn进行机器学习任务。以下是对scikit-learn主要功能
- python 字符串分割方法_Python字符串分割方法总结
不胖的羊
python字符串分割方法
Python中字符串分割的常用方法是直接调用字符串的str.split方法,但是其只能指定一种分隔符,如果想指定多个分隔符拆分字符串需要用到re.split方法(正则表达式的split方法)。str.split字符串的split方法函数原型如下,其中sep为指定的分隔符,maxsplit为最大分割次数:1str.split(sep=None,maxsplit=-1)默认情况下,不指定分隔符时则以空
- 你们要的python圣诞树
坏柠
pythonpythonpycharm开发语言
圣诞节要到了,不给对象画一颗圣诞树吗?那就用python画一颗圣诞树吧#-*-codeing=utf-8-*-#@Time:2021/12/1410:35#@Author:1#@File:圣诞树.py.py#@Softestr:PyCharmimportturtleimporttimeimportrandomturtle.screensize(700,600,"thistle3")turtle.
- Python怎么使用全局变量?怎么使用全局变量字典?
许墨の小蝴蝶
python
在Python中,全局变量是指在函数外部定义的变量,它们可以在整个程序中被访问。要在一个函数内部使用或修改全局变量,你需要遵循一些规则。###定义全局变量首先,在函数外部定义一个全局变量:```pythonglobal_var=10```###在函数内部读取全局变量如果只是想在函数内部读取全局变量的值,直接使用变量名即可:```pythondefread_global():print(global
- Python 实现定时任务的八种方案
爱摸鱼的菜鸟码农
python开发语言后端
在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用Linux系统自带的crond结合命令行实现。另外一种方式是直接使用Python。接下里整理的是常见的Python定时任务的实现方式。目录利用whileTrue:+sleep()实现定时任务使用Timeloop库运行定时任务利用threading.Timer实现定时任务利用内置模块sched实现定时任务利用调度模块schedule实现
- APS_Schedule
我养的小猫
Pythonpython
前言大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法。一、APScheduler介绍APScheduler是基于Quartz的一个python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。APSchedu
- 度量年报中MD&A部分的信息含量的Python代码
Xiaorui~
文本分析会计学pythonpandas开发语言
研究需求:度量年报中管理层讨论与分析部分的信息含量的代码,环境为python3,可更改年报的选取时间。代码实现:首先,需要安装tika和pandas库,tika用于解析PDF文件,pandas用于数据处理。可以使用以下命令进行安装:!pipinstalltika!pipinstallpandas然后,需要下载年报的PDF文件,并将其放置在指定路径下。接下来,可以使用以下代码对管理层讨论与分析部分进
- python 定时任务框架
assless
python自动化相关python定时任务APSchedule自动化测试
python定时任务框架如果想实现自定义定时任务框架,可以看看下面转载的文章写的很详细传送门=>APScheduler定时框架
- (基础)Python实现定时任务的八种方案详解
程序员-不秃头的阿焕
python开发语言后端
在日常工作中,我们常常会用到需要周期性执行的任务,我们可以用Python直接实现这一功能。今天我们来学习一下这些基本的操作,有需要了解更多关于python相关知识的,免费领取资源的,请点击这个链接。目录利用whileTrue:+sleep()实现定时任务使用Timeloop库运行定时任务利用threading.Timer实现定时任务利用内置模块sched实现定时任务利用调度模块schedule实现
- anaconda 安装后找不到prompt
刘凑华
promptpython开发语言
解决方法,用cmd进入anaconda的安装目录,然后输入如下命令python .\Lib\_nsis.py mkmenus
- Qutebrowser:Python程序员的浏览器利器
东方佑
量子变法python
引言在日常工作中,我们常常会遇到一些重复性的操作,比如每天打开固定的几个网页,或者需要频繁地对网页进行截图。如果你是一位Python开发者,并且希望有一种更高效的方式来处理这些任务,那么今天介绍的Qutebrowser绝对会让你眼前一亮。Qutebrowser是一个基于Python和PyQt开发的键盘驱动浏览器,它不仅支持Vim风格的快捷键操作,还允许用户通过编写Python脚本来扩展其功能。接下
- Python GUI编程(Tkinter框架)
chunyublog
python开发语言
1.Tkinter是什么?Tkinter是Python的标准GUI(图形用户界面)库,它是Python的Tcl/TkGUI工具包的包装器。Tkinter允许Python程序员快速创建GUI应用程序,而无需深入了解底层的图形绘制细节。2.安装TkinterTkinter通常已经预装在Python中,所以不需要额外安装。你可以在Python环境中直接导入它:Importtkinterastk不过,在某
- python、JAVA等多种语言演示免费获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据)配有股票数据API接口说明文档说明
Eumenides_max
pythonjava数据库股票API接口股票数据接口
近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据中挖掘出有价值的信息,为我们的投资策略提供有力的支持。在寻找数据的过程中,我尝试了多种途径,包括自编网易股票页面爬虫、申万行业数据爬虫,以及同花
- 找不到Anaconda prompt终端
AI小白(入门版)
promptpython开发语言
想打开anacondaprompt时发现文件夹和开始菜单里都找不到问题原因因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜单部分的初始化,故找不到。问题解决打开cmd,进入anaconda的安装路径,输入命令。python.\Lib\_nsis.pymkmenus然后会发现菜单目录就有了anaconda终端。
- selenium+pytest自动化脚本生成报告乱码问题
xiaobawang001
seleniumpytest自动化
在运行pytest生成报告的时候,中文会显示为?如下图尝试多种修改conftest的编码格式后,未能成功,最终直接修改python路径\Lib\site-packages\pytest_html内的html_report.py将这句head=html.head(html.meta(charset="utf-8"),html.title(self.title),html_css)修改为:head=h
- MacOS系统搭建Appium自动化测试环境
xiangzhihong8
前端macosappium
一、Appium简介1.1什么是APPiumAPPium是一个开源测试自动化框架,适用于原生、混合或移动Web应用程序的自动化测试工具。APPium使用WebDriver协议驱动iOS、Android等应用程序。APPium具有如下特点:支持多平台(Android、iOS等)。支持多语言(python、java、ruby、js、c#等)。APPium是跨平台的,可以用在OSX,Windows以及L
- vscode+Python便携版简易制作可以直接复制到u盘
再看我把你喝掉
笔记pythonvscodevisualstudiocode编辑器
引言对于vscode和Python的爱好者,一直被复杂的开发环境所困扰,于是迫切需要一个可以将vscode和Python放置在u盘中可以不受运行环境的影响运行在不同电脑的便携方案。通过百度初步检索发现:吾爱破解论坛提供了一种需要修改pipe.exe源文件的制作方法,csdn网提供个一种通过设置bat批处理来实现便携化的方案。上述两种方案,操作相对复杂,需要一定的计算机知识,很不方便。对此提出一种更
- 用bash脚本激活python虚拟环境
这个人很懒,还没有设置昵称...
bashbash
bash脚本内容:#!/bin/bashcondaactivatenamefasta=$1echo$fasta$1就是接受的用户在命令行输入的变量,echo就是打印该变量激活办法:bash-irun.sh参考链接:https://zhuanlan.zhihu.com/p/422365954if语句判断路径是否存在:result=$1if[-f"$result"];thenmkdir$resultf
- R 调用 python
weixin_33971205
pythonjsonjava
上一篇说了python使用rpy2调用R,这里介绍R如何调用python。R的强项在于统计方面,尤其是专业的统计分析,统计检验以及作图功能十分强大,但是在通用性方面,就远不如Python了,比如python可以做web,可以开发GUI,可以爬虫,甚至可以开发游戏,这些R其实也不是完全不行,但是在易用性方面实在是难以与Python相匹敌。所以如果要是能将R与Python相结合,充分发挥二者的优势,那
- chatgpt赋能python:Python怎么安装到U盘
vacvefito
ChatGptchatgpt人工智能计算机
Python怎么安装到U盘在日常的编程工作中,Python是一门十分常用的编程语言。而有时候并非每个人都愿意在电脑上安装Python,或者在外出时需要借助一台非自己的电脑来进行Python编程。因此,将Python安装到U盘成为一个方便实用的选择。为什么要将Python安装到U盘将Python安装到U盘可以让我们在不同设备上进行Python编程,而不用担心设备内是否已经安装了Python。这样可以
- chatgpt赋能python:在U盘上安装Python开发环境教程
tulingtest
ChatGptchatgptpython开发语言计算机
在U盘上安装Python开发环境教程如果你是一位Python开发人员,那么你肯定知道,为了成功地开发和运行Python程序,需要安装Python开发环境。然而,对于很多人来说,它们的工作地点可能不支持安装软件,或者他们需要在多个设备上使用Python开发环境。针对这些情况,将Python开发环境安装到U盘上就成了必要的。优点使用U盘上Python开发环境的好处如下:灵活性:可以在任何地方使用Pyt
- centOS安装python3
梦中生花
centoslinuxpython
centOS(7.7.64)安装python3.7.2centos7自带版本是python2.7先查看系统python的位置whereispythonpython2.7默认安装是在/usr/bin目录中cd/usr/bin#切换到/usr/binllpython*#查看python文件及其软连接从下图中我们可以看到:python指向python2,python2指向python2.7我们要删除py
- chatgpt赋能python:如何在U盘上下载安装Python?
sc17332889342
ChatGptchatgptpython开发语言计算机
如何在U盘上下载安装Python?随着Python语言在全球范围内的流行和广泛使用,越来越多的程序员、工程师和开发者需要从不同的设备上去下载Python,以便在其电脑上使用。然而,在某些环境下,电脑或工作站的管理权限受限,因此无法自由安装和使用Python。那么,如何在没有管理员权限和完整安装包的情况下,在U盘上下载并安装Python呢?步骤1:下载Python安装程序在任何电脑上都可以下载Pyt
- PowerShell 激活 activate 命令切换Python虚拟环境
南七小僧
网站开发AI技术产品经理人工智能python开发语言
使用如下命令可以创建新的conda环境:condacreate-nenvname然后使用如下命令就可以激活虚拟环境:#winactivateenvname#linuxsourceactivateenvname但是在日常使用过程中,发现存在一个问题,windows激活虚拟环境的命令在cmd中可以正常使用,但是在powershell中使用就存在一些问题,总之无法正常运行.使用如下方法解决:1.安装如下
- ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术jvmAOP动态代理ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
- java编程思想 --内部类
百合不是茶
java内部类匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
- web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
- 泛型类的自定义
麦田的设计者
javaandroid泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
- CSS清除浮动的4中方法
IT独行者
JavaScriptUIcss
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
- Cygwin使用windows的jdk 配置方法
_wy_
jdkwindowscygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
- linux下安装maven
无量
mavenlinux安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
- tomcat的https 配置,syslog-ng配置
aichenglong
tomcathttp跳转到httpssyslong-ng配置syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
- 关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
- java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
- JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
- Test注解的两个属性:expected和timeout
bijian1013
javaJUnitexpectedtimeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
- [Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
- 【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
- WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
- java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
- Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
javanetty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
- spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
- Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
- 解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
- [转]for 循环为何可恨?
dcj3sjt126com
程序员读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
- Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
- Oracle 复习笔记之序列
eksliang
Oracle 序列sequenceOracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
- 有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
- 使用KeleyiSQLHelper类进行分页查询
hvt
sql.netC#asp.nethovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
- SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
- 链表栈
luyulong
java数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
- 基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
- spring配置定时任务
stunizhengjia
springtimer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
- ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http