2016年12月6日星期二

php 新手教程 1

教程是很多,我这种教程不一定有人看,但是怎么说呢,个人口味不同。

带你入个门,其他的请Google,专业名词太多,根本没办法一一说明,想看专业解释,可以去看维基百科。

闲话就不说了,php 入门,第一阶段,不是hello word,是搭建环境,连运行环境都没有,还怎么运行php,这个入门也不会说那么多关于php的运行机制,等你成了老鸟可以自己去琢磨。

开始第一步,搭建运行环境,这里推荐一键安装包wampserver,喜欢自己倒腾三大件的,apache,php,mysql。或者有人看到什么nginx比apache快什么的,可以自己尝试,我这里不介绍这些,并不是这些不重要,而是本人的教学方法是怎么简单怎么来,不要一开始就接触高难度,反而会使得自己难受,不喜欢我的教学方式的,也不要紧,可以直接关闭了

不要无休止的提问,互动这种东西不是新手该有的东西,你所有的疑问Google里都有,安装好wampserver之后,扩展什么的自己先看看,不建议深入,默认扩展够用了,下面接着开始做开发,第二步,这里就是hello word了,开启wampserver软件,右下角,左击w图标打开www目录,新建hello.php文件,编辑此文件,写入<?php echo "hello word";?>代码。开浏览器,输入http://localhost/hello.php 看看浏览器里显示的内容吧,简单的hello word就此结束。

简单的解释还是要的,不然谁也看不懂这代码是什么。<?php ?>这是个组合,就像括号一样,没什么特别的意思,就是告诉你,这里面是php,echo 是命令,是告诉计算机,输出后面的东西,"hello word",就是要输出的东西,必须要用双引号括起来,这样才显示,不然你可以试试。解释起来太麻烦了,等于就是将php官网的东西搬过来,搬过来还不一定能理解,如果能忍住就忍住吧,后面会慢慢教的。

这里介绍下编辑器,开始学,咱就不要弄什么zend studiophpeclipse的了,这样下去,还得先学会如何使用这些工具,工具好是好,什么高亮提示,语法提醒,什么代码提示,什么debug调试什么的,可是,这就离开了我的一开始定位,不搞复杂的,就搞简单的,由浅入深。建议使用notepad++,为什么建议这个,还是两个字,简单,不需要刻意去学,不需要配置,不需要做什么额外的工作,安装,打开,编辑,保存就行了。

下一课 讲连接数据库

2016年10月22日星期六

编程注意事项 想到就添加

个人编程,不是团队
1 避免死循环,避免循环中添加过重的任务,比如循环查询
2 做好分析记录,在需要的地方添加记录,当无法调试,或者调试不清楚的情况下,可方便查看
3 命名使用适合自己的规则
4 文件分布简单,明了,层次太深不利于理解
5 重要的地方写注释
6 有好的库,就不要自己实现
7 代码缩进,换行整齐,方便读写
8 合理使用内存,该销毁的地方要销毁
9 开发前做设计,需要改善的时候,方便思考,针对需求复杂的
10 合理使用动态变量,适合灵活的场景,不适合效率优先的场景
11 面向过程设计时,避免使用对流程造成不可预估的方法或函数,比如发送邮件,远程获取(curl)等,可通过异步等方式解决
12 做好备份,代码用svn或者git,文档可以用seafile等,正式数据用rsync
13 由于接触的代码语言种类很多,多数情况下会出现代码混用,最好在使用一种代码编写时,不要混编

2014年8月24日星期日

全息+体感+环境模拟=(游戏)未来

先来说说最近的热门产品,VR 我觉得这样的设备,很容易造成思维拘束,对人的视野范围,以及肢体感应是一个非常困惑的问题

再说说精神方面的沉浸式设备,就算现在还没有研发出来,但这只是时间的问题,我觉得这要是出了问题,不光是精神受冲击,估计生命也会有很大的危险

我觉得改变自身周围因素,会比以上两种设备来的安全及容易接受些

目前全息投影技术,在那些技术牛人的不断努力下,现在已经越来越近了,“空间光调制器” 有兴趣的可以搜索下

体感设备,不多说,目前设备出来不少,但是技术还是不够成熟,等待先的革新



环境模拟,目前没有什么好的设备,虚拟现实跑步机算一个,接着就等待虚拟其他环境的设置出现了

未来的游戏好期待不知道,有生之年能不能遇上


2014年6月6日星期五

MySQl分组显示组内前N项

之前在网上搜索过几种解决办法,一直都不是很满意

分开查询

先查询id
select CAST(group_concat(ids) AS CHAR(10000) CHARACTER SET utf8) as iid 
from (select SUBSTRING_INDEX(group_concat(id ORDER BY 字段),',',4) as ids from `table` group by 字段) as val
在根据id查询数据
SELECT * FROM table where id in ($id)

这种也是可以的
select 字段,substring_index(group_concat( concat(字段,':',字段) order by 字段 desc separator '|'),'|',5) fromtable group by 字段;
具体看情况

Linux下mysql忘记root密码的简单解决办法

在密码多如牛毛的今天,很多时候,管理员会出现忘记各种各样的密码,针对mysql中root密码的忘记情况,可以采用以下步骤重新设置root管理密码。
1、修改mysql的配置文件:
#vi /etc/my.cnf
在[mysqld]中加上一句:skip-grant-tables
保存退出;

2、重新启动mysql
# /etc/init.d/mysql restart
3、登录并修改mysql的root密码
#/usr/local/mysql/bin/mysql
mysql>use mysql;
mysql>UPDATE user SET Password = password ( ‘you-passwd’ ) WHERE User = ‘root’;
mysql>flush privileges;
mysql>quit
4、将第一步修改的my.conf修改回来
# vi /etc/my.cnf
将刚才在[mysqld]的段中加上的skip-grant-tables删除,保存退出;
5、重新启动mysql即可

不记得是否有用,先收藏,下次实践

一行命令安装PPTPD VPN

一行命令安装PPTPD VPN(注意,只在CentOS 5 32bits/64bits下测试通过,其他系统未测试):
wget http://www.CTOHome.com/linux-vps-pack/vpn-pptpd.sh;sh ./vpn-pptpd.sh;
如何创建更多的vpn用户?
请在linux下,ssh编辑/etc/ppp/chap-secrets文件,按照相同格式添加用户名和密码即可。

防火墙如果开启,需要设置

*nat
:PREROUTING ACCEPT [27:2438]
:POSTROUTING ACCEPT [49:3077]
:OUTPUT ACCEPT [49:3077]
-A POSTROUTING -s 172.16.36.0/255.255.255.0 -j SNAT --to-source 服务器ip
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42517923:199393012741]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT 
-A FORWARD -j RH-Firewall-1-INPUT 
-A RH-Firewall-1-INPUT -i lo -j ACCEPT 
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT 
-A RH-Firewall-1-INPUT -p esp -j ACCEPT 
-A RH-Firewall-1-INPUT -p ah -j ACCEPT 
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
COMMIT


CentOS卸载Apache Mysql 和php

收藏
目前新版的Centos系统会集成Apache的服务,而我们在安装有些功能的时候,需要一个完全纯净的系统,这样就需要卸载apache的httpd。
首先我们要知道我们安装了哪些组件,通过命令
rpm -qa|grep httpd
rpm -qa|grep mysql
rpm -qa|grep php
分别可以查看本机安装的apache、mysql和php服务。如果返回为空,则说明本机没有安装该服务。
比如笔者输入第一个命令,返回为:
[root@localhost ~]# rpm -qa|grep httpd
httpd-2.2.3-43.el5.centos
说明本机已经有了httpd组件。如果我们要卸载它,我们输入以下的命令:
rpm -e httpd-2.2.3-43.el5.centos
rpm –e 是卸载rpm包的命令,后面是名称,最后的版本号可以不用打。如果我们需要卸载多个应用,只要输入多次即可。
如果实在卸载不掉的话,可以加—nodeps这个参数来卸载,比如我们卸载httpd-2.2.3-43.el5.cento,实在卸不掉了:
rpm -e httpd-2.2.3-43.el5.centos --nodeps
就可以用以上的命令卸载,看清后面是两个-

mysql 数据库热备份主从设置

一、主从设置

log-bin=mysql-bin
server-id       = 1
expire_logs_days = 5
binlog-do-db=数据库1
binlog-do-db=数据库2
binlog-ignore-db=mysql

二、mysql多实例化(windows下) 如果有其他mysql服务器,这里不需要
拷贝mysql目录
mysqld install mysql2 服务安装
修改端口
注册表修改
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/项目找到你刚才手动安装的服务,在mysql-nt"和mysql2之间加入my.ini的路径信息,格式为:

--defaults-file="d:/mysql/my.ini"

server-id = 2
master-host=主ip
master-user=用户名
master-password=密码
master-port=3306
replicate-ignore-db=mysql
replicate-do-db=数据库1
replicate-do-db=数据库2

数据库需要一致,到出主服务器数据到从服务器
导出数据库为sql命令文件
第一步是清空所有表和块写入语句,并锁定COMMIT操作。这里不要退出mysql!
第二步是启动另一个终端导出数据。
第三步是查看状态,
第四步是解除第一步的锁状态。
mysql>FLUSH TABLES WITH READ LOCK;
mysqldump --master-data=2 --single-transaction -u root -p table >table.sql
mysql>SHOW MASTER STATUS;
mysql>UNLOCK TABLES;


帐户设置
用户名 密码 RELOAD, SUPER, REPLICATION SLAVE

从服务器命令启动
slave stop;
show variables like 'server_id';
set global server_id=2;
CHANGE MASTER to MASTER_HOST='主ip', MASTER_PORT=3306, MASTER_USER='用户名', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;

MASTER_LOG_FILE MASTER_LOG_POS 通过master执行show master status 获得

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; 设置同步错误时执行

查看是否成功
slave start;
show slave status\G;
  Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
代表成功

centos 常用命令

.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName

tar -czvf  项目.tar.gz   --exclude=目录 --exclude=目录  项目目录 

cp -Ri file1 file2
复制文件夹

vi
插入到光标后面 a
返回控制命令 esc
推出 :q 强制退出:q!
保存退出 :wq
到最后一行:$
查找字符串 /

重启
reboot

服务重启
service httpd restart

SElinux设置vsftp
setsebool -P allow_ftpd_full_access on
setsebool -P ftp_home_dir on
getsebool -a|grep ftp


cpu和内存使用情况
top

添加centos到用户组apache
 
usermod -a -G apache centos

设置网站根目录/var/www的所有组为apache
 
chown -R :apache /var/www

设置网站根目录的权限为用户组有读写权限
 
chmod -R g+rw /var/www

查看Apache运行用户和组
ps -ef |grep httpd

查看用户属于哪个组
id user

查看所有用户

cat /etc/passwd

mysql 备份
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

mysql还原
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
或者
mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\wcnc_db.sql


系统每天定时备份mysql数据库

1、创建保存备份文件的路径/mysqldata
#mkdir /mysqldata

2、创建/usr/sbin/baktest文件
输入以下内容:
mysqldump -uroot -proot test | gzip > /mysqldata/test`date +%Y-%m-%d_%H%M%S`.sql.gz

3、修改文件属性,使其可以执行
#chmod +x /usr/sbin/baktest

4、修改/etc/crontab
在下面添加
01 3 * * * root /usr/sbin/baktest
表示每天3点钟01分执行备份

5、重新启动crond
#/etc/rc.d/init.d/crond restart

添加root权限的用户
修改 /etc/passwd 文件,找到如下行,把用户ID修改为 0 :

mysql备份用户权限设置LOCK TABLES,SELECT,FILE,RELOAD,SUPER,SHOW VIEW*

df -hl      查看分区大小

Linux下如何合并目录

\cp -Rf  要合并目录 目标目录的父级目录     目录下的同名目录合并

f参数是为了避免提示是否要覆盖文件
cp之前还有一个“\”符号 是因为 cp命令使用-f参数后,还是会提示是否要覆盖文件,因为cp命令的alias是cp -i,而恰恰-i参数是表明有交互提示,于是直接输入cp -Rf是不能消除提示的。在cp命令前加上“\”,或者使用cp命令的绝对地址就可以保证不出现提示了。

2014年6月3日星期二

Linode VPS上的Centos iptables security raw nat[FAILED]filter

纯属转载,方便自己查找
重启Linode VPS上的Centos 6.4系统的防火墙的时候,遇到以下错误:
service iptables restart
Setting chains to policy ACCEPT: security raw nat[FAILED]filter

经过搜索,明白是Linode官方在iptables里加了一个security的规则链,但Centos不支持。
而找到的解决方法是,编辑/etc/init.d/iptables,找到:
  1. for i in $tables; do
  2. echo -n "$i "
  3. case "$i" in
  4. raw)
  5. $IPTABLES -t raw -P PREROUTING $policy \
  6. && $IPTABLES -t raw -P OUTPUT $policy \
  7. || let ret+=1
  8. ;;
加入以下内容到“case "$i" in”下面:
  1. security)
  2. $IPTABLES -t filter -P INPUT $policy \
  3. && $IPTABLES -t filter -P OUTPUT $policy \
  4. && $IPTABLES -t filter -P FORWARD $policy \
  5. || let ret+=1
  6. ;;
  7.  
最终版本类似:
  1. for i in $tables; do
  2. echo -n "$i "
  3. case "$i" in
  4. security)
  5. $IPTABLES -t filter -P INPUT $policy \
  6. && $IPTABLES -t filter -P OUTPUT $policy \
  7. && $IPTABLES -t filter -P FORWARD $policy \
  8. || let ret+=1
  9. ;;
  10. raw)
  11. $IPTABLES -t raw -P PREROUTING $policy \
  12. && $IPTABLES -t raw -P OUTPUT $policy \
  13. || let ret+=1
  14. ;;
保存后,重启则可
service iptables restart

2012年8月21日星期二

中国的程序员,学什么语言

所有想要进入程序员行列的第一个问题就是,学什么语言。

其实真没必要纠结于学什么语言。它只是个工具,怎么学,怎么用才是关键。

本人觉的,影响语言的使用率有三个方面,
第一个方面是工资,做初级程序员的工资才是学习哪门语言的第一要素,所以培训市场很火,它就争对这样的人群。

第二方面是饱和度,和工资有很大关系,饱和度是反映现在市场的潮流和转变的表现值,一旦某个领域稳定下来,接下来就又是一场变动。比如之前很多公司做广告的,开始转向外包,那时候也就火了c#,java等。后来轮到页游,unity,flash也就跟着火,近来android,ios,基本上要想在一个方面专研下去,很难,不是我们程序员不够专研,而是难在生活需要我们工资,而我们的工资来源于公司,而公司跟随着潮流,潮流也就影响着我们的技术和语言。

第三方面,该谈到兴趣了,谁都知道兴趣是学习的最好的导师。没兴趣,还是转行吧,这行是很寂寞的,是很孤独的,是很无聊的,而且也是个年轻饭,到时候脑袋跟不上了,效率不高了,谁还要呢。

因为我跳了很多槽,所以我就是学了很多种,先接触的php,js,mysql后来c#,sql2000,flash,as3在后来,android,Linux,还有啥来着,反正都是一个时代的产物。
直到现在,php我是老鸟了,但我从不说我精通某一方面,技术永远都在前行,你能说你精通,那只是某一天,某一段时间。

我很讨厌那些说大话的人,拍着胸脯说自己什么什么精通的,记得有次面试个应届生,他还真敢说什么精通,结果我就让他来工作,然后安排他做个中等难度的事情,最后憋了三天跟我说,做不了,我当时真想骂他来着,但要保持点形象,我就对他说,你不适合做这个,你还是走吧。

每个人都得找到自己路,不要被别人误导了,有句话:师傅领进门,修行在各人。选什么语言不重要,重要的是学习的方法如何使用。

2012年8月20日星期一

说说跳槽的事

我跳槽,只是想过的更好,不是说我不想稳定。

人生不得不面对这样的抉择--跳槽。

跳槽这事得有三个阶段:

1.犹豫期,跳还是不跳,取决于自己对公司的好坏分析,分析到位后再决定要不要跳。

一般先是公司业绩方面,要是公司不赚钱,那就没钱给自己发工资,更不会涨工资,工资这事,对所有人影响很大,除非有股份,那就是另外一回事了,股份就像赌博一样,赢了就高兴,输了就难受。

然后就是公司人际关系,工作压力方面考虑,比如和老板,和同事,和领导谈不来,不爽,那就算工资再高也不行,总不能天天不开心,抑郁撒,我通常谈不下去的时候,就不再发表意见了,因为沟通是需要建立在平等的基础上的。工作压力要适当,不能总一直紧绷着,弄几个通宵没问题,问题是,弄完还要接着工作,没得息,真当自己是机器人啊,也不会有人感谢你。

2.准备期,跳槽也得跳个稍微好点的地方,所以先按兵不动,等着下个工作的地方找好了再动,找不到好的,还不如在原来的地方呆呆,至少环境已经熟悉了,找下家真是件不容易的事,工资总得提点,职位可以进去了再慢慢爬,主要是工作环境,工作压力要先了解了解。

3.办手续,有的公司来的容易,走的时候麻烦不得了,还扣钱,想去劳务,但那个更麻烦,所以很多时候我们都是弱势的。

我已经跳了N多家了,实在跳不动了,每跳一家,我真的想稳定下来,但有时候,现实就是那么的残酷,没得选。 有时候想创业来着,但是在国内,想创业,一是运气,而是背景,其他的就别想了,还是好好工作吧

2012年8月16日星期四

程序员的出路在哪

每天,面对我的是无数个将要解决的问题,不管它是多简单,还是多复杂,我都得义无反顾,能解决什么样的问题,就代表我们有多大的价值,能拿多少工资。

大多数的程序员,命运很坎坷,也有少数命好的。

我身边有很多都是转行做程序的,最终也有很多转行做别的,能坚持下来的真的很少,做到30岁左右,就是一个坎,要么走人,开个电脑店,话说现在也不那么好开了,要么就升职,做管理。我就是其中一个。

说说中层管理员吧,对上边得奉承着,不顺心的时候比顺心的时候多。面对外行者来说,说明一个功能要花多少人力,财力,物力和时间,这是件多么痛苦的事情,因为你不知道这里面有多少不定因素,人的因素占一半,都是人在做事,需求的变动占一半,技术难度占一半,在加上计划赶不上变化,等等各种原因。终于明白为什么以前的领导总是愁眉苦脸的了。
对下边,都是做技术的,多少都有点同情心,不管做的多慢,多烂,总得忍着点,毕竟人家就这点能耐,也不能让人家下岗吧,还有一点,招不到人,哎,新人是很多,但是,培训,考核,一大堆的事情,就忙着把人带出来了,产品进度一点没变,还不指定人家原不愿意待呢,说不定就为了混个实习,实习一完立马走人。

在说说自己吧,自己老大不小了,也成家了,家里的担子挺重,创业很早就想了,一直等机会,就是机会不肯来。平时没事的时候就瞎想,想着做点东西看看能不能火,可是一做起来就头疼,毕竟不是现成的需求,做出来就行,看着市场上这样那样的产品,想仿一个,又为后面的销售,宣传而烦恼,总之就是在等着。大多数时间就看看电视,玩玩游戏,研究下最新技术产品之类的,话说kinect出来后,一直想买,等到了买的时候,又为了那点钱舍不得,真够可怜的。今年打算买了,毕竟这东西都出来很久了,不买还真算不上是做it的,android倒是早早入手了一台,也做了个小东西没成形,都不好意思拿出手,研究研究就到位了,ios太贵,了解了解就可以了,之前还做过个flash应用,转成java在山寨机上跑的,现在每个月还能赚个话费,满足足的。

程序员有想法,但真正自己单干的时候还是不行的,没个志同道合的帮忙定需求,就做不了东西,销售也不行,管理只能凑合,毕竟不是专业搞管理的。

没事的时候还是可以写写技术文档的,可是我很懒,懒到程序都不想自己写,以前写过个程序,只要设置设置,填写填写表单,就能生成一个网站的,yiy.66ghz.com 就这个。