1 2 3 4 5 6 7 8 9 |
string txt = @"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAAARCAMAAAArMfRlAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACZFBMVEX////61s/+9vTxkn7wiHP5zsXtblX4yb/sZkv++Pftb1b4y8H74NrueGD+9/XyloTxjXn4y8LvhG7//v7+9fP619D2uKz86uf1saTtcVjsalDqXUDsak/qWz/98vD0qpvrYETvgGrvg23vgWvqWj3ud1/1r6H1sqT629T5z8frZEn3w7n++vrsbVT7497//v3vgWv50Mf4xrz2t6vqWz74ysH73dfrYUX2u6/3vrP1rZ/saU7ufWb1sKLsZ0zwinXvf2jtb1XrYkb1s6btcFf//PvueGHznYzsbVP4xbvynYvqXUHuemPvhW/97+z749785uHufGX85N/73df62NH50MjrX0P3wLTvgmz2ua362NHtcln61c7rX0L85uL51Mz//PzqXD/zoZH+9PL98e74ycDsbFLrYEX2t6rvgGnufGXtdVzudl72uq7ymYfxkn/wh3HzpJTrZkvvg27xlYLxkH3wiXX86ub85eH97ur98/HsaE7udl7rY0jsaE32uq73vLHymoj//f397er5zcTzn4797+3tcVj508vsa1L4yL72vLD0qpv+9/b3w7jwhnHrZEjuemL0qJn86OTzno32taj3vrL74dv739n739rqXkLsa1H+8/H3wrf73tj2tajrZUr4zMPue2Txk4D3wLXwjHj++ff0pZX50sr3wrf3wbbtc1v1saPzpJTtdV3wh3LwhXDzopL/+/ryl4X2tqn74dzvfmjxjnvueWL1r6H1s6Xxj3v86OT++vn4x7398O75zcT1tKf3v7T86eXwjHj0q5z0ppbwi3f97uv85ODtdFv4xLry8julAAAAAWJLR0QAiAUdSAAAA41JREFUSMfVlPtbTEEYx9+2Op1yqLRa02XjNCnataxuK2pbhYguIqRsRCKEdS1JS5RyTyQUIRa5leu63/1TZs6Zczbxk/U8Ht8f5jvv2dl5P+eddw7Afy8fzd/by9ePyVcK/TkyBPDyb4FBo0AYPUYOgkNU+ZAwdGyYd4m14zxzPlwnKZwkHo9QRCRCKCqaDHqAmAkTxVgcJ4riJLIwXiBKmCwIUxIBDMapXr69adp0D4RZdjP/SyVmJCUD6HHK8IX+qWRGINJC1B0sSPaZ6UaOm6WB2RERGenxoDpRJtaBxopQlm2O6iBk56gQ3FxJ86TEofO1EBaUaKDz3AUL8/z8FmErOavFFCKfVCJ8glBAIQoDRkIUYbk2S5KKAZbiqYqTR2nLCISkNOMwzyz5fSWWrwBYiUsJ1CoSleXq9eV4tV6vt9OFtCuiKkLWEIi1SZUjIdaxRirJouP6RMUBCqo2KBDJGcM8t1rZYuOmGkmbNpJg8xb71pm127Ra7fZQCrHD4diJdzkcjt2Mdk+ZfBwJNhLsLY1CaOI+S101l1G/1rx/EUINtYYDNXTbmkbFwV54UCdDNKX4WYe5M5pdsMCAQBoekhs20jra5ns4gbwlL0HUi2I1ziONKTZJEM1HdskQRxvo2bWEKZWw17Wa0+l2qdNXyMmPKQ5tR9oliOMnTp46XelxgGWs3c7gM/JZ2OedBZOzgy92QmIwg6A61+k5t/OlFtaYF7pMALrSFu5iXLd0HMgiQQB3aWQlLpclAIVw4g4tfaI40ZRxCkQLx10x9/RevdYO0HfdSZ7dqCqQIDiqiu10RDT1zVhBuR2Gsj3y/5sa+hlEch2Njbdut0i9cFzxxnSXKxtn3+nE7dI/FAfIqSj6qRIL716g0T2SbwDg/gOlEg8f4UgLq0SJP6m+v02+otcfs4341QyiPJpsuber+DyeTBoP5ytOV9FKCCy5oEIM2uwjjgNg1m71O2JiEP1xa+a2DT0pV65RPJflkCH668NA95TjevLaGQR0GBE6eRbgWV1VasNsj6sQ2eQTiHoVB3j+guV7iYvc7pxXvNvt5gc1MVsG6oOa4LXT2fMGKt8OOfIhqxF6azPfPQTeupWpi0BAbCt4KZPrKJsZBlwu14z3Q+SS7ghc/OFjMi3HJ1H83Az5o+gNuveODF/6NNCZoqqbPPr6TfvH6WV9P+Hta3ivblf5v0ZQ9QOnhO0Euy9VSAAAAABJRU5ErkJggg=="; var tmpArr = txt.Split(','); byte[] bytes = Convert.FromBase64String(tmpArr[1]); using (MemoryStream ms = new MemoryStream(bytes)) { ms.Write(bytes, 0, bytes.Length); var img = Image.FromStream(ms, true); img.Save("demo.png"); } |
摘自:http://www.itnose.net/detail/6387947.html
View Detailsbase64的形式为“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0。。。。”; 当接收到上边的内容后,需要将data:image/png;base64,这段内容过滤掉,过滤成:“iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0。。。”;然后进行保存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
app.post(<span class="hljs-string">'/upload'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(req, res)</span></span>{ <span class="hljs-comment">//接收前台POST过来的base64</span> <span class="hljs-keyword">var</span> imgData = req.body.imgData; <span class="hljs-comment">//过滤data:URL</span> <span class="hljs-keyword">var</span> base64Data = imgData.replace(<span class="hljs-regexp">/^data:image\/\w+;base64,/</span>, <span class="hljs-string">""</span>); <span class="hljs-keyword">var</span> dataBuffer = <span class="hljs-keyword">new</span> Buffer(base64Data, <span class="hljs-string">'base64'</span>); fs.writeFile(<span class="hljs-string">"image.png"</span>, dataBuffer, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(err)</span> </span>{ <span class="hljs-keyword">if</span>(err){ res.send(err); }<span class="hljs-keyword">else</span>{ res.send(<span class="hljs-string">"保存成功!"</span>); } }); }); from:https://segmentfault.com/a/1190000005364299 |
Grafika 是一个 PHP 的图像处理库。可用于改变图像大小、剪切、比较,以及添加水印等操作。同时可以创建一些文本图片、几何图形并应用一些过滤器。基于 Imagick 和 GD 构建。 特征 智能裁剪 图像比较 感知哈希 高级图像处理过滤器 贝塞尔曲线 示例代码: ? 1 2 3 4 5 6 7 useGrafika\Grafika; $editor= Grafika::createEditor(); $editor->open( "path/to/jpeg/image.jpg"); $editor->resizeExact( 200, 200 ); $editor->save( "path/to/edited.jpg", null, 90 ); osc地址:http://www.oschina.net/p/grafika
View DetailsEmoji表情字符现在在APP已经广泛支持了。但是Mysql的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常: Incorrect string value: '\xF0\x90\x8D\x83…' for column 原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。 解决的方案有两种: 1.使用utf8mb4的mysql编码来容纳这些字符。 2.过滤掉这些特殊的表情字符。 关于第一种解决方法,请参考:http://segmentfault.com/a/1190000000616820 和 http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/ 有大量细节需要注意,例如:mysql版本,mysql的配置,mysql connector的版本等等。。 因为我们使用的云数据库,所以我选择了过滤这些特殊字符。其实过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。 下面是我的代码。 更多可以参考:http://stackoverflow.com/questions/27820971/why-a-surrogate-java-regexp-finds-hypen-minus import org.apache.commons.lang3.StringUtils; public class EmojiFilterUtils { /** * 将emoji表情替换成* * * @param source * @return 过滤后的字符串 */ public static String filterEmoji(String source) { if(StringUtils.isNotBlank(source)){ return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*"); }else{ return source; } } public static void main(String[] arg ){ try{ String text = "This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 "; System.out.println(text); System.out.println(text.length()); System.out.println(text.replaceAll("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]", "*")); System.out.println(filterEmoji(text)); }catch (Exception ex){ ex.printStackTrace(); } } } from:http://blog.csdn.net/shootyou/article/details/44852639
View Details基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理。 微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。 具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。 平台注册 要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下: 打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“立即注册”。 然后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。 在注册完成以后,我们要对公众号进行一些基本的设置。登录公众号,找到【公众号设置】,然后设置头像以及其它信息。 nodejs环境搭建 我们需要在公网上找一台服务器,以便可以启动我们的nodejs的环境,启动环境后通过设置访问地址,我们就可以接收微信服务器发送的消息了,并且我们也可以向微信服务器发送消息了。 在公网的服务器中安装完成nodejs以后,我们还需要安装一些nodejs所用到的模块,如:express,node-xml,jssha等模块。可以通过npm命令进行安装。 我们通过nodejs来实现向微信服务器消息的发送与接收,以及与微信服务器的签名认证。 在我们右面的编辑环境中已经为同学们安装了nodejs环境。我们在接下来内容中就为同学们来实现微信服务器的签名认证。 创建express框架 我们在前面的课程中已经安装了express模块,并且在我们右面的环境中已经创建了一个名为app.js的文件。现在我们就在这个文件中完成express框架。如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="hljs-keyword">var</span> express = <span class="hljs-built_in">require</span>(<span class="hljs-string">"express"</span>); <span class="hljs-keyword">var</span> path=<span class="hljs-built_in">require</span>(<span class="hljs-string">'path'</span>); <span class="hljs-keyword">var</span> app = express(); server = <span class="hljs-built_in">require</span>(<span class="hljs-string">'http'</span>).Server(app); app.set(<span class="hljs-string">'views'</span>,__dirname); <span class="hljs-comment">// 设置视图 </span> app.set(<span class="hljs-string">'view engine'</span>, <span class="hljs-string">'html'</span>); app.engine( <span class="hljs-string">'.html'</span>, <span class="hljs-built_in">require</span>( <span class="hljs-string">'ejs'</span> ).__express ); <span class="hljs-built_in">require</span>(<span class="hljs-string">'./index'</span>)(app); <span class="hljs-comment">//路由配置文件</span> server.listen(<span class="hljs-number">80</span>,<span class="hljs-function"><span class="hljs-keyword">function</span>()</span>{ <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'App start,port 80.'</span>); }); |
然后再添加一个名为test.html的文件。写入以下内容
1 2 3 4 5 6 7 8 9 10 11 |
<span class="xml"><span class="hljs-meta"><!DOCTYPE html></span> <span class="hljs-tag"><<span class="hljs-name">html</span>></span> <span class="hljs-tag"><<span class="hljs-name">head</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>></span> <span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span> <span class="hljs-tag"><<span class="hljs-name">title</span>></span>汇智网<span class="hljs-tag"></<span class="hljs-name">title</span>></span> <span class="hljs-tag"></<span class="hljs-name">head</span>></span> <span class="hljs-tag"><<span class="hljs-name">body</span>></span> <span class="hljs-tag"><<span class="hljs-name">div</span>></span><span class="hljs-tag"><<span class="hljs-name">%=</span></span></span><span class="ruby">issuccess</span><span class="xml"><span class="hljs-tag">%></span><span class="hljs-tag"></<span class="hljs-name">div</span>></span> <span class="hljs-tag"></<span class="hljs-name">body</span>></span> <span class="hljs-tag"></<span class="hljs-name">html</span>></span> </span> |
我们还要添加一个名为index.js的文件,来实现我们的路由。点击编辑环境中的添加文件按钮,添加文件,然后我们写入以下代码,其中GET请求用来验证配置的URL合法性,POST请求用来处理微信消息。
1 2 3 4 5 6 7 8 |
<span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(app)</span></span>{ app.get(<span class="hljs-string">'/'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(req,res)</span></span>{ res.render(<span class="hljs-string">'test'</span>,{issuccess:<span class="hljs-string">"success"</span>}) }); app.get(<span class="hljs-string">'/interface'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(req,res)</span></span>{}); app.post(<span class="hljs-string">'/interface'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(req,res)</span></span>{}); } |
这样我们需要的express框架就完成了,当然我们还可以添加public公共文件夹以及我们要用到的中间件。保存文件,点击【提交运行】,然后点击【访问测试】,去试试吧。记下访问测试的地址,我们将在下一节中会用到该地址。 微信服务器配置 我们登录微信公众平台,在开发者模式下面找到基本配置,然后修改服务器配置。如图所示: 首先URL要填写公网上我们安装nodejs接收与发送数据的路径。我们可以填写上节中【访问测试】的地址,然后加上对应的路由就可以了。
1 2 |
<span class="hljs-string">http:</span><span class="hljs-comment">//724515db515222a9efffd6b092aa955d.me.hubwiz.com/interface</span> |
上面代码是我的访问测试的地址,然后加上前面课程中的路由,同学们要根据自己的访问测试地址与路由来填写。 Token要与我们自定义服务器端的token一致。填写完成以后,就可以点击提交了,在提交以前,我们启动app.js(点击【提交运行】)。这样根据我们的路由匹配就可以验证签名是否有效了。 当配置完成以后,一定要启用配置。 网址接入 公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:
1 2 3 4 5 6 |
参数 描述 signature 微信加密签名 timestamp 时间戳 nonce 随机数 echostr 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 加密/校验流程: 将token、timestamp、nonce三个参数进行字典序排序; 将三个参数字符串拼接成一个字符串进行sha1加密; 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 参数排序 首先我们确认请求是来自微信服务器的get请求,那么就可以在index.js文件中进行添加代码了。然后在app.get('/interface',function(req,res){});的function中进行添加。 先来获取各个参数的值,如下代码:
1 2 3 4 5 6 |
<span class="hljs-keyword">var</span> token=<span class="hljs-string">"weixin"</span>; <span class="hljs-keyword">var</span> signature = req.query.signature; <span class="hljs-keyword">var</span> timestamp = req.query.timestamp; <span class="hljs-keyword">var</span> echostr = req.query.echostr; <span class="hljs-keyword">var</span> nonce = req.query.nonce; |
我们在这里对token进行设置,让其与微信服务器中设置的token一致。 然后对其中的token、timestamp、nonce进行排序,如下代码:
1 2 3 4 5 6 |
<span class="hljs-keyword">var</span> oriArray = <span class="hljs-keyword">new</span> <span class="hljs-keyword">Array</span>(); oriArray[<span class="hljs-number">0</span>] = nonce; oriArray[<span class="hljs-number">1</span>] = timestamp; oriArray[<span class="hljs-number">2</span>] = token; oriArray.sort(); |
这样我们就完成了排序。 参数加密 在上节中我们已经对参数进行了排序,然后我们在这一节中要将参数组成一个字符串,进行SH-1加密。在加密以前要用到jssha模块,在我们的文件中要引用该模块。
1 2 |
<span class="hljs-keyword">var</span> jsSHA = <span class="hljs-keyword">require</span>(<span class="hljs-string">'jssha'</span>); |
在上一节课中我们已经对参数排序完成,并存放在数组中,我们可以通过join方法来生成一个字符串,如下代码:
1 2 |
<span class="hljs-keyword">var</span> original = oriArray.<span class="hljs-keyword">join</span>(<span class="hljs-string">''</span>); |
最后对该数据进行加密,如下代码:
1 2 3 4 |
<span class="hljs-keyword">var</span> jsSHA = <span class="hljs-keyword">require</span>(<span class="hljs-string">'jssha'</span>); <span class="hljs-keyword">var</span> shaObj = <span class="hljs-keyword">new</span> jsSHA(original, <span class="hljs-string">'TEXT'</span>); <span class="hljs-keyword">var</span> scyptoString=shaObj.getHash(<span class="hljs-string">'SHA-1'</span>, <span class="hljs-string">'HEX'</span>); |
好了这样就生成了我们需要的签名字符串scyptoString。 签名对比 我们已经得到了我们想要的签名字符串scyptoString,然后我们就可以与来自微信服务器的签名进行对比了,对比通过,则我们就可以接收与发送消息了。
1 2 3 4 5 6 |
<span class="hljs-selector-tag">if</span>(signature == scyptoString){ <span class="hljs-comment">//验证成功</span> } <span class="hljs-selector-tag">else</span> { <span class="hljs-comment">//验证失败</span> } |
本参考了如下网站,更多内容也请访问: http://www.hubwiz.com/course/569dc7fdacf9a45a69b051cd/ from:http://my.oschina.net/u/2275217/blog/630770
View Details今天我们将整理一大波干货满满的Java示例代码与能力展示素材。 GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能。无论如何,开发工作当中我们几乎不可能绕得开GitHub。 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需、不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术。该项目允许大家创建REST服务、Web应用、任务、数据库迁移等等,且一切都立足于模块实现。另外,大家也可以将其作为简单的命令进行使用。 该项目的目标在于将应用从Java容器中解放出来,允许开发者重新回归main()方法。另外其中还包含部分内置命令,因此就算各位需要处理的代码量不多或者并未向应用中导入任何模块,仍然能够利用Bootique对其加以执行。 2.优雅的问题处理方式 99-problems,光看名字就能对其功能了解一二。很明显,它的作用是帮助大家磨练逻辑编程中的具体技能。大家可以选择利用Java 8、Scala或者Haskell进行问题解决,并最终找到最精致的解决办法。 如果大家喜爱解题,其中还提供多种不同层级的难度供各位选择。另外,如果大家将全部99道难题解决掉,则可进一步冲击Java Deathmatch。如果大家被难住了,请点击此处查看难题——但请注意,认真思考之后再参阅比较好哦。 3.字符串操作 Strman-java库是一套Java 8库,专门用于处理字符串。由于其可用于Maven,因此大家只需要面向选定的构建工具添加关联性即可使用。 如果大家使用过Kik并听说过其遭遇的leftPad问题,那么Strman可能是个更好的选择——其能够返回特定长度的新字符串,且自动填充开头部分内容。另外,其中还提供一整套功能列表,包括向值附加字符串、从特定目录中提取字符以及利用字符串在开始与结束间返回数组等等。 4.数据浏览 如果大家希望通过酷炫的方式进行数据交互,那么Dex绝对不容错过。它能够帮助我们提取、转换及可视化数据,同时附带预测功能。大家可以将可视化结果发布为3D或者其它HTML变量形式。 Dex允许我们生成超过50种不同的可视化模式,其中包括世界地图、参与时间表、网络使用情况等。大家也可以利用R与其运行实例相结合,从而构建起复杂的统计分析与预测分析体系。 民主党与共和党谁能胜出?利用弦状图看个究竟。 5.小小大数据 Tablesaw是一套内存内数据表,其中包含多种数据工具与面向列的存储格式。其设计思路认为没人会面向小型任务执行分布式分析,而大家可以在单一服务器上对200万行级别的表进行交互。 大家能够利用Tablesaw执行各种规则,从而检查显示布局、数据优先级或者针对数据显示及交互向特定用户提供扩展控制范围。在它的帮助下,我们可以利用RDBMS与CSV文件导入数据,添加及删除列,执行映射与规约操作或者将表保存在经过压缩的列式存储格式当中。 6.键值存储 Chronicle Map是一套内存内键值存储方案,其设计目标在于实现低延迟与/或多进程应用,例如贸易与金融市场应用。这套库主要面向中等读取与写入查询延迟场景,允许用户根据服务器中的硬件执行线程数量编写合适的查询机制。 其主要用途包括在单一服务器(例如Redis)中替代低速键值存储方案,或者取代同类面向JVM的解决方案以实现速度提升。大家也可以将部分应用状态移出Java堆,从而降低堆体积及GC压力。 7.负载调查工具 Gumshoe允许大家监控自己的应用性能统计指标。有了它,我们可以精确到具体代码行并了解与堆栈调用及个别栈帧相关的统计数据,从而确切分析资源使用情况(例如TCP、UDP、文件系统或处理器使用量)。 这套库能够在统计数据生成时对其进行捕捉、过滤与可视化处理,从而更为直观地实现数据结论查阅。如果需要更为具体地使用,大家还可以在数据捕捉与/或可视化处理过程中过滤栈帧,并在其运行中加以变更。 8.Java音乐 SoundSea允许大家搜索并下载歌曲。其内置有元数据与专辑信息,大家在查找特定歌曲时,SoundSea会在iTunes上查找相关元数据与专辑信息,并显示相关结果。如果匹配的歌曲超过一首,大家可在其中找到自己需要的条目。 歌曲本身下载自Pleer.com,大家还可以根据高品质、低品质或者VBR码率进行过滤。这同时也是一款迷你播放器,供我们直接聆听歌曲而不再经由其它音乐库。 搜索与下载 9.检查泄漏问题 LeakCanary是一套开源库,旨在帮助我们解决内存泄漏问题。大家可以利用它在Java(与Android)中检查内存泄漏。正如其GitHub页面中所言,“千里之埋溃于蚁穴”。 在LeakCanary设置完成后,大家可以利用其自动检查泄漏并在发现问题时给出通知。 10.多维数组 ND4J是一套开源库,能够将多种来自Python社区的科学计算工具引入JVM。其面向生产环境设计,因此运行速度很快但对内存容量却要求不高。在它的帮助下,工程师们能够轻松将算法及接口移植到Java与Scala库当中。 这套库的主要贡献是提供一套通用型n维数组对象,其多平台功能包括GPU与线性代数外加信号处理能力。其与Hadoop及Spark相集成,且提供API以模拟Numpy——一款高人气Python数学库。 11.监控Java 无论大家使用哪种监控工具,Automon都能够将其与AOP(AspectJ)相结合以实现Java代码、JDK以及依赖库监控声明。其可与其它各知名监控工具相协作,例如JAMon、JavaSimon、Yammer Metrics以及StatsD等,同时亦支持各类日志记录库,包括perf4j、log4j、sl4j等等。 另一款出色的生产型监控工具为Takipi。它能够帮助大家了解自己的代码何时及为何发生崩溃,查看全部意外状况并获取与之相关的全部堆栈、源与状态信息。 12.打理Java Jvm-tools,或者SJK,是一套用于JVM故障排查、监控与配置的工具组合。这是一款不像话地工具,使用JVM的标准诊断接口(例如JMX、JVM attach与perf计数器),同时添加了更多逻辑以应对各类常见故障排查用例。 这套库允许我们对目标JVM的CPU线程使用情况进行池化,同时定期向控制台报告实时CG信息并提供基础样本分析功能。在这里,我们可以通过命令行配合MBean执行各基本操作,同时将目标Java进程的全部MBeans转储为JSON格式。 13.最佳Java awesome-java是一套出色的Java框架、库与软件合集。如果大家不太清楚自己应当如何选择具体方案,请务必参考这套清单 ,其中甚至根据类别对各条目加以划分。 其中还包含一部分仍在使用的古老工具,包括能够简化映射的框架,可构建应用周期与依赖性的工具以及负责处理字节码编程的库等等。 总结陈词 这当然只是GitHub的冰山一角,毫无疑问还有更多项目值得大家审视并用于改善自身代码工程。也欢迎大家结合自己的经验在评论中提供更多推荐! 【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】 原文标题:The Hitchhikers Guide to GitHub: 13 Java Projects You Should Try 原文链接:https://dzone.com/articles/the-hitchhikers-guide-to-github-13-java-projects-y from:http://developer.51cto.com/art/201607/514785.htm
View Details今天多说评论插件遇到点问题,就把原来的删除掉,想重新安装一遍,再次安装的时候遇到:无法安装这个包。 PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file ‘C:\WIN….很长一段,不知道什么原因,就在网站搜了一下,原因可能是windows server权限的问题。最终在找到了一个解决方法。指定wp的临时文件夹路径,避免默认的文件夹在windows下没有权限。方法如下: 打开wordpress根目录下的wp-config.php文件 找到如下: /** WordPress 目录的绝对路径。 */ if ( !defined(‘ABSPATH’) ) define(‘ABSPATH’, dirname(__FILE__) . ‘/’); 在下面增加如下代码即可: /** 指定WordPress的临时目录 */ define(‘WP_TEMP_DIR’, ABSPATH . ‘wp-content/temp’); 最后再wp-content文件夹下新建个temp文件夹,然后再更新或下载插件试试。 from:http://blog.csdn.net/xiangqiao123/article/details/14119715
View Details1. DZNEmptyDataSet 这本应该是iOS中一个标准、内置的解决空table和collection view的方式。默认的如果你的table view是空的,屏幕就是空的。但这不是你能提供的最好的用户体验。 用了这个库,你只需要遵循一系列协议,iOS会优雅地接管你的collection view并且会正确、好看地显示给用户信息。很明显,每个iOS项目都应该采用。 这是完全可自定义的。 CocoaPods: pod ‘DZNEmptyDataSet’ GitHub 2. PDTSimpleCalendar 你的app是否需要一个简单、好看并且有效的日历组件呢? 现在你有了——PDTSimpleCalendar很有可能是最棒的iOS日历组件。有很多方式来自定义它,逻辑有效而且好看。 CocoaPods: pod 'PDTSimpleCalendar' GitHub 3. MagicalRecord 他们说,Core Data很简单。他们说,它很好很简单。哈哈,你是认真的吗,苹果?一顿陈词滥调的代码被添加到每个项目里,这真的不够优雅和简单。更不用说添加、移除和更新很多实体,保存上下文,为不同的环境创建不同的Core Data栈,等等等等。我当然很喜欢Core Data,但是苹果真的可以通过一个简单的好方法来简化它——MagicalRecord方法。 MagicalRecord的工作就像一个Core Data的包装,并且向开发者隐藏了所有无关的东西。如果你曾经用过活跃纪录模式(例如Ruby on Rails),那你已经掌握它了。如果你在app里用Core Data的话真的真心推荐这个库。 CocoaPods: pod 'MagicalRecord' GitHub 4. Chameleon 如果你读到了这一点,你是一个很好的程序员,而不是一个设计师。这就是为你准备的。 Chameleon是iOS的一个颜色框架。它用好看、摩登的扁平化颜色扩展了UIColor。它也给了我们能力来创建调色板,里面是我们自己定义的颜色。它可以做很多其他事,探索readme文件。如果你想要好看的应用程序,快把这个库加到你的项目里吧。 Chameleon基础扁平化颜色 CocoaPods: pod 'ChameleonFramework' GitHub 5. Alamofire Alamofire是一个用Swift写的优雅的网络库。你曾经用过AFNetworking吗?ALamofire是它的弟弟。年轻也更有才华,当然啦(AFNetworking是用Objective-C写的)。 需要做网络相关比如下载、上传、获取JSON等等?Alamofire是为你准备的。GitHub上8000人的选择不会错。 CocoaPods: pod 'MagicalRecord' GitHub 6. TextFieldEffects 你不觉得标准的UITextField有一点无聊吗?我也是——所以对TextFieldEffects说hello吧!我不会写太多,我只会展示你一些这个库可以做的例子: 是的,这些就是简单的易用的控制器。你甚至可以用storyboard里的IBDesignable! 不幸的是这个库不支持CocoaPods(如果你来自未来,而这在一些时间之前改变了的话,请在Twitter上让我知道),但它支持Carthage。你也可以简单的从GitHub下载项目,并且把它添加到你的workspace里。 Carthage: github "raulriera/TextFieldEffects" GitHub 7. GPUImage 你曾经创建过一个摄像机app吗?如果没有,看完这个库你就肯定会的。 GPUImage可能性 GPUImage提供我们一个GPU-accelerated摄像头效果(图像和视频都可以),熊熊燃烧般的速度。App Store里有几百个app使用这个库——其中就有我的一个: 我的一个app中用的GPUImage GitHub上8869个收藏并且还在持续增加。 CocoaPods: pod 'GPUImage' GitHub 8. iRate 在App Store获得更多评价最好的方式是什么?我没有明确的数据来回答这个问题,但如果要我来猜测的话,我会说只要简单的询问用户就可以了。也许这是一个老套的方式——大部分开发者现在创建自定义的app内置提醒——但如果你没有时间或者不想所有事都从头做起,用iRate比不用要好。并且这就是iRate——一个小库,你包含在你的项目里并且忘记询问用户去评价了——iRate会自动替你完成,在合适的时间里。 CocoaPods: pod 'iRate' GitHub 9. GameCenterManager 喜欢或讨厌一个人,在这种情况下管理Game Center非常简单,只需要一点我们最著名的反模式的帮助(你的游戏里只有Game Center,对吧?) 诚实地说,在iOS里香草管理Game Center并不是那么困难,但用这个库就是简单和快速。更好的是好的敌人。 […]
View Details准备好好学习学习PHP了吗?那么你首先应该考虑用什么开发工具(IDE)。市面上有很多这类工具,收费的有,免费的也有,选择起来并不轻松。 如果你说PHP编程用基础的文本编辑软件就可以了,比如用记事本。是的,这对于业余爱好者来说绝对可以。但选择一款功能丰富而完整的开发软件还是要好一些,尤其是专业开发者更有必要。这些软件如:NetBeans, PHPStorm, VIM, Zend Studio, Cloud9或Atom。 好的开发工具富有特点而且能够帮助开发者快速高效地编辑程序,它是开发者的基本需求,磨刀不误砍柴工,提前花点时间选择一款适合的开发软件是为上策。 那选择哪一款呢, 这个问题要看你的需求、偏好和预算。 选定一款之前试用几个也不错。 大量PHP开发软件支持跨平台系统,能用于Windows,Linux和Mac,而且提供免费下载。 对于初学者,我的建议是,你可以随意选择一款免费的,可用就行。 比如:NetBeans,VIM,Atom或Eclipse PDT。 企业和专业开发者可以用这些免费的开发软件完成程序编辑,但同时也有很多收费的平台因为整合了很多最新和更进步的功能特性而备受企业开发者的青睐。随便举几个,比如:PHPStorm, Sublime Text, Zend Studio, Nusphere, PHPED, PHP Designer和 Cloud 9等。 假如你只是想用PHP做简单的应用而非构架一整个系统,那么你也可以试一试那些线上的PHP开发工具,比如说PHPfiddle.com。 更简单的你可以选用witephponline.com和ideone.com。 好了,那让我们来看一下被全世界开发者们公认的10个优秀的开发工具吧。它们功能丰富,广为流传,最为先进而且备受喜爱。 1. NetBeans – 最好的PHP IDE (免费版本) NetBeans是供普通大众使用的PHP IDE,它功能丰富、免费并且支持多国语言,其中包括英语、日语、俄语、巴西葡萄牙语以及简体中文。NetBeans的免费版本的发布日期要回溯到2010年,Sun Microsystems开始将其作为开源项目发展,后来Sun Microsystems成为了Oracle的子公司。 自发布以来,NetBeans的下载次数已超过1800万次,同时拥有一个最大的致力于开源集成开发环境的开发者社区。 过去,NetBeans的用途很少,只能进行Java开发,但现在,这样的日子一去不复返了,NetBeans目前的稳定版是轻量级的、速度更快并且全面支持PHP。对于像Zend、Doctrine、 Smarty和Symfony2一类的流行PHP框架以及像Yii、CakePHP、 FuelPHP和Wordpress CMS一类的其它框架提供了开箱即用的支持,也通过laravel-ide-helper提供了对Laravel框架的开箱即用支持。 让NetBeans位居榜首的关键特性是拥有很多代码生成工具,像getter setter生成、代码模板、智能代码补全、提示、快速修复和重构等。另外还支持一些基本特性,包括代码折叠和格式化、try/catch代码补全以及矩形选区等。 当进入调试阶段时,你可以在本地或者远程使用命令行或者xDebug。NetBeans PHP编辑器对包括 javascript、HTML和CSS等web开发都提供了开箱即用的支持。所有这些特性轻而易举地使得NetBeans成为最好的开源PHP IDE。 阅读更多有关NetBeans的内容请访问官方网站netbeans.org。 2. PHPStorm- 最好的PHP IDE (商业版本) PHPStorm 是全功能的PHP IDE,其拥有最现代化的功能集可以快速便捷的进行网页开发。它由名叫JetBrains的公司开发并销售。 在过去的15年中,在开发工具的市场中JetBrains是最受人喜爱的公司,它使得编写代码更加的轻松和愉快。 PHPStorm 很好的支持主要的框架比如Symfony, Zend Framework, Yii, CakePHP, Laravel以及主要的CMS系统如Drupal, Magento 和Wordpress。 不是所有的Web开发项目都没有前端技术,这也正是PHPStorm耀眼之处, 它几乎提供了所有前端技术的实时编辑功能比如CSS, Sass, HTML5, CoffeeScript, TypeScript, JavaScript, Stylus, Less等等。同时还支持代码重构,调试和单元测试。 从发工具方面来说,它提供了版本控制系统,sql数据库,composer, 远程部署,vagrant,其他的客户端,命令行工具等诸如此类的功能。 从调试的角度来说,它支持Zend Debugger和Xdebug,也同时支持本地的或远程的。 PHPStorm是企业级IDE, 需要授权费用,主要的目标是专业的开发人员,但是它同时为教师,学生或开源的项目免费提供。 PHPStorm的普及程度可以从一个事实来衡量,就是众多的大公司如Expedia,Yahoo, Cisco, Salesforce 和wikipedia都曾有购买过PHPStorm IDE的授权。 你可以在以下地址下载PHPStorm试用版 […]
View Details在众多行业中,程序员属于高薪职业。无论是在国外还是国内,程序员的薪金水平普遍高于其他行业的工作岗位。 高薪的诱惑和充满挑战性的工作,令程序员一直成为备受欢迎的职业。在今年年初,Glassdoor发布的一份调查报告指出,在美国,程序员的就业情况仍然向好。据报告显示,在排名前25位的最能赚钱和需求量最高的工作岗位中,超过一半以上的岗位要求求职人员具备编程技术。因此,要想获得高薪不是一件容易的事情,你得有过硬的本领。 14种最具“吸金”能力的编程语言 据美国Rasmussen College(拉斯姆森学院)在2015年5月发表的一篇文章显示,在数以百计的编程语言中,以下14种编程语言最具“吸金”能力。 文章指出,这个结果是拉斯姆森学院收集了在2014年发布的1800万个招聘广告,以“平均年薪”和“招聘职位”两个指标为基础进行分析而得出来的。 (数据来源:Rasmussen College) 而在Indeed.com今年发布的调查数据则显示,根据编程工作的数量,排在前九位的编程语言如下: 图片来源:www.indeed.com 学习哪种编程语言可以赚到更多钱? 不同的编程语言适合不同的系统,不同的工程师也需要掌握不同的编程语言。 后台或服务器端的程序员通常都懂得Python, Ruby, PHP, Java或 .Net以及数据库的知识。前端或客户端的程序员掌握的编程语言主要是HTML, CSS和JavaScript,能力全面的程序员还具有设计能力。 移动应用的程序员懂得的语言是用于iOS 的Objective-C 或安卓系统的Java, 还有用于移动网站的HTML/CSS,他们当中有些人还懂得服务器的知识。3D或游戏开发者懂得 C/C , OpenGL和动画,同时具有艺术能力的程序员会更有优势。高效程序员懂得C/C 和Java,有的人还有数学和定量分析的能力。 如果你并不介意工程师的类型,Python, Objective-C, JavaScript, HTML和CSS这五种语言是值得学习的。因为每年它们都会出现在“最受欢迎的编程语言”名单中。此外,作为程序员,你还应该学习一些数据库,例如MySQL, MongoDB,而且要学习如何使用它来编程。 出处:网易科技 from:http://www.oschina.net/news/75295/these-programming-language-programmers-pay-the-highest
View Details