2015 年度总结

你学过的每一样东西,你遭受的每一次苦难,都会在你一生中的某个时候派上用场。—— 菲茨杰拉德

2015年度总结

1.翻译能够有稳定的一份收入。
2.想试的都会去试。吃过南京无数家好吃的店。茶馆,香花缇,牛排,第一次尝到刺身。
3.兼职,被欠了两个月的工资。所谓的成长空间都是骗人的,我只看得到薪水的诚意。
4.坚定了梦想的方向。深受附近的人激励。
5.偶尔会吐好看的烟圈。
6.试着办过一个并不成功的小活动,奖金被自己的直系学妹抽走,开心。

2015,是我一生中过得最慢也是最快的一年,是最痛苦也是最快乐的一年,收获最多也是失去最多的一年。

学长的谜题

首先在这里向所有支持过我的同学们鞠躬。

你们的每一次转发都给了我莫大的鼓励。

做这个活动的最初的想法就是:如果有一个难题,花一点时间解决它,得到灵魂与物质的共同奖励,这不是一种很好的方式吗?

最最一开始,就是无意间想到了一个很有趣的题目,想分享一下,为了增加关注度,然后就加了点奖金,然而发现效果并不理想。

我分析了一下这次活动失败的几个原因。

1.题目比较难。如果傻子都能做出来,那就与我的初衷相违背了。

2.奖金太少。穷学生只能拿三位数的资金做一个活动,因为做了很长的规划,初期想做成一周一次,因此第一次的预算并不多,这也是活动不够吸引人的原因。

3.每个人的时间都很珍贵,选择微博这个不是每个人都愿意花时间熟悉的平台也是一个失误。

活动很失败,但是结果很好。至少有一个抽到奖金的学妹为此开心。仅此,这个活动没有让我失望。

创业

因为兼职的原因,认识了很多创业未半或者刚刚起头的伙伴。映像最深的应该就是Easy叔了。

Easy,前新浪云平台产品主管。
ftqq.com

从一开始就关注着他的创业过程。从建立到风生水起,再到有点无奈的停止。

Easy是一个有情怀的程序员,至少在我心里是这样认为的。个人的经历绝对可以用成功来形容,在新浪任高位,拿高薪,有着让人仰慕的地位。

但满足现状的人的生活注定如一潭死水。

Jobdeer创建的目的其实很简单,为所有的程序员找到更好的工作。这类的项目很难成功,因为你不能从每个人身上汲取力量,筹集需要的东西。所以我很倾佩他。

创业圈子里有一句话,创业失败才是常态,99%的项目都活不到它被人们熟知的时候。当你跨出一步的时候,就要做好下一步跌倒的准备。

人如果没有,梦想,和咸鱼有什么区别。

在圣诞节里,衷心的祝愿那些在为自己梦想不断奋斗的人。

关于自己

三个月前的自己,明明碌碌无为,还不愿意承认自己没有理想,没有目标,用自己很忙的理由敷衍自己,忘掉自己喜欢的吉他,不知道自己想要成为一个改变世界的程序员梦想。

从未为这些梦想付出一分力量,因为很忙。

忙什么呢?

30秒可以看完的通知却非要赶着去参加一个班会。

明明不喜欢却不得不参加的讲座。

又有一份报告要写呢,自己写太难啦。

怎么办,到网上找点东西凑一下。

明天交作业,要赶紧抄完呢。

开着电脑为什么只能到很晚才能睡觉。

啊,好困,看完这部番明天又只能在课上补觉。

为什么手机像粘在手上拿不下来!

。。。

做完上面这些事情,四年后就能成为一个想要的自己吗!

会有一份规规矩矩的简历。

可能会有一份看起来安稳的工作。

或者会和暧昧的女生上同一所学校研究生。

也许还有一些看起来光鲜亮丽的荣誉。

只有自己知道,套着镣铐,才能在“人才”的流水线上缓缓前进。

感谢一些事情,让自己回归虚无,一切从0开始。

无数个日夜的辗转难眠 ,转眼成路人的点头之交 ,对父母的愧疚,微笑下的隐忍,看不清的未来。

人是有思想的芦苇。

脆弱的芦苇啊。

只有思考的人才是强大的,才是万物灵长,才能慢慢的在伟大的路上,披荆斩棘,支撑自己不断前行。

放弃思考的人与禽兽何异耳。

此禽兽与之前的我有何异。

没有文化知识,可以学习。没有血性和尊严,没有强大的内心,是永远无法弥补的。

要是一个人要靠一摞别人书写的材料来证明,岂不可笑!

##关于未来

明年的目标很简单,先要有可以糊口的技能。

然后按着自己的方向奋力前进就好。

人生最痛苦的,莫过于慢慢将自己归于平凡一类人的过程。

Docker说明:如何创建运行Memcached功能的Docker容器

Docker说明:如何创建运行Memcached功能的Docker容器

Dec 16, 2013 Docker, Server Optimization Ubuntu

简介

对大多数网络应用来说,CPU很少成为HTTP请求丢失或者网络堵塞的元凶。更常见的情况是,设计的一个没有缓存层参与的工程,占用了所有的后端数据存储资源(例如你选择的数据库)。

Memcached——无需再多做介绍——可以极大的提升应用的栈部署性能,并且不需要对可用的资源进行任何修改(它能帮你用尽每一滴资源)。

在这篇DigitalOcean的文章中,记得特别注意主机运行了多个网络应用(比如多个WordPress实例,Python应用等),我们准备创建一个Docker镜像,可以快速的开始运行(一经要求)Memcached容器,并且可以独立运行。这些容器可以帮助被托管的应用程序变得更好更快,并保持一个安全的环境。

术语表

1. Docker简介

2. Memcached简介

3. 在Ubuntu上安装Docker

4. 基础Docker命令

1. Running the docker daemon and CLI Usage

2. docker命令

5. 从创建Memcached镜像开始

1. 快速回顾: 什么是Dockerfile?

2. Dockerfile命令回顾

3. 创建一个Dockerfile

4. Final Dockerfile

5. 为Memcached容器创建Docker镜像

6. 运行Dockerised化的Memcached容器

1. 创建一个安装Memcached的容器

2. 限制Memcached容器的内存大小

3. 测试Memcached容器

Docker简介

Docker项目提供的高级工具,支持协同工作,是在一些Linux内核功能的基础上建立的。目的是为了帮助开发者和系统管理员连接应用程序——联合所有的依赖关系——然后让它们能够跨系统、跨主机运行,免去了许多令人头疼的问题。

Docker为应用程序创建安全,基于LXC(即Linux容器)的环境,称为Docker容器。这些使用Docker镜像创建的容器,既可以通过人工执行命令,也可以通过Dockerfile自动创建。

Note:了解更多关于Docker和它的的组件(比如docker daemon, CLI, images等)的信息,参见我们对这个项目的介绍文章:docker Explained: Getting Started

Memcached简介

Memcached是一个分布式,开源的数据存储引擎。它被设计用来在RAM(替换了低速的传统硬盘)中存储特定种类的数据,供应用程序进行快速检索。减少了处理申请所花费的时间,通过减少查询的次数来抵消沉重缓慢的数据集或者API,比如传统的数据库(MySQL等)。

通过引进一个灵巧的,精心设计并经过最优化的缓存机制,它变得可以处理更大的请求量,执行更多的程序。这是Memcached最重要的应用实例,因为它也是这样缓存其他应用或内容的。

可以深度依赖,并被用在网站或者其他应用的生产中,Memcached已经成为一个即时提升性能的工具,而不必使用更好的硬件条件(比如更多的服务器或者服务资源)。

Memcached的工作方式是将关键词和他们对应的值(最大能达到1MB)保存在一个关联矩阵中(比如哈希表),延展和分布在大量的虚拟服务器中。

在Ubuntu上安装Docker(最新版)

想在你的VPS上开始使用Docker项目,你可以使用DigitalOcean的Ubuntu 13.04版本的Docker镜像,或者自行安装。在这一节中,我们会快速的复习Docker 0.7.1的基础安装方法。

Ubuntu安装操作指南

更新你的droplet

sudo aptitude    update
sudo aptitude -y upgrade

确保aufs支持功能可用

sudo aptitude install linux-image-extra-`uname -r`

为apt-key添加Docker仓库key进行包验证

sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"

向aptitude源中添加Docker库

sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"

更新拥有新特性的库:

sudo aptitude    update

最后,下载安装Docker

sudo aptitude install lxc-docker

Ubuntu默认设置的防火墙(UFW:Uncomplicated Firewall)默认禁止了所有转发流量,然而Docker需要这个功能。

启用UFW的转发功能:

使用nano文本编辑器更改UFW的配置

sudo nano /etc/default/ufw

往下翻,找到以DEFAULTFORWARDPOLICY开头的一行,

将:

DEFAULT_FORWARD_POLICY="DROP"

换成:

DEFAULT_FORWARD_POLICY="ACCEPT"

按下CTRL+X,然后按Y同意保存并关闭。

最后重启UFW:

sudo ufw reload

基本的Docker命令

在我们开始使用Docker之前,先快速的回顾的它的命令,温习一下我们的第一篇文章( Getting Started)中所学的知识吧。

运行Docker后台进程和CLI用量

在安装过程中,Docker应该有后台进程在运行,来随时接收Docker CLI发送的命令。在特定的情况下可能需要手动重启Docker,那就使用下面的命令。

运行Dcoker后台进程

sudo docker -d &

Docker CLI 用量

sudo docker [option] [command] [arguments]

Note:Docker需要sudo权限来工作。

命令列表

目前版本(0.7.1)的Docker可用命令总览。

attach

连接到一个正在运行的可用容器

build

从Dockerfile建立一个容器

commit

给一个容器的改变创建一个新镜像

cp

从容器的文件系统中复制文件/文件夹到主机路径中

diff

检查一个容器的文件系统的变更

events

获取服务器中的实时任务

export

将容器中的内容保存为一个tar归档

history

显示一个镜像的历史记录

images

列出所有镜像

import

使用一个tarball中的内容新建一个文件系统

info

显示系统信息

insert

在镜像中插入一个文件

inspect

返回容器的低等级信息

kill

结束一个运行中的容器

load

从一个tar归档中载入一个镜像

login

注册或者登陆到Docker仓库服务器

logs

取出容器的日志文件

port

查找被转换成私有接口的公有接口

ps

列出所有容器

pull

从Docker库服务器中拉出一个镜像或者仓库

push

向Docker库服务器推送一个镜像或者仓库

restart

重启一个容器

rm

移除一个或多个容器

rmi

移除一个或多个镜像

run

在一个新容器中运行命令

save

将一个镜像保存到tar归档

search

在Docker主页中搜索一个镜像

start

启动一个停止的容器

stop

停止一个正在运行的容器

tag

标记一个进入仓库的镜像

top

查看一个容器中运行的进程

version

显示Docker的版本信息

开始创建Memcached镜像

基于我们之前学习的Docker系列文章里面的知识,我们直接深入到创建Dockerfile来实现自动构建安装Mamcached功能的镜像(将可以用来运行沙盒化的Memcached实例)。

快速回顾:什么是Dockerfile?

Dockerfile是包含可执行的声明的命令的脚本,将以给定的顺序执行,来让Docker自动的创建一个新的Docker镜像。这给部署工作带来了极大的帮助。

这些文件(Dockerfile)使用FROM命令,总是以对基础镜像的描述开头。从那开始,构建进程开始运行,向主机提交(保存镜像的状态)的每一步的操作形成了最终的镜像。

用法:

# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t memcached_img . 

Note:了解更多有关Dockerfile的知识,参见我们的文章:Docker Explained: Using Dockerfiles to Automate Building of Images.

##Dockerfile 命令概览
Add

从主机复制一个文件到容器中

CMD

设置默认被执行的命令,或者传递到ENTRYPOINT

ENTRYPOINT

设置容器中的默认ENTRYPOINT应用

ENV

设置环境变量(例如”key = value”)

EXPOSE

对外展示一个端口

FROM

设置使用的基础镜像

MAINTAINER

设置Dockerfile的作者/拥有者数据

RUN

运行一个命令,并提交运行完成后的(容器)镜像

USER

设置运行容器的用户

VOLUME

从主机安装一个目录到容器

WORKDIR

设置要执行CMD指令的目录

创建一个Dockerfile

因为Dockerfile由纯文本组成,所以创建一个变换,来让你使用最爱的文本编辑器,写下创建一个镜像需要Docker执行的命令。在你开始写这个文件后,继续在下面添加内容(一条接着一条),直到保存得到最终的结果。

Note:你会在本节的最后看到最终的Dockerfile是什么样子。

现在使用nano文本编辑器创建一个新的空Dockerfile:

nano Dockerfile

我们需要先后列出所有的指令。然而,一切都从一个(设置了FROM指令的)基础镜像上开始。

首先让我们定义一下Dockerfile的目标,并声明需要使用的基础镜像。

############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################

# Set the base image to use to Ubuntu
FROM ubuntu

# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name

在这个声明部分结束后,我们就可以开始列出Memcached的安装命令。

# Update the default application repository sources list
RUN apt-get update

# Install Memcached
RUN apt-get install -y memcached

设置默认对外开放的容器端口:

# Port to expose (default: 11211)
EXPOSE 11211

设置默认的执行命令和入口(例如Memcached进程):

# Default Memcached run command arguments
CMD ["-u", "root", "-m", "128"]

# Set the user to run Memcached daemon
USER daemon

# Set the entrypoint to memcached binary
ENTRYPOINT memcached

最终的Dockfile

############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################

# Set the base image to use to Ubuntu
FROM ubuntu

# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name

# Update the default application repository sources list
RUN apt-get update

# Install Memcached
RUN apt-get install -y memcached

# Port to expose (default: 11211)
EXPOSE 11211

# Default Memcached run command arguments
CMD ["-m", "128"]

# Set the user to run Memcached daemon
USER daemon

# Set the entrypoint to memcached binary
ENTRYPOINT memcached

全部写完之后,按下CTRL+X,然后按Y同意保存并关闭。

通过使用这个Dockerfile,我们已经做好了开始使用Dockerised化的Memcached容器的准备!

为Memcached容器创建镜像

我们现在可以创建第一个Memcached镜像,参照Dockerfile一节中的用法说明。

运行命令,创建一个标记为“memcached_img”的镜像:

sudo docker build -t memcached_img .

Note:不要遗漏了最后的 . ,Docker需要它来找到Dockerfile。

运行dockerised化的Memcached容器

使用下面的命令来创建一个新容器,可以根据你的需求修改这个例子。

# Example: sudo docker run -name [container name] -p [port to access:port exposed] -i -t [memcached image name]
sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img

现在有了一个名为“memcachedins”的Dockers容器,在端口45001可用,使用我们之前建立的标记为“memcachedimg”的镜像。

限制Memcached容器的内存

如果想要限制一个Docker容器进程可以使用的内存量,只要设置-m [memory amount]并标上限制就可以了。

运行一个内存限制为256MB的容器:

# Example: sudo docker run -name [name] -m [Memory (int)][memory unit (b, k, m or g)] -d (to run not to attach) -p (to set access and expose ports) [image ID]
sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img

如果想要确认内存限制,你可以检查这个容器:

# Example: docker inspect [container ID] | grep Memory
sudo docker inspect memcached_ins | grep Memory

Note:上面的命令会抓取检查输出中的内存相关信息。如果想要查看关于你的容器的所有相关信息,选择sudo docker inspect [container ID]

测试Memcached容器

有许多方法来尝试你新建的Memcached容器。我们使用一个简单的Python CLI程序来测试。你可以让程序使用附加组件,框架或者库立刻投入生产。

确保你的主机拥有为Python/Memcached准备的必要库文件:

sudo apt-get update && sudo apt-get -y upgrade 
sudo apt-get install -y python-pip
pip install python-memcached

现在使用nano创建一个简单的Python脚本:

nano cache.py

把下面的内容复制粘贴进去:

# Import python-memcache and sys for arguments
import memcache
import sys

# Set address to access the Memcached instance
addr = 'localhost'

# Get number of arguments
# Expected format: python cache.py [memcached port] [key] [value]
len_argv = len(sys.argv)

# At least the port number and a key must be supplied
if len_argv < 3:
    sys.exit("Not enough arguments.")

# Port is supplied and a key is supplied - let's connect!
port  = sys.argv[1]
cache = memcache.Client(["{0}:{1}".format(addr, port)])

# Get the key
key   = str(sys.argv[2])

# If a value is also supplied, set the key-value pair
if len_argv == 4:

    value = str(sys.argv[3])    
    cache.set(key, value)

    print "Value for {0} set!".format(key)

# If a value is not supplied, return the value for the key
else:

    value = cache.get(key)

    print "Value for {0} is {1}.".format(key, value)

保存并退出。

在主机上使用上面的脚本,测试Docker的Memcached实例:

# Example: python cache.py [port] [key] [value]
python cache.py 45001 my_test_key test_value

# Return: Value for my_test_key set

# See if the key is set:
python cache.py 45001 my_test_key

# Return: Value for my_test_key is test_value.

安装和使用Docker的完整说明,参见docker.io上的docker documentation.

能让你的网站变得与众不同的最佳实践

by Guest · June 16, 2015

Best Practices to Design a Website

如果你打算设计一个网站,了解这些最佳的实践很重要,因为你肯定想让你的自适应网站拥有令人钦佩的功能和适应性。

能让你的网站变得与众不同的最佳实践

专业的开发者如何成为高手?对大多数网页设计者来说,这是一个具有普遍性的问题。答案是:专业的设计师一直坚持这些最佳实践,来让他们的设计变得与众不同。

页面布局

如果网页在笔记本电脑上有三个连续的分段,那么在平板上可能就被划分成两段,手机上就可能只有一段了——这取决于设备的宽度。平板或智能手机上展示的用户界面显示可能是一对内容,然后第三段就被卷曲到下一行了。

笔记:页面布局的主要目标是在实践工作开始之前,为不同的设备准备不同的布局。

图片的大小和质量

图片最好要足够大和足够高的分辨率。因为如果分辨率不够,图片会失真,所以将不适合在宽屏上显示。因此必须使用合适的图片。

笔记:如果你是一个web开发者,那你可以通过使用不同的框架让图片可变,来自动适应不同的设备。如果你打算手动编写代码,你可以使用多媒体询问,决定图片的大小。

文字的大小和风格

70像素的标题和粗重的文本,在家用电脑或者笔记本电脑的屏幕上看起来的效果都会是非常棒的。但在平板或者手机上就不是很合适了。同样,文字的附加缩放或者倾斜也要考虑到正在使用的设备。

合适的导航

在大屏幕上,我们有一个浮起来的导航菜单。但在小屏幕上,菜单会是一个小标志,一旦被点击,它就会垂直出现。这可以通过利用引导程序的高亮导航条来执行,许多的额外插件也可用。

内容的展示

在大屏幕上,有足够的空间让我们展示更多的内容。然而在小屏幕上,比如平板或手机,不会有足够的空间来展示所有的内容。因此,我们要决定哪些内容应该被展示或者被覆盖。

为执行驱动设计均衡的内容

不仅网页设计师要尽早的参与进来,网页设计师(原文的错误?)也要参与。手机的性能是被传统的电脑碾压的(译者注:现在并不一定是。),所以页面布局会在智能手机上显著的恶化。因此,调整手机对执行的内容承载力很关键。

总结:这些最佳的实践都应该被仔细研究,并在你设计任何网页应用之前挑选好。这些都应该在重要性上占有一席之地,因为弄清楚这些不同的加固小技巧,能相应的有助于描绘网页的轮廓,设计更好的UI和更高效的开发者。

容器,让你的非开发人员也能如虎添翼

显而易见,使用容器(Containers)可以给开发团队带来极大便利。与此同时,它们对包括开发者关系、市场营销以及技术文档的写作等在内的其它工作也非常有帮助。

能够在任何平台上部署任何版本的应用程序,意味着技术作者可以轻松完成新功能的写作,营销团队可以迅速熟悉和掌握新的产品功能,而开发者关系团队则可以自信地展示应用程序的新功能。

众所周知,这个世界每时每刻都在发明出新产品。因此确保迅速找到产品受众变得前所未有的重要。他们会使用你的产品,爱上它,并且心甘情愿为它宣传。这正是开发团队以外的人所负责的工作。所以,应当尽可能帮助他们完成这些工作。

 

开始了解容器

在过去,在本地计算机启动和运行特定版本的应用程序可能花费整整半天的时间。因为应用程序通常有很多的依赖关系,对运行环境有着各种各样的要求。让开发团队完成这些可能已经足够棘手,然而如果期待开发团队以外的人来完成,更像是天方夜谭。

正如在前一个帖子中提到的,容器可以轻松地自动完成这一切。在本地运行任何版本的应用程序非常容易,就如同克隆库的右支并运行它一样。在每台个人电脑上放置一份拷贝,使得它适用于测试、QA、记录和现场演示。

使用容器(而不是在一个共享平台上)意味着所有人可以独立的工作,随时随地,不会给开发团队带来任何启动开发环境的额外负担。

这将提高与应用程序相关的所有团队的工作效率和独立性,带来更短的QA周期,更快的文档写作,更迅速的市场销售等等。

 

为开发者宣传员准备的容器

开发者宣传正在改变技术的面貌。有时候,他们在你身后默默的敲代码,有时候他们会在发布会上给潜在客户展示应用程序,解释应用程序的工作细节。

开发者宣传员必须亲自了解应用程序的内部并且真正理解了它。在过去,这意味着复杂的本地设置,自定义测试版本的应用程序,繁琐的步骤,各种延迟以及给开发团队带来的麻烦。

如果使用了容器,并将它部署到了Deis 的Paas(Platform-as-a-Service,平台即服务)上,那么就可以在本地设备上完美的重建产品运行环境。完成它几乎没有麻烦,并且完全没有和虚拟机相关的资源开销。

想象一下:Sarah是你的开发关系团队内的一员。此时她正在一个发布会的展板前。当她在等待下一个介绍开始的时候,她和一个从来没有使用过容器的人聊了起来。当他们交谈的时候,Sarah启动了一个定制的,随时可以使用的白标程序。受此启发,她在介绍中通过给观众的机器上安装Docker,向他们展示了如何下载应用程序的镜像。

在展板之后,Sarah向一个对她公司的容器技术印象深刻继续交谈。观众们想要看某个特定的功能,而Sarah的在她的分支容器中就有这个功能。她启动了这个容器,向客户实时展示了仍在开发中的应用程序功能如何工作。客户对此印象深刻,同意与销售团队进行后续联系。

 

容器是如何帮助技术文档的书写的

使用Deis的容器可以给技术文档写作团队带来极大帮助。

技术文档的作者应当能够快速启动任意版本的软件并让它立即运行,就如同在实际生产中那样。

程序有可能同时有着多个活跃的版本,需要在同一时间给予支持。可能是当前主线及其功能与漏洞修复分支。也可能是先前两个重要版本及其功能与漏洞修复分支。再加之dev,alpha或者beta版本的程序。

想象一下: Elizabeth是你的一位技术文档作者,今天晚上是她完成一个调试问题的补丁的文档写作的最后期限。不用等待一个稳定的QA环境,她可以在短短几分钟之内获得这个软件,并且不需要任何人的帮助。容器还缩小了这个补丁影响的功能范围,给她更多时间来检查软件的客户端和后端行为。

