背景:我的T60P机器是老了还是啥的,开机假死发生多次,强制关机后重启正常,怀疑过固态硬盘,怀疑过风扇FanError,换了个风扇依旧,于是查了下开机日志,发现大量的acpi的警告:警告   2015/10/27 星期二 23:49:44  ACPI  15  无。。。。。于是,解决办法如下:
系统城的小编这里要跟大家分享的是关于如何在BIOS中关闭ACPI的方法,ACPI表示高级配置和接口(Advanced Configuration and Power Management Interface),帮助操作系统控制划拨给每一件与计算机相连的设备的电量,有了ACPI,操作系统就可以把不同的外设关闭。但是针对有些用户在安装系统的时候会出现假死的现象,因此有大神建议先关闭ACPI即可解决问题!

电脑如何进入BIOS设置

win7系统如何关闭ACPI:

    开机按del键,找到Advanced Configuration and Power Interface即可关闭。
win7系统如何关闭ACPI
    开机后如发现设备栏中有黄色惊叹号,未知设备,可以打开系统光盘,把power manegement目录下的setup.exe执行一下,惊叹号就没有了!

来自:http://www.xitongcheng.com/jiaocheng/win7_article_1687.html
====================================================================================
通过----windows系统日志----查看开关机时间:
(1)
在“开始”菜单的“运行”中输入“eventvwr.msc”,打开事件查看器,在左侧窗口中选择Windows日志->“系统”,从右侧系统事件中查找事件ID为6005、6006的事件
事件ID:6005表示事件日志服务已启动,即开机
事件ID:6006表示关机。它们对应的时间就分别是开机时间和关机时间
简单点
还你可以使用“筛选”使内容简洁。在事件查看器的“查看”菜单中选择“筛选”选项,在属性对话框中选择“筛选器”选项卡,并在其中勾选“信息”、“警告”、“错误”三项,在“事件来源”下拉列表中选择“eventlog”,单击“确定”按钮后,系统事件中的内容就少了很多,可以轻易找到最近的开关机时间。
(2)
在“开始”菜单中的“运行”中输入“C:\WINDOWS\schedlgu.txt”,在打开的schedlgu.txt文件中有“任务计划程序服务”已启动于和“任务计划程序服务”已退出于的时间,分别对应着开机和关机时间

来自:http://blog.sina.com.cn/s/blog_518b64290100fewh.html


错误  2015/10/28 星期三 0:22:28  SharedAccess_NAT  34001  无,
看看windows firewall服务是不是被禁用了,原来 是NOD32会接管Windows系统自带的防火墙。
http://bbs.kafan.cn/thread-1691369-1-1.html
背景:在写代码程序里写文件时不小心出现了一个带横线的文件,如下:
[root@iZ25dcp92ckZ temp]# ls
-000                                      84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
[root@iZ25dcp92ckZ temp]# ll -i
总用量 58140
1211764 -rw-r--r-- 1 48 root        0 10月 23 17:14 -000
1187168 -rw-r--r-- 1 48 root 11904973 10月 23 17:14 84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
干掉它:
find . -inum 1211764 -exec rm {} \;
————————————————————————————————————————————
linux下怎样删除以横线开关的文件:
一些客户用FTP上传了一些以横线开关的文件,然后需要删除或改名时都不能操作.所以很苦恼.
在删除时报以下错误:

以下是解决方法:
1.首先以ll -i 查看下文件的inode值.

2.有以下命令删除或改名此类文件:
find 命令
  使用 UNIX find 命令,您可以完成使用 ls 命令所开始的工作。对于要进行操作的文件,您已经知道了它们的索引编号,那么就可以开始进行相应的操作了!
  要删除看似无名的文件,您只需要使用 find 和 -inum 开关对索引编号和文件进行定位。然后,在找到该文件之后,使用 find 和 -exec 开关删除该文件:
  
# find . -inum 393228 -exec rm {} \;
  要对该文件进行重命名或删除,可以使用 mv 或 rm:
删除文件:



# find . -inum 393228 -exec mv {} passwd.txt \;
重命名文件:



问题解决.

来自:http://blog.chinaunix.net/uid-23683795-id-2391090.html
背景:提高了性能,任何事情都可以辩证的看,稳定性于鲁棒性,光的波粒二象性,凡事都有两面性,如戴眼镜虽然可以装丝文,但是雨中漫步的时候容易撞电线杆;抽烟可以让身上有女生喜欢的淡淡烟草味,但是会危害周围人的健康;醉酒虽然可以让人精神愉悦,但是会说出真话,这些都是我的亲身体验.......写不下去了。

wintiongXX - sng<wintiXX@gmail.com>  14:39:09
php里哪个函数,是可以在php执行过程中直接响应nginx,但是让php继续执行?
cody(2501385XX)  14:40:44
        fastcgi_finish_request();
wintiongXX - sng<wintiXX@gmail.com>  14:41:22
我就记得有这个函数,一时想不起来了
@cody
X哥chen(X哥)<blXXX.c@163.com>  14:45:09
用fastcgi_finish_request要注意一下,
如果fastcgi_finish_request"之后", 到整个程序完成的时间还很久或有其他的阻塞调用,
当前进程是无法处理请求的, 可能导致各种问题
wintiongXX - sng<wintiXX@gmail.com>  14:46:23
这个知道的,其实总体而言进程耗时没变化,只是有些东西没必要让用户等你
erikYXXX-TEG(744366XXX)  14:48:32
使用这个函数不能使用file存储session(使用其他存储也需要关掉session 锁)。不然用户A第一次持有session访问,如果后续操作有耗时操作,用户的session会被锁住,导致后续访问卡住。
问苍天个猫(13427XXX)  15:01:35
可以提前session_write_close啊
erikYXXX-TEG(744366XXX)  15:01:59
也是可以的。
——————扯淡开始———————
JackX-回忆未来有甚用(372647XXX)  16:19:27
请问各位弟兄们,这两个函数放在一块有啥区别:
1.PHP ignore_user_abort() 函数, ignore_user_abort(true); php关闭浏览器还能运行函数。
2.        fastcgi_finish_request();
都解决了啥么子问题???
JackX-回忆未来有甚用(372647XXX)  16:24:06
我问的问题就没一个人接一个?还是认为我不是搞PHPer的啊
问题太肤浅?
allendai<snowheart.dai@gmail.com>  16:24:56
没用过。。
JackX-回忆未来有甚用(372647XXX)  16:27:31
我只是好奇,哈哈~
你说这些鸡肋功能开发出来有毛用啊,还好天峰说没有之一,哈哈。
Ran-韩最好语言(128112XX)  16:29:13
因为PHP设计之初只有 请求开始到请求结束 这段生命周期,后面的它控制不了。各种函数的出现就是为了弥补这个缺陷。
JackX-回忆未来有甚用(372647XXX)  16:29:16
PHP ignore_user_abort() 函数,我用来做一些导表由PHP从A到B做下逻辑导入数据库,浏览器上访问下容易超时,于是用到。
至于这个: fastcgi_finish_request(); 我也是听x哥在说,于是问下,都用来干嘛子?上传视频后-》转码->入库->推前台,第二三四都可以连接起来???
Ran-韩最好语言(128112XX)  16:29:28
使用消息队列异步处理才是正途。
erikYXXX-TEG(744366XXX)  16:29:54
php session lock主要是各个session促出模块实现自己实现的锁。默认的session 存储是文件,实现是在打开之前flock session文件。如果选择memcached存储session,锁是在memcache扩展里面实现的。
如果自己实现SessionHandler接口存储,可以选择不实现锁。
fastcgi_finish_request 可以提前把结果返回给nginx,之后脚本还可以保留上下文执行一些任务,可以算是伪异步。最好还是使用MQ来异步处理任务。
allendai<snowheart.dai@gmail.com>  16:30:06
……用浏览器调用导入程序
这就是你的不专业了
JackX-回忆未来有甚用(372647XXX)  16:31:05
我觉得也是,所以我觉得兄弟们都是专业的,
可为何发明这个鸡肋功能,有点玩的感觉哟。

结论:
X哥chen(X哥)<blXXX.c@163.com>  16:38:59
+1
异步化才是正途
背景:有时在做一些Nginx的Proxy时,如从80端口请求后代码到其它web服务器如tomcat的8080端口,需要一些主备的思想,也就是万一主服务器挂了怎么办?用备机了,这块Nginx支持这样一个功能的。
一)nginx从前端域名支向代理并负载均衡代理到其他ip并配置了域名的机器,这儿得有proxy_set_header Host $host;相当于以域名访问IP:


二)如nginx暴露出域名反向代理到一台tomcat的以IP指向的8080端口:

——————————————————————————————————————————


只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。

可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性。

关于这个参数的官档说明:
http://wiki.nginx.org/NginxHttpUpstreamModule
backup - (0.6.7 or later) only uses this server if the non-backup servers are all down or busy (cannot be used with the directive ip_hash)

摘自:http://hillside.iteye.com/blog/703281

http://chattool.sinaapp.com/?p=1063
最近找到一篇很好的文章将linux多线程函数pthread_cond_wait,是我茅塞顿开,豁然开朗,决定转载过来,以便经常复习记忆。

条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变量。它的原型为:
extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));
其中cond是一个指向结构pthread_cond_t的指针,cond_attr是一个指向结构pthread_condattr_t的指针。结构 pthread_condattr_t是条件变量的属性结构,和互斥锁一样我们可以用它来设置条件变量是进程内可用还是进程间可用,默认值是 PTHREAD_ PROCESS_PRIVATE,即此条件变量被同一进程内的各个线程使用。注意初始化条件变量只有未被使用时才能重新初始化或被释放。释放一个条件变量的函数为pthread_cond_destroy(pthread_cond_t cond)。 
也可以静态的初始化条件变量
pthread_cond_t my_condition = PTHREAD_COND_INITIALIZER;
函数pthread_cond_wait()使线程阻塞在一个条件变量上。它的函数原型为:
extern int pthread_cond_wait __P ((pthread_cond_t *__cond,pthread_mutex_t *__mutex));
调用这个函数时,线程解开mutex指向的锁并被条件变量cond阻塞。线程可以被函数pthread_cond_signal和函数 pthread_cond_broadcast唤醒线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,一般说来线程应该仍阻塞在这里,被等待被下一次唤醒。这个过程一般用while语句实现。
通过下面的程序来理解:
__________________华丽的CODE分割线_________________________
pthreadCondWait.c


___________________至关重要的绚烂的结果分割线_________________
[root@iZ25dcp92ckZ testdemo]# vi pthreadCondWait.c          
[root@iZ25dcp92ckZ testdemo]# gcc pthreadCondWait.c -lpthread -o pthreadCondWaitStudy
[root@iZ25dcp92ckZ testdemo]# ./pthreadCondWaitStudy
thead1:1
Up Unlock Mutex
thead1:2
Up Unlock Mutex
Up Unlock Mutex
thread2:3
Down Ulock Mutex
thread2:3
Down Ulock Mutex
thead1:4
Up Unlock Mutex
thead1:5
Up Unlock Mutex
Up Unlock Mutex
thread2:6
Down Ulock Mutex
thread2:6
Down Ulock Mutex
thead1:7
Up Unlock Mutex
thead1:8
Up Unlock Mutex
Up Unlock Mutex
thread2:9
Down Ulock Mutex

_________________HOW IT WORKS________

i不是三的倍数的时候.
thread2条件变量阻塞,释放Mutex
thread1加锁,打印thread1:i,释放锁,打印"Up Unlock Mutex"
i为3的倍数的时候,
thread1,加锁,条件变量通知,唤醒条件变量阻塞线程,打印"Up Unlock Mutex"
thread2,被唤醒,加锁,打印"thread2:i",释放锁,打印"Down Ulock Mutex"

    所以说函数pthread_cond_wait()调用时,不仅对条件变量起作用,还对互斥锁有作用!

++++++++++++++++唯美的好书推荐线++++++++++++
"Beiginning Linux Programming" by Neil Matthrew & Richard Stones
You can choose the English version or Chinese version, but I recommend the English one. Maybe it' easier to understand what the authers say than the Chinese one ,  even if you're Chinese.

原文地址:http://blogold.chinaunix.net/u1/53448/showart_431857.html
背景:Raspberry Pi下的mysql启动出现如下:
151017  8:33:10 [Note] Server socket created on IP: '127.0.0.1'.
151017  8:33:10 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
151017  8:33:10 [ERROR] Do you already have another mysqld server running on port: 3306 ?


注意关键词 Bind
  这时,可以打开/etc/mysql/my.cnf
  ...
  bind-address  = 192.168.141.25
  ...
  如果你也是这么写的,那么把它改成
  bind-address  = 0.0.0.0
  然后重启即可
  另外,mysql在启动时进行了端口的bind,那么当ip更换时,请注意这些细节

vi /etc/mysql/my.cnf

#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0

来自:http://www.educity.cn/wenda/403390.html

实际情况是因为自己把lo给干掉了,没有127.0.0.1这个端口:
vi /etc/network/interfaces
auto lo
iface lo inet loopback
....

同理,apache2也是一样的道理,因为这个软的IP,没有了,于是也没法访问,得特别注意:
vi /etc/network/interfaces
背景:有时一些小的网站,比如个人博客需要每天备份数据,鉴于此,得自动化不是,这儿就是一个简单可行的好方法,配置上后就不用管了。更牛B点就是主辅助同步,在辅库上运行下面的脚本更发妥当。
1)备份权限列表需要哪些?
1.Select  读取
2.SHOW DATABASES 允许访问完整的数据库列表
4. LOCK TABLES 允许锁定表
5.RELOAD 允许载入和刷新服务器缓存
以上几点是必须的.请注意
主辅助是不复制角色表的。

2)实践添加备份用户如下:
grant SELECT, RELOAD, SHOW DATABASES, LOCK TABLES on *.* to 'back'@'localhost' identified by "************"

3)实现下面自动备份脚本:
cat backUpJustWinDatas.sh


4) 定时生成定时删除命令:
1)定时生成:
0 0 * * * /bin/bash /usr/local/scripts/backUpJustWinDatas.sh
2)删除旧的:
0 1 * * * find /data/backup/db.JustWin.com -mtime +7 -exec rm -R {} \;

最后,参考实践来源自:http://www.jb51.net/article/49099.htm
http://blog.163.com/o5655@126/blog/static/166742834201181393837133/
背景:在外面上面放一个phpmyadmin的发现阿里的云盾发现有人居然来试着访问,网上不安全。
攻击IP                攻击时间                      攻击URL                                                                                                                攻击类型  处理结果
199.191.57.182  2015-10-16 05:29:33  101.20*.1*.**/phpmyadmin/scripts/setup.php Match1:/phpmyadmin/scripts/setup.php  其他  已拦截
——————————————————————————————————————————————————————————————————————
修改:config.inc.php
在第一行加入
$ip_prefix = '192.168.121.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip_prefix)) != $ip_prefix ) die('illegal access error');
ip可以设置成你自己电脑的ip。如果是内网建议直接设置成自己的ip地址取代ip地址段。这样的话可以防止其它用户在内网中访问。如果是公网ip限制,直接使用即可。
只是简单的限定,没有太大要求只是暂时限定,可以使用这种方式。临时性的限制用户去访问。



当然,也可以用foreach写成一个数组来处理..........

摘自:http://www.jb51.net/article/34509.htm



phpMyAdmin 因PHP的session目录及自身目录权限引发错误解决:
问题一:phpMyAdmin -Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.



问题:打开phpmyadmin出现如下错误:Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
解决办法如下:
vim /etc/php5/apache2/php.ini
查找session.save_path ,将session.save_path=/var/lib/php5这一句的注释符号去掉。
如还不能正常工作,将session.auto_start的值改为1(启动),默认是0(禁用)
这个错误一般是由于session文件的存储路径不可写造成的,在linux下一般是路径的权限问题。在windows下面session.save_path一定要设置到一个可以读写的路径,如 D:/tmp 等。
摘自:http://blog.sina.com.cn/s/blog_62cd41130100uhpv.html
=====================================================================================
问题二:phpmyadmin错误Wrong permissions on configuration file, should not be world writable!


