对于前5个免费WordPress打印插件感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解web打印插件推荐,并且为您提供关于2015年4月最新15个免费jQuery插件推荐、MWeb1.3.
对于前 5 个免费 WordPress 打印插件感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解web打印插件推荐,并且为您提供关于2015年4月最新 15 个免费 jQuery 插件推荐、MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。、mybatis 插件,sql 打印插件、N 个免费 DevOps 开源工具,没用过,至少应该了解!的宝贵知识。
本文目录一览:- 前 5 个免费 WordPress 打印插件(web打印插件推荐)
- 2015年4月最新 15 个免费 jQuery 插件推荐
- MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。
- mybatis 插件,sql 打印插件
- N 个免费 DevOps 开源工具,没用过,至少应该了解!
前 5 个免费 WordPress 打印插件(web打印插件推荐)
您是否曾经在网站上遇到过想要打印出来供以后使用的某些内容?这可以是数学练习工作表、当地国家公园的地图、技术手册或美味佳肴的食谱之类的任何东西。
让您的用户能够以最佳方式打印这些页面将使您的网站更加用户友好。
在本教程中,我将向您介绍一些最好的 WordPress 免费打印插件。
使用打印插件的好处
您只需按 Windows 上的键盘快捷键 Control-P 或 Mac 上的 Command-P 即可轻松获得打印网页的选项。因此,很自然地想知道为什么需要安装打印插件。
打印插件有很多有用的用途:
点击下载“修复打印机驱动工具”;
- 屏幕和印刷品是两种完全不同的信息消费媒体。在屏幕上看起来不错的内容在打印时不一定好看。一个好的打印插件将确保您的内容看起来不错并且打印后更易于阅读。
- 网页通常包含许多 UI 元素,例如导航菜单或通知徽章,这些元素在打印格式中没有任何作用。因此,使用打印插件自动从要打印的页面中删除元素是有意义的。
- 从网页中删除不必要的背景和图像还可以节省墨水和纸张。这将使您的网站既经济又环保。
- 某些打印插件还提供添加您自己的品牌的选项,例如网页打印版本中的网站名称。这可以帮助您在线上和线下获得认可。
现在我们清楚了在网站上使用打印插件的好处,让我们看看 WordPress 提供的一些最佳打印插件。
打印-O-Matic
Print-O-Matic 是一款评价很高的打印插件,可让您打印网站的任何帖子或页面。
您还可以定位要打印的特定页面元素。例如,某人可能正在阅读一篇有关人口变化的文章,只想打印一张表格,列出一个国家数十年来多个城市的人口增长情况。您可以使用 Print-O-Matic 来专门打印该特定内容。
此插件使用 [print-me] 短代码在网页上显示打印按钮或徽标。您可以通过短代码使用不同的属性来自定义特定打印按钮的外观和功能。
您可以将 target 属性的值设置为任何 HTML 标记、类名或 ID,以指定要打印的元素。还可以使用占位符动态指定打印目标。
还有两个名为 html_top 和 html_bottom 的属性,用于指定要放置在网页顶部或底部的自定义 HTML。
有时,打印页面上的所有内容可能需要一段时间才能正确加载。在这种情况下,您可以使用 pause_before_print 属性来指定打印对话框出现之前的延迟。
该插件还有文档中提到的许多其他有用的短代码属性。不要忘记查看一些正在运行的插件示例,以了解其所有功能。
打印我的博客
打印我的博客插件是另一个功能丰富的打印插件,您可以轻松地将其集成到您的网站中。
该插件具有三个主要功能:
快速打印
它让您只需点击几下即可打印数千篇博客文章。您可以将一系列选项传递给“快速打印”,例如打印注释、调整图像大小或删除图像、删除超链接或包含帖子摘录。
打印按钮
它允许用户打印您网站上的特定帖子或页面。您可以告诉插件在打印时跳过页眉、侧边栏、页脚等。您可以使用短代码在您喜欢的任何地方显示打印按钮。该按钮使用主题中的 CSS 来实现无缝集成。
专业打印
此功能允许您创建 PDF、ePub 或 MOBI 文件作为便携式备份。还可以复制整个博客,然后快速将其粘贴到 MS Word 和 Google Docs 等程序中。某些 Pro Print 功能是免费的,而其他功能(例如添加页面引用或脚注)则需要付费的 Pro PDF 服务。
如果您想以电子书的形式打印或分发多篇文章,此插件是一个绝佳的选择。
WP 打印
WP Print 插件是一个简单、轻量级的解决方案,适合那些不想要或不需要花哨东西的人。
配置选项非常基本,允许您指定在打印命令的帖子或页面上显示的文本。您还可以选择不打印评论、链接、图像或视频。还可以添加将打印在每页上的免责声明。
您可以通过将帖子内容的一部分放入 [donotprint][/donotprint] 来防止打印。内容在实际页面上仍然可见,只是在打印版本中隐藏。
您可以在此插件中使用您自己的自定义模板,因为它会首先尝试从您的主题目录加载与打印相关的 CSS 和 PHP 文件。如果不存在这样的文件,它将加载插件附带的默认文件。这意味着您可以轻松升级插件,而不必担心您的自定义内容被覆盖。
这个插件的唯一缺点是它要求您至少具备一点技术知识才能充分利用其功能。
通过 PrintFriendly 进行打印、PDF、电子邮件
PrintFriendly 插件的打印、PDF、电子邮件对于那些想要具有时尚、精美的用户友好型 UI 的打印解决方案的人来说是一个不错的选择。
该插件提供了不错的自定义选项,其中包括启用或禁用生成 PDF 或通过电子邮件发送页面的选项。您可以添加自定义页眉和页脚,这些页眉和页脚将包含在打印和 PDF 格式的每个页面中。
打印按钮有多种预设样式。但是,如果您愿意,您也可以为打印按钮使用自定义图像和自定义文本。
还可以在网站的印刷版和 PDF 版本中包含版权声明。您可以应用自己的 CSS 规则来完全控制打印的内容。
默认情况下,可打印内容选择依赖于 WordPress 模板的使用。但是,您也可以使用自己的自定义选择器,或者让内容算法发挥其魔力并找出应该打印的内容。
还值得记住的是,该插件的免费版本是支持广告的。但是,广告仅显示在打印/PDF/电子邮件确认窗口上,而不显示在其他地方。
PDF 和打印
PDF 和打印插件可以出色地为您快速轻松地创建 PDF 文件和适合打印的页面。
您可以在网站的不同部分(例如帖子、页面、档案甚至搜索结果)添加 PDF 或打印按钮。您可以将按钮放置在网页内容的四个角中的任意一个角上。也可以将这些按钮添加到小部件区域。该按钮也可以通过短代码显示。
按钮类型可以是纯文本、纯图像或图像和文本。 PDF 按钮还可以配置为下载或在新窗口中打开 PDF。该插件已支持 RTL。
该插件的一个有趣功能是,您可以根据用户角色控制谁可以查看 PDF 和网页上的打印按钮。
该插件的专业版允许您将自定义页眉和页脚模板添加到打印页面。模板可以包含图像、文本、页码、发布日期等。
哪个插件适合您?
本文向您简要概述了一些最好的 WordPress 免费打印插件。您还了解了为什么拥有打印插件很重要,以及它如何为想要打印您的网页以供离线使用的用户改善用户体验。
适合您的插件取决于您的需求。
大部分控制
Print-O-Matic 最适合那些想要精确控制打印网页内容的人。
多页打印
打印我的博客对于那些想要快速解决打印多个页面甚至整个网站的人来说是理想的选择。
轻量级
WP Print 插件适合正在寻找具有完整自定义功能的轻量级解决方案的人们。
以上就是前 5 个免费 WordPress 打印插件的详细内容,更多请关注php中文网其它相关文章!
2015年4月最新 15 个免费 jQuery 插件推荐
我们为您收集了15个免费的 jQuery 插件,助力你的项目设计。jQuery 插件一直在更新发布,因此它十分受人喜爱,开发者所要考虑的就是在众多插件中寻找最好的那个。这就是为什么我们写这篇文章的原因——为你提供最好的 jQuery 插件。
jQMeter
jQMeter 是一个简单的,轻量级的 jQuery 插件,可以让动态显示水平或竖直的进度表。
Demo || Download
Prism Effect Slider
Prism Effect Slider 可以在滑杆上实现一个简单的“棱镜”效果。其原理是,通过在滑杆的前方加上一个几何形状来反射每个滑杆的图片。
Demo || Download
Fixed Background Effect
Fixed Background Effect 是一个简单的样板,它利用背景附件的 CSS 属性来打造一个固定的背景效果。
Demo || Download
Animated Dropdown Mega Menu
Animated Dropdown Mega Menu 是一个动态的下拉菜单。
Demo || Download
Audio Recording
Audio Recording 可以通过定制的HTML5音频播放器,利用 jQuery 和 HTML5 在新闻源上发布语音记录信息。
Demo || Download
jQuery Progress Tracker
jQuery Progress Tracker 是一个小的(2KB)jQuery 插件,它在你的目录上创建了一个修复进程导航,并且能在上面添加链接。
Demo || Download
Hover Effects Builder
Hover Effects Builder 可在你的网站上实现悬停效果。
Demo || Download
iFrame Resizer
iFrame Resizer 能自动调整高度和宽度,并跨越 iFrames 域来调整内容的合适大小。
Demo || Download
Loaders.css
Loaders.css 是完全由 CSS 写成的加载动画集合。
Demo || Download
simpleFilter.js
simpleFilter.js 是一个易用的 jQuery 插件,它可以为你的网站提供一个图片过滤库。
Demo || Download
Gridder.js
Gridder.js 可以显示扩大的预览图,就像 Google 图片那样。
Demo || Download
Spectrum
Spectrum 是一个动态的、多颜色的 jQuery 插件,可在你的 web 应用上加上微妙的颜色过渡。
Demo || Download
Tour Tip Guide!
Tour Tip Guide 是一个好看的导航手册。
Demo || Download
WebSnowjq.js
WebSnowjq.Js 是一个用 HTML5 和 JavaScript 写成的插件,它能在网站上实现虚拟的雪花效果。
Demo || Download
Responsive Facebook Style Timeline Design With Bootstrap
Responsive Facebook Style Timeline Design With Bootstrap 可用 Twitter 的 Bootstrap 实现 Facebook 风格的时间轴设计。
Demo || Download
Source:Developersfeed
MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。
<h2 id="toc_0">MWeb 1.3.7 版的新功能</h2>
<ul> <li>增加发布到 Wordpress 等支持 Metaweblog API 的服务,目前经测试过的有: Wordpress 博客、新浪博客、cnblogs、oschina。</li> <li>增加发布到 Tumblr 和 Scriptogr.am </li> <li>即时预览改进,原来会闪动,现在拿掉了同步滚动功能后不会了。</li> <li>编辑器和三栏切换也有小改进。</li> </ul>
<h2 id="toc_1">下边介绍一下发布到 Wordpress 等支持 Metaweblog API 的功能</h2>
<p>我所知,Mac 下支持这一功能的 Native 的 Markdown 编辑器就只有 MWeb 了。之前用过 Live Writer 的朋友都知道这功能非常好用,因为加图片非常方便!然后是离线写作,不用担心内容丢失,还可以方便地发布到多处地方。我之前用 Live Writer 时还会时不时要切到 HTML 代码下去修正一下格式问题,有点难用,现在用 Markdown 的话,就不会有这情况了。可以说:Markdown 和 Metaweblog API 才是真正的完美结合!</p>
<p>在 MWeb 中点菜单:<code>MWeb</code> - <code>Preferences</code> - <code>Publishing</code> 即可进入发布设置界面,如下:</p>
<p><img src="http://static.oschina.net/uploads/img/201504/17093925_FuAC.jpg" alt=""/></p>
<h3 id="toc_2">增加发布到 Wordpress 的服务</h3>
<p>点 Wordpress.org 这个按钮,如下图,由于 Wordpress 的远程发布网址可以由博客网址得知,所以只需要填入博客网址、帐号、密码即可。密码是存到 Keychain,所以可无需担心。<br/> <img src="http://static.oschina.net/uploads/img/201504/17093927_x1hn.jpg" alt=""/></p>
<h3 id="toc_3">增加发布到 新浪博客、cnblogs、oschina 的服务</h3>
<p>点 Metaweblog API 这个按钮,如下图,必填的只有 帐号、密码、Publish URL。Publish URL 这个一般支持 Metaweblog API 的服务都会提供的。</p>
<p><img src="http://static.oschina.net/uploads/img/201504/17093927_CKSG.jpg" alt=""/></p>
<p>下面说一下新浪博客、cnblogs、oschina 的 Publish URL。</p>
<ul> <li>新浪博客的 Publish URL:<a href="http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php">http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php</a></li> <li>cnblogs 的 Publish URL:<a href="http://www.cnblogs.com/Blog%E5%90%8D/services/metaweblog.aspx">http://www.cnblogs.com/Blog名/services/metaweblog.aspx</a>。其中 <strong>Blog 名</strong> 请换为您的博客名。cnblogs 的博客后台设置,拉到最下面,也可以找到这个网址。比如说我的是 <a href="http://rpc.cnblogs.com/metaweblog/OtisBlog">http://rpc.cnblogs.com/metaweblog/OtisBlog</a> 两者网址不同,但是效果一样。</li> <li>oschina 的 Publish URL:<a href="http://my.oschina.net/action/xmlrpc">http://my.oschina.net/action/xmlrpc</a></li> </ul>
<h3 id="toc_4">发布</h3>
<p>如下图红框处,你可以在 MWeb 分享按钮(右上角的第三个按钮)中找到所增加的发布服务。名称会显示 <code>Blog Name</code> 中设定的名称。</p>
<p><img src="http://static.oschina.net/uploads/img/201504/17093920_7QSi.jpg" alt=""/></p>
<p>比如说我要发布到我的 Wordpress 博客,点 <code>oulvhai 的 Wordpress 博客</code>,如下图:<br/> <img src="http://static.oschina.net/uploads/img/201504/17093929_iYWk.jpg" alt=""/></p>
<p>要注意的时,有些博客服务是不支持上边的一些设置的,比如说 <code>Custom URL</code>、<code>Publish Date</code>、<code>Status</code> 等。设定好后,点 <code>Publish</code> 按钮就可以发布了。</p>
<p>要说明的是:Metaweblog API 有自动上传图片的功能,有看到我现在这文章的图片都是在本地的,发布时就会自动把图片上传到所发布的博客服务。所以就不用找图床了。我这文章会发布到以下几个地方:</p>
<ul> <li>我的用 MWeb 静态网站功能生成的个人博客:<a href="http://coderforart.com">http://coderforart.com</a></li> <li>同样用 MWeb 静态网站功能生成的 MWeb 中文官网:<a href="http://zh.mweb.im">http://zh.mweb.im</a></li> <li>我的 Wordpress 测试博客:<a href="http://appbk.sinaapp.com/">http://appbk.sinaapp.com/</a></li> <li>我的新浪博客:<a href="http://blog.sina.com.cn/oulvhai">http://blog.sina.com.cn/oulvhai</a></li> <li>我在 cnblogs 的博客:<a href="http://www.cnblogs.com/OtisBlog">http://www.cnblogs.com/OtisBlog</a></li> <li>我在 oschina 的博客:<a href="http://my.oschina.net/oulvhai">http://my.oschina.net/oulvhai</a></li> </ul>
<h2 id="toc_5">关于 MWeb Lite</h2>
<p>MWeb Lite 的定位是 Markdown 编辑器和一些 MWeb 正式版的功能的体验。对于轻度使用 Markdown 的朋友来说, MWeb Lite 已足够了,MWeb 正式版的功能大部分用不到。MWeb Lite 的 Markdown 编辑器功能是跟 MWeb 正式版一样的。这个功能会随着 MWeb 这个产品的不断打磨而得到更好的体验。目前 MWeb Lite 对于正式版不同的地方有:</p>
<ol> <li>文档库 MWeb Lite 限定为 10 个文档</li> <li>发布服务只能增加 1 个。</li> </ol>
<h2 id="toc_6">其他</h2>
<p>这里说一下用 MWeb 生成的静态博客的好处:可直接打开所生成的 HTML 文档就能预览!这个是不同于 otcpress 等静态博客生成方式的。otcpress 等生成的 HTML 直接打开预览是没办法看到效果的,必须上传或者用 otcpress 来预览。MWeb 的静态博客功能没有 otcpress 这么强大,但是对于简单只想写一下博客的朋友来说,我觉得足够了。当然,下一版也会增强静态博客功能的。</p>
<p>另外发布到 Wordpress.com、bloger、evernote 功能也是会有的,这几个要在 1.4 版发布后才会开始弄。</p>
mybatis 插件,sql 打印插件
import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.ParameterMapping; import org.apache.ibatis.plugin.*; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.defaults.DefaultSqlSession; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Statement; import java.time.temporal.Temporal; import java.util.*; import java.util.regex.Matcher; /** * sql打印插件 * Date: 2019/5/14 * Time: 14:31 * * @author tangwch */ @Slf4j @Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}), @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}), @Signature(type = StatementHandler.class, method = "batch", args = { Statement.class })}) public class SqlLogInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { Object target = invocation.getTarget(); long startTime = System.currentTimeMillis(); StatementHandler statementHandler = (StatementHandler)target; try { return invocation.proceed(); } finally { long endTime = System.currentTimeMillis(); long sqlCost = endTime - startTime; BoundSql boundSql = statementHandler.getBoundSql(); String sql = boundSql.getSql(); Object parameterObject = boundSql.getParameterObject(); List<ParameterMapping> parameterMappingList = boundSql.getParameterMappings(); // 格式化Sql语句,去除换行符,替换参数 sql = formatSql(sql, parameterObject, parameterMappingList); log.info("SQL:[" + sql + "] use: [" + sqlCost + "ms]"); } } @Override public Object plugin(Object o) { return Plugin.wrap(o, this); } @Override public void setProperties(Properties properties) { } private String formatSql(String sql, Object parameterObject, List<ParameterMapping> parameterMappingList) { // 输入sql字符串空判断 if (sql == null || sql.length() == 0) { return ""; } // 美化sql sql = beautifySql(sql); // 不传参数的场景,直接把Sql美化一下返回出去 if (parameterObject == null || CollectionUtils.isEmpty(parameterMappingList)) { return sql; } // 定义一个没有替换过占位符的sql,用于出异常时返回 String sqlWithoutReplacePlaceholder = sql; try { Class<?> parameterObjectClass = parameterObject.getClass(); // 如果参数是StrictMap且Value类型为Collection,获取key="list"的属性,这里主要是为了处理<foreach>循环时传入List这种参数的占位符替换 // 例如select * from xxx where id in <foreach collection="list">...</foreach> if (isStrictMap(parameterObjectClass)) { DefaultSqlSession.StrictMap<Collection<?>> strictMap = (DefaultSqlSession.StrictMap<Collection<?>>) parameterObject; if (isList(strictMap.get("list").getClass())) { sql = handleListParameter(sql, strictMap.get("list"), parameterMappingList); } } else if (isMap(parameterObjectClass)) { // 如果参数是Map则直接强转,通过map.get(key)方法获取真正的属性值 // 这里主要是为了处理<insert>、<delete>、<update>、<select>时传入parameterType为map的场景 Map<?, ?> paramMap = (Map<?, ?>) parameterObject; sql = handleMapParameter(sql, paramMap, parameterMappingList); } else { // 通用场景,比如传的是一个自定义的对象或者八种基本数据类型之一或者String sql = handleCommonParameter(sql, parameterMappingList, parameterObjectClass, parameterObject); } } catch (Exception e) { log.error(e.getMessage(), e); // 占位符替换过程中出现异常,则返回没有替换过占位符但是格式美化过的sql,这样至少保证sql语句比BoundSql中的sql更好看 return sqlWithoutReplacePlaceholder; } return sql; } /** * 美化Sql */ private String beautifySql(String sql) { sql = sql.replaceAll("[\\s\n ]+", " "); return sql; } /** * 处理参数为List的场景 */ private String handleListParameter(String sql, Collection<?> col, List<ParameterMapping> parameterMappingList) { final Object[] objects = col.toArray(); final int groupSize = parameterMappingList.size() / objects.length; for (int i = 0; i < objects.length; i++) { sql = this.formatSql(sql, objects[i], parameterMappingList.subList(i * groupSize, (i + 1) * groupSize - 1)); } return sql; } /** * 处理参数为Map的场景 */ private String handleMapParameter(String sql, Map<?, ?> paramMap, List<ParameterMapping> parameterMappingList) { List<ParameterMapping> current = Lists.newArrayList(); final HashMap<Object, Object> currentMap = Maps.newHashMap(); currentMap.putAll(paramMap); for (ParameterMapping parameterMapping : parameterMappingList) { final String property = parameterMapping.getProperty(); final String fieldName = property.startsWith("__frch_record_") ? property.substring(property.indexOf(".") + 1) : property; Object propertyValue = currentMap.get(fieldName); current.add(parameterMapping); sql = this.formatSql(sql, propertyValue, current); current.clear(); } return sql; } /** * 处理通用的场景 */ private String handleCommonParameter(String sql, List<ParameterMapping> parameterMappingList, Class<?> parameterObjectClass, Object parameterObject) throws IntrospectionException, InvocationTargetException, IllegalAccessException { String propertyValue = "null"; // 基本数据类型或者基本数据类型的包装类,直接toString即可获取其真正的参数值,其余直接取paramterMapping中的property属性即可 if (isPrimitiveOrPrimitiveWrapper(parameterObjectClass)) { propertyValue = parameterObject.toString(); } else if (String.class.isAssignableFrom(parameterObjectClass)) { propertyValue = "\"" + parameterObject + "\""; } else if (Enum.class.isAssignableFrom(parameterObjectClass)) { //枚举存int值 propertyValue = String.valueOf(((Enum) parameterObject).ordinal()); } else if (parameterObject instanceof String[]) { //自定义的TypeHandler处理数组 propertyValue = String.join(",", ((String[]) parameterObject)); } else if (parameterObject instanceof Date || Temporal.class.isAssignableFrom(parameterObjectClass)) { //日期处理 propertyValue = "\"" + parameterObject.toString() + "\""; } else if (!CollectionUtils.isEmpty(parameterMappingList)) { for (ParameterMapping parameterMapping : parameterMappingList) { final String property = parameterMapping.getProperty(); final String fieldName = property.startsWith("__frch_record_") ? property.substring(property.indexOf(".") + 1) : property; final PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, parameterObjectClass); final Method readMethod = propertyDescriptor.getReadMethod(); final Object invoke = readMethod.invoke(parameterObject); if (Objects.isNull(invoke)) { sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(propertyValue)); } else { sql = this.formatSql(sql, ImmutableMap.of(fieldName, invoke), parameterMappingList); } } } if (!StringUtils.isEmpty(propertyValue)) { sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(propertyValue)); } return sql; } /** * 是否基本数据类型或者基本数据类型的包装类 */ private boolean isPrimitiveOrPrimitiveWrapper(Class<?> parameterObjectClass) { return parameterObjectClass.isPrimitive() || (parameterObjectClass.isAssignableFrom(Byte.class) || parameterObjectClass.isAssignableFrom(Short.class) || parameterObjectClass.isAssignableFrom(Integer.class) || parameterObjectClass.isAssignableFrom(Long.class) || parameterObjectClass.isAssignableFrom(Double.class) || parameterObjectClass.isAssignableFrom(Float.class) || parameterObjectClass.isAssignableFrom(Character.class) || parameterObjectClass.isAssignableFrom(Boolean.class)); } /** * 是否DefaultSqlSession的内部类StrictMap */ private boolean isStrictMap(Class<?> parameterObjectClass) { return DefaultSqlSession.StrictMap.class.isAssignableFrom(parameterObjectClass); } /** * 是否List的实现类 */ private boolean isList(Class<?> clazz) { return Collection.class.isAssignableFrom(clazz); } /** * 是否Map的实现类 */ private boolean isMap(Class<?> parameterObjectClass) { return Map.class.isAssignableFrom(parameterObjectClass); } }
N 个免费 DevOps 开源工具,没用过,至少应该了解!
在介绍Devops工具之前,先跟随码花来了解下:Devops是个啥?
Devops=【Development】+【Operations】。
简言之,Devops主要用于开发、测试、运维之间的沟通、协作与整合,减少开发和运营之间的摩擦,从而快速部署软件或应用程序,并且可以快速检测。
作为小白,你可能就要问了:那,Devops到底是个什么样的存在形式,是个软件还是啥?
错!!!Devops既不是软件、也不是网站、更不是代码,而是一组方法、过程与系统的统称。
Devops包含了很多优秀想法和原则,它鼓励开发部门和运维部门通力合作。在DevOps环境中,开发人员和系统管理员会构建一些关系、流程和工具,从而更好的与客户互动,最终提供更好的服务。
简单了解了Devops是个啥之后,一起来看看下面这60多款最棒的开源工具,可以帮助你很好的实行 DevOps。
一、开发工具
版本控制&协作开发
1、版本控制系统 Git
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
2、代码托管平台 GitLab
GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
3、代码评审工具 Gerrit
Gerrit是一个免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。
4、版本控制系统 Mercurial
Mercurial是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。
5、版本控制系统 Subversion
Subversion 是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。
6、版本控制系统 Bazaar
Bazaar 是一个分布式的版本控制系统,它发布在 GPL 许可协议之下,并可用于 Windows、GNU/Linux、Unix 以及 Mac OS 系统。
二、自动化构建和测试
1、Apache Ant
Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
2、Maven
Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目现在使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
3、Selenium (SeleniumHQ)
ThoughtWorks公司的一个集成测试的强大工具。
4、PyUnit
Python单元测试框架(The Python unit testing framework),简称为PyUnit, 是Kent Beck和Erich Gamma这两位聪明的家伙所设计的 JUnit 的Python版本。
5、QUnit
QUnit 是 jQuery 的单元测试框架。
6、JMeter
JMeter 是 Apache 组织的开放源代码项目,它是功能和性能测试的工具,100% 的用 java 实现。
7、Gradle
Gradle 就是可以使用 Groovy 来书写构建脚本的构建系统,支持依赖管理和多项目,类似 Maven,但比之简单轻便。
8、PHPUnit
PHPUnit 是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)。
三、持续集成&交付
1、Jenkins
Jenkins 的前身是 Hudson,它是一个可扩展的持续集成引擎。
2、Capistrano
Capistrano 是一个用来并行的在多台机器上执行相同命令的工具,使用用来安装一整批机器。它最初是被开发用来发布 Rails 应用的。
3、BuildBot
BuildBot 是一个系统的自动化编译/测试周期最需要的软件,以验证代码的变化。通过自动重建和测试每次发生了变化的东西,在建设迅速查明之前,减少不必要的失败。
4、Fabric
fabric8 是开源 Java Containers(JVMs) 深度管理集成平台。有了 fabric8 可以非常方便的从 UI 和 UX 一致的中央位置进行自动操作,配置和管理。fabric8 同时提供一些非功能性需求,比如配置管理,服务发现故障转移,集中化监控,自动化等等。
5、Travis CI
Travis CI 是一个基于云的持续集成项目, 目前已经支持大部分主流语言了,比如:C,PHP,Ruby,Python,Nodejs等等。
6、Continuum
Apache Continuum 是最新的 CI 服务器之一,也是值得关注的一个新进入者。基于 Web 的界面使得配置项目很容易。而且,还不需要安装 Web 服务器,因为 Continuum 内置了 Jetty Web 服务器。
并且,Continuum 可以作为 Windows 服务运行,还在应用程序的某些部分嵌入了上下文敏感的文档,从而提供了很多帮助。
7、LuntBuild
LuntBuild 是一个强大自动构建的工具。通过一个简洁的web接口就可以很容易地进行系统的持续构建。
8、CruiseControl
CruiseControl 是一个针对持续构建程序(项目持续集成)的框架,它包括一个email通知的插件,Ant和各种各样的CVS工具。CruiseControl提供了一个Web接口,可随时查看当前的编译状况和历史状况。
9、Integrity
Integrity 是 Ruby 开发的持续集成服务器。
10、Gump
Gump 是 Apache 的整合工具。它以 Python 写成、完全支持 Apache Ant、Apache Maven 等等软件组建工具。
11、Go
Go 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。
四、部署工具
容器平台
1、Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
2、Rocket
Rocket (也叫 rkt)是 CoreOS 推出的一款容器引擎,和 Docker 类似,帮助开发者打包应用和依赖包到可移植容器中,简化搭环境等部署工作。
3、Ubuntu(LXC)
LXD 是 ubuntu 基于 LXC 技术的重构,容器天然支持非特权和分布式。LXD 与 Docker 的思路不同,Docker 是 PAAS,LXD 是 IAAS。LXC 项目由一个 Linux 内核补丁和一些 userspace 工具组成。
这些 userspace 工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。
配置管理
1、Chef
Chef 是一个系统集成框架,为整个架构提供配置管理功能。
2、Puppet
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。
3、CFengine
Cfengine(配置引擎)是一种 Unix 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用。
4、Bash
Bash 是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
5、Rudder
Rudder 已改名为Flannel,为每个使用 Kubernetes 的机器提供一个子网。也就是说 Kubernetes 集群中的每个主机都有自己一个完整的子网,例如机器 A 和 B 可以有 10.0.1.0/24 和 10.0.2.0/24 子网。
6、RunDeck
RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。
7、Saltstack
Saltstack 可以看做是func的增强版+Puppet的弱化版。使用Python编写。非常好用,快速可以基于EPEL部署。Salt 是一个开源的工具用来管理你的基础架构,可轻松管理成千上万台服务器。
8、Ansible
Ansible 提供一种最简单的方式用于发布、管理和编排计算机系统的工具,你可在数分钟内搞定。Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
微服务平台
1、OpenShift
OpenShift 是由红帽推出的一款面向开源开发人员开放的平台即服务(PaaS)。 OpenShift通过为开发人员提供在语言、框架和云上的更多的选择,使开发人员可以构建、测试、运行和管理他们的应用。
2、Cloud Foundry
Cloud Foundry 是VMware于2011年4月12日推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
3、Kubernetes
Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。
4、Mesosphere
Apache Mesos 是一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。
服务开通
1、Puppet
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。
2、Docker Swarm
Docker Swarm 是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
3、Vagrant
Vagrant 是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境。它使用 Oracle 的开源 VirtualBox 虚拟化系统,使用 Chef 创建自动化虚拟环境。
4、Powershell
5、OpenStack Heat
五、维护
日志记录
1、Logstash
Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。
2、CollectD
collectd 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。比如以RRD 文件形式。
3、StatsD
StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,例如 Graphite。
六、监控,警告&分析
1、Nagios
Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
2、Ganglia
Ganglia 是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可视化。
3、Sensu
Sensu 是开源的监控框架。主要特性:高度可组合;提供一个监控代理,一个事件处理器和文档 APIs;为云而设计;Sensu 的现代化架构允许监控大规模的动态基础设施,能够通过复杂的公共网络监控几千个全球分布式的机器和服务;热情的社区。
4、zabbix
zabbix 是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
5、ICINGA
ICINGA 项目是 由Michael Luebben、HendrikB?cker和JoergLinge等人发起的,他们都是现有的Nagios项目社区委员会的成员,他们承诺,新的开源项目将完全兼容以前的Nagios应用程序及扩展功能。
6、Graphite
Graphite 是一个用于采集网站实时信息并进行统计的开源项目,可用于采集多种网站服务运行状态信息。Graphite服务平均每分钟有4800次更新操作。
7、Kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
出处:华为开发者社区
关于前 5 个免费 WordPress 打印插件和web打印插件推荐的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于2015年4月最新 15 个免费 jQuery 插件推荐、MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。、mybatis 插件,sql 打印插件、N 个免费 DevOps 开源工具,没用过,至少应该了解!等相关内容,可以在本站寻找。
本文标签: