忙活了一年的开源社区,终于赶上了春节前的末班车!

随着春节的临近,忙碌了一年的小伙伴们,是不是都已经踏上了回乡的列车?我呢也终于在春节前,完成了 HelloGitHub.com 的重构。

HelloGitHub.com 是我在 2017 年的时候用 Flask+jQuery 开发的网站,最初的想法很简单就是为了方便管理和发布《HelloGitHub 月刊》,上线后这一用就是 5 年。

随着编程技术的不断发展,当年构建网站用的技术栈已经有些过时了,再加上之前网站的内容是围绕月刊而不是开源项目构建,很难再开发更多的功能,很大程度上限制了它的发展。所以我在 2022 年初的时候,决定彻底重构 HelloGitHub 网站,将它做成一个围绕开源项目的社区,用户可以在里分享、评论、打分开源项目,就像开源项目的豆瓣

经过一年的努力,全新的 HelloGitHub.com 社区终于顺利上线,我是越用越顺手、越看越喜欢,虽然她入世未深还有很多不足之处,但俗话说的好”丑媳妇总得见公婆“,而且这不是快过年了嘛,也是时候介绍给大家认识了。

地址:http://hellogithub.com

下面,就让我带大家走进这个专注于开源领域、类开源版豆瓣的开源社区——HelloGitHub

一、不破不立

我建立 HelloGitHub 的初衷很简单,就是想让优秀的开源项目被更多人发现和喜欢,随着开源的蓬勃发展,优秀的开源项目如雨后春笋般层出不穷。每月一期的 HelloGitHub 月刊,每期收录的项目从第一期不到 20 个,现在已经提高到了近 40 个,但是就算是这样还是有很多优秀的开源项目,会因为月刊的篇幅有限而无法入选

既然月刊限制了推荐开源项目的数量,那我就将月刊页面打散做成信息流的样子。这样虽然月刊收录的项目有限,但那些没有收录到月刊的开源项目,也能出现在 HelloGitHub 网站的首页,让更多人看到。

所以,我就把 HelloGitHub 网站的「首页」改成了信息流,这里不仅有月刊中的项目,还有未能入选月刊但同样优秀的开源项目。这样一来,用户不仅可以看到更多的开源项目,同时也可以让没能入选月刊的开源项目,获得流量和关注

为了做出上述的功能,我需要将原本核心的月刊表和开源项目表进行重新设计。因为,之前 HelloGitHub 的数据都是围绕月刊,像 Star 数、链接等开源项目的信息,只能算是月刊内容的扩展项。现在要倒过来将月刊内容变成开源项目的扩展内容。

这就相当于把月刊打散,最小单位从月刊改成开源项目,从而实现围绕开源项目的首页信息流,以及根据标签过滤开源项目、搜索等功能。

二、相辅相成

接下来,随着项目的独立「开源项目详情页」也就顺势而生,用户可以在这里查看更多关于该项目的信息,比如:项目评分、是否包含中文、主要的编程语言、是否活跃和开源协议等。

除此之外,还可以执行点赞、收藏、分享、访问项目、评论、评分等操作。

用户是社区的核心,用户对开源项目的评价是这个社区的价值所在。经过一番思考和调研,我又重新设计和修改了一版「详情页」,突出了用户最常用的访问项目操作,最关心的评分,并将点赞、评分等操作变得更加醒目

如果将 GitHub 上的开源项目信息比作产品成分表,那么 HelloGitHub 上的标题、附加描述、用户点赞、评论和评分就是产品包装。我认为大多数开源项目作者都是程序员,他们喜欢醉心于项目的研发,但不愿花力气去想宣传语、写文案、做推广。

既然如此,我就想出了一个组合:你负责用代码改变世界,HelloGitHub 来为你带上奖章。所以我做了「网站徽章」的功能,用户可以通过一键复制代码,将项目在 HelloGitHub 获得的点赞数展示出去,并且点击该徽章后可直接进入到开源项目的详情页,开源项目的潜在用户不仅可以方便地查看其它使用者的评价,还可以留下自己对开源项目的看法。

我经常说“不懂编程的人也可以为开源做贡献”,在 HelloGitHub 一个点赞、一个评论、一个分享,都是在为你喜欢的开源项目做贡献

三、以旧换新

这次网站改版的幅度有些大,导致有的老用户刚进来有些懵,找不到之前用的功能了。其实旧功能一个都没有少,我只是将他们的入口整齐地放在了 header。

不仅如此,我还对旧网站的月刊、编程语言排行榜、文章等模块做了移动端适配。

以及一些细节优化,比如:月刊内的目录、期数选择、增加了详情页的入口等。

网站还增加了黑暗模式,需要登录后才能看到切换黑暗模式按钮,就在用户头像的旁边。

除此之外,这里还展示了用户等级和贡献值,下面介绍下获得贡献值的 2 种方式:

  1. 发布评论
  2. 分享项目

分享项目的按钮分别在首页「提交项目」和月刊「推荐」,现在分享开源项目时只要输入想要分享的项目链接,就能立刻检测出项目是否被推荐过,不仅可以有效地防止项目重复推荐,还可以避免最后提交时才发现项目已经推荐过,白写推荐语的悲剧。

重头戏来了,通过「我的主页」可以进入到个人首页,这里有你的贡献值动态、评论记录、收藏的项目,而且收藏夹不仅可以自己看,还可以支持「公开收藏夹」从而让更多人看到你精选的开源项目集。

四、群策群力

至此,HelloGitHub 社区的功能就介绍完毕了,下面聊一聊网站背后的技术栈、开发过程和贡献者们。

HelloGitHub 一共由 4 个项目组成:

  • Geese:社区前端(Next.js+Tailwind CSS)
  • Pangu:后端接口服务(FastAPI)
  • Taichi:后台管理前端(Antd Pro)
  • Sand:爬虫(Requests+rq)

Taichi:后台管理

2022 年初,我下定决心要重构 HelloGitHub.com 的时候,做的第一件事是重启管理后台的 Taichi 项目,因为这样不会影响还在运行的网站。目标是将管理后台的功能做成前后端分离,并且实现用它制作并发布月刊。

Taichi 创建于 3 年前是网站的管理后台,用的还是老版的 Antd Pro V2,基本处于荒废的状态。一开始我和猴子在旧的项目上开发,进度十分缓慢。后来项目新来了一位叫 我是油条 的前端同学,贡献了几个功能后,开始吐槽项目的 antd pro 太老了,想要升级一下。

我同意了,但讲真的我根本没抱什么希望,思想上的巨人行动上的矮子我见多了,结果当天下午他就用 V5 将 Taichi 重写了一遍。虽说我被啪啪啪地打脸,但还是开心地笑出了猪声。这个沉寂了多年项目,终于要开足马力往前冲了!

后面的三个月,我就专心写产品文档和接口,油条负责写前端,在 6 月份的时候,我如愿以偿地在 Taichi 上面制作并发布了《HelloGitHub》第 75 期月刊。

再次感谢我是油条让我在有生之年可以用 Taichi 出月刊。

Geese:社区前端

用新的管理后台发完月刊后,我又马不停蹄开始了新的项目:Geese 社区前端。

因为新社区也要做成前后端分离,再加上我想将部分页面(月刊)做成服务器端渲染(SSR),所以最终就选择了基于 React 的 Next.js 框架。然后原子 CSS 框架在国外比较火,我一想反正我也不会 CSS,用哪个都得现学,索性就用最新、最流行的吧!所以最后项目的采用了 TypeScript+Next.js+Tailwind CSS 技术栈

项目地址:http://github.com/HelloGitHub-Team/geese

万事开头难,我花了一周时间,边看 Next.js 和 Tailwind 的文档边搭建项目。

我自己一个人开发实在是太慢了,所以 7 月份的时候,我写了篇文章《求助!网站重构需要帮手》寻求帮助,众多大神纷纷伸出援助之手,有人贡献代码、有人修复 bug、有人帮忙部署。六个月后的 Geese 共有 400+ commit,7 位贡献者,感谢各位的帮助,你们每一位都是我的英雄

