解决WebStorm界面出现中文乱码(出现口口口)

WebStorm界面出现中文乱码(出现口口口)

  1. 点一下界面上那个扳手图标(settings),快捷键Ctrl+Alt+S。
  2. 找到“Appearance”这个选项
  3. 然后在右边勾选“Override default fonts by(not recommended)”,在Name里选一个中文字体宋体或者微软雅黑…(当然现在你看到的也是乱码口口口,先摸黑选一个,点确定后再看看)。设置好后,重启软件后就行了。

解决Joomla站点的500错误

维护的某Joomla网站突然不能访问,前后台都报500错误。

网上搜了一下,结合apache日志,初步认为是服务器的配置问题。虽然不明白为什么服务器配置为什么会突然不行(因为应该是没人改过),但因为最近有另外的人也在使用后台,心想也许是他的某个操作触发了隐藏的漏洞或者bug。于是就往服务器配置这条路上走了很远。

网上有说是joomla开通SEF功能后的配置问题的,有要修改.htaccess文件的,等等,都不起作用。怕配置文件改除了隐藏的bug自己没发现,甚至干脆尝试了重装XAMPP,数据库备份后恢复,重新配置apache等。仍然没解决,从中午开始忙到晚上,十分崩溃。

然后看PHP源代码。发现所有的php文件头部都被加入了一段混淆过的php代码,于是看了看规律貌似是这样的:

<?php $rzzeaxkup =  xxxxxxxxxxx此处省去无数混淆过的代码xxxxxxxxxx    $rzzeaxkup=$noamvuns-1; ?>

应该是感染了什么,或者被人利用漏洞入侵了。于是使用正则表达式进行查找替换,全部清除掉了,用到的表达式:

^<\?php \$rzzeaxkup.*\$rzzeaxkup=\$noamvuns-1; \?><\?php

以为问题解决后,结果依然显示500错误。

于是,绕不开的代码啊,干起程序员本行,以行行代码调试。终于发现在/libraries/import.legacy.php中有一行:

require_once JPATH_PLATFORM . ‘/legacy/form/field/form.php’;

程序在这里就跑不下去了。于是打开form.php文件,一看愣了。

满屏的乱码,文件开头是这样的:

<?php echo ‘abc’;/* PHP Encode by  http://Www.PHPJiaMi.Com/ */error_reporting(0);ini_set(“display_errors”, 0)

里面指向的 www.phpjiami.com看起来是一个专门做代码混淆加密的网站。也许本站点感染的病毒/木马/后门程序的开发者用到了这个在线加密??

看了看,感觉这个文件应该没什么大作用,于是果断的将对它 require_once的语句注释掉。

再打开网站,前后台终于恢复。

此时已经是凌晨一点半了,详细原因后续再查找,这个加密文件form.php到底做什么用,也待后续再了解吧。

xcopy批处理报内存不足的错误

网站备份最近两个月一直都有问题,刚刚才发现,手工run了一遍批处理文件,发现在xcopy到一定时候,报insufficient memory的错误,一开始以为xcopy会把文件放到内存里面,文件多的时候导致耗用内存过度,心想这样的算法也太不严谨了,后来查google才知道,应该是文件路径问题。

具体参考:

http://forums.whirlpool.net.au/archive/2150703

从这两篇文章粗看起来,解决起来还挺烦,因为是涉及源文件的路径长度问题,所以要费一些脑筋。

后来看到官方wiki,才知道xcopy已经正式退休弃用,改由robocopy来代替了。

于是脚本做了修改,一切OK了。

在CentOS中为vsftp 添加新用户的方法

这个不属于很难的操作,这里记录一下:

主要的要点,是很多时候我们只需要一个ftp账号,用来进行ftp登录及特定目录内的文件操作。不需要赋予这个账号其它权限。

第一步,添加用户:

# useradd –d /var/www -g ftp –s /sbin/nologin myftp

说明:

-s /sbin/nologin 是让其不能登陆系统
-d 是指定用户目录为/var/www ,这里可以替换成任何你需要的目录。
-g ftp 把用户加入到ftp组中(vsftp已创建)
myftp是ftp用户名,在配置时把这个myftp换成你的ftp用户名。

第二步,配置vsftp:

修改/etc/vsftpd/vsftpd.conf如下:

chroot_list_enable=YES //限制访问自身目录
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

编辑 chroot_list文件,将受限制的用户添加进去,每个用户名一行

改完配置文件,不要忘记重启vsFTPd服务器
[root@iconben.com root]# /etc/init.d/vsftpd restart

也可以参考这里:

CentOS 安装vsftp 建新用户的方法

在linux中添加ftp用户,并设置相应的权限

解决Windows 7 专业版启动报错

客户电脑,Windows 7 Professional 英文版,突然开机报错,提示windows/system32/config下面的某注册文件打不开,网上搜下来,应该是可以用相应的备份文件恢复的,系统自动备份的位置是 windows/system32/config/regback目录,应该说把对应文件拷过来应该就可以解决。

于是用U盘启动WinPE(系统找不到修复选项,所以就随手用WinPE了),进入系统替换以上所提到的相关文件,然而开机系统仍然报错,报BCD 0xc000000f的错。可能是由于之前用Win7安装盘尝试修复系统的缘故,当时修复中途就报“unable to save startup options”,现在重启硬盘上的系统,报的错误还是启动相关的。于是尝试修复BCD。

于是用安装盘选择修复,进入命令行,一开始用bootrec /RebuildBcd命令,总不成功,报“The requested system device cannot be found”错误,后来查到解决方法如下:

How To Fix Boot/BCD 0xc000000f Error Windows 7

结果又发现错误:Failure when attempting to copy boot files. 查到如下文:

Failure when attempting to copy boot files

原来是需要在bcdboot命令中用/s参数指定boot拷贝的源,在本人实例中,修复安装进入命令行后,看到的系统盘为D:\,也就是windows安装位置为D:\windows,而C:盘是Active的启动分区,所以/s参数后面应该用C:。

总之把用bcdboot命令将BCD重新生成之后,终于能开机了。这时候选择进入最后一次成功开机的配置,系统恢复成功。

在以上过程中间折腾的时候,也曾经运行chkdsk命令扫描修复磁盘,未发现坏道,仅发现两个文件链接的错误,不知道这个是不是导致系统开不起来的根本原因。

[转帖]APP设计相关技巧

作者:郦橙锦妖一只麋鹿
链接:http://www.zhihu.com/question/36813390/answer/87029428
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

— 提纲 —

1. 做app需要图标,我又不会画,怎么办?搜到一些现成的,但质量又不高,怎么办?图标不成套怎么办?

2. 没有审美怎么办?

3. 心里有个app想法,但是线框图画不出来怎么办?

4. iOS那么多尺寸,Android尺寸更吓人,全都要记住吗,导出@1x@2x@3x点九图什么的是不是很麻烦?

5. 说了这么多,还是要我从空白画布上画吗?!没有美术基础啊!当然不是啦~

6. 还有什么问题可以提问哈。

— 正文 —

1. 图标苦手怎么办

就算是设计师,一个一个画图标也是很累的。
这时候,如果有钱,请到选项到A;如果没钱或者不想花钱,请到选项B。

A 如果非常有钱,请直接把钱给我,我把图标给你哈哈哈。如果有一点钱,可以去http://www.shutterstock.com/ 或者 http://www.pixeden.com/ 买,图标站还有很多,先列这两个,反正你们更想看免费的对不对。

http://www.flaticon.com 是你的好朋友,最好的朋友之一。虽然最近突然改版,变得有点难用,但海量,成套,免费,你还图啥?缺点可能是风格比较单一,想要fancy一点的怎么办?smashing magazine帮助你,https://www.smashingmagazine.com/ 只要搜索freebie即可,最早几年的icon质量不太行,也过时了,越是新帖质量越好。

举个栗子,随便点开一个。

可以调大小,可以改颜色,可以调线条粗细,用上这些,是不是b格噌得就上天了!这些都是顶级设计师放出来的免费资源,你花钱雇的设计师未必画得出来。。。

2. 没有审美怎么办?

这个就没有特效药了。据我的观察,没有审美天赋的人,可以判断好看和不好看,但无法判断好看和更好看,这时候如果你有个设计师朋友,请付费或者请吃饭,向他咨询咨询吧。

疗程缓慢的办法有:多看dribbble(eye candy多,但可以了解趋势和审美取向),多用好评和获奖的app,“最美应用”你下载了吗?“豌豆荚设计奖”你看了吗?(@马力请点赞~)每年app store 的盘点你都关注了吗?

3. 构思不好app流程怎么办?

$1 prototype大法,来自一本同名书,我刚看完个开头,所以以下是我根据它的目录和我的经验编的。。。具体就是“场景” – “过程” – “界面”。

