- SecureCRT 设置打开时默认UTF-8
杨青松
linux
要在SecureCRT中设置打开时默认使用UTF-8编码,请按照以下步骤操作1:打开SecureCRT并连接到Linux终端。点击菜单栏中的Options,选择GlobalOptions。点击General中的DefaultSession,然后点击EditDefaultSettings。在弹出的对话框中点击Appearance。点击Characterencoding中的下拉按钮,指定编码为UTF-
- linux常见性能监控工具
ly201552y
linuxlinux运维服务器
常用命令top、free、vmsata、iostat、sar命令具体更详细命令可以查看手册,这里只是简述方便找工具整体性能top,内存看free,磁盘cpu内存历史数据可以vmsata、iostat、sar、iotoptop命令交互:按P按照CPU排序,按M按照内存排序free命令[root@localhost~]#free-htotalusedfreesharedbuff/cacheavaila
- Hadoop3.2.1安装-单机模式和伪分布式模式
花菜回锅肉
大数据hadoophdfs大数据linux
Hadoop入门篇概述Hadoop是使用Java编写的,是为了解决大数据场景下的两大问题,分布式存储和分布式处理而诞生的,包含很多组件、套件。需要运行在Linux系统下。主要包括HDFS和MapReduce两个组件。下载安装下载下载地址https://archive.apache.org/dist/hadoop/common/选择合适自己的tar.gz版本下载,该文档选择V3.2.1。Hadoop
- Java设计模式之状态模式架构高扩展的订单状态管理
程风破~
JavaJava设计模式实战java设计模式状态模式
博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新
- linux获取字符串最后几位,Shell截取字符串的8种方法
芦苇毛
linux获取字符串最后几位
Linux的字符串截取很有用。有八种方法。假设有变量var=http://www.aaa.com/123.htm.1.#号截取,删除左边字符,保留右边字符。(非贪婪匹配)echo${var#*/}其中var是变量名,#号是运算符,*/表示从左边开始删除第一个/号及左边的所有字符即删除http://结果是:www.aaa.com/123.htm2.##号截取,删除左边字符,保留右边字符。(贪婪匹配)
- Zynq UltraScale+ MPSoC 在linux系统运行R5 裸机程序 remoteproc - R5
愧莫佳话
linuxarm
参考文章:ultrascale学习笔记之remoteproc启动R5ZYNQUltraScale+MPSoCLinux+ThreadXAMP玩法ZynqUltraScale+MPSoC包含Cortex™-A53处理器和Cortex™-R5实时处理单元。移植完Linux系统,在系统上同时运行A53和R5应用程序,重点是修改R5程序的起始地址。vitis创建A53应用程序可以参考之前的文章R5程序可以
- 让Pluto SDR完全脱机执行任务——实现开机运行特定脚本/程序
Kloz
matlab开发语言经验分享linux笔记
在我之前的关于交叉编译的文章中,讨论了如何使用Linaro工具链在Ubuntu主机上编译能在PlutoSDR的arm核上运行的可执行程序,但仅仅这样还不足,因为想要让PlutoSDR执行某个特定任务,首先需要在主机交叉编译,然后通过scp命令传送到PlutoSDR上,然后通过ssh进入到PlutoSDR的Linux系统中手动执行,才完成了一次(半)脱机运行,这并不优雅。本文讲解一种可以让Pluto
- Linux的循环,bash的循环
kfepiza
#LinuxCentOSUbuntu等#控制台命令行Shell脚本shcmd等OS操作系统WindowsLinux等linuxbash
Linux的循环,bash的循环在Linux系统中,Bash循环是最常用的循环实现方式(Bash是Linux默认的Shell),但广义上“Linux的循环”可能涉及其他Shell或编程语言的循环结构。以下是Bash循环的详细解析及其在Linux环境中的应用场景,同时对比其他常见循环方式。一、Bash循环:核心语法与场景Bash是Linux的默认Shell,其循环语法直接用于Shell脚本,适合文件
- 【知识贴】x86、amd64和arm64区别
瓜炉
linux
x86、amd64和arm64区别x86、amd64和arm64是指不同的处理器架构,它们主要区别在于指令集和硬件架构。这些架构影响着软件兼容性、性能和硬件设计。1.x86指的是:32位的x86架构(又叫i386或x86-32),由Intel最早在1978年推出。位宽:32位,也就是每次可以处理32位的数据。常用平台:最常用于较老的桌面和笔记本电脑,早期的Windows和Linux系统也多基于该架
- 怎么下载 protoc-gen-grpc-java-1.51.0-linux-aarch_64.exe
Thomas2143
总结maven
方案通过maven官方下载.下有gif动画演示.step1step2step3step4GIF演示
- 深入解析 Linux 内核内存管理核心:mm/memory.c
109702008
#linux系统编程#linux内核linux人工智能c语言
在Linux内核的众多组件中,内存管理模块是系统性能和稳定性的关键。mm/memory.c文件作为内存管理的核心实现,承载着页面故障处理、页面表管理、内存区域映射与取消映射等重要功能。本文将深入探讨mm/memory.c的设计思想、关键机制以及其在内核中的作用,帮助读者更好地理解Linux内核的内存管理策略。1.文件概述mm/memory.c是Linux内核中负责内存管理的核心文件之一,位于lin
- Linux命令-cp命令(将源文件或目录复制到目标文件或目录中)
RisunJan
Linuxlinux服务器运维
说明cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。语法cp(选项)(参数)选项-a:此参数的效果和同时指定"-dpR"参数相同;-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文
- Shell $0
一张假钞
linux运维服务器bash
个人博客地址:Shell$0|一张假钞的真实世界我们已经知道在Shell中$0表示Shell脚本的文件名,但在有脚本调用的情形中,子脚本中的$0会是什么值呢?我们通过下面的实例来看。已测试系统列表:MacOSXEICapitan10.11.6Ubuntu16.04LTS(GNU/Linux4.4.0-28-genericx86_64)父脚本a.sh,位置test1/a.sh,内容如下:!/usr/
- Python结合pyhdfs模块操作HDFS分布式文件系统
唐僧不爱八戒
pythonhdfs开发语言
使用python操作hdfs本身并不难,只不过是把对应的shell功能“翻译”成高级语言,我这里选用的是hdfs,下边的实例都是基于hdfs包进行的。1:安装由于我的是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的pipinstallhdfs2:Client——创建集群连接fromhdfsimport*client=Client("ht
- Centos安装Redis并持久化
唐僧不爱八戒
redis
步骤1:更新系统在开始之前,先更新系统软件包以确保稳定性。sudoyumupdate-y步骤2:安装EPEL仓库Redis通常在EPEL(ExtraPackagesforEnterpriseLinux)中提供,先安装它。sudoyuminstallepel-release-y步骤3:安装Redis使用以下命令直接安装Redis:sudoyuminstallredis-y步骤4:启动Redis服务安
- 炸裂!Linux内核代码疯长,十年翻倍直逼4000万行!
盼达思文体科创
经验分享
引言在科技的浩瀚宇宙中,操作系统宛如一颗核心恒星,照亮了整个数字世界。而Linux内核,作为众多操作系统的基石,一直以来都扮演着至关重要的角色。它不仅是开源精神的象征,更是无数开发者智慧的结晶。想象一下,我们日常使用的智能手机、电脑,甚至是汽车、家电里的智能系统,很多都离不开Linux内核的支持。它就像一个看不见的大管家,默默管理着设备的各种资源,让一切都能有条不紊地运行。如今,Linux内核代码
- Python中os.path模块的使用详解
幻想世界中的绚丽色彩
python开发语言Python
os.path模块是Python标准库中的一个模块,提供了用于处理文件路径和名称的函数。它是处理操作系统相关的路径的理想选择,无论是在Windows、Linux还是其他操作系统上。本文将详细介绍os.path模块的常用函数及其用法,并提供相应的源代码示例。获取文件名和目录名os.path模块提供了一些函数来获取文件路径的各个部分,如目录名、文件名和扩展名等。importospath='/path/
- Linux安装Python3
培根芝士
PythonLinuxpythonlinux
1.下载python3编译的依赖包yuminstall-ygccpatchlibffi-develpython-develzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel2.安装openssl1.1.xyu
- Linux C++ 开发9 - 手把手教你使用gprof性能分析工具
c++
1.什么是gprof?2.gprof的用法2.1.编译程序2.2.运行程序2.3.生成分析报告2.4.gprof常用参数说明2.5.分析报告解读2.5.1.Flatprofile各个字段的含义2.5.2.Callgraph各个字段的含义3.Demo演示3.1.demo04.cpp源码3.2.编译、运行和分析3.3.查看分析报告1.什么是gprof?gprof这是一个GNU的性能分析工具,它是GCC
- linux下编译安装python3.10亲测可行!
致命扼腕
环境安装服务器使用linuxpython运维
方法简单两部步就可以啦apt-getupdate&&apt-getupgrade-yapt-getinstall-y--no-install-recommendsgccg++makepython3python3-devpython3-pippython3-venvpython3-wheelespeak-nglibsndfile1-dev测试命令行输入python3即可看到安装成功安装python包
- linux 安装python3.7.10
多财多亿,凭亿近人
python随手笔记Python安装编译依赖Linux
apt-getupdateapt-getupgradeaptinstallbuild-essential-yaptinstalllibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-dev-yaptinstallzlib1g-devaptinstallwgetaptinstallopensslaptinstallc
- Linux下安装python3.10.12环境
爱思考的李MAX
linux运维服务器python
安装python3编程环境检查是否安装python3python3-V安装python3依赖sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel下载pyt
- linux 安装python 3.10
处女座_三月
pythonlinux运维服务器
1下载对应的安装包下载地址:https://download.csdn.net/download/weixin_43401380/885196692上传服务器1步骤1:解压文件tar-xzfPython-3.10.13.tgz2步骤2:创建安装目录mkdirlocal3开始安装1安装gcc:你需要安装gcc,这是GNU编译器集合的一部分,用于编译C程序。执行以下命令来安装gcc:sudoaptup
- linux 常用长命令
三境界
操作系统驱动开发linux
搜索时,排除某个目录搜索名为libc的文件,但是排除/mnt目录sudofind/-path"/mnt"-prune-o-typef-name"libc"-print
- KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
weixin_30794499
数据结构与算法运维操作系统
一.KVM简介KVM(名称来自英语:Kernel-basedVirtualMachine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。KVM在具备IntelVT或AMD-V功能的x86平台上运行。它
- linux 配置Java环境变量
找个栗子
linuxjavapython
要在Linux上配置Java环境变量,可以按照以下步骤进行操作:首先,打开终端。确认是否已安装Java。在终端中运行以下命令:java-version如果已安装Java,则会显示Java的版本信息。如果没有安装Java,请先安装Java。找到Java的安装路径。在终端中运行以下命令:sudoupdate-alternatives--configjava这会显示Java的安装路径。记下此路径,后续会
- 【PyQt】学习PyQt进行GUI开发从基础到进阶逐步掌握详细路线图和关键知识点
shanks66
pyqtpython
学习PyQt的必要性PyQt是开发跨平台GUI应用的强大工具,适合需要构建复杂、高性能界面的开发者。无论是职业发展还是项目需求,学习PyQt都具有重要意义。1.跨平台GUI开发跨平台支持:PyQt基于Qt框架,支持Windows、macOS、Linux等多个平台,开发的应用可以轻松移植。统一代码库:只需维护一套代码,减少跨平台开发的复杂性。2.丰富的UI组件多样化控件:PyQt提供按钮、文本框、表
- 使用Linux,龙芯不算弱
rainandtear
嵌入式经验分享linuxwindowsmotorolasununix工作
在美国,这里实研室用167MHz的Sun工作站设计卫星。另外,在Austin的Motorloa工作的同学用300MHz的Sun工作站设计做,芯片仿真运算。我所在的实研室做的机器人用Linux和200Mhz的CPU。你以为美国人没钱买什么3Ghz的奔腾吗?很多科学运算领域没人用Windows,用Intel的也很少。主要是windows系统老死机。以前的Win98,每天差不多得死个三,四次。而这些科学
- LoongArch32 指令集探索学习1:初入龙芯
星林湖月
龙芯学习
1.1.发现问题1.1.LoongArch是个啥?龙芯这个名字一听就是咱这龙的传人该用的东西,这是从MIPS指令集中新设计的指令集,官方名字叫LoongArch,简称LA。这个指令集分为开放的LoongArch32精简版和LoongArch64,前者的32位指令集全部开源,后者64位只开放基础指令集,高级部分的二进制翻译暂且没有详细文档,而是由开发者在对GCC、Linux等基础软件贡献中露出。为何
- Ubuntu 下 nginx-1.24.0 源码分析 ngx_debug_init();
若云止水
nginx运维
目录ngx_debug_init()函数:NGX_LINUX的定义:ngx_debug_init()函数:ngx_debug_init()函数定义在src\os\unix目录下的ngx_linux_config.h中#definengx_debug_init()也就是说这个环境下的main函数中的ngx_debug_init()这行代码其实什么都没有做在nginx.c的开头引入了#include而
- 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