Mac系统下将BetterZIP中对zip等压缩文件的快速预览关闭

Mac下的空格键对文件的快速预览真是好用,方便.
压缩工具BetterZIP也算是在Mac系统里比较好用的压缩文件处理工具了,之前旧的版本没有集成快速预览,用户可以选择性安装,现在新版本的betterzip把QuickLook快速预览集成了,又并没有开启关闭的设置,我不太喜欢关于压缩文件的快速预览,因为快速预览图的是”快速”,一般情况下压缩包里面文件数量都比较多,导致快速预览反而不快速,要菊花转半天才能看到结果,所以我决定把有关压缩包的快速预览关闭掉.
betterzip老版本快速预览是在”Library/QuickLook”中,删除掉就可以了.
而新版本的快速预览实在betterzip.app里面,找到它,右键查看包内容,在这个路径下找Contents/Library/QuickLook/BetterZipQL.qlgenerator,把它移除或者重命名即可去除对压缩文件的结构的快速预览了,当然要重启Finder后才生效(在Finder下,按下shift键点”苹果”菜单能看到强制退出Finder就可以重启Finder),就这么简单.

CentOS下用crontab设置自动重启MySQL计划(2)

之前写了一篇在每天凌晨2:30重启一次MySQL的文章:http://1vr.cn/?p=1818,用了一段时间感觉没什么异常,但今天又出现了数据库非正常关闭,真是头疼,看了下日志(终端输入:tail -f /var/log/mysqld.log),时间还在在2:30之前,不知道什么异常导致,看来有时间还是要彻底查查原因.

170703  0:41:54  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 0 22991466
170703  0:41:54  InnoDB: Started; log sequence number 0 22991466
170703  0:41:54 [Note] Event Scheduler: Loaded 0 events
170703  0:41:54 [Note] /usr/libexec/mysqld: ready for connections.

在彻底查到原因之前先打个速效针吧,找了一段bash shell脚本,判断mysql服务的状态,如果没有运行,则重启mysql.

脚本放哪无所谓,能找到就行,用”vim /etc/checkmysql.sh”创建个新文件,名为checkmysql.sh,放在了etc目录下.

#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo "Time: `date` :MySQL is over .">> /var/log/mysql_messages
service mysqld start
else
echo "MySQL server is running."
fi

输入”:wq”保存并退出文件,测试一下文件效果,使用”./checkmysql.sh”或绝对路径”/etc/checkmysql.sh”,可以当前Mysql状态,如已停止,那么尝试启动它.如果脚本文件权限不对,改它权限为655,命令是”chmod -R 655 checkmysql.sh”.

接下来我们需要定时的执行这个脚本,让它帮助我们监测mysql状态.还是用到了crontab,之前的文章里有比较详细的用法,这里简单说明,我要做的是让脚本3分钟执行一次,那么打开crontab编辑(命令:vim /etc/crontab):

井号注释掉之前的每天2:30重启任务,添加下面这样

*/3 * * * * root /etc/checkmysql.sh

“*/3″代表每间隔三分钟执行一次,如果你要五分钟执行一次,那就是”*/5″喽.

保存后重启crontab即可(命令:service crond restart),如果你要测试效果,可以service mysqld stop,几分钟后看mysql是否自启.

原创文章,转账请注明来自 http://1vr.cn,By XK.

NGUI的Scrollview自动布局及手动布局Reposition

在处理NGUI的Scrollview滚动视图动态添加及自动布局的事情,遇到了一些问题以及弄清了一些问题,写在这,方便他人.

有关Scrollview动态添加,拖拽到Scrollview尽头时动态的添加一批新的item项,网上查了一下,就和在百度上查”如何去除衣服上的水晶泥”一样,都是一水的模板式回答,毫无用处.别鄙视我用百度,没办法,不翻墙的情况下,搜中文关键字,百度比bing强点,英文的,那拜拜百度吧.

回到正题.先说动态添加,其实一般就是初始化prefab到场景,然后置其父对象为Scrollview就可以了,而NGUI提供了更直接的命令,就是:

