作者: admin

  • mac右键新建文件——NewFileMenu

    mac默认是没有右键新建文件功能的感觉有点坑,这对于用习惯windows的用户来说太不方便了我也觉得。

    下载安装后—-进入“偏好设置”—-扩展—–全部“所有第三方扩展”—-将“NewFileMenu”的沟打上,即可使用。

    之前,有朋友留言小子需要Mac下一款文件辅助软件——New File Menu,这里小子有时间就分享出来给更多需要的朋友。

    新建文件菜单(New File Menu)允许你从 Finder 右键菜单中快速创建各种文件。注意:新建文件菜单 是一款 Finder 扩展,安装完毕后请务必在“系统偏好设置 » 扩展”中启用“新建文件菜单扩展”。

     

    小子简单说明下New File Menu的特点:

    – 在任意 Finder 窗口中点击右键创建新文件

    – 内置超过 30 个文件模板(请在应用的首选项中启用所需模板)

    – 通过自定义模板,你可以创建几乎所有类型的文件

    – 你可以选择在创建完文件后播放提示音、打开文件等行为

    * 内置的文件类型

    – 纯文本文档

    – 富文本文档(RTF)

    – 微软办公文档(Word, Excel, PowerPoint)

    – iWork ’08 / iWork ’09 (Pages, Numbers, Keynote)

    – OpenOffice / LibreOffice 文档 (Text, Spreadsheet, Presentation, Drawing)

    – 脚本 (Shell, Python, Perl, Ruby, etc.)

    – 以及许多其他类型文件

    系统版本要求:OS X 10.10 或更高

    下载地址:https://www.pipipan.com/fs/1855249-207351856

    https://pan.baidu.com/s/1jI01Df4

     

  • 将js、css和图片缓存写入到localStorage中

    js css 图片 前端 缓存

    文件下载:localFile.js

    我们可以把js、css和一些雪碧图片等等公共资源缓存在本地客户端中,虽然可以利用nginx来实现,如果能使用前端来使用无疑更是高效快捷为服务器减轻负担。

     

    引入:

    <script src="js/localFile.js" version=12></script>  //修改版本可以清除缓存

     

    加载css:

    <script>loadCss("style.css")</script>

     

    加载项目js:

    <script>eval(loadJs("js/jquery.js"));</script>

     

    加载图片:

    <img lsrc="img/top.png" src="" onerror="loadImg(this)" class="top" >

     

    首次加载页面js css img同样也会去服务器请求资源,但是第二次在加载就从本地中快速加载了。

     

    原理:

    js和css都是通过ajax同步的方法把数据写入到localStorage,又使用同步的方法把数据返回给前端,
    使用同步的方法是为了保证执行的顺序;
    img也是使用ajax去请求把数据写入到localStorage中,但使用的是异步的方法。

     

    来源地址:http://www.jianshu.com/p/601693d22076

    参考:http://blog.csdn.net/a497785609/article/details/48321405

     

    注意:经过测试存在以下bug

    1,没有对低版本的浏览器做localStorage判断,如IE

    2,在IE浏览器中js、css加载正常但是图片无法加载出来。

    本人会在后面把两个bug,待续…

     

     

  • TCP/IP协议

    经常会有人问起什么是TCP协议、什么是http协议又或者什么是UDP协议。其实这样单个问起来就算单个回答你们也不会理解的,这个都要去全面解释一下才行。

    以上的那些问题,但是回答的人总会有人扯到TCP/IP协议干嘛?来看看这图:

    TCP/IP协议是一个协议簇。里面包括很多协议的。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。

    (TCP/IP是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。)

    上面那段话我用通俗的话来解释就是:2台或者2台以上的电子设备需要进行数据通信,那么就要遵守一个统一规则就是TCP/IP规则,不然大家都会乱套。这个规则里面又分了4个不同任务执行,直到把数据完整的传送到另一台设备上。

     

    下图是两个电子设备通讯的流程图:

    每个应用层之间的工作关系:总而言之,发送数据时需要自上而下,层层封装。接收数据时需要自下而上,层层拆封。

     


    TCP

    以上的图解和说明都是总体、大概的解释工作流程而已,说到底不管是FTP协议还是HTTP协议都要用到TCP协议和IP,这里就解释一下:

    TCP协议:为了将数据完整并可靠的传给对方,就使用 TCP协议。在此之间就要建立可靠的连接,那么就要进行3次对话:TCP三次握手过程

    tcp为了把大数据传给对方,所以要把数据切割为一点点进行传送,这样才能保证完整。

    1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
    主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我. (A对B说,我要向你发东西了,提前打个招呼)

    2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
    我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我,(B对A说,好你发吧,我准备好了)

    3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:”我已收到回复,我现在要开始传输实际数据了
    这样3次握手就完成了,主机A和主机B 就可以传输数据了.(A对B说,我现在开始发)

    3次握手的特点
    没有应用层的数据
    SYN这个标志位只有在TCP建产连接时才会被置1
    握手完成后SYN标志位被置0

     

     

    TCP建立连接要进行3次握手,而断开连接要进行4次

    A:数据传完了,可以停止吗?

    B:消息收到,但是我还没有准备好,请稍等!

    B:好了,可以停止了。

    A:好的,过一会儿没有消息我就关闭啦。

     

    1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
    2  主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
    3 由B 端再提出反方向的关闭请求,将FIN置1
    4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
    由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端
    和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础

     

    ACK : TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段
    都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
    SYN : 同步序列号,TCP建立连接时将这个位置1
    FIN : 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1

     

    UDP

    简单说下即可:UDP是一个非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去,传输数据快,但数据容易丢失。

    我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

     

    TCP与UDP区别

    TCP UDP
    是否连接 面向连接 面向非连接
    传输可靠性 可靠的 不可靠的
    应用场合 传输大量的数据 少量数据
    速度

     

     

    IP协议

    作用是为了将数据在茫茫人海中准确的传送给对方,其中要依赖IP地址和MAC地址(我们的网卡地址)

     

    参考文章:

    http://www.cnblogs.com/roverliang/p/5176456.html

    http://blog.csdn.net/u014682691/article/details/52061646

     

  • python笔记

    0,执行python

    python hello.py

    或者

    //hello.py
    #!/usr/bin/env python //在要执行的文件最前面加上,这样可以省去写python
    # -*- coding: utf-8 -*- //不写这个输出的中文可能出现乱码
    ...代码
    
    chmod a+x hello.py //给执行的权限
    ./hello.py //直接执行不需要在前面加python
    

     

    1,变量 跟js一样

     

    2,运算符
    整数和整数进行运算时只能取整,例如:
    3/2 = 1

    如果想保留小数那么就:
    3.0/2=1.5
    3.0//2=1

    平方
    3**2=9

     

    3,类型(python可以根据值来定义类型)
    整数int -2,147,483,648到2,147,483,647
    例如:num=123123 //默认int,如果长度超过int,类型就会自动变为long类型

     

    浮点数float
    例如:num=1.0

     

    字符串,例如
    str=’abcde’

     

    布尔类型
    True False (在进行条件判断时,首字母一定要大写)

     

    字符串的属性和方法
    str=’abcde’
    [] //获取字符串指定内容
    len() //返回长度
    + //拼接
    * //重复几次
    in //判断是否在字符串中,返回布尔值
    max() //返回最大值
    min()
    cmp() //字符串之间比较,返回值有1,-1,0

     

    注意:当我们声明一个变量str=’123’即使改变了值为str=’111′,其实也是重新开辟了一个人内存空间,也就是说
    我们并没有修改之前的值,只是另外开启了一个新的内存空间。

     

     

    4,元组(类似数组)
    t=() //空元组
    t1=(1,) //只有一个元素的元组,必须加逗号
    t2=(‘aa’,123) //一般元组
    t2[0] //获取元组第一个元素
    a,b=(‘aa’,123) //将元组内容对应声明给一个变量
    元组一旦创建了就不能修改,否则报错

     

    5,列表 (类似数组)
    t1=[1] //只有一个元素的元组
    t1[0] //获取列表第一个元素
    t1.append(‘hello’) //在末尾添加一个元素为hello
    t1.remove(‘hello’) //删除指定内容
    del(t1[0]) //删除t1第一个元素
    列表里面的元素是可以修改的。

     

    6,字典 (类似对象)
    obj={‘name’:’chen’}
    obj[‘name’] //取值
    obj[‘name’]=’ge’ //修改
    obj[‘age’]=11 //添加额外索引值(不一定添加到末尾)
    del(obj[‘name’]) //删除指定索引
    obj.pop(‘name’) //删除指定索引,返回删除的值
    obj.clear() //删除obj里面所有内容

    字典(既是对象)有自己的方法:
    //清除字典所有内容
    obj.clear()

    //取值,如果值不存在返回自定义的内容
    obj.get(5,’自定义内容’)

    //返回字典的全部索引值,以列表类型返回
    obj.keys()

    //返回字典所有值,以列表类型返回
    obj.values()

     

     

     

    7,语法

    *python的语法没有花括号{}来区分代码块,所以用缩进的形式进行区分。类似jade模板一样。
    连接符号是+

     

     

    8,逻辑运算符

    and or not
    类似js的
    && || !

     

    9,条件语句
    if else

    if True:
    print 1
    else:
    print 2

     

    if 1==1:

    elif 2==2:

    else:

     

    10,遍历

    for x in “abcd”:
    print x+”1″ //循环4次

     

    for x in [0,1,2,3]:
    print x+”1″ //循环4次

     

    range(5) //[0,1,2,3,4]
    range(1,6) //[1,2,3,4,5]
    range(1,6,2)//[1,3,5]

     

    for x in range(100):
    print x+”1″ //循环100次

     

    (类似js的for(){}语法)
    x=0
    while x<10:
    print “1”
    x+=1

     

     

    11,函数

    def run(a,b):
    c=a+b
    print c

    run(1,1)

     

     

    12,作用域(跟js的理解一样,重点是如何让一个局部变量变为全局变量)

    //声明
    def run():
    global x
    x=123

     

    //调用
    run()

     

     

    13,匿名函数lambda,(作用是让函数变的简单,类似于js的三元表达式是if else的简写)

    g=lambda x:1+x
    print g(3) // 4

     

    相当于

     

    def g(x):
    return x+1
    print g(3) // 4

     

     

    14,python自带函数,(有很多,这里我们推荐常用的)

    http://www.jb51.net/article/60896.htm

     

     

    15,模块

    //被调用包 a.py
    def g(x):
    return x+1

    if __name__==’__main__’:
    print ‘ziji’ //a.py调用自己时触发
    elif __name__==’a’:
    print ‘zhiyou_a’ //只有引入a.py时被触发

     

    //调用包 b.py
    import a
    print a.g(3)

     

    如果希望被指定的包调用那么就利用__name__做判断

     

    16,包,多个模块存放在一个文件夹下就组成一个包

    在一个文件夹根目录下创建一个名字为__init__.py

     

    1,在一个文件夹名为bao下创建一个文件名为__init__.py的文件

    2,在bao文件夹下创建一个a.py内容是
    def g(x):
    return x+1

    3,调用包里面的a.py里面的g函数

    import bao.a //包名就是文件夹名
    print bao.a.go(2)

     

    关于导入包的方式:
    1,import 包/模块

    2, import 包/模块 as 自定义名

    3, from 包/模块 import 模块/函数名 (推荐使用)

     

    17,正则

     

     

     

    18,本地文件读、写操作

    r 只读
    r+ 读写,相当于追加内容。注意,必须打开文件后在读取内容后在写入,这样才是追加效果。如果打开后就直接写入就是覆盖原来内容效果了。
    w 写入,先删除文件后写入,如果没文件就创建 (会删除文件慎用)
    w+ 读写,先删除文件后写入,如果没文件就创建(会删除文件慎用)

     

    fo=open(‘/root/1.txt’,’r+’) //打开文件
    fo.read() //查看内容
    fo.write(“/n hahahah”) //追加内容
    fo.close() //看完后关闭

    python

     

     

     

  • 老马哥的教导(非技术文章)

    不同场合,你的行为举止都能体现出各人修养

    1,礼貌握手

    长辈先伸手

    领导先伸手

    女人先伸手(只能握指尖)

     

    2,做客时长

    话题聊的差不多,感觉无话可说就应该适当离开。时间过长屋主陪笑脸也会厌烦。

     

    3,座位

    不能到别人家就随便坐,要听主人命令。

     

    4,饭桌

    晚辈或下属要主动帮忙洗碗筷、递纸巾,盛汤、主动给前辈和领导敬酒。