近作

文章

2022-10-18

Base: An Acid Alternative - 摘要

技术

如果你的 Web 应用依赖数据持久化,那么系统的瓶颈大概率是数据存储。那么我们需要对应用进行扩展。 应用的扩展有两种方式,垂直扩展和水平扩展。最简单的方式是垂直扩展 - 把应用迁移到性能更好的机器上。但它有一些限制,最明显的限制是单机的性能是有限制的。同时垂直扩展比较费钱,因为需要重新购买新机器来替换老的机器。还有就是它带来的 vendor lock-in。

阅读全文
2015-01-12

JavaScript原型链的读和写的内在行为不一致

JavaScript技术

读写涉及原型链的对象成员微妙的不同 对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象A,假设它的原型对象是B,B的原型对象是null。如果我们需要读取A对象的name属性值,那么JS会优先在A中查找,如果找到了name属性那么就返回;如果A中没有name属性,那么就到原型B中查找name,如果找到了就返回;如果原型B中也没有找到,由于

阅读全文
2014-12-30

2014阅读总结

呓语生活

技术类 都是关于Python和JavaScript的。这里暂且略去不表。 非技术类 重读《老人与海》 果然还是喜欢海明威。桑提亚哥、非洲的沙滩、梦中的狮子。孤独,顽强、不屈。“But man is not made for defeat,” he said.“A man can be destroyed but not defeated.” 《禅与摩托车维修

阅读全文
2014-12-21

基于AngularJS构建的项目框架[五]

JavaScript技术

