物联网 - WIFI 芯片 ESP82xx 使用

前言:2015年物联网处于爆发的一年,乐鑫的ESP8266WIFI 芯片成为强烈的催化剂。成功的将2014年前的40以上的WIFI成本压缩到现在的10元左右。内置WIFI前端和高性能的32位MCU,基本引爆物联网市场,几乎牵扯到电子的行业,都可以用上,比如WIFI开关 灯具 WIFI定位 电饭锅 电冰箱 洗衣机 厨房电器 空调 空气净化器 等消费类小家电与大家电,都面临这一场技术革新,与新的用户体验!几乎势在必行。比如一台空调,增加了10块钱左右的成本,但是却能用任何智能终端比如手机平板 电脑等直接控制。
总结:WIFI的加入不是锦上添花,而是比较实用的功能,将直接决定着你产品的档次和销路。几乎决定着您这款产品的存亡。

1. 下载SDK

espressif.com -> Resource -> SDKs & Demos

SKD&Demo

Read More

物联网 - MQTT 协议与应用

broker: Apollo mosquitto EMQ

EMQTT(http://emqtt.io/)是目前全球物联网市场排名第一的开源MQTT消息服务。全球市场(印度、北美、欧洲、中国) 累计4000+用户,1000万线MQTT连接部署。中国市场部分物联网公司,包括智能硬件、智能家居、移动消息、物联网云平台,是基于或参考EMQTT项目开发。MQTT项目在物联网系统以核心的MQTT消息服务方式,连接海量的传感器、移动终端、云端应用服务和数据处理服务。技术和产品方面,EMQTT项目本身采用了类似WhatsApp的设计架构,核心解决物联网服务器需要处理大量并发连接问题,是目前全球市场唯一一个真正单节点承载100万,集群承载到1000万线的开源项目。EMQTT项目实现完整协议规范(Apollo, RabbitMQ部分支持),支持100万级的连接规模(Mosquitto、Mosca 10万级别),同时支持与企业现有系统例如MySQL、PostgreSQL、MongoDB、Redis集成(其他均不支持)。

其他可替代技术方案

websocket

IIC 使用总结

地址

  • IIC地址分7位地址和10位地址
  • IIC地址为7位时, 低位用于表示读写, 因此在有的驱动中需要将实际地址右移1位
  • 若某些器件IIC地址相同则会产生冲突, 可以使用GPIO软件模拟IIC

IIC协议并不标准, 每个厂家有自己的规定, 一定要参考数据手册.

GPIO 的矩阵按键扫描电路

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

Read More

漫画趣解 linux 内核构造

转自: http://www.techug.com/post/carton-inside-the-linux-kernel.html

今天,我来为大家解读一幅来自 TurnOff.us 的漫画 “InSide The Linux Kernel[1]” 。 TurnOff.us[2] 是一个极客漫画网站,作者Daniel Stori 画了一些非常有趣的关于编程语言、Web、云计算、Linux 相关的漫画。今天解读的便是其中的一篇。

在开始,我们先来看看这幅漫画的全貌!

Inside the Linux Kernel

这幅漫画是以一个房子的侧方刨面图来绘画的。使用这样的一个房子来代表 Linux 内核。

Read More

系统分析师教程 - 系统分析

TODO

系统分析阶段也称为逻辑设计阶段,其任务是根据系统设计任务书所确定的范围,对现有系统进行详细调查,描述现有系统的业务流程,指出现有系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型。

在系统分析阶段,系统分析师要和用户起细致地进行调查分析,把用户的初始需求具体化、明确化,最终转换成关于新系统“做什么”的逻辑模型。系统分析是整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别之所在。系统分析阶段的工作成果体现在系统需求规格说明书中,这是系统建设的必备文件,是系统设计阶段的工作依据,也足将来系统验收的依据。

Read More

软件工程知识体系指南概览 (swebok)

Software Engineering Body of Knowledge

https://www.computer.org/web/swebok

  1. 第一章 软件需求
  2. 第二章 软件设计
  3. 第三章 软件实现
  4. 第四章 软件测试
  5. 第五章 软件维护
  6. 第六章 软件配置管理
  7. 第七章 软件工程管理
  8. 第八章 软件工程过程
  9. 第九章 软件工程建模和方法
  10. 第十章 软件质量
  11. 第十一章 软件工程专业实践
  12. 第十二章 软件工程经济学
  13. 第十三章 计算基础
  14. 第十四章 数学基础
  15. 第十五章 工程基础

CMMI 主要内容及各过程域的相互关系

CMMI 2、3级共有18个过程域(PA),主要内容如下,分四大类:

一、过程管理:
  1. OPD:组织级过程定义。
  2. OPF:组织级过程焦点。
  3. OT:组织培训管理。
二、项目管理:
  1. PP:项目计划。
  2. PMC:项目监督与控制。
  3. SAM:供应商协议管理。
  4. IPM:集成项目管理。
  5. RSKM:风险管理。
三、工程管理:
  1. REQM:需求管理。
  2. RD:需求开发。
  3. TS:技术解决方案。
  4. PI:产品集成。
  5. VER:验证。
  6. VAL:确认。
四、支持管理:
  1. CM:配置管理。
  2. PPQA:过程和产品质量保证。
  3. MA:测量与分析。
  4. DAR:决策分析与解决。

CMMI 4级除第2、3级所涵盖的18个过程域外,增加以下两个过程域:

  1. OPP :组织过程性能。
  2. QPM:量化的项目管理 。

CMMI 5级包含第2级到第4级的20个过程域外,增加以下两个过程域:

  1. OID:组织创新与推展。
  2. CAR:因果分析与解决方案。

Read More

CMMI 概览

转自: http://www.csai.cn 2007-05-09

什么是CMMI

CMMI 的全称为:Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。早期的CMMI(CMMI-SE/SW/IPPD)1.02版本是应用于软件业项目的管理方法,SEI在部分国家和地区开始推广和试用。随着应用的推广与模型本身的发展,演绎成为一种被广泛应用的综合性模型。

自从1994 年SEI 正式发布软件CMM 以来,相继又开发出了系统工程、软件采购、人力资源管理以及集成产品和过程开发方面的多个能力成熟度模型。虽然这些模型在许多组织都得到了良好的应用,但对于一些大型软件企业来说,可能会出现需要同时采用多种模型来改进自己多方面过程能力的情况。这时他们就会发现存在一些问题,其中主要问题体现在:

  • 不能集中其不同过程改进的能力以取得更大成绩;
  • 要进行一些重复的培训、评估和改进活动,因而增加了许多成本;
  • 遇到不同模型中有一些对相同事物说法不一致,或活动不协调,甚至相抵触。

于是,希望整合不同CMM 模型的需求产生了。1997 年,美国联邦航空管理局(FAA)开发了FAA-iCMMSM(联邦航空管理局的集成CMM),该模型集成了适用于系统工程的SE-CMM、软件获取的SA-CMM 和软件的SW-CMM 三个模型中的所有原则、概念和实践。该模型被认为是第一个集成化的模型。

CMMI 与CMM 最大的不同点在于: CMMISM-SE/SW/IPPD/SS 1.1 版本有四个集成成分,即:系统工程(SE)和软件工程(SW)是基本的科目,对于有些组织还可以应用集成产品和过程开发方面(IPPD)的内容,如果涉及到供应商外包管理可以相应的应用SS(Supplier Sourcing)部分。

CMMI 有两种表示方法,一种是大家很熟悉的,和软件CMM 一样的阶段式表现方法,另一种是连续式的表现方法。这两种表现方法的区别是:阶段式表现方法仍然把CMMI 中的若干个过程区域分成了5 个成熟度级别,帮助实施CMMI 的组织建议一条比较容易实现的过程改进发展道路。而连续式表现方法则通过将CMMI 中过程区域分为四大类:过程管理、项目管理、工程以及支持。对于每个大类中的过程区域,又进一步分为基本的和高级的。这样,在按照连续式表示方法实施CMMI的时候,一个组织可以把项目管理或者其他某类的实践一直做到最好,而其他方面的过程区域可以完全不必考虑。

Read More

设计模式形象比喻

转自: http://blog.csdn.net/hehe9737/article/details/7074562 2011-12-15

创建型模式

  • 抽象工厂模式(Abstract Factory)
    追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory

    抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

  • 建造者模式(Builder)
    MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞定,这就是我的“我爱你 ”builder。(这一定比美军在伊拉克用的翻译机好卖)

    建造者模式:将对象的内部表象和对象的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

  • 工厂(方法)模式(Factory)
    请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。

    工厂(方法)模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

  • 原型模式(Prototype)
    跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)

    原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

  • 单例模式(Singleton)
    俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)

    单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

