静态代码分析工具清单:开源篇

2023-11-02

http://hao.jobbole.com/static_code_analysis_tool_list_opensource_lang/?utm_source=blog.jobbole.com&utm_medium=sidebar-resources


本资源由  伯乐在线 -  Juliesand 整理,您也想贡献一份力量?欢迎 加入我们 »

本文是一个静态代码分析工具的清单,共有26个工具。包括4个.NET工具、2个Ada工具、7个C++工具、4个Java工具、2个JavaScript工具、1个Opa工具、2个Packaging工具、3个Perl工具、1个Python工具。

1.NET

.NET Compiler Platform(代号 Roslyn)

Roslyn提供有着丰富的代码分析API的开源C#和Visual Basic编译器。它可以使用这些Visual Studio里的API生成代码分析工具。

Roslyn

CodeIt.Right

CodeIt.Right提供一个快速的自动的方法确保你的源代码遵循预先定义的设计和风格准则。它通过以下方式使静态代码分析进入更高水平:即时代码审查、及早发现问题、编码原则、自动代码审查、集成StyleCop检查、报告。

CodeIt.Right

FxCop

一个实现.NET静态代码分析的图形用户接口和命令行工具。

FxCop提供几百种规则实现各种类型的分析。包括:设计、全球化、互操作性、可维护性、灵活性、命名、性能、可移植性、可靠性、安全性,利用率。FxCop的功能完全集成到Visual Studio2010的高级版和最终版中。

FxCop

StyleCop

StyleCop分析C#源代码,强制执行一系列风格和一致性规则。可以在Visual Studio内部运行,也可以集成到MSBuild项目中。StyleCop还可以被集成到很多第三方开发工具中。

核心原则:

StyleCop通过为C#代码强制执行一组通用风格规则来体现价值。StyleCop将继续利用一个连续的带有允许的最小规则配置的规则集。开发者可以实现他们自己的规则,只要他们愿意。

StyleCop拥有和Visual Studio、MSBuild,TFS等无缝集成的能力。开发者可以自由执行自定义代码,将StyleCop集成到其他开发和工具环境,如SDK文档中所述。

StyleCop

2 Ada

AdaControl

AdaControl是一个免费的(授权)工具,可以检测Ada程序中使用的各种结构。它的首要目标是控制风格和程序规则的正确使用,但是它也可以作为一个强大的工具搜索编程风格或设计模式的各种形式。搜索的元素范围有非常简单的,比如某种实体、声明或语句的出现,也有非常复杂的,比如验证遵守了某种编程模式。

AdaControl

Fluctuat

Fluctuat是一抽象解释器,以数字编程(C或Ada)静态分析器为基础,由CEA-LIST的ME ASI(ModElling and Analysis of Systems in Interaction)实验室在2001年开发。给出一组输入和参数,可能带有不确定因素,它会考虑这个程序所有可能的行为,无论是真实的还是有限精度下,并描述这些不同的特性。

Fluctuat

3 C,C++

BLAST

BLAST(Berkeley Lazy Abstraction Software verification Tool伯克利惰性抽象软件验证工具)是一个C语言静态软件验证工具,它可以解决可达性问题,例如是否可以通过一个有效的执行命令从入口点(主程序)到达给定的程序位置。

安全属性的验证可能降低到可达性,BLAST常常用于核查Linux驱动程序验证项目。

可以在以下网站下载Linux系统的BLAST源代码或二进制版本。

BLAST

Cpplint

这个项目继续开发cpplint,它是一个C++风格检查器,遵循Google的C++风格指南。提供的cpplint 为PYPI(Python Package Index)包,并添加了几个功能和修复程序。它是google/styleguide的一个分支,希望未来可以合并在一起。

Cpplint

Coccinelle

Coccinelle是一个程序匹配和转换引擎。它提供语意修补程序以便在C代码中指定期望的匹配和转换。Coccinelle初始的目的是完成Linux的间接开发。这种开发包括客户端代码中所需要的改变,目的是响应库应用程序接口变化。还可能包括一些修改,例如重命名一个函数、添加一个函数参数,它的值以某种方式被上下文决定、重组数据结构。除了间接开发,Coccinelle还可以成功的寻找和修复系统代码中的错误。

