2017年2月

Sitemap 插件跟 AutoSlug 插件冲突 解决

前几天装了Sitemap插件,想着能自动更新站点地图,挺好用的,这几天发现,发布的 文章都是用数字做文件名,感觉很惊讶,于是找了下,发现Sitemap跟AutoSlug这两个插件冲突了。

AutoSlug是ShingChi写的,由于年久失修,我给维护了下,还是可以用,该插件可以实现发布文章的时候,将文章名自动翻译成英文或者拼音,我不喜欢都是数字的。

Sitemap插件是caixw写的,同样,我也稍微修改了下,更加符合我本地服务器的配置。

现在来说下修改的过程

由于typecho的插件机制(我不知道我理解的对不对,反正现在是这样)两种监视write的插件无法同时使用?

sitemap在文章编辑后触发,AutoSlug也是,所以只需要更改其中的一项就可以了。

由于我AutoSlug的特殊性,所以不打算改这个插件。那就改Sitemap好了。

打开plugins文件夹,定位到Sitemap下,找到Plugin.php

找到activate方法,修改如下内容:

Typecho_Plugin::factory('Widget_Contents_Post_Edit')->write=array('Sitemap_Plugin','generater');

改为:

Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish=array('Sitemap_Plugin','generater');

保存后,重启插件。

原理就是将Sitemap插件的钩子由撰写改为发布完成

Mozilla收购Pocket了

关于Pocket: Pocket,由Read It Later,Inc.制造,是世界领先的存档服务。它目前有超过1000万活跃的每月注册用户,并集成到数百个领先的应用程序,包括Flipboard和Twitter。Pocket可帮助人们从网络中保存有趣的文章,视频和更多内容,供以后享受。一旦保存到Pocket,内容就会在任何设备(手机,平板电脑或计算机)上在线或离线显示。Pocket适用于主要设备和平台,包括Firefox,Google Chrome,Safari,iOS,Android和Windows。有关更多信息,请访问【点击这里】

Mozilla 最近很有钱嘛。都能收购了,咋不好好优化火狐!卡的一笔了火狐。

来自:https://blog.mozilla.org/blog/2017/02/27/mozilla-acquires-pocket/

Alexa世界排名?

很早之前就听过的一个名词,一直很好奇是怎么统计的,今天搜索了下,发现居然要安装客户端?????

(黑人问号)

一个要安装客户端的东西有啥用啊????那统计的流量能准确吗?????

好土啊!

吓的赶紧装上一个,开始刷alexa排名。

看了下,世界排名500强的网站,中国公司好多啊!

Apache2.4开启GZIP功能

HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

GZip压缩的基本流程如下:

  1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息);
  2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
  3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
  4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
  5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
  6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

网上许多开启GZIP的方法,但是研究了许多才成功了,在这里记录下面

编辑 http.conf 文件

去掉 #LoadModule headers_module modules/mod_headers.so 前面的注释#
去掉 #LoadModule deflate_module modules/mod_deflate.so 前面的注释#`
去掉 #LoadModule filter_module modules/mod_filter.so 前面的注释#

文件末尾加上

  <IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json #对指定的内容进行压缩,压缩方式为默认的一个方法
  </IfModule>

详细配置:

<IfModule mod_deflate.c>

DeflateCompressionLevel 6
SetOutputFilter DEFLATE 
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题

</IfModule>

Oracle特殊字符转义:& 和 '

我们在SQL*PLUS下执行 SQL show all命令时,可以发现一个参数:define & (hex 26),如下所示

concat . (hex 2e)
copycommit 0
copytypecheck ON
define & (hex 26)
describe DEPTH 1 LINENUM OFF INDENT OFFecho OFF

1、”&“ 转义

这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:
SQL Set define OFF;
然后再次执行导入脚本,OK!问题搞定。
注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。
·方法二:在SQL语句中将&替换成chr(38),因为chr(38)是&的ASCII码
SQL Select 'Tom' || chr(38) || 'Jerry' from dual;
·方法三:分拆原来的字符串
SQL Select 'Tom' || '&' || 'Jerry' from dual;
我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!
2、” ' “ 转义

·方法一:使用转义字符
SQL Select 'test' || '''' from dual;
第三个'才是我们真正的内容
·方法二:同样是使用转义字符,只不过方式不同而已
SQL Select 'test ''' from dual;
注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容

PLS-00201: 必须声明标识符 'UTL_FILE'

类似的,提示必须声明标识符SYS.UTL_RECOMP 之类的,都是因为权限问题.
解决办法:
sysdba身份,把UTL_FILE包的执行权限给这个用户。
举例:

  1. C:\Users\>sqlplus /nolog
  2. SQL> connect /as sysdba;(进行数据库连接)
  3. grant execute on utl_file to xxx(指定的用户名);

清理和删除svn信息

svn信息是根据文件夹里面的 .svn 文件夹保存相关配置的,删除此文件夹即可去掉svn信息:

Linux下:

find . -type d -name ".svn"|xargs rm -rf 

find . -type d -iname ".svn" -exec rm -rf {} /; 

windows下:

1 复制项目文件夹,跳过隐藏文件(.svn一般是设置为隐藏,xcopy/? 可以看到各种参数)

cmd运行xcopy 要复制的文件路径 新的文件路径 /s /i

2 删除文件夹里的.svn
cmd进入相应目录运行for /r ./ %a in (./) do @if exist "%a/.svn" rd /s /q "%a/.svn"

或 bat

@echo On
@Rem 删除SVN版本控制目录
@PROMPT [Com]

@for /r . %%a in (.) do @if exist "%%a/.svn" rd /s /q "%%a/.svn"
@Rem for /r . %%a in (.) do @if exist "%%a/.svn" @echo "%%a/.svn"

@echo Mission Completed.
@pause

3 注册表添加右键操作(仅供参考,此方法阿权未尝试)

Jon Galloway提供了一段注册表代码,可以将”Delete SVN Folders”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。Works just great!

代码为:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Folder/shell/DeleteSVN]
@="Delete SVN Folders" [HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Folder/shell/DeleteSVN/command]
@="cmd.exe /c /"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r /"%1/" %%f IN (.svn) DO RD /s /q /"%%f/" /""

将这段代码保存为一个.reg文件,双击确认导入注册表即可。

来自:http://blog.csdn.net/myjavablog/article/details/6154156

java中字符串的比较

Q:java中==跟equals比较字符串为啥不同?

A:这些例子足够证明了


// These two have the same value
new String("test").equals("test") // --> true 
// ... but they are not the same object
new String("test") == "test" // --> false 
// ... neither are these
new String("test") == new String("test") // --> false 
// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 
// ... but you should really just call 
Objects.equals()Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false

所以java中请使用equals来比较字符串,而不是使用==

==测试对象引用是否相同,而equals是值是否相同.

惊讶!以后进入某些国家可能要提供社交媒体账号的密码!

也许以后去某些国家就要提供例如FACEBOOK的密码才能通关.

老美的国土安全局的局长在国会安全委员会会议上就特朗普关于移民的行政命令提出了建议。

这主要是针对穆斯林国家: Iraq, Iran, Syria, Yemen, Somalia, Sudan, and Libya .

利用这些手段早已不是什么新手段,奥巴马同学早就在可选手段上,列出了监视社交媒体的做法.

但是社交媒体账户不在政府管控,多个账号,提供一个不就好了?还是很容易躲避的吧.