Read More

中国程序员容易发音错误的计算机相关英文单词

来自: http://www.techug.com/post/chinese-programmer-wrong-pronunciation.html 程序师 2017-02-23

英文是中国大多数程序员的“命门”,在工作中或多或少也会遇到来自英文的挑战,读写必不可少;而发音往往容易被忽视,Github的贡献者shimohq同学细心的收集了一些程序员常用的英文单词,而且容易发音错误。看看你日常哪些单词的发音是非主流;小编命中了不少!

Read More

设计模式概览

1. 设计原则

设计原则

  1. 单一职责原则 (SRP / Single Responsibility Principle): 不要存在多于一个导致类变更的原因。即一个类只负责一项职责。

  2. 里氏替换原则 (LSP / Liskov Substitution Principle): 所有引用基类的地方必须能透明地使用其子类的对象。继承与派生的规则。

  3. 依赖倒置原则 (DIP / Dependency Inversion Principle): 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。

  4. 接口隔离原则 (ISP / Interface Segregation Principle): 一个类对另一个类的依赖应该建立在最小的接口上。不应该依赖它不需要的接口。

  5. 组合/聚合复用原则 (CARP / Composition/Aggregation Reuse Principle): 尽量使用组合和聚合少使用继承的关系来达到复用的原则。

  6. 迪米特法则 (LoD / Law of Demeter): 又叫作最少知道原则(LKP / Least Knowledge Principle)。一个软件实体应当尽可能少地与其他实体发生相互作用。低耦合,高内聚。

  7. 开闭原则 (OCP / Open-Closed Principle): 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

