自由的脚本 与 重构

SSH协议详解 作为程序员,一定不会没有用过ssh吧。当我们需要远程登录到服务器上进行操作的时候,一般就会用ssh。ssh是secure shell的简称,它相对于早起的telnet和rsh的明文传输,提供了加密、校验和压缩,使得我们可以很安全的远程操作, 而不用担心信息泄露(当然不是绝对的,加密总有可能被破解,只是比起明文来说那是强了不少)。 本文会详细的讲解SSH协议是怎么定义的,以及他是怎么实现安 阅读详情

自由的脚本 与 重构

 

     关键字:脚本、重构

 

想想,该写点什么像样的东西了,今天忽然在论坛里看到了一个帖子,给了一个答案,几看都不是很爽,于是就试着重构了几下,写写心得。

 

问题是这样的:http://community.youkuaiyun.com/Expert/topic/3178/3178153.xml?temp=.261532

 

求一个正则表达式,去除网页上name为yyy的img元素

 

我急用一个正则表达式,去除网页上name为yyy的img元素,其中yyy是一个变量,我想作成一个函数的形式

funciton qichu(img_name){

//在这里删除name属性为img_name的img元素,注意img_name是一个字符串变量

}

 

关于为什么不用正则式的原因:

 

我知道,正则表达式的替换是非常方便的,但是对于HTML XML这类标记性文档,通过DOM的API来访问应该比直接的字符串操作要正统,安全(就是说可以保证ML的well formed)。

 

var count = document.all.tags("IMG").length;

 

并且,看这里,这里已经提供了替换其他标签的能力。

    

 

     在贴出代码以前先谈谈对重构的看法:重构是一个概念,跨越了语言的界限,JAVA需要重构,C#需要,C++需要,Scripting同样需要;重构是把垃圾变成艺术品一种手段,我们每天在制造各种各样的垃圾(也许你往往一蹴而就,不制造垃圾,但是这是理想),目的只是为了让程序能够工作,在这些垃圾中,我们挑选出有价值(最基本的价值,是否有人为这种改进付钱,既是价值,当然了,好像有点违背职业道德,但是往往我们需要面对现实)的东西,将它变成艺术品,有人说编程是艺术,但是注意,并不是所有的从事艺术的人都可以成为艺术家,都能够做出艺术品。

 

     同样,由于我写的是自由的脚本,所以也说说脚本:我说的脚本指Javascript(对于其他脚本,可以称作脚本,自然要有比程序语言优越之处),脚本是一种自由的、灵活的、轻量级的编程语言,在javascript中很多特性都是JAVA、C#等所不能及的,例如:动态的类型绑定(不是很确切,弱类型)、动态的添加成员等,同时脚本又具有基本的面向对象的特征,不多说了,看正题。

 

 

 

 

 

 

开始:提出解决思路

     由于问题是按照元素的name来区分的,又要取得多个,所以不用document.all.yyy来取得collection了,因为如果这样的话需要判断name为yyy的数量如果只有一个,是不会形成collection的(IE和脚本在处理网页元素上的特性吧,算是一个脚本的魅力),判断过程会使程序变得难以理解,所以采用取得所有IMG元素的方法(并非只有一种方法),为了防止collection元素变动造成循环错误,先取得一个循环次数值,定义一个临时数组,存放所有名为 yyy 的 IMG 的元素实例,遍历数组清除目标 IMG 元素,于是有了下面的代码。

 

var count = document.all.tags("IMG").length;

 

var tmparray = new Array();

 

for (var i=0; i<count; i++)

{

     if (document.all.tags("IMG")[i].name == "yyy")

         tmparray[tmparray.length] = document.all.tags("IMG")[i];

}

 

for (var i=0; i<tmparray.length; i++)

{

     tmparray[i].outerHTML = "";

}

 

tmparray = null;

 

 

进行第一次重构:Extract Method

     提取出函数,并将document.body动态(script的魅力)添加一个方法,方法所作操作为函数中内容,由于document.body已经生成实例了,所以没有必要对prototype操作,直接为实例添加就可以了。

     注意:前后两个removeElementsWithName的意义是不同的,前一个表示了document.body的一个方法,后一个则是局部的一个函数。

 

//

//   第一次重构

//

document.body.removeElementsWithName = function removeElementsWithName( elementTag, elementName )

{

     var count = document.all.tags(elementTag).length;

 

     var tmparray = new Array();

 

     for (var i=0; i<count; i++)

     {

         if (document.all.tags(elementTag)[i].name == elementName)

              tmparray[tmparray.length] = document.all.tags(elementTag)[i];

     }

 

     for (var i=0; i<tmparray.length; i++)

     {

         tmparray[i].outerHTML = "";

     }

 

     tmparray = null;

}

 

document.body.removeElementsWithName( "IMG", "yyy" );

 

进行第二次重构:规范第一次重构提取后的代码

    第一次着重于封装,将函数封装入对象(类),由于removeElementsByName(指后一个局部函数)现在是一个对象的方法,所以,对脚本内的访问已经没有任何意义,去掉名字,使用匿名函数(脚本的魅力)代替,并在函数内部使用this指代document,并把方法由document.body转移给document,使得方法更具有普遍性,并更改函数名With为By。

