这个报错是因为没有同步 ssh 吗?
Warning: Permanently added 'gitcafe.com,124.42.117.218' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: Warning: Permanently added 'gitcafe.com,124.42.117.218' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
at ChildProcess.<anonymous> (D:\hexo\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:42:17) at emitTwo (events.js:87:13) at ChildProcess.emit (events.js:172:7) at maybeClose (internal/child_process.js:818:16) at Socket.<anonymous> (internal/child_process.js:319:11) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at Pipe._onclose (net.js:469:12)
We're sorry, too many people are accessing this website at the same time. We're working on this problem. Please try again later
]]>大家有这种情况吗?同时上传到 Github pages 就没有问题。
我这里 ping gitcafe pages 的页面是 119.81.161.66 ,一个香港的 IP 。
]]>我们希望得到最真实的反馈,帮助我们提供更好的服务,帮助我们更好地成长。填完还会有小惊喜哟。
]]>2014 年 9 月,乌云首届安全峰会在北京顺利举行,邀请到社会中顶尖的白帽子和企业防御体系的最佳实践者,共同探讨信息安全的解决之道。如果你觉得错过了那次大会而遗憾,别担心,这个 7 月,台湾黑客大会 HITCON 与漏洞报告平台乌云网联合举办的乌云第二届「白帽子大会」将为你带来更多的惊喜!GitCafe 也为想去参与的你们带来了福利,门票免费放送中。
不分种族,不分国界
不在乎年龄,不在乎职位
在乌云 2015 年白帽子大会
你将穿梭于数百名白帽黑客之间
听一流白帽的最新想法
学企业大咖的宝贵经验
你可能在刺激的现场演示中体验到真实世界的痛
或者在黑客前辈的娓娓道来中看见自己未来的路
这里是乌云白帽子大会
你听说过的和即将听说的白帽子们,都将在这里出现
时间:2015 年 7 月 17 日~7 月 18 日
地点:北京富力万丽酒店
网站: http://summit.wooyun.org
7 月 17 日 Day1「专业场」: Pro-Con
面向人群:企业,白帽子
演讲嘉宾(部分):去哪儿网安全负责人郭添森、腾讯安全架构师张海清、万达电商安全主任工程师林鹏、唯品会高级安全工程师王润辉、前百度高级安全工程师章华鹏。
简介:由优秀白帽子和企业安全负责人分享攻防最新趋势和业务安全经验,旨在让企业更好的了解安全问题及解决方案,并让白帽子更好的帮助企业提升安全。平均每个议题时间 40 分钟,皆为深度演讲。
行业热门安全问题
互联网金融、电商、移动 APP 的安全问题与日剧增,一些企业可能缺乏安全意识,更多企业则不知道如何入手。本次乌云峰会专业场,我们邀请了来自唯品会和网信金融等公司的技术专家,他们将分享在互联网金融和移动端领域的一手经验,其中很多细节都是首次对外公开。
黑客最新攻击手段
DDoS 攻击让大量企业苦不堪言,还有不少企业对层层部署的防火墙和 WAF 屡被攻破而感到困惑。「未知攻,焉知防」,专业场上,三位深谙 DDoS 攻击、WAF 绕过和外围攻击手段的高水平白帽子将为我们展示最新的技术和方法。
安全标杆实践经验
我们邀请了「去哪儿」和「腾讯」两家互联网的安全标杆企业来峰会分享。作为第一个加入「去哪儿」的安全人员,郭添森将首次分享他们是如何从零开始搭建公司安全体系的;而腾讯安全架构师张海清则将在现场揭秘腾讯的看家法宝——Web 防护平台,希望让更多企业能从中获得启发。
7 月 18 日 Day2「白帽场」: WhiteHat Day
面向人群:信息安全爱好者、从业者
演讲嘉宾(部分):知名自媒体池建强、知名自媒体 Roy Li、UCloud 创始人季昕华、阿里巴巴集团安全副总裁杜跃进、IBM 安全系统架构师李承达(台湾)、PKAV 团队创始人 OnlyGuest、乌云创始人方小顿、乌云漏洞平台负责人孟卓。
简介:将有近 20 位安全前辈、技术大牛和新晋强人带来精彩分享。现场还将「首发」多个令人意想不到的安全问题——你不仅能了解到最新最酷的安全技术,还能与方向诡异的安全研究者群体深入交流、甚至认识你未来的老师和伙伴。
HackReal
为让更多人了解安全问题并使问题得以解决,乌云及白帽子们在今年 3 月发起了「你身边的安全」为主题的众测项目。数百名白帽子提交了极具技术含量的漏洞,涉及无人飞行器、手机、云服务和客户端等等,其中有些漏洞已被黑产利用,导致对个人隐私或企业财产造成严重影响。本次峰会我们将从中挑选出部分内容进行演示,相信会让你大开眼界。
算卦摊
「算卦摊」是台湾 HITCON 的保留环节,通过黑客前辈讲述个人经历以给安全从业者带来启发。今年的乌云峰会也引入了该环节。将有台湾 HITCON 创始人 TT、乌云创始人剑心、UCloud 创始人季昕华、阿里巴巴集团安全副总裁杜跃进、IBM 安全系统架构师李承达(台湾)等大陆台湾极具代表的安全大咖汇聚一堂,畅谈两地黑客文化、安全产业与技术变迁。该环节由知名自媒体人池建强主持,并将有一位全球著名安全人士出席。
WooKnows
台湾著名 CTF 团队队长 Orange 将讲述 HITCON 团队的组建历程及国际比赛中好玩的故事;自媒体厉哥 (Roy Li) 也将莅临现场——他认为很多规则都非常荒谬、应该被打破,所以他将展示这些规则下滋生的安全毒瘤;乌云主站负责人疯狗(孟卓)则将揭示今年峰会时间的特殊含义及国内安全环境的真正现状。
安全奥斯卡
我们还安排了一个有趣的环节「安全奥斯卡」——为企业和白帽子颁奖。企业颁奖的依据来自社区推选,很多优秀企业的安全行动值得分享和鼓励,也有些企业对安全的做法值得探讨,我们将根据白帽子的投票结果来进行评选和公布;同时,作为每年一度的白帽子大聚会,我们也将为过去一年表现突出的白帽子进行「加冕」,期待他们未来做得更好。
你还记得 17 年前的那个四月吗?在台湾,没有大明湖畔的夏雨荷,只有一个让技术宅们为之震惊、让各个国家惶恐的电脑鬼才——CIH 病毒制造者陈盈豪。
1998 年 4 月 26 日,当时还是大学毕业生的陈盈豪制造出的 CIH 电脑病毒共造成全球 6000 万台电脑瘫痪,韩国、土耳其、孟加拉、新加坡、马来西亚、俄罗斯、中国内地的电脑均惨遭 CIH 病毒的袭击。
这个夏天,这位你曾经只能在百度百科看到的电脑天才将首次亮相内地,参与乌云白帽子大会,坐上圆桌等你提问!
此次大会将上演台湾黑客大会 HITCON 的保留节目「算卦摊」,由知名自媒体池建强老师主持,乌云创始人剑心、UCloud 创始人季昕华、阿里安全 VP 杜跃进等技术大咖,将携手来自台湾的 HITCON 创始人 TT、IBM 安全架构师李承达、CIH 病毒作者陈盈豪,为你讲述他们的个人经历,解答你对行业和技术的相关提问!
DDos 作为流氓式波涛汹涌的攻击手段,到底又演变出了哪些新的方式?!听说做着地下黑产的黑帽们的技术更新比白帽更快是不是真的?!警察蜀黍来分享从案件中获取到的国内 DDos 最新方式,但你了解 DDos 那不为人知的进化!
除了警察蜀黍带来的分享以外,还有多次在各大 CTF 比赛中名列前茅的上交的同学通过真实的现场演示为你分析每天在用的手机卡到底安全不安全。
无人机听起来很酷炫,作为极客热衷的玩具,飞行这件小事到底除了能帮人类实现飞行梦想以外,有没有隐藏着被忽视的安全问题?大会上,白帽子将现场演示无人机的安全问题,带你全方位了解飞行器。
还有更多劲爆的现场演示及技术解密,带你揭开这些安全技术神秘的面纱!
将你的「GitCafe 用户名」留言在下面,就有机会获得乌云 2015 白帽子大会 WhiteHat Day 门票!我们将从参与活动的人中抽取 5 位幸运用户,名额有限!
截止日期:7 月 14 日
]]>现在,你就可以通过访问 https://help.gitcafe.com 先睹为快。
除了独立的域名和全新的设计之外,我们还针对文档内容做了以下更新:
除了对常见的问题撰写帮助文档之外,我们还在新版帮助文档体系中新增了一个名为 「最佳实践」 的栏目。
最佳实践内容定位于「对 Git 和 GitCafe 在不同技术方向和领域的使用经验分享」;这个栏目长期征稿,如果你有基于 Git、GitCafe 的深入使用经验、技巧或基于 Git、GitCafe 在其他领域做了些有趣的实践,欢迎给我们投稿。
可以将稿件或文章链接发送到 [support@gitcafe.com](support@gitcafe.com),邮件标题请注明「最佳实践投稿」。我们会根据稿件选题方向和质量有选择的发布,在文章中标明作者和出处,并为入选的稿件作者提供丰厚的 GitCoin 作为奖励。
如果阅读帮助文档中的内容依然无法解决你的问题,你还可以通过 提交工单 或发送问题邮件至 [support@gitcafe.com](support@gitcafe.com) 的方式寻求进一步的帮助。对于 Help 此次改版的意见,也可以通过这种方式进行反馈,我们期待你的宝贵意见:)
此外,我们也将保留旧版的帮助文档,可以访问 https://gitcafe.com/GitCafe/Help。
即刻启程,我们为你保驾护航。
]]>对于具有一定规模的协作项目,当想要查看它的提交 (commit) 状况时,采用可视化的方式是最直接、方便且有意义的。
除此之外,参与者也能随时回顾自己对项目的贡献度,提高参与热情。
而对于普通用户,贡献统计也可以为他们了解项目的活跃度提供一定参考。
点击「项目导航栏」中的「统计图」(Graph) 链接,即可显示当前分支的统计结果。
用户本身无需做任何设置。该功能也不会收取额外的 GitCoin。
用户的「贡献」按照「提交」(commit) 的数量计算,并进行排序显示。
可以选定不同的时间段显示统计结果。
一次只计算某一个分支上的所有提交。不包括合并 (merge) 本身的那个提交。
默认显示默认分支的统计结果。可以通过按钮切换分支。
由于是实时统计,对于较大的项目,可能需要一定等待的时间才会显示页面。
指定时间内某个用户提交的数量。如果没有指定则计算整个分支上的所有提交。
用户所有提交的修改行数,包括增加的行和删除的行。
如果参与的用户是 GitCafe 的注册用户,则用户名会以链接方式显示。
现在就去 GitCafe 体验数据可视化的魅力吧。
]]>众所周知,互联网行业的兴起,以及云计算,云存储等解决方案的广泛应用让越来越多的企业以及用户对互联网安全越来越重视,同时互联网应用所带来的越来越多的大数据,也成为关注的焦点。
为此,惠普特别针对云解决方案、数据安全及分析等内容,于2015年7月在北京和上海举办“惠普互联网行业客户研讨会-暨惠普首届黑客马拉松竞赛”、通过收集客户在云、大数据等方面的问题作为本次大赛的命题,让参赛“黑客们”各出奇招。
我们期待全国开发者的参加,与我们一起进入“黑客”模式。
「神秘奖品」/Apple Watch Sport/小米空气净化器
参赛奖
300 GitCoin
凡是参加本次「惠普互联网行业客户研讨会 —— 暨惠普首届黑客马拉松竞赛(北京站)」的选手都可以获得 GitCafe 提供的 300 GitCoin 用于创建私有项目。
吴业翔
中国惠普副总裁
企业集团 互联网创新事业部总经理
吴业翔对企业营销与P&L管理,有优秀的业绩记录,先后服务于惠普与戴尔两家跨国IT企业,出任多个部门之高管。拥有资深互联网与金融行业营销经验,其领导的互联网创新事业团队协助多家互联网企业在创业初期的基础架构建设与运维,并成为多家企业云战略合作伙伴。
符庆明
CTO 北京金山云网络技术有限公司
符庆明是中国云计算行业的领军级人物,其一手构建了新浪私有云和公有云,研发了国内最早的PaaS平台。2015年1月加盟金山云,为金山云技术团队加了一块重量级的砝码。
王巍
新浪微博
石建强
惠普软件集团中国区 大数据平台总经理
石建强先生在大数据处理方面有着丰富的经验,包括结构化和非结构化信息处理领域。他本人参与过多个大型客户的相关项目,包括国家电网、中国石油、CCTV、中国移动、华为、深圳证券信息公司等等。
Thomas Yao
GitCafe CEO & Co-Founder
需要将代码提交在 GitCafe 平台。
创建项目时,在「此项目属于线上活动」一栏中,请选择「惠普互联网行业客户研讨会 —— 暨惠普首届黑客马拉松竞赛(北京站)」选项。
「NAO 机器人创客编程马拉松」是 Big Cyber 必酷赛博 , 创客星球 , RoboMing 与 GitCafe 合作举办的线上开发者大赛。
NAO机器人是一款人工智能机器人。它拥有让人喜欢的外形,具备一定水平的人工智能,能够不人亲切的互动,是目前世界
学术领域内运用最广泛的类人机器人。NAO支持多种编程斱式,允许用户探索各种实际应用领域,已在全球范围内吸引了一
大批程序开发人员。通过本次NAO机器人创客编程马拉松,我们希望提供全国创客一个直接接触全球顶级机器人硬件和软件开发环境的一个
学习与交流平台,充分发挥创客的创造力和技术实现能力,为NAO机器人乃至整个服务机器人行业更快进入实用、融入我们
日常的家庭与生活贡献一份力。集众创想,舞动创意——现面向全国创客发出英雄帖,等你来战!
项目说明(25分) 每组队伍派一名队员进行讲解及演示,
期间做出的项目讲解须至少包含:
凡是参加本次「NAO 机器人创客编程马拉松」的选手都可以获得 GitCafe 提供的 300 GitCoin 用于创建私有项目。
参赛 GitCafe 用户在充值页面的「使用兑换码充值:」一栏填写兑换码,领取300 GitCoin。(可用于创建私有项目)
注:兑换码请在活动现场向工作人员索要,该兑换码兑换有效期为 2015-07-15 ~ 2015-07-20
需要将代码提交在 GitCafe 平台。您在 GitCafe 创建项目时,请选择「NAO 机器人创客编程马拉松」选项。
「小组」功能的目的是让管理者能更方便的设置组织成员的协作权限、进行组织及项目到的管理。操作方式是由组织管理者在组织内创建若干个小组,并在创建小组时设置该小组成员的权限级别,其后再于各该小组内添加成员,并由项目管理者将小组添加到各个项目中,让成员可以在其权限范围内进行协作。
事例说明
以下举个例子说明「小组」的实际操作,帮助你更快速理解:
关羽是「赤兔码游戏公司」的创始人,公司准备开发一款「黑客三国」游戏,需要协同开发和代码托管的服务,因此他选用 GitCafe 创建了一个名为「ChiTuMa」的组织。
身为「组织拥有者 (Owner)」的关羽,手下有张飞和诸葛亮两个技术总监,为了管理方便,关羽将张飞和诸葛亮加入「ChiTuMa」的「组织管理小组 (Admin)」。
Admin 成员皆可进行组织管理事务,同时也可以创建项目以及管理各个小组的权限和成员。
「黑客三国」游戏需要 Web、iOS 和 Android 三个客户端,张飞 (Admin) 心想必须要先将公司中的开发主管、开发人员、游戏策划、美术设计和技术顾问分组,因此他在 ChiTuMa 组织中创建了几个不同权限级别的「协作小组 (Team)」,再将用户添加到 Team 里面,成为组织成员。
由上表可以知道:
只有 Admin(拥有「组织管理」权限)可以新建 Team、设置权限级别,并将用户添加到 Team 中
拥有「项目管理」权限的 Team 成员 (Project Manager, PM) 可以将若干个 Team 添加到其所属项目当中进行协作,但无权限新增/编辑/删除 Team 中的成员,也无权变更 Team 的权限级别
张飞 (Admin) 把组织中的新建小组、设置权限和添加用户等工作完成后,接下来的工作就是新建项目,由 admin 自己或是属于 PM 小组的关兴、马超、庞统、赵云、黄忠、魏延等人来新建各个项目,并且选择合适的 Team 添加到项目当中成为协作者,即可启动项目的团队协作工作。
小组功能的好处
依照上面的描述,创建组织、新建小组并设置权限等工作,确实需要费点心思;当然,我们不会徒增用户的困扰,如此设计最大的好处就是在组织成员的加入和退出时,可以更为便捷。例如:
成员加入
赤兔码游戏公司招聘了新人夏侯霸,负责 Android 开发。这时,Admin 将他加入 Android-Dev 小组后,夏侯霸即可一次性的在所有已添加 Android-Dev 小组的项目中开始协作开发,不必一个一个项目添加,还可能遗漏。
成员退出
赵云要离职了,这时只要到 ChiTuMa 组织当中的成员列表,一次性的将他退出所有小组,就完成工作了,不必担心项目众多而疏未退出。因此,Admin 在人员管理方面将更加方便。
小组的权限说明
若你针对本次新推出的「小组」功能想要有更深入的理解,请阅读我们的帮助文档,其中有更详尽的说明。
GitCafe 持续努力为您优化协同开发工作,若有任何意见及疑问,我们很欢迎您的反馈!
]]>我们期待遇见对这个世界充满热情与智慧的你,迎接挑战,一起创造出更多有趣,酷炫的产品!
6月15日,开战
Worktile Hackathon
「Worktile Hackathon」是 Worktile、36氪 与 GitCafe 合作举办的线上开发者大赛。在为期两个月的时间里,请开发者们基于 Worktile API 开发出有趣的效率类产品,你的想法有可能成为当下 10W+ 团队的日常所用,将来更有可能为百万级、千万级的团队服务,而你也有可能从中收获到丰厚的回报。
选题方向
首要准则为基于 Worktile Open API 开发,推荐如下选题方向(包括但不限于)
奖品抢先看
评审嘉宾
作品提交
需要将代码提交在 GitCafe 平台。您在 GitCafe 创建项目时,请选择「Worktile API 开发大赛」选项。
GitCafe 用户福利:凡是参赛选手,都将获得 300-500 不等的 GitCoin 用来创建私有库。
]]>Code Insight(源码追踪)功能帮助 GitCafe 的用户更好地阅读理解源代码:
在开启源码追踪的项目中阅读代码界面,源代码中任何已知定义位置的变量、函数、类等符号会带有下划线。鼠标在带有下划线的已知符号上短暂停留,将会看到该符号的类型信息或是函数原型,甚至详细文档信息。
点击符号将会直接跳转到定义该符号的源代码文件,并定位到此文件中定义该符号的代码行。符号的定义位置并不局限于当前项目,可以是 GitCafe 上的任何公开项目。如下图所示会跳转到对应的 OpenJDK 相应源代码:
目前 Code Insight 处于 GA 状态,对所有公开项目默认分支的最新版本源代码开放。已经实现对 Ruby、Python、Java 等语言的支持,并将持续加入更多语言的支持。
受限于手机屏幕大小和微信服务器端的过度压缩,演示图可能不够清晰,您可以在电脑端开启本文并点击「阅读原文」访问我们的博客查看清晰的演示。
GitCafe 致力于打造专业的代码托管服务及项目协作平台,帮助研发团队优化项目代码的管理及协作流程,为企业提供更为安全严谨的代码管理解决方案。在此基础上 GitCafe 未来将积极与第三方团队进行合作,改善开发体验,提高协作效率。这次的 Code Insight(源码追踪)功能即是由 Lambda Lab 和 GitCafe 开发团队共同合作完成。
Lambda Lab 是一支来自硅谷的工程师团队,成员均毕业于北美顶级计算机院系,致力于为开发者和开源社区提供最好的开发体验。Lambda Lab 团队有编译系统,机器学习和数据库专家,以及丰富的大型开源项目开发经验。为了解决开发者在网页端搜索和阅读代码困难的问题,他们开发了 Codatlas (www.codatlas.com),在网页端提供类 IDE 的代码阅读和代码搜索体验,到目前为止已经收录了数百个著名开源项目如 Apache Hadoop、Apache Spark 和 Android 等,并支持 Scala、Java、Ruby、Python 和 Javascript 等多种编程语言,为世界各地的开源项目的贡献者和使用者提供快速代码查询和协作功能。
现在,就在 GitCafe Web 端 体验 Code Insight 吧,让你自由遨游在源码的海洋,更好地阅读和理解源代码。
]]>你是否想过:
只需挥动一只手指即可浏览网页、阅读文章、翻看照片,还有播放音乐。即使不使用任何画笔或笔刷,用您的指尖即可以绘画,涂鸦和设计。
用您的手指即可切水果、打坏蛋;用您的双手即可飙赛车,炸飞机。
您可以在3D空间进行雕刻、浇铸、拉伸、弯曲以及构建3D图像,还可以把他们拆开以及再次拼接。
体验一种全新的学习方式,用您的双手探索宇宙,触摸星星,还可以围绕太阳翱翔。
一种全新的乐器体验,弹奏空气吉他、空气竖琴和空中的一切乐器,还可以体验全新的采摘和拾起方式。
现在 Leap Motion 让一切都成为了现实,不仅如此,你甚至可以打开电脑,敲击键盘,玩转灵感,亲自为它开发 APP 实现你想要的一切功能!并且,GitCafe 也会全程为你保驾护航,让我们一起激发灵感、尽情创意、与指尖共舞!
给出你的比赛提案,就有机会(需审核)免费得到 Leap Motion 开发机!
Leap Motion 厉动在线开发大赛是 Leap Motion、神州数码与 GitCafe 合作举办的线上开发者大赛。在为期一个半月的时间里,开发者们可以使用 Leap Motion(或其发布的虚拟现实开发组件)进行 App 开发,构建游戏、音乐、艺术、教育等领域的炫酷应用。
此次活动的范围面向全国,开发者可以以个人身份参赛,也可以组队或者以公司身份参赛,每个团队可以提交一个或多个产品参与角逐。
大赛结束后,我们会选出优秀的应用推荐至 Leap Motion 官方应用商店,可以向全世界展示你的作品。
使用 Leap Motion 开发的一切 App,游戏、音乐、浏览器、输入法、地图、互动展示、虚拟现实等主题均可,有一定的创新性、趣味性和想象力。
可以使用任何一种 Leap Motion 开发包支持的程序设计语言,如 C++、C#、Javascript 等。
开发的作品可以支持 Mac、Windows、Linux 平台,也可以是基于 Web 的网页版应用。
开发作品支持中英文双语(便于推荐至官方应用商店)。
开发作品提交后可以完整演示,最好附带演示小视频。
参赛团队提交的参赛作品从未在其他在线开发大赛中参与及获奖。
为统一评审,请所有参赛者将作品代码托管至 GitCafe。
3 月 18 日 提交提案,免费申请开发机
4 月 18 日 UNITE 2015 BEIJING 大会现场提供本活动报名
4 月 20 日 开发大赛正式开始,无需报名,可以直接在 GitCafe 平台进行项目创建
6 月 1 日 项目提交截止,同时启动评审
6 月 14 日 评审结束
6 月 15 日 公布获奖名单
准备参赛:提交申请,写明提案供主办方审核是否发放免费开发机
开发机发放:主办方选取 50 个团队,免费发放开发用 Leap Motion(每个团队一个),其他团队则可以以专属折扣价购买 Leap Motion 用于开发
项目提交:将开发用代码统一托管至 GitCafe 平台,同时可一并提交项目视频
项目审核:大赛评委根据提交项目进行审核,选出 20 个入围项目。
公布大奖名单
4 月 18 日 UNITE 2015 BEIJING 开发者大会开放现场报名,开发者可以直接在 Leap Motion 展位报名参赛。
一等奖 1 名,奖品为 Oculus Rift DK2 一台+iPad Mini 3
二等奖 2 名,奖品为 Apple Watch 一块
三等奖 3 名,奖品为价值 1000 元的机械键盘
创新奖 4 名,beats 耳机
入围奖若干,奖品为 Leap Motion 定制笔记本
参赛奖:300 GitCoin
凡是参加本次「指尖上的华尔兹--Leap Motion 2015在线开发大赛」的选手都可以获得 GitCafe 提供的 300 GitCoin 用于创建私有项目。
参赛 GitCafe 用户在充值页面的「使用兑换码充值:」一栏填写「LEAPMOTION2015」,领取300 GitCoin。(可用于创建私有项目)
评委将基于项目的开发难度、使用前景、独创性和想象力进行评分,其中
开发难度 30%
使用前景 30%
独创性 20%
想象力 20%
注:「私有项目」请将裁判账号:LeapMotionUSA 与 LeapMotionChina 添加为项目的协作者,方便评委查看项目的代码质量。
Michael Buckwald
Leap Motion President & CEO, Co-founder
刘宁
神州数码 消费电子业务发展部 总经理
Thomas Yao
GitCafe CEO & Co-founder
还有一位神秘嘉宾将作为评委出席,请密切关注活动页面进行查看。
需要将代码提交在 GitCafe 平台。您在 GitCafe 创建项目时,请选择 “「指尖上的华尔兹」--Leap Motion 2015 在线开发大赛” 选项。
作品使用说明及截图。需要使用 README 编写项目说明,若操作性要求高的,需编写操作步骤手册。
点击这里进行开发机的申请
GitCafe 是一个基于代码托管服务打造的技术协作与分享平台,开发者可以通过使用 Git 代码版本控制系统将其开源或商业项目代码托管在 GitCafe 上,与其他程序员协作开发。
技术支持
本次「Leap Motion 2015 在线开发大赛」Support 采用 Tickets(即:工单)系统进行,具体使用方式可以参考该 Readme。
当然,我们仍然提供了E-mail的方式提供support:leapmotion-hackathon@googlegroups.com
大赛报名正式启动,请去往活动页面了解更多详情,让我们一起激发灵感、尽情创意、与指尖共舞!
我们等着你~
]]>下面让我们来看看 GitCafe 目前已经适配了手机端的页面吧
1 首页
2 注册登录页面
3 个人主页
4 探索,可以浏览推荐和最近的项目
5 项目主页,可以浏览项目的基本信息和Readme的内容。
我们会陆续完善手机适配页面,以满足我们可爱的用户日益增长的移动需求。
为了方便用户,大家可以从我们的微信公众号(搜索 “GitCafe”)的自定义菜单里的 “工具 Cafe” 进入登录 GitCafe 的页面,开始愉快的旅程。
我们欢迎各位通过点击这里 填写表单,指出你们找到的 bug,或是对我们的页面有什么好的建议,之后我们会有精美小礼物送出哦:)
最后,祝大家羊年快乐!
]]>我们为参赛队伍准备了丰富的技术干货,国内外高手无私分享以及技术支持,逐步引导的在线学习视频教程与技术文档,场景范例,在线编程及演示环境,社区互动,丰富礼品(如极客学院特别为每位参赛人员提供月 VIP 码,用户可以免费学习极客学院全网课程)及优胜奖品(如微软最豪华的 MSDN 订阅服务旗舰版 (Visual Studio Ultimate with MSDN Subscriptions) 一年免费订阅)等大奖。心动不如行动,带着您的创意或是得意作品的源代码,即刻报名参加吧!
丰富奖品:
开源社大礼包
微软开放技术帽衫
GitCafe 大礼包
参加奖:
GitCoin:主要用于私有项目托管代码的使用。GitGoin 可以购买 GitCafe(不限于)额外托管空间升级和私有项目托管在内的服务。
学霸 VIP:极客学院特别为每位参赛人员提供月 VIP 码,用户可以免费学习极客学院全网课程。
优胜奖:
MSDN 旗舰版:微软最豪华的 MSDN 订阅服务旗舰版 (Visual Studio Ultimate with MSDN Subscriptions) 一年免费订阅
我们准备了一系列的教程、小挑战、技术文档、场景范例、相关社区:
首先,登陆极客学院在线学习视频教程 (www.jikexueyuan.com/partner#msopentech)
1. Open XML SDK 简介
下载和编译Open XML SDK(Windows系统)
下载和编译Open XML SDK(Linux系统)
使用PowerTools for Open XML(Windows系统)
我们也为大家搭建了在公有云 (Azure) 运行的在线编程服务(包含开发/学习/演示/部署) “开放黑客松”,让您无论何时何地,只要有浏览器,就可以开始任性编程,而不需要辛辛苦苦搭建环境,安装软件。要记得先报名参加,审核通过后,再取得 GitCafe 账号,才能登陆 “开放黑客松” 平台哟!
针对本次 Open XML SDK 黑客松,“开放黑客松” 平台除了让您任性地在线编程/演示/部署之外,也提供了各种学习帮助,如难度不一的小挑战,丰富的技术文档,场景范例及提示,开发者社区链接,Open XML SDK 源代码等。
建议先上完极客学院在线学习视频教程后,再来 PK。
1.从 Word 文档中提取内容 (Extract Text from Open XML WordprocessingML Document)
2.增加难度!从含有修订标记的 Word 文档中提取内容 (Extract Text from a DOCX that Contains Tracked Revisions)
3.快速构建一个 ASP.NET 网站,在网页上展示 Open XML 文档内容 (Build a Simple ASP.NET Web Site that Displays an Open XML Document in a Page)
1.通过一个 CRM 系统的网页来预览 Open XML 文档内容 (Previewing Open XML Documents in a Web-Based Content Management System)
2.基于表单形式的问卷系统 (Form-Based Survey System)
3.系统化生成定制化方案 (Custom Proposal Custom Proposal Generation System)
4.企业文档标准化的执行 (Enforcement of Standards for Corporate Documents)
5.文档中的测试代码 (Test Code in Documents)
6.生成定制 PPTX 幻灯片 (Generation of Custom PPTX Presentations)
7.大量生成客户账单 (Mass Generation of Customer Statements)
8.生成定制报告 (Custom Report Generation)
9.生成法律合同 (Legal Contract Generation)
10.从 Excel 里导出大量数据作分析 (Exporting Huge Data Sets for Analysis in Excel)
11.使用 Excel 来维护企业信息管理系统的数据 (Using Excel to Maintain Data Sets from Enterprise Management Information Systems)
12.使用 Word 来维护含丰富语义的内容 (Using Word to Maintain Rich Semantic Content)
13.处理提交的内容 (Processing Content Submissions)
14.处理人事绩效 (Human Resources Review Processing)
15.定制 Word 文档到 XML 的转换 (Custom Transformations of Word Documents to XML)
16.从文档中抽取元数据 (Extraction of Metadata from Documents)
官方选手技术交流群:QQ群号 - 371539827
黑客松技术支持邮箱: hackathon@kaiyuanshe.cn
http://www.csdn.net/tag/openxml/
Eric White
.NET developer, technical writer, blogger. Experience with Open XML using LINQ to XML and the Open XML SDK, Office 2010 client development, and SharePoint 2010 development. Experience with .NET technologies, including ASP.NET, HTML, CSS, XML, XSLT, XSD, and document transformations.
蔡明峰
就职于微软开放技术,任资深项目经理,有八年的微软经历,曾参与过企业IT解决方案、医疗软件、全球广告平台的研发运维,现全心投入在与微软技术相关的开源软件项目中。
Raniux
GitCafe CTO,写下了 GitCafe 的第一行代码。A life-long learner, a problem solver, and a developer. Also a pianist and a StarCraft player.
胡德民
现任微软公司大中华区开发工具高级产品经理,具备15 年 IT 专业技术服务的经验,历任程序员、讲师、项目经理、技术顾问,于2004 年加入微软公司,负责.NET 平台以及开发工具 Visual Studio 市场推广,推动企业研发团队在移动与互联网趋势下的转型,并致力于软件工程与 ALM 工具的落地与实践。
郝冠军
多年来工作在开发一线,热爱软件开发工作,对技术有比较深入理解, 2011 年出版了《ASP.NET 本质论》,连续四届微软最有价值专家(MVP),积极参与技术社区活动。
主办方:
支持单位:
如果你还担心春节期间无事可做,不妨打开电脑,敲下一行承载灵感的代码;如果你还担心创意无处安放,不妨点击报名,开始创建一个酷炫的项目;如果你还担心黑客梦想无法实现,不妨加入我们,一起踏上这段最棒的「黑客松之春」旅程。
我们期待遇见对这个世界充满热情与斗志的你,迎接挑战,一起度过这个非比寻常的春天。
2 月 10 日,正式启航。
「黑客松之春」是由 GitCafe 联合四家公司一起在春节长假期间同时开展的在线黑客马拉松大赛,参赛者们使用云适配、魔豆、Depth-VR 或 BearyChat 的产品或者接口,并将项目与代码托管在 GitCafe 上,进行为期一个月的开发。
为你奉上每一场 hackathon 诚挚的寄语,希望你能够在这场旅程中享受到快乐。
Amaze UI 从 2014 年 8 月开源至今已经 6 个月,这半年间 Amaze UI 团队致力于一件事:为开发者打造最好用的前端框架。目前看没有偏离这个方向。
Amaze UI 团队很高兴能与 GitCafe 团队合作举办线上黑客马拉松,也希望本次活动能得到开发者的认可,帮助 Amaze UI 更好的成长。
魔豆路由器是一款非常独特的智能路由器,独特之处在于它有一块可触控的屏幕,这一点彻底改变了传统路由器与用户交互的方式。你可以不用借助电脑、手机就能直接设置路由器,查看网络状态、联网设备等。而更重要的是,我们现在已经可以让用户直接在这块触控屏上安装和使用应用了;比如天气预报,这是由一位魔豆热心用户开发的应用,打开它,用户就可以直接在路由器上查看天气,甚至雾霾指数。不仅如此,开发者开发一款应用还可以直接自动适配到 Android/iOS 版本的魔豆路由宝和路由器的 Web 管理后台;一次开发,就支持三种途径的前端展现。
我们还需要更多功能更丰富更有趣的应用,来满足用户的使用需求,因此我们就需要更多有能力的开发者加入到魔豆路由器应用开发的工作中来。我们希望未来所有普通的用户都能轻松自如地操控路由器,为生活带来更大的便利和乐趣。
也许,你时常活在 “代码” 的世界里,在那里你可能会觉得很舒服。
那么,你希望找到,甚至创造一个由代码构成的 “世界” 吗?
一个 “虚拟” 的 “现实”。
看到这里,如果你想选择的是那一颗蓝色的药丸,那么我们有必要告诉你,这正是 Depth-VR 一直在做的事情,而且我们希望和你一块儿做。
也许你对 Depth-VR 并无几分了解,没关系,现在你只需要知道一件事:“虚拟现实” 被我们承包了!
我们并不需要各位能人异士帮我们开发或者改进什么 “产品”,而是各位强壮的右(左)手,和我们一起创建这样一个真实的乌托邦,一个实实在在的 Cybercity,让 Depth-VR 能贡献出一个更好的虚拟现实平台,从而让更多的开发者来这里 “安家”。
就算是来搬砖也好啊!
这可能是一次最富有理想、坚持,激情的黑客马拉松。
在这个新春伊始,成百上千的伙伴会跟你同在一起,为了一个目标结伴前进。在这里,「BearyChat」 会伴随在你的左右,用强大的信息集成,快速稳定的沟通体验,让你拥有一个非同凡响的春天。
无论你决定在哪个项目中用代码组成美妙的乐章,我们都真诚的希望你能够使用「BearyChat」来进行线上的沟通和协作:当你使用「Trello」 掌控项目进度、用「JIRA」 跟踪项目事务、用「Sentry」 实时收集异常和日志记录,「BearyChat」都会将这些信息实时推送给你;同时,你还可以根据话题进行分组或者私密即时沟通。总之,你将会在「BearyChat」上即时沟通、讨论一些你关心的信息,让工作更加专注。
现在,「BearyChat」中还有更多的智能机器人需要你来为我们开发,它可以是:智能的信息收集器、可以是定时提醒你喝水的贴心小助手,还可以是记得你重要纪念日并送上祝福的挚友…….当然,别具匠心的你还可以天马行空的打造出更多机器人,这一切都由你来决定,你就是这个春天的造物主。
GitCafe 是一个基于代码托管服务打造的技术协作与分享平台,开发者可以通过使用 Git 代码版本控制系统将其开源或商业项目代码托管在 GitCafe 上,与其他程序员协作开发。
这一次,GitCafe 为你提供全部项目与代码的托管和在线协作的服务,并有工作人员为大家进行现场的指导。
2 月 10 日,「黑客松之春」正式启航。
请进入我们的报名页面,选择你想要参加的黑客马拉松,进行报名,就可以自由的开始 hack 了!
当你接下了战书,武装了自己,打起精神来踏上黑客之旅,也别忘了,无论结果如何,我们都希望你在这场盛宴中获得真正的快乐。
还在犹豫什么,赶快报名吧~
诚挚邀请~
]]>无论是个人转组织,还是组织转个人,还是组织间转让……现在只需要简单的两步操作即可完成。
第一步:申请项目转让
进入项目管理
点击转让
输入接受者的用户名及你的登录密码,点击确认后系统会自动发送一封邮件给项目接受者。
Tips:下列三种情况转让会自动完成而无需邮件确认: 1.项目转入自己拥有/管理的组织下 2.项目从自己拥有的组织下面转入到自己名下 3.项目在自己拥有的多个组织里面互转
第二步:确认接受项目
项目接受者会收到一封来自 GitCafe 的确认邮件,如果确定接受项目转让,直接点击 "确认" 。
如果不想接受项目转让,无需进行任何操作,三天后转让申请会自动失效。
Tips:在接受者还没确认之前项目依然属于原所有者,而且所有代码都可以正常提交操作。
现在就开始体验新功能吧!如有任何问题,请发送邮件至 support@gitcafe.com 与我们联系,谢谢!
]]>GitCafe 在接到消息后第一时间采取行动解决了这个问题,请广大用户放心。
glibc 是 GNU 发布的 libc 库,即 C 运行库。glibc 是 Linux 系统中最底层的 API,几乎其它任何运行库都会依赖于 glibc。glibc 除了封装 Linux 操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。
代码审计公司 Qualys 的研究人员在 glibc 库中的 __nss_hostname_digits_dots() 函数中发现了一个缓冲区溢出的漏洞,这个 bug 可以经过 gethostbyname() 函数被本地或者远程的触发。应用程序主要使用 gethostbyname() 函数发起 DNS 请求,这个函数会将主机名称转换为 ip 地址。
这个漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。
第一个受影响的版本是 GNU C 库的 glibc-2.2,2000 年 11 月 10 号发布。我们已找出多种可以减轻漏洞的方式。我们发现它在 2013 年 5 月 21 号(在 glibc-2.17 和 glibc-2.18 发布之间)已经修复。不幸的是他们不认为这是个安全漏洞。从而导致许多稳定版本和长期版本暴露在外,其中包括 Debian 7 (wheezy),Red Hat Enterprise 6 & 7,CentOS 6 & 7,Ubuntu 12.04 等。
以上信息参考自 360 安全播报,查看 GHOST 漏洞报告!
]]>最近在给以前的老项目维护,说起来工作很简单,一个字:改 Bug。这看起来平淡无常的工作,实际上凶险无比,藏坑无数。时至今日,感觉整个人都得到了升华。在睡觉前抽空写篇博客,和各位分享一下踩坑经历,一起品味其中的种种酸苦辣(没甜)。
为保证个码隐私,文中代码均为化名,还望谅解。如有雷同,纯属巧合(可以通过 git blame
查看是谁写的)。
如果要折磨一个强迫症,最好的方法就是用各种恶心的变量名恶心死他。
什么?你说首字母要大写?
@property (nonatomic, assign) PERSONTYPE personType;
什么?你说单词里面要小写?
typedef enum tagPersonType{ person_type = 1, group_type, } PERSONTYPE;
什么?你说要用英文单词命名?
- (void)uploadSeccess:(MessageEntity *)message;
什么?你说类前面要加前缀避免冲突?
@interface PMWLogger : NSObject ... @interface PMTool : NSObject ... @interface MainControler : NSObject
什么?你说文件要按照目录存放?
- Classes - MainControllers - MyController - Controllers - SettingControllers - ChatModel.h - ChatModel.m - SettingControllers (不是手误) - Chatting - SearchView.h - SearchView.m - Voice - AgentModels - Public - Common - PublicDef.h - PublicDef.m
什么?听说 OC 可以用宏定义?
#define STRHASSBUSTR(str,subStr) ...
各位看官,这,能忍?
正所谓:
命名拼写看心情,文件目录不分明。
随机掺杂宏定义,鸡不安也犬不宁。
前阵子在做 iPhone4 和 iPhone6 以及 iPhone6 Plus 的适配工作。
由于历史原因没有用 AutoLayout ,也由于历史原因老代码的布局全是用数字一个一个写死的。这就给适配带来了莫大的困难。
随便拣点代码给大家欣赏欣赏:
UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 241, 320, 28)];
0 这种数字还好说,241 就完全让人摸不着头脑,至于 320 这个改成屏幕宽度倒也就还好,但是 28 这种神奇数字又是什么呢?
这种代码就是冲着干死队友的不偿命的态度去的。虽然写起来容易,但是维护困难,可读性极差,尤其是有多个控件布局的时候,依赖关系不明显,如果调整布局需要挨个重新计算并设置值,维护起来的酸爽,谁用谁知道。
要说神奇数字,集大成者莫过于此:
CGRect rect = CGRectMake(12.2+(page-1)*320+42.5*(i%7),((totalRows-1)%3)*55+2,42.5,42.5);
那天早上看到这代码差点就抱着键盘委屈的哭了出来。
正所谓:
界面写法各不同,歪门邪道千万种。
有朝一日被辞了,你的代码我不懂。
在聊天的时候有这样一个数据类:
@interface HBTalkData : NSObject { UIImage *_firstImage; NSArray *_imageArry; id _contents; } @property (nonatomic, assign) NSInteger messageId; @property (nonatomic, strong) id contents; @property (nonatomic, assign) NSTimeInterval timeInterval; @property (nonatomic) BOOL fromSelf; @property (nonatomic) BOOL isGroup; @property (nonatomic, assign) HBTalkDataStatus talkDataStatus; @property (nonatomic) HBTalkDataContentType contentType; @property (nonatomic, strong) PersonInfo *personInfo; @property (nonatomic, strong) UserInfo *cardUser; @property (nonatomic, assign) CallType callType; @property (nonatomic, strong) NSString *duartion; @property (nonatomic, strong) NSString *mPhoneNumber; @property (nonatomic, strong) NSString *imageList; @property (nonatomic, strong) NSString *msgDesc; @property (nonatomic, readonly) UIImage *firstImage; @property (nonatomic, readonly) NSArray *imageArry; @property (nonatomic, assign) float cellHeight; @property (nonatomic, assign) CGSize textSize; @property (nonatomic) NSTimeInterval voiceDuration; @property (nonatomic) CGFloat dataSize; @property (nonatomic) NSUInteger bubbleCount; @property (nonatomic, copy) NSString *chatUserName; @property (nonatomic, strong) MessageEntity *originalMessage; @property (nonatomic, strong) HBTalkDataRegisterInfo *registerInfo; -(void)reset; -(NSString *)bubbleDescription; ... @end
纤弱的头文件里塞满了各种属性定义和方法定义,仿佛可以听到头文件的不满和娇喘。
给大家出个题:看下下面的内容,猜一下这个类的文件名是什么:
... // 此处省略20行 @interface PersonInfo : NSObject ... // 此处省略20行 @property (nonatomic, assign)BOOL isGrey; @property (nonatomic, assign)BOOL isBlack; @property (nonatomic, assign)BOOL isTop; @property (nonatomic, assign)BOOL isStar; - (BOOL)isStranger; - (BOOL)isIndividual; - (BOOL)isDuDuSecretary; @end @interface UserInfo : PersonInfo ... // 此处再省20行 @property (nonatomic, assign)BOOL mobileVerified; @property (nonatomic, strong)NSString *countryCode; @property (nonatomic, readonly)NSString *dialogName; @end @interface GroupInfo : PersonInfo ... // 此处又省20行 @property (nonatomic, strong)NSString *creater; @property (nonatomic, assign)int memberCount; @property (nonatomic, strong)NSString *members; @end
嗯然后这个文件叫做 UserInfo.h
,头文件将近 100 行。大兄弟,我读书少,你不要骗我。把三个类塞在一个文件里这种行为,除了难为队友,实在是没看出来有什么其他动机可言。
正所谓:
头文件里地方小,塞到一处并不好。
外部对象都知道,安全问题可不小。
我一直在想,到底是什么,让这个项目的开发人员对 NSNotificationCenter
如此痴迷,痴迷的令人陶醉。
在通过 Model 调用业务逻辑的时候,它这样发了一条命令:
// 喂,LOGIN_MODEL,帮我查下有没有更新 [LOGIN_MODEL versionCheckFromAbout:YES];
这个业务是用 GCD 开了新线程来做的,在后台检查有没有更新,如果有更新那么版本号后面会加个感叹号。那么问题来了:你咋告诉我你检查的结果是有更新还是没更新呐?难道要写 个委托?然后定义个方法?然后更新的时候指认委托?然后有了结果再告诉委托?听起来就很烦躁嘛那干脆就用通知好了:
if (self.versionStatus != VersionStatusNormal) { [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_HAS_NEW_VERSION object:nil]; }
然后在需要做处理的类里面添加 Observer
就可以了:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myIconShouldChange) name:NOTIFY_HAS_NEW_VERSION object:nil];
哈哈哈哈搞定了。
哈哈哈哈你个头啊!整个项目里类似于这种的通知就有十来个,这还是有宏定义的,好追杀一点。对于那些没有宏定义的,随手一写复制粘贴的,不知道还要填坑多少。
通知虽好,但也不要贪杯啊。
看起来轻松,只是 post
了一下就搞定了,但是在 Debug 的时候有点麻烦。尤其是如果有多个 Observer
,改动的时候牵一发而动全身。如果真的是有这样使用的必要倒也罢了,但是本来一个 block
或者 delegate
就能简单清晰的解决,现在却被搞得这么繁重,实在是没有必要。
而且 NSNotificationCenter
的代码基本是一种变相的复制粘贴,十分的不工整。这是个人恩怨了,撇开不提。
NSNotificationCenter
这种只是不痛不痒的小问题,仅仅是逻辑不够优雅,关系不够清晰罢了。但是如果委托使用不当那是恶心的不行。看下这个聊天页面:
@interface ChattingViewController () <UITableViewDataSource, UITableViewDelegate, UITextViewDelegate, ChattingActionsPanelDelegate, ChatModelDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, HBTalkTableViewCellDelegate, EGORefreshTableHeaderDelegate, XTImagePickerControllerDelegate, ChattingInputPanelDelegate, VoiceRecordingButtonTrashBinViewContainer, ChattingUserDetailPanelDelegate, VoiceRecordingButtonDelegate>
这是一个真实的故事 。整个类将近 3000 行,有 2000 多行是委托里定义的方法,你能信?
在这三千行代码里漫步,万事都要小心。因为你不知道 callIn
这种方法到底是定义的私有方法,还是在委托里定义的方法。#pragma mark
自然也是看心情加的,说不定加错了你也不要当真。
有时候委托都删了不见影子了,但是委托里的各种方法还留在以前的类里。
没人敢动。
How to play.
正所谓:
异步回调用通知,委托多的令人痴。
反正老子看不懂,不写代码光写诗。
相信做 iOS 的都知道 AFNetworking
这个网络库,在我们的项目里 AFNetworking
分两种,一个是别人家的 AFNetworking
,一个是咱们的 AFNetworking
。对奏是这么任性。在一个 300 行的头文件里,在 99 行这样低调的位置里,静静的插上了自己的方法,还在上面认认真真的写上了准确的注释:
/*扩展*/ -(void)setDDCImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure;
扩展个头啊!你加在人家的头文件里你说你是扩展,谁信?
这种改动遍地都是,特点是极其低调,难以察觉,甚至 TTTAttributedLabel
这种 UI 库也不能避免:改了 init
为了统一字体和颜色。。。
你说这代码,谁敢改?
我还曾经单纯的想给项目加上 Cocoapods
更新一下第三方库,现在想想,Naive。等以后写到新的独立模块的时候再说吧。
正所谓:
项目勤用三方库,随意穿插改无数。
即使类库有更新,试问代码谁维护。
在聊天模块有这样一个类:ChatModel
,简直就是个多面手。
上能和服务器聊天,上传聊天消息同步聊天记录:
- (void)reSendMessages; - (void)receiveSecretaryMessage:(MessageEntity *)msgEntity; - (void)deleteMessagesByUserInfo:(UserInfo *)user; - (void)setAudioMessageBePlayed:(AudioMessageEntity *)audioMessage; - (void)sendBubbleReplyWithCallMessage:(CallMessageEntity *)callMessage; - (int)saveMessage:(MessageEntity *)message;
下能做本地缓存管理,增删改查样样精通:
- (void)saveCacheMsg:(NSString *)msg UserMd5:(NSString *)md5; - (NSString *)loadCacheMsgWithMd5:(NSString *)md5; - (void)clearCacheMsgWithMd5:(NSString *)md5;
至于什么弹窗提醒,上传进度,完成提示,亦是轻松拿下。
以至于你改着改着不知不觉都会走到这里,因为它处理了太多太多的业务逻辑,每次 DEBUG 追杀断点回到这里,都像是一场久别重逢时的相遇,似曾相识。
正所谓:
一人做事一人当,切忌都往类里装。
开发人员干的爽,维护人员很受伤。
有时候需求来也匆匆去也匆匆,让人猝不及防。比如一个简单的登录逻辑:
@interface LoginModel () @property (nonatomic, strong)NSString *tcpURL; @property (nonatomic, strong)UserInfo *offlineCallUser; @property (nonatomic, assign)VersionStatus versionStatus; @end
突然发现需要在版本更新的时候多个 API 检查,简单,加个 BOOL
,需要的时候设置成 YES 就行:
@property (nonatomic, assign)BOOL isShowVersionUpdate;
但是这个功能在 About
页面又有点改动,简单,再加个 BOOL 就行:
@property (nonatomic, assign)BOOL checkVersionFromAbout;
然后如果已经显示了注册页面又要少一些请求,行,那再加个 BOOL
值:
@property (nonatomic, assign)BOOL isRegisterShow;
得了,这代码只有你能懂了:
@interface LoginModel () @property (nonatomic, strong)NSString *tcpURL; @property (nonatomic, strong)UserInfo *offlineCallUser; @property (nonatomic, assign)VersionStatus versionStatus; @property (nonatomic, assign)BOOL isShowVersionUpdate; @property (nonatomic, assign)BOOL checkVersionFromAbout; @property (nonatomic, assign)BOOL isRegisterShow; @end
想象一下实现方法里各种对 BOOL
标记的特殊处理,想象一下 N 个 if
嵌套的壮观场景。
心塞。
正所谓:
凡是都要听产品,各种业务催的紧。
天塌下来也别怕,逻辑清晰自然挺。
所谓悲哀就是,当程序员发现一个 delegate
就能访问上级的对象,于是便把各种需要通知上级的事情都放在了委托方法里,尽管这些事情与委托本身无关,但是为了实现功能已经不在意这些所谓的设计与美观。
一个简单的 @optional
,甚至可以用同一个 @protocol
获取到各种不同的上级对象,只需要每次调用的时候加个 respondsToSelector
就行了。写上十几个可选方法,取一个通俗的委托名,比如 MyDelegate
,然后如果你持有了我但是我还想调用你的方法, so easy,把你的方法扔到 MyDelegate
即可。
此时的代码便已经不再是一件艺术品,而只是一个平凡普通、毫无生机的花瓶了。
原本还是挺欢快的吐槽,突然就不想写了。
看着以前的人写的代码,不禁有些凄凉。
在项目里用尽了各种低级下流的手段,只为了实现自己的业务。
这是对艺术的侮辱。
本文作者:Wang Hyde
代码仓库:
https://gitcafe.com/callmewhy
博客地址:
http://callmewhy.gitcafe.io
原文地址: http://callmewhy.gitcafe.io/2015/01/20/wtf-in-old-code/
]]>为了保证用户在 GitCafe 的数据安全,我们将不再支持 SSL 中的 RC4 协议。RC4 的移除影响使用 HTTPS 协议对 GitCafe.com 的 Web 访问和 Git repo 访问,不影响 SSH 协议进行的 Git repo 访问。准确地说,只有 Windows XP 上的 IE 6 会受到负面影响,现代浏览器都不会受到负面影响。Firefox 的特定新版本不会再看到关于 RC4 的警告。 我们强烈推荐 Windows XP 用户升级到更高版本的系统或者使用 Chrome 或 Firefox 来访问 GitCafe 。
在2011年的时候,各大主流浏览器都支持 TLS 1.0 协议并且广泛的采用了AES-CBC的加密方式。9月份 Thai Duong 和 Juliano Rizzo 发现了一个称之为
BEAST attack 的漏洞,这个漏洞专门针对 TLS ,当一个用户采用了 CBC-based 加密方式后,攻击者可以让用户跳转到一个恶意的网站。当时采用的一个解决办法是用了唯一一个支持 non-CBC 并且好用的 RC4 协议。
今天包括 Firefox 和 Chrome 在内的主流浏览器都已经不再像当年那样依靠系统层的 TLS 加密方式了,大多主流浏览器都已经支持 TLS 1.2 协议,对 BEAST 攻击免疫且还没有发现任何已知的可能的威胁。
RC4 当初提出的目的是解决 BEAST 攻击,但现在已经越来越显得有些鸡肋了。而且 RC4 算法采用的用xor的一种对称流加密。这种加密方式在弱密钥的情况下有可能被破解( 一个失败的例子就是WEP 网络传输协议 )。所以采用 RC4 加密方式可能会危害你的数据安全。
异或加密时基于逻辑运算中的异或操作:
A^0 = A
A^A = 0
(A^B)^C = A^(B^C)
(B^A)^A = B^0 = B
** Talk is cheap , show me the code **
data,key=1,2 data=data^key # data 的值等于 3 data=data^key # data 的值等于 1
采用异或的流加密是一种对称加密, 客户端和服务器之间使用同一个密钥来加密解密。
流加密时对称加密方式,加密和解密双方使用相同的伪随机加密数据流作为密钥,明文数据顺次加密并得到秘文。实践中通常是对一个位做异或操作。这种做法在密钥太弱或者其它一些错误操作的情况下会被破解。
流加密一个典型的例子就是 WEP 加密无线网络,我们经常通过抓取握手包来破解密码。
RC4 加密算法是一种密钥长度可变的流加密算法,由伪随机数生成器和异或运算组成。
上个周末,在北航新主楼会议厅里举行了首届 CSS 开发者大会,GitCafe 的前端工程师 Jaych Su 在会上做了演讲,与大家分享了一款更优雅的前端布局——Flexbox。现在,我们就邀请他来为大家讲一下 Flexbox 的相关知识吧~
在设计的眼中,排版的操作是一件很简单的事情,靠左、置中、靠右,我只要点一下,所有元素,就会乖乖的到指定的位置。
但到了前端在排版的实现上,就不是这样了。
我们常常得用一堆其实本来不是这样用的属性来做 hack,比如说用 line-height 来做垂直置中,这样做的确能达到效果,但是在语意上就有点不顺,拿刚刚提到的 line-height 来说,这本来是用来当作段落中的行距,但却因为这个属性能扩展文字的上下空间,结果也被拿来做垂直置中。那有没有一个方法能用来更好地实现 Web 布局呢?
这是 Google 的 Angular。他们几个月前做了一套 UI 来实现在 Angular 上的 Material Design。这套框架用来实现布局的方式,不是以往的 float,而是用了 Flexbox。
Flexbox 是什么呢?就 W3C 官方给到的解释是,这是设计来实现更复杂的版面布局。那我自己对他的定义是,Flexbox 从本质上就是一个 Box-model 的延伸,我们都知道 Box-model 定义了一个元素的盒模型,然而 Flexbox 更进一步的去规范了这些盒模型之间彼此的相对关系。而不需要去用一些很 cheat 的做法,去 hack 一些本来其实不应该用来做版面布局的属性。
身为一个喜欢去玩一些新东西的前端,应该说每个跟互联网有所接触的人,都需要去学新东西。
这是我碰到新东西的时候,一定会问自己的三个问题:
1. 这能做什么?也就是他能解决什么问题?
2. 能用在哪裡?在哪些地方能用这个方法?
3. 为什么能用?他实现所用到的逻辑是什么?
接下来就跟大家分享一下,当初看到 Flexbox 的我问了自己这个三个问题之后,到目前为止我找到的答案。
举一个例子,所有前端都会有的痛点,置中,我们以前是怎么实现的?
最常看到就是用绝对定位,然后把 top 和 left 偏移 五零%,在用 margin 偏移回去。但是这只适用在已经固定大小的元素。
最近几年常看到的做法是这样,在想置中的元素之前,加上一个元素,不想管太旧的 IE 的话,甚至伪元素也可以。在容器用 text-align,然后把底下的两个元素弄成 inline 的形式,在用 vertical-align。他的好处就是,即使底下的元素会随内容改变大小,但不管怎么改变,就是可以始终维持垂直和水平置中。
当然啦,还有很多置中的方法,就不一一介绍了,我们来看一下用 flex 的话怎么置中。
用 Flex 来做置中的话,你可以很从容地做到置中,不用一堆即使本来不是这样用的属性。我只要先指定容器为一个 Flex 容器,然后 justify-content 让他水平方向置中,再 align-items 让他垂直方向置中。我可以很简单很优雅的就做到置中。
那也许你会说,欸?既然一个可以的话,那我再多放几个可不可以?其实可以的。
假设我们现在容器底下有三个元素,喔,这裡就要提到 Flexbox 另外一个屌炸天的功能。
假设一个元素是四零%,另一个是一二%,那在一个 Flex 容器中,只要你有设定 flex-grow 这项属性的话,他的第三个元素就会自适应宽度,填满剩下容器的空白。而在多个元素的状态之下,我们仍然能很轻易的就置中。
刚刚我们提到过,flexbox 是用来规范盒模型之间的相对关系,从这裡你就可以看到。现在我将 justify-content 设成 space-around,元素就会变成已分散对齐的方式去分佈在 flex 容器中。
关于元素的分步,我们再来看几个例子。
这是一个我最近看到的网站。我们可以看到他底下有一个 Slider,这有个问题,而且也常常是前端在版面上的一个痛点,我们想让所有的子元素能够等高。在以前我们很难只用 CSS 去做到这样。
而 flexbox 可以很轻易地只用 CSS 做到这点。只需要在 flex 容器加上 align-items 就好。就能实现容器底下的所有元素,与最高的那个元素等高。
即使我在本来最高的那个元素多加一些内容,其他的元素也一定会维持等高。
Flex 最初被 W3C 于 09 年制定出来,随后就被大量的讨论。拿指定元素为一个 flex 容器来讲,第一个版本裡是 display:box,第二个版本是 display: flexbox,第三个版本是 display: flex。实在太复杂,还好现在在开源的世界里已经有大大把这三个版本的 flex 做成一些 mixin,使用的时候,你只要 include 进来就可以。
就跟 IE 的使用体验一样,所有的好东西跟 IE 基本都沾不上边,所以如果你需要考虑 IE 用户,那请慎入。所以有人说 IE 的功能只剩下用来下载 Chrome 和 Firefox。
如果你到网上搜 flex,大多都会著墨在 他的对齐、他的控制 DOM 顺序是如何如何好用。但今天我们想聊一聊更深一点的东西,flex item 宽度的计算,大多数情况下,我们只在意显示的比例,这也是宽度的计算比较少被讨论的原因,但如果你想要更精确的控制 item 的显示宽度,其实你是需要去了解,在一个 flex 容器当中,item 的宽度是如何被计算出来的。
当我们把一个容器指定为 flex 容器时,它裡面的 item 其实是有著这样的设定:flex: 0 1 auto
这三个数字其实分别代表:flex-grow、flex-shrink、flex-basis,这三个属性可以说是 flex 之所以智能的原因。
我们先来聊聊 flex-basis 好了,这个属性在 flex 容器为横向的时候,其实就是宽度,当我们把 item 指定成 flex: 0 0 480px 时,其实就是把它的宽度设定成 480px。但是这样并不能表现出 flex 有什么特别的地方啊?为什麽要重複设定宽度?
这时候就要讲到另外两个属性:flex-grow、flex-shrink
这两个属性其实是双胞胎,grow 表示在 item 总宽度比容器小的时候,为了让 item 填满容器,每个 item 增加的宽度。假设有三个 basis 为 100px 的 item。我们从左到右给予 grow 值分别为 3、2、1,那么当 flex 作用之后,最左边的 item 实际增加的宽度是多少?从图中可以算到增加的宽度是 90px,于是最后最左边 item 的宽度是 190px。
我们刚才提到 grow 跟 shrink 其实是双胞胎,其实他们真的很像,shrink 表示在 item 总宽度比容器大的时候,为了让 item 填满容器,每个 item 减少的宽度。但是计算的公式却是不一样的。为什么?因为当你在加的时候无所谓,但是在减的时候,如果只计算赋予的 shrink 值,那么很有可能最后减少的宽度比 basis 大,于是 item 的宽度就变成负值。那我们该怎么修正?把 basis 当成参数计算进去,这样就能保证减少的宽度永远小于 basis。所以我们可以得到修正后的公式,一样以最左边为例子,最后计算出来减少 60px,于是 item 就变成 140px。以上脑子不好使,没关系,实际上最常用的只是 flex: 1。
讲到这里,你刚刚讲的好像这东西很厉害的样子,那你有没有一个最快最简单粗暴的方式去说 Flexbox 真的是个好东西?
嗯⋯⋯有点难,不过我想应该可以。
GitCafe 是一个基于代码托管服务打造的技术协作与分享平台,开发者可以通过使用 Git 代码版本控制系统将其开源或商业项目代码托管在 GitCafe 上,与其他程序员在线协作开发。 GitCafe 的使命是促进国内 IT 行业积极良性的发展。 我们帮助研发团队更好的进行代码的管理与协作,为企业提供优化的工作流程与解决方案;同时助力国内外 IT 企业打造更好的开发者生态系统,获得强有力的企业级技术推广平台。
可以先去 https://gitcafe.com 感受一下。
GitCafe 携手又拍云、bong、LeanCloud、七牛云存储、ping++、上海纽约大学和清华 Thacks等举办了线上线下的黑客马拉松比赛;GitCafe 走进台湾 COSCUP 年会、上海 QCon、北京 GDG Devfest、复旦大学博士生学术论坛、香港 BIP Asia 等大会分享了精彩的演讲;GitCafe 携手开源社高校巡回宣讲走访了清华、北航、复旦等全国 13 所高校,为同学们带去了丰富的开源文化与知识;微软 Open XML SDK、巨杉数据库、UCloud 联手 9 秒社团将变色龙 SDK 以及 CrossApp 等开源项目托管在了 GitCafe 的平台上;GitCafe 推出了全新的 UI 2.0 与企业级解决方案,Pages 服务启用顶级域名 gitcafe.io;GitCafe 的 HTML5 小游戏——GitBubble 上线了!
我们努力为开发者打造一个良好的生态环境,为开发者提供便利的服务,我们团队会继续认真努力,助力于大家的梦想。一路走来,也离不开大家对我们的支持、鼓励与建议,才能让我们变得更好。
接下来的路,我们诚挚邀请各位 V2EXer 与我们一起走过,见证我们的发展,也能多提建议,让我们更加完善。
这个节点,留给每一个人,发表你们的意见,我们也会分享一些有趣的新鲜事、技术干货的分享和开源文化。
再次感谢大家!
GitCafe 团队致上
欢迎关注我们的微信公众账号:
也可以通过 “搜索 GitCafe” 关注我们的微博账号
]]>