2015-02-27 21:00:00
近期,我学习了Heroku团队在12factor.net上提出的12-Factor App原则,这些原则旨在指导现代Web应用的正确部署。核心原则包括:单一代码库、显式声明依赖、配置与代码分离、服务松耦合、构建、发布、运行分离、独立无状态进程、端口绑定、并发处理、可丢弃性、开发与生产环境一致性、日志处理和一次性管理进程。这些原则强调了环境一致性、可伸缩性和可维护性,旨在简化Web应用的部署和管理。
2015-02-27 21:00:00
近期,我学习了Heroku团队在12factor.net上提出的12-Factor App原则,这些原则旨在指导现代Web应用的正确部署。核心原则包括:单一代码库、显式声明依赖、配置与代码分离、服务松耦合、构建、发布、运行分离、独立无状态进程、端口绑定、并发处理、可丢弃性、开发与生产环境一致性、日志处理和一次性管理进程。这些原则强调了环境一致性、可伸缩性和可维护性,旨在简化Web应用的部署和管理。
2015-02-27 21:00:00
在AngularJS中,Service与Factory类似,但Service将函数视为构造函数,通过调用`new`创建对象。创建Service简单,如示例所示,通过定义一个函数并使用`.service()`方法注册。Service可用于外部API调用,如使用OpenWeatherMap API获取温度。Service支持原型链继承,允许使用原型继承。通过Service,可以方便地实现功能扩展和代码复用。在后续文章中,将探讨Constants和Values两种服务类型。
2015-02-27 11:00:00
Apache Cordova的File插件没有提供获取设备可用磁盘空间的方法,但我们可以通过使用`cordova.exec`函数来实现。首先确保项目中已安装File插件,然后通过调用`getFreeDiskSpace`方法获取结果,成功时将得到以千字节为单位的可用空间,可轻松转换为其他单位。此方法适用于Apache Cordova、Phonegap或Ionic Framework项目。
2015-02-27 09:00:00
本周io.js项目更新了多个组件,包括升级V8至4.1.0.21,npm至2.6.0,并修复了libuv的bug。ARM公司表示支持io.js项目,并计划将ARMv8作为服务器平台。io.js项目正在准备与Node.js基金会的协调计划,并推出了新的C++ Streams API。此外,多个社区和公司宣布支持io.js,包括Wallaby.js、jsdom、give、Firebase Realtime Client和Semaphore等。
2015-02-26 21:00:00
AngularJS中的Factory是一种轻量级的Provider包装,它虽然不如Provider灵活,但因其易用性而广受欢迎。Factory通过返回对象、函数或对象字面量来定义服务,常用于创建可重用的代码块,如控制器或服务中的方法。例如,通过Factory可以创建一个GreetingService,它包含一个greet方法。在实际应用中,Factory还可以用于调用外部API,如使用OpenWeatherMap的API获取温度信息。在控制器中注入Factory后,可以调用其方法并处理返回的Promise。总之,Factory是AngularJS中实现服务封装和代码复用的有效工具。
2015-02-26 09:48:06
Redis 创始人 Antirez 在其博客中回顾了 Redis 成立六年的历程。他强调了自己在 Redis 之外也持续进行着各种侧项目,如编程环境、软件定义无线电解码器等,这些项目不仅帮助他在压力和疲劳时保持创造力,也为 Redis 带来了新的灵感和动力。他认为,侧项目是推动主项目发展的关键,Redis 本身也是 LLOOGG 的一个侧项目。Antirez 表示,尽管 Redis 用户和贡献者数量增加,但他将继续保持对 Redis 的专注,并确保有新的侧项目来维持长期的创新和动力。
2015-02-26 03:00:00
REDstack,Target开发的Big Data开发沙箱工具,现已开源。该工具旨在OpenStack上提供安全的集群配置,支持预配置的LDAP和Kerberos服务器,实现即插即用,并具备自定义用户管理功能。用户可通过配置文件自定义集群大小、节点类型等,以获得灵活的集群管理体验。
2015-02-25 22:00:00
在创建独立指令时,我们通常使用`scope`属性来定义指令的外部API。其中,某些属性可能是必需的,而其他属性则是可选的,根据这些状态,指令可能会做出不同的反应。当传递函数与数据对象时,会遇到一个差异。例如,在定义了`data`和`clickFn`属性后,使用`ng-show`可以控制数据属性是否显示,但函数属性则不会这样处理。解决方法包括检查指令的`iAttr`参数,或者使用`&?`来定义函数为可选的。每个传递到指令隔离作用域中的函数都会被包装,以安全地调用。
2015-02-25 21:00:00
在React组件测试中,使用`componentWillReceiveProps`方法需要特别注意,因为它涉及改变props,而直接修改React组件的props是不被推荐的。为了解决这个问题,作者提出创建一个专门用于测试的React组件,作为被测试组件的父组件,通过改变父组件的状态来间接改变子组件的props。这种方法可以避免直接修改props,同时也能正确触发`componentWillReceiveProps`方法。文章通过一个具体的例子展示了如何实现这种测试方法,并提供了相关的代码和断言。
2015-02-25 21:00:00
NPR视觉部门在迭代一种类似幻灯片的视觉故事格式时,为了提高用户在故事结尾采取行动的意愿,进行了多变量测试。测试中,用户被问及故事是否触动他们,然后根据回答引导他们支持公共广播或关注社交媒体。结果显示,在故事结尾前提出问题比直接引导用户采取行动更有效。通过这些测试,NPR视觉部门学到了关于故事内容、实时测试运行和数据分析的重要经验,并决定将这种方法作为默认行为。
2015-02-25 21:00:00
HackerEarth的网站每天处理数百万个请求,通过分析这些请求日志,可以获得对业务至关重要的见解和指标。文章介绍了其日志收集系统的架构,包括Web服务器、传输器集群、Kafka集群和Pipeline Manager服务器。Web服务器通过Django Middleware异步收集数据,传输器集群负责接收数据并路由到其他组件,Kafka集群存储日志数据,Pipeline Manager服务器则管理数据消费、存储和迁移。这些系统共同确保了高效的数据处理和分析,为HackerEarth提供了宝贵的数据洞察。
2015-02-25 11:00:00
本文介绍了如何使用JavaScript反转字符串中的单词。首先,通过空格分隔符将字符串拆分为单词数组,然后从数组末尾开始循环,将单词拼接成一个新的字符串。文章还提供了一个自定义的字符串拆分函数示例,以展示如何不使用内置的`split`方法来实现相同的功能。最后,作者指出这个简单的算法可能在技术电话筛选中出现,并鼓励读者尝试不同的解决方案。
2015-02-24 21:00:00
Jake Wharton在Android平台上开发了一个名为SQLBrite的库,用于简化SQLite数据库的交互。该库支持自动表创建和迁移、对象映射、类型安全的查询和数据变更通知。SQLBrite利用RxJava的可观察性特性,允许开发者订阅查询结果,实现实时数据更新。该库目前已在GitHub上开源,未来将不断完善。
2015-02-24 21:00:00
Sinon库提供了间谍、存根和模拟三种测试工具,它们在测试中扮演着不同的角色。间谍用于观察函数的调用情况,存根则改变函数的调用方式,而模拟则结合了观察和验证功能。使用这些工具可以避免直接测试单元的依赖,提高测试的准确性。选择使用哪种工具取决于测试的具体需求和个人的使用习惯。间谍用于观察和验证,存根用于指定行为,模拟则两者兼具。
2015-02-24 21:00:00
程序员的职业生涯充满了挑战,他们需要在不断变化的技术环境中学习新知识,以解决复杂的问题。即使面对熟悉的代码,理解其运作也可能需要大量时间。因此,编写代码的过程往往伴随着持续的学习和努力,程序员需要学会在长时间的学习和挑战中保持耐心,这是他们职业生涯中不可或缺的技能。
2015-02-24 21:00:00
几个月前开始使用AngularJS,作者发现控制器过于庞大,于是思考将知识提取到独立实体中,并能够轻松将这些实体注入控制器。了解到AngularJS提供了五种服务类型后,作者通过学习并分享,解释了服务的概念、工厂和提供者,以及如何使用提供者创建和配置服务。以一个猫服务为例,作者展示了如何通过提供者来配置服务,并说明了在配置阶段可以进行的自定义配置,最后以Restangular服务为例,说明了AngularJS提供者提供的灵活性。
2015-02-24 21:00:00
为了获得更好的浏览体验,请确保您的浏览器已启用JavaScript。若需要帮助启用,请点击链接获取指导。
2015-02-24 20:00:00
Xcode 6.3 beta 2对Swift playgrounds进行了重大改进,使创建丰富、互动的playgrounds变得更加简单,非常适合用于文档、教程或项目示例。新功能包括:内联结果显示代码输出、添加样式化文本以及将资源文件夹直接嵌入playgrounds中。这些改进特别适用于教育者,可以插入丰富的教学内容。用户应关注更新说明,并报告发现的任何问题。
2015-02-23 21:00:00
Ruby的`OptionParser`类极大地简化了CLI工具的开发。通过定义选项和使用`on`关键字,开发者可以轻松地解析命令行参数,并使用`OpenStruct`存储选项状态。文章以一个示例代码展示了如何使用`OptionParser`来创建一个具有多个选项的CLI工具,并强调了格式化使用信息和自动生成帮助选项的重要性。此外,还提到了如何处理需要额外参数的选项,并简要讨论了可能的扩展。
2015-02-23 21:00:00
GoldenGate是一个用于Android应用程序开发的注解处理库,它通过生成Java包装器来简化原生代码与WebView中JavaScript代码之间的通信。该库在编译时确保发送正确的数据类型到JavaScript函数,从而提高代码的健壮性和安全性。通过定义一个接口并使用注解,GoldenGate可以自动生成Java类,使得调用JavaScript函数变得更为安全可靠。Flipboard团队推荐开发者使用GoldenGate来提升应用中混合原生和Web技术的开发效率。更多信息和代码示例可在GitHub上找到。
2015-02-23 21:00:00
为了获得更好的浏览体验,请确保您的浏览器已启用JavaScript。若需要帮助启用,请点击链接获取指导。
2015-02-23 21:00:00
为了获得更好的浏览体验,请确保您的浏览器已启用JavaScript。若需要帮助启用,请点击链接获取指导。
2015-02-23 21:00:00
为了获得更好的浏览体验,请确保您的浏览器已启用JavaScript。若需要帮助启用,请点击链接获取指导。
2015-02-23 12:00:00
2006年,马丁·福勒提出了“代码所有权”的概念,后来作者在团队实践中发现,尽管集体代码所有权(CCO)在初期效果显著,但随着团队规模的扩大和成员意见的不一致,导致责任分散、效率低下。作者随后提出了“弱代码所有权”的理念,即每个代码库有一个“主要责任人”,负责代码的生产过程和架构决策。这种模式有助于提高代码一致性,并解决责任分散、旁观者效应和群体心理学等问题。经过一年的实践,作者对这种模式的效果表示满意,认为它提高了团队的生产力和新成员的融入度。
2015-02-23 06:23:11
FileMerge是一款在OS X上使用的优秀的差异比较和合并工具,尤其在代码审查时,其丰富的上下文信息非常有用。它还支持行内差异比较,功能实用。然而,在XCode 6.1中的v2.8版本,默认显示合并界面,且调整设置后不会在下次使用时保留。解决方法是使用终端输入特定命令,但若再次使用合并界面,则需重复操作。作者呼吁苹果公司修复这一问题。
2015-02-23 01:09:14
IMVU团队在开发3D引擎Northstar时,采用了TDD(测试驱动开发)方法,但随着代码量的增加,测试节奏放缓,导致代码质量下降。为了解决这个问题,团队引入了变异测试,通过修改代码行并观察测试结果来检测测试覆盖率。这种方法帮助发现了一些未测试的代码和编译错误,提高了代码质量。然而,变异测试也存在一些挑战,如解析C++代码的复杂性、处理并行测试和优化测试速度等。IMVU团队认为变异测试对于确保代码质量和测试覆盖率非常有价值。
2015-02-22 21:00:00
本文讲述了一个求职者(木匠)在面试中解决一个关于棋盘游戏的问题,面试官(Christine)要求木匠根据棋盘上箭头的指示移动棋子,并判断游戏是否会停止。木匠试图将问题转化为图论问题,但面试官未能理解其思路。文章分析了木匠解决方案中的错误,并指出其将问题视为有序集合而非流,这是其错误之一。文章还讨论了面试中的常见问题,如面试官和求职者之间的沟通不畅,以及如何避免在面试中形成偏见。最后,作者总结了故事中的主要人物和事件,强调了合作和沟通在面试中的重要性。
2015-02-22 21:00:00
为了获得更好的浏览体验,请确保您的浏览器已启用JavaScript。若需要帮助启用,请点击链接获取指导。
2015-02-22 21:00:00
本文介绍了Go语言的GODEBUG环境变量,该变量可以生成程序运行时的调试信息,包括垃圾回收器和调度器的详细信息。通过分析一个并发Go程序的示例,文章展示了如何解释调度器跟踪信息。文章首先介绍了如何使用GODEBUG变量和schedtrace选项来获取调度器的概要跟踪信息,然后通过具体的代码示例和输出结果,详细解释了跟踪信息中各个字段的含义,包括处理器数量、线程数量、空闲线程数量、运行队列中的goroutine数量等。此外,文章还介绍了如何使用scheddetail选项获取更详细的跟踪信息,包括处理器、线程和goroutine的状态。最后,文章总结了GODEBUG变量的作用,并鼓励读者通过编写简单的程序来预测调度器的跟踪信息,从而更好地理解程序的运行行为。