6
评论

【开源OA项目】基于环信IM开发完整的企业通讯解决方案-Dolores Dolores OA 开源项目

KevinGong 发表了文章 • 7445 次浏览 • 2017-06-26 10:53 • 来自相关话题

  

  前阵子钉钉在微信楼下刷了一波#创业很苦,坚持很酷#的广告,浓浓的“丧”文化风格文案受到了各界褒贬不一的评价,也引起了大家对OA办公系统的关注。
   对企业而言,初选OA办公系统是为了满足需求,解决当下问题,由于OA办公系统的在公司运作流程中扮演的重要性,安全与隐私等问题急需未雨绸缪,“可定制”、“可私有化部署”的OA办公系统成为了更多企业的首选。公司想自己开发一套IM系统应该从哪里开始呢? 企业通讯录怎么保持同步呢? 企业通讯录的权限管理应该怎么做?
   三个关于OA办公系统的究极问题,从开源的OA办公项目-Dolores(朵拉)诞生迎刃而解了。Dolores项目遵循Apache Licence 2.0 开源协议,可以直接拿来用,也可以修改代码来满足需要并作为开源或商业产品发布/销售。




关于Dolores?
Dolores是一套完整的企业通信解决方案,一个完整的企业沟通工具(以下简称企业IM),支持以下几个功能:IM消息服务、组织架构管理、工作流集成。
Dolores项目源码地址:https://github.com/DoloresTeam​ 
技术讨论群:641256202(QQ群)

整个解决方案都包括了什么?
企业通讯录的管理:部门/员工的增删改查通讯录全量更新:全量/增量更新 企业通讯录权限管理:基于RBAC权限管理模型企业即时通讯IM:企业通信对IM这块的可靠性要求高,选择了目前比较成熟的IM云服务厂商-环信
 
 
组织架构

企业通讯录可以说是企业沟通中最重的业务之一,能够提供员工各种服务的认证,获取员工的联系方式等。
 
组织架构-Server

服务端主要包括以下功能:
支持管理人员(例如HR)对部门和员工进行增删改查支持部门和员工自定义排序,自定义元信息存储权限管理员工通讯录视图 (员工根据自己的权限生成通讯录)通讯录增量更新 (鉴于移动端特殊的网络环境和设备,通讯录应该支持差量更新)集成 IM 用户系统

在这里我们主要讨论以下两个问题:
 
权限管理

  随着企业逐渐的发展,团队壮大为了更有效的沟通,以及保护公司内部的一些商业信息不被泄漏,我们应该为通讯录添加权限管理。

基于Role-based access control(RBAC)的权限管理模型

为了介绍此权限管理模型,我们先解释一下基本概念
角色:通常是指企业中某一个工作岗位,这个岗位具有特定的权利和职责。被赋予此角色的员工,将获得这种权利与职责权限:被赋予访问实体的权利。在本项目中是指访问部门和访问某一个或者某一类员工的权利用户-角色分配(User-Role Assignment URA):为某个用户指定一个或者多个角色,此员工将获得这些角色所具有权利的集合角色-权限分配(Role-Permission Assignment RPA):将权限分配给角色,一个角色可以包含多个权利。在本项目中是指多个访问部门和访问员工的权限

在用户和权限之间引入角色中介,将用户与权限的直接关系弱化为间接关系。|ˉˉˉ| |ˉˉ ˉ| |ˉˉˉˉ ˉˉ|
| User |---URA---> | Role |<---RPA---| Permission |
|______| |_______| |_____________|
    以角色为中介,首先创建访问每个部门和员工的访问权限,然后创建不同的角色,根据这些角色的职责不同分配不同的权限,建立角色-权限的关系以后,不同的角色将会有不同的权限。根据员工不同的岗位,将对应的角色分配给他们,建立用户-角色关系,这就是RBAC的主要思想。

一个员工可以用户多个角色,一个角色可以用于多个访问权限。RBAC 极大的简化了员工的授权管理。

   由于企业的部门和员工数量很多,在创建权限时管理员不可能去设置每一个权限可以访问的每一个部门和每一个员工。所以本项目将功能和指责类似的部门和员工看作是同一类型,在创建部门和员工的时候为每一个部门和员工分配固有属性type,管理员在设置权限规则的时候只需要指定可访问的部门类型和员工即可。

增量更新

   鉴于移动终端计算资源有限,如网络,存储,电量等,所以通讯录的更新技术应该保证尽量少的资源。另外由于通讯录的特殊性,通讯录的变化需要能实时通知到受影响的在线员工。

基于版本号与变更日志的增量更新模型

   客户端第一次登陆系统以后,我们根据当前登录角色生成对应的通讯录视图,并以当前时间戳作为版本号,返回给客户端。客户端后续通过此版本号增量更新通讯录。

版本号

   版本号有两种:一是客户端当前通讯录版本 c-version, 二是服务端通讯录每一次变化时的版本号s-version

变更日志

   在管理员修改权限规则,或者修改某个岗位的访问规则时会影响大面积员工的通讯录视图,此时如果用增量更新会导致服务器流量异常,因此在这2中情况会清空原来的变更日志并且要求客户端进行一次全量更新。

   如果管理员新增了员工,服务端会根据被修改的员工或者部门type, 反推出所有受影响的员工,然后生成一条变更日志, 例如:{
"content" : [
{
"cn" : "Lucy.Liu",
"id" : "b4vlfg91scgi1dcju8v0",
"title" : "市场运营负责人",
"email" : [
"lucy.liu@dolores.store"
],
"priority" : "101111",
"name" : "刘小飞",
"telephoneNumber" : "18888888888"
}
],
"createTimestamp" : "20170614063303Z",
"category" : "member",
"action" : "add"
}
客户端在请求增量更新的时候,通过当前登陆ID与版本号,可查找出所有与自己相关的变更日志,然后在客户端数据库中应用这些变更,即可完成同步。

组织架构-Client

   由于现在员工办公设备的多样性,客户端要根据自己公司的情况,覆盖的足够完整,常见的平台有 iOS Android windowsmac linux , 对于后三个平台可以用 Web APP 来覆盖,iOS&Android 用原生的app来提升用户体验。

客户端App主要包括以下功能:
会话列表优秀的聊天界面,历史记录组织机构全量/增量更新员工个人资料展示

客户端数据库设计

IM数据库设计
 
当前版本使用环信SDK
 
组织架构数据库设计

表设计

客户端组织架构较服务端简单,不关联用户Role,客户端本地存储Staff(员工)和Department(部门)信息:
一个部门可以包含相关子部门和部门员工。该部门员工和部门在视图上处于同级关系。员工隶属于部门,同一员工可以存在于多个部门。员工角色用title来表示。

用户在登录客户端成功后,会根据该用户信息创建用户对应的数据库文件,用户表(User)保存用户相关信息,关联该用户staff信息。

客户端组织架构同服务端逻辑。

工作流集成

(TODO)
 
如何使用Dolores

本项目现在已经完成了第一个测试版本,本小节将指导您如何安装使用。

后端数据库

鉴于通讯录对数据库操作的特点多度少写,以及部门之间的树状关系,我们选择LDAP协议来存取数据。

我们有独立的repo来帮助您完成数据库的安装与初始化。请移步这里

组织架构管理

Dolores 初始版本使用Golang实现,大家既可以下载各个平台的可执行包,也可以安装Go语言的开发环境自己编译。

我们有独立的repo来帮助您,运行后端服务。请移步这里

客户端

我们现在有提供一个iOS版的Demo。请移步这里

Done

如果您顺利的完成以上三步,访问 http://localhost:3280 (端口号根据自己的配置,可能会有差异),使用 username: admin, password: dolores 登陆后端管理页面,添加权限规则,添加角色,添加员工、部门,然后使用iOS客户端登陆,就可以愉快的开始聊天啦~
 
负载均衡

(TODO)

多机容灾

(TODO)

LICENSE Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
更多信息请前往github项目主页

 
这里我对每个repo做一个简单的介绍


Dolores: 项目简介, 整个项目的架构, 数据库设计等等 你想了解的一切都可以在这里看到
dolores-ios: iOS版demo,可以聊天查看组织架构
dolores-android: 哈哈 还没有,当然我们欢迎各路安卓大牛贡献安卓版demo
organization: 组织架构的创建管理、更新、审计等等核心的东西都在这里啦
dolores-server: 为客户端提供restfull api 与环信服务器集成
dolores-admin: 后台管理网站,用于管理部门员工。一个基于React的webapp还很基础,欢迎各位大牛pr.
dolores-ldap-init: 后台数据库的初始化工具,详情可以查看readme
easemob-resty:对环信rest api的封装,让调用环信api更简单
dolores-avatar:生成类似钉钉那样的默认头像


最后再说一点整个服务端是用go来写的,作者也是golang的初学者,如果代码哪里写的有问题或者架构有问题欢迎大家指正THE CALM BEFORE THE STORM.
暴风雨前的宁静
ONE MORE THING 最后附上Dolores项目LOGO
当时作者正在二刷 《西部世界》这部剧,所以选择了女主的名字dolores作为整个项目的名字,而这个logo则寓意剧中的host。 查看全部
  

  前阵子钉钉在微信楼下刷了一波#创业很苦,坚持很酷#的广告,浓浓的“丧”文化风格文案受到了各界褒贬不一的评价,也引起了大家对OA办公系统的关注。
   对企业而言,初选OA办公系统是为了满足需求,解决当下问题,由于OA办公系统的在公司运作流程中扮演的重要性,安全与隐私等问题急需未雨绸缪,“可定制”、“可私有化部署”的OA办公系统成为了更多企业的首选。
公司想自己开发一套IM系统应该从哪里开始呢? 企业通讯录怎么保持同步呢? 企业通讯录的权限管理应该怎么做?

   三个关于OA办公系统的究极问题,从开源的OA办公项目-Dolores(朵拉)诞生迎刃而解了。Dolores项目遵循Apache Licence 2.0 开源协议,可以直接拿来用,也可以修改代码来满足需要并作为开源或商业产品发布/销售。
OA广告图.jpg

关于Dolores?

Dolores是一套完整的企业通信解决方案,一个完整的企业沟通工具(以下简称企业IM),支持以下几个功能:IM消息服务、组织架构管理、工作流集成。


Dolores项目源码地址:https://github.com/DoloresTeam​ 
技术讨论群:641256202(QQ群)

整个解决方案都包括了什么?
  • 企业通讯录的管理:部门/员工的增删改查
  • 通讯录全量更新:全量/增量更新 
  • 企业通讯录权限管理:基于RBAC权限管理模型
  • 企业即时通讯IM:企业通信对IM这块的可靠性要求高,选择了目前比较成熟的IM云服务厂商-环信

 
 
组织架构

企业通讯录可以说是企业沟通中最重的业务之一,能够提供员工各种服务的认证,获取员工的联系方式等。
 
组织架构-Server

服务端主要包括以下功能:
  1. 支持管理人员(例如HR)对部门和员工进行增删改查
  2. 支持部门和员工自定义排序,自定义元信息存储
  3. 权限管理
  4. 员工通讯录视图 (员工根据自己的权限生成通讯录)
  5. 通讯录增量更新 (鉴于移动端特殊的网络环境和设备,通讯录应该支持差量更新)
  6. 集成 IM 用户系统


在这里我们主要讨论以下两个问题:
 
权限管理

  随着企业逐渐的发展,团队壮大为了更有效的沟通,以及保护公司内部的一些商业信息不被泄漏,我们应该为通讯录添加权限管理。