登录phpmyadmin,发现提示Wrong permissions on configuration file, should not be world writable!,提示配置文件必须不可写,这里改成755就OK了.
用以下命令 chmod -R 755 /home/wwwroot/phpmyadmin
摘自:http://www.111cn.net/phper/31/59722.htm
背景:这个linux用户登录进行相关环境变量的设置和下面这些全局和用户之前的关系,值得大致有一个理解,特别是环境变量,有一些程序运行的环镜参数息息相关,还有类似如对secureCRT标签的设置(为什么就登录失效没有触发呢,直接运行又OK等问题有疑惑,排查问题困难),/etc/bashrc /etc/sysconfig/bash-prompt-xterm 里设置secureCRT标签,怎么登录就没有变呢,而是直接运行source /etc/bashrc即可生效(运行source XXX之前,先运行bash,即:1)bash 2)source XXX):/etc/bashrc  里面包含/etc/sysconfig/bash-prompt-xterm 文件就能设置了呢,/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。此中必然有蹊跷,设置secureCRT 的标签见:http://jackxiang.com/post/6773/ ,是阿里云给修改了这个:/etc/bashrc 里加入新变量:if [ -z "$PROMPT_COMMAND" ]; then ,它不为空,没有运行这个/etc/sysconfig/bash-prompt-xterm 文件,解决办法就是:PROMPT_COMMAND="";强制清空得了,重新运行source  /etc/bashrc就Ok了 。

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.

~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的

~/.bashrc 是交互式 non-login 方式进入 bash 运行的

通常二者设置大致相同,所以通常前者会调用后者。



bash的几个初始化文件 - [Ubuntu]



(1)/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。

(2)/ect/bashrc
Ubuntu没有此文件,与之对应的是/ect/bash.bashrc
它也是全局(公有)的
bash执行时,不管是何种方式,都会读取此文件。

(3)~/.profile
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。
另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile和~/.bash_login。

(4)~/.bash_login
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

(5)~/.bash_profile
Unbutu默认没有此文件,可新建。
只有bash是以login形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc。

(6)~/.bashrc
当bash是以non-login形式执行时,读取此文件。若是以login形式执行,则不会读取此文件。

(7)~/.bash_logout
注销时,且是longin形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

下面是在本机的几个例子:
1. 图形模式登录时,顺序读取:/etc/profile和~/.profile
2. 图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc和~/.bashrc
3. 文本模式登录时,顺序读取:/etc/bash.bashrc,/etc/profile和~/.bash_profile
4. 从其它用户su到该用户,则分两种情况:
    (1)如果带-l参数(或-参数,--login参数),如:su -l username,则bash是lonin的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile和~/.bash_profile。
    (2)如果没有带-l参数,则bash是non-login的,它将顺序读取:/etc/bash.bashrc和~/.bashrc
5. 注销时,或退出su登录的用户,如果是longin方式,那么bash会读取:~/.bash_logout
6. 执行自定义的shell文件时,若使用“bash -l a.sh”的方式,则bash会读取行:/etc/profile和~/.bash_profile,若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh(这个不属于bash shell),则不会读取上面的任何文件。
7. 上面的例子凡是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。







linux中profile与bashrc的区别
Ubuntu 的相关目录下
/ect/ /root /home/myuser
profile .profile .profile
bash.bashrc .bashrc .bashrc
profile.d

Fedora的相关目录
/ect/ /root /home/myuser
profile      profile
bashrc   .bashrc bashrc
profile.d                     profile.d

说明:myuser 是你添加创建的用户
在网上找了半天也不能包括所有的,所以只能比较个大概。



bashrc与profile的区别

要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式log


来自:http://blog.renren.com/share/224354794/8635033605
========================登录Linux时/etc/profile、~/.bash_profile等几个文件的执行过程  ========================
关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程。 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~
关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程。

在登录Linux时要执行文件的过程如下:

在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then

. ./bashrc

fi

~/.bashrc中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then

. /bashrc

fi

所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:

(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

在这里开始书写日记、心情 …

来自:http://blog.163.com/jianweicheng@126/blog/static/356732022008228559399/

里,如果xxx为true,后面的{}才被执行。{后,栈里为i开了4字节的单元(如果是32位机的话)。遇}时,这四个字节被弹出。






来自:http://www.kuqin.com/article/23candcplusplus/937677.html
对于phpmyadmin“无法载入 mcrypt 扩展,<br />请检查 PHP 配置”的问题,我记得前段时间还有午饭提问过。
自己很长一段时间之前就遇过这个问题,但是也不知道怎么解决的,记得是安装过两个RPM包就搞定。
对于这个问题,可以发现网上发问的可是N多呀,普遍都经受这个折腾。
现在在自己的LNMP下重新进行了安装,也出现这个问题。当我再次尝试安装
libmcrypt-2.5.7-3.el5.remi.i386.rpm
php-mcrypt-5.1.6-1.el5.i386.rpm
不过得不到解决,于是我选择通过源码包编译安装libmcrypt-2.5.7.tar.gz ,并且重新编译到PHP中去,最终解决了
该问题。
#tar zxvf  libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#./configure --prefix=/usr/local/libmcrypt
#make && make install
重新编译php:
#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-fastcgi --enable-fpm --enable-mbstring --with-mcrypt=/usr/local/libmcrypt/
这里顺便编译php的配置文件php.ini
extension=php_mbstring.dll  把这行前面的;去掉
然后重启mysql、php-fpm、nginx
重新登录phpmyadmin就不显示了。

————————————————————————————————————————————————————————
来自:http://bbs.51cto.com/thread-821175-1.html
背景:有时一次清空所有日志文件很有必要。

cat clearUpAllServersLog.sh
for i in `find /data/logs -name "*.log"`; do cat /dev/null >$i; done


#每天晚上凌晨零点清空各种服务生成日志
0 0 * * * /bin/bash /usr/local/scripts/clearUpAllServersLog.sh
————————————————————————————————————
1)在当前目录下,键入如下命令:
for i in `find . -name "*.log"`; do cat /dev/null >$i; done

2)执行完毕后,当前目录下的所有log日志文件就被清空了。
Linux:批量清空当前目录下的日志文件

3)再把shell命令解释一下:
find . -name "*.log"  ,就是在当前目录下查找后缀为log的文件。
cat /dev/null >$i       ,就是将每次找到的log文件清空。

参考:http://jingyan.baidu.com/article/acf728fd23a1e9f8e510a331.html

背景:conf里面有一个ssl的conf,scp过来抄时忘记删除,但nginx下的nginx.conf下是include *.conf,于是出问题了,但nginx不报这个conf有问题,而是说没有找到ssl的crt文件,怎么办?主要是学会看日志 cat /var/log/messages | grep nginx ,看日志才发现是多了一个conf文件。

service nginx reload
Reloading nginx configuration (via systemctl):  Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
——————————————————————————————————————————————————————————————————————

启动apache服务出现,或启动nginx时出现:
Starting nginx (via systemctl): Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
查看错误提示

主要是学会看日志 cat /var/log/messages | grep nginx
Oct 10 14:34:12 iZ251vfc84kZ nginx: nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/ssl/svn.justwinit.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/usr/local/nginx/conf/ssl/svn.justwinit.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
Oct 10 14:34:12 iZ251vfc84kZ nginx: nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
Oct 10 14:34:12 iZ251vfc84kZ systemd: nginx.service: control process exited, code=exited status=1
[root@iZ251vfc84kZ vhost]# grep -r "svn.justwinit.crt" ./
./svn.justwinit.conf:        ssl_certificate     ssl/svn.justwinit.crt;
[root@iZ251vfc84kZ vhost]# rm -Rf svn.justwinit.conf


来自:http://wangsheng1.blog.51cto.com/29473/1550655
背景:最近搞Raspberry Pi下的ajax从串口里取数据,需要7X24Hour,3秒一次,用chrome下的js分析工具发现内存有不断增加的情况,Raspberry Pi 512M。

    最近一哥们在做一个Ajax长连接的项目,页面需要和服务器保持长连接,而且在连接超时后需要重新请求连接,过程中他问我要用到什么,我也是想都没想就告诉他用jQuery。jQuery不是有ajaxSuccess ajaxError这些对象吗,在请求完成或者请求失败后重新请求不就好了。

但是后来他告诉我说没有用 jQuery,自己手工写的XMLhttprequest 。他告诉我说,开始是用jquery写的,而且在测试过程中也没有出现问题。但是在后来无意中发现,在页面开的时候久了之后,浏览器资源竟然占用非常高导致内存不足而崩溃了。后来抓包分析发现,每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接的请求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且jquery不会自动回收资源,所以导致了内存溢出。

通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求成功或失败之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以,我们只需要在请求完成后,将传回的XMLHttprequest对象手工回收即可,代码如下:
代码如下:



来自:http://www.jb51.net/article/30458.htm

原生态的写法如下:
是一本杂志,网上可以下到这本书的pdf文档,以下节选自乔布斯在斯坦福大学上的演讲:

     当我年轻的时候,有一本叫做“整个地球的目录”振聋发聩的杂志,它是我们那一代人的圣经之一。它是一个叫Stewart Brand的家伙在离这里不远的Menlo Park编辑的,他象诗一般神奇地将这本书带到了这个世界。那是六十年代后期, 在个人电脑出现之前, 所以这本书全部是用打字机,、剪刀还有偏光镜制造的。有点像用软皮包装的Google, 在Google出现三十五年之前:这是理想主义的,其中有许多灵巧的工具和伟大的想法。

      Stewart和他的伙伴出版了几期的“整个地球的目录”,当它完成了自己使命的时候,他们做出了最后一期的目录。那是在七十年代的中期, 我正是你们的年纪。在最后一期的封底上是清晨乡村公路的照片(如果你有冒险精神的话,你可以自己找到这条路的),在照片之下有这样一段话:“求知若饥,虚心若愚。”这是他们停止了发刊的告别语。“求知若饥,虚心若愚。(stay hungry,stay foolish)”我总是希望自己能够那样,现在,在你们即将毕业,开始新的旅程的时候,我也希望你们能这样:求知若饥,虚心若愚。非常感谢你们!

在1968年至1972年是定期出版的,在1998年以前有零星出版,整个地球目录作为一个教育工具·:,“发现读者本身自己的灵感,与真正对他的冒险精神感兴趣的人分享自己的环境与创意,。”目录编辑各种工具和产品,除此之外还供供应商购买。通过这种方式目录就等同与灵感的源泉、教育和参考的结合。并有些前瞻性的对网络前景进行歌颂,整个地球目录一直赞扬保有雄心勃勃的理想主义者的精神。
这些是我看英文介绍自己写的,也许不是很全面,但是大概就是这些了
[root@iZ25dcp92ckZ /]# find / -size +200M -exec du -h {} \;
1.1G    /swapfile


————————————————————————————————————
一、查看系统当前的分区情况:

>free -m
二、创建用于交换分区的文件:

>dd if=/dev/zero of=/whatever/swap bs=block_size (10M)count=number_of_block(3000)

三、设置交换分区文件:
>mkswap  /export/swap/swapfile

四、立即启用交换分区文件:
>swapon /whateever/swap

五、若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:

/whatever/swap swap swap defaults 0 0

————————————————————————————————————
如何在红帽 企业版Linux系统中添加swap文件?
解决方法:
1. 确定swap文件的大小,单位为M。将该值乘以1024得到块大小。例如,64MB的swap文件的块大小是65536。

2. 在root提示符下,键入下面的命令,其中count大小等于所要求的块大小:

dd if=/dev/zero f=/swapfile bs=1024 count=65536
3. 建立swap文件:

mkswap /swapfile
4. 要立即打开swap文件而不是在启动时自动开启:

swapon /swapfile
5. 要想在启动时开启,需要在/etc/fstab中添加如下内容:

/swapfile    swap    swap   defaults 0 0
当下一次系统启动时,新的swap文件就打开了。

6. 在添加新的swap文件并开启后,检查cat /proc/swaps 或者free命令的输出来查看swap是否已打开。

7.删除SWAP分区
swapoff /swapfile    修改/etc/fstab文件  rm -rf /swapfile


1 block = 512字节

来自:http://my.oschina.net/jccpp/blog/142980

来自:http://www.linuxidc.com/Linux/2013-03/81890.htm
背景:正则是一门厚书啊,想写好也不容易,但日常中也就那些像电话、邮箱、手机,网上一堆,但真好验证好了,还得了解一点正则知识,再就是多测试了:-)
下面邮箱正则:
中划线:中划线域名就是米农口中说的扁担域名了,扁担域名由于输入比较麻烦,看起来也比较不正规,是没有多大的价值,目前投资的人是比较少的。按照DNS的标准,域名是不允许有下划线的。
下划线:一些人在注册用户名的喜欢使用下划线_,这种用户名在登录邮箱时很麻烦,给你发邮件的人也很不方便。
二级域名邮箱基本被消灭,这个哥们的正则可以写下划线,扩大了范围但问题不大,主要是起到提示用户就可以了。
com.cn域名支持:((\.[a-zA-Z0-9-]{2,3}){1,2}  com.cn  
——————————————————————————————————————————————————————————————
//emailpreg = /^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$/; //这个对QQ号的邮箱验证不了。
emailpreg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; //dfdfd1212@dfdfd.abc.cn 都成二级邮箱。abc@12df1.com.cn
emailpreg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9-])+((\.[a-zA-Z0-9-]{2,3}){1,2})$/;    //域名是不允许有下划线的 ,去掉下划线,这个就是最后的正则,发现其像afeng@staff.jackxiang.com 这样的匹配不了。至于还有啥首字母不能是下划线,要这样,这正则就还得加长...用户也不是sb,只是起到一定提示作用,别搞复杂了,还是做一下简单的验证,对后面的com,tv,com.cn啥的别验证太细了:
^[A-Za-z0-9]+((-|_|\.)[A-Za-z0-9]+)*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$
到此为止吧。
用正则猫可以分析一下:
^[A-Za-z0-9]+   :以大小写字母和数字开头, 并重复一次或多次。
(-|_|\.)             :中间可夹杂- _ . ,注意是分组,这个分组里是或,也就是可没有这些也成。
[A-Za-z0-9]+        :分装后紧跟大小写字母及数字,这个可以重复一次或多次。(如果- _ .没有可以理解为全是匹配一次或多次的大小写字母和数字符)
((-|_|\.)[A-Za-z0-9]+)+      :小组里并成大组匹配一次或多次。
后面也是类似和前面的分组,最后加一个点再匹配一次或多次(点后的com,org,并没有作长度限定)!
============================================================================
<dd><input id="2" rel="邮箱"  res='2' type="text" class="item-edit-txt"  name="2" value="<{$user.email}>" ></dd>

}else if($(this).attr('res') == '2' && !emailpreg.test($(this).val())){//从QQ登录过来的用户大网接口获取不到邮箱,放开让其填写。
    $(this).css("border","1px solid #f00");
    $("#"+$(this).attr('res')+'span').remove();

    $("#"+$(this).attr('res')).after("<span id="+$(this).attr('res')+'span'+"><br />"+$(this).attr("rel")+"格式不正确</span>");
    $(this).focus();
    res = false;
    return false;



——————————————————————————————————————————————————————————————

JavaScript表单验证email,判断一个输入量是否为邮箱email,通过正则表达式实现。
//检查email邮箱
function isEmail(str){
       var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
       return reg.test(str);
}

摘自:http://www.ijavascript.cn/yanzheng/validate-email-186.html
背景:想在Raspberry Pi下的chrome下播放声音,通过后台播放太慢了,于是想通过html直接调用后立即播放。
<audio src="/style/music.wav" controls="controls" id="play" style="display:none">
Your browser does not support the audio element.
</audio>

audio.play();


事实上Raspberry下的chrome并不能播放mp3和m4a:

________________________________________________________________________________
    var audio = document.getElementById('play');  
    function neworder(){
      $.post('/index.php/admin/order/neworder',
            {id:112},
            function(data,status){
                        
                if(data.status==1){
                  if(one){
                  
                    one=false;
                    neworders=data.msg;
                  }else if(neworders==data.msg){
                  
                    }else if(neworders<data.msg){
              
                    audio.play();
                  }
                }else{}
            },'json');

        }
    setInterval("neworder()",60000)


来自:http://www.ziqiangxuetang.com/jsref/met-audio-play.html
背景:线上生产环境的系统登录,一般会经过跳板机,而此时为了方便写成脚本里面有自动登录的密码,可能跳板机被攻陷,导致密码泄漏,此时有必要结合跳板机和自己的windows系统把密码和用户名、ip分开。而大一些的公司则是有secretID硬件卡来做这个事情,也主一分钟变一次密码,加上自己设置的前面6位,这样显然更安全,但咱没那钱,于是想了一个土办法简单分开即可。
1)跳板机上:
cat /root/bobwblogin.sh
ssh root@101.200.1.1**

2)windows机器上:
D:\script\bobwbautoenterpwd.vbs


把用户名、ip区分开:
跳板机上执行:
sh /root/bobwblogin.sh
[root@iZ25dcp92ckZ multepoolserver]# sh /root/bobwblogin.sh
root@101.200.1.1**'s password:

密码从步骤2)里面寻找出来即可,在secureCRT里这样操作:
alt+s R, 脚本、执行,找到该路径下的D:\script\bobwbautoenterpwd.vbs文件,即可输入密码进入生产ip。
从而达到了,密码和用户名区分开,不致于windows机或跳板机被拿下后全泄漏了,分开后安全性提高了。

背景:有一兄弟用sftp往线下的那个服务器传更改的文件,发现传上去不好使呢,于是重新传,到后来又好了,我当时一看浏览器头,发现也没有啥问题呀,今天我自己搞了一把,发现还真有这个问题,细查了一下,是opcache引起的,默认是60秒。于是我给关了,之前是ea加速,现在新版本的php好像用这个opcache了:
; 2s检查一次文件更新 注意:0是一直检查不是关闭
; 推荐 60
opcache.revalidate_freq=2
————————————————————————
调试先关了,后面没问题再打开:


—————————————————————————
以下是opcache的配置说明:
复制代码

[opcache]
zend_extension = "G:/PHP/php-5.5.6-Win32-VC11-x64/ext/php_opcache.dll"

; Zend Optimizer + 的开关, 关闭时代码不再优化.
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1


; Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB)
; 推荐 128
opcache.memory_consumption=64

; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
; 推荐 8
opcache.interned_strings_buffer=4


; 最大缓存的文件数目 200  到 100000 之间
; 推荐 4000
opcache.max_accelerated_files=2000

; 内存“浪费”达到此值对应的百分比,就会发起一个重启调度.
opcache.max_wasted_percentage=5

; 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,
; 以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,
; 但是会对已存在的应用造成破坏.
opcache.use_cwd=0


; 开启文件时间戳验证
opcache.validate_timestamps=1


; 2s检查一次文件更新 注意:0是一直检查不是关闭
; 推荐 60
opcache.revalidate_freq=2

; 允许或禁止在 include_path 中进行文件搜索的优化
;opcache.revalidate_path=0


; 是否保存文件/函数的注释   如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释
; 推荐 0
opcache.save_comments=1

; 是否加载文件/函数的注释
;opcache.load_comments=1


; 打开快速关闭, 打开这个在PHP Request Shutdown的时候会收内存的速度会提高
; 推荐 1
opcache.fast_shutdown=1

;允许覆盖文件存在(file_exists等)的优化特性。
;opcache.enable_file_override=0


; 定义启动多少个优化过程
;opcache.optimization_level=0xffffffff


; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.
;opcache.inherited_hack=1

; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.
;opcache.dups_fix=0

; 设置不缓存的黑名单
; 不缓存指定目录下cache_开头的PHP文件. /png/www/example.com/public_html/cache/cache_
;opcache.blacklist_filename=


; 通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存.
;opcache.max_file_size=0

; 每 N 次请求检查一次缓存校验.默认值0表示检查被禁用了.
; 由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启.
;opcache.consistency_checks=0

; 从缓存不被访问后,等待多久后(单位为秒)调度重启
;opcache.force_restart_timeout=180

; 错误日志文件名.留空表示使用标准错误输出(stderr).
;opcache.error_log=


; 将错误信息写入到服务器(Apache等)日志
;opcache.log_verbosity_level=1

; 内存共享的首选后台.留空则是让系统选择.
;opcache.preferred_memory_model=

; 防止共享内存在脚本执行期间被意外写入, 仅用于内部调试.
;opcache.protect_memory=0

来自:http://www.cnblogs.com/HD/p/4554455.html

opcache.huge_code_pages=1 参数的内在关联:
http://www.laruence.com/2015/10/02/3069.html
刘强东谈当下多疯狂:估值两亿美金的二手车应用交易量只有两辆!
我给大家讲一个真实故事,去年年底有个互联网公司业务模式发生变化,以前老的业务不想做了,老板不想开除这些兄弟们,要赔偿一笔钱,跟30多个兄弟们商量说,兄弟们,你们出去创业吧,我给你们投150万人民币。这帮兄弟真就信了,拿了150万人民币去创业了。
到今年3月份见面,本来以为这些兄弟和公司没关系了,从此算是解套了,结果3月份兄弟们告诉他,已经拿到了A轮500万美金的投资,他之前投的150万占了70%的股,最近B轮融资追过来,估值2个亿美金!
原来兄弟们在手机上做了个卖二手车的APP,我问卖了几辆车,他告诉我最多只卖了两辆车,还是员工自己买的。
......
任何一种互联网商业模式,如果不能够降低行业的交易成本,不能够提升行业交易效率的话,那么最后注定会失败的。
________________________________________________________________________________________

本文是京东CEO刘强东近日在京东内部的一场分享。在演讲中,刘强东透露有的估值两亿美元的二手车APP公司,其实交易量少得可怜,“只有两辆!还是员工自己买的”。而东哥也认为,当下互联网泡沫已到了一个顶峰,“在私募市场,估值过10亿美金的企业,中国已经超过50家企业”,疯狂的尽头同时也意味着行业到了谷底。

文 | 刘强东

京东涉足电商应该算是互联网行业里面比较晚的。2004年,中国互联网电商阵营已经很庞大,那时当当拿到C轮融资,卓越卖给了亚马逊,易迅、淘宝等公司都已经成立。

