js常用函数

//js 中的算术运算
Math.pow(2,53)      // => 9007199254740992: 2 的 53次幂  
Math.round(.6)      // => 1.0: 四舍五入  
Math.ceil(.6)       // => 1.0: 向上求整  
Math.floor(.6)      // => 0.0: 向下求整  
Math.abs(-5)            // => 5: 求绝对值  
Math.max(x,y,z)         // 返回最大值  
Math.min(x,y,z)         // 返回最小值  
Math.random()       // 生成一个大于等于0小于1.0的伪随机数  
Math.PI             // π: 圆周率  
Math.E              // e: 自然对数的底数  
Math.sqrt(3)            // 3的平方根  
Math.pow(3, 1/3)        // 3的立方根  
Math.sin(0)             // 三角函数: 还有Math.cos, Math.atan等  
Math.log(10)            // 10的自然对数  
Math.log(100)/Math.LN10     // 以10为底100的对数  
Math.log(512)/Math.LN2  // 以2为底512的对数  
Math.exp(3)             // e的三次幂

//js 日期和时间
var then = new Date(2011, 0, 1); // 2011年1月1日  
var later = new Date(2011, 0, 1, 17, 10, 30);// 同一天, 当地时间5:10:30pm,  
var now = new Date(); // 当前日期和时间  
var elapsed = now - then; // 日期减法:计算时间间隔的毫秒数  
later.getFullYear() // => 2011  
later.getMonth() // => 0: 从0开始计数的月份  
later.getDate() // => 1: 从1开始计数的天数  
later.getDay() // => 5: 得到星期几, 0代表星期日,5代表星期一  
later.getHours() // => 当地时间17: 5pm  
later.getUTCHours() // 使用UTC表示小时的时间,基于时区
later.toString() //"Tue Dec 22 2015 15:22:50 GMT+0800 (中国标准时间)"
new Date(later.toString()) //Tue Dec 22 2015 15:22:50 GMT+0800 (中国标准时间)
//时间加60秒
var time = new Date()
time.setTime(time.getTime() + 60000)

//js 字符串处理
var s = "hello, world"  // 定义一个字符串  
s.charAt(0)             // => "h": 第一个字符  
s.charAt(s.length-1)        // => "d": 最后一个字符  
s.substring(1,4)        // => "ell":第2~4个字符  
s.slice(1,4)            // => "ell": 同上  
s.slice(-3)             // => "rld": 最后三个字符  
s.indexOf("l")      // => 2: 字符l首次出现的位置  
s.lastIndexOf("l")      // => 10:字符l最后一次出现的位置  
s.indexOf("l", 3)       // => 3:在位置3及之后首次出现字符l的位置  
s.split(", ")       // => ["hello", "world"] 分割成子串  
s.replace("h", "H")         // => "Hello, world": 全文字符替换  
s.toUpperCase()

Git远程操作详解

一、git clone

远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。

$ git clone <版本库的网址>

比如,克隆jQuery的版本库。

$ git clone https://github.com/jquery/jquery.git

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。

$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

SSH协议还有另一种写法。

$ git clone [user@]example.com:path/to/repo.git/

通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档

二、git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

不带选项的时候,git remote命令列出所有远程主机。

$ git remote
origin

使用-v选项,可以参看远程主机的网址。

$ git remote -v
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery

上面命令表示,克隆的时候,指定远程主机叫做jQuery。

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

$ git remote rm <主机名>

git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>

三、git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

$ git fetch <远程主机名>

上面命令将某个远程主机的更新,全部取回本地。

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

$ git fetch origin master

所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
origin/master
 
$ git branch -a
* master
  remotes/origin/master

上面命令表示,本地主机的当前分支是master,远程分支是origin/master。

取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基础上,创建一个新分支。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。

$ git merge origin/master
# 或者
$ git rebase origin/master

上面命令表示在当前分支上,合并origin/master。

四、git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$ git fetch origin
$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

Git也允许手动建立追踪关系。

git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

如果合并需要采用rebase模式,可以使用–rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin
$ git fetch -p

五、git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin

上面命令使用–force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用–force选项。

最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags

原文:Git远程操作详解

php笔记

1、array_merge_recursive  当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。

2、cos函数和javascript的cos不同,php的cos参数为弧度,js的cos为角度。

3、php递归使用局部变量传参地址&。

4、stripslashes取消转义。

5、json_encode($data,JSON_UNESCAPED_UNICODE)//中文不编译成Unicode编码。

Github Pages 静态网页建站

创建仓库

略。详见GitHub使用教程。

仓库属性设置

找Github Pages项。点击自动生成,按照提示操作,就会得到该项目的gh-pages 分支。

发布网站成功,地址为 http://chuchus9293.github.io/web2 。

目录下index.html页面作为该网站默认页面。

发布成功

当然也可以自己做HTML网站,通过Github 客户端上传代码很方便。index.html仍为默认页面。

域名绑定到GitHub Page

Github项目设置

在仓库根目录下添加一个CNAME文件,没有后缀名,里面内容为你的域名,不需要添加http://前缀。
若CNAME中为www.example.com  则example.com 将被重定向到 www.example.com,www.example.com仍是自身。

注意CNAME中只能添加一个域名。

创建之后可以在项目settings看到发布地址发生变化,不再有github字样。

 

 DNS解析设置

ccsyi.cn为顶级域名。
www.ccsyi.cn为二级域名。
可以为顶级域名设置A记录,为二级域名设置CNAME,指向username.github.io(Gihub推荐,可以用CDN)。

 

以下是设置A记录的过程。

拿到GitHub Pages服务器IP。