先想象用户在什么情况下用,涉及几个用户,他们在干什么。比如,yelp,是用户需要找地方吃饭,所以一般只有一个用户(相对于uber两方用户,群聊n方用户),输入是一些查询条件,输出是在哪儿有饭吃。

现在细化过程,用户从打开app到达到目标,有哪些步骤。还是yelp,一般情况就是打开app,输入查询条件,看到结果,筛选,满意的话查看商家详情,不满意的话可能重新搜索可能更改筛选条件。这是主线剧情,还有些支线剧情,比如看到一个用户的评价很好,查看用户的其他评价,follow用户;还有自己身在餐馆,拍了菜单拍了菜,上传到yelp。把所有的剧情,都在流程图上画出来。

期间可能会遇到一些细节。用户先输入什么呢,是餐厅类型,还是只要能吃就可以?距离这个信息是gps给还是用户自己输,或者其实距离无所谓,反正用户有车呢?价格是什么时候出现?是搜索的时候就限定价格,还是结果出来以后再筛选?这些都不怕,反正也是要改的。。。而且一般自己想做的app也没有这么复杂。

你有一个流程图了,界面就简单了。把元素往界面上摆一摆,推荐用手机大小的便利贴,拿铅笔画上去,有很多东西玩app多了都有经验,搜索结果是啥,不就map view和list view么,怎么筛选,放一个漏斗icon在标题栏里呗,酱酱酿酿就好了。接下来就是把亲朋好友拉过来,让他们玩一下这个paper prototype,发现不对的地方再改。

有两个软件推荐,一个https://popapp.in 好久不用,希望它还是免费的。一个https://marvelapp.com 免费无限量project,真良心,我一直期待它被adobe收购,结果adobe既没有收它,也没有invision,而是准备自己做一个comet。。。真傲娇。

4. 尺寸记不住怎么办?

就不要用ps了,sketch做为生产力工具,真的不贵,都不是按月按年subscribe的,一次买一生,有什么舍不得的,买吧。以后用它直接新建画板,就不用记住那么多尺寸了,导出图片也特别方便,ps切图再见。

5. 面对空白画布下不去手怎么办?

前面提到了invision,这家公司的marketing很牛,设计也很牛,市场部为了宣传他们的产品,让设计师做了很多的高质量免费模版给其他设计师下载。

举个栗子。

再举一个。

这些全是一整套,一整套啊,意味着登陆界面,dashboard,阅读文章的界面,购物车,天气,聊天对话各种界面都很可能有。格式一般都有ps,sketch两种,有时有ai,和设计师打包给你的成品差距不大,你可能需要一个切图仔,或者自己来。

这些不够怎么办?
http://graphicburger.com

http://freebiesbug.com/psd-freebies/ui-kits/

https://ui8.net/categories/freebies

这样总行了吧。

6. 其他问题。

应该没有其他问题了吧。

微信网页音频播放遇到的坑(referer防盗链)

最近做微信网页开发,遇到音频问题。方案是在微信网页中,判断用户有收听权限的情况下,让他可以播放音频。在HTML中用了audio标签,用少量js代码控制播放。mp3文件来源是托管在阿里云cdn上面的。

昨天上午刚刚把cdn部署好,测试访问没问题。昨天晚上将带有音频播放功能的网页给用户开放,结果很多用户反应打开不了。明明自己在安卓、苹果上面都测试过了,怎么回事呢。一开始以为是mp3文件的比特率问题。到最后发现不是,后来抱着试试看的心理,清除了cdn里面的防盗链设置

<后续内容遗失>

阿里云CDN使用初探

CDN的基本原理,实际上是将某“加速域名”用CName解析到阿里云的DNS调度服务器,然后再只能分配到离访问用户最近的CDN节点。

加速域名就是你希望最终用户访问的域名,当然是希望该域名下的内容是经过了CDN加速的。

阿里云CDN节点事先没有你网站要提供的文件的,那么加速域名下的内容从何而来,就需要有一个源站,顾名思义,即内容的来源的意思。

举例来说,你希望网站 http://www.anrrzh.com 的所有内容都经过加速,那么就配置加速域名为该域名,而源站的配置方式上,有一个比较tricky的地方,是不管你设置为域名还是ip,都会解析成ip地址访问回去.

这里就涉及到一个很有意思的问题,在阿里云CDN文档中也并没有表述清楚的。那就是回源的请求虽然能以ip地址命中目标机器,但其访问的host信息,其实是可以配置的。源站设成某个域名,回源请求肯定会发回该域名指向的ip,但访问的http头信息中host未必为这个域名。在阿里云cdn管理控制台,还有回源host这项设置,可以指定回源请求以什么host访问。

