博客

Day 2:Ruby 对象

大部分 Ruby 程序,它们的设计,逻辑,动作,都是围绕着对象进行的。写一个 Ruby 程序,主要的工作就是去创建对象,然后给它们能力,让它们可以去执行动作。

Ruby 是 OOP 语言,就是面向对象的语言,你执行的计算,数据处理,输入与输出这些动作,都是通过创建对象,然后让这个对象去执行指定的动作来完成的。对象(object)在现实世界里,就是一个东西。一个苹果是一个对象,一张桌子也是一个对象。

每个对象是一个特定的类的实例(instance),对象的行为大部分是在它们所属的那个类上面定义的方法(method)决定的。
当你想干点什么的时候,比如计算,输出,数据比较,你就是让一个对象去做。比如你想问 a 是否等于 b ,你要问的是 a 是不是认为它自己等于 b 。如果你想知道一个学生是不是上了某个老师的课,你可以问这个学生,“你是不是这个老师的学生”。

写 Ruby 程序,大部分工作就是创建对象,让每个对象都扮演个角色,每个对象可以执行跟这个角色相关的动作。

单元测试:用 JavaScript 语言演示一下单元测试是什么

test,testing,unit test,测试,单元测试,这些词总是出现在我眼前,下意识地觉得它没那么重要,也会认为它很难搞,所以我总是把它忽略掉。可它们仍然会不断的出现在各种场合,因为陌生,所以见到它难免有些尴尬。终于,我忍不住想认识一下它。原来它很简单,也很重要。

我说的测试,指的是程序设计里的单元测试,一听到单元这两个字儿我就有点懵,因为我会把它跟计算机联系到一块儿,但其实如果把 “单元” 放到现实世界,就非常容易理解,一栋楼分成几个单元,一本书里的内容分成了几个单元。单元测试就是测试程序里的一小部分,比如,有一个单元测试,可以测试一个类里面的某个方法。测试的到底是哪个部分,是你自己决定的。

单元测试里的 “测试”,测试的就是你做的一些断言(assert)。你在测试里可以说明一下你做的断言,比如我的程序在什么情况下,做什么事情的时候,应该怎么样。比如调用 cart 这个类里的 subtotal 这个方法的时候,如果给它的单价是 10 块钱,数量是 3 个,那么这个方法应该返回 30 。这就是我在某个测试里做的断言,如果我做的断言是真的,那这个测试就会通过,如果是假的,就是哪里出了点问题。

Day 1:Ruby on Rails 的学习资料与 Ruby 语言的基础知识

跟踪了时间才知道,每天的有效工作与学习时间平均只有 5 小时,我需要提高点效率,乱七八糟的事情少干。第一天花了 5 小时 58  分来准备学习资料与学习 Ruby 语言的基础知识。

音乐:http://music.163.com/#/song?id=36024457

学习资料

开始学习之前一般我会去找一些学习资料,我自己也订阅了一些国外的在线教育网站,比如 Lynda.com,Tutsplus 等等。找到适合自己频率的资料挺花时间的,特别是视频,有时候听有些人讲的东西老有骂娘的冲动,特别是当视频里关于铺垫的东西太多的时候,比如 “hey guys,I'm xxx,yesterday we were xxx , today we gonna xxx ... ”。

Lynda.com 的质量基本可以保证。Tutsplus 的课程差别很大,因为不是统一制作,也没有严格的标准,Youtube 上也会找到一些不错的视频,比如你遇到一个特别的问题,而不是想系统的学一样东西的时候,可以到 Youtube 上搜索一下。

记录未来 30 天的学习过程

睡不着的时候就想自己到底想做些什么,我觉得自己可以在 “教” 与 “学” 这两件事情上总结点东西出来。比如在学的时候,动机是什么,动力来自哪里,有没有什么方法,从哪里开始,怎么做才更有效,什么时间最好,遇到问题怎么解决的,当时的心情如何,花了多长时间,为什么会放弃。

有特别多的疑惑,我自己也非常想知道为什么,怎么办。我没有一套科学的理论,方法或者流程,都是很模糊的一些东西。所以我希望在学习的时候,可以记录一下这个过程,时间久了,我觉得就可以提取出来一些有用的东西。

就在刚才,我在亚马逊上搜索了一下关于学习方法的书籍,原来真的有,暂时我并不打算看这些书,想自己总结一些东西出来。通过实践来验证一下自己的一些模糊的概念,看看到底是不是自己想的那样。这个月我打算试一下(每周一至周五,我需要一个周末 :),学一个对我来说相对比较新的东西,记录这个过程,实验期限是一个月,要学的东西是 Ruby on Rails。

Imagine what you could build if you learned Ruby on Rails …

在 Docker 本地开发环境上极快地运行 Drupal

这个方法只在 macOS 上测试过,抱歉啊 :)

在本地,我们可以使用 Docker for Windows 或者 Docker for Mac 作为应用的开发环境。不过如果你打算使用 Docker 的数据卷存储应用的代码,特别是应用的文件比较多,比如 Drupal ,在运行它的时候你会觉得特别慢。这是因为 Docker for Windows 与 Docker for Mac 都使用了本地化的虚拟技术,这是为了给我们提供一个更顺流的体验,但是数据卷的性能是个暂时没能解决的问题。我找到了一个解决方法,就是使用 Unison 同步文件,暂时只在 macOS 上测试过。

安装 Unison 与必备

在 macOS 上安装了 Homebrew 以后,可以很容易用它安装 Unison 。另外你还需要让 Unison 可以监视文件的变化,当有变化时就去执行同步的动作,这些再安装一下 unison-fsmonitor 。