Coccinelle

Frama-C

Frama-C是一个平台,致力于分析用C语言写的源代码。

Frama-C集成几个分析技术到一个协作平台中。其包含一组提供核心功能的内核(例如一个C程序的抽象化语法树)和一组被称为插件的分析器。这些插件可以建立在平台中其他插件的计算结果之上。

归功于这个方法,Frama-C能提供一些复杂的工具,包括:

  • 一个基于抽象解释器的分析器,旨在验证不存在运行时错误;
  • 一个基于最弱前提运算的程序防护框架;
  • 一个程序切片器;
  • 一个验证临时特性的工具;
  • 几个代码开发和相关性分析的工具。

这些插件共享常见的语言,可以通过ASCL(ANSI/ISO C Specification Language)特性交换信息,还可以通过它们的APIs集合信息。

Frama-C

Lint

Lint实用程序尝试检测命名为C程序文件的功能,可能是错误,也可能是不可移植,或者是浪费。同时它也执行比C编译器更严格的类型检查。Lint实用程序运行C预处理器作为它的第一阶段,带有这个预处理器的标志“lint”,其被定义为允许某些有问题的代码被lint更改或跳过。因此,对于所有被lint检查的代码来说这个标志应该被认为是一个预留字。

Lint

Sparse

Sparse是一个源文件智能语法分析器:它不是编译器(虽然它可以作为一个前端编译器使用),也不是预处理器(虽然它包含部分预处理语句)。

这意味着它是一个小而简单的库。内容太少是它容易使用的部分原因。它只有一个任务,就是为任意用户创造语法分析树从而进行进一步的分析。它不是分词器,也不是那些通用的上下文无关的语法分析器。事实上,上下文(语意)就是我想说的不仅解决分组标记,而且还有_type_在组中的含义。

语法分析完成以下5个阶段:完整文件标记化、预处理(可以导致另一个文件进入标记阶段)、语法分析、延长性评估、内联函数扩展和简化树。

Sparse

Splint

Splint是一个辅助注释轻量级静态检查工具,检查C程序的安全漏洞和代码错误。作为一个更好的lint,使用Splint毫不费力。如果投入额外的工作添加注释到程序中,Splint可以执行比任何标准lint能完成的更强的检查。

Splint

4 Java

Checkstyle

Checkstyle是一个开发工具,可以帮助程序员编写Java代码,并使其遵守编码标准。它自动执行检查Java代码的过程,使人们从这种无聊但是重要的任务中解放出来。对于那些想要执行代码标准的项目,这是非常理想的。

Checkstyle是高配置的,几乎可以支持任何代码标准。

checkstype

FindBugs

FindBugs是一个使用静态分析寻找Java代码中错误的程序。

findbugs

KeY

传统的说,Key过去是一个Java程序验证工具。虽然现在这仍然是它的主要应用之一,但是这些年来它已经成长为一个拥有各种领域应用的程序验证平台。当前最重要的应用是:

  • 程序验证(独立的图形用户界面、Eclipse集成、KeYHoare)
  • 调试(符号执行调试器)
  • 信息流分析(安全)
  • 测试用例产生(KeYTestGen)

我们一直致力于让Key框架更容易被其他程序访问。例如,在另一个工具的后台可以很容易的将Key当成一个符号执行引擎使用。正在进行的工作示例有Java编译器的建造,是一个基于Key创建的符号执行树。

Key

Soot

最初,Soot开始于一个Java优化框架,到目前为止,来自世界各地的研究人员和从业人员使用Soot分析、装备、优化和可视化Java和Android应用。它提供四种中间格式分析和转化Java字节码:

  • Baf:一个字节码的简化格式,操作简单。
  • Jimple:一个适合优化的3-地址类型中间格式。
  • Shimple:Jimple的一个SSA变化格式。
  • Grimp:一个适合反编译和代码检查的Jimple合集版本。

Soot

5 JavaScript

JSHint

JSHint是一个社区驱动工具,它检测JavaScript代码中的错误和潜在问题。例如语法错误,隐性类型转换错误,变量泄漏等等。值得注意的是,静态代码分析可以定位许多不同类型的错误,但是它不能检测出你的程序是不是正确、快速或者有没有内存泄漏。应该结合像JSHint这样的工具和单元功能测试一起审查代码。