在花生壳域名解析服务中选中www创建A记录。24小时之内陆续同步到全球各地的dns服务器上。

 

 

 相关概念

A记录:WEB服务器的IP指向
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。 
说明:用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置自己域名的二级域名。 
就是说:通过A记录,大家可以设置自己的不同域名转到不同的IP上去!如:
www.linuxpig.com 转到IP 1.1.1.1
ftp.linuxpig.com 转到IP 1.1.1.2
mail.linuxpig.com 转到IP 1.1.1.3

CNAME (Canonical Name)记录,(alias from one domain name to another)通常称别名指向
可以将注册的不同域名统统转到一个主域名上去。
与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址。
例如:linuxdog.com 用CNAME指向 linuxpig.com

URL (Uniform Resource Locator )转发:网址转发
功能:如果您没有一台独立的服务器(也就是没有一个独立的IP地址)或者您还有一个域名B,您想访问A域名时访问到B域名的内容,这时您就可以通过URL转发来实现。 
url转发可以转发到某一个目录下,甚至某一个文件上。而cname是不可以,这就是url转发和cname的主要区别所在。
例如:
URL转发可以将sina.com.cn 转发到 linuxpig.com/sina/ 上,相应的CNAME只能将 sina.com.cn 转发到 linuxpig.com 上。


TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上的缓存时间。

winsows服务器配置apache2.4+php5.6+mysql

mysql开INNODB引擎

skip-innodb   改成   #skip-innodb

default-storage-engine  改成  default-storage-engine=INNODB

Mysql数据库优化

数据库地址不能写localhost要用127.0.0.1

[mysqld]
skip-name-resolve #取消dns解析
skip-grant-tables#不需要密码
thread_concurrency=8#CPU合数*2

php配置

php官网下载:http://windows.php.net/download/   VC11 x64 Thread Safe(apache安全线程)(IIS用非安全线程)

VC11要下载c++2012运行库

解压到D盘。文件夹改名为”php”

跟目录下php.ini-production 改名 php.ini

3、打开php.ini  修改以下内容并删除前面的”;”

Extension_dir = “./” 改 extension_dir = “D:\php\ext”
cgi.force_redirect = 1 改 cgi.force_redirect = 0

以下内容去“;”

extension=php_curl.dll

extension=php_gd2.dll

extension=php_mbstring.dll

extension=php_mysql.dll

extension=php_mysqli.dll

extension=php_openssl.dll

extension=php_pdo_mysql.dll

apache配置

apache官网:http://httpd.apache.org/

点击Files for Microsoft Windows

点击ApacheHaus

下载zip和ssl

解压后打开httpd.conf

#LoadModule rewrite_module modules/mod_rewrite.so删除”#”

找Define SRVROOT,定义apache目录路径Define SRVROOT “C:\Program Files\Apache24”

删除Listen 80

所有Require all denied前加#

DirectoryIndex index.html改成DirectoryIndex index.html index.php

最后加入

LoadModule php5_module "d:/php/php5apache2_4.dll"
PHPIniDir "D:/php"
AddType application/x-httpd-php .php
AddType application/x-httpd-php .htm
Listen 8080
Listen 8008
Listen 8800
<VirtualHost *:8080>
    DocumentRoot "D:/weba"
    <Directory "D:/weba">
        Options FollowSymLinks
        AllowOverride ALL
    </Directory>
</VirtualHost>
<VirtualHost *:8008>
    DocumentRoot "D:/liuman"
    <Directory "D:/liuman">
        Options FollowSymLinks
        AllowOverride ALL
    </Directory>
</VirtualHost>
<VirtualHost *:8800>
    DocumentRoot "D:/wza"
    <Directory "D:/wza">
        Options FollowSymLinks
        AllowOverride ALL
    </Directory>

</VirtualHost>

管理员权限cmd进入apache/bin目录运行httpd.exe -k install -n apache

按回车不提交,表单验证,验证之后提交

<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    $('form').submit(function () {
         return false;
    });
    $(document).keyup(function(event){
        if (event.keyCode == 13){
            if (true) {//逻辑判断
                document.forms[0].submit();
            }
        }
    });
})
</script>
<form id='myform'>
<input type="text">
<input type="submit">
</form>

jade模板

doctype html
html
head
    style.
        div{
            float:left
        }
        h2
    script.
        var a = 1;
body
    p.
        hello jade
        hello jade
    - var user = { description: '我喜欢猫' }

    //- if 判断
    #user.user
    if user.description
        h2 描述
        p.description= user.description
    else
        h1 描述
        p.description 用户无描述

    //- for 循环
    - var array = [1,2,3]
    ul
        - for (var i = 0; i < array.length; ++i) {
            li hello #{array[i]}
        - }

    //- each
    ul
        each val, index in ['西瓜', '苹果', '梨子']
            li= index + ': ' + val
    - var friends = 10

    //- Case
    case friends
        when 0
            p you have no friends
        when 1
            p you have a friend
        default
            p you have #{friends} friends

    //- 申明可重用的块
    mixin list
        ul
            li foo
            li bar
            li baz
    //- 调用
    +list()
    +list()

    mixin pets (pets)
        ul#pets.pets
            - each val, key in pets
                li #{ val + ':' + key }
    //- 调用
    +pets(['cat', 'dog', 'pig'])

    mixin article(title)
        .article
            .article-wrapper
                h1= title
                //- block 为 jade 关键字代表外部传入的块
                if block
                    block
                else
                    p 该文章没有内容
                
    +article('Hello world')
    +article('Hello Jade')
        p 这里是外部传入的块
        p 再写两句

    mixin link(href, name)
        a(class!=attributes.class, href=href)= name
    +link('/foo', 'foo')(class="btn")