# 安装 unison
brew install unison

# 安装 unox 的依赖
pip install MacFSEvents

# unox 是在 macOS 上用的 unison-fsmonitor 脚本
curl -o /usr/local/bin/unison-fsmonitor -L https://raw.githubusercontent.com/hnsl/unox/master/unox.py
chmod +x /usr/local/bin/unison-fsmonitor

学习路径

对不住大伙,课程的学习路径与顺序一直没整好。暂时弄了个 在线思维导图 ,可以对课程的结构有个大概的了解。还有一个学习路径仓库 ,里面有具体的课程列表,注册一个 github 帐号,然后 Star 一下这个仓库,这样更新的时候会有提醒。您先用这两个东西作为参考来学习。

path

path-repo

阿里云:专有网络 VPC

在创建阿里云服务之前,先去创建一个网络,然后在这个自己独有的网络上添加需要的阿里云产品,这就是阿里云的 VPC (Virtual Private Cloud),直译就是虚拟私有云,产品的中文名是 “专有网络” 。

创建阿里云产品的时候可以选择自己的专有网络,也可以是经典网络。如果选择经典网络,你的产品跟同一区域的其他人的产品会在同一个网络上。如果使用自己的专有网络,你的服务跟其他人购买的阿里云服务是完全隔离的,这样会更安全一些。而且你也可以更好的控制自己的专有网络,比如使用交换机划分不同的网段,配置路由等等。

创建一个使用专有网络的 ECS 云服务器,流程大概是这样的(视频课程制作中 ... ):

  1. 创建一个专有网络
  2. 在专有网络下添加一个交换机
  3. 创建云服务器,选择所属的专有网络与交换机

如果你的云服务器要面向互联网提供服务,你还需要一个公网的 IP 地址,这样你还需要:

  1. 申请弹性公网 IP
  2. 把申请的公网 IP 绑定到指定的云服务器上

Docker Swarm:创建服务器集群

Docker Swarm 是创建服务器集群用的工具。把一堆服务器绑到一块儿用,让它们看起来像是一台服务器,通过统一的接口在这些服务器上运行应用。

集群里的服务器之间相互知道彼此,它们也知道哪些服务器上运行了什么样的服务,如果访问的服务在服务器上不存在,它会把访问转移到集群里的正确的服务器上去处理。一个服务可以用多个容器来支持,这些容器运行在集群里的不同的服务器上,请求可以均衡的分布给这些容器。当有服务器挂掉以后,在它上面运行的服务会被转移到其它的服务器上运行。

Docker Swarm 只需要几行命令就可以为应用创建一个强大的集群,为你的应用提供高可用的服务。宁皓网的 《 Docker:集群 》介绍了使用 Docker Swarm 创建集群服务器的方法。

模拟集群环境

如果你已经有了几台服务器,安装 Docker 以后就可以去创建一个服务器集群了,如果你想在本地测试 Docker Swarm 的功能,可以模拟一个集群环境,也就是在本地创建几台 Linux 系统的虚拟机,安装 Docker ,配置集群。下面介绍使用 Vagrant 创建虚拟机的方法。

Docker Compose:创建本地开发 PHP 应用的环境

Docker Compose 可以让我们用一个文件来描述应用需要的环境,在上面定义应用需要的各种服务,比如 web,数据库,脚本解释,缓存等等,我们也可以配置服务需要的网络与数据卷。这篇文章会创建一个运行 PHP 应用的环境,代码可以在 github 上找到,参考宁皓网课程《Docker:容器化应用》。

定义了下面这些服务:

  • db:使用 mariadb 作为应用的数据库
  • php:解释 php 脚本,使用 php-fpm
  • web:使用 NGINX 作为应用的 web 服务器
  • console:常用工具
  • redis:缓存
  • phpmyadmin:管理数据库的 web 界面

准备

在本地安装 Docker for Mac 或 Docker for Windows ,然后启动 docker ,再打开你喜爱的文本编辑器与命令行工具。为项目创建一个目录,在根目录下创建一个 docker-compose.yml 文件。

Docker:应用从开发到生产的正确方法

扯淡的文章,主要目的是说服你放弃现有的开发环境,比如这些:WAMP,MAMP,XAMPP,Acquia Dev Desktop ... 无论您是一个人,还是一个团队,考虑一下在开发与生产环境中使用 Docker 。

从前

美好的回忆,但那已经是过去。多年前,打算学 PHP 的时候,搜遍互联网寻找搭建运行 PHP 网站的方法,到七八个网站下载环境需要的不同的部分,安装以后还要考虑怎么配置,把它们拼到一块儿工作,当时对我来说是件很难的事情。后来我发现了 WAMP ,只需要到一个地方下载个东西,然后安装一下就可以拥有一个完整的开发环境,感觉很美好。之后很长一段时间我都是用它在本地设计网站,后来我换了 macOS ,所以又用了一阵子 MAMP 。

历史

选择 WAMP 这样的工具,跟我当时的情况有关。设计的网站主要是企业网站,这些网站做好以后很少修改,网站的运行环境一般是虚拟主机,一般只提供使用 FTP 传输文件的权限。使用 WAMP,也限制了整个开发流程,一般像这样:在本地做好网站,感觉差不多了以后就停止继续设计。然后打包网站文件,导出在本地的数据库。把网站文件包扔到虚拟主机上,在线解压,导入数据库。修改网站的配置文件,让网站可以正常运行。从此网站跟本地之间几乎就没有关系了,出现问题直接在线修改。



微信好友

用微信扫描二维码,
加我好友。



微信公众号

用微信扫描二维码,
订阅宁皓网公众号。



240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

6690
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点