这一点之所以重要,是因为事关源站服务器的解析,尤其是当源站涉及多站点虚拟主机的配置的时候。源站服务器上,也需要配置回源host所指定域名相应的虚拟主机的解析。

关于数据库主键设计

最近要做一些系统的开发,说实话也是有些年没有在一线工作了,动手的激情和乐趣感觉慢慢的回来了。

系统是一个与微信公众平台有交互的课程系统。由于既要支持微信用户登录,又要支持其他注册登录方式,因此要自己设计会员系统。在做数据库设计的时候,一开始像多年前一样,第一反应是给每张表一个自增长数字id作为唯一标识。但总觉得哪里不太妥。于是决定重新思考这个以前认为是最佳实践的原则,参考了一些文档,得出如下结论:

1,自增长需要等待返回值才能知道主键的具体值,对于多表关联的情况,需要等主键生成后再插入该值到关联表中作为外键,程序逻辑变成了两步插入,不太方便。因此主键最好能预先赋值;(本例中会员ID要更新到微信openid与会员关系的映射表)

2,多系统数据库整合的时候,如果大家都是用自增长,那么很难保证唯一性,当值冲突的时候很麻烦。因此主键最好全局(全世界)唯一;(本例中要考虑未来与第三方的开源微信系统如weiphp或者we7等整合)

3,要满足以上要求,多半需要字符串型字段作为主键;

4,要考虑索引性能;

5,是否要考虑后生成的主键值要比之前的大,还需要再考虑。

基本确定采用字符串型的主键,能预先赋值,且能保证全局唯一性,兼顾性能。暂定GUID方案。

其实在考虑以上问题之前还有一个先确定用业务字段还是非业务字段做主键的问题。如果是选择了非业务字段做主键,再考虑主键的生成方案。其实关于用业务字段还是无意义的非业务字段做主键也有很多争论,其中有一个观点认为:非业务字段做主键也是有缺点的,很多查询语句会变得复杂很多。我是挺同意的。当然业务字段做主键则需要放置业务规则发生变化。

本例中的用户ID字段,属于本系统新增的内容,其对应的业务字段来源有多种,除了微信用户openid可能还有其他第三方的用户标识,不能保证唯一性且不排除有变化的可能,所以只能选择非业务字段。从而才有了上面的选择该字段生成方式的问题。

请参考:

博客:数据库主键的设计和思考

知乎:使用自增主键是否总是最佳实践?

segmentfault: 在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?

用PHP开发微信应用遇到的坑

最近因为业务需要,尝试着做了一些基于微信公众平台的开发。考虑到主要是网站应用和轻度电商,业务逻辑不复杂,加上看到开源php的东西比较多,于是决定基于php进行开发。
以前基本没怎么研究过php,因此做了如下工作:
安装试用weiphp
安装试用微擎
学习使用thinkphp

遇到问题及解决如下:

PHP方面的:

empty() 只检测变量,检测任何非变量的东西都将导致解析错误。

Thinkphp框架中Model的save()方法,成功时候的返回值并不是数据对象本身,目测是成功的记录条数。

JSON对象要decode成为数组以后,再放入session,取出来的时候方便使用。php还是跟数组配合更好。

foreach语句中,如果要修改所遍历数组的值,则应该用&符号进行引用。

微信方面的:

网页授权的时机选择,如果是在某业务(某方法)中途进行身份验证再去要求网页授权,由于网页授权是回调的方式,因此每个页面(控制器->方法)的逻辑即可能是通过微信回调后在调用的,也可能是还没有微信授权的时候调用的。这样的界面逻辑会比较复杂,容易混乱。因此最后统一成,除非是不需要身份验证的页面,否则一律先要求网页授权再说。

微信内置浏览器/手机浏览器方面的:

注意javascript与html标签在文档中出现的顺序问题,有时候在脚本中用选择器取不到页面元素的值的时候,可能就是这个问题。

音频在部分手机上死活不能播放,哪怕手动点播放按钮也不成。发现跟比特率有关系,128KHz就遇到这样的问题,转成96KHz就好了。

静态页面缓存的问题。有的页面根据业务逻辑会呈现不同的内容,但微信浏览器的缓存会导致最新的业务状态没法体现,显示的还是上一个状态的页面。解决办法是在Header中加入如下信息:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />