首页 文章 精选 留言 我的

精选列表

搜索[文档处理],共10000篇文章
优秀的个人博客,低调大师

开源项目应如何处理版权声明?

原文:How should open source projects handle copyright notices 作者:Scott K Peterson,翻译:御坂弟弟 简单使用即可,将关注点放在其它地方。 源代码中的版权声明前后不一致且维护不善,其结果将导致使用者难以理解。那么,是否应将更多资源用于维护版权声明?并非如此。 版权声明是单行字符串,通常包括单词 “Copyright”(或某些替代词,如©)、名称(通常是个人或公司)和年份。 在本文中,我不关注许可证或许可证声明(有时可能包括版权声明)。我关于版权声明维护投资处于低优先级的建议不适用于许可证信息。许可证信息应清晰呈现并保持准确。如果您邀请他人使用您的软件并对其进行操作,请通过提供并维护清晰的许可证信息来明确授予的权限。 回到版权声明:它们的法律意义是什么?如果您认为版权声明符合法律要求或至少提供了重要的法律优势,请三思。此类声明在开源软件中的法律意义是如此之小,以至于人们可以轻易地找到超过法律意义的实际考虑。 尽管这些声明可能看起来很重要,但它们在当今的源代码中的存在很大程度上是过去版权法的​​残余。有一段时间,如果未在已出版的材料中包含版权声明,可能会导致完全丧失美国版权法提供的权利;当美国最终加入许多其他国家已经加入的"伯尔尼公约"时,情况发生了变化(美国于1988年11月16日加入该条约,并于 1989 年 3 月 1 日在美国生效)。 如果开源软件中的这些声明有实际作用,则一个项目可以采用公约而不是由于美国对“版权声明”的法定要求去维护版权声明,从而以更少的成本去维护,并且仍然获得一些实用价值。 由于美国版权法一直是推动版权声明使用的重要因素,因此我将在此进行更深入的探讨。美国版权局发布了称为通函的指导文件。3 号通函中有关版权声明的内容包括: “在 1989 年 3 月 1 日之前首次出版的所有作品都必须进行版权声明,但下面讨论的某些例外情况。如果省略了该声明或在使用版权声明时出现了错误,则该作品在美国通常失去版权保护。 对于 1989 年 3 月 1 日或之后出版的作品,未出版的作品以及外国作品,版权声明是可选的;但是,将声明包含在您的作品中在法律上有利。” 总而言之,在美国,版权声明在1988 年就非常重要。但是,当美国加入许多其他国家存在的《伯尔尼公约》时,美国法律对版权声明的关键作用被消除了。公约规定:“享有和行使这些权利不需任何手续……” 麻省理工学院(The X Window System)和加州大学伯克利分校(Berkeley Software Distribution)的软件项目促进形成了早期的许可证文本,每个许可证文本都起源于严格的 “notice-or-lose-it” 要求仍然有效的时期( 或至少对那些为这些许可证文本做出贡献的人来说,“notice-or-lose-it”仍记忆犹新)。其结果是这些许可证文本都具有关于复制版权声明的明确内容。 随着基于这些文本的许可证的广泛使用,大多数开源软件开发人员已经看到版权声明似乎在许可证中显得很重要。但是这些文本是在考虑较早的法律制度的情况下创建的。现在,距《伯尔尼公约》(大多数其他国家已经接受)的无手续规定首次适用于美国的时间已经过去30年了。要了解《伯尔尼公约》的采纳程度,请参阅管理《伯尔尼公约》的世界知识产权组织维护的缔约方清单。 您可能想知道上面引用中提到的那些“法律优势”,答案在 3 号通函的末尾。 尽管对于未出版的作品、外国作品以及于 1989 年 3 月 1 日或之后出版的作品,声明是可选的,但使用版权声明具有以下优势: 声明使潜在用户意识到作品拥有版权。 对于已发表的作品,声明可能会阻止版权侵权诉讼中的被告试图限制其基于无辜侵权抗辩的损害赔偿或禁令救济的责任。 声明标识了在首次发布作品时版权所有者的权利,供寻求使用该作品许可的各方使用。 声明标识首次出版的年份,对于匿名作品、假名作品或出租作品而言,可用于确定版权保护期限。 声明可能会通过标识版权所有者并指定版权期限来防止其成为孤立作品。 以上就是版权声明的优势。 我引用了美国版权局第 3 号通函,因为与基本法规相比,它对要求的措辞更具可读性。美国联邦一级的成文法已被编入所谓的《美国法典》,该法典由一系列“标题”组成。标题 17 是版权。版权声明的详细信息位于该标题的第 401-406 部分。一个可以从 17 USC 401开始。有关法规要求在版权声明中包含的三个要素的说明,请参见 17 USC 401(b)。如果要查看“遗漏对无辜侵权者的影响”的详细信息,请参见 17 USC 405(b)。 为了提供更准确的信息,为什么不清理代码库中的版权声明?令人尴尬的是,17 USC 506(c)(欺诈性版权声明)、17 USC 506(d)(欺诈性删除版权声明)和 17 USC 1202(a)(虚假版权管理信息)提供了一些不利因素(即使仅限于不良意图)。由于价值较低且存在一定风险(如果在进行更改时出错),因此无怪乎没有将更多资源用于维护版权声明。 有些人和公司强调将详细的声明放入根据开源许可证提供的代码中,有些没有。随着开源项目的发展,某些贡献可能包含声明,而其他贡献则没有。即使文件的内容与原始版本相比发生了很大的变化,文件也可以包含原始声明,而不包含其他声明。或者以后的贡献者可以向以前没有声明的文件中添加一个声明。那么,版权声明的要素是“该作品的首次出版年份”吗?这又意味着什么?见仁见智。那么更新呢?比如当其他贡献产生的时候呢? 至于通过挖掘版权声明数据得出结论,要谨慎,并且不要有过高期望。 开源项目应该做什么? 请提供并维护清晰,准确的许可证信息。 对于版权声明,很难证明为维护版权声明详细信息而进行的投资是合理的。但是有些人可能希望有声明。至于“软件的起源”,也许仅仅用于项目而不是尝试捕获更细粒度的内容会更有用和更准确。至于出版年份?手动维护源文件太麻烦所以不大值得,源管理工具以更低的资源成本提供了更准确的信息。 有版权声明的更多详细信息,我推荐您阅读:开源软件项目中的版权声明,作者:史蒂夫·温斯洛(Steve Winslow),写于 2020年 1 月 10 日。

优秀的个人博客,低调大师

图像处理基础:颜色空间及其OpenCV实现

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Soumyadip Sarkar 编译:ronghuaiyang 导读 对图像的颜色空间做了一个概念性的介绍,并通过代码的方式可视化了每种颜色空间的每个通道所表示的意义。 文章内容包括: 什么是颜色空间? 颜色空间有哪些类别? 如何在OpenCV中实现? 什么是颜色空间? 颜色是一种连续的现象,它意味着有无数种颜色。但是,人类的眼睛和感知能力是有限的。所以,为了识别这些颜色,我们需要一种媒介或这些颜色的表示,这种颜色的表示被称为色彩空间。在技术术语中,一个颜色模型或颜色空间是一个特定的3-D坐标系统以及该系统中的一个子空间,其中每一种颜色都由一个单点表示。 有哪些颜色空间的类型? 目前主要有五种类型的颜色模型。但是,我将只写一些常见的(RGB、HSV和HSL)。 RGB(Red Green Blue) HSL(Hue Saturation Lightness) HSV(Hue Saturation Value) YUV(Luminance, blue–luminance, red–luminance) CMYK(Cyan, Magenta, Yellow, Key) RGB颜色空间: RGB颜色空间是三维坐标系中红、绿、蓝坐标所表示的著名颜色空间之一。在更专业的术语中,RGB将颜色描述为由三个部分组成的元组。每个部分都可以取0到255之间的值,其中元组(0,0,0)表示黑色,元组(255,255,255)表示白色。元组的第0、第1和第2个部分分别表示红、绿、蓝的分量。 RGB颜色空间的Python实现: 这里我们导入了必要的库,cv2用于颜色空间转换,NumPy用于数组操作,Matplotlib用于显示图像,os用于访问图像目录,tqdm用于显示加载栏。 hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####hsl_img_1=hsl_img.copy()hsl_img_2=hsl_img.copy()hsl_img_3=hsl_img.copy()hsl_img_1[:,:,1]=0####HUE-->ZERO####hsl_img_1[:,:,2]=0hsl_img_2[:,:,0]=0####SATURATION-->ZERO####hsl_img_2[:,:,2]=0hsl_img_3[:,:,0]=0####LIGHTNESS-->ZERO####hsl_img_3[:,:,1]=0 设置两个空列表Z和X,分别用于存储带有各自图像的标签,然后指定图像大小和路径目录。在这之后,我定义了两个函数,用于返回flower类型(assign_lable)和访问每个图像、读取和调整其大小(make_train_data)。 Z,X=[],[]IMG_SIZE=150FLOWER_SUNFLOWER_DIR='../input/flowers-recognition/flowers/flowers/sunflower'defassign_label(img,flower_type):returnflower_typedefmake_train_data(flower_type,DIR):forimgintqdm(os.listdir(DIR)):label=assign_label(img,flower_type)path=os.path.join(DIR,img)img=cv2.imread(path,cv2.IMREAD_COLOR)img=cv2.resize(img,(IMG_SIZE,IMG_SIZE))#Resizingtheimage 加载图像,然后在OpenCV以BGR格式读取图像时将BGR颜色空间转换为RGB颜色空间,但Maplotlib使用RGB格式来显示图像。这就是为什么我们需要转换颜色空间后,读取图像为RGB。 然后对固定图像进行三份拷贝,并将每份拷贝的任何双色通道设为零,分别用于访问红、绿、蓝通道。如果你让第0个颜色通道都是0那么你只会得到蓝色通道。 make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR)#####LoadingSunflowerDatafix_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB)###########CONVERTINGBGRCOLORSPACEINTORGBCOLORSPACE#########new_img_1=fix_img.copy()new_img_2=fix_img.copy()new_img_3=fix_img.copy()new_img_1[:,:,0]=0#makingRchannelzero####ForBLUEchannel#####new_img_1[:,:,1]=0#makingGchannelzeronew_img_2[:,:,1]=0####ForREDcolorChannel####new_img_2[:,:,2]=0new_img_3[:,:,0]=0###ForGREENChannel####new_img_3[:,:,2]=0 显示图像: f,axes=plt.subplots(1,3,figsize=(15,15))list=[new_img_1,new_img_2,new_img_3]i=0foraxinaxes:ax.imshow(list[i])i+=1 HSL颜色空间: HSL的一般含义是色调、饱和度和明度。你可以将HSL以圆柱体的形式可视化,如图2(a)所示。围绕圆柱体的是不同的颜色,比如绿色、黄色、红色等等(我们真正想要的颜色)。饱和度是指颜色的多少,而明度是指颜色有多暗或多亮。正如你所看到的,圆柱体的顶部全是白色,底部全是黑色。 图2:HSL颜色空间 HSL颜色空间的Python实现: 使用OpenCV函数**cvtColor()**将BGR颜色空间转换为HSL颜色空间,在这里我们需要传递图像,以及从哪个颜色空间到哪个颜色空间我们想要改变图像。然后再复制并使两个颜色通道为零,以便分别显示每个颜色通道。 hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####hsl_img_1=hsl_img.copy()hsl_img_2=hsl_img.copy()hsl_img_3=hsl_img.copy()hsl_img_1[:,:,1]=0####HUE-->ZERO####hsl_img_1[:,:,2]=0hsl_img_2[:,:,0]=0####SATURATION-->ZERO####hsl_img_2[:,:,2]=0hsl_img_3[:,:,0]=0####LIGHTNESS-->ZERO####hsl_img_3[:,:,1]=0 现在显示三个不同的颜色通道→ f,axes=plt.subplots(1,3,figsize=(15,15))list=[hsl_img_1,hsl_img_2,hsl_img_3]i=0foraxinaxes:ax.imshow(list[i])i+=1 HSV颜色空间: HSV这个名字来自于颜色模型的三个坐标,即色相、饱和度和值。它也是一个圆柱形的颜色模型,圆柱体的半径表示饱和度,垂直轴表示值,角度表示色调。对于观察者,色调是占主导地位的,饱和度是混合到色调中的白光的数量,value是chrome的强度,value较低颜色变得更加类似于黑色,value越高,颜色变得更加像颜色本身。通过改变这些参数,我们可以生成不同的颜色。 图3:HSV颜色空间 HSV颜色空间的Python实现: 使用cvtColor()函数将色彩空间转换为HSV色彩空间。然后再复制并使两个通道置为零,以便分别显示每个通道。 hsv_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HSV)hsv_img_1=hsv_img.copy()hsv_img_2=hsv_img.copy()hsv_img_3=hsv_img.copy()hsv_img_1[:,:,1]=0#HUE-->ZEROhsv_img_1[:,:,2]=0hsv_img_2[:,:,0]=0#SATURATION-->ZEROhsv_img_2[:,:,2]=0hsv_img_3[:,:,0]=0#VALUE-->ZEROhsv_img_3[:,:,1]=0 单独显示每个颜色通道: —END— 英文原文:https://medium.com/analytics-vidhya/image-processing-series-part1-colorspaces-836d2e3ca700 请长按或扫描二维码关注本公众号 喜欢的话,请给我个在看吧! 本文分享自微信公众号 - AI公园(AI_Paradise)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

处理一次系统假死工作纪实

本文转载自微信公众号「相遇Linux」,作者JeffXie 。转载本文请联系相遇Linux公众号。 最近碰到客户反馈一个问题,系统hang了,ssh登录不上,但是可以ping通,通过串口登录进去之后,敲有些命令会卡住,查看cpu负载内存都很正常,手动触发kdump之后看不出死锁/softlockup/hardlockup等异常状态.而且重要的是已经影响到客户几十亿的业务了。 我能拿到的只有客户提供的vmcore,为了生活而奔波的人儿赶紧分析起来: 系统(SUSE 11SP1) #crash ./vmcore ./vmlinux-2.6.32.59-0.19-default ./vmlinux-2.6.32.59-0.19-default.gz crash>foreach IN bt > inbt 任意找到一个IN(可中断睡眠)的进程 12813 查看堆栈: crash>bt12813 PID:12813TASK:ffff880262eda140CPU:8COMMAND:"sshd" #0[ffff880f98e1ba58]scheduleatffffffff8139d2a4 #1[ffff880f98e1bb10]schedule_timeoutatffffffff8139d935 #2[ffff880f98e1bba0]unix_wait_for_peeratffffffff81376e27 #3[ffff880f98e1bc00]unix_dgram_sendmsgatffffffff813785c2 #4[ffff880f98e1bcb0]sock_sendmsgatffffffff812e8ddc #5[ffff880f98e1be50]sys_sendtoatffffffff812e9318 #6[ffff880f98e1bf80]system_call_fastpathatffffffff81002f7b 汇编unix_dgram_sendmsg() crash>disunix_dgram_sendmsg ... 2410xffffffff813785b7<unix_dgram_sendmsg+1143>:mov%r13,%rsi 2420xffffffff813785ba<unix_dgram_sendmsg+1146>:mov%rbp,%rdi(key1) rdi代表unix_wait_for_peer函数的第一个参数 2430xffffffff813785bd<unix_dgram_sendmsg+1149>:callq0xffffffff81376da0<unix_wait_for_peer> 进程12813 unix_wait_for_peer() 函数的堆栈数据: crash>rd-SSffff880f98e1bba0-effff880f98e1bc00 ffff880f98e1bba0:unix_wait_for_peer+1350000000000000001 ffff880f98e1bbb0:[ffff880262eda140:task_struct]autoremove_wake_function ffff880f98e1bbc0:ffff88021ea8bbc0ffff880238315bc0 ffff880f98e1bbd0:memcpy_fromiovec+87[ffff880238514980:UNIX] ffff880f98e1bbe0:[ffff880238514c30:UNIX][ffff880238514980:UNIX] ffff880f98e1bbf0:[ffff880ff708b630:UNIX]7fffffffffffffff 汇编unix_wait_for_peer() crash>disunix_wait_for_peer 0xffffffff81376da0<unix_wait_for_peer>:sub$0x58,%rsp 0xffffffff81376da4<unix_wait_for_peer+4>:mov$0x1,%edx 0xffffffff81376da9<unix_wait_for_peer+9>:mov%r13,0x50(%rsp) 0xffffffff81376dae<unix_wait_for_peer+14>:lea0x2b8(%rdi),%r13 0xffffffff81376db5<unix_wait_for_peer+21>:mov%rbx,0x38(%rsp) 0xffffffff81376dba<unix_wait_for_peer+26>:mov%gs:0xa580,%rax 0xffffffff81376dc3<unix_wait_for_peer+35>:mov%rax,0x8(%rsp) 0xffffffff81376dc8<unix_wait_for_peer+40>:lea0x18(%rsp),%rax 0xffffffff81376dcd<unix_wait_for_peer+45>:mov%rbp,0x40(%rsp)(key2) rbp压入堆栈(0x58-0x40)处,正好是unix_wait_for_peer堆栈中ffff880f98e1bbe8处,即( [ffff880238514980:UNIX]) 0xffffffff81376dd2<unix_wait_for_peer+50>:mov%rdi,%rbx 0xffffffff81376dd5<unix_wait_for_peer+53>:mov%rsi,%rbp 0xffffffff81376dd8<unix_wait_for_peer+56>:mov%r13,%rdi 查看unix_wait_for_peer()函数源码: 1005staticlongunix_wait_for_peer(structsock*other,longtimeo)(key3) 1006{ 1007structunix_sock*u=unix_sk(other); 1008intsched; 1009DEFINE_WAIT(wait); 1011prepare_to_wait_exclusive(&u->peer_wait,&wait,TASK_INTERRUPTIBLE); .. 1019if(sched) 1020timeo=schedule_timeout(timeo); 1021 1022finish_wait(&u->peer_wait,&wait); 1023returntimeo; 1024} 根据s(key1)(key2)(key3)可以知道12813进程在等待unix_sock(ffff880238514980) crash>structunix_sockffff880238514980|greppeer_wait-A10 peer_wait={ lock={ raw_lock={ slock=3369322707 } }, task_list={ next=0xffff880173427bc0, prev=0xffff8801877a7bc0 } } 查询出这个unix_sock是系统中的/dev/log文件(由syslog-ng创建,系统中大量需要记录log的进程需要通过这个unix_sock与syslog-ng通信,可以参考mansyslog-ng 和/etc/syslog-ng/syslog-ng.conf 配置文件) crash>structunix_sockffff880238514980 ... dentry=0xffff880e7634b9c0, ... crash>structdentry0xffff880e7634b9c0 ... name=0xffff880e7634ba60"log" ... 遍历这个unix_sock的所有等待队列, 说明有645个进程正在等待这个unix_sock(ffff880238514980/dev/log) crash>list__wait_queue.task_list-s__wait_queue.private-H0xffff880173427bc0|grep-iprivate|wc-l 645 所有等待unix_sock的进程重定向到一个wait_unix_sock_process文件 crash>list__wait_queue.task_list-s__wait_queue.private-H0xffff880173427bc0|grep-iprivate>wait_unix_sock_process 查询所有的sshd进程 crash>ps|grepsshd 709716ffff880244cae5c0IN0.0540881392sshd 1281370978ffff880262eda140IN0.0601482900sshd 1905570972ffff880ff74c4200IN0.0601482900sshd 2164270971ffff880262fb4340IN0.0601482904sshd 2195870971ffff880ffab501c0IN0.0601482900sshd 2245970976ffff880ff1ed4100IN0.012105210272sshd 22476224590ffff88022d11a500IN0.01213524552sshd 2333470972ffff880174b04640IN0.0601482900sshd sshd进程大部分都在wait_unix_sock_process文件中,所以ssh登录之后会卡住 查看syslog-ng进程堆栈 crash>bt15232 PID:15232TASK:ffff8801aba90680CPU:6COMMAND:"syslog-ng" #0[ffff88021ea8ba58]scheduleatffffffff8139d2a4 #1[ffff88021ea8bb10]schedule_timeoutatffffffff8139d935 #2[ffff88021ea8bba0]unix_wait_for_peeratffffffff81376e27 #3[ffff88021ea8bc00]unix_dgram_sendmsgatffffffff813785c2 #4[ffff88021ea8bcb0]sock_sendmsgatffffffff812e8ddc #5[ffff88021ea8be50]sys_sendtoatffffffff812e9318 #6[ffff88021ea8bf80]system_call_fastpathatffffffff81002f7b 查看 unix_wait_for_peer()堆栈数据: crash>rd-SSffff88021ea8bba0-effff88021ea8bc00 ffff88021ea8bba0:unix_wait_for_peer+1350000000000000001 ffff88021ea8bbb0:[ffff8801aba90680:task_struct]autoremove_wake_function ffff88021ea8bbc0:ffff880fce8dfbc0ffff880f98e1bbc0 ffff88021ea8bbd0:memcpy_fromiovec+87[ffff880238514980:UNIX] ffff88021ea8bbe0:[ffff880238514c30:UNIX][ffff880238514980:UNIX](key4) ffff88021ea8bbf0:[ffff88104c1c3930:UNIX]7fffffffffffffff 由(key4)可知syslog-ng也是在等待ffff880238514980 unix_sock 所以系统中大量的进程,包括sshd cron等其他的645个进程都在等待unix_sock(/dev/log)(/dev/log由syslog-ng创建),syslog-ng卡住在等这个unix_sock之后,系统中大量的进程都会卡住,包括sshd cron进程等. 但是syslog-ng为什么卡住从vmcore根本看不出来,很可能进程在用户层锁住了. 通过查看客户系统中最近安装的软件发现,他们最近安装了两个定制软件,卸载之后系统恢复正常。 #/bin/rpm-qa--last CARKpam-11.01-1.19TueJun922:49:222020 CARKaim-11.01-1.5TueJun922:38:482020

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册