容器使得这个过程可以在眨眼之间完成。

同时,因为在开发时使用的容器也可以用于产品,所以任何设备只要支持容器技术,就可以确保应用程序的设置和功能在不同的平台、语言、环境或者操作系统下是一致的。这在以前是完全不可能做到。

使用容器也可以轻松的回滚到一个稳定的构建,也可以通过实时并行观察同一个程序的多个实例来比较它们。

容器也可以让技术作者如Elizabeth迅速起草入门指南,面向客户的解决方案,在内部扩展应用程序的知识,而不是依托于一个社区的常见问题版块。

 

采用容器的市场营销

产品能够成功的至关重要的两个因素包括迅速行动和获取即时信息。

市场营销团队经常需要等待获取测试新产品的环境,有时候甚至是直接客户或者潜在客户。如果构建被推回或者共享环境经常出现混乱,会导致消极情绪的蔓延。更糟糕的是,为特定版本的程序启动一个共享环境可能会涉及一大摞繁琐的步骤,给已经筋疲力尽的开发团队带来更多的痛苦。

容器允许营销团队的每个人启动任何版本的应用程序,无论何时何地,完美解决了这个问题。

对负责市场和公共关系的人来说,这方便了他们尝试新功能,准备市场相关材料,以及大力宣传产品的新版本。容器让营销团队可以亲自动手来获得应用程序在不同平台完整生命周期的资料,为幕后博客的写作提供独特机遇,在发布会上大力推荐等等。

因为容器让你在本地复制了产品,所以即使没有网络连接,远程工作依然可以继续。

容器也可以给营销带来其它方面的便利。如果你正在主持一个开源项目(亦或向客户提供源代码),想要吸引更多的贡献的代码,容器可以带来帮助。如果人们在自己的电脑上运行这个程序只花了几分钟,而不是几个小时,他们会更加乐于分享代码。

 

小结

使用容器使得所有非开发团队的人的工作和合作变的更加容易。

如果应用程序使用了容器并且运行在Deis的PaaS中,那么让完整程序运行在本地也是非常容易的。这使得非开发团队中的所有人和开发团队的合作也变得更加容易。

不需要再花时间担心共享运行环境,繁琐的步骤,以及给开发团队带来麻烦——把这些时间花在熟悉应用程序,完成技术文档,演示产品,让重要的人获得产品。

转载请注明出处和原文出处

需要译稿请联系QQ:545870054
或者邮件:fan_xq@live.com

化学元素周期表的英文全称 Periodic Table of the Elements

 

缩写

PTE

拉丁文

英文

1

H

Hydrogenium

Hydrogen

2

He

Helium

Helium

3

Li

Lithum

Lithum

4

Be

Beryllium

Beryllium

5

B

Borium

Boron

6

C

Carbonium

Carbon

7

N

Nitrogenium

Nitrogen

8

O

Oxygenium

Oxygen

9

F

Fluorum

Fluorine

10

Ne

Neonum

Neon

11

Na

Natrium

Sodium

12

Mg

Magnesium

Magnesium

13

Al

Aluminium

Aluminium

14

Si

Silicium

Silicon

15

P

Phosphyorum

Phosphorus

16

S

Sulphu

Sulfur

17

Cl

Chlorum

Chlorlne

18

A

Argonum

Argon

19

K

Kalium

Potassium

20

Ca

Calcium

Calcium

 

-(o)logy词缀浅探

    Ology这个单词的意思本身就是n.学科,所以词汇里面有很多以-ology结尾的单词,基本上都是各个学科的名称,为了方便背诵便归纳总结了一下。

2015年考研英语大纲中含有-ology词缀的词汇汇总(8个)

学科类

 

biology

n.生物学

ecology

n.生态学

geology

n.地质(学)

psychology

n.心理,心理学,心理状态

sociology

n.社会学

technology

n.科学技术;工业技术;应用科学

非学科类

 

ideology    

 

apology

 

TOEFL词汇中含有-ology的词汇汇总(6个)

学科类

 

anthropology

n.人类学

methodology

n.方法论, 方法学

morphology

n.形态学,形态论

philology

n.语言学, 文献学

非学科类

 

anthology

n.诗集, 文选

terminology

n.术语

 

真干货在最后。真干货在最后。真干货在最后。

-ology可以与名词结合表示相应的学科或者形成知识体系。大多我们经常遇到的学科类单词。大家可以猜一猜中国传统文化中非常重要的一支,易学的英文单词是什么呢?

Yi-ology n.易学;易经。

其他学科的单词构词也大多与此类似。只要记住-ology的前缀的意思或者来源,便可以牢牢记住这个单词。

继续举栗子。

Biology。前缀bio-来自单词bios n.生物。Bio+logy便得到了生物学。

