html提交个表单而已,居然有这么多技术
技术一,form
技术二,xhr也就是XMLHttpRequest也就是ajax技术,有js原生实现法和jquery ajax大法
技术三,formdata
技术四,fetch
上述技术越往后面越新
linux实时查看log变化
使用watch命令
watch -c -d -n 1 tail /var/log/nginx/error.log -n 5
上面命令的意思是查看tail命令的输出,-c彩色,-d显示差异,-n 1每秒钟更新一次。
linux定时任务cron和at
linux定时任务通过cron和at运行。
cron只能运行循环任务,如果是一次性任务,则要用at。
at语法灵活,如2分钟后运行一个脚本:
$at now + 2 minutes
>python t1.py
>ctrl+D
如果要运行一个文件的任务,使用:
at now -f filename
linux PATH立刻生效
linux的PATH要立刻生效,需要修改:
~/.bashrc
在里面增加一条:
BATH="/路径:/路径:"$PATH
下次新打开一个终端就生效了
php7连接mysql的函数mysql_connect已经被弃用了!
php7连接mysql的函数mysql_connect已经被弃用了!
大多数的php教程中还是用的mysql_connect,你会发现在php7中会报这个函数不存在。请用mysqli_connect替代。
PHP的交互式命令行
php -a
php7,php-fpm7,nginx在deepin(debian)上的安装配置
1. 安装
我是懒人,不习惯make/make install, 直接用aptitude安装了
$ sudo aptitude install nginx
$ sudo aptitude install php
$ sudo aptitude install php-fpm
目前是直接安装了最新版的php7、php-fpm7
2. 配置
php-fpm默认不需要配置,并且安装好后自动就启动了,可以使用
ps -aux | grep fpm
查看有没有启动。
安装的位置是:
/usr/sbin/php-fpm7.0
不过和旧版本的使用 fastcgi://127.0.0.1:9000的网络接口相比,新版本使用了Unix域套接字(Unix domain socket),是在文件系统里的文件,php-fpm的unix域套接字是:
unix:/run/php/php7.0-fpm.sock
因此配置nginx.conf的时候,要使用这个。
Unix域套接字同样可以用netstat -apn | grep fpm查看。
重要的是配置nginx.conf
我的位置是在 /etc/nginx/nginx.conf
deepin安装的nginx.conf中,包含了配置/etc/nginx/sites-enabled/default,默认的配置文件其实在这,可以配置这个default文件。
sudo vim /etc/nginx/sites-enabled/default
在default中,默认包含了nginx的配置,所做的是取消井号#,修改一下就好了。
默认default中去掉无关说明,剩下的所有配置如下,需要修改的以粗体表示:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server # listening on 127.0.0.1:9000 # #location ~ \.php$ { #include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: #fastcgi_pass unix:/var/run/php5-fpm.sock; #} }
修改为:
server { listen 80 default_server; listen [::]:80 default_server; # 这儿是你自定义的www根目录 root /home/deepin/docs/wwwdir; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php; #增加index.php server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #去掉下面两行井号
location ~ \.php$ {
include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # 去掉下面这行井号,并修改为正确的unix套接字,可在shell中用sudo netstat -apn|grep php查看 fastcgi_pass unix:/run/php/php7.0-fpm.sock; #} }
3. 启动
/etc/init.d/php7.0-fpm restart
/etc/init.d/nginx restart
4. 测试
在配置的root目录下建一个index.php
内容是:
<?php phpinfo(); ?>
linux $() ${} $(()) (()) $....用法
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 $# 添加到Shell的参数个数 $0 Shell本身的文件名 $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 |
示例:
1 #!/bin/bash 2 # 3 printf "The complete list is %s\n" "$$" 4 printf "The complete list is %s\n" "$!" 5 printf "The complete list is %s\n" "$?" 6 printf "The complete list is %s\n" "$*" 7 printf "The complete list is %s\n" "$@" 8 printf "The complete list is %s\n" "$#" 9 printf "The complete list is %s\n" "$0" 10 printf "The complete list is %s\n" "$1" 11 printf "The complete list is %s\n" "$2 |
结果:
[Aric@localhost ~]$ bash params .sh 123456 QQ The complete list is 24249 The complete list is The complete list is 0 The complete list is 123456 QQ The complete list is 123456 The complete list is QQ The complete list is 2 The complete list is params .sh The complete list is 123456 The complete list is QQ |
再简单不过的时间管理:番茄工作法
很多时间管理致力于提高工作效率,减少打扰,番茄工作法是其中及其简便的一种。
一个番茄时段25分钟,计时开始后,排除一切干扰开始专一的一项工作。这项工作应该是简单的可以在25分钟内完成的。然后休息5分钟,继续下一个番茄时段。
这种方式蛮有效率,我想了一下可能的原因:
* 工作时段容易计算,工作+休息是半个小时,看着一个时钟就很清楚过去了多久还有多久,不需要特意的工具。
* 排除干扰,集中一项事务。人能高度集中注意力的时间不长。学校里面上课40分钟是有道理的。
* 一件简单能完成的工作。这督促人们去分解庞大的工作,不积跬步无以至千里。一步步都能完成一些工作,避免了一个庞大工作总是无法完成的挫败感。这与项目管理的WBS(Work breakdown structure)任务拆分、敏捷开发的sprint->user story->task的拆分思想都是一样的。
* 要集中注意力,就要休息好。中间一小段时间的休息更有利于集中注意力工作。
Linux杀端口占用的进程
1. 找出占用的端口,如8080:
netstat -apn | grep 8080
如果还找不出来,上面的命令可能需要sudo一下。
输出列表形式是:
协议、原地址:端口、目的地地址:端口、状态、PID/程序名称
PID是其标识,可以用来杀掉它。后面的程序名称有时候比较短,可以用ps再确认一下。
2. 用进程管理再确认一下
ps -aux | grep python
输出是:
用户、PID、CPU、内存、VSZ、RSS、TTY、状态、开始时间、运行时间、命令路径名称
这里面命令路径名称要详细一些,可以用来加以确认;
3. 杀了
温柔的送个终止信号,请其自杀:
Kill -3 PID
不管了,强制杀掉:
kill -9 PID
一句话快速建立HTTP文件服务器(Linux, Windows, 或其他系统不限)
想快速共享当前目录?忽然发现SMB失效怎么都用不起来,FTP我麻烦对方也麻烦,还是HTTP好啊。进入你要共享的目录,下面一句话搞定:
python -m SimpleHTTPServer &
当然前提是你装了Python。。。
Debian系Linux(Ubuntu等)安装Node.js注意
debian系linux使用的包管理工具是apt-get或升级版的aptitude。node.js相关的有2个包:nodejs和nodejs-legacy。为什么会有两个?
首先,nodejs安装完成后,大部分系统的默认的运行名称为“node”,于是很多nodejs的脚本文件都会以“node”作为运行名,如果没有找到,就无法执行。而debian上有个老软件包叫“node”,这与nodejs的默认运行名称“node”重名了,所以在debian系linux上,安装nodejs包后的默认运行名是“nodejs”,这会导致很多npm包里的软件找不到“node”。
解决方法1,就是安装nodejs-legacy,不过要把以前的nodejs和其他相关删除掉。
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs
sudo apt-get install nodejs-legacy
# 确认能用
node --version # v0.10.13
ls -la `which node` # ... /usr/bin/node -> /etc/alternatives/node
解决方法2,仍然使用nodejs包,但是建立一个硬链接,目前测试暂未发现问题。
cd /usr/bin sudo ln nodejs node
2b企业产品的特殊性
2b(to business)产品有其2b之处。
1. 用户选择和实施产品的成本非常高。企业产品对企业来说,很可能涉及全公司员工的使用。企业在选择时,就特别谨慎,表现在选择对比的周期长,审批环节多,要求产品提供方长期维护能力强,反应速度快。企业选择产品少则数天,多则数月。此时往往需要专人跟踪。
2. 用户、客户、决策者角色分离,也就是使用的、给钱的、做决定的都不是一个人。这是常见的情况,无须赘述。作为产品来说,就算只卖一个产品,你需要搞定的都不是一个人。
3. 使用者(用户)对业务不一定熟悉,有的用户甚至提不出问题,更遑论给出要求。这有多种原因,首先,熟悉业务的更多是安排事情的领导,而使用者多数可能是普通员工,也就是“做事的”,开始时并不熟悉业务;其次,普通员工公司内、公司间的流动性比上层员工大,可能是新员工刚来,也可能是老员工要走,我在半年时间内,已经见到好几个公司的前台用户换岗离职,频率不可谓不高;再次,公司业务发展快、调整快、文件多,一种制度不适用了、或没有制定好会很快换另一种,负责的员工熟悉上手都需要时间;最后,很多客户只是觉得这个产品概念不错,或者很流行,或者看到别的公司有使用,但这个产品对他们究竟有哪些用处,还需要很多学习了解。
4. 不同公司的习惯和要求千奇百怪千差万别,有些习惯和要求可以改变但要花费精力解释引导灌输,有的习惯和要求就很难统一改变。如果产品要都适应,就要做出多种多样的设置选项。而设置多了以后,如何让用户找到哪个设置适用于自己,又是一个新的问题。这也是以前企业产品多定制的原因。
5. 企业产品要求连通性。这一点要求其实也挺强,但是一直都没有很好解决,因为毕竟没有一家企业产品的开发公司能做好方方面面的,另外在企业的连通性方面又缺乏协议和标准。连通性最起码的是账号鉴权、组织架构,其次是业务流程、审批流程。华为以前用IBM lotus Notes做基本的工具,又有很多专门的IT开发人员基于notes做二次开发,甚至ERP等方方面面都是用IBM产品,以求联通。但绝大多数公司也没有华为的财力人力,也就习惯了吃百家饭,然后自己人工消化。所以目前企业产品即使不连通,很多用户也愿意自己人工化解。
6. 企业产品的安全性、可用性要求也高于个人产品。个人泄露了点信息可能是多接几个骚扰电话,应用一两个小时不可用也就等一等或用别的;企业的信息泄露可能事关存亡,应用用不了也没有替换方案,相关人等的相关工作都要停滞。
综上所述,一个企业产品如果不解决上面几点问题,就很难有爆发力,不免陷入泥潭。
对于创业公司只有少数几个人的团队来说,要做也只能做小而美的产品,我试着给出几个产品定义的方式,解决上面的问题:
1. 设计针对某一岗位的某一类员工个人使用的通用、共性需求的产品,对员工个人有价值,从个人方面赚取费用。这个能规避企业产品选择成本高、角色分离、要求多样化的问题。他自己觉得合适,就能选择来用,不合适就不用。如墨刀modao.io是针对产品经理制作APP原型的工具,产品经理觉得好用就马上可以用,用段时间对有些付费新功能有需要就会付费。
2.做工具类产品而不是社交类、连通性产品。同上。对于社交,很多小创业公司还是用的QQ,很多大公司还是用的Email,要做OA审批的话,就要有一堆的连通性问题,需求就会层出不穷,很难好好满足。
3.如果是确实要针对全公司大范围使用的产品,产品应针对小微企业,而不是大企业。因为小微企业决策快且激进,大企业慢且保守。最近和一个一千多员工的公司HR聊,他们会更倾向于使用传统保守的软件,而不是新兴软件,即使新软件的体验更好。我说的是金蝶云之家和阿里钉钉。其实阿里人更多实力更强,但它之前并没有做过企业类产品,传统的大企业还是会更相信金蝶。
4.要做足文档和培训,做好售后支持和及时响应。企业中每天遇到的问题都可能是新的,更别提你解决新问题的产品。从各家SaaS产品来看,工具类产品小到墨刀leangoo,社交综合类产品大到钉钉云之家,文档帮助总是时时处处,甚至400热线也毫不吝惜的处处出现,培训消息通知也时不时能看到。
其他方面:
1.设计好盈利模式。你看去年快的被收购了,今年优步中国被收购了,赔本赚吆喝的生意总是不能一直做下去的,况且咱创业又没那么多钱用来烧。这里面还有一点,如果没人愿意付费,千万别死脑筋觉得产品做得不够好,赶快看看是不是产品方向就有问题。大多数创业者愿意说产品不够好,因为产品不够好可以改;但大多数人不愿说方向有问题,因为方向有问题,前面就白做了。不过,白做三个月总好过白做一年。
2.做好营销。如今说“酒香不怕巷子深”,完全是在放屁。如今还说放到网上,有人说好就有口碑就有粉丝,更是痴人说梦。网上的流量都是被各路巨头把控,要流量就要付费。既要流量,又不想给钱或者少给钱的方法是越来越少,也越来越奇葩。连优衣库也要运作个不雅视频门,洗个车还要弄比基尼女郎,你就看着办吧。
BaaS忽然多了|物联网新协议
除了关注很久的leancloud,闹着风风雨雨的APICloud,最近又有一个野狗,做实时BaaS;通过它又知道谷歌在两年前收购了一家做BaaS的Firebase....APP和各种应用开发似乎要越来越容易了。
物联网方面,Wifi和Zigbee曾经是最火的两个协议。去年深圳的物联网实现的一些智能家居产品都是用这两个协议做的。去年典型的是Zigbee的芯片贵,据说是实现起来比较复杂。现在又有了两个新底层协议,一个是z-wave,另一个是thread,还有上层协议COAP。后两者是google的NEST背景,希望这些会为物联网注入活力。
说多一些物联网。智能家居闹了这么久,似乎也只是些噱头。除了用户体验方面,让大家一直怀疑有必要让个温度计湿度计智能起来吗?另一方面,室外定位从卫星到技术大发展,美国GPS、俄国Glonass、中国北斗纷纷上线,而室内定位似乎还没有一个好的技术标准。