从 SDWebImage 谈如何为开源软件做贡献

来源:伯乐在线 - 酷酷的哀殿

链接:http://ios.jobbole.com/89483/

点击 → 申请加入伯乐在线专栏作者

相识 – 知我者谓我心忧,不知我者谓我何求

今天和别人聊天时,扯到了这个非常著名的开源库。算算日子,我和 SDWebImage 已经认识 3 年零 11 个月了。将近四年的时间,说短不短,说长不长。

作为 iOS 开发者,我接触的第一个库就是 SDWebImage(第二个是 ASIHttpRequest),研究时间最长的也是 SDWebImage。

刚学完基础知识,开始做项目时,我就用到了这个图片缓存库。下面的代码是我从 SDWebImage 身上学到的第一个知识,也是最重要的一个知识:如何设计一个接受多个可选参数的方法,并让调用方能够简单地使用。

对于初出茅庐的我来说,这份代码带给我的除了上面的知识以外,我还学会了如何给现有的类写 扩展,第一次见识了 block 的 威力 ……

@implementation UIImageView (WebCache)

- (void)setImageWithURL:(NSURL *)url

{

[self setImageWithURL:url placeholderImage:nil];

}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder

{

[self setImageWithURL:url placeholderImage:placeholder options:0];

}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(`SDWebImage`Options)options

{

`SDWebImage`Manager *manager = [`SDWebImage`Manager sharedManager];

// Remove in progress downloader from queue

[manager cancelForDelegate:self];

self.image = placeholder;

if (url)

{

[manager downloadWithURL:url delegate:self options:options];

}

}

#if NS_BLOCKS_AVAILABLE

- (void)setImageWithURL:(NSURL *)url success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;

{

[self setImageWithURL:url placeholderImage:nil success:success failure:failure];

}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;

{

[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];

}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(`SDWebImage`Options)options success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;

{

`SDWebImage`Manager *manager = [`SDWebImage`Manager sharedManager];

// Remove in progress downloader from queue

[manager cancelForDelegate:self];

self.image = placeholder;

if (url)

{

[manager downloadWithURL:url delegate:self options:options success:success failure:failure];

}

}

#endif

实际上,通过这个项目,你还可以学到更多,比如,如何通过 NSData 判断图片的类型,如何管理多线程队列……

相知 – 悲莫悲兮生别离,乐莫乐兮新相知

不知何时起,我注册了 github 账号,关注(watch)了这个开源项目。

对特定项目进行 watch 操作后,该项目任何新的 conversation(合并提交,创建新的 issue,有人回复 issue)都会产生一个未读通知。

随着我对它的了解也越来越深,我发现了一系列令人震惊的事实:

  • 这个库仅仅是由两位开发者维护者更新
  • 历史最悠久的未关闭 issue 出自 2011 年
  • 几乎所有的版本都有大小不一的 bug(crash、获取错误的图片、回调无法执行……)这些事实一次次地令我感觉震撼,作为一个拥有 15824 个 star 的开源库,它是如此的脆弱。于是,我成为了一名志愿者,我努力地帮助开发者团队解决 issue。

相杀 – 消灭bug,是所有程序员的梦想

Bug 是所有程序员的噩梦,而上面的 bug,有很多是在特定情况下才会发生的,是无法仅仅依靠开发团队来避免的。作为该项目的成果享有者,我们是否可以做出一些自己的贡献呢?

大部分的开发者可能会觉得自己无法贡献代码。那么,我们是否可以充当该项目的测试人员呢?

我在下面简单的列出了一些普通开发者能做些什么(主要以 SDWebImage + CocoaPods 为例)。希望各位读者能够一起为开源软件做贡献。

SDWebImage 的当前版本号为 3.8.2

  • 在项目的短期开发分支使用 pod ‘SDWebImage‘, ‘~> 3.8.2‘,并定期执行 pod update。

    可以快速收到 bug 修复版本,可以帮助验证是否已经解决 bug。

  • 在项目的长期开发分支使用 pod ‘SDWebImage‘, ‘~> 3.8‘,并定期执行 pod update。

    可以快速收到小的功能更新版本,可能需要修改项目代码,有较小的概率有 bug。

  • 在新的项目中使用 pod ‘SDWebImage‘, ‘~> 3‘,并定期执行 pod update。有重大版本更新时,有很大概率需要修改项目代码,有较大的概率有 bug。
  • 定期根据版本更新修改 Podfile
  • 发现相关bug 后,请及时创建 issue。点此创建

    https://github.com/rs/%60SDWebImage%60/issues/new

后记

SDWebImage 4.0 版本已经在路上,该版本提供了更加细粒度的控制加载请求,兼容 Swift 3,使用了最新的 OC 语法……

时间: 2024-10-05 06:34:47

从 SDWebImage 谈如何为开源软件做贡献的相关文章

使用开源软件做项目有风险

作者:Ivony链接:https://www.zhihu.com/question/29636221/answer/71201381来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 当然,微软的确有操蛋的地方,作为纯粹的商业公司,微软在任何领域失去假想敌之后都会萎靡不振,这是商业公司的通病.不单是微软,苹果.谷歌.十八摸,包括国内的BAT,一旦在某个领域失去竞争对手,业务裁撤的比微软快多了. 这可以视为商业软件/框架/引擎的一个通病和弊端,但是问题在于,开源软件也并

如何为开源项目做贡献?

不要问国家能为你做什么 要问你能为国家做什么 采坑步骤: 1.为项目做贡献的方式是pull request 在issue里面可以找到一些开放的任务或者标签. 维护者会在issue加上一些标签,你可以很容易发现一些没有分配的任务. 2.有些牛逼的项目不接受任何的贡献. 但是通常都有一个CONTRIBUTING.md.里面都有详细的说明 3.开始之前检查一下是否有issues存在和pull requests 确保自己不会重复别人做的工作. 4.Fork这个项目,之后在本地. clone到本地. 5.

倪光南:中国开源软件存在的主要问题

中国工程院院士倪光南在12月11日电子工业出版社研究院和<中国信息化>杂志举办的首届中国开源云计算大会上发表主题演讲时指出,中国开源软件在国际上的贡献度在提升,但总体发展还必须尽快化解有关观念.环境.投资不足等主要问题. 必须化解三大问题 面 对来自全国各地各行业的600多位信息技术主管和开发应用人员,倪光南院士以详细的数据,介绍了我国开源软件的发展情况.他指出,就开源软件Linux Kernel 3.17来说,补丁包数如今已有12183个,来自40个国家的开发者.按照个人贡献排序,6.71%

Hadoop开源软件及生态系统

Hadoop开源软件及生态系统:方向hadoop的运维,hadoop的开发按用户规格或为开源软件做二次开发. 云计算与大数据:狭义的云计算与广义的云计算:三层模型: Hadoop的起源:Doug Cutting,google核心技术, Google vs Hadoop Hadoop的特点:开源社区的支持,分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性,并且它的框架可以运行在任何普通的pc上,不论是存储的可扩展还是计算的可扩展都是hadoop的设计根本,分布式

开源软件测评方法及工具

一.开源史上最成功的八个开源软件 就开源本身而言,它就是个成功案例.它不仅受个人喜欢,而且众多知名企业也青睐于它.虽然开源计划和开源产品数不胜数,但哪一个才是最成功的呢?这里所说的"成功"的定义是:应用广泛+众所周知.而在众多成功的开源产品中,只有少数领头羊,而其他产品基本只能望其项背. Linux 上榜理由:Linux + GNU = GNU/Linux .从Linus Torvalds在1991年宣布他在Minix基础上创建一新OS内核到现在已经接近20年了.在这段时间内,大部分网

修改开源软件以后仍保持更新同步

git merge ―― 为什么比diff + patch好 2013.2.16, 北京 本文地址: http://www.jiangyouxin.net/2013/02/16/git_merge.html 基于开源软件做二次开发是很常见的.这类开发常常遇到的问题是,当我们已经针对开源软件做了很多修改,与上游主干版本之间已经渐行渐远:此时上游主干有了更新,此时如何把上游的更新与我们自己的修改合并起来?假定上游主干版本为A,我们在A的基础上开发了A':此时上游主干更新到B,现在我们要做的事情就是相

《开源框架那点事儿13》:基于开源框架做应用是未来中小型软件公司的发展趋势

在我的周边朋友身边就发生过这样的事情: 故事1:A君在北京从事Java开发好多年了,萌发了创业的念头,想组建了一个开发团队想大干一场.但是慢慢发现,构建一个有战斗力的团队真不容易.后来技术团队的组建初步有了起色,但是技术路线却非常难成一致意见.折腾来折腾去,把有点上道的技术人员都折腾得跳槽了.费了巨高的成本搞了一个架构师,就是利用SSH框架搭建了一个开发环境,数据量小,业务初期还是不错的,但是当业务快速增长的时候,运行速度就无法满足需要了.是重新来过还是在SSH的基础上继续折腾,非常难以抉择!

做移动端视频通话软件,大致看了下现有的开源软件(转)

转自:链接 要做一个移动端视频通话软件,大致看了下现有的开源软件 一) sipdroid1)架构sip协议栈使用JAVA实现,音频Codec使用skype的silk(Silk编解码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器)实现.NAT传输支持stun server.2)优缺点:NAT方面只支持STUN,无ICE框架,如需要完全实现P2P视频通话需要实现符合ICE标准的客户端,音频方面没看到AEC等技术,视频方面还不是太完善,目前只看到调用的是系统自带

开源软件收集

http://www.7-zip.org/7-Zip 4.16 Beta : 文件压缩工具,可与Windows资源管理器集成http://a-note.sourceforge.net/A Note 4.2.1 : 可在Windows桌面放置便笺,并可提供闹钟提醒功能http://www.xs4all.nl/~edienskeAbakt 0.9 : 能够以压缩方式对文档进行备份http://www.abisource.com/Abiword 2.27 : Windows写字板的替代程序,功能有所加