Ecology。前缀eco- suf. 环境的,生态的。Eco+logy即生态学。

感觉到自己学到新知识了吗。

 

除了以上关于学科的词,还有一个非常有意思的单词:

ideology    n.意识形态,(政治或社会的)思想意识

嗯,不多说,肯定一下子就记住了。出墙后可以跟外国人装逼。我先去取个快递。

TOEFL中有两个其实不属于学科的单词。其中anthology正如题目所说,-ology表示形成(知识)体系,那么author表示写作的意思,和ology结合后就是n. 诗集, 文选。

Terminology n.术语    的详细词源还没有找到,欢迎有知识的同学前来补充。

 

超纲内容

    查找资料的时候看到果壳网中有人提,为什么学科基本上以-ology结尾,但是一些非常重要和基础的学科却不是这样呢?比如物理,化学呢?

    数理化都是古老的学科,辞源基本上来自古希腊词汇,因此都有专门的名词。

Physics 源于古希腊语的 φυσική (physike)
Mathematics
源于古希腊语的 μάθημα (máthema)
Chemistry
不是直接源于希腊语,而是来源于阿拉伯语的 الکیمیاء (al-kīmīā),其中al是阿拉伯语的冠词。但是阿拉伯语的这个词,还是来源于古希腊语的 χημία (chemía)

    而以-ology结尾的,大多为晚起的词汇。ology本身也来自希腊语,λογία (logía),是”学习,学问”的意思。

    补充:

1. 古希腊语中的 -λογία 词缀,有两种来源,一种表示学习,学问,一种表示说话,逻辑。前者很少,后者很多。
查询权威词典LSJ,前者只有3个词汇,后者有167个。

  • ἀστρολογία ástrología)占星学 astrology
  • ἐτυμολογία etymología)词源学 etymology
  • γενεθλιαλογία genethlialogía)星命学 genethlialogy


除了这三个以外,其余的-logy结尾的表示学科的词,都是后起词。包括 theology(神学)这个词是罗马时代用希腊语构词法构造的词。
而第二种 -λογία 词汇的词,在英语中也不少见。比如 eulogy, triology,

2. 有些后起学科没有使用-logy形式去构造名字。

  • – t(o)ry类型:
    比如 History 历史学, Forestry 林学,Dentistry 牙医学
  • -cs类型:比如 Genetics 遗传学, Economics 经济学, Kinetics 动力学, Haptics 触觉学, Linguistics 语言学
  • -graphy类型:
    比如Geography 地理学, Oceanography 海洋学
  • -ture类型:比如Agriculture 农学,Architecture 建筑学

还有一些其他的类型。并没有规矩说新学科的名字一定要用-logy构词法。

油罐问题——用mathematica计算闭合曲面体积

我们知道,Mathematica是一款无比强大的符号计算软件,有着极为简单粗暴的计算定积分方式:

Integrate[f,{x,xmin,xmax}]

其中xmin,xmax 积分的上下限,那么,用这个函数就可以方便的求得各种规则的体积。

但是在实际建模和应用中,我们常常遇到一些非常复杂的情况,比如油罐容积问题就因为倾斜时候油面形状在不同阶段形状不断变化而需要分段求得,计算量就非常大了。

其实求体积的时候主要困难就是积分表达式无法直接求得,或者积分表达式太过复杂导致运算量太大,在需要求得大量关于油面高度的体积时需要耗费大量时间,甚至有可能根本算不出结果等情况。这个时候就需要用一些比较奇特的思路或者函数来解决问题了。

下面,按照这一次的题目中的不同情况依次说明三种不同的体积求解方式:

1)直接积分法

油罐容积问题中水平放置的时候可以通过直接积分法快速的计算出结果,但是在油罐倾斜情况下,由于油面变化的方式过于复杂,如果继续使用直接积分法,一般需要分为三个阶段,求得各个阶段油面面积关于油面高度h的表达式后进行积分,三个阶段示意图如下:

额,以上。表达式太过复杂,当时求得的结果是什么我忘了,不过想做肯定是可以做出来的。其中,在求油面面积的方程中有一个小Tips,就是倾斜斜面切椭圆柱时得到的切面肯定是一个一个椭圆或者正圆,油面在不同高度的时候其实就是截取这个椭圆不同部分得到的面积。这样求油面面积的表达式比较好写。

可以发现,这样的积分已经是非常复杂,而且计算机也用长时间的沉默(不给出结果)来向我们抗议这种积分方式的计算量,你TM实在是太大啦!那么这次建模的第二问如果继续用这种积分方式,绝对是可行而不可取的方式了。下面我来换一种思路继续求这个油罐的容油量。

2)通过Boole函数来求体积