这里要特别感谢 RJM1996(如故)和 zhangzhonghe(被雨水过滤的空气)两位贡献者,他们完成了项目收藏、评论、月刊等核心功能。没有你们的参与和支持,我无法顺利完成 Geese。

后端和数据处理

最后说一下数据这块,后端和爬虫这块由我一个人开发完成,没什么可说的。

主要的困难在数据处理这块,为了更好地介绍开源项目,我为项目增加了更多的相关信息,比如:标题、标签、官网和文档链接等。这些都需要人工一个个处理,这个时候我们熟悉的小鱼干就来帮忙啦!但架不住项目太多,目前还差 1500 多个项目没处理。

这些未处理的项目,因为信息不全所以没有详情页,这就是为什么明明有的项目在月刊中,但是就是搜索找不到的原因。现在网站一期的功能已经开发完,后面我会全力梳理已有的开源项目,争取在 3 月份的时候全部搞定!

另外,因为登陆从之前的 GitHub 授权换成了微信授权,这是两套完全不同的用户系统,无法自动关联。所以老网站的用户数据需要人工迁移过来,如果有用户想要将旧网站的收藏夹数迁移到新社区,请联系我

五、最后

随着,全新的 HelloGitHub.com 上线,网站也从之前单一的展示月刊内容,升级到了支持用户互动的开源社区。这是一个新的高度也是新的挑战,因为我没有运营过社区,就像五年前我没有做过站长一样。我有些忐忑,不停地刷新着网站,仿佛一切又回到了五年前,过往种种浮上心头:不破不立、相辅相成、群策群力,我的眼神逐渐变得坚定。

不忘初心,方得始终。HelloGitHub 会牢记初心,一如既往地给大家带来有趣、优秀的开源项目。

最后,感谢大家一路走来的支持和陪伴,提前祝大家春节快乐,我们年后见!

以上就是本文的所有内容,如果您觉得这篇文章写得还不错,就请给我点一个赞,您的支持就是我更新的动力。


作者:削微寒
扫描左侧的二维码可以联系到我
知识共享许可协议
本作品采用署名-非商业性使用-禁止演绎 4.0 国际 进行许可。

本文转载于网络 如有侵权请联系删除

相关文章

  • 物体交互操作之鼠标拖动物体任意移动(Unity3D)

     大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧。一、前言物体交互操作非常的多,比如说用鼠标拖动物体移动,用鼠标拖动物体旋转,用鼠标滑动让物体放大和缩小。下面就用代码演示一下如何使用鼠标拖动物体移动。二、效果图三、实现步骤1、新建一个Cube,设置好物体的坐标大小为(0,0,0)2.新建脚本Drag.cs,叫脚本Drag.cs挂在Cube上3.编写脚本Drag.csusingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; publicclassDrag:MonoBehaviour { //偏移值 Vector3m_Offset; //当前物体对应的屏幕坐标 Vector3m_TargetScreenVec; privateIEnumeratorOnMouseDown() { //当前物体对应的屏幕坐标 m_TargetScreenVec=Camera.main.WorldToScreenPoint(transform.position); //偏移值

  • Kotlin之JSON格式解析

    大家好,又见面了,我是你们的朋友全栈君。kotlin解析json文件第一步:首先导入KlaXon库,官网地址是:https://github.com/cbeust/klaxon 导入成功后我们将试着编译一个Json资源 创建Gradle项目导入包 repositories{ jcenter() }dependencies{ implementation‘com.beust:klaxon:5.0.1’ } 完成导入工作就可以使用了 第二步:编译开始valJsonObjec=json{ obj(“name”to“zhangsan”,“age”33)}这是第一种创建方式类似{“name”:“zhangsan”“age”=30} JsonObjec.put(“sex”,flast)这是第二种创建方式,类型{“sex”:flast} vallist=listOf(1,3) JsonObject.put(a,list)数组的创建方式,类似{“a”:[1,3]}可以实现多重嵌套 到现在编码已经完成,打印出来到就是一个完整到json格式 如果是要解析Json文件,其实很简单!需要创建Parser

  • GoAccess 分析Nginx 日志

    安装了一下GoAccess测试了一下,把过程写下来,大家有需要的可以看看。GoAccess主页http://goaccess.prosoftcorp.com/安装方法1、安装GoAccess需要一些系统支持库yuminstallglib2glib2-develGeoIP-develncurses-develzlibzlib-devel如果yum库找不到Geo-IP那么需要单独安装了. #cd/usr/local/src #wgetwgethttp://sourceforge.net/projects/goaccess/files/0.5/goaccess-0.5.tar.gz/download #wgethttp://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz #wgethttp://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz安装GeoIP库#tarxzvfGeoIP-1.4.6.tar.gz #cdGeoIP-

  • 第一个Python小爬虫

    之前就对Python爬虫和机器学习很感兴趣,最近终于是开始学习了....好吧,不是没时间,而是有时间的时候都干别的了,所以对于还需要抽时间学我只能是‘好吧’的态度...今天急急忙忙的就上手了一个小例子,随便爬了网站试试,算是入门级的吧,但是由于兴趣所以还是非常激动的。前两天看了下Python基础,因为有其他语言的基础加上HTML、js都是会的,所以也就是看了下基础的语法和java有啥不同,然后一些理论知识。我是在廖雪峰博客和自己找的一些基础视频看的,初步了解了下Python的语法,还有Python和Java的区别,对于两种语言实现相同功能的不同写法等等。然后了解了下Python的历史,和版本的区别。我选用的是Python3.7 安装程序。一些基础的知识暂时没做笔记,基本是参考廖雪峰博客还有网上的一些视频网站视频就能明白的。要深入的话最好是买下书籍来看吧。基础还有些并没有很通透吧,想着做的时候再单个知识点去深入。好吧,言归正传。这个示例还是非常简单得,因为之前有看过相关视频,所以还算是理解。目标是爬取美图吧首页的一些数据。获取页面Python对网页访问首先需要引入urllib.reque

  • Kubernetes 部署 MySQL 高可用读写分离

    Kubernetes部署MySQL集群简介:在有状态应用中,MySQL是我们最常见也是最常用的。本文我们将实战部署一个一组多从的MySQL集群。一、配置准备configMapcat>mysql-configmap.yaml<<EOF apiVersion:v1 kind:ConfigMap metadata: name:mysql labels: app:mysql data: master.cnf:| #Applythisconfigonlyonthemaster. [mysqld] log-bin slave.cnf:| #Applythisconfigonlyonslaves. [mysqld] super-read-only EOF复制configMap可以将配置文件和镜像解耦开。上面的配置意思是,创建一个master.cnf文件配置内容为:log-bin,即开启bin-log日志,供主节点使用。创建一个slave.cnf文件配置内容为:super-read-only,设为该节点只读,供备用节点使用。servicecat>mysql-services.y

  • 遇到这样的公司,请提桶跑路!

    昨天在网上看到一件事情某公司为了赶项目,公司领导压缩开发人员时间,导致技术人员天天通宵加班,上线后出了一些BUG,其公司领导直接大骂技术人员并且强制要求加班,技术负责人敢怒不敢言。后续迭代功能公司领导不断压缩开发时间,最后集体解雇技术人员!在这里我想说两个点:第一点:这个领导不配做领导!因为这个领导不把下面的技术人员当人看,让技术人员天天通宵加班做开发,这个是一个正常领导能做的出来的事情吗?通宵之后,白天技术人员是不是需要休息,一个人通宵的效率会比白天上班的效率更高吗?而且通宵很伤身,身体都不好了,能有高效率的产出吗?第二点:技术负责人要表明态度!遇到这种情况,应该直接表明自己态度,很多领导就是欺软怕硬,当然表明态度上去也有被辞退的风险。但是作为技术负责人,就是应该为下面的人扛一份压力,要不然下面的人更加不敢说,唯一的结果就是团队成员一个一个离职,这样就算公司不集体解雇,这个团队长期被压迫也不会有好的成长。我自身也经历过这种情况,有一次我作为技术负责人做一款产品,要求2个月的时间,结果直接要求时间被砍了一半的时间,也是天天加班,1个月通宵10天,后来开发完成后,我跟领导反馈如果这样团队

  • 安装Ceph集群(二)

    注意:版本更新非常快,有问题要看官方文档官方文档:http://docs.ceph.com准备环境 系统版本:centos7.4x86_64server 硬件配置:5台vm,1核1G内存,每台node角色的机器至少挂载1块不低于5个G的空闲盘为osd存储 ​ 主机名iprole admin192.168.153.130admin--安装ceph-deploy node1192.168.153.131mon/mgr/osd node2192.168.153.132osd node3192.168.153.133osd ceph-client192.168.153.134 1.给三台node节点添加一块大小5G以上的磁盘。 2.所有节点修改主机名并相互解析 3.关闭所有机器的防火墙和selinux 4.所有节点创建普通用户并设置密码--所有节点都操作 [root@admin~]#useraddcephu [root@admin~]#passwdcephu ​ 5.确保各Ceph节点上新创建的用户都有sudo权限--所有节点操作 [root@admin~]#visudo----在rootA

  • EasyDSS视频直播无法下载录像的问题排查及解决

    EasyDSS具有电视直播、现场直播、时移电视、即刻回看和视频点播功能,适合OTTTV、IPTV、互联网教育、视频聊天、现场直播和VOD等应用。并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求。在EasyDSS的客户项目现场中,了解到有个项目现场无法下载EasyDSS的直播录像,控制台显示这个下载的操作一直处于加载状态:于是我们检查了录像回看是否能正常播放,就发现播放的时候也是有问题的,有视频流但是不能播放出来。随后进行同一个服务器对比发现,其他的录像可以正常的播放,只有这一路不可以,因此猜测是否为录像的问题,于是我们又单独播放ts切片来查看是否可以播放,得知TS切片可以正常播放。TS切片也没有问题,那是否是m3u8的文件写入有问题,我们又进行了新一轮的排查。可以发现这个m3u8文件没有结尾就结束了,所以我们单独的在最后手动添加一句#EXT-X-ENDLIST如下图:添加完成保存,再次尝试下载录像,可以看到下载正常。

  • 一条命令实现端口复用后门

    ‍‍‍0x00:前言‍‍‍‍‍ 说到端口复用,大部分人第一反应肯定是想到内核驱动,需要对网络接口进行一些高大上的操作才能实现。但只要合理利用操作系统提供的功能,就能以简单的方式实‍现这一目标,本文将公布一种基于内置系统服务的端口复用后门方法。对于不想看原‍‍理,只关心如何使用的读者可以直接跳到“0x02.后门配置”。0x01.基本原理介绍该后门的基本原理是使用Windows的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门。WinRM服务WinRM全称是WindowsRemoteManagement,是微软服务器硬件管理功能的一部分,能够对本地或远程的服务器进行管理。WinRM服务能够让管理员远程登录Windows操作系统,获得一个类似Telnet的交互式命令行shell,而底层通讯协议使用的是HTTP。HTTP.sys驱动HTTP.sys驱动是IIS的主要组成部分,主要负责HTTP协议相关的处理,它有一个重要的功能叫PortSharing,即端口共享。所有基于HTTP.sys驱动的HTTP应用可以共享同一个端口,只需要各自注册的url

  • 推荐一些优秀的甲方安全开源项目

    这是一份甲方安全开源项目清单,收集了一些比较优秀的安全开源项目,以帮助甲方安全从业人员构建企业安全能力。这些开源项目,每一个都在致力于解决一些安全问题。项目收集的思路:一个是关注互联网企业/团队的安全开源项目,经企业内部实践,这些最佳实践值得借鉴。另一个是来自企业安全能力建设的需求,根据需求分类,如WAF、HIDS、Git监控等。这个收集是一个长期的过程,我在GitHub创建了一个项目,专门用来收集一些优秀的甲方安全项目。GitHub项目地址:https://github.com/Bypass007/Safety-Project-Collection复制项目内容根据企业安全能力建设的需求,大致可以分为如下几种类型:资产管理insight:洞察-宜信集应用系统资产管理、漏洞全生命周期管理、安全知识库管理三位一体的平台。 https://github.com/creditease-sec/insightxunfeng:一款适用于企业内网的漏洞快速应急,巡航扫描系统。 https://github.com/ysrc/xunfeng安全开发rhizobia_J:JAVA安全SDK及编码规范。

  • 《程序员修炼之道》解读

    美团这边有个很好的风格。上上下下谁出去参加什么技术会议、培训之类的都会回来主动给大家做分享。用了近两天的时间读了一本《程序员修炼之道》,自己的收获分享给大家,也算是美团精神的一个发扬。    读的时候本来打算用金字塔原理对文章进行归纳后输出文章,看完后发现附录里“注重实效的程序员之快速参考指南”里70的句子每句话都应该背下来。没有办法再精炼。所以打算如果有时间就介绍几点。这本书的中文版和英文版都已经上传百度网盘。大家请自由下载。https://pan.baidu.com/s/1dQZDQMXc1ahSKcs963FylQ  (第一次用百度网盘上传功能,自己试过了可以打开,但不能100%确认别人看到的效果,如果不能下载请留言给我,我检查下问题出在哪里。)   先说一下为什么要都背下来。举个静儿工作中实际发生的例子。有次开会大家讨论一个技术方案。负责的同学列出了两个方案。第一个方案是简单方案但是有缺陷。第二个方案比较接近最终方案,但是给的比较模糊,并且方案设计者觉得实现起来非常的复杂。我们leader一开始就说选择方案1大家没有意见吧,然后开始说方案1怎么做。然后我就起来给出了另外一个方案

  • 火绒安全软件,出现在你需要的时候。

    火绒安全软件4.0深度融合反病毒+主动防御+防火墙 强悍、轻巧、干净安装①打开连接:http://www.huorong.cn/prod.html ②直接安装即可。使用①一共有四各方面②病毒查杀和平常见到的病毒查杀是一样的,操作很简单。③防护中心有具体的开关,很强大,比如关闭的联网控制,每个应用试图联网的时候火绒都会弹出提示是否允许联网,我嫌烦就关了④家长控制适用于家长控制家里的熊孩子,可以控制上网时间,程序执行,网站内容和U盘之类的设备使用控制⑤这里是各种小工具,最强大的火绒剑,右键管理,文件粉碎,弹窗拦截,启动线管理等等。除了自动推荐的拦截,还可以截图拦截,比如当某个程序弹出广告,可以点击截图拦截,框出广告,以后就可以实现拦截。 ⑥在设置里,托盘区都可以对火绒进行更详细的配置。——End——

  • 鸡蛋煎的好不好?Mask R-CNN帮你一键识别

    翻译|王柯凝 编辑|Just出品|人工智能头条(公众号ID:AI_Thinker)▌介绍 关于卷积神经网络从交通灯识别到更实际的应用,我经常听到这样一个问题:“会否出现一种深度学习“魔法”,它仅用图像作为单一输入就能判断出食物质量的好坏?”简而言之,在商业中需要的就是这个:当企业家面对机器学习时,他们是这样想的:欧姆蛋的“质量(quality)”是好的 这是一个不适定问题的例子:解决方案是否存在,解决方案是否唯一且稳定还没办法确定,因为“完成”的定义非常模糊(更不用说实现了)。虽然这篇文章并不是关于高效沟通或是项目管理,但有一点是很有必要的:永远不要对没有明确范围的项目作出承诺。解决这种模棱两可的问题,一个好办法是先构建一个原型模式,然后再专注于完成后续任务的架构,这就是我们的策略。▌问题定义在我的原型实现中关注的是欧姆蛋(omelette),并构建了一个可扩展的数据管道,该管道输出煎蛋的感知“质量”。可以这样来概括:问题类型:多类别分类,6种离散的质量类别:[good,broken_yolk,overroasted,two_eggs,four_eggs,misplaced_piec

  • DevOps:新的业务浪潮

    DevOps是一种基于将敏捷和精益哲学应用于运营工作的新业务,过去,运营和研发工程师在不同的领域工作,DevOps完全改变了这一状况,两者在整个生命服务周期中紧密结合在一起,DevOps也由此得名。用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。实际上,你可以说DevOps只是将标准的敏捷原则扩展到开发人员编写的代码范围之外,而不是跨整个交付的服务。DevOps所要求的新的文化和专业方法已经开始对公司产生重大影响,这可能是由一系列原因造成的,包括创建更稳定的操作环境、更快的产品功能交付或连续的软件交付。无论哪种方式,DevOps已经证明它可以使公司的产品生命周期、竞争优势并能够快速满足用户需求。考虑到这一点,我们来看看企业今年采用的DevOps趋势。第一个趋势是企业的认可,DevOps不仅仅是一个新的市场,更是一个哲学和文化的转变。Gartner指出,越来越多的组织正在认识到DevOps不仅仅局限于实施和技术管理,而且对于企业内部的员工来说,更深入地

  • 极客DIY:打造属于自己的无线移动渗透测试箱

    本文中介绍的工具、技术带有一定的攻击性,请合理合法使用。 你想不想拥有一款属于自己的移动无线渗透测试箱,如果你感兴趣,下面介绍的设备将会对你很有帮助。这个箱子被称为“MiTM(中间人攻击)WiFi箱”,使用这个箱子可以完成一些无线审计工作,同时也可以伪造接入点并完成中间人攻击。工具要求如果你真的想要做这个箱子那么你需要如下工具:5或6mm的钻木/金属钻头 开口扳手(规格8) 钳子 手术刀/裁纸刀 尼龙扎带(俗称:勒死狗)箱子的选择 这里有些建议,你选中的箱子最好是用过一次以上,另外需要注意的是一定不要选择扔掉设备之后留下的那种空箱子。箱子要求最好是黑色的尺寸大约是230x150x100mm必须是防水的(可以经受的起风吹日晒)价格自选箱子最好里面有泡沫内衬,并且外面有扣锁建议:如果你是第一次做这个项目,你可以尝试用一些ducttape胶带(一种用来密闭供暖或空调管道的银色宽胶布)或热熔胶,在塑料包装盒里面先练习。塑料包装盒的盒壁很薄,所以你有可能使用不同的方式以及材料固定部件以及连接器的长度,例如(图片来源于其它项目)下面这个例子:无论怎么样,我找到了一款箱子,B&Wtype1

  • 什么是QoS?

    QoS(QualityofService)即服务质量。在有限的带宽资源下,QoS为各种业务分配带宽,为业务提供端到端的服务质量保证。例如,语音、视频和重要的数据应用在网络设备中可以通过配置QoS优先得到服务。QoS的重要性在IP网络的业务可以分为实时业务和非实时业务。实时业务往往占据固定带宽,对网络质量变化感知明显,对网络质量的稳定性要求高,例如语音业务。非实时业务所占带宽难以预测,经常会出现突发流量。突发流量会导致网络质量下降,会引起网络拥塞,增加转发时延,严重时还会产生丢包,导致业务质量下降甚至不可用。解决网络拥塞的最好的办法是增加网络的带宽,但从运营、维护的成本考虑,这是不现实的,最有效的解决方案就是应用一个“有保证”的策略对网络流量进行管理。QoS一般针对网络中有突发流量时需要保障重要业务质量的场景。如果业务长时间达不到服务质量要求(例如业务流量长时间超过带宽限制),需要考虑对网络扩容或使用专用设备基于上层应用去控制业务。近几年,视频的应用出现了爆炸式的增长,现在几乎每个人都拥有一部能够随时随地拍摄高分辨率视频的智能手机。同时随着社交网站的涌现,分享和发布视频成了每个人的日常行

  • Zabbix-(三)监控主机CPU、磁盘、内存并创建监控图形

    Zabbix-(三)监控主机CPU、磁盘、内存并创建监控图形 一.前言 前文中已经讲述了两种方式对Zabbix的搭建,本文将讲述如何在zaibbx上添加需要监控的主机,以及使用Zabbix自带模板和自定义模板对主机的CPU、磁盘、内存进行监控,并触发问题,并且在Zabbix仪表盘创建实时监控图形。 准备 ZabbixServer(Zabbix4.4)(ip:192.168.152.140) 被监控主机A(Centos7.6),下文简称Server-A(ip:192.168.152.142) 被监控主机B(Centos7.6),下文简称Server-B(ip:192.168.152.143) 二.为被监控主机安装zabbix-agent Server-A、Server-B分别安装zabbix-agent #rpm-Uvhhttps://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm #yuminstall-yzabbix-agent 复制 Server-A、Serv

  • Codeforces Round #286 Div.1 A Mr. Kitayuta, the Treasure Hunter --DP

    题意:0~30000有30001个地方,每个地方有一个或多个金币,第一步走到了d,步长为d,以后走的步长可以是上次步长+1,-1或不变,走到某个地方可以收集那个地方的财富,现在问走出去(>30000)之前最多可以收集到多少财富。 解法:容易想到DP,dp[i][j]表示到达i处,现在步长为j时最多收集到的财富,转移也不难,cnt[i]表示i处的财富。 dp[i+step-1]=max(dp[i+step-1],dp[i][j]+cnt[i+step+1]) dp[i+step]=max(dp[i+step],dp[i][j]+cnt[i+step]) dp[i+step+1]=max(dp[i+step+1],dp[i][j]+cnt[i+step+1]) 但是步长直接开30000存的话肯定是不行的,又发现,其实走过30000之前,步长的变化不会很大,如果步长每次增加1的话,那么最少1+2+...+n=n(n+1)/2>30000,n<250,即步长变化不会超过250.所以第二维保存相对原始步长的改变量,-250~250,开500就够了,这样就不会MLE了。 代码:

  • ionic 打包成apk后,所有网络请求404

    无论怎么改config.xml  <allow-navigationhref="http://*/*"/> <allow-intenthref="*"/> <accessorigin="*"/>复制 都是没效果的,后来在 http://stackoverflow.com/questions/30161952/ionic-angular-how-to-avoid-the-404-not-found-from-cache-after-post-reque 上找到了答案 先卸载白名单插件,再安装一遍 cordovapluginremovecordova-plugin-whitelist cordovapluginaddcordova-plugin-whitelist复制 没人知道为什么,但是它就是好的

  • tf.keras 用生成器读取图片数据+预处理

    0.需求 当训练的数据非常多时,是不希望分配过多的内存将数据存入,否则其他占用内存的数据处理步骤就没法进行了。我们最好是以小批量地方式读入数据,然后预处理,然后送到网络,之后释放内存,以此循环。   1.方法的简要说明 tf.keras中有一个高度封装的图片预处理类:ImageDataGenerator ImageDataGenerator类还实现了一个非常方便的自动读取训练集文件夹的方法:flow_from_directory() 我们实例化一个ImageDataGenerator类后,设置预处理的参数;然后对实例调用flow_from_directory()方法。对该方法传递一个路径参数,路径为数据集所在目录。其中训练集和测试集要分成两个文件夹,并且每一个label对应的图片存放在以label命名的文件夹中。 调用flow_from_directory()方法之后,会返回一个生成器。 生成器可以用next()函数来在每次迭代中提取(X,y),或者也可以直接传递给实例化的模型类的fit()方法 (使用前建议shift+tab查看函数|类的说明文档)   2

  • 23 列表推导式和生成器表达式

    #列表推导式复制 egg_list=['鸡蛋%s'%iforiinrange(10)]#列表推导式 print(egg_list)复制 egg_list=[] foriinrange(10): egg_list.append('鸡蛋%s'%i) print(egg_list)复制 print([i*iforiinrange(10)])复制 #生成器表达式复制 g=(iforiinrange(10))#返回生成器g print(g)#生成器地址 foriing: print(i)复制 #括号不一样#返回的值不一样===几乎不占用内存复制 老母鸡=('鸡蛋%s'%iforiinrange(10))#生成器表达式 print(老母鸡) for蛋in老母鸡: print(蛋)复制 g=(i*iforiinrange(10)) g.__next__()复制 #[每一个元素或者是和元素相关的操作for元素in可迭代数据类型]#遍历之后挨个处理#[满足条件的元素相关的操作for元素in可迭代数据类型if元素相关的条件]#筛选功能复制 #完整的列表推导式复制 #30以内所有能

相关推荐

推荐阅读