此前我们做了六年传统商业,带着对传统商业的思考进入了互联网。做了12年,我发现互联网并不是和传统行业无关,传统商业的价值和经济规律完全适用于互联网。

只卖了两辆车的二手车APP,居然估值两亿美金

这段时间中国经济有下行压力,再加上最近几年互联网很热门,大量的传统企业老板纷纷找我合作,尤其是我们投资了永辉超市之后,有一大堆的超市找我们,希望能跟京东合作,他们说一定要和互联网有关系。

我很好奇为什么一定要和互联网有关系?有个中欧的校友跟我说了实话,他们感觉跟互联网接上关系,连猪都可以飞起来。

互联网领域有个很普遍的说法,风来了,猪都会飞。我认为如果你是一头猪的话,就两种选择。

第一个选择你使劲吃,使劲睡,抓紧最后的日子,享享福得了。

第二条路,你就每天少吃,多走路,锻炼身体,把自己弄瘦一点儿,让养你的人晚杀你几天,你干嘛非要飞起来?猪飞起来有什么结果?你是头猪,飞到天上去,是疯狂了十几秒,但摔下来死得更快。

我给大家讲一个真实故事,去年年底有个互联网公司业务模式发生变化,以前老的业务不想做了,老板不想开除这些兄弟们,要赔偿一笔钱,跟30多个兄弟们商量说,兄弟们,你们出去创业吧,我给你们投150万人民币。这帮兄弟真就信了,拿了150万人民币去创业了。

到今年3月份见面,本来以为这些兄弟和公司没关系了,从此算是解套了,结果3月份兄弟们告诉他,已经拿到了A轮500万美金的投资,他之前投的150万占了70%的股,最近B轮融资追过来,估值2个亿美金!

原来兄弟们在手机上做了个卖二手车的APP,我问卖了几辆车,他告诉我最多只卖了两辆车,还是员工自己买的。

估值超过10亿美金,如果不能提升行业交易效率,然并卵

十二年以来,我在互联网经历过三次行业谷底,最近一年正在经历第三次行业谷底。整个中国互联网拿到5000万美金融资的几十家企业,估值超过10亿美金,到今天没有一家上市的,但在私募市场,估值过10亿美金的企业,中国已经超过50家企业。我认为,任何时候,行业一旦疯狂的时候就会出问题。

互联网没有违背经济规律,我们看到中国互联网行业发展到今天也就不到10家被记住。任何一个行业只要存在三家以上的巨头,这个行业都不健康,全世界互联网都是这样,全世界互联网第一名占了80%的利润。

其他互联网企业死掉了是什么原因?我们也琢磨了很长时间。最后结论就是任何一种商业模式都要符合传统经济规律,所以我们对互联网的看法,总结就是任何一种互联网商业模式,如果不能够降低行业的交易成本,不能够提升行业交易效率的话,那么最后注定会失败的。

到今天中国所有的互联网企业,能够连续五年市值超过50亿美金,大概只有3家。如果能够连续五年市值过2亿美金以上的规模,也就十来家。如果把他们视为成功者的话,今天所有活下来的互联网企业,都是给行业带来成本的下降和效率的提升。电商就是能带来便利,这种便利的背后,是交易成本的下降。是消费者对此付出更少的时间。
背景:听说在微信上搞个服务号,怎么调试呢?微信上也是web做的服务号手机网站,在PC端有Firebug和chrome的F12调试,而用苹果的web端调试则是用苹果手机连接上苹果电脑,打开safari进行调试,相当有效果。
  我们知道在 Mac/PC 上的浏览器都有 Web 检查器这类的工具(如最著名的 Firebug)对前端开发进行调试,而在 iPhone/iPad 由于限于屏幕的大小和触摸屏的使用习惯,直接对网页调试非常不方便,所以一直没有 Web 检查器这一类工具。

但是 iOS 6 的发布解决了这个问题。
iOS 6 给 Safari 带来了远程的 Web 检查器工具(Remote Web Inspector),你可以通过模拟器或者真实的设备(通过 USB 连上 Mac)进行调试。下面我讲讲详细的调试过程:

1. 要进行远程调试,首先要打开开启 iPhone/iPad 上的 Safari 的远程调试功能,“通过 设置 > Safari > 高级”开启:

2. 然后打开 Safari,开启你要调试的网页,当然原生应用中通过 WebView 开启的网页也是可以调试的。

3. 最后把 iPhone 或者 iPad 通过数据线连上 Mac 电脑,打开桌面版的 Safari(目前 iOS 6 的 Safari 远程调试只支持通过 Mac 上的桌面版的 Safari 进行,Safari for Windows 目前还没有此项功能),点击开发菜单,选择你调试的 iPhone/iPad 的设备名,选择调试的网页。

4. 最后就是调用桌面版的 Safari 的 Web 检查器对 iPhone/iPad 上的 Safari 应用进行调试:

这个调试过程和我们平常在 Mac/PC 上调试基本一样,比如可以对 HTML 和 CSS 做些实时的改动,查看修改后的效果。查看 cookie,本地存储,session 等一些数据。查看 WebApp 的性能,网络请求等,也可以查看所有错误和警告信息对程序进行修正。

当然我们可以通过它来调试 Javascript,设置断点,定义未捕获的意外等。也可以访问 Console,直接执行 Javascript 代码。

另外它还支持触摸检查(Touch to inspect):激活检查器上的手型图标,就可以通过在 iPhone/iPad 上触摸,就能立即找到检查器对应的 DOM 元素。



来自:http://www.leiphone.com/news/201406/ios-safari-remote-debugging.html
分页: 21/246 第一页 上页 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 下页 最后页 [ 显示模式: 摘要 | 列表 ]