在此之前先扯点有用没用的知识,Boole是历史上一名著名的数学家(https://en.wikipedia.org/wiki/George_Boole),1864年,布尔死于肺炎。肺炎是他在暴风雨淋湿了之后坚持给学生上课引发的。在这之后,她的妻子坚信以毒攻毒的方式,在布尔病倒之后将他安置在床上倾倒大量凉水后裹好被子,安送了他的丈夫去了西天(这说明有一位无比”疼爱”自己的妻子是多么荣幸的一件事情(●˘˘●))。由于其在符号逻辑运算中的特殊贡献,很多计算机语言中将逻辑运算称为布尔运算,将其结果称为布尔值。突出贡献之一就是将自己的名字赋予了c++中的一个变量(bool)。

Mathematica中也有这个函数,主要功能就继承于c++:判断表达式的正误。

举个栗子:

Boole[True]

给出的结果是1。

通过这个例子,大家想到了什么呢?对啦!就是通过积分Boole函数中的不等式判断某个点是否在区域内,然后对所有满足要求的点进行积分,我们就可以求出一个区域的面积或者体积啦~

栗子2:

In:Integrate[Boole[x^2+y^2≤1],{x,-1,1},{y,-1,1}]

out:Pi

这个式子是怎么求到半径为一的圆的面积呢?看一下Boole函数中的表达式

只有x,y满足上述不等式的时候Boole函数的值是才为1。这个时候我们对这个区域里对Boole函数进行积分,得到的结果就是圆的内部的面积。

类似的,我们可以求由一系列不等式确定的区域体积。以这次题目中油罐为例,油罐内部分的不等式表达式可以表示为:

  1. x^2+z^2<1
  2. y>0&&y<3

额,石怡图如上。下面计算它的体积:

in:vv=x^2+z^2<1&&y>0&&y<3

Integrate[Boole[vv],{x,-Infinity,Infinity},{y,-Infinity,Infinity},{z,-Infinity,Infinity}]

         out:3Pi

事实证明这种思路的正确性,下面我们直接计算本次模型最复杂的情况:

额,示意图如上。下面计算这块的体积:

in:vv=x^2+z^2<1&&y>0&&y<3&&z+0.2y<0.2
Integrate[Boole[vv],{x,-Infinity,Infinity},{y,-Infinity,Infinity},{z,-Infinity,Infinity}]

out:4.122564758856962

计算得到这个结果的时间在1s以内,所以大量取点的情况也不用在意时间的问题~

啊,这个时候可能就有童鞋要问啦,老湿你胡说八道,这怎么能是最复杂的情况呢!最复杂的情况两端是圆的!如下所示:

 

in:in:∫_(-5)^10∫_(-5)^5∫_(-5)^5[Boole[y^2+z^2<2.25&&x>5/8-√(169/64-y^2-z^2 )&&x<59/8+√(169/64-y^2-z^2 )]ⅆzⅆyⅆx]

out:64.66444878638991

呐,结果如上。

其实这种情况也是类似的,那就来示范一下怎么做这个蛋形的体积。

首先得到描述这个蛋的不等式约束条件:

  1. y^2+z^2<2.25(蛋的侧面)
  2. x>5/8-Sqrt[169/64-y^2-z^2](蛋的左底面)
  3. x<59/8+Sqrt[169/64-y^2-z^2](蛋的右底面)
  4. z+xtana+ytanb<h(油面方程)(可选)

额,示意图如上。下面是体积计算代码:

in:vv=y^2+z^2<2.25&&x>5/8-Sqrt[169/64-y^2-z^2]&&x<59/8+Sqrt[169/64-y^2-z^2]&&z+0.2x<1

Integrate[Boole[vv],{x,-Infinity,Infinity},{y,-Infinity,Infinity},{z,-Infinity,Infinity}]

Out:

嗯,你以为我算出来上面这个体积了吗!哈哈哈哈,太年轻啦骚年,

等了足足五分钟啊,尼玛直接给了我一个标准形式的表达式啊,(っ °Д °;)っ

下面是本次体积计算的终极大招,仅限Mathematica 10以上的用户使用。

3)Volume函数(Mathematica 10版本以上可用)

Volume函数顾名思义,其实就是计算体积的意思。注意区分一下内置指示器Volume。

继续举栗子:

in:Volume[Ball[]]

out:4/3Pi

有没有觉得很方便啊!是不是超方便!为湿跑了一天的代码Mathematica 9版本出了很多原来没有出现过的问题啊!坑货啊,听说有中文版本才换上9的啊!最后实在受不了抱着试试看的态度装回了10啊,原来的报错的情况没有了啊!

这个时候只要把我们第二种思路中Boole函数中的表达式用隐函数表达一下放到Volume函数里面就可以求到结果了~

以上。

PS:查资料的时候发现有一篇论文翻译了mathematica中的帮助文档,举了几个计算体积的栗子就水了一篇论文,强烈鄙视这种行为。