基于Role-based access control(RBAC)的权限管理模型

为了介绍此权限管理模型,我们先解释一下基本概念
  • 角色:通常是指企业中某一个工作岗位,这个岗位具有特定的权利和职责。被赋予此角色的员工,将获得这种权利与职责
  • 权限:被赋予访问实体的权利。在本项目中是指访问部门和访问某一个或者某一类员工的权利
  • 用户-角色分配(User-Role Assignment URA):为某个用户指定一个或者多个角色,此员工将获得这些角色所具有权利的集合
  • 角色-权限分配(Role-Permission Assignment RPA):将权限分配给角色,一个角色可以包含多个权利。在本项目中是指多个访问部门和访问员工的权限


在用户和权限之间引入角色中介,将用户与权限的直接关系弱化为间接关系。
|ˉˉˉ|           |ˉˉ ˉ|          |ˉˉˉˉ ˉˉ|  
| User |---URA---> | Role |<---RPA---| Permission |
|______| |_______| |_____________|

    以角色为中介,首先创建访问每个部门和员工的访问权限,然后创建不同的角色,根据这些角色的职责不同分配不同的权限,建立角色-权限的关系以后,不同的角色将会有不同的权限。根据员工不同的岗位,将对应的角色分配给他们,建立用户-角色关系,这就是RBAC的主要思想。

一个员工可以用户多个角色,一个角色可以用于多个访问权限。RBAC 极大的简化了员工的授权管理。

   由于企业的部门和员工数量很多,在创建权限时管理员不可能去设置每一个权限可以访问的每一个部门和每一个员工。所以本项目将功能和指责类似的部门和员工看作是同一类型,在创建部门和员工的时候为每一个部门和员工分配固有属性type,管理员在设置权限规则的时候只需要指定可访问的部门类型和员工即可。

增量更新

   鉴于移动终端计算资源有限,如网络,存储,电量等,所以通讯录的更新技术应该保证尽量少的资源。另外由于通讯录的特殊性,通讯录的变化需要能实时通知到受影响的在线员工。

基于版本号与变更日志的增量更新模型

   客户端第一次登陆系统以后,我们根据当前登录角色生成对应的通讯录视图,并以当前时间戳作为版本号,返回给客户端。客户端后续通过此版本号增量更新通讯录。

版本号

   版本号有两种:一是客户端当前通讯录版本 c-version, 二是服务端通讯录每一次变化时的版本号s-version

变更日志

   在管理员修改权限规则,或者修改某个岗位的访问规则时会影响大面积员工的通讯录视图,此时如果用增量更新会导致服务器流量异常,因此在这2中情况会清空原来的变更日志并且要求客户端进行一次全量更新。

   如果管理员新增了员工,服务端会根据被修改的员工或者部门type, 反推出所有受影响的员工,然后生成一条变更日志, 例如:
{
"content" : [
{
"cn" : "Lucy.Liu",
"id" : "b4vlfg91scgi1dcju8v0",
"title" : "市场运营负责人",
"email" : [
"lucy.liu@dolores.store"
],
"priority" : "101111",
"name" : "刘小飞",
"telephoneNumber" : "18888888888"
}
],
"createTimestamp" : "20170614063303Z",
"category" : "member",
"action" : "add"
}

客户端在请求增量更新的时候,通过当前登陆ID与版本号,可查找出所有与自己相关的变更日志,然后在客户端数据库中应用这些变更,即可完成同步。

组织架构-Client

   由于现在员工办公设备的多样性,客户端要根据自己公司的情况,覆盖的足够完整,常见的平台有 iOS Android windowsmac linux , 对于后三个平台可以用 Web APP 来覆盖,iOS&Android 用原生的app来提升用户体验。

客户端App主要包括以下功能:
  1. 会话列表
  2. 优秀的聊天界面,历史记录
  3. 组织机构全量/增量更新
  4. 员工个人资料展示


客户端数据库设计

IM数据库设计
 
当前版本使用环信SDK
 
组织架构数据库设计

表设计

客户端组织架构较服务端简单,不关联用户Role,客户端本地存储Staff(员工)和Department(部门)信息:
  • 一个部门可以包含相关子部门和部门员工。该部门员工和部门在视图上处于同级关系。
  • 员工隶属于部门,同一员工可以存在于多个部门。
  • 员工角色用title来表示。


用户在登录客户端成功后,会根据该用户信息创建用户对应的数据库文件,用户表(User)保存用户相关信息,关联该用户staff信息。

客户端组织架构同服务端逻辑。

工作流集成

(TODO)
 
如何使用Dolores

本项目现在已经完成了第一个测试版本,本小节将指导您如何安装使用。

后端数据库

鉴于通讯录对数据库操作的特点多度少写,以及部门之间的树状关系,我们选择LDAP协议来存取数据。

我们有独立的repo来帮助您完成数据库的安装与初始化。请移步这里

组织架构管理

Dolores 初始版本使用Golang实现,大家既可以下载各个平台的可执行包,也可以安装Go语言的开发环境自己编译。

我们有独立的repo来帮助您,运行后端服务。请移步这里

客户端

我们现在有提供一个iOS版的Demo。请移步这里

Done

如果您顺利的完成以上三步,访问 http://localhost:3280 (端口号根据自己的配置,可能会有差异),使用 username: admin, password: dolores 登陆后端管理页面,添加权限规则,添加角色,添加员工、部门,然后使用iOS客户端登陆,就可以愉快的开始聊天啦~
 
负载均衡

(TODO)

多机容灾

(TODO)

LICENSE
 Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

更多信息请前往github项目主页

 
这里我对每个repo做一个简单的介绍


Dolores: 项目简介, 整个项目的架构, 数据库设计等等 你想了解的一切都可以在这里看到
dolores-ios: iOS版demo,可以聊天查看组织架构
dolores-android: 哈哈 还没有,当然我们欢迎各路安卓大牛贡献安卓版demo
organization: 组织架构的创建管理、更新、审计等等核心的东西都在这里啦
dolores-server: 为客户端提供restfull api 与环信服务器集成
dolores-admin: 后台管理网站,用于管理部门员工。一个基于React的webapp还很基础,欢迎各位大牛pr.
dolores-ldap-init: 后台数据库的初始化工具,详情可以查看readme
easemob-resty:对环信rest api的封装,让调用环信api更简单
dolores-avatar:生成类似钉钉那样的默认头像


最后再说一点整个服务端是用go来写的,作者也是golang的初学者,如果代码哪里写的有问题或者架构有问题欢迎大家指正
THE CALM BEFORE THE STORM.
暴风雨前的宁静

ONE MORE THING 最后附上Dolores项目LOGO
当时作者正在二刷 《西部世界》这部剧,所以选择了女主的名字dolores作为整个项目的名字,而这个logo则寓意剧中的host。
687474703a2f2f6f7131696e636b76692e626b742e636c6f7564646e2e636f6d2f646f6c6f726573313032342e706e67.png
6
评论

【新手快速入门】集成环信常见问题+解决方案汇总 常见问题

dujiepeng 发表了文章 • 4866 次浏览 • 2017-05-22 15:51 • 来自相关话题

   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇
APNs证书创建和上传到环信后台头像昵称的简述和处理方案音视频离线推送Demo实现环信服务器聊天记录保存多久?离线收不到好友请求IOS中环信聊天窗口如何实现文件发送和预览的功能ios集成常见问题环信推送的一些常见问题实现名片|红包|话题聊天室等自定义cell
 
Android篇
环信3.0SDK集成小米推送教程EaseUI库中V4、v7包冲突解决方案Android EaseUI里的百度地图替换为高德地图android扩展消息(名片集成)关于会话列表的置顶聊天java.lang.UnsatisfiedLinkError: 的问题android 端 app 后台被杀死收不到消息的解决方案
昵称头像篇
android中如何显示开发者服务器上的昵称和头像 Android中显示头像(接上一篇文章看)环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)IOS中如何显示开发者服务器上的昵称和头像【环信公开课第12期视频回放】-所有关于环信IM昵称头像的问题听这课就够了
 
直播篇
一言不合你就搞个直播APP
 
客服集成
IM-SDK和客服SDK并存开发指南—Android篇IM-SDK和客服SDK并存开发指南—iOS篇
 
开源项目
Android简版demoios简版demo凡信2.0:超仿微信的开源项目 凡信3.0:携直播和红包而来高仿微信:Github 3,515 Star方圆十里:环信编程大赛冠军项目泛聊:定一个小目标写一个QQSlack聊天机器人:一天时间做一个聊天机器人TV视频通话:在电视上视频通话视频通话:Android手机视频通话酷信:ios高仿微信公众号助手:与订阅用户聊天沟通
 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
  查看全部
   这里整理了集成环信的常见问题和一些功能的实现思路,希望能帮助到大家。感谢热心的开发者贡献,大家在观看过程中有不明白的地方欢迎直接跟帖咨询。
 
ios篇

 
Android篇

昵称头像篇

 
直播篇
  1. 一言不合你就搞个直播APP

 
客服集成
  1. IM-SDK和客服SDK并存开发指南—Android篇
  2. IM-SDK和客服SDK并存开发指南—iOS篇

 
开源项目

 
持续更新ing...小伙伴们还有什么想知道欢迎跟帖提出。
 
7
评论

【视频教程+源码】基于环信IM做一个仿微信APP-更新ing 郭永峰 高仿微信 仿微信 环信 XMPP

郭永峰 发表了文章 • 9708 次浏览 • 2017-05-16 15:29 • 来自相关话题

我只是一个普通人,做人要谦虚。
我不是大神,我也不是很厉害的。
天外有天,人外有人。
老师引入门,修行靠个人。
希望能帮助大家,谢谢。
    大家好,我是郭永峰(峰哥) | 一个普通大学计算机系毕业的大学生,曾就职于澳门遊澳集团有限公司,负责大型银联支付业务系统、跨国际短信业务系统(基于电信的SGIP)以及集团内部通讯系统 (负责android和openfire后台二次开发)的主要开发任务,担任项目负责人。13年就职于广州拓谷科技有限公司负责“酷蛙”车联网产品研发及汽车销售产品研发。14来年到17年2月份,就职于国内知名教育机构,负责教学研发及授课的工作。
 
本人现状况:
  
   在家录制教学视频(无收入),搞工作室,组建团队成立公司,如果大家觉得分享内容很喜欢,可以给我打点赏支持本人的工作室,二维码在文末,就不影响阅读了。

 
郭永峰IT教育工作室于2017年4月12日成立!
 
成立原因:

希望把近10年来从事IT互联网的知识分享给大家,包括Linux,WindowServer,Java,PHP,Android,iOS,H5等等等。
 

进入正题,本套课程基于环信IM教大家如何做一个类似微信的APP,只用于技术交流,请勿用于任何商业用途。
4月12号成立工作室,现在18号,过了一个星期一个星期录了5天的环信教程视频,我将放在网盘免费分享环信的教程视频主要是针对有开发经验者教程主要是使用环信来模仿微信来做一个即时通讯的案例课程主要是先讲socket基础 -> 环信 ->自定义协议希望这些教程视频能帮助大家,对即时通讯、socket和自定义协议有个较深入的了解同时能希望大家在面试时,在即时通讯这块不在陌生
  持续更新

第一阶段:即时通讯的了解和微信APP开发前的准备!