NGUITools.AddChild(父对象,预设体);

它直接就把预设初始化并放在父对象下级了,省去了若干麻烦(初始化,位置,尺寸等等等).

拖拽到Scrollview尽头时动态添加新项,那我们要知道什么时候到了尽头,得到”已到尽头”的这个状态就可以用上面的AddChild添加新的item项了.可以把UIScrollView.onDragFinished事件委托过来,当Scrollview发生拖拽时它会执行一次AddChild,如果不加其它条件判断每完成一次拖拽,就会添加一次新项.

	void OnEnable(){
		UIScrollView.onDragFinished += OnDragFinished;
	}

	void OnDisable()
	{
		UIScrollView.onDragFinished -= OnDragFinished;
	}

	void OnDragFinished()
	{
		NGUITools.AddChild(父对象,预设体);
	}

当然这并不是我们要的,拽一次就添一次太可怕了,我们只是想拖拽到Scrollview尽头时添加,那有个简单的办法,在Scrollview组件上有ScrollBars设置,如果你需要滚动条就按自己设计添加个滚动条,如果不需要滚动条,那么你就随便添加个Sprite再给它添加个UIScrollBar脚本就行了,看心情把它”隐藏”起来,我们这里主要用ScrollBars的值,在你想要判断拖拽位置的方向上对应取值就好,比如你要鼠标往左滑Scrollview到尽头添加新项,那就给Scrollview的ScrollBars中的Horizontal赋个ScrollBar控件就好.

然后我们脚本里取ScrollBar的value值,到某个值的时候,进行添加新项,如下:

void OnDragFinished()
	{
		if(UIScrollBar.value>0.9f){
			NGUITools.AddChild(父对象,预设体);
	}

搞定了动态添加,我们来说说布局的问题,NGUI提供了两个布局脚本(Grid,Table),像画田字格,设定好参数后,布局脚本下面的item项都会按格子依次排列好,不用再苦x的码位置了.这两个布局脚本都支持在行和列的方向上有规律的布局,差别在于Grid是固定宽高的单元格,无论格子里内容是什么,Table有点像HTML里面的Table,你可以设置单元格间距,但是它受格子里内容影响,如果一列中有个单元格里的内容特别宽,那整列都将是这个特别宽的宽度.看文字比较难理解,自己动手比划一下就清楚了,因为我也是动手比划弄清楚的.

我想要横着的ScrollView,三行Item,鼠标左滑到尽头自动添加新项,所以我选用了Grid,在Arrangement中选用Vertical对齐方式,RowLimit设置为3,以及根据需要设置单元格(Cell)宽高,可以随意扔一些Sprite到Grid子集,Play一下,就可以看到自动布局的结果了.

当我们用NGUITools.AddChild(父对象,预设体)时,Grid并不会自动布局,它在等我们发送指令,手动布局的命令发出后,Grid将进行一次布局,帮我们将现有的item项排列的整整齐齐.这个指令是什么呢?有两种,如下:

UIGrid.Reposition();
UIGrid.repositionNow=true;

AddChild后,上面的指令任选一条执行一次就完成了布局,那么你也一定像我一样好奇它们两个的区别,其实他们也没什么太大区别,两条指令执行后,最终都是执行Reposition(),而repositionNow这个变量赋值后,Update中会判断它是否为真,为真则执行一次Reposition(),也就是说UIGrid.Reposition();是马上进行排序布局,而UIGrid.repositionNow=true;是在执行后,Update进行下一帧时进行排序布局,接着NGUi会将repositionNow重置回false.具体用哪一个,看你自己了.

另外有些教程用到了”NGUITools.SetDirty()”,字面理解是标记当前对象已经更新让Unity理解刷新状态什么的,但是在这个环节用它和不用它我没看出区别,有了解详情的可以评论里指教一下.

今天就到这里,晚安!

原创内容,转载请注明来自 http://1vr.cn , By XK.