JSHint非常灵活,使用者可以轻松的在期望的代码执行环境中调整它。

JSHint

JSLint

JSLint本身是一个JavaScript程序,它可以寻找Javascript程序中的错误,是一个代码质量工具。

JSLint扫描JavaScript源文件,寻找错误,并返回描述问题的信息和其在程序中的大概位置。这些问题不一定是语法错误,虽然经常是这样。JSLint还查看一些风格习惯和结构问题。它不能证明你的代码是正确的,只是提供另一双眼睛去帮助发现问题。

JSLint定义了一个专业的JavaScript子集,一个比ECMAScrip程序语言标准(管理JavaScript的文件)更严格的语言。它会驳回大多数合法程序,是一个更高的标准。

JSLint

6 Opa

Opa是一个用于网站开发的函数程序设计语言,编译为JavaScript。Opa包括两部分:第一,是一个来自Opa语言的编译器,功能类似JavaScript的语法但是有很多增强功能。第二,是一个JavaScript库,在运行时使用。

Opa包括它自己的静态分析器。作为一种以网站应用开发为目的的语言,强大的静态类型编译器检查高级网站数据类型的有效性,默认阻止许多漏洞,比如XSS攻击和数据库代码注入。

Opa

7 Packaging

Lintian

Lintian是一个静态分析工具,用于寻找Debian基础包中的错误、违反规则和其他的问题。它可以处理二进制Debian包(.deb)、微型/安装程序包(.udeb)、Debian源程序包(.dsc)和(有限程度的)变更文件。

Lintian

Rpmlint

Rpmlint是一个检查Rpm包中常见错误的工具。经常被用在上传之前测试单个软件包和指定文件或者检查整个分布。默认情况下执行所有可用的检查,但是专项检查可以使用命令行参数实现。

被检查的文件可以是一个Rpm软件包文件、一个指定文件或一个目录。如果是目录,递归搜索Rpm和指定文件进行检查。特殊值是指在标准输入中被读取的结果被当作单个指定文件内容处理。

Rpmlint

8 Perl

Perl::Critic

Perl::Critic是一个可扩展的框架,对Perl源代码创建和应用编码标准。本质上,它是一个静态源代码分析引擎。Perl::Critic分布着大量的Perl::Critic::Policy模块,它们试图执行各种编码规则。大多数规则模块以Damian Conway的书《Perl Best Practices》为基础。然而Perl::Critic不限于PBP这本书,甚至支持与Conway相矛盾的规则。你可以通过Perl::Critic接口启用、禁用和自定义这些规则。你也可以创造适合自己的新规则模块。

PerlCritic

PerlTidy

Perltidy是一个Perl脚本,它缩进和重新格式化Perl脚本,使它们更容易阅读。如果你编写或者花很多时间读Perl脚本,你可能觉得它是有帮助的。

格式化可以使用命令行参数控制。

Perltidy可以输出置标语言和源代码。

除了重新格式化脚本,Perltidy可以很好的帮助追踪下面这些错误,缺少或多余的括号、参数和方括号,因为它非常擅长定位错误。

Perltidy

Padre

Padre是一个Perl集成开发环境,或换句话说是一个新手Perl程序员易于使用的文本编辑器,但是同时支持大型多语言和多技术项目。

我们的主要目的是创造一个无语伦比的环境来学习Perl,创建Perl脚本、模块和分布,提供一个可扩展的插件系统以支持添加相关功能和语言,同时支持高级开发者在任何地方使用这个编辑器。

它也提供静态代码分析来检查常见的初级错误。

Padre

9 Python

Pylint

Pylint是一个Python源代码分析器,它可以查找编程错误,帮助推行编码标准并嗅探代码异味(在Martin Fowler的重构书中定义)。

Pylint有许多默认启用的规则,因为方法太多所以不能把它们全部压制在一个最小程序中。它是高度可配置的,处理程序可以在代码中控制它。另外,还可以写一些插件添加自己的检查。