//

//   第二次重构

//

 

document.removeElementsByName = function ( elementTag, elementName )

{

     var count = this.all.tags(elementTag).length;

 

     var tmparray = new Array();

 

     for (var i=0; i<count; i++)

     {

         if (this.all.tags(elementTag)[i].name == elementName)

              tmparray[tmparray.length] = this.all.tags(elementTag)[i];

     }

 

     for (var i=0; i<tmparray.length; i++)

     {

         tmparray[i].outerHTML = "";

     }

 

     tmparray = null;

}

 

document.removeElementsByName( "IMG", "yyy" );

 

 

完成:实际并没完

至此两次重构已经完成,但是,可以看到,代码里依然有smells,比如removeElementsByName,这个长方法名,暂且放他一马吧。

Eclipse上使用Git进行多人合作开发 1.安装git 安装 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ 这里有一篇教程,写的很好,大家可以先去看一看,主要是用命令操作git的。2.Eclipse上配置Git2.1 生成ssh-key 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id 阅读详情

相关推荐

SSH架构一般支持多少个并发?

在公司使用struts spring hibernate ibatis开发了一个项目,数据库使用的是DB2,发布使用AIX操作系统。 容器使用的Websphere Application Server。 Jsp  页面使用了jstl处理。 其中访问权限系统使用了Webservice访问LDAP提供用户登录等认证。 对WAS和连接池进行了调优。1024M的最大JVM空

马如林的IT博客 5249

02 脚本重构by封装

定位元素和值分开定义 封装By方法 则之前的定位写法: 可更改为: ok,那么我们的禅道登陆脚本重构如下: 。。。

l19930105的博客 268

手把手教你用Arduino搭建惠斯通电桥:从原理到代码实现(附完整电路图)

本文详细介绍了如何利用Arduino搭建惠斯通电桥,从硬件选型、电路设计到代码实现和校准技巧,提供完整的电路图和实用代码示例。特别适合电子爱好者和创客学习高精度电阻测量技术,并扩展应用于应变片测量和温度监测等实际项目。

o4p5q6r7s的博客 400

linux shell脚本中如何自由操作字符串(转)