【视频教程+源码】基于环信IM做一个仿微信APP-01.即时通讯简介(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-02.XMPP简介(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-03.XMPP实现即时通信的准备工作(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-04.环信简介(了解) 

【视频教程+源码】基于环信IM做一个仿微信APP-05.集成环信的前提准备(掌握)
 
【视频教程+源码】基于环信IM做一个仿微信APP-06.环信SDK的版本的区别(掌握)

【视频教程+源码】基于环信IM做一个仿微信APP-07.微信-项目创建及代码目录结构规范(MVC)

【视频教程+源码】基于环信IM做一个仿微信APP-08.微信-集成环信SDK

【视频教程+源码】基于环信IM做一个仿微信APP-09.微信-登录界面排版

【视频教程+源码】基于环信IM做一个仿微信APP-10.微信-主界面搭建

【视频教程+源码】基于环信IM做一个仿微信APP-11.微信-注册功能

【视频教程+源码】基于环信IM做一个仿微信APP- 12.微信-登录功能

【视频教程+源码】基于环信IM做一个仿微信APP- 13.微信-自动登录

【视频教程+源码】基于环信IM做一个仿微信APP- 14.微信-主动退出
 
【视频教程+源码】基于环信IM做一个仿微信APP-15.微信-在其它设备登录
 
整个项目源码,git地址https://github.com/mayaole/fWeiXin

 微信打赏






支付宝打赏






谢谢大家的支持,个人微信号清扫描下面张图






 
郭永峰IT交流QQ群请加:596441895 查看全部
我只是一个普通人,做人要谦虚。
我不是大神,我也不是很厉害的。
天外有天,人外有人。
老师引入门,修行靠个人。
希望能帮助大家,谢谢。

    大家好,我是郭永峰(峰哥) | 一个普通大学计算机系毕业的大学生,曾就职于澳门遊澳集团有限公司,负责大型银联支付业务系统、跨国际短信业务系统(基于电信的SGIP)以及集团内部通讯系统 (负责android和openfire后台二次开发)的主要开发任务,担任项目负责人。13年就职于广州拓谷科技有限公司负责“酷蛙”车联网产品研发及汽车销售产品研发。14来年到17年2月份,就职于国内知名教育机构,负责教学研发及授课的工作。
 
本人现状况:
  
   在家录制教学视频(无收入),搞工作室,组建团队成立公司,如果大家觉得分享内容很喜欢,可以给我打点赏支持本人的工作室,二维码在文末,就不影响阅读了。

 
郭永峰IT教育工作室于2017年4月12日成立!
 
成立原因:

希望把近10年来从事IT互联网的知识分享给大家,包括Linux,WindowServer,Java,PHP,Android,iOS,H5等等等。
 

进入正题,本套课程基于环信IM教大家如何做一个类似微信的APP,只用于技术交流,请勿用于任何商业用途。
  1. 4月12号成立工作室,现在18号,过了一个星期
  2. 一个星期录了5天的环信教程视频,我将放在网盘免费分享
  3. 环信的教程视频主要是针对有开发经验者
  4. 教程主要是使用环信来模仿微信来做一个即时通讯的案例
  5. 课程主要是先讲socket基础 -> 环信 ->自定义协议
  6. 希望这些教程视频能帮助大家,对即时通讯、socket和自定义协议有个较深入的了解
  7. 同时能希望大家在面试时,在即时通讯这块不在陌生

  持续更新

第一阶段:即时通讯的了解和微信APP开发前的准备!

【视频教程+源码】基于环信IM做一个仿微信APP-01.即时通讯简介(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-02.XMPP简介(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-03.XMPP实现即时通信的准备工作(了解)

【视频教程+源码】基于环信IM做一个仿微信APP-04.环信简介(了解) 

【视频教程+源码】基于环信IM做一个仿微信APP-05.集成环信的前提准备(掌握)
 
【视频教程+源码】基于环信IM做一个仿微信APP-06.环信SDK的版本的区别(掌握)

【视频教程+源码】基于环信IM做一个仿微信APP-07.微信-项目创建及代码目录结构规范(MVC)

【视频教程+源码】基于环信IM做一个仿微信APP-08.微信-集成环信SDK

【视频教程+源码】基于环信IM做一个仿微信APP-09.微信-登录界面排版

【视频教程+源码】基于环信IM做一个仿微信APP-10.微信-主界面搭建

【视频教程+源码】基于环信IM做一个仿微信APP-11.微信-注册功能

【视频教程+源码】基于环信IM做一个仿微信APP- 12.微信-登录功能

【视频教程+源码】基于环信IM做一个仿微信APP- 13.微信-自动登录

【视频教程+源码】基于环信IM做一个仿微信APP- 14.微信-主动退出
 
【视频教程+源码】基于环信IM做一个仿微信APP-15.微信-在其它设备登录
 
整个项目源码,git地址https://github.com/mayaole/fWeiXin

 微信打赏

微信.png


支付宝打赏

支付宝.png


谢谢大家的支持,个人微信号清扫描下面张图

个人.png


 
郭永峰IT交流QQ群请加:596441895
0
回复

iOS-环信即时聊天发送图片时,长图和截图查看大图时不清晰怎么处理? 环信_iOS

回复

柚子姑娘 发起了问题 • 1 人关注 • 17 次浏览 • 2017-08-22 15:33 • 来自相关话题

0
回复

iOS 环信的聊天列表有时候加载不出来 环信_iOS

回复

夜色朦胧月萌萌 发起了问题 • 1 人关注 • 29 次浏览 • 2017-08-22 09:33 • 来自相关话题

0
回复

微信小程序DEMO,程序崩溃。 微信小程序崩溃

回复

loongxun 发起了问题 • 1 人关注 • 36 次浏览 • 2017-08-21 15:56 • 来自相关话题

0
回复

android客户信息环信后台获取不了 环信移动客服 环信_RestAPI 环信_Android

回复

近夜之星 发起了问题 • 1 人关注 • 48 次浏览 • 2017-08-20 16:54 • 来自相关话题

0
回复

要办理签证才能去缅甸皇家国际吗? 缅甸皇家国际

回复

了無痕 发起了问题 • 1 人关注 • 50 次浏览 • 2017-08-18 15:07 • 来自相关话题

0
回复

没太搞懂为什么不能用UUID来集成,给出的正则明明是允许的 环信_RestAPI

回复

zhongliang 发起了问题 • 1 人关注 • 47 次浏览 • 2017-08-18 12:09 • 来自相关话题

0
评论

该用哪种技术或框架来开发 选型 框架

chenpro 发表了文章 • 55 次浏览 • 2017-08-18 11:00 • 来自相关话题

学海无涯

最近,常常被人问到你团队有用甚幺新技术或是框架去开发?或是,我们因该要用什幺新技术和选哪一个框架去开发,这系统比较好?用AngualrJS好像不错。现在很热门,采用SPA开发网页好像可以节省带宽,使得整体反应相当快速…等。突然觉得在这技术爆炸年代,让开发变得很不单纯,又当微软宣布.NET走向开源之后,不管在前端(前端Framework更是雨后春笋般出现)或后端的技术开发,或是新的框架的诞生,真是多到不知道该怎样去选择才好,

有些时候,感觉不去”使用”这些新的语言或是新的开发方式去开发系统,就好像是落伍或是跟不上时代,又或是外界媒体不段在洗脑或是传达某些技术,感觉使用这个才是王道。(注意,这边我是用”使用”一词。因为,学习跟使用 这两者是不同),确实,当时代不断改变,人是必须不断去学习各种程序和新技术所带来的冲击,至少当你是走在信息这个产业时,必须要有的领悟。回到该用那种技术或框架开发系统这一个问题,我个人觉得如果你本身不是公司老板或是在公司的政策强迫下,在使用新技术去开发可以从下面三个层面去思考,

解决问题

这一层面主要是从商业或是业务需求面去看。我认为不管那一种的新技术或是新框架的诞生,都是为了解决当时的一些需求或是某开发上的问题所衍生出来的。因此,当我们去开发一套系统时候,不该一昧认为最新的技术就是最好用的,而是,必须先做事前的分析,了解目前的业务需求举例来说,如果你的系统,未来只会去服务十个用户,而它的目的只是让用户加速他日常工作或是简化一些流程(别笑,很多in House系统就是这样),单纯用自己拿手的WebForm开发就可以解决用户问题?是否有必要采用SPA方式去开发?又或是,当大家都在谈论开发要搭配AngularJS,但,整体需求面看不到,导入AngularJS会解决业务或是架构问题时,是否单纯搭配Javascrip或Jquery就可以呢?不过,如果今天你的系统必须要高性能高可扩充性且需要降低网页传输量,那请使用SPA,甚至ReactJS去开发,或是,一些可以解决这方面的技术,即使困难度很高,还是有其导入必要性。一切都必须从需求和解决问题去思考该用哪一种技术。

开发ROI

这一层面主要是从系统开发过程的投资报酬率去看开发系统的ROI评估,这一点很重要,一套不熟悉的框架或是技术的导入,对一般人来说都是一个高成本的投入,像是在新创团队中,能快速将自己的发想或是解决问题的方法变成产品,并赶紧丢到市场验证,验证回来后再持续快速修正,这才是最有效益的,投入一个你都不熟悉的技术或是框架,等你摸完再开发出来,此时,你的投资回报率已经不见了,因为,你的可能主意已经被别人捷足先登了。而在一般企业中,MIS往往都被时程压着打,甚至,从分析到开发测试,往往只有一两个月就要完成,且通常还会被用系统产出率决定MIS的绩效,与其导入一个比完成需求还复杂的技术或是框架时,还不如采用合宜的目前需求的框架去开发,那样怎样才知道要用那些技术或是框架才合宜呢?这就是开发人员还是要持续的原因有时候学习的广会比学习的深还有帮助

维护成本

这一层面则是从团队文化去看对于开发In House系统来说这是很重要的考量,且往往又是很不好拿捏,就拿内部系统开发来说好了,内部系统大都是像是肝一样,辛苦但往往会被忽视。而且,内部系统不是说时间到就可以升级版本,或是,旧版本就不去维护。也因此,久而久之,可以发现MIS要了解的语言从 VB6到.NET 5都有,还不包括一些林林种种的分支技术。再者,加上公司人员来来去去,系统的Owner不断改变,需求不断增加(新需求往往会被建筑在多年前的系统上)维护成本就越来越高了。从维护成本思考下,就必须了解整个团队对于该技术与框架的熟悉度。若只是,团队中只有一两个人对此框架熟悉,大部分都不熟悉时候,就要强行导入,后续可能就会垫加系统的维护成本了,毕竟,当系统上线有异常时候,团队有办法去维护吗?可被允许的down time是多少?又或是当商业需求改变,要立即增加或是修改系统功能时,所要付出的成本是多少。从以上角度思考,是否要此刻运用此技术或是框架到团队中就是需要评估的,又或是该逐步提升团队技能或是熟悉度再做考量呢?

 

技术 这东西有如两面刃,它可以带来很大效益,同时,也会伴随许多风险,唯有不断学习和改善才可以去降低使用风险,而无论是架构设计或是技术框架的导入,还是必须依附在商业与业务需求,过多或是不及架构或是一昧听从潮流而去使用的技术,对于产品和系统的帮助都不大。

从团队角度来看,若是成员技术差异很大时候,与其采用一些新技术,还不如先提升成员的技术力,让大家彼此的能力差距缩小,纵使使用一些旧有技术又何妨呢?现在已经是不缺选择使用框架与技术的世代,而是要怎样选择的才是有助于整体开发的思维了。

以上只是个人长期所处产业的开发经验与看法之分享
 
转载自:该用哪种技术或框架来开发 | Teambition知识文档 查看全部
学海无涯

最近,常常被人问到你团队有用甚幺新技术或是框架去开发?或是,我们因该要用什幺新技术和选哪一个框架去开发,这系统比较好?用AngualrJS好像不错。现在很热门,采用SPA开发网页好像可以节省带宽,使得整体反应相当快速…等。突然觉得在这技术爆炸年代,让开发变得很不单纯,又当微软宣布.NET走向开源之后,不管在前端(前端Framework更是雨后春笋般出现)或后端的技术开发,或是新的框架的诞生,真是多到不知道该怎样去选择才好,

有些时候,感觉不去”使用”这些新的语言或是新的开发方式去开发系统,就好像是落伍或是跟不上时代,又或是外界媒体不段在洗脑或是传达某些技术,感觉使用这个才是王道。(注意,这边我是用”使用”一词。因为,学习跟使用 这两者是不同),确实,当时代不断改变,人是必须不断去学习各种程序和新技术所带来的冲击,至少当你是走在信息这个产业时,必须要有的领悟。回到该用那种技术或框架开发系统这一个问题,我个人觉得如果你本身不是公司老板或是在公司的政策强迫下,在使用新技术去开发可以从下面三个层面去思考,

解决问题

这一层面主要是从商业或是业务需求面去看。我认为不管那一种的新技术或是新框架的诞生,都是为了解决当时的一些需求或是某开发上的问题所衍生出来的。因此,当我们去开发一套系统时候,不该一昧认为最新的技术就是最好用的,而是,必须先做事前的分析,了解目前的业务需求举例来说,如果你的系统,未来只会去服务十个用户,而它的目的只是让用户加速他日常工作或是简化一些流程(别笑,很多in House系统就是这样),单纯用自己拿手的WebForm开发就可以解决用户问题?是否有必要采用SPA方式去开发?又或是,当大家都在谈论开发要搭配AngularJS,但,整体需求面看不到,导入AngularJS会解决业务或是架构问题时,是否单纯搭配Javascrip或Jquery就可以呢?不过,如果今天你的系统必须要高性能高可扩充性且需要降低网页传输量,那请使用SPA,甚至ReactJS去开发,或是,一些可以解决这方面的技术,即使困难度很高,还是有其导入必要性。一切都必须从需求和解决问题去思考该用哪一种技术。

开发ROI

这一层面主要是从系统开发过程的投资报酬率去看开发系统的ROI评估,这一点很重要,一套不熟悉的框架或是技术的导入,对一般人来说都是一个高成本的投入,像是在新创团队中,能快速将自己的发想或是解决问题的方法变成产品,并赶紧丢到市场验证,验证回来后再持续快速修正,这才是最有效益的,投入一个你都不熟悉的技术或是框架,等你摸完再开发出来,此时,你的投资回报率已经不见了,因为,你的可能主意已经被别人捷足先登了。而在一般企业中,MIS往往都被时程压着打,甚至,从分析到开发测试,往往只有一两个月就要完成,且通常还会被用系统产出率决定MIS的绩效,与其导入一个比完成需求还复杂的技术或是框架时,还不如采用合宜的目前需求的框架去开发,那样怎样才知道要用那些技术或是框架才合宜呢?这就是开发人员还是要持续的原因有时候学习的广会比学习的深还有帮助

维护成本

这一层面则是从团队文化去看对于开发In House系统来说这是很重要的考量,且往往又是很不好拿捏,就拿内部系统开发来说好了,内部系统大都是像是肝一样,辛苦但往往会被忽视。而且,内部系统不是说时间到就可以升级版本,或是,旧版本就不去维护。也因此,久而久之,可以发现MIS要了解的语言从 VB6到.NET 5都有,还不包括一些林林种种的分支技术。再者,加上公司人员来来去去,系统的Owner不断改变,需求不断增加(新需求往往会被建筑在多年前的系统上)维护成本就越来越高了。从维护成本思考下,就必须了解整个团队对于该技术与框架的熟悉度。若只是,团队中只有一两个人对此框架熟悉,大部分都不熟悉时候,就要强行导入,后续可能就会垫加系统的维护成本了,毕竟,当系统上线有异常时候,团队有办法去维护吗?可被允许的down time是多少?又或是当商业需求改变,要立即增加或是修改系统功能时,所要付出的成本是多少。从以上角度思考,是否要此刻运用此技术或是框架到团队中就是需要评估的,又或是该逐步提升团队技能或是熟悉度再做考量呢?

 

技术 这东西有如两面刃,它可以带来很大效益,同时,也会伴随许多风险,唯有不断学习和改善才可以去降低使用风险,而无论是架构设计或是技术框架的导入,还是必须依附在商业与业务需求,过多或是不及架构或是一昧听从潮流而去使用的技术,对于产品和系统的帮助都不大。

从团队角度来看,若是成员技术差异很大时候,与其采用一些新技术,还不如先提升成员的技术力,让大家彼此的能力差距缩小,纵使使用一些旧有技术又何妨呢?现在已经是不缺选择使用框架与技术的世代,而是要怎样选择的才是有助于整体开发的思维了。

以上只是个人长期所处产业的开发经验与看法之分享
 
转载自:该用哪种技术或框架来开发 | Teambition知识文档
0
回复

环信微信小程序离线消息丢失 环信_WebIM 环信_Android 环信_RestAPI

回复

发起了问题 • 1 人关注 • 66 次浏览 • 2017-08-17 19:57 • 来自相关话题

0
回复

ReactNative调用WebIM.conn.listen没有反应 reactnative

回复

yubo725 发起了问题 • 1 人关注 • 61 次浏览 • 2017-08-17 15:47 • 来自相关话题

0
回复

[NSBundle initWithURL:]: nil URL argument' 环信_iOS ios 3.2.3 iOS 环信 ios 导入sdk问题 iOS

回复

yong123 发起了问题 • 1 人关注 • 54 次浏览 • 2017-08-16 16:51 • 来自相关话题

0
评论

【环信征文】程序员如何成为别人的男朋友 imgeek

东风玖哥 发表了文章 • 34 次浏览 • 2017-08-16 10:49 • 来自相关话题

这个世界上程序员数量很多,有女朋友的程序员在其中的比例却很少。究其原因,不外乎大多数程序员根本不知道怎么才能成为别人的男朋友。成为别人的男朋友对于富二代和拆迁户很容易,而对于程序员却很难,“潘驴邓小闲”五要素缺一不可。


第一要素“潘”指的是貌若潘安。

程序员素以不修边幅出名,着装仪表各种混搭:发际线像清穿剧里的阿哥,黑眼圈像动物园里的熊猫,上半身的格子衫、冲锋衣像送外卖的骑手,下半身的大裤衩、人字拖像索马里的海盗……这是典型的注孤生打扮。

为了改变妹子们对广大程序员朋友们的刻板印象,我制定了一份程序员外观改造计划,实施之后你也会变得像《微微一笑很倾城》里的肖奈一样帅:

(1)桌子上摆一盆多汁的多肉植物,比如芦荟。电脑显示器辐射都脸部皮肤危害巨大,多肉植物能吸收大量辐射,而且当程序员感觉脸部皮肤干涩的时候可以随手掰掉一块,拿天然的芦荟胶抹自己一脸。

(2)抽屉里常备一把木梳。脑力劳动会造成头部温度过高;并且头部血液供应大脑,导致头皮供血不足;这些都是让程序员聪明绝顶的罪魁祸首。如果在等待编译或者sync的时候用木梳按摩自己的头皮,会刺激毛囊上皮细胞,抑制毛囊进入休止期,让程序员的头发一如既往的茂盛。

(3)买一些时尚的衣服。俗话说“人靠衣装”,衣服的时尚或邋遢会对一个人的外观造成决定性的影响,因此没事常去商城转转,搭配几件经典复古风或者街头休闲风的衣服,能把颜值和魅力提高不止一个档次。

(4)清空收藏夹里没有备注的链接,删除硬盘里的隐藏文件。国家一级演员吴刚表情光明磊落的时候是耿直纯真的市委书记李达康,面目笑里藏刀的时候是阴险狡诈的军统特务陆桥山——气质是一个人外表的重要组成部分,少看点不文明的视频,脸色就不那么枯槁了;少想点不健康的故事,眼神也就不那么猥琐了。


第二要素“驴”指的是身体像驴一样健壮。

程序员是典型的脑力工作者,在充满电脑辐射的室内环境中久坐不动会导致严重的大脑发达、四肢简单的亚健康症状。程序员加班猝死已经不再是新闻,“但愿有头生白发,何忧无地觅黄金”,我们不能为了忙于工作牺牲健康。对于危害程序员健康的几大职业病,我们应该对症下药:

(1)肾结石、前列腺炎。下半身的疾病基本都是久坐不动导致的,最简单的办法就是站立式编程,最好桌子下面放一个跑步机;没有条件的程序员可以在工作时多喝水,这样有助于增加起身上厕所的次数。

(2)肩周炎、颈椎病。程序员的职业生涯读的最后一本书常常是《颈椎病康复指南》,因为屏幕不一定正对着人脸,所以程序员不得不弯腰驼背。如果不能定制桌子,那么可以坐能调节高度的人体工程学座椅,让你只有在保持正确坐姿的情况下才能正对屏幕。没有条件的程序员可以拿几本旧字典把显示器垫高。

(3)失眠、肥胖、骨质疏松。脑力劳动者的运动量普遍偏少,为了避免失眠、肥胖、骨质疏松,程序员可以在夜间做瑜伽、体操、太极拳之类的有氧运动。下班早的话可以跑跑步打打球,但加班到深夜就千万不要做任何剧烈运动,容易猝死。


第三要素“邓”指的是像邓通一样有钱。

程序员账面收入很高,但增量优势在绝对的存量都是浮云。我曾经卧底某一线城市Android千人群,1000人中没一个是有房子的本地人。为了使自己在资产上的劣势不太明显,增加8小时外的收入至关重要。

(1)程序员赚外快最直接的方式就是做一个接单的威客。但需要注意的是,写出客户满意的软件很容易,但找到收到满意的软件之后和你说自己很满意并且乐意付费的客户很难。

(2)录制教学视频。利用自己编程的经验录制教学视频,放在网站上供人付费下载,这种方式就像一本万利的培训机构一样,赚那些觉得程序员是一个“整天坐在办公室玩电脑就有工资的工作”的人的钱。

(3)译书或著书。如果你属于同时精通编程和外语,或者博客阅读量和粉丝数巨大的IT红人,那么版税就是你最重要的被动收入。

(4)前三样都很耗时,如果你想通过一种短平快的方式赚取外快,可以向imGeek投稿。只要你写一篇关键词为“环信”、“移动开发”、“人工智能”等相关的文章,就有可能获得50~500元现金奖励。



第四要素“小”指的是脾气小,并对女性体贴入微。

程序员常常遇到客户催逼进度或者产品经理乱改需求的情况,一来二去就变得急躁易怒。再加上程序员与电脑打交道比与人打交道多,因此也不容易对女性体贴入微。

根治程序员常发脾气的毛病不用医生开药方,用机械键盘即可痊愈,越沉重、价格越昂贵的机械键盘疗效越好,HHKB最佳,国产的狼蛛鬼王亦可。

软件工程专业学生Nerd因为大学前三年贪玩LOL不好好学习,基础松松垮垮,概念一知半解,导致大四做毕业设计时常常感觉力不从心,于是常常借口“释放压力”更加沉迷LOL。Nerd搞毕业设计遇到瓶颈的时候,其实谁都知道大多数是玩LOL被猪队友坑了的时候就发脾气,拿键盘砸桌子,在外实习的室友每周回宿舍都能看到一屋子键盘的碎片。好在校园里电子产品商店的东西便宜,键盘20块钱就能买。有一天Nerd过生日,室友送给Nerd一副电竞专用的狼蛛鬼王键鼠套装。Nerd又一次听到“defeat”的声音的时候,条件反射一般抡起了键盘,只不过在砸向桌子的一瞬间住手了——他首先想到的是这个键盘砸坏了之后20块钱买不来新的,然后又想到了1kg的钢板砸下去桌子也碎了。

Nerd脾气变小了以后,身边很快就围过来一群妹子,他终于顺利脱单。


第五要素“闲”指的是有大把的休闲时间。

程序员工资虽高,可这都是默认包含加班费的,因此休闲时间常常不能得到保障。但陪妹子的时间就像北漂地下室蚁族程序员的牙膏一样,挤不出来拿擀面杖也能擀出来。

在8小时之内要合理利用设计模式。每天拿出一小时学习设计模式,第二天可以节省一小时复制粘贴高耦合度代码的时间。但需要注意很多设计模式都是牺牲运行效率换开发速度,因此并非所有设计模式都适合对性能要求高或者硬件质量严苛的软件。

在8小时之外要减少无用社交。积极回答IT新人的问题是一个好习惯,谁知道隔着屏幕的那个人是不是3年前的自己。不过百度前两页就有答案的问题就不要回答了,不要把时间浪费在不值得帮助的人身上。
  查看全部
这个世界上程序员数量很多,有女朋友的程序员在其中的比例却很少。究其原因,不外乎大多数程序员根本不知道怎么才能成为别人的男朋友。成为别人的男朋友对于富二代和拆迁户很容易,而对于程序员却很难,“潘驴邓小闲”五要素缺一不可。


第一要素“潘”指的是貌若潘安。

程序员素以不修边幅出名,着装仪表各种混搭:发际线像清穿剧里的阿哥,黑眼圈像动物园里的熊猫,上半身的格子衫、冲锋衣像送外卖的骑手,下半身的大裤衩、人字拖像索马里的海盗……这是典型的注孤生打扮。

为了改变妹子们对广大程序员朋友们的刻板印象,我制定了一份程序员外观改造计划,实施之后你也会变得像《微微一笑很倾城》里的肖奈一样帅:

(1)桌子上摆一盆多汁的多肉植物,比如芦荟。电脑显示器辐射都脸部皮肤危害巨大,多肉植物能吸收大量辐射,而且当程序员感觉脸部皮肤干涩的时候可以随手掰掉一块,拿天然的芦荟胶抹自己一脸。

(2)抽屉里常备一把木梳。脑力劳动会造成头部温度过高;并且头部血液供应大脑,导致头皮供血不足;这些都是让程序员聪明绝顶的罪魁祸首。如果在等待编译或者sync的时候用木梳按摩自己的头皮,会刺激毛囊上皮细胞,抑制毛囊进入休止期,让程序员的头发一如既往的茂盛。

(3)买一些时尚的衣服。俗话说“人靠衣装”,衣服的时尚或邋遢会对一个人的外观造成决定性的影响,因此没事常去商城转转,搭配几件经典复古风或者街头休闲风的衣服,能把颜值和魅力提高不止一个档次。

(4)清空收藏夹里没有备注的链接,删除硬盘里的隐藏文件。国家一级演员吴刚表情光明磊落的时候是耿直纯真的市委书记李达康,面目笑里藏刀的时候是阴险狡诈的军统特务陆桥山——气质是一个人外表的重要组成部分,少看点不文明的视频,脸色就不那么枯槁了;少想点不健康的故事,眼神也就不那么猥琐了。


第二要素“驴”指的是身体像驴一样健壮。

程序员是典型的脑力工作者,在充满电脑辐射的室内环境中久坐不动会导致严重的大脑发达、四肢简单的亚健康症状。程序员加班猝死已经不再是新闻,“但愿有头生白发,何忧无地觅黄金”,我们不能为了忙于工作牺牲健康。对于危害程序员健康的几大职业病,我们应该对症下药:

(1)肾结石、前列腺炎。下半身的疾病基本都是久坐不动导致的,最简单的办法就是站立式编程,最好桌子下面放一个跑步机;没有条件的程序员可以在工作时多喝水,这样有助于增加起身上厕所的次数。

(2)肩周炎、颈椎病。程序员的职业生涯读的最后一本书常常是《颈椎病康复指南》,因为屏幕不一定正对着人脸,所以程序员不得不弯腰驼背。如果不能定制桌子,那么可以坐能调节高度的人体工程学座椅,让你只有在保持正确坐姿的情况下才能正对屏幕。没有条件的程序员可以拿几本旧字典把显示器垫高。

(3)失眠、肥胖、骨质疏松。脑力劳动者的运动量普遍偏少,为了避免失眠、肥胖、骨质疏松,程序员可以在夜间做瑜伽、体操、太极拳之类的有氧运动。下班早的话可以跑跑步打打球,但加班到深夜就千万不要做任何剧烈运动,容易猝死。


第三要素“邓”指的是像邓通一样有钱。

程序员账面收入很高,但增量优势在绝对的存量都是浮云。我曾经卧底某一线城市Android千人群,1000人中没一个是有房子的本地人。为了使自己在资产上的劣势不太明显,增加8小时外的收入至关重要。

(1)程序员赚外快最直接的方式就是做一个接单的威客。但需要注意的是,写出客户满意的软件很容易,但找到收到满意的软件之后和你说自己很满意并且乐意付费的客户很难。

(2)录制教学视频。利用自己编程的经验录制教学视频,放在网站上供人付费下载,这种方式就像一本万利的培训机构一样,赚那些觉得程序员是一个“整天坐在办公室玩电脑就有工资的工作”的人的钱。

(3)译书或著书。如果你属于同时精通编程和外语,或者博客阅读量和粉丝数巨大的IT红人,那么版税就是你最重要的被动收入。

(4)前三样都很耗时,如果你想通过一种短平快的方式赚取外快,可以向imGeek投稿。只要你写一篇关键词为“环信”、“移动开发”、“人工智能”等相关的文章,就有可能获得50~500元现金奖励。



第四要素“小”指的是脾气小,并对女性体贴入微。

程序员常常遇到客户催逼进度或者产品经理乱改需求的情况,一来二去就变得急躁易怒。再加上程序员与电脑打交道比与人打交道多,因此也不容易对女性体贴入微。

根治程序员常发脾气的毛病不用医生开药方,用机械键盘即可痊愈,越沉重、价格越昂贵的机械键盘疗效越好,HHKB最佳,国产的狼蛛鬼王亦可。

软件工程专业学生Nerd因为大学前三年贪玩LOL不好好学习,基础松松垮垮,概念一知半解,导致大四做毕业设计时常常感觉力不从心,于是常常借口“释放压力”更加沉迷LOL。Nerd搞毕业设计遇到瓶颈的时候,其实谁都知道大多数是玩LOL被猪队友坑了的时候就发脾气,拿键盘砸桌子,在外实习的室友每周回宿舍都能看到一屋子键盘的碎片。好在校园里电子产品商店的东西便宜,键盘20块钱就能买。有一天Nerd过生日,室友送给Nerd一副电竞专用的狼蛛鬼王键鼠套装。Nerd又一次听到“defeat”的声音的时候,条件反射一般抡起了键盘,只不过在砸向桌子的一瞬间住手了——他首先想到的是这个键盘砸坏了之后20块钱买不来新的,然后又想到了1kg的钢板砸下去桌子也碎了。

Nerd脾气变小了以后,身边很快就围过来一群妹子,他终于顺利脱单。


第五要素“闲”指的是有大把的休闲时间。

程序员工资虽高,可这都是默认包含加班费的,因此休闲时间常常不能得到保障。但陪妹子的时间就像北漂地下室蚁族程序员的牙膏一样,挤不出来拿擀面杖也能擀出来。

在8小时之内要合理利用设计模式。每天拿出一小时学习设计模式,第二天可以节省一小时复制粘贴高耦合度代码的时间。但需要注意很多设计模式都是牺牲运行效率换开发速度,因此并非所有设计模式都适合对性能要求高或者硬件质量严苛的软件。

在8小时之外要减少无用社交。积极回答IT新人的问题是一个好习惯,谁知道隔着屏幕的那个人是不是3年前的自己。不过百度前两页就有答案的问题就不要回答了,不要把时间浪费在不值得帮助的人身上。
 
0
回复

如何处理环信账号互踢 环信 ios

回复

佳期如梦 发起了问题 • 1 人关注 • 79 次浏览 • 2017-08-15 17:37 • 来自相关话题

0
评论

个推TechDay-基于容器的微服务架构实践 行业活动

beyond 发表了文章 • 24 次浏览 • 2017-08-15 16:46 • 来自相关话题

报名地址:活动报名 查看全部
QQ图片20170815164443.jpg

30442782453566008.jpeg


30802784413319012.jpeg


报名地址:活动报名
0
回复

EaseTitleBar错误 环信_Android

回复

跳跳 发起了问题 • 1 人关注 • 65 次浏览 • 2017-08-15 14:19 • 来自相关话题

0
回复

使用vue搭建web端无法接收图片,可以接受文本消息,小弟才疏学浅,希望有大牛赐教。 Web IM

回复

可乐. 发起了问题 • 1 人关注 • 61 次浏览 • 2017-08-15 14:11 • 来自相关话题

0
评论

基于办公的 IM 的基础设计 IM OA

beyond 发表了文章 • 26 次浏览 • 2017-08-15 10:44 • 来自相关话题

   现在的 IM 在设计上是基于会话的,多个人可以组成一个会话,相当于一个聊天室,当一个人加入到一个会话后,就可以看到从加入开始之后这个聊天室里所有参与人的发言。有的 IM 会把两人对话也抽象成同一个东西,也可能出于优化的考虑把双人对话特殊处理。

所以,这些 IM 在操作界面上会有一个会话列表:表现出来会是联系人名单、聊天群列表等等。选中会话列表中的项目,进入会话查看聊天记录、发言,就是这类 IM 的使用逻辑。

我认为,这种对即时通讯的抽象方式,其实是不适合办公环境的。和日常个人社交环境不同,办公群体其实是一个相对关系密切的团体,我们通常不会拉黑一个同事不让他给你发消息,也不会拒收公司发的通告,也不会因为一个同事平常不和你打交道就拒绝建立联系。项目组里的讨论,也未见得是多么保密的事情,需要防止隔壁组的同事旁听。你也很少会在办公 IM 上和妹子私聊谈人生理想。

我们这几年使用腾讯的 RTX 作为公司办公使用,我就感受到了太多这类设计缺陷。比如,有同事找我有事,我忽略了他的私聊信息;找人一般在对方活跃的项目群组里吼;程序群沦为了日常扯淡的位置,常常同时讨论着不同的问题,线索及其混乱。“群”这个设计,我在很多年前就思考过 ,我一直觉得需要在根本上换个角度看待社交聊天的需求。

我现在的想法是这样的:

作为办公 IM ,我们不应该基于固定会话(群)来设计,而应该是“通知”和“话题”。

所谓通知,就是有人发起了一条消息,他需要把这条消息传达给某些对象,对象可以是人,也可以是某个组织:比如程序、游戏项目组、等等。

组织并非是群那样的聊天室,而仅仅是一个标签,由人来关注标签,而不是去组织这个聊天室里有多少听众。

而话题,则是由消息或旧话题衍生而来。任何通知消息、话题内部消息,都可以变成一个新话题。话题也可以包含在一则消息里转发给某个对象。

用户的客户端应该把所有的通知按时间线排列在一起,呈现在同一个地方。也就是说,无论是谁给我发消息(默认就是通知)都应该投递在一起,而不是像现在 RTX 那样只是在系统托盘里闪烁提醒、也不是微信 qq 那样,联系人名单上多出一个小红点。

而一旦我回复一个通知消息,其实就把这则通知转化成了一个话题,在时间线上,话题内的消息是归属在一起的。同一时刻,无论你的思维切换多么快,其实在短时间内你只能聚焦在一个话题上,所以客户端界面是很容易表达的,把当前话题展开在主界面(通知的时间线)即可,切换话题后自然可以折叠起来。

话题并不是聊天室、它更像是论坛的帖子。一个话题可以有很多人参与(至少发言一次),更应该支持更多的人浏览。我们不应该按聊天室的思路:用户只有在加入聊天室的那一刻开始,才能收到后续的消息,而应该像论坛那样,他只是打开了这个话题帖,可以随时聊天过去到现在发生的事情。话题内的任何一个消息,都可以由用户展开为新话题,老话题对新话题只是一个引用链接而已,并不需要有层级关系,我们也可以把任意一个话题或尚未转化为话题的消息转发出去,如果有人对他评论,就生成了新话题。

话题是一个有时效性的东西,对于办公来说,如果一个话题超过 8 小时没有新的消息,就可以认为这个话题已经结束了。但是事后我们依然可以对老话题浏览,或是继续讨论,而继续讨论就是生成的一个新话题了。

只要生成话题足够方便,每个用户的主时间线上就只会有不多的通知消息,信息传达更为有效。而管理每天的消息、检索旧消息也有很强的时间线。不像现有的 IM 群聊天,每天的聊天内容会被自然的组织成话题,这些话题上标识了参与人数、归属的组织的 tag 、继承于哪个父话题或通知、经历的时间段、衍生出哪些后续话题,等等。

即使是两个人之间的对话,也同样应该是话题的形式,而不应该把消息直接组织成一长串的聊天历史。话题未必有明确的主题,只是一种更自然的信息聚合形式而已。

对于办公场合来说,有意个最重要的优势:用户群有足够的自律。基于这种自律,我认为上面的思路若实现出来很容易推广使用。

在自律之外,或许还需要一些权限管理。这些权限管理应该是相对松散简单的,主要是限制用户订阅特定组织的 tag (比如一般员工不能订阅管理层的 tag ),限制围观特定话题(比如两人之间的私聊话题默认就是不对第三人开放权限的),话题可以锁定不准转发。权限设置的细节还需要进一步推敲。
 
本文转自云风的BLOG,原文地址http://blog.codingnow.com/ 查看全部
   现在的 IM 在设计上是基于会话的,多个人可以组成一个会话,相当于一个聊天室,当一个人加入到一个会话后,就可以看到从加入开始之后这个聊天室里所有参与人的发言。有的 IM 会把两人对话也抽象成同一个东西,也可能出于优化的考虑把双人对话特殊处理。

所以,这些 IM 在操作界面上会有一个会话列表:表现出来会是联系人名单、聊天群列表等等。选中会话列表中的项目,进入会话查看聊天记录、发言,就是这类 IM 的使用逻辑。

我认为,这种对即时通讯的抽象方式,其实是不适合办公环境的。和日常个人社交环境不同,办公群体其实是一个相对关系密切的团体,我们通常不会拉黑一个同事不让他给你发消息,也不会拒收公司发的通告,也不会因为一个同事平常不和你打交道就拒绝建立联系。项目组里的讨论,也未见得是多么保密的事情,需要防止隔壁组的同事旁听。你也很少会在办公 IM 上和妹子私聊谈人生理想。

我们这几年使用腾讯的 RTX 作为公司办公使用,我就感受到了太多这类设计缺陷。比如,有同事找我有事,我忽略了他的私聊信息;找人一般在对方活跃的项目群组里吼;程序群沦为了日常扯淡的位置,常常同时讨论着不同的问题,线索及其混乱。“群”这个设计,我在很多年前就思考过 ,我一直觉得需要在根本上换个角度看待社交聊天的需求。

我现在的想法是这样的:

作为办公 IM ,我们不应该基于固定会话(群)来设计,而应该是“通知”和“话题”。

所谓通知,就是有人发起了一条消息,他需要把这条消息传达给某些对象,对象可以是人,也可以是某个组织:比如程序、游戏项目组、等等。

组织并非是群那样的聊天室,而仅仅是一个标签,由人来关注标签,而不是去组织这个聊天室里有多少听众。

而话题,则是由消息或旧话题衍生而来。任何通知消息、话题内部消息,都可以变成一个新话题。话题也可以包含在一则消息里转发给某个对象。

用户的客户端应该把所有的通知按时间线排列在一起,呈现在同一个地方。也就是说,无论是谁给我发消息(默认就是通知)都应该投递在一起,而不是像现在 RTX 那样只是在系统托盘里闪烁提醒、也不是微信 qq 那样,联系人名单上多出一个小红点。

而一旦我回复一个通知消息,其实就把这则通知转化成了一个话题,在时间线上,话题内的消息是归属在一起的。同一时刻,无论你的思维切换多么快,其实在短时间内你只能聚焦在一个话题上,所以客户端界面是很容易表达的,把当前话题展开在主界面(通知的时间线)即可,切换话题后自然可以折叠起来。

话题并不是聊天室、它更像是论坛的帖子。一个话题可以有很多人参与(至少发言一次),更应该支持更多的人浏览。我们不应该按聊天室的思路:用户只有在加入聊天室的那一刻开始,才能收到后续的消息,而应该像论坛那样,他只是打开了这个话题帖,可以随时聊天过去到现在发生的事情。话题内的任何一个消息,都可以由用户展开为新话题,老话题对新话题只是一个引用链接而已,并不需要有层级关系,我们也可以把任意一个话题或尚未转化为话题的消息转发出去,如果有人对他评论,就生成了新话题。

话题是一个有时效性的东西,对于办公来说,如果一个话题超过 8 小时没有新的消息,就可以认为这个话题已经结束了。但是事后我们依然可以对老话题浏览,或是继续讨论,而继续讨论就是生成的一个新话题了。

只要生成话题足够方便,每个用户的主时间线上就只会有不多的通知消息,信息传达更为有效。而管理每天的消息、检索旧消息也有很强的时间线。不像现有的 IM 群聊天,每天的聊天内容会被自然的组织成话题,这些话题上标识了参与人数、归属的组织的 tag 、继承于哪个父话题或通知、经历的时间段、衍生出哪些后续话题,等等。

即使是两个人之间的对话,也同样应该是话题的形式,而不应该把消息直接组织成一长串的聊天历史。话题未必有明确的主题,只是一种更自然的信息聚合形式而已。

对于办公场合来说,有意个最重要的优势:用户群有足够的自律。基于这种自律,我认为上面的思路若实现出来很容易推广使用。

在自律之外,或许还需要一些权限管理。这些权限管理应该是相对松散简单的,主要是限制用户订阅特定组织的 tag (比如一般员工不能订阅管理层的 tag ),限制围观特定话题(比如两人之间的私聊话题默认就是不对第三人开放权限的),话题可以锁定不准转发。权限设置的细节还需要进一步推敲。
 
本文转自云风的BLOG,原文地址http://blog.codingnow.com/
0
评论

【移动战略说 · 第一期】智能硬件产品开发从0到1 环信 行业活动

beyond 发表了文章 • 40 次浏览 • 2017-08-14 19:09 • 来自相关话题

   据GSMA预期,到2020年,全球互联设备将突破270亿,移动互联设备有望达到105亿,新的市场机遇将进一步增多。自动上报家中燃气数据、远程开关气阀、精准透明计费、自动调节远程定时控制路灯等,基于新一代物联网的新型智慧产品正在走入我们的生产生活。

   开发一款智能硬件产品涉及的环节很多。本次活动,APICloud联合华强聚丰和智石科技,从样品生产、App开发和近场通讯技术在智能硬件中的应用跟大家分享智能硬件产品如何快速从0到1!
 
活动概况
【活动时间】2017年8月19日(周六),13:30-16:30
【面向人群】制造业企业、智能硬件管理层、产品负责人、技术负责人,其他相关从业者
【活动咨询/合作】请加微信:appdev1,备注819活动议程
【13:30-14:00】签到
【14:00-14:40】如何快速完成样品生产
内容概要:产品硬件开发者希望快速拿到样品,进行方案验证和调试,发现设计问题,快速进行方案修正,以便进入下一开发环节,完成开发工作。怎样解决这些困难?怎样才能让生产环节快速顺利完成样品生产?
【14:40-15:20】自主研发or外包?智能硬件App开发指南
内容概要:现在市场上智能硬件往往需要一款App配合,无论是控制设备还是查看数据。企业不但需要考虑成本,还要兼顾产品体验。本环节APICloud将会为大家介绍App开发技术如何选型;自己招团队与找外包的对比;以及项目准备、开发、测试、上线各个阶段可能遇到的问题和注意事项。
【15:20-16:00】室内精准位置物联网络搭建
【16:00-】幸运抽奖&自由交流分享嘉宾
















报名地址活动报名 查看全部
   据GSMA预期,到2020年,全球互联设备将突破270亿,移动互联设备有望达到105亿,新的市场机遇将进一步增多。自动上报家中燃气数据、远程开关气阀、精准透明计费、自动调节远程定时控制路灯等,基于新一代物联网的新型智慧产品正在走入我们的生产生活。

   开发一款智能硬件产品涉及的环节很多。本次活动,APICloud联合华强聚丰和智石科技,从样品生产、App开发和近场通讯技术在智能硬件中的应用跟大家分享智能硬件产品如何快速从0到1!
 
活动概况
【活动时间】2017年8月19日(周六),13:30-16:30
【面向人群】制造业企业、智能硬件管理层、产品负责人、技术负责人,其他相关从业者
【活动咨询/合作】请加微信:appdev1,备注819
活动议程
【13:30-14:00】签到
【14:00-14:40】如何快速完成样品生产
内容概要:产品硬件开发者希望快速拿到样品,进行方案验证和调试,发现设计问题,快速进行方案修正,以便进入下一开发环节,完成开发工作。怎样解决这些困难?怎样才能让生产环节快速顺利完成样品生产?
【14:40-15:20】自主研发or外包?智能硬件App开发指南
内容概要:现在市场上智能硬件往往需要一款App配合,无论是控制设备还是查看数据。企业不但需要考虑成本,还要兼顾产品体验。本环节APICloud将会为大家介绍App开发技术如何选型;自己招团队与找外包的对比;以及项目准备、开发、测试、上线各个阶段可能遇到的问题和注意事项。
【15:20-16:00】室内精准位置物联网络搭建
【16:00-】幸运抽奖&自由交流
分享嘉宾

30972779689807524.jpeg


30242778644313753.jpg


30852779689957552.jpeg


报名地址活动报名
0
评论

【环信征文】程序员为灾区祈福,我听说过的语言差不多都有了 imgeek

东风玖哥 发表了文章 • 23 次浏览 • 2017-08-14 16:15 • 来自相关话题

8月8日21时19分在四川阿坝九寨沟县发生7.0级地震,地震发生后社会各界纷纷为灾区祈福。使用各种语言的程序员也不甘示弱吗,争先恐后地用自己的语言为灾区祈福。我听说过的语言差不多都有了。

~trace("ActionScript程序员为灾区祈福!");
~TEXT_IO.PUT_LINE ("Ada程序员为灾区祈福!");
~<% Response.Write("ASP程序员为灾区祈福!") %>
~MsgBox(1,'','AutoIt程序员为灾区祈福!')
~BEGIN { print "AWK程序员为灾区祈福!" }
~echo 'Bash程序员为灾区祈福!'
~? "BASIC程序员为灾区祈福!"
~WRITES ("BCPL程序员为灾区祈福")
~Print "BlitzBasic程序员为灾区祈福!"
~print "BOO程序员为灾区祈福!"
~printf("C程序员为灾区祈福!");
~cout << "C++程序员为灾区祈福!"<<endl;
~System.Console.WriteLine("C#程序员为灾区祈福");
~PROCEDURE DIVISION.DISPLAY "COBOL程序员为灾区祈福!".STOP RUN.
~echo Linux Shell程序员为灾区祈福!
~io.put_string("Eiffel程序员为灾区祈福!")
~hello_world() -> io:fwrite("Erlang程序员为灾区祈福!").
~." Forth程序员为灾区祈福!" CR
~WRITE(*,*) 'Fortran程序员为灾区祈福!'
~HTML程序员为灾区祈福!
~System.out.println("Java程序员为灾区祈福!");
~<%=("JSP程序员为灾区祈福!")%>
~(format t "Lisp程序员为灾区祈福!")
~print "Lua程序员为灾区祈福!"
~Print["Mathematica程序员为灾区祈福!"]
~Nuva程序员为灾区祈福!
~NSLog(@"Objective-C程序员为灾区祈福!");
~print_endline "OCaml程序员为灾区祈福!";
~writeln('Pascal程序员为灾区祈福!');
~say "Perl程序员为灾区祈福!";
~<?= "PHP程序员为灾区祈福!"?>~
~write("Pike程序员为灾区祈福!");
~write("Prolog程序员为灾区祈福!").
~#!/usr/bin/env pythonprint("Python程序员为灾区祈福!")
~say "REXX程序员为灾区祈福!"
~#!/usr/bin/rubyputs "Ruby程序员为灾区祈福!"
~Om:"Sbyke Laborana程序员为灾区祈福!"
~(display "Scheme程序员为灾区祈福!")
~sed -ne '1s/.*/sed程序员为灾区祈福/p'
~writeln("Seed7程序员为灾区祈福!");
~Transcript show: 'Smalltalk程序员为灾区祈福!'
~TextWindow.WriteLine("Small Basic程序员为灾区祈福!")
~OUTPUT = "SNOBOL程序员为灾区祈福!"
~print 'SQL程序员为灾区祈福!'
~println("Swift程序员为灾区祈福!")
~#!/usr/local/bin/tclputs "Tcl程序员为灾区祈福!"
~? "TScript程序员为灾区祈福!"
~put "Turing程序员为灾区祈福!"
~<includeonly>UNIX-style shell程序员为灾区祈福!</includeonly>
~ShowMessage('Delphi程序员为灾区祈福!');
~Print "Visual Basic程序员为灾区祈福!"
~? "Visual FoxPro程序员为灾区祈福!"
~QLabel label("X11程序员为灾区祈福!");
~alert("JavaScript程序员为灾区祈福!");
~(PostScript程序员为灾区祈福!) show
~println("Scala程序员为灾区祈福!")
~println("Kotlin程序员为灾区祈福!");
~调试输出(“易语言程序员为灾区祈福!”) 查看全部
8月8日21时19分在四川阿坝九寨沟县发生7.0级地震,地震发生后社会各界纷纷为灾区祈福。使用各种语言的程序员也不甘示弱吗,争先恐后地用自己的语言为灾区祈福。我听说过的语言差不多都有了。

~trace("ActionScript程序员为灾区祈福!");
~TEXT_IO.PUT_LINE ("Ada程序员为灾区祈福!");
~<% Response.Write("ASP程序员为灾区祈福!") %>
~MsgBox(1,'','AutoIt程序员为灾区祈福!')
~BEGIN { print "AWK程序员为灾区祈福!" }
~echo 'Bash程序员为灾区祈福!'
~? "BASIC程序员为灾区祈福!"
~WRITES ("BCPL程序员为灾区祈福")
~Print "BlitzBasic程序员为灾区祈福!"
~print "BOO程序员为灾区祈福!"
~printf("C程序员为灾区祈福!");
~cout << "C++程序员为灾区祈福!"<<endl;
~System.Console.WriteLine("C#程序员为灾区祈福");
~PROCEDURE DIVISION.DISPLAY "COBOL程序员为灾区祈福!".STOP RUN.
~echo Linux Shell程序员为灾区祈福!
~io.put_string("Eiffel程序员为灾区祈福!")
~hello_world() -> io:fwrite("Erlang程序员为灾区祈福!").
~." Forth程序员为灾区祈福!" CR
~WRITE(*,*) 'Fortran程序员为灾区祈福!'
~HTML程序员为灾区祈福!
~System.out.println("Java程序员为灾区祈福!");
~<%=("JSP程序员为灾区祈福!")%>
~(format t "Lisp程序员为灾区祈福!")
~print "Lua程序员为灾区祈福!"
~Print["Mathematica程序员为灾区祈福!"]
~Nuva程序员为灾区祈福!
~NSLog(@"Objective-C程序员为灾区祈福!");
~print_endline "OCaml程序员为灾区祈福!";
~writeln('Pascal程序员为灾区祈福!');
~say "Perl程序员为灾区祈福!";
~<?= "PHP程序员为灾区祈福!"?>~
~write("Pike程序员为灾区祈福!");
~write("Prolog程序员为灾区祈福!").
~#!/usr/bin/env pythonprint("Python程序员为灾区祈福!")
~say "REXX程序员为灾区祈福!"
~#!/usr/bin/rubyputs "Ruby程序员为灾区祈福!"
~Om:"Sbyke Laborana程序员为灾区祈福!"
~(display "Scheme程序员为灾区祈福!")
~sed -ne '1s/.*/sed程序员为灾区祈福/p'
~writeln("Seed7程序员为灾区祈福!");
~Transcript show: 'Smalltalk程序员为灾区祈福!'
~TextWindow.WriteLine("Small Basic程序员为灾区祈福!")
~OUTPUT = "SNOBOL程序员为灾区祈福!"
~print 'SQL程序员为灾区祈福!'
~println("Swift程序员为灾区祈福!")
~#!/usr/local/bin/tclputs "Tcl程序员为灾区祈福!"
~? "TScript程序员为灾区祈福!"
~put "Turing程序员为灾区祈福!"
~<includeonly>UNIX-style shell程序员为灾区祈福!</includeonly>
~ShowMessage('Delphi程序员为灾区祈福!');
~Print "Visual Basic程序员为灾区祈福!"
~? "Visual FoxPro程序员为灾区祈福!"
~QLabel label("X11程序员为灾区祈福!");
~alert("JavaScript程序员为灾区祈福!");
~(PostScript程序员为灾区祈福!) show
~println("Scala程序员为灾区祈福!")
~println("Kotlin程序员为灾区祈福!");
~调试输出(“易语言程序员为灾区祈福!”)
0
回复
0
回复

透传消息收到多条,消息ID不一样,内容是一样的 环信_iOS

回复

richen 发起了问题 • 1 人关注 • 87 次浏览 • 2017-08-12 13:20 • 来自相关话题

0
评论

【环信征文】请不要说自己是Android程序员 移动开发

钢笔布莱恩特 发表了文章 • 50 次浏览 • 2017-08-12 10:31 • 来自相关话题

经常在网上看到各种标题为“Android程序员”、“Java程序员”、“PHP程序员”、“C/C++程序员”的招聘帖子,但这种招聘方式,很难找到好的人才。语言只是一种工具,对一个聪明的程序员来说,用没用过什么工具主要是由他原来的工作需要决定,并不能代表他全部的技能。

软件行业是一个非常强调人的价值的行业,价值就体现在有效的推动产品前进,而语言只是实现这个价值的工具。





一个软件产品往往涉及很多方面的知识,比如网络、数据库、Cache、编译环境工具等。如果这些必要基础知识不足,很难很好的独立完成一个产品的某个部分。

另一方面,一个人的聪明程度、对新知识的好奇心、自我驱动意识、为问题找到最佳解决方案的决心,才是他能不能成为一个好程序员的关键。举个例子,我的一位在某米当cto学长的告诉我,有位同事本来是服务器端以C#语言为主做开发的,完全没有过android开发经验,但他表现出对移动开发很有兴趣,并且在做服务器端开发时,表现出良好的学习能力,后来我把他调到Android组,负责android SDK和APNs相关的工作,结果只花了几个星期,Android SDK的稳定性大幅提升,解决了多个致命问题。

不要仅仅把自己定位为某种语言的程序员,说自己是Java程序员,C#程序员,Python程序员等等。一方面会限制自己的发展,一方面对团队整体的能力提升也不利。几乎所有的语言都有它自己的适用场景,在合适的地方用合适的语言,才能极大的提升生产效率。
正确的做法是,首先要有良好的基础知识,深刻的掌握2~3门语言,然后适用于不同场景的语言要了解概念。基础知识包括各种计算机原理、数据方面的知识,在学校没认真学的,现在有时间也要补充。语言方面比如掌握了C/Java,那C++/Python/Bash/Javascript/CSS等都可以了解下概念,至少要理解在一个完整的产品链里,它们分别适用于哪个环节。

标题用“请不要说自己是Android程序员”没有贬低Android程序员的意思,Java是目前被采用得最多的语言,主要用Java的程序员里,也是有大量牛人。另外,同样的,也不要说自己是C程序员、Python程序员。

 古语说的好,“书中自有黄金屋”。这句话告诉我们书籍是学习知识的第一大根本方向。在与Java相关的专业书籍中,相继记述着关于这门课程的基础知识及进阶内容,先易后难、步步深入,非常适合初学者去学习。
  虚心求教不可少。
往往很多高深莫测,经验丰富,功力深厚的人都埋藏在自己的身边,不容自己去察觉。所以如果大家想要从事Java行业,不妨请假身边从事过该行业的朋友,求学不在高低贵贱之分,只要碰到不懂的地方,就去虚心求教,世界这么大,而且这门知识又是如此让人追捧,比自己懂的人岂止千百?从这些人身上自己一定能够受益匪浅。

现在以Java语言为主的工作非常之多,另外在学校里就以学习Java为主的人也越来越多。但是,从学校就以学习Java这种高级语言为主的人,很多基础知识比较薄弱。高级语言掩盖了太多细节,提高了生产力,但在学习阶段,却不利于基础知识累积。




“Nicholas C. Zakas是全世界最著名的JavaScript程序员之一,之前是在雅虎将近工作5年。三年前,他写了一篇长文,回顾自己的职业生涯,提到七个对他来说最重要的建议,希望对大家的职业生涯有帮助:

1、 不要别人点什么,就做什么

我的第一份工作,只干了8个月,那家公司就倒闭了。我问经理,接下来我该怎么办,他说:"小伙子,千万不要当一个被人点菜的厨师,别人点什么,你就烧什么。不要接受那样一份工作,别人下命令你该干什么,以及怎么干。你要去一个地方,那里的人肯定你对产品的想法,相信你的能力,放手让你去做。"

我从此明白,单单实现一个产品是不够的,你还必须参与决定怎么实现。好的工程师并不仅仅服从命令,而且还给出反馈,帮助产品的拥有者改进它。

2、 推销自己




我进入雅虎公司以后,经理有一天跟我谈话,他觉得我还做得不够。

"你工作得很好,代码看上去不错,很少出Bug。但是,问题是别人都没看到这一点。为了让其他人相信你,你必须首先让别人知道你做了什么。你需要推销自己,引起别人的注意。"

我这才意识到,即使做出了很好的工作,别人都不知道,也没用。做一个角落里静静编码的工程师,并不可取。你的主管会支持你,但是他没法替你宣传。公司的其他人需要明白你的价值,最好的办法就是告诉别人你做了什么。一封简单的Email:"嗨,我完成了XXX,欢迎将你的想法告诉我",就很管用。

3、 学会带领团队
工作几年后,已经没人怀疑我的技术能力了,大家知道我能写出高质量的可靠代码。有一次,我问主管,怎么才能得到提升,他说:"当你的技术能力过关以后,就要考验你与他人相处的能力了。"
于是,我看到了,自己缺乏的是领导能力,如何带领一个团队,有效地与其他人协同工作,取到更大的成果。

4、 生活才是最重要的
有一段时间,我在雅虎公司很有挫折感,对公司的一些做法不认同,经常会对别人发火。我问一个同事,他怎么能对这种事情保持平静,他回答:"你要想通,这一切并不重要。有人提交了烂代码,网站下线了,又怎么样?工作并不是你的整个生活。它们不是真正的问题,只是工作上的问题。真正重要的事情都发生在工作以外。我回到家,家里人正在等我,这才重要啊。"
从此,我就把工作和生活分开了,只把它当作"工作问题"看待。这样一来,我对工作就总能心平气和,与人交流也更顺利了。
5、 自己找到道路
我被提升为主管以后,不知道该怎么做。我请教了上级,他回答:"以前都是我们告诉你做什么,从现在开始,你必须自己回答这个问题了,我期待你来告诉我,什么事情需要做。"
很多工程师都没有完成这个转变,如果能够做到,可能就说明你成熟了,学会了取舍。你不可能把时间花在所有事情上面,必须找到一个重点。
6、 把自己当成主人

我每天要开很多会,有些会议我根本无话可说。我对一个朋友说,我不知道自己为什么要参加这个会,也没有什么可以贡献,他说:"不要再去开这样的会了。你参加一个会,那是因为你参与了某件事。如果不确定自己为什么要在场,就停下来问。如果这件事不需要你,就离开。不要从头到尾都静静地参加一个会,要把自己当成负责人,大家会相信你的。"
从那时起,我从没有一声不发地参加会议。我确保只参加那些需要我参加的会议。
7、 找到水平更高的人
最后,让我从自己的经历出发,给我的学员一个建议。
"找到那些比你水平更高、更聪明的人,尽量和他们在一起,吃饭或者喝咖啡,向他们讨教,了解他们拥有的知识。你的职业,甚至你的生活,都会因此变得更好。"
 我的感受是IT行业是当今社会的热门行业,说它热门是因为它的发展潜力是无穷的,所以我们能进入到这个行业是一种幸运。在此,我特别感谢上家公司带我教我前辈们和师傅,在学习期间给了我莫大的帮助,在我遇到困难时,给我很大的鼓励和帮助,让我更加有信心坚持下来,找到工作。最后送大家一句话:相信自己没有选错行业,相信自己有立足的能力,为自己制定明确的目标,然后努力地去学习、体会、感悟、进步!
  查看全部
经常在网上看到各种标题为“Android程序员”、“Java程序员”、“PHP程序员”、“C/C++程序员”的招聘帖子,但这种招聘方式,很难找到好的人才。语言只是一种工具,对一个聪明的程序员来说,用没用过什么工具主要是由他原来的工作需要决定,并不能代表他全部的技能。

软件行业是一个非常强调人的价值的行业,价值就体现在有效的推动产品前进,而语言只是实现这个价值的工具。
(W[}_`X~BVTQM{3A`@HN4JU.png


一个软件产品往往涉及很多方面的知识,比如网络、数据库、Cache、编译环境工具等。如果这些必要基础知识不足,很难很好的独立完成一个产品的某个部分。

另一方面,一个人的聪明程度、对新知识的好奇心、自我驱动意识、为问题找到最佳解决方案的决心,才是他能不能成为一个好程序员的关键。举个例子,我的一位在某米当cto学长的告诉我,有位同事本来是服务器端以C#语言为主做开发的,完全没有过android开发经验,但他表现出对移动开发很有兴趣,并且在做服务器端开发时,表现出良好的学习能力,后来我把他调到Android组,负责android SDK和APNs相关的工作,结果只花了几个星期,Android SDK的稳定性大幅提升,解决了多个致命问题。

不要仅仅把自己定位为某种语言的程序员,说自己是Java程序员,C#程序员,Python程序员等等。一方面会限制自己的发展,一方面对团队整体的能力提升也不利。几乎所有的语言都有它自己的适用场景,在合适的地方用合适的语言,才能极大的提升生产效率。
正确的做法是,首先要有良好的基础知识,深刻的掌握2~3门语言,然后适用于不同场景的语言要了解概念。基础知识包括各种计算机原理、数据方面的知识,在学校没认真学的,现在有时间也要补充。语言方面比如掌握了C/Java,那C++/Python/Bash/Javascript/CSS等都可以了解下概念,至少要理解在一个完整的产品链里,它们分别适用于哪个环节。

标题用“请不要说自己是Android程序员”没有贬低Android程序员的意思,Java是目前被采用得最多的语言,主要用Java的程序员里,也是有大量牛人。另外,同样的,也不要说自己是C程序员、Python程序员。

 古语说的好,“书中自有黄金屋”。这句话告诉我们书籍是学习知识的第一大根本方向。在与Java相关的专业书籍中,相继记述着关于这门课程的基础知识及进阶内容,先易后难、步步深入,非常适合初学者去学习。
  虚心求教不可少。
往往很多高深莫测,经验丰富,功力深厚的人都埋藏在自己的身边,不容自己去察觉。所以如果大家想要从事Java行业,不妨请假身边从事过该行业的朋友,求学不在高低贵贱之分,只要碰到不懂的地方,就去虚心求教,世界这么大,而且这门知识又是如此让人追捧,比自己懂的人岂止千百?从这些人身上自己一定能够受益匪浅。

现在以Java语言为主的工作非常之多,另外在学校里就以学习Java为主的人也越来越多。但是,从学校就以学习Java这种高级语言为主的人,很多基础知识比较薄弱。高级语言掩盖了太多细节,提高了生产力,但在学习阶段,却不利于基础知识累积。
MSBFLGP1I{8KVLTCJ9)Q46.png

“Nicholas C. Zakas是全世界最著名的JavaScript程序员之一,之前是在雅虎将近工作5年。三年前,他写了一篇长文,回顾自己的职业生涯,提到七个对他来说最重要的建议,希望对大家的职业生涯有帮助:

1、 不要别人点什么,就做什么

我的第一份工作,只干了8个月,那家公司就倒闭了。我问经理,接下来我该怎么办,他说:"小伙子,千万不要当一个被人点菜的厨师,别人点什么,你就烧什么。不要接受那样一份工作,别人下命令你该干什么,以及怎么干。你要去一个地方,那里的人肯定你对产品的想法,相信你的能力,放手让你去做。"

我从此明白,单单实现一个产品是不够的,你还必须参与决定怎么实现。好的工程师并不仅仅服从命令,而且还给出反馈,帮助产品的拥有者改进它。

2、 推销自己




我进入雅虎公司以后,经理有一天跟我谈话,他觉得我还做得不够。

"你工作得很好,代码看上去不错,很少出Bug。但是,问题是别人都没看到这一点。为了让其他人相信你,你必须首先让别人知道你做了什么。你需要推销自己,引起别人的注意。"

我这才意识到,即使做出了很好的工作,别人都不知道,也没用。做一个角落里静静编码的工程师,并不可取。你的主管会支持你,但是他没法替你宣传。公司的其他人需要明白你的价值,最好的办法就是告诉别人你做了什么。一封简单的Email:"嗨,我完成了XXX,欢迎将你的想法告诉我",就很管用。

3、 学会带领团队
工作几年后,已经没人怀疑我的技术能力了,大家知道我能写出高质量的可靠代码。有一次,我问主管,怎么才能得到提升,他说:"当你的技术能力过关以后,就要考验你与他人相处的能力了。"
于是,我看到了,自己缺乏的是领导能力,如何带领一个团队,有效地与其他人协同工作,取到更大的成果。

4、 生活才是最重要的
有一段时间,我在雅虎公司很有挫折感,对公司的一些做法不认同,经常会对别人发火。我问一个同事,他怎么能对这种事情保持平静,他回答:"你要想通,这一切并不重要。有人提交了烂代码,网站下线了,又怎么样?工作并不是你的整个生活。它们不是真正的问题,只是工作上的问题。真正重要的事情都发生在工作以外。我回到家,家里人正在等我,这才重要啊。"
从此,我就把工作和生活分开了,只把它当作"工作问题"看待。这样一来,我对工作就总能心平气和,与人交流也更顺利了。
5、 自己找到道路
我被提升为主管以后,不知道该怎么做。我请教了上级,他回答:"以前都是我们告诉你做什么,从现在开始,你必须自己回答这个问题了,我期待你来告诉我,什么事情需要做。"
很多工程师都没有完成这个转变,如果能够做到,可能就说明你成熟了,学会了取舍。你不可能把时间花在所有事情上面,必须找到一个重点。
6、 把自己当成主人

我每天要开很多会,有些会议我根本无话可说。我对一个朋友说,我不知道自己为什么要参加这个会,也没有什么可以贡献,他说:"不要再去开这样的会了。你参加一个会,那是因为你参与了某件事。如果不确定自己为什么要在场,就停下来问。如果这件事不需要你,就离开。不要从头到尾都静静地参加一个会,要把自己当成负责人,大家会相信你的。"
从那时起,我从没有一声不发地参加会议。我确保只参加那些需要我参加的会议。
7、 找到水平更高的人
最后,让我从自己的经历出发,给我的学员一个建议。
"找到那些比你水平更高、更聪明的人,尽量和他们在一起,吃饭或者喝咖啡,向他们讨教,了解他们拥有的知识。你的职业,甚至你的生活,都会因此变得更好。"
 我的感受是IT行业是当今社会的热门行业,说它热门是因为它的发展潜力是无穷的,所以我们能进入到这个行业是一种幸运。在此,我特别感谢上家公司带我教我前辈们和师傅,在学习期间给了我莫大的帮助,在我遇到困难时,给我很大的鼓励和帮助,让我更加有信心坚持下来,找到工作。最后送大家一句话:相信自己没有选错行业,相信自己有立足的能力,为自己制定明确的目标,然后努力地去学习、体会、感悟、进步!
 
0
回复

添加了EaseUI后原有的MJPhotoView.h报错 EaseUI MJPhotoView.h

回复

- 久伴 发起了问题 • 1 人关注 • 83 次浏览 • 2017-08-11 15:50 • 来自相关话题