Karma和Jasmine自动化单元测试 单元测试是我们开发过程中必不可少的一部分。在本项目中,使用Jasmine来写单元测试,Karma跑单元测试,Grunt启动Karma任务。 Jasmine Jasmine是一个Behavior-Driven的测试框架。说到Behavior-Driven,感觉这是在测试领域一个挺火的概念。BDD(Behavior-Dr

阅读全文
2014-12-16

基于AngularJS构建的项目框架[四]

JavaScript技术

RequireJS介绍 异步模块定义(AMD) 谈起RequireJS,你无法绕过提及JavaScript模块是什么,以及AMD是什么。 JavaScript模块只是遵循SRP(Single Responsibility Principle单一职责原则)的代码段,它暴露了一个公开的API。在现今JavaScript开发中,你可以在模块中封装许多功能,而且在大

阅读全文
2014-12-08

基于AngularJS构建的项目框架[三]

JavaScript技术

配置Copy Task 项目根目录下的Gruntfile.js,我们并没有直接在此文件中对各个Task进行配置,而是在单独的文件中进行配置。如果项目比较大或者希望复用Task,这样做比较好。当然如果项目比较简单,则可以直接在Gruntfile.js中直接配置了。 在Gruntfile.js中LoadTask grunt.loadTasks('grunt-co

阅读全文
2014-12-05

基于AngularJS构建的项目框架[二]

JavaScript技术

加载外部定义的Grunt Task 对于大多数的项目来说,所有的Task都定义在Gruntfile中。但对于一些比较大的项目,或者我们希望把某些Task作为复用的组件,那么我们可以把Task的配置文件写在另外的JavaScript文件中,Grunt可以从外部的这些文件加载。 相关的API为: grunt.task.loadTasks(tasksPath) 也

阅读全文
2014-12-02

基于AngularJS构建的项目框架[一]

JavaScript技术

项目的文件组织结构 Grunt 首先,我们项目用Grunt来实现项目构建的自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。像压缩、单元测试、linting等这些功能是通过Grunt的插件实现的。Grunt和Grunt的插件都是 Node.js 的包,通过npm安

阅读全文
2014-11-21

在AngularJS项目中使用RequireJS

JavaScript技术

在写大型Javascript应用程序的时候,我们往往把不同的模块代码放到不同的文件中。这样提高了代码的可维护性,但是,把这些Javascript文件有序并且一个不落地放到<script> tag中去就比较烦人了,特别是Javascript文件很多的时候。在大型的AngularJS的大型应用中当然也存在这种问题。幸运的是,我们有工具来管理Javas

阅读全文
2014-11-10

Python装饰器 - 九步入门

技术

第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print("myfunc() called.") myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 # -*- coding:gbk -*- '''示例

阅读全文
2014-10-21

Python中的__future__模块

技术

我们经常在Python的项目中有如下语句: from __future__ import unicode_literals, print_function, division __future__模块中包含了Python未来将会支持的一些语言特性,通过import可以把新版本的特性引入到老版本中。 feature optional in mandatory

阅读全文
2014-10-15

Python中变量作用域特有的问题 - 全局变量

Python技术

变量在使用之前未定义 由于python变量的动态性,变量在赋值时会自动定义。 与其它语言一样,全局变量在函数中可直接使用,不需特意声明。然而在函数中对一与全局变量同名的变量赋值时,默认创建的,却是一局部变量。这在某些情况上,会使python解析器都出现一些困扰。 a = 123 def function_test(): print a a = 456 pri

阅读全文
2014-10-11

[转载] Javascript之构造函数

JavaScript技术

一. 构造函数 如果函数或者方法的调用之前加上 new 关键字 , 他就构成了构造函数的调用 ., 构造函数的调用和普通函数 , 方法的调用在 实参处理 , 调用上下文和返回值 方面有不同 (1). 实参处理不同 凡是没有 形参 的构造函数调用都可以省略圆括号 例子 1-1: [javascript][/javascript] view plain copy

阅读全文
2014-07-09

[译]Python中的Types和Objects

Python技术

1. 关于本篇文章 解释了Python中的新风格objects: <type 'type'>和<type 'object'>是什么。 用户自定义的类和实例之间、用户自定义的类和实例与内建类型之间是如何关联的。 元类(metaclasses)是什么。 新风格是指Python 2.2到Python 3.x之间。在这些版本间有一些特性发生了

阅读全文
2014-07-08

[转载] 深刻理解Python中的元类(metaclass)

Python技术

原文 在阅读本文之前,可以先看下我的另一篇博文《 Python中的Types和Objects 》,这样对深入理解本文有帮助。 译注:这是一篇在 Stack overflow 上很热的帖子。提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解。他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些

阅读全文
2014-07-04

[Python Cookbook] 在无须共享引用的条件下创建列表的列表

Python技术

1. 任务 你想创建一个多维度的列表,且同时避免隐式的引用共享。 2. 解决方案 使用列表推导。举个例子,创建一个5*10的全为0的阵列: multilist = [ [ 0 for col in range(5) ] for row in range(10) ] 3.讨论 当我们使用这种方式时,会遇到问题: >>> multi=[[0]*

阅读全文
2014-07-04

[Python Cookbook] 通过列表推导构建列表

技术

1. 任务 通过操作和处理一个序列(或其他的可迭代对象)中的元素来创建一个新的列表。 2. 解决方案 thenewlist = [ x + 23 for x in theoldlist if x > 5 ] 3. 讨论 优雅、清晰和务实,都是Python的核心价值观,列表推导说明了这三点是怎样和谐地统一起来的。事实上,当你直觉地考虑“改变某列表”时,列

阅读全文
2014-07-04

[Python Cookbook] 对象拷贝

Python技术

1. 前言 当给一个对象赋值(或者将其作为参数传递,或者作为结果返回时)时,Python(像Java一样)使用了一个指向源对象的引用,并不是真正的拷贝。其他一些语言则在每次赋值是都进行拷贝操作。Python从来不为赋值操作进行“隐式”的拷贝:要得到一个拷贝,必须明确地要求,需要的是拷贝。 2. 浅拷贝与深拷贝 浅拷贝: import copy new_lis

阅读全文
2014-06-18

Python中的单例模式

Python技术

1.使用decorator import sys import ConfigParser def singleton(cls): instances = {} def get_instance(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) re

阅读全文
2014-05-27

利用Python获取系统的进程信息

Python技术

目前我只探索了两种方法,一种是利用psutil(一个Python Package),另一种只针对Windows系统,利用它自带的tasklist命令。 一. 利用Psutil获取系统的 Running Process信息 注意我把Running特意用红色标出,这是提醒大家利用psutil只能获取当前系统正在运行的进程。如果是一个程序卡死了(Not Respo

阅读全文
2014-05-18

Git常用命令 - No Deep Shit!

SCM工具其他技术

Git工作流 你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录 ,它持有实际文件;第二个是 暂存区(Index) ,它像个缓存区域,临时保存你的改动;最后是 HEAD ,它指向你最后一次提交的结果。 更详细的一张图: 添加和提交 你可以提出更改(把它们添加到暂存区),使用如下命令: git add <filename> git

阅读全文
2014-05-17

负重深蹲的标准动作

健身生活

负重深蹲是练习腿部肌肉的王牌动作,除了能充分刺激腿部肌肉外,对身体的躯干也有强烈的刺激。 下面讲一下自己的经验: 挺胸直腰,背部挺直。记住在下蹲过程中一定要保持背部挺直,否则腰部很容易受伤。 双脚稍微成外八字,同时下蹲的时候膝盖外展的方向一双脚的方向一致。 上大重量最好佩戴腰带。 身体不要过度前倾。 膝盖尽量不超过膝盖。个人觉得这一点是你最后需要考虑的,毕竟

阅读全文