Bash所支持的字符串操作的数量多的令人惊讶. 但是不幸的是, 这些工具缺乏统一的标准. 一些是参数替换的子集, 而另外一些则受到UNIXexpr命令的影响. 这就导致了命令语法的不一致, 还会引起冗余的功能, 但是这些并没有引起混乱. 字符串长度 ${#string} expr length $string expr "$string" : '.*'

christin_zhm的专栏 1003

【亲测】ubuntu20.4 安装CUDA11.8

一步一步搭建C++ CUDA CUDNN TENSORRT OPENCV DNN ONNXRUNTIME推理环境

weixin_40950590的博客 3894

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 354

公司发版shell脚本重构

重构前代码 代码关键字被批量替换。仅供参考。 #!/bin/sh sitesPath="/ggcall/sites/" DATE=$(date +%Y%m%d%H%M) softfile="/home/ggstar/Arhasgg/" sitesbackup="/home/ggstar/sitesbackup/" githome="/home/ggstar/Arhasg...

weixin_30305735的博客 187

登录脚本重构by封装

package com.gubai.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.op...

weixin_30507481的博客 162

nvidia系列教程-AGX-Orin基础环境搭建

NVIDIA Jetson AGX Orin 是一款功能强大的嵌入式AI平台,专为需要高性能和低功耗的边缘计算应用设计。无论是自动驾驶、机器人,还是智能监控系统,Jetson AGX Orin 都能为这些应用提供强大的计算能力。本篇博客将为大家详细介绍如何在AGX Orin(32GB)上搭建基础开发环境,包括系统安装、CUDA和cuDNN的配置等,帮助你快速上手这个强大的平台。架构: 搭载 56 个 Tensor Core 的 1792 核 NVIDIA Ampere c GPUCUDA Cores。

flypig has a dream! 2796

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722

脚本重构重构Javascript代码

最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--脚本重构     今天有做了几个asp.net结合Javascript的程教文章。现回想头来看看那些Javascript脚本,有写得不太想理,过于庞杂。现Insus.NET抽取出来,重构它们。     第一篇是http://www.cnblogs.com/insus/archive/2013/01/20/2868532.html

350

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

关于SSH你知道多少

SSH协议(SecureShell,安全外壳)是一种需要进行加密和认证的,用于远程访问及文件传输的网络安全协议(默认协议端口22)。SSH功能类似于Telnet服务,但SSH基于加密和认证的特性可以为用户提供更强大的安全保障机制,在用户使用不安全的网络环境登录设备时,SSH能够有效保护设备不受IP地址欺诈、明文密码截取等攻击。

卷王工作室 1221

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2199

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于 SSH 应用,你知道多少?

ssh 密钥其实我们并不陌生,无论是使用 Github 还是 gitlab 这种使用 git 管理项目的平台,都会可能使用 ssh 协议传输资料。 服务器上的 Git - 协议 数字签名是什么? ???????????? 免密登陆和ssh-copy-id命令解析 利用 ssh 的用户配置文件 config 管理 ssh 会话 How to use ssh-keygen to generate a new SSH key ???????????????????? ruanyifeng ssh-tutoria

LynnWonder 776

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

多人共用一个Linux机器怎么配置SSH?

一台linux机器配置多个ssh

qq_42732541的博客 1423

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

**SSHTron:穿越SSH的多人光速竞赛**

在忙碌的数字世界中寻找一份别开生面的娱乐?欢迎来到SSHTron——一款通过SSH协议运行的多人实时竞技游戏。只需一条命令,您便能瞬间投入这场光速般的追逐战。 ![SSHTron Logo](https://cdn.rawgit.com/zachlatta/sshtron/master/logo.svg) **立即启动您的游戏旅程:** ```bash $ ssh sshtron.zachla

gitblog_00880的博客 674

什么是SSH 以及常见的ssh 功能

什么是SSH 以及常见的ssh 功能 什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

8512

关于本地 SSH 冲突 , 多人使用一个电脑

关于git的ssh-key:解决本地多个ssh-key的问题,gitssh-key 在设置github的时候,官方的说明文档要求备份当前的id_rsa,然后生成一份新的私钥用于github的登陆。如果真这样做,那么新的私钥是无法再继续登陆之前的机器的。这种方法有点暴力… 还好ssh可以让我们通过不同的私钥来登陆不同的域。 首先,在新增私钥的时候,通过指定不同的文件名来生成不同的私

RockCoding2的专栏 1675

GitHub多人协同项目ssh推送出现Key already in use问题处理

需求 ​ 今天在多人协同项目中发现,有部分小伙伴无法成功推送,一直提示: Error: Key already in useThis error occurs when you try to add a key, that's already been added to another account or repository 问题描述 ​ 检查发现用户已经在本地git中配置了一个 ssh公钥项目,使用该公钥会导致在GitHub中绑定失败,重新创建公钥会影响其他项目推送: 问题原因 机器A当前的公钥是u

白发老顽童的博客 821

Wisdom SSH,运维人的 “Cursor”,部署 Jenkins 详细使用教程

WisdomSSH是一款集成AI的现代化SSH终端工具,可简化Jenkins部署流程。首先需下载安装WisdomSSH并连接目标服务器,通过AI助手输入"部署Jenkins"指令,系统会智能生成包括添加软件源、安装Java、部署Jenkins服务等完整操作命令。部署完成后,AI还能辅助完成Jenkins初始配置,自动获取管理员密码并指导用户完成插件安装和账户设置。WisdomSSH将复杂的运维流程智能化,即使是新手也能轻松完成专业部署工作。

qinyia的博客 1892

ssh 多人_[整理]常用的SSH客户端软件

以下是Windows下常见的用于远程SSH登录的软件:1、Putty经典的SSH客户端软件,不过太简陋了。免费的。官网https://www.chiark.greenend.org.uk/~sgtatham/putty/2、PuttyMan基于Putty的SSH客户端软件,改进有限。免费的。3、SSH Secure Shell Client据说还不错。实测感觉还是太简陋了,虽然也有文件传...

weixin_39949673的博客 679

什么是SSH 以及常见的ssh 功能

什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目...

u013452337的博客 23万+

记录一次Linux服务器被人使用SSH字典爆破

2024年1.20凌晨睡了一觉,早上起来用termux远程ssh登录小主机发现密码没法登录了,一直显示密码错误,到了晚上用电脑ssh连接小主机,发现小主机真的没法登录了,直接把小主机接上屏幕查看,发现密码被人修改了,系统都进不去,而且主机风扇一直呼呼转,估计是cpu使用率上来了,这下只能进到linux的安全模式进行密码修改了。挖矿程序一般都设置了定时任务启动脚本程序,查看定时任务,crontab -l查看是找不到的��得看/etc/crontab文件,执行 cat /etc/crontab。

互联网架构小马的博客 1887

服务器标配 SSH 协议,你了解多少?

年初,新冠肺炎疫情的出现,全国数千万名员工在家远程办公,使用个人设备通过家庭网络访问公司资料。因此,IT 安全团队面临了众多新挑战:如何实施更加安全的身份验证方案,以确保只有授权人员和设备才能访问公司敏感资产? 不少小伙伴想起了 SSH,其实大家对它都比较熟悉。大到虚拟机、服务器,小到手机、家电,Linux 设备普及越来越广,SSH 的运用也越来越广泛。不仅攻城狮、程序猿离不开它,普通用户也基本都在使用。SSH 可以说是各服务器的标配,有了 SSH,我们不必每次都要蹲到机房里连接服务器配置服务器,直接远程就

github_36774378的博客 359
上一篇: 关于collection的操作注意。
下一篇: 关于ListView按其他非默认列排序:
blues-star
博客等级 码龄26年 8粉丝 78原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值