Pylint


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态代码分析工具清单:开源篇 的相关文章

  • ZYNQ图像处理项目——帧差法运动目标跟踪

    一 帧差法运动目标跟踪概述 1 1 基本原理 帧差法顾名思义就是对输入的前后两帧图像做差值 然后检测出两帧图像不同的地方 并且可以实时跟踪运动的目标轮廓 本设计是基于ZYNQ7010和VIVADO2018 3实现的帧差法运动目标检测 针对运
  • 首期 OSCHINA 季度软件评选活动正式开启,快来投票吧!

    gt https www oschina net project 2020 q1 project 上周我们发出了 OSCHINA 开源软件趋势榜 即将上线的通知 并收到不少软件推荐 首先要感谢大家的热情参与 若有对此还不了解的朋友 OSCH
  • 百人对谈

    他从事 NET技术开发二十余年 连续18年荣获微软最有价值专家 MVP 他积极参与运营 NET技术社区 Dapr中文社区及开源项目 在社区被广大开发者们称为 张队 他不断刷新自我 技术领域拓展至云计算和人工智能 荣获5届华为云开发者专家 H
  • 【云原生之Docker实战】使用Docker部署jpress开源网站

    云原生之Docker实战 使用Docker部署jpress开源网站 一 jpress介绍 1 jpress简介 2 jpress功能 二 检查本地docker环境 1 检查docker版本 2 检查系统版本 3 检查docker状态 三 安
  • LLMs开源模型们的分布式训练和量化

    前一篇博文整理了 LLMs开源模型们和数据集简介 这篇博文主要整理一下目前流行的训练方法和量化 图自Towards a Unified View of Parameter Efficient Transfer Learning Tuning
  • CH347读取MPU6050传感器数据和显示

    CH347读取MPU6050传感器数据和显示 MPU6050 是一款集成了六轴加速度计和陀螺仪的微电子机械系统 MEMS 传感器 它由 InvenSense 现为 TDK 公司开发 是一种广泛应用于姿态估计 运动追踪和稳定控制等领域的常用传
  • 读《企业中的开放源代码》有感

    文章目录 开源代码的益处 开源的本质 开源是一门学科 开源代码的益处 学习出色编码技能的最佳方法是开发开源项目 注意是开发而不是阅读 因为可以研究该领域内顶尖编码员所采用的实践 以更快的方式启动新项目 从此没有必要再闭门造车 开源的本质 我
  • KVM管理平台选型与开源企业级虚拟化平台oVirt详解

    一 KVM管理平台 虚拟化和云计算以在当今IT工业中的用途和优势 成为近年来的技术热点之一 其发展非常迅速 搞KVM虚拟化的时候 面临的一个很重要的问题是 管理平台如何搞定 目前 已经出现了很多与KVM相关的管理工具和云计算平台 比较知名和
  • KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

    来源 阿里巴巴云原生公众号 美国西部时间 2020 年 11 月 18 日 在云原生技术 最高盛宴 的 KubeCon 北美峰会 2020 上 CNCF 应用交付领域小组 CNCF SIG App Delivery 与 Open Appli
  • 百度智能云章淼:详解企业级七层负载均衡开源软件BFE

    随着云计算和云原生的发展 七层负载均衡得到了越来越多的关注 同时也出现了很多不同的解决方案 BFE是基于Go语言编写的七层负载均衡开源软件 在2020年6月被CNCF接受为 沙盒项目 成为中国第一个网络方向的CNCF开源项目 2022年7月
  • BMVC 2022 (东京大学)仅需90K参数!实时完成低光增强, 曝光矫正的超轻量级Transformer网络IAT,已开源

    本文由 52CV 粉丝投稿 作者 信息门下奶狗 知乎地址 https zhuanlan zhihu com p 535695807 我们提出Illumination Adaptive Transformer IAT 网络 用来探索实时的暗光
  • Cumulus Encrypted Storage System(CESS)激励测试网 v0.7.5 于11月29日正式上线

    Cumulus Encrypted Storage System CESS 是基于区块链的去中心化云存储网络和 CDN 网络 支持数据在线存储和实时共享 为 Web3 高频动态数据的存储和检索提供全栈解决方案 CESS 数据价值网络是以 D
  • Python - 字典3

    修改字典项 您可以通过引用其键名来更改特定项的值 示例 将 year 更改为 2018 thisdict brand Ford model Mustang year 1964 thisdict year 2018 更新字典 update 方
  • Cosmopolitan Libc:让 C 语言一次构建、随处运行 | 开源日报 No.109

    jart cosmopolitan Stars 12 9k License ISC Cosmopolitan Libc 使 C 成为一种构建一次运行在任何地方的语言 就像 Java 一样 但它不需要解释器或虚拟机 相反 它重新配置了标准 G
  • 新增工具箱管理功能、重构网站证书管理功能,1Panel开源面板v1.9.0发布

    2023年12月18日 现代化 开源的Linux服务器运维管理面板1Panel正式发布v1 9 0版本 在这一版本中 1Panel引入了新的工具箱管理功能 包含Swap分区管理 Fail2Ban管理等功能 此外 1Panel针对网站证书管理
  • 机器人制作开源方案 | 智能水果分拣机器人

    作者 史振鹏 岳欣宇 仲祝伟 单位 邢台学院 指导老师 王承林 魏亚清 一 场景调研 智能水果分拣机器人是基于探索者设计的一款可搬运可分拣以及移动的一款轻便机器人 集成了语音控制 分拣 搬运 识别 抓取等功能 全部是使用探索者标准件 通过控
  • 开源一个超好用的接口Mock工具——Msw-Tools

    作为一名前端开发 是不是总有这样的体验 基础功能逻辑和页面UI开发很快速 本来可以提前完成 但是接口数据联调很费劲 耗时又耗力 有时为了保证进度还不得不加加班 为了摆脱这种痛苦 经过一周的努力 从零开发了一个灵活无依赖 且集成简单的数据接口
  • 各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录(SSO)系统

    各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录 SSO 系统 单点登录 SSO 是一个登录服务层 通过一次登录访问多个应用 使用SSO服务可以提高多系统使用的用户体验和安全性 用户不必记忆多个密码 不必多次登录浪费时间 下面推荐一
  • 9个最受欢迎的开源自动化测试框架盘点

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 自动化测试框架可以帮助测试人员评估多个Web和移动应用程序的功能 安全性 可用性和可访问性 尽管团队可以自己构建复杂的自动化测试框架 但是当他们可以使用
  • 华为OD机试真题-开源项目热榜--Java-OD统一考试(C卷)

    题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单 推荐给社区里面的开发者 对于每个开源项目 开发者可以进行关注 watch 收藏 star fork 提issue 提交合并请求 MR 等 数据库里面统计了每个开源项目关注 收藏