Read More

理解 TCP/IP 网络栈&编写网络应用 (下)

来自: 博客 Axb的自我修养 http://blog.2baxb.me/archives/1190 2015/05/01

一 摘要

这是《翻译:理解TCP/IP网络栈&编写网络应用》的下篇,文章中会通过讲解TCP的代码实现帮助大家理解发送、接收数据的流程,也描述了一些网卡、驱动等网络栈底层的原理。

原文地址:http://www.cubrid.org/blog/dev-platform/understanding-tcp-ip-network-stack/

原作者:Hyeongyeop Kim

翻译:@蛋疼的axb http://2baxb.me

二 数据结构

以下是一些关键数据结构。我们了解一下这些数据结构再开始查看代码。

1. sk_buff_structure

首先,sk_buff 结构或 skb 结构代表一个数据包。图6 展现了 sk_buff 中的一些结构。随着功能变得更强大,它们也变得更复杂了。但是还是有一些任何人都能想到的基本功能。

img

图6:数据包结构
2. 包含数据和元数据

这个结构直接包含或者通过指针引用了数据包。在 图6 中,一些数据包(从Ethernet到Buffer部分)使用了指针,一些额外的数据(frags)引用了实际的内存页。

一些必要的信息比如头和内容长度被保存在元数据区。例如,在 图6 中,mac_header、network_header和transport_header都有相应的指针,指向链路头、IP头和TCP头的起始地址。这种方式让TCP协议处理过程变得简单。

3. 如何增加或删除头

数据包在网络栈的各层中上升或下降时会增加或删除数据头。为了更有效率的处理而使用了指针。例如,要删除链路头只需要修改head pointer的值。

4. 如何合并或切分数据包

为了更有效率的执行把数据包增到或从socket缓冲区中删除这类操作而使用了链表,或者叫数据包链。next和prev指针用于这个场景。

5. 快速分配和释放

无论何时创建数据包都会分配一个数据结构,此时会用到快速分配器。比如,如果数据通过10Gb的以太网传输,每秒会有超过一百万个对象被创建和销毁。

Read More

理解 TCP/IP 网络栈&编写网络应用 (上)

来自: 博客 Axb的自我修养 http://blog.2baxb.me/archives/1174 2015/04/30

一 摘要

之前在网上看到了这篇描述tcp网络栈原理的文章,感觉不错,决定抽空把这篇文章翻译一下。一来重新温习一下TCP相关知识,二来练练英文。由于原文太长,这里把文章分成上下两部分,分别对应了原理和代码。 很久没翻译文章了难免有误,建议有能力的同学还是看一下原文。

原文地址:http://www.cubrid.org/blog/dev-platform/understanding-tcp-ip-network-stack/

原作者:Hyeongyeop Kim

翻译:@蛋疼的axb http://2baxb.me

二 概述

我们难以想象没有了TCP/IP之后的网络服务。所有我们开发并在NHN(原文发布的网站)使用的网络服务都基于TCP/IP这个坚实的基础。理解数据如何通过网络传输可以帮助你通过调优、排查或引进新技术之类的手段提升性能。

本文将基于Linux OS和硬件层的数据流和控制流来描述网络栈的整体运行方式。

Read More