随机推荐

  • 并行运算出现“_pickle.PicklingError: Can‘t pickle <function calculate at 0x000001ADE8C2EEE0>”

    尝试将需要并行运算的函数同并行运算结构体分开进行并行运算 例 创建一个名为calculate py的新文件 并将以下代码粘贴到该文件中 def calculate num return num 2 主程序的代码如下 import multi
  • 如何优化代码中大量的if/else,switch/case?

    前言 随着项目的迭代 代码中存在的分支判断可能会越来越多 当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候 我们就要考虑下 有办法能让这些代码变得更优雅吗 正文 使用枚举 这里我们简单的定义一个表示状态的枚举 public e
  • qq的Tencent://Message/协议

    QQ即时聊天代码 为QQ号码 以前这样写 http wpa qq com msgrd V 1 Uin Site hexun com ngdao Menu yes 现在这样写 tencent message uin Site hexun co
  • upload-master-pass8

    第八关 又是黑名单绕过 但是没有处理 DATA 引用某位大佬的解释就是 php在window的时候如果文件名 DATA 会把 DATA之后的数据当成文件流处理 不会检测后缀名 且保持 DATA 之前的文件名 他的目的就是不检查后缀名 验证
  • ASCII、Unicode、UTF-8、GBK、全角/半角

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 定义 1 ASCII 2 Unicode 3 UTF 8 4 GB2312 5 GBK 6 u和 x 7 全角和半角 二 相互
  • 【IEDA】ERROR!

    一 中文乱码 public class litera public static void main String args 整数 System out println 100 小数 System out println 0 01 字符 S
  • LINUX DRM 入门一条龙

    使用nanopiM3 s5p6818 LINUX 内核4 4 172 使用HDMI接口显示图像 源码 usb2hdmi 使用usb传输FB数据 hdmi接口输出 情景分析法 使用modetest命令作为应用层的测试例程 modetest M
  • 28黑马QT笔记之QPixmap保存图片

    28黑马QT笔记之QPixmap保存图片 1 QPixmap QImage QPictrue三种绘图工具之间的区别 上一篇我们讲到QPixmap如何在窗口进行绘图 接下来本篇要讲的是QPixmap如何保存一张图片 即将已有图片再按自己方式保
  • 线性代数的本质——线性组合,张成空间和基

    本文是对BiliBili上的一个系列视频的学习记录 非常推荐大家去B站上观看 记得三连 不要白嫖 链接 https www bilibili com video av6731067 p 2 上文中说到 向量坐标中的数字 可视为对基向量的拉伸
  • TypeError: ‘DataContainer‘ object is not iterable解决

    mmsegmentation训练的过程中eval时报错 环境如下 sys platform linux Python 3 8 13 default Mar 28 2022 11 38 47 GCC 7 5 0 CUDA available
  • php assert执行命令,代码执行&命令执行&命令注入

    代码执行 命令执行 命令注入 代码执行 代码执行是靠脚本代码调用操作系统的命令 eval eval string code mixed 把字符串 code 作为PHP代码执行 eval POST c 直接蚁剑链接密码为c 中国菜刀 ckni
  • mapbox-gl图形绘制并编辑已有图层

    文章目录 前言 1 react中使用mapbox gl draw绘制 2 已有图层编辑 3 绘图控件的控制 4 数据缓存造成的一个bug 问题描述 原因 解决方案 总结 前言 相信经常和地理数据打交道的小伙伴都有过标绘地理数据的经历 使用A
  • 窗口子类化和超类化

    目录 窗口子类化 窗口超类化 窗口子类化 窗口子类化的目的是在不修改现有代码的前提下 扩展现有窗口 控件的功能 它的思路很简单 就是将窗口过程地址修改为一个新函数地址 新的窗口过程函数处理自己感兴趣的消息 将不感兴趣的消息丢给原窗口过程处理
  • 11、Iterable迭代

    3 6 Iterator es6新特性 使用iterator来遍历迭代数组 map set 遍历数组 通过for of for in 下标 var arr 3 4 5 for var x of arr console log x 遍历map
  • Python中字符串转义字符的用法----退格符\b

    鄙人第一次写博客 如果有错误 或者表达不当的 希望有大佬们多多指点 我将不甚感激 退格符 b b代表backspace 平时电脑使用这个键就是删除 可以把一个退格符看成一个backspace键 他的原理相当于把一个字符删去 用后面的字符代替
  • 第二章 索引-练习题

    第二章 索引 练习题 首先要导入对应的模块 import pandas as pd import numpy as np Ex1 公司员工数据集 现有一份公司员工数据集 df pd read csv data company csv df
  • 为什么苹果蓝牙耳机连上还是公放_如何测试蓝牙设备的延时

    蓝牙设备的延时准确测量很复杂 但是这里有个小工具 自己动手就可以做 数据一出胜过嘴炮 1 首先去下载安装superpowered latency ios 安卓版的都有 Test iOS and Android Audio Latency w
  • Javafx集成sqlite数据库

    什么是SQLite SQLite是一款非常轻量级的关系数据库系统 支持多数SQL92标准 SQLite在使用前不需要安装设置 不需要进程来启动 停止或配置 而其他大多数SQL数据库引擎是作为一个单独的服务器进程 被程序使用某种内部进程通信
  • input输入子系统分析

    input输入子系统分析 input子系统学习 总体框架分析 从事件处理过程 程序 看input子系统 对设备驱动层的分析 对事件处理层的分析 对核心处理层 input c 的分析 input子系统学习 Input子系统作为linux下很重
  • 静态代码分析工具清单:开源篇

    http hao jobbole com static code analysis tool list opensource lang utm source blog jobbole com utm medium sidebar resou