Quantcast
Channel: Linux 中国◆开源社区
Viewing all 9060 articles
Browse latest View live

开放版权、可供个人免费使用的正版图片库荟萃

$
0
0

平常不管是我们自己个人写文章,还是做幻灯片,很多时候我们都要用到图片,确实文字配上图片之后排版会更加美观,眼睛也会更加愉悦,所谓“无图无真相,有图才够浪”,话虽这么说,大家都知道要配图,可是图从哪里来呢?网上随便搜索一张图片,Google、百度得来之就可以随便用吗?平常在一些论坛和网站看到好看的图片就可以下载来用吗?当然不行,Google 和百度只是搜索引擎,它们没有图片的所有权,标上“图片来自 Google/百度”其实没有任何意义,而看到好看的作者创作的图片,我们是应该要去联系获取人家的许可(有些需要付费,有些无需付费),方可使用,时间成本颇高,只适用于特别需要的图片。所以最好的办法是自己拍摄照片,或者制作图片,但是一来自己的库存有限,二来能力有限,不见得所有的都能自己做,何况术业有专攻,大部分同学也不太擅长制作图片。

小编特意搜集了开放版权的正版图片库,根据许可协议是可以允许个人免费使用、非盈利机构免费使用的。而且图片质量都非常高,来源大多是作者捐赠,或者搜集开放版权的图片汇整,像是 SpaceX 和 NASA 的很多图片都是开放版权免费开放给公众使用的,质量也非常之高,小编这篇文章的头图也就是下方这张图就是从 SpaceX 的图片库里取用的,在此先感谢 spaceX,个人也很喜欢马斯克,他一直在做很酷的事情。

这些资源都是在网络上可以自由访问,大部分都归类清晰,还有一些是托管在 flicker 上的,不过都可以免费下载使用,目前这 15 个小编都加到收藏夹里了,未来还会不断更新。

开放版权的可以免费下载使用的正版图片库荟萃

  1. StockSnap.io:每周都会更新数百个高分辨率的图片,图像没有版权限制,可以自由修改和使用。

  2. Burst:这是一个由 Shopify 提供支持的照片库,有许多类别可供选择。 尤其是如果你正在寻找用于 Facebook 等社交媒体的封面图片,Burst 有一个专题专门帮你介绍和遴选。

  3. Pexels:Pexels 图片库有着非常高质量的超高清自由图片库,它的开放协议是 CC Zero,并且大部分图片都加上了标签和分类,搜索非常方便,通过网站的“发现”功能,也可以遇到很精彩的意外精细之美。

  4. DeviantArt:DeviantArt 已经存在了很长时间,并且随着时间的发展变得越来越好用。免费注册之后,就可以在网站浏览和访问超过3.5亿件特有的的数字艺术作品。

  5. Free Nature Stock:这是一个由设计师、摄影师 Adrian&nbspelletier 发起建立的自然风光图片库,有不少高质量的作品。

  6. SpaceX:这是超酷的私人航天公司 SpaceX 拍摄的太空图片库,包括在地发射、太空中等大量原版图片,并且会不定期更新,只要 SpaceX 有新的发射计划完成,基本上都会有新图片补充进来,可以说是非常良心了,一点进去看到的特斯拉汽车在太空中漂浮的画面,还有 “DON’T&nbspANIC”,满满的银河系漫游指南的感觉,实在是太酷了。对太空迷、科幻迷绝对是超级福音,想要科技感的图片,来这里就对了。

  7. Gratisography:独立摄影师和创作者 Ryan McGuire 发起和建立的开源、开放版权的图片库。

  8. The British Library:大英图书馆在 Flickr 上的老照片图库,有着各式各样的老照片。

  9. Foodies Feed:这是一个专门提供食物图片的图库,听上去很神奇,食物图片其实有很多用途,比如可以装饰我们的一些社交媒体,像是微信朋友圈,微博、Facebook 和 Twitter,你也可以仅仅是….望梅止渴,看图止饿。想要找丰富多彩且有趣的图片就是这里没错了。

  10. Negative Space:NegativeSpace 是一个摄影师社区,想要使用“漂亮,免费的高分辨率图像而没有任何限制”的摄影师可以来这里交流、获取并且分享你的作品。

  11. Viintage:顾名思义,所有复古的东西都可以在这里找到。查看海报,图形,图标,明信片等,具有古早的旧时代的风格,很适合想要追求设计感和古旧感的场景。

  12. SkitterPhoto:SkitterPhoto 由两位来自荷兰的业余摄影师于 2014 年推出。这里有一些非常独特的图像,除了个人免费使用,甚至可以在商业上免费使用。

  13. Kaboom&nbspics:Kaboom&nbspics 提供优质的免费和高清图像。

  14. Old Book Illustrations:这是一个很特别的迷人的网站,它提供很多扫描图像,侧重于维多利亚和法国浪漫书籍插图。图片资源可以通过艺术家,语言或生日来搜索。

  15. Public Domain Vectors:这是一个专门的开源开放版权的向量图库,不仅可以免费使用,还可以很方便的下载到 .eps 文件、.ai 文件方便进行二次创作,在原图的基础上做一些修改,非常适合有一定图形编辑基础的用户。


Bash vs Python:你该使用哪个?

$
0
0

两种编程语言都各有优缺点,它们在某些任务方面互有胜负。

BashPython 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。

让我们来比较一下这两种语言,以便更好地理解它们各自的优点。

Bash

  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写使用命令行界面(CLI)实用程序的 shell 脚本,利用一个命令的输出传递给另一个命令(管道),以及执行简单的任务(可以多达 100 行代码)
  • 可以按原样使用命令行命令和实用程序
  • 启动时间比 Python 快,但执行时性能差
  • Windows 中默认没有安装。你的脚本可能不会兼容多个操作系统,但是 Bash 是大多数 Linux/Unix 系统的默认 shell
  • 与其它 shell (如 csh、zsh、fish) 完全兼容。
  • 通过管道(|)传递 CLI 实用程序如 sedawkgrep 等会降低其性能
  • 缺少很多函数、对象、数据结构和多线程支持,这限制了它在复杂脚本或编程中的使用
  • 缺少良好的调试工具和实用程序

Python

  • 是一种面对对象编程语言(OOP),因此它比 Bash 更加通用
  • 几乎可以用于任何任务
  • 适用于大多数操作系统,默认情况下它在大多数 Unix/Linux 系统中都有安装
  • 与伪代码非常相似
  • 具有简单、清晰、易于学习和阅读的语法
  • 拥有大量的库、文档以及一个活跃的社区
  • 提供比 Bash 更友好的错误处理特性
  • 有比 Bash 更好的调试工具和实用程序,这使得它在开发涉及到很多行代码的复杂软件应用程序时是一种很棒的语言
  • 应用程序(或脚本)可能包含许多第三方依赖项,这些依赖项必须在执行前安装
  • 对于简单任务,需要编写比 Bash 更多的代码

我希望这些列表能够让你更好地了解该使用哪种语言以及在何时使用它。

你在日常工作中更多会使用哪种语言,Bash 还是 Python?请在评论中分享。


via: https://opensource.com/article/19/4/bash-vs-python

作者:Archit Modi (Red Hat) 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

小白观察:开源项目如何在云端生存

$
0
0

Big News

开源项目如何在云端生存

过去的数十年,开源是云计算产业的支柱,从 Linux 到 Kubernetes 、Spark、MongoDB 等。但最近几年,也有声音说,公有云平台,比如 Aws ,在从开源项目吸血,MongoDB 甚至修改了授权协议。

开源教育了市场,让市场开始使用一些新的东西。云平台从中摘桃子,最终逼死开源是谁都不愿看到的。如果云能够反馈给开源,帮助开源成长,才是共赢的局面。不过,这个又有了新问题,如何做到反馈开源而不是背后的商业公司?

信息来源:【venturebeat】

Quick News

GPL 开源软件在黑洞照片中发挥大作用

在黑洞照片的合成过程中,开源软件 Sparselab 和 ehtim 帮了很大的忙。【TFIR】

普林斯顿大学的研究人员开发了工具了探测智能家居设备

普林斯顿大学的研究人员研发了工具来帮助用户探测智能家居的数据请求。【Princeton】

Windows 10 系统包含 581GB 的源码文件

微软工程师 Axel Rietschin 在 Quora 发布了一篇文章,展示了 Windows 10 的项目规模,大约有 581GB 的文件,共 4073468 个文件和 86439 个子文件夹。【Quora】

Linux 中获取硬盘分区或文件系统的 UUID 的七种方法

$
0
0

作为一个 Linux 系统管理员,你应该知道如何去查看分区的 UUID 或文件系统的 UUID。因为现在大多数的 Linux 系统都使用 UUID 挂载分区。你可以在 /etc/fstab 文件中可以验证。

有许多可用的实用程序可以查看 UUID。本文我们将会向你展示多种查看 UUID 的方法,并且你可以选择一种适合于你的方法。

何为 UUID?

UUID 意即通用唯一识别码Universally Unique Identifier,它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。

自内核 2.15.1 起,libuuid 就是 util-linux-ng 包中的一部分,它被默认安装在 Linux 系统中。UUID 由该库生成,可以合理地认为在一个系统中 UUID 是唯一的,并且在所有系统中也是唯一的。

这是在计算机系统中用来标识信息的一个 128 位(比特)的数字。UUID 最初被用在阿波罗网络计算机系统Apollo Network Computing System(NCS)中,之后 UUID 被开放软件基金会Open Software Foundation(OSF)标准化,成为分布式计算环境Distributed Computing Environment(DCE)的一部分。

UUID 以 32 个十六进制的数字表示,被连字符分割为 5 组显示,总共的 36 个字符的格式为 8-4-4-4-12(32 个字母或数字和 4 个连字符)。

例如: d92fa769-e00f-4fd7-b6ed-ecf7224af7fa

我的 /etc/fstab 文件示例:

# cat /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
#
UUID=69d9dd18-36be-4631-9ebb-78f05fe3217f / ext4 defaults,noatime 0 1
UUID=a2092b92-af29-4760-8e68-7a201922573b swap swap defaults,noatime 0 2

我们可以使用下面的 7 个命令来查看。

  • blkid 命令:定位或打印块设备的属性。
  • lsblk 命令:列出所有可用的或指定的块设备的信息。
  • hwinfo 命令:硬件信息工具,是另外一个很好的实用工具,用于查询系统中已存在硬件。
  • udevadm 命令:udev 管理工具
  • tune2fs 命令:调整 ext2/ext3/ext4 文件系统上的可调文件系统参数。
  • dumpe2fs 命令:查询 ext2/ext3/ext4 文件系统的信息。 
  • 使用 by-uuid 路径:该目录下包含有 UUID 和实际的块设备文件,UUID 与实际的块设备文件链接在一起。

Linux 中如何使用 blkid 命令查看磁盘分区或文件系统的 UUID?

blkid 是定位或打印块设备属性的命令行实用工具。它利用 libblkid 库在 Linux 系统中获得到磁盘分区的 UUID。

# blkid
/dev/sda1: UUID="d92fa769-e00f-4fd7-b6ed-ecf7224af7fa" TYPE="ext4" PARTUUID="eab59449-01"
/dev/sdc1: UUID="d17e3c31-e2c9-4f11-809c-94a549bc43b7" TYPE="ext2" PARTUUID="8cc8f9e5-01"
/dev/sdc3: UUID="ca307aa4-0866-49b1-8184-004025789e63" TYPE="ext4" PARTUUID="8cc8f9e5-03"
/dev/sdc5: PARTUUID="8cc8f9e5-05"

Linux 中如何使用 lsblk 命令查看磁盘分区或文件系统的 UUID?

lsblk 列出所有有关可用或指定块设备的信息。lsblk 命令读取 sysfs 文件系统和 udev 数据库以收集信息。

如果 udev 数据库不可用或者编译的 lsblk 不支持 udev,它会试图从块设备中读取卷标、UUID 和文件系统类型。这种情况下,必须以 root 身份运行。该命令默认会以类似于树的格式打印出所有的块设备(RAM 盘除外)。

# lsblk -o name,mountpoint,size,uuid
NAME   MOUNTPOINT  SIZE UUID
sda                 30G 
└─sda1 /            20G d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
sdb                 10G 
sdc                 10G 
├─sdc1               1G d17e3c31-e2c9-4f11-809c-94a549bc43b7
├─sdc3               1G ca307aa4-0866-49b1-8184-004025789e63
├─sdc4               1K 
└─sdc5               1G 
sdd                 10G 
sde                 10G 
sr0               1024M 

Linux 中如何使用 by-uuid 路径查看磁盘分区或文件系统的 UUID?

该目录包含了 UUID 和实际的块设备文件,UUID 与实际的块设备文件链接在一起。

# ls -lh /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 29 08:34 ca307aa4-0866-49b1-8184-004025789e63 -> ../../sdc3
lrwxrwxrwx 1 root root 10 Jan 29 08:34 d17e3c31-e2c9-4f11-809c-94a549bc43b7 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Jan 29 08:34 d92fa769-e00f-4fd7-b6ed-ecf7224af7fa -> ../../sda1

Linux 中如何使用 hwinfo 命令查看磁盘分区或文件系统的 UUID?

hwinfo 意即硬件信息工具,是另外一种很好的实用工具。它被用来检测系统中已存在的硬件,并且以可读的格式显示各种硬件组件的细节信息。

# hwinfo --block | grep by-uuid | awk '{print $3,$7}'
/dev/sdc1, /dev/disk/by-uuid/d17e3c31-e2c9-4f11-809c-94a549bc43b7
/dev/sdc3, /dev/disk/by-uuid/ca307aa4-0866-49b1-8184-004025789e63
/dev/sda1, /dev/disk/by-uuid/d92fa769-e00f-4fd7-b6ed-ecf7224af7fa

Linux 中如何使用 udevadm 命令查看磁盘分区或文件系统的 UUID?

udevadm 需要命令和命令特定的操作。它控制 systemd-udevd 的运行时行为,请求内核事件、管理事件队列并且提供简单的调试机制。

# udevadm info -q all -n /dev/sdc1 | grep -i by-uuid | head -1
S: disk/by-uuid/d17e3c31-e2c9-4f11-809c-94a549bc43b7

Linux 中如何使用 tune2fs 命令查看磁盘分区或文件系统的 UUID?

tune2fs 允许系统管理员在 Linux 的 ext2、ext3、ext4 文件系统中调整各种可调的文件系统参数。这些选项的当前值可以使用选项 -l 显示。

# tune2fs -l /dev/sdc1 | grep UUID
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7

Linux 中如何使用 dumpe2fs 命令查看磁盘分区或文件系统的 UUID?

dumpe2fs 打印出现在设备文件系统中的超级块和块组的信息。

# dumpe2fs /dev/sdc1 | grep UUID
dumpe2fs 1.43.5 (04-Aug-2017)
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7

via: https://www.2daygeek.com/check-partitions-uuid-filesystem-uuid-universally-unique-identifier-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:liujing97 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

每日安全资讯:白帽黑客展示了内置 Wi-Fi 芯片的恶意 Lightning 数据线

$
0
0

一名黑客利用一个隐藏的 Wi-Fi 芯片开发了一种验证概念的 Lightning 数据线,以说明不受信任的附件可能带来的威胁,该芯片可以让黑客获得对 Mac 的控制权。这种绰号“O.MG Cable”的 Lightning 数据线,与苹果自己的官方产品非常相似。据其创建者称,当连接时,它可以传递和触发代码有效负载,甚至可能重新刷新系统。

在一段视频中,通过 iPhone Web 界面远程控制的数据线显示在 Mac 上打开一个网络钓鱼网站,然后打开 O.MG 项目页面。

了解更多:http://mg.lol/blog/omg-cable/

实际上,大多数人不太可能遭遇恶意 Lightning 数据线窃听风险,因为他们直接从苹果或 MFI 认证的供应商那里购买。O.MG 技术似乎还要求攻击者在本地 Wi-Fi 范围内,这对大多数黑帽黑客来说也没有什么用处。但是可以想象,某些类似技术可以用于政治或企业间谍活动。

来源:cnBeta.COM

更多资讯

Windows Subsystem for Linux 使用者仍应该使用杀毒软件

虽然禁用掉 Windows Defender 等杀毒软件,可能可以抵消掉运行 WSL(Windows Subsystem for Linux,Windows 上的 Linux 子系统)造成的性能损失,但这不是造成 I/O 性能瓶颈的根本原因,并不值得推荐。WSL 使用者仍应该使用杀毒软件。

来源: 开源中国

详情: http://t.cn/EVyFNZI 

Facebook 恐因违反隐私规定被罚 20 亿美元

据美国《华盛顿邮报》2 月 14 日报道,社交媒体巨头脸书涉嫌违规非法获取用户隐私,目前正在和美国联邦贸易委员会谈判,或将面临数十亿美元的罚款。这并不是脸书第一次面临窥探用户隐私的指控。

来源: 环球科技

详情: http://t.cn/EVyFlLR 

500px 千万用户信息泄露

著名摄影网站 500px 发布公告,它在去年 7 月遭到黑客攻击,大约 1480 万用户的信息泄露,而它直到上周才获悉此事。

来源: solidot.org

详情: http://t.cn/EVyF8Yd 

某公司的人脸识别数据库外泄

提供人脸检测和人群分析的中国某公司被发现其人脸识别数据库没有密码保护,直接暴露在网上。安全研究员 Victor Gevers 报告,数据库包含了超过 250 万用户的记录,包括身份证号码、地址、出生日期、识别其身份的位置。在 24 小时内,有超过 680 万位置被记录进去。Gevers 称,根据该公司的实时面部识别,任何人可以跟踪一个人的行踪。自去年 7 月以来,该数据库一直对外开放。

来源: solidot.org

详情: http://t.cn/EVyFByc 

(信息来源于网络,安华金和搜集整理)

每日安全资讯:亚马逊、苹果和 Google 都有雇员听语音助手的录音

$
0
0

亚马逊、苹果和 Google 都有员工,从智能助手和语音助手应用程序中收听客户语音录音,引发如何界定窃听和隐私的议论纷纷。

彭博社在采访亚马逊“审听过”其智能语音助手 Alexa 录音的工作人员后,突出报道这一话题。上述三家公司都表示,偶尔会对语音录音进行审听,以提高语音识别能力。一些审听人员告诉彭博社记者,他们在内部聊天室里也会互相分享有趣的语音录音片段。他们也描述曾听到令人不安的片段,比如有可能发生的性攻击。

亚马逊发布声明表示,它认真对待客户安全和隐私。审听客户录音样本有助于训练语音识别和自然语言理解系统,绝不允许滥用其制度。声明称,亚马逊的审听雇员也无法直接了解能确认客户身份的资料。

来源:中国网信网

更多资讯

微软确认有黑客入侵了一些 Outlook.com 帐户,时间长达数月

微软已经开始通知一些 Outlook.com 用户,黑客能够在今年早些时候访问其帐户。公司发现支持代理的凭据因其网络邮件服务而受到损害,允许在 2019 年 1 月 1 日至 3 月 28 日期间未经授权访问某些帐户。微软称黑客可能已经查看了电子邮件账户,包括文件夹名称和主题行,但不包括电子邮件或附件的内容。

目前尚不清楚有多少用户受到了黑客行为的影响,或者是谁参与了 Outlook.com 电子邮件帐户的访问。在此次入侵事件中,黑客无法窃取登录详细信息或其他个人信息,但出于谨慎,微软建议受影响的用户重置密码。

来源:快科技

作案人勾结快递员利用“七天无理由退货”漏洞实施诈骗

2017 年 11 月,某新款手机上架热卖,淘宝店主王先生按照订单,向一名来自厦门的买家打包发货,委托快递公司寄出。几天后,王先生接到了来自快递公司的电话,称收件人联系不上,快递的东西只能退回。

来源: solidot.org

详情: http://t.cn/EX5wujH 

GhostBSD 19.04 发布 注重安全与稳定性的FreeBSD发行版

GhostBSD 19.04 发布了,GhostBSD 是一个 FreeBSD 发行版,它注重安全与稳定性,以一张自启动运行光盘的形式来提供。19.04 是 18.12 的重大改进版本,从音量控制器到安装程序都有改进,并且第一次在基本系统上添加和更改了一些代码,此外还有官方 MATE 桌面,包括社区 XFCE 桌面 iso。

来源: 开源中国

详情: http://t.cn/EX5wrHl 

(信息来源于网络,安华金和搜集整理)

5 款适合程序员的开源字体

$
0
0

编程字体有些在普通字体中没有的特点,这五种字体你可以看看。

什么是最好的编程字体呢?首先,你需要考虑到字体被设计出来的初衷可能并不相同。当选择一款用于休闲阅读的字体时,读者希望该字体的字母能够顺滑地衔接,提供一种轻松愉悦的体验。一款标准字体的每个字符,类似于拼图的一块,它需要被仔细的设计,从而与整个字体的其他部分融合在一起。

然而,在编写代码时,通常来说对字体的要求更具功能性。这也是为什么大多数程序员在选择时更偏爱使用固定宽度的等宽字体。选择一款带有容易分辨的数字和标点的字体在美学上令人愉悦;但它是否拥有满足你需求的版权许可也是非常重要的。

某些功能使得字体更适合编程。首先要清楚是什么使得等宽字体看上去井然有序。这里,让我们对比一下字母 w 和字母 i。当选择一款字体时,重要的是要考虑字母本身及周围的空白。在纸质的书籍和报纸中,有效地利用空间是极为重要的,为瘦小的 i 分配较小的空间,为宽大的字母 w 分配较大的空间是有意义的。

然而在终端中,你没有这些限制。每个字符享有相等的空间将非常有用。这么做的首要好处是你可以随意扫过一段代码来“估测”代码的长度。第二个好处是能够轻松地对齐字符和标点,高亮在视觉上更加明显。另外打印纸张上的等宽字体比均衡字体更加容易通过 OCR 识别。

在本篇文章中,我们将探索 5 款卓越的开源字体,使用它们来编程和写代码都非常理想。

1、Firacode:最佳整套编程字体

FiraCode 示例

FiraCode, Andrew Lekashman

在我们列表上的首款字体是 FiraCode,一款真正符合甚至超越了其职责的编程字体。FiraCode 是 Fira 的扩展,而后者是由 Mozilla 委托设计的开源字体族。使得 FiraCode 与众不同的原因是它修改了在代码中常使用的一些符号的组合或连字,使得它看上去更具可读性。这款字体有几种不同的风格,特别是还包含 Retina 选项。你可以在它的 GitHub 主页中找到它被使用到多种编程语言中的例子。

FiraCode compared to Fira Mono

FiraCode 与 Fira Mono 的对比,Nikita Prokopov,源自 GitHub

2、Inconsolata:优雅且由卓越设计者创造

Inconsolata 示例

Inconsolata, Andrew Lekashman

Inconsolata 是最为漂亮的等宽字体之一。从 2006 年开始它便一直是一款开源和可免费获取的字体。它的创造者 Raph Levien 在设计 Inconsolata 时秉承的一个基本原则是:等宽字体并不应该那么糟糕。使得 Inconsolata 如此优秀的两个原因是:对于 0o 这两个字符它们有很大的不同,另外它还特别地设计了标点符号。

3、DejaVu Sans Mono:许多 Linux 发行版的标准配置,庞大的字形覆盖率

DejaVu Sans Mono example

DejaVu Sans Mono, Andrew Lekashman

受在 GNOME 中使用的带有版权和闭源的 Vera 字体的启发,DejaVu Sans Mono 是一个非常受欢迎的编程字体,几乎在每个现代的 Linux 发行版中都带有它。在 Book Variant 风格下 DejaVu 拥有惊人的 3310 个字形,相比于一般的字体,它们含有 100 个左右的字形。在工作中你将不会出现缺少某些字符的情况,它覆盖了 Unicode 的绝大部分,并且一直在活跃地增长着。

4、Source Code Pro:优雅、可读性强,由 Adobe 中一个小巧但天才的团队打造

Source Code Pro example

Source Code Pro, Andrew Lekashman

由 Paul Hunt 和 Teo Tuominen 设计,Source Code Pro由 Adobe 创造的,成为了它的首款开源字体。Source Code Pro 值得注意的地方在于它极具可读性,且对于容易混淆的字符和标点,它有着非常好的区分度。Source Code Pro 也是一个字体族,有 7 中不同的风格:Extralight、Light、Regular、Medium、Semibold、Bold 和 Black,每种风格都还有斜体变体。

Differentiating potentially confusable characters

潜在易混淆的字符之间的区别,Paul D. Hunt 源自 Adobe Typekit 博客。

Metacharacters with special meaning in computer languages

在计算机领域中有特别含义的特殊元字符, Paul D. Hunt 源自 Adobe Typekit 博客。

5、Noto Mono:巨量的语言覆盖率,由 Google 中的一个大团队打造

Noto Mono example

Noto Mono, Andrew Lekashman

在我们列表上的最后一款字体是 Noto Mono,这是 Google 打造的庞大 Note 字体族中的等宽版本。尽管它并不是专为编程所设计,但它在 209 种语言(包括 emoji 颜文字!)中都可以使用,并且一直在维护和更新。该项目非常庞大,是 Google 宣称 “组织全世界信息” 的使命的延续。假如你想更多地了解它,可以查看这个绝妙的关于这些字体的视频

选择合适的字体

无论你选择那个字体,你都有可能在每天中花费数小时面对它,所以请确保它在审美和哲学层面上与你产生共鸣。选择正确的开源字体是确保你拥有最佳生产环境的一个重要部分。这些字体都是很棒的选择,每个都具有让它脱颖而出的功能强大的特性。


via: https://opensource.com/article/17/11/how-select-open-source-programming-font

作者:Andrew Lekashman 译者:FSSlc 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

树莓派使用入门:如何为树莓派社区做出贡献

$
0
0

在我们的入门系列的第 13 篇文章中,发现参与树莓派社区的方法。

这个系列已经逐渐接近尾声,我已经写了很多它的乐趣,我大多希望它能帮助人们使用树莓派进行教育或娱乐。也许这些文章能说服你买你的第一个树莓派,或者让你重新发现抽屉里的吃灰设备。如果这里有真的,那么我认为这个系列就是成功的。

如果你想买一台,并宣传这块绿色的小板子有多么多功能,这里有几个方法帮你与树莓派社区建立连接:

这些只是你可以为树莓派社区做贡献的几种方式。最后但同样重要的是,你可以加入我并投稿文章到你最喜欢的开源网站 Opensource.com。 :-)


via: https://opensource.com/article/19/3/contribute-raspberry-pi-community

作者:Anderson Silva (Red Hat) 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


Sweet Home 3D:一个帮助你寻找梦想家庭的开源工具

$
0
0

室内设计应用可以轻松渲染你喜欢的房子,不管是真实的或是想象的。

Houses in a row

我最近接受了一份在弗吉尼亚州的新工作。由于我妻子一直在纽约工作,看着我们在纽约的房子直至出售,我有责任出去为我们和我们的猫找一所新房子。在我们搬进去之前她看不到新房子。

我和一个房地产经纪人签约,并看了几间房子,拍了许多照片,写下了潦草的笔记。晚上,我会将照片上传到 Google Drive 文件夹中,我和我老婆会通过手机同时查看这些照片,同时我还要记住房间是在右边还是左边,是否有风扇等。

由于这是一个相当繁琐且不太准确的展示我的发现的方式,我因此去寻找一个开源解决方案,以更好地展示我们未来的梦想之家将会是什么样的,而不会取决于我的模糊记忆和模糊的照片。

Sweet Home 3D 完全满足了我的要求。Sweet Home 3D 可在 Sourceforge 上获取,并在 GNU 通用公共许可证下发布。它的网站信息非常丰富,我能够立即启动并运行。Sweet Home 3D 由总部位于巴黎的 eTeks 的 Emmanuel Puybaret 开发。

绘制内墙

我将 Sweet Home 3D 下载到我的 MacBook Pro 上,并添加了 PNG 版本的平面楼层图,用作背景底图。

在此处,使用 Rooms 面板跟踪图案并设置“真实房间”尺寸是一件简单的事情。在我绘制房间后,我添加了墙壁,我可以定制颜色、厚度、高度等。

Sweet Home 3D floorplan

现在我画完了“内墙”,我从网站下载了各种“家具”,其中包括实际的家具以及门、窗、架子等。每个项目都以 ZIP 文件的形式下载,因此我创建了一个包含所有未压缩文件的文件夹。我可以自定义每件家具和重复的物品比如门,可以方便地复制粘贴到指定的地方。

在我将所有墙壁和门窗都布置完后,我就使用这个应用的 3D 视图浏览房屋。根据照片和记忆,我对所有物体进行了调整,直到接近房屋的样子。我可以花更多时间添加纹理,附属家具和物品,但这已经达到了我需要的程度。

Sweet Home 3D floorplan

完成之后,我将该项目导出为 OBJ 文件,它可在各种程序中打开,例如 Blender 和 Mac 上的“预览”中,方便旋转房屋并从各个角度查看。视频功能最有用,我可以创建一个起点,然后在房子中绘制一条路径,并记录“旅程”。我将视频导出为 MOV 文件,并使用 QuickTime 在 Mac 上打开和查看。

我的妻子能够(几乎)能看到所有我看到的,我们甚至可以开始在搬家前布置家具。现在,我所要做的就是把行李装上卡车搬到新家。

Sweet Home 3D 在我的新工作中也是有用的。我正在寻找一种方法来改善学院建筑的地图,并计划在 Inkscape 或 Illustrator 或其他软件中重新绘制它。但是,由于我有平面地图,我可以使用 Sweet Home 3D 创建平面图的 3D 版本并将其上传到我们的网站以便更方便地找到地方。

开源犯罪现场?

一件有趣的事:根据 Sweet Home 3D 的博客,“法国法医办公室(科学警察)最近选择 Sweet Home 3D 作为设计规划表示路线和犯罪现场的工具。这是法国政府建议优先考虑自由开源解决方案的具体应用。“

这是公民和政府如何利用开源解决方案创建个人项目、解决犯罪和建立世界的又一点证据。


via: https://opensource.com/article/19/3/tool-find-home

作者:Jeff Macharyas (Community Moderator) 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

每日安全资讯:命案侦破过程揭示 Google 能够跟踪全世界的手机

$
0
0

2018 年 3 月 14 日,亚利桑那州发生了一起随机谋杀案件,现场没有目击者,除了 Google。当仓库工人 Jorge Molina 遭到逮捕时,警方称他们跟踪到其手机到达了谋杀现场。他们申请了搜查令,要求 Google 提供谋杀现场周围所有的手机记录。

但随着新的证据出现,警方释放了他,逮捕他母亲的前男友。

这起案件令 Google 的手机跟踪数据库引发了关注,搜索巨人的用户手机数据库变成了执法部门的数字法网。

在一个数据收集无处不在的时代,它是个人信息以一种人们没有想象到的方式使用的最新例子。

来源:solidot.org

更多资讯

福特推出新型无钥匙密钥系统,防止黑客攻击

据英国媒体 4 月 11 日报道,福特公司对遥控车钥匙进行了售后升级,使其无钥匙进入的车型不容易受到中继攻击而被盗。新型车钥匙配备了一个运动传感器,在钥匙静止 40 秒后将进入休眠模式,将不会对黑客攻击做出响应。

来源: 环球网

详情: http://t.cn/EXJYrow 

微软不急于修复 IE11 的零日漏洞 涉及古老的 MHT 文件格式

尽管微软在力推 Windows 10 平台上的 Edge 浏览器,甚至选择拥抱竞争对手 Google 家的 Chromium 内核,但 IE 11 浏览器并不会那么快消失。由于历史上的独特地位,IE11 仍保有一定的市场占有率。然而近日曝光的一个零日漏洞,又让不少用户陷入了恐慌。据悉,该漏洞利用了一种被称作 MHT 的特殊文件格式,是微软在 IE 中保存网页时曾使用的一种特殊格式。

来源: cnBeta.COM

详情: http://t.cn/EXJYFLa  

(信息来源于网络,安华金和搜集整理)

树莓派使用入门:庆祝树莓派的 14 天

$
0
0

在我们关于树莓派入门系列的第 14 篇也是最后一篇文章中,回顾一下我们学到的所有东西。

派节快乐!

每年的 3 月 14 日,我们这些极客都会庆祝派节。我们用这种方式缩写日期: MMDD,3 月 14 于是写成 03/14,它的数字上提醒我们 3.14,或者说 π 的前三位数字。许多美国人没有意识到的是,世界上几乎没有其他国家使用这种日期格式,因此派节几乎只适用于美国,尽管它在全球范围内得到了庆祝。

无论你身在何处,让我们一起庆祝树莓派,并通过回顾过去两周我们所涉及的主题来结束本系列:

Pi Day illustration

我将结束本系列,感谢所有关注的人,尤其是那些在过去 14 天里从中学到了东西的人!我还想鼓励大家不断扩展他们对树莓派以及围绕它构建的所有开源(和闭源)技术的了解。

我还鼓励你了解其他文化、哲学、宗教和世界观。让我们成为人类的是这种惊人的 (有时是有趣的) 能力,我们不仅要适应外部环境,而且要适应智力环境。

不管你做什么,保持学习!


via: https://opensource.com/article/19/3/happy-pi-day

作者:Anderson Silva (Red Hat) 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源如何在云上存活?

$
0
0

在过去十年中,从 Linux 和 MySQL 到 Kubernetes、Spark、Presto 和 MongoDB,开源一直是云的创新支柱。但最近的一些事态发展为开源背后的商业模式带来了阴霾,业界现在必须采取行动,以避免扼杀其最大的创新来源之一。

作为 Apache Hive 项目的共同创始人和前负责人,我知道激励对于开源生态系统的蓬勃发展至关重要。独立开发者需要激励他们为开源项目贡献自己的时间和技能,而那些具有创业思维的人需要激励他们围绕这些项目建立公司以帮助它们蓬勃发展。

公有云可能会破坏这些激励因素,因为它改变了开源的形态。大型云服务商很容易将开源项目拿来,并将其作为托管服务提供个客户。如果它是在没有回馈社区的情况下这样做的,它就是从别人的工作中获得不公平的利润,从而破坏了开源所需要的蓬勃发展的动力。

我们在围绕 AWS 的当前讨论中已经看到了这一点,AWS 被指责 将开源项目作为服务而提供,并对这些开源项目进行品牌重塑,却不总是回馈这些开源社区。这促使包括 Confluent、 Redis Labs 和 MongoDB 在内的开源软件供应商使用了新的许可证,以阻止大型商业云服务商将其代码作为托管服务提供。

我不认为这是一种正确的方法。这些新的许可证尚未得到开源推进组织Open Source Initiative(OSI)的认可,并且它们有可能会混淆开源软件的使用权。正如软件自由保护协会Software Freedom Conservancy主席 Bradley M. Kuhn 所说,软件自由应该“对所有人来说都是平等的,无论他们是否是商业行为者。”开源之所以蓬勃发展,是因为这个原则一直受到尊重,任何模糊不清的地方都可能会阻止人们加入社区。

我同情那些寻求保护其业务的开源公司。尽管独立开发人员付出了很多的努力,但开源项目需要公司的资源和管理工作才能被视为足够稳定,才足以供企业广泛使用。Linux 在企业领域中起飞,是因为 Red Hat 和 IBM 全力支持它。Kubernetes 的发展是如此的快,也是因为它得到了谷歌的支持。当然也有例外,但如果一个开源项目背后有一家公司,那么这个开源项目更有可能在大型企业中取得成功。

我需要说明一下我的利益相关立场。我的公司提供了一个基于云的数据分析平台,该平台严重依赖 Spark、Presto 和 Hive 等开源组件。与此同时,我们通过两个项目回馈社区,成为优秀的开源公民:Sparklens,一个提高 Spark 应用程序性能的框架;以及 RubiX,一个提升 Presto 和 Spark 性能的缓存框架。

在云中提供开源软件有助于这些项目吸引更多用户和开发人员。但是,如果商业云服务商获利不公平,则会对下一代企业家程序员们构建开源公司和投资者支持他们产生抑制作用。

因此,如果新的许可证不是解决方案,那么什么是呢?

部分要靠大型云服务商的公平竞争。我不认为 AWS 是“邪恶的”,他们的行为是他们认为最符合他们商业利益的行为。但他们需要认识到,从长远来看,破坏开源对他们的伤害会像对其它人的伤害一样。开源倡导者应该继续提高对这个问题的认识,并对云服务商施加公众压力,以便让他们采取负责任的行动。我们已经看到证据表明这种压力可行

我们还需要一个开源的“道德规范code of ethics”,由社区(贡献者、项目负责人)和开源组织(如 OSI 和 Apache)创建。一个企业的行为即便是 100% 符合开源许可证,但仍然能够以损害社区的方式行事。这个道德规范能够指出一个广泛认可的道德准则,列出了不可接受的做法,这将使公司和个人对他们的行为负责。

最终的推动力来自于竞争。确实,大型云服务商在吸引客户方面具有优势;它们被 CIO 们视为“简单”和“安全”之选。但客户也可以选择最好的软件和支持。如果开源公司能够为他们自己的发布版本提供更好的功能和更好的支持,他们可以说服客户选择他们自己的产品。

我已经概述了社区可以采取的改善这种情况的行动,但我们每个人也都可以以个人身份采取行动。通过让云服务商了解我们的担忧,我们能够对市场产生一定的影响。要求他们通过反馈表和产品论坛向社区提供特定功能,这是让你发出自己的声音的一种方式。这些云服务商的开发人员也在开源论坛中闲逛,并希望成为开源社区的一员;让这些要求引起他们的注意会促使这种改变。

我们所面临的这个挑战并没有简单的解决方案,但我们需要认真对待。开源模式并不脆弱,不会在一夜之间崩坏。但是,如果商业云服务商继续利用开源项目而不给予回馈,那么他们就会削弱帮助开源成功的激励措施。杀死产下金蛋的鸡并不符合他们的利益,这肯定也不符合开发者和客户的利益。


via:  https://venturebeat.com/2019/04/14/how-open-source-can-survive-the-cloud/ 

作者:Ashish Thusoo 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何检查 Linux 中的开放端口列表?

$
0
0

最近,我们就同一主题写了两篇文章。这些文章内容帮助你如何检查远程服务器中给定的端口是否打开。

如果你想 检查远程 Linux 系统上的端口是否打开 请点击链接浏览。如果你想 检查多个远程 Linux 系统上的端口是否打开 请点击链接浏览。如果你想 检查多个远程 Linux 系统上的多个端口状态 请点击链接浏览。

但是本文帮助你检查本地系统上的开放端口列表。

在 Linux 中很少有用于此目的的实用程序。然而,我提供了四个最重要的 Linux 命令来检查这一点。

你可以使用以下四个命令来完成这个工作。这些命令是非常出名的并被 Linux 管理员广泛使用。

  • netstat:netstat (“network statistics”) 是一个显示网络连接(进和出)相关信息命令行工具,例如:路由表, 伪装连接,多点传送成员和网络端口。
  • nmap:Nmap (“Network Mapper”) 是一个网络探索与安全审计的开源工具。它旨在快速扫描大型网络。
  • ss: ss 被用于转储套接字统计信息。它也可以类似 netstat 使用。相比其他工具它可以展示更多的TCP状态信息。
  • lsof: lsof 是 List Open File 的缩写. 它用于输出被某个进程打开的所有文件。

如何使用 Linux 命令 netstat 检查系统中的开放端口列表

netstat 是 Network Statistics 的缩写,是一个显示网络连接(进和出)相关信息命令行工具,例如:路由表、伪装连接、多播成员和网络端口。

它可以列出所有的 tcp、udp 连接和所有的 unix 套接字连接。

它用于发现发现网络问题,确定网络连接数量。

# netstat -tplugn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2038/master
tcp        0      0 127.0.0.1:199           0.0.0.0:*               LISTEN      1396/snmpd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1398/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1388/sshd
tcp6       0      0 :::25                   :::*                    LISTEN      2038/master
tcp6       0      0 :::22                   :::*                    LISTEN      1388/sshd
udp        0      0 0.0.0.0:39136           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:56130           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:40105           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:11584           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:30105           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:50656           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:1632            0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:28265           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:40764           0.0.0.0:*                           1396/snmpd
udp        0      0 10.90.56.21:123         0.0.0.0:*                           895/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           895/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           895/ntpd
udp        0      0 0.0.0.0:53390           0.0.0.0:*                           1396/snmpd
udp        0      0 0.0.0.0:161             0.0.0.0:*                           1396/snmpd
udp6       0      0 :::123                  :::*                                895/ntpd

IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.0.0.1
lo              1      ff02::1
lo              1      ff01::1
eth0            1      ff02::1
eth0            1      ff01::1

你也可以使用下面的命令检查特定的端口。

# # netstat -tplugn | grep :22

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1388/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      1388/sshd

如何使用 Linux 命令 ss 检查系统中的开放端口列表?

ss 被用于转储套接字统计信息。它也可以显示类似 netstat 的信息。相比其他工具它可以展示更多的 TCP 状态信息。

# ss -lntu

Netid  State      Recv-Q Send-Q                     Local Addressort                                    Peer Addressort
udp    UNCONN     0      0                                      *:39136                                              *:*
udp    UNCONN     0      0                                      *:56130                                              *:*
udp    UNCONN     0      0                                      *:40105                                              *:*
udp    UNCONN     0      0                                      *:11584                                              *:*
udp    UNCONN     0      0                                      *:30105                                              *:*
udp    UNCONN     0      0                                      *:50656                                              *:*
udp    UNCONN     0      0                                      *:1632                                               *:*
udp    UNCONN     0      0                                      *:28265                                              *:*
udp    UNCONN     0      0                                      *:40764                                              *:*
udp    UNCONN     0      0                            10.90.56.21:123                                                *:*
udp    UNCONN     0      0                              127.0.0.1:123                                                *:*
udp    UNCONN     0      0                                      *:123                                                *:*
udp    UNCONN     0      0                                      *:53390                                              *:*
udp    UNCONN     0      0                                      *:161                                                *:*
udp    UNCONN     0      0                                     :::123                                               :::*
tcp    LISTEN     0      100                                    *:25                                                 *:*
tcp    LISTEN     0      128                            127.0.0.1:199                                                *:*
tcp    LISTEN     0      128                                    *:80                                                 *:*
tcp    LISTEN     0      128                                    *:22                                                 *:*
tcp    LISTEN     0      100                                   :::25                                                :::*
tcp    LISTEN     0      128                                   :::22                                                :::*

你也可以使用下面的命令检查特定的端口。

# # ss -lntu | grep ':25'

tcp    LISTEN     0      100       *:25                    *:*
tcp    LISTEN     0      100      :::25                   :::*

如何使用 Linux 命令 nmap 检查系统中的开放端口列表?

Nmap (“Network Mapper”) 是一个网络探索与安全审计的开源工具。它旨在快速扫描大型网络,当然它也可以工作在独立主机上。

Nmap 使用裸 IP 数据包以一种新颖的方式来确定网络上有哪些主机可用,这些主机提供什么服务(应用程序名称和版本),它们运行什么操作系统(版本),使用什么类型的数据包过滤器/防火墙,以及许多其他特征。

虽然 Nmap 通常用于安全审计,但许多系统和网络管理员发现它对于日常工作也非常有用,例如网络资产清点、管理服务升级计划以及监控主机或服务正常运行时间。

# nmap -sTU -O localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2019-03-20 09:57 CDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00028s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 1994 closed ports

PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
199/tcp open  smux
123/udp open  ntp
161/udp open  snmp

Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.9
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.93 seconds

你也可以使用下面的命令检查特定的端口。

# nmap -sTU -O localhost | grep 123

123/udp open  ntp

如何使用 Linux 命令 lsof 检查系统中的开放端口列表?

它向你显示系统上打开的文件列表以及打开它们的进程。还会向你显示与文件相关的其他信息。

# lsof -i

COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ntpd      895    ntp   16u  IPv4   18481      0t0  UDP *:ntp
ntpd      895    ntp   17u  IPv6   18482      0t0  UDP *:ntp
ntpd      895    ntp   18u  IPv4   18487      0t0  UDP localhost:ntp
ntpd      895    ntp   20u  IPv4   23020      0t0  UDP CentOS7.2daygeek.com:ntp
sshd     1388   root    3u  IPv4   20065      0t0  TCP *:ssh (LISTEN)
sshd     1388   root    4u  IPv6   20067      0t0  TCP *:ssh (LISTEN)
snmpd    1396   root    6u  IPv4   22739      0t0  UDP *:snmp
snmpd    1396   root    7u  IPv4   22729      0t0  UDP *:40105
snmpd    1396   root    8u  IPv4   22730      0t0  UDP *:50656
snmpd    1396   root    9u  IPv4   22731      0t0  UDP *:pammratc
snmpd    1396   root   10u  IPv4   22732      0t0  UDP *:30105
snmpd    1396   root   11u  IPv4   22733      0t0  UDP *:40764
snmpd    1396   root   12u  IPv4   22734      0t0  UDP *:53390
snmpd    1396   root   13u  IPv4   22735      0t0  UDP *:28265
snmpd    1396   root   14u  IPv4   22736      0t0  UDP *:11584
snmpd    1396   root   15u  IPv4   22737      0t0  UDP *:39136
snmpd    1396   root   16u  IPv4   22738      0t0  UDP *:56130
snmpd    1396   root   17u  IPv4   22740      0t0  TCP localhost:smux (LISTEN)
httpd    1398   root    3u  IPv4   20337      0t0  TCP *:http (LISTEN)
master   2038   root   13u  IPv4   21638      0t0  TCP *:smtp (LISTEN)
master   2038   root   14u  IPv6   21639      0t0  TCP *:smtp (LISTEN)
sshd     9052   root    3u  IPv4 1419955      0t0  TCP CentOS7.2daygeek.com:ssh->Ubuntu18-04.2daygeek.com:11408 (ESTABLISHED)
httpd   13371 apache    3u  IPv4   20337      0t0  TCP *:http (LISTEN)
httpd   13372 apache    3u  IPv4   20337      0t0  TCP *:http (LISTEN)
httpd   13373 apache    3u  IPv4   20337      0t0  TCP *:http (LISTEN)
httpd   13374 apache    3u  IPv4   20337      0t0  TCP *:http (LISTEN)
httpd   13375 apache    3u  IPv4   20337      0t0  TCP *:http (LISTEN)

你也可以使用下面的命令检查特定的端口。

# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    1398   root    3u  IPv4  20337      0t0  TCP *:http (LISTEN)
httpd   13371 apache    3u  IPv4  20337      0t0  TCP *:http (LISTEN)
httpd   13372 apache    3u  IPv4  20337      0t0  TCP *:http (LISTEN)
httpd   13373 apache    3u  IPv4  20337      0t0  TCP *:http (LISTEN)
httpd   13374 apache    3u  IPv4  20337      0t0  TCP *:http (LISTEN)
httpd   13375 apache    3u  IPv4  20337      0t0  TCP *:http (LISTEN)

via: https://www.2daygeek.com/linux-scan-check-open-ports-using-netstat-ss-nmap/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:heguangzhi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

管理 131,800,000,000 条数据记录,巨杉数据库支撑银行云化架构升级

$
0
0

如今,大型企业的应用平台正在向微服务架构进行转型。在微服务架构下,应用程序和数据库等底层平台的关系将会被重构。

作为新一代分布式数据库,其架构与功能特性需要保证在与传统数据库全兼容的基础上,拥抱微服务与云计算框架。因此,分布式数据库对于分布式事务与 ACID 必须保证与传统技术完全兼容。同时,在面向微服务应用开发与云计算基础架构时,新一代分布式数据库必须支持弹性扩张、资源隔离、多租户、可配置一致性、多模式(支持各类 SQL 协议)、集群内可配置容灾策略等一系列功能。

传统单点数据库的容量瓶颈,仅仅是分布式数据库所解决的问题之一。更重要的是在未来微服务化应用开发以及云化平台的趋势下,应用不再以“烟囱式”的中间件加数据库模式进行构建,而是采用数千甚至上万的微服务程序构建成的复杂网状模型。因此,分布式数据库需要满足以下能力,才能够满足上层应用的弹性扩展、高并发、高吞吐量、与灵活敏捷的需求。

在这些技术需求驱动下,分布式数据库核心技术能力分为两个方面,一方面是对传统技术的兼容,包括:

  • 完整的 ACID 支持,事务和一致性保证;
  • SQL 的完整支持,传统数据库如 MySQL/PostgreSQL 的语法完全兼容。

另一方面,则是技术创新,包括:

  • 分布式与扩展性,应对数据量的变化,实现存储层和计算层的弹性扩展;
  • 多模式访问接口,支持多类型数据管理和多种模式的访问接口;
  • HTAP 交易/分析混合处理能力,复杂业务需求下,实现数据的物理隔离,互不干扰。 

作为一款金融级分布式关系型数据库,SequoiaDB 巨杉数据库的分布式数据库架构和面向微服务的云化产品形态,已经帮助包括民生银行、恒丰银行在内的多家大型金融客户实现了大量业务系统的底层数据库云化转型升级。

目前,巨杉数据库在银行生产系统单机群最大物理节点数达到 135 个,单集群最大存储容量超过 2.1 PB,单集群最大管理数据条数 1318 亿条。

SequoiaDB 巨杉数据库作为一款金融级的分布式关系型数据库,在企业客户云化架构转型过程中,提供了多种重要技术能力。

数据存储资源池化

SequoiaDB 数据存储引擎采用原生分布式架构,数据完全打散在分布式节点间存储,自动化数据分布和管理,数据可以按需灵活扩展。

SequoiaDB 采用分片技术为系统提供了横向扩展机制,其分片过程对于应用程序来说完全透明。该机制解决了单台服务器硬件资源(如内存、CPU、磁盘 I/O)受限的问题,并不会增加应用程序开发的复杂性。巨杉数据库通过原生分布式架构,可以轻松实现 PB 级别数据管理,目前生产环境最大支持超过 1500 个节点集群。

SequoiaDB 巨杉数据库存储引擎也实现了 multi-model 多模数据管理,支持非结构化、结构化和半结构化数据全覆盖并统一管理。SequoiaDB 的多模引擎设计让数据库平台场景更多样,也能符合云数据架构下对于多样化业务数据的统一管理与运维要求。 

同时,在一个大型集群中,SequoiaDB 提供了多维度、多层级的逻辑与物理隔离能力。在一个典型的数据资源池类型基础数据服务平台(DBaas,DataBase As A Service)中,SequoiaDB 巨杉数据库能够同时服务于成百上千个不同 SLA 服务级别、优先级、业务特性、与数据量的应用程序,并保证应用程序之间的数据逻辑与物理隔离。

SequoiaDB 提供的“数据域(Domain)”特性,能够将整个集群在物理设备层面进行隔离,确保不同的表、表空间、与数据库实例坐落于独立的硬件设备上,保证高优先级的联机交易应用与后台统计分析相互隔离互不干扰。

数据库实例化

SequoiaDB 巨杉数据库支持数据库服务实例化。

针对微服务应用架构,用户可以在同一个集群中创建成百上千个不同的关系型数据库实例。数据库实例的访问与使用方式和传统关系型数据库 100% 兼容,同时其底层所使用的数据从逻辑上完全独立,每个实例拥有自己独立的权限管理、数据管控、甚至可以选择部署在独立的硬件环境或共享设备中。 

目前 SequoiaDB 巨杉数据库支持用户创建 MySQL、PostgreSQL 与 SparkSQL 实例,同时还提供了JSON、S3对象存储以及 Posix 文件系统实例,充分满足用户对于结构化、半结构化、以及非结构化数据的需求。

从应用程序开发者与 DBA 的角度看,SequoiaDB 巨杉数据库所提供的关系型数据库实例,与传统 MySQL、PostgreSQL 和 SparkSQL 保持全兼容。例如,在 SequoiaDB 巨杉数据库中的 MySQL 实例中,其所有的增删改查语法、视图、触发器、事务、甚至访问计划都与传统 MySQL 保持一致。

作为分布式数据库,SequoiaDB 巨杉数据库的 SQL 实例用户不需要关心底层的数据到底被分散在一台还是多台设备中。用户可以简单创建一个分区表,向其中写入上亿条记录,其数据将会被自动分散在不同的物理设备中,对于应用程序根本无需关注分库分表,数据库自动提供分布式事务以及分布式访问等能力。

双活容灾与数据安全 

双活容灾即灾备系统中使主生产端数据库和备机端数据库同时在线运行,处于可读可写状态的技术。在银行的交易系统中,双活容灾能力不仅保证数据不丢失,也保证系统在遭遇事故时能够短时间内重新上线。在正常情况下,双活架构的两个数据中心都能够同时提供业务的读写服务,而当一个中心宕机后,所有前端应用可以立刻切换至依然存活的数据中心继续使用。

SequoiaDB 巨杉数据库在内核层面实现了多种容灾方式,包括同城双活、同城双中心、同城三中心、两地三中心、与三地五中心等容灾策略。通过使用 SequoiaDB 巨杉数据库的容灾与高可用机制,数据中心内的服务器故障可以保证 RTO 与 RPO 均为零,而整个数据中心或同城网络故障也可以做到秒级 RTO=0、RPO=0。

关于 SequoiaDB 巨杉数据库

巨杉数据库专注新一代分布式数据库技术研发,自 2011 年成立以来,坚持从零开始打造分布式开源数据库引擎,是中国首家连续两年入选 Gartner 数据库报告的数据库厂商。

巨杉数据库的主要产品包括 SequoiaDB 分布式关系型数据库与 SequoiaCM 企业内容管理软件,企业级应用场景包括分布式在线交易、数据中台、分布式内容管理等。

目前巨杉数据库已在超过 50 家 500 强级别的大型商业银行核心生产业务上线,企业用户总数超过 1000 家。 

小白观察:开源永存

$
0
0

Big News

Open Source Eternal 开源永存

Linux Journal 发布了新的头条文章《Open Source is Eternal》,在文中,作者 Glyn Moody 历数了从 1994 年开始的 Linux Journal 、计算机周刊、互联网档案馆等一系列的服务的历史。并通过这些网站的历史变迁,衬托出开源永生。

不知不觉,Linux 已经来到这时间 28 年了,在过去的 28 年里,Linux 深刻的改变了我们的世界,Linux 推动了云计算、虚拟化等一系列技术的诞生。 Linux 永生!

Quick News

Mozilla 发布了可以在浏览器下运行 Python 数据科学的项目 Pyodide

除了运行 Python 以外,Pyodide 还可以很好的和 JavaScript 进行交互。Mozilla Hacks

Kubernetes 如何简化 Bet365 的软件部署

Bet365是世界上最大的网上投注平台。他们使用 Kuberntets 来进行软件的部署。ComputerWeekly

来自网上投注平台 K8s 实践

放弃 Windows 选择 Linux 的原因

精选的的系统和软件应用、高度可定制化的界面、更加轻量级以及更低可能的数据泄露。SlashGear

还需要更多好用的应用的支持。


每日安全资讯:专家发现漏洞后是否公示?新报告称已沦为黑客挥向用户的屠刀

$
0
0

是否公开发布安全漏洞(尤其是零日漏洞)的概念验证(PoC)代码历来是备受争议的话题。在代码公开之后往往会被威胁攻击者所利用,在数天乃至数小时内发起攻击,导致终端用户没有充足的时间来修复受影响的系统。而公开这些 PoC 代码的并非坏人或者其他独立来源,而是理论上更应该保护用户的白帽安全研究人员。

围绕着这个争议做法的话题已经持续多年时间,而信息安全领域的专家分成两派。其中一方认为安全研究人员不应该发布 PoC 代码,因为攻击者可以采用该代码并自动化攻击;而另一方认为 PoC 代码同时是测试大型网络和识别存在漏洞系统所必须的,允许IT部门成员模拟未来可能遭受到的攻击。

在上个月发布的“网络安全威胁观 2018 年第四季度”报告中,Positive Technologies 的安全专家再次触及了这场长期争论。

在这份报告中,Positive Technologies 的安全专家并没有给这个争论下判断,而是客观陈述了当前用户面临的安全问题。在漏洞发现的新闻曝光或者零日漏洞的 PoC 代码公开之后,在两种情况下黑客并没有为用户提供充足的时间来修复系统。

在这份季度威胁报告中,Positive Technologies 表示这种情况发生的频率越来越多。在报告中通过罗列了一系列安全事件,表明在PoC代码公开之后会立即被黑客所利用。例如在推特上有安全专家公开了 Windows 系统零日漏洞的 PoC 代码,随后 ESET 安全专家就观测到了此类恶意软件活动。例如在网络上关于中文 PHP 框架的漏洞公开之后,数百万网站立即遭到了攻击。

在接受外媒 ZDNet 采访时候,Positive Technologies 的安全弹性负责人 Leigh-Anne Galloway 表示:

“作为安全行业的一员,我们有责任倡导漏洞公示守则。但是并非所有人都遵循这个原则。同样并非所有安全供应商都知道或者了解。……通常公开披露的驱动因素是因为供应商没有认识到问题的严重性,也没有解决漏洞。或者安全研究人员可能已经尝试了所有其他途径来传达他们的发现。当然,危险的是犯罪分子可能使用此信息来攻击受害者。供应商要求提供证据证明该漏洞实际存在于他们的产品中,并且当研究人员向他们报告漏洞时可以利用这些漏洞。研究人员需要证明它是如何被利用的,为此创建了PoC代码。”

通过 CVSS 系统来标记该漏洞的危险程度。如果供应商向研究人员支付漏洞奖励框架内发现的漏洞,研究人员会从这项工作中赚钱,但供应商通常不会安排他们的 bug-bounty 计划,研究人员可以从中得到的所有内容都是专家社区的公开认可。通过在互联网上演示漏洞,展示操作和 PoC 代码的一个例子,研究人员得到了认可和尊重。

通常情况下,研究人员只有在他们通知供应商有关漏洞的足够长时间后才会发布漏洞利用代码,从而使产品开发人员有机会关闭漏洞并通知用户需要安装升级。但是,很多时候,供应商会推迟发布补丁和更新,有时会延迟六个月以上,因此,在发布补丁之后,[PoC] 漏洞的公示就会发生。

来源:cnBeta.COM

更多资讯

印度外包巨头遭入侵

印度 IT 外包巨头 Wipro 正在调查其 IT 系统遭到入侵,并被用于对其客户发动攻击的报道。Wipro 是印度第三大 IT 外包公司,匿名消息来源称该公司的系统被用于作为起跳点对其数十家客户的系统发动钓鱼式刺探。

来源: solidot.org

详情: http://t.cn/EX9pVxu 

微软向 Office 用户提供更多数据收集控制选项

近年来,微软对自家产品和服务引入了更加激进的数据收集政策,但这也惹恼了许多注重隐私的客户。无论是 Windows 10 操作系统,还是 Microsoft Office 生产力套件,均包含了获取遥测数据的功能。但长期以来,用户并不能对数据收集的选项作出太多的调整,更别提轻松的找到相关的设置选项了。不过最近,微软正在酝酿给 Office 用户带来一项新的变化。

来源: cnBeta.COM

详情: http://t.cn/EX9piRr 

卡巴斯基报告:70% 的黑客攻击事件瞄准 Office 漏洞

据美国科技媒体 ZDNet 援引卡巴斯基实验室报告称,黑客最喜欢攻击微软 Office 产品。 在安全分析师峰会Security Analyst Summit上,卡巴斯基表示,分析卡巴斯基产品侦测的攻击后发现,2018 年四季度有 70% 利用了Office 漏洞。而在2016年四季度,这一比例只有16%。

来源: 新浪科技

详情: http://t.cn/EX9pKCN 

个人数据保护迈出勇敢一步

新加坡亚洲新闻网 4 月 15 日文章,原题:中国加大对个人数据的保护  长期以来,中国政府部门、商业机构及普通消费者一直在努力应对新兴互联网技术对个人数据保护造成的影响。随着有关问题日益严重,中国正推进制定覆盖国内外企业的国家层面的法律,以保护消费者隐私。

来源: 环球时报

详情: http://t.cn/EX9ppe3 

(信息来源于网络,安华金和搜集整理)

破除对 AWS Fargate 的幻觉

$
0
0

我在 $work 建立了一个基于 Kubernetes 的平台已经快一年了,而且有点像 Kubernetes 的布道者了。真的,我认为这项技术太棒了。然而我并没有对它的运营和维护的困难程度抱过什么幻想。今年早些时候我读了这样的一篇文章,并对其中某些观点深以为然。如果我在一家规模较小的、有 10 到 15 个工程师的公司,假如有人建议管理和维护一批 Kubernetes 集群,那我会感到害怕的,因为它的运维开销太高了!

尽管我现在对 Kubernetes 的一切都很感兴趣,但我仍然对“无服务器Serverless”计算会消灭运维工程师的说法抱有好奇。这种好奇心主要来源于我希望在未来仍然能有一份有报酬的工作 —— 如果我们前景光明的未来不需要运维工程师,那我得明白到底是怎么回事。我已经在 Lamdba 和Google Cloud Functions 上做了一些实验,结果让我印象十分深刻,但我仍然坚信无服务器解决方案只是解决了一部分问题。

我关注 AWS Fargate 已经有一段时间了,这就是 $work 的开发人员所推崇为“无服务器计算”的东西 —— 主要是因为 Fargate,用它你就可以无需管理底层节点而运行你的 Docker 容器。我想看看它到底意味着什么,所以我开始尝试从头开始在 Fargate 上运行一个应用,看看是否可以成功。这里我对成功的定义是一个与“生产级”应用程序相近的东西,我想应该包含以下内容:

  • 一个在 Fargate 上运行的容器
  • 配置信息以环境变量的形式下推
  • “秘密信息” 不能是明文的
  • 位于负载均衡器之后
  • 有效的 SSL 证书的 TLS 通道

我以“基础设施即代码”的角度来开始整个任务,不遵循默认的 AWS 控制台向导,而是使用 terraform 来定义基础架构。这很可能让整个事情变得复杂,但我想确保任何部署都是可重现的,任何想要遵循此步骤的人都可发现我的结论。

上述所有标准通常都可以通过基于 Kubernetes 的平台使用一些外部的附加组件和插件来实现,所以我确实是以一种比较的心态来处理整个任务的,因为我要将它与我的常用工作流程进行比较。我的主要目标是看看Fargate 有多容易,特别是与 Kubernetes 相比时。结果让我感到非常惊讶。

AWS 是有开销的

我有一个干净的 AWS 账户,并决定从零到部署一个 webapp。与 AWS 中的其它基础设施一样,我必须首先使基本的基础设施正常工作起来,因此我需要先定义一个 VPC。

遵循最佳实践,因此我将这个 VPC 划分为跨可用区(AZ)的子网,一个公共子网和私有子网。这时我想到,只要这种设置基础设施的需求存在,我就能找到一份这种工作。AWS 是运维的这一概念一直让我感到愤怒。开发者社区中的许多人理所当然地认为在设置和定义一个设计良好的 AWS 账户和基础设施是不需要付出多少工作和努力的。而这种想当然甚至发生在开始谈论多帐户架构之前就有了——现在我仍然使用单一帐户,我已经必须定义好基础设施和传统的网络设备。

这里也值得记住,我已经做了很多次,所以我很清楚该做什么。我可以在我的帐户中使用默认的 VPC 以及预先提供的子网,我觉得很多刚开始的人也可以使用它。这大概花了我半个小时才运行起来,但我不禁想到,即使我想运行 lambda 函数,我仍然需要某种连接和网络。定义 NAT 网关和在 VPC 中路由根本不会让你觉得很“Serverless”,但要往下进行这就是必须要做的。

运行简单的容器

在我启动运行了基本的基础设施之后,现在我想让我的 Docker 容器运行起来。我开始翻阅 Fargate 文档并浏览 入门 文档,这些就马上就展现在了我面前:

等等,只是让我的容器运行就至少要有三个步骤?这完全不像我所想的,不过还是让我们开始吧。

任务定义

任务定义Task Definition”用来定义要运行的实际容器。我在这里遇到的问题是,任务定义这件事非常复杂。这里有很多选项都很简单,比如指定 Docker 镜像和内存限制,但我还必须定义一个网络模型以及我并不熟悉的其它各种选项。真需要这样吗?如果我完全没有 AWS 方面的知识就进入到这个过程里,那么在这个阶段我会感觉非常的不知所措。可以在 AWS 页面上找到这些 参数 的完整列表,这个列表很长。我知道我的容器需要一些环境变量,它需要暴露一个端口。所以我首先在一个神奇的 terraform 模块 的帮助下定义了这一点,这真的让这件事更容易了。如果没有这个模块,我就得手写 JSON 来定义我的容器定义。

首先我定义了一些环境变量:

container_environment_variables = [
    {
      name  = "USER"
      value = "${var.user}"
    },
    {
      name  = "PASSWORD"
      value = "${var.password}"
    }
]

然后我使用上面提及的模块组成了任务定义:

module "container_definition_app" {
  source  = "cloudposse/ecs-container-definition/aws"
  version = "v0.7.0"

  container_name  = "${var.name}"
  container_image = "${var.image}"

  container_cpu                = "${var.ecs_task_cpu}"
  container_memory             = "${var.ecs_task_memory}"
  container_memory_reservation = "${var.container_memory_reservation}"

  port_mappings = [
    {
      containerPort = "${var.app_port}"
      hostPort      = "${var.app_port}"
      protocol      = "tcp"
    },
  ]

  environment = "${local.container_environment_variables}"

}

在这一点上我非常困惑,我需要在这里定义很多配置才能运行,而这时什么都没有开始呢,但这是必要的 —— 运行 Docker 容器肯定需要了解一些容器配置的知识。我 之前写过 关于 Kubernetes 和配置管理的问题的文章,在这里似乎遇到了同样的问题。

接下来,我在上面的模块中定义了任务定义(幸好从我这里抽象出了所需的 JSON —— 如果我不得不手写JSON,我可能已经放弃了)。

当我定义模块参数时,我突然意识到我漏掉了一些东西。我需要一个 IAM 角色!好吧,让我来定义:

resource "aws_iam_role" "ecs_task_execution" {
  name = "${var.name}-ecs_task_execution"

  assume_role_policy = <<EOF
{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Effect": "Allow"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "ecs_task_execution" {
  count = "${length(var.policies_arn)}"

  role       = "${aws_iam_role.ecs_task_execution.id}"
  policy_arn = "${element(var.policies_arn, count.index)}"
}

这样做是有意义的,我需要在 Kubernetes 中定义一个 RBAC 策略,所以在这里我还未完全错失或获得任何东西。这时我开始觉得从 Kubernetes 的角度来看,这种感觉非常熟悉。

resource "aws_ecs_task_definition" "app" {
  family                   = "${var.name}"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = "${var.ecs_task_cpu}"
  memory                   = "${var.ecs_task_memory}"
  execution_role_arn       = "${aws_iam_role.ecs_task_execution.arn}"
  task_role_arn            = "${aws_iam_role.ecs_task_execution.arn}"

  container_definitions    = "${module.container_definition_app.json}"

}

现在,为了运行起来我已经写了很多行代码,我阅读了很多 ECS 文档,我所做的就是定义一个任务定义。我还没有让这个东西运行起来。在这一点上,我真的很困惑这个基于 Kubernetes 的平台到底增值了什么,但我继续前行。

服务

服务,一定程度上是将容器如何暴露给外部,另外是如何定义它拥有的副本数量。我的第一个想法是“啊!这就像一个 Kubernetes 服务!”我开始着手映射端口等。这是我第一次在 terraform 上跑:

resource "aws_ecs_service" "app" {
  name                               = "${var.name}"
  cluster                            = "${module.ecs.this_ecs_cluster_id}"
  task_definition                    = "${data.aws_ecs_task_definition.app.family}{max(aws_ecs_task_definition.app.revision, data.aws_ecs_task_definition.app.revision)}"
  desired_count                      = "${var.ecs_service_desired_count}"
  launch_type                        = "FARGATE"
  deployment_maximum_percent         = "${var.ecs_service_deployment_maximum_percent}"
  deployment_minimum_healthy_percent = "${var.ecs_service_deployment_minimum_healthy_percent}"

  network_configuration {
    subnets          = ["${values(local.private_subnets)}"]
    security_groups  = ["${module.app.this_security_group_id}"]
  }

}

当我必须定义允许访问所需端口的安全组时,我再次感到沮丧,当我这样做了并将其插入到网络配置中后,我就像被扇了一巴掌。

我还需要定义自己的负载均衡器?

什么?

当然不是吗?

负载均衡器从未远离

老实说,我很满意,我甚至不确定为什么。我已经习惯了 Kubernetes 的服务和 Ingress 对象,我一心认为用 Kubernetes 将我的应用程序放到网上是多么容易。当然,我们在 $work 花了几个月的时间建立一个平台,以便更轻松。我是 external-dnscert-manager 的重度用户,它们可以自动填充 Ingress 对象上的 DNS 条目并自动化 TLS 证书,我非常了解进行这些设置所需的工作,但老实说,我认为在 Fargate 上做这件事会更容易。我认识到 Fargate 并没有声称自己是“如何运行应用程序”这件事的全部和最终目的,它只是抽象出节点管理,但我一直被告知这比 Kubernetes 更加容易。我真的很惊讶。定义负载均衡器(即使你不想使用 Ingress 和 Ingress Controller)也是向 Kubernetes 部署服务的重要组成部分,我不得不在这里再次做同样的事情。这一切都让人觉得如此熟悉。

我现在意识到我需要:

  • 一个负载均衡器
  • 一个 TLS 证书
  • 一个 DNS 名字

所以我着手做了这些。我使用了一些流行的 terraform 模块,并做了这个:

# Define a wildcard cert for my app
module "acm" {
  source  = "terraform-aws-modules/acm/aws"
  version = "v1.1.0"

  create_certificate = true

  domain_name = "${var.route53_zone_name}"
  zone_id     = "${data.aws_route53_zone.this.id}"

  subject_alternative_names = [
    "*.${var.route53_zone_name}",
  ]


  tags = "${local.tags}"

}
# Define my loadbalancer
resource "aws_lb" "main" {
  name            = "${var.name}"
  subnets         = [ "${values(local.public_subnets)}" ]
  security_groups = ["${module.alb_https_sg.this_security_group_id}", "${module.alb_http_sg.this_security_group_id}"]
}

resource "aws_lb_target_group" "main" {
  name        = "${var.name}"
  port        = "${var.app_port}"
  protocol    = "HTTP"
  vpc_id      = "${local.vpc_id}"
  target_type = "ip"
  depends_on  = [ "aws_lb.main" ]
}

# Redirect all traffic from the ALB to the target group
resource "aws_lb_listener" "main" {
  load_balancer_arn = "${aws_lb.main.id}"
  port              = "80"
  protocol          = "HTTP"

  default_action {
    target_group_arn = "${aws_lb_target_group.main.id}"
    type             = "forward"
  }
}

resource "aws_lb_listener" "main-tls" {
  load_balancer_arn = "${aws_lb.main.id}"
  port              = "443"
  protocol          = "HTTPS"
  certificate_arn   = "${module.acm.this_acm_certificate_arn}"

  default_action {
    target_group_arn = "${aws_lb_target_group.main.id}"
    type             = "forward"
  }
}

我必须承认,我在这里搞砸了好几次。我不得不在 AWS 控制台中四处翻弄,以弄清楚我做错了什么。这当然不是一个“轻松”的过程,而且我之前已经做过很多次了。老实说,在这一点上,Kubernetes 看起来对我很有启发性,但我意识到这是因为我对它非常熟悉。幸运的是我能够使用托管的 Kubernetes 平台(预装了 external-dns 和 cert-manager),我真的很想知道我漏掉了 Fargate 什么增值的地方。它真的感觉不那么简单。

经过一番折腾,我现在有一个可以工作的 ECS 服务。包括服务在内的最终定义如下所示:

data "aws_ecs_task_definition" "app" {
  task_definition = "${var.name}"
  depends_on      = ["aws_ecs_task_definition.app"]
}

resource "aws_ecs_service" "app" {
  name                               = "${var.name}"
  cluster                            = "${module.ecs.this_ecs_cluster_id}"
  task_definition                    = "${data.aws_ecs_task_definition.app.family}{max(aws_ecs_task_definition.app.revision, data.aws_ecs_task_definition.app.revision)}"
  desired_count                      = "${var.ecs_service_desired_count}"
  launch_type                        = "FARGATE"
  deployment_maximum_percent         = "${var.ecs_service_deployment_maximum_percent}"
  deployment_minimum_healthy_percent = "${var.ecs_service_deployment_minimum_healthy_percent}"

  network_configuration {
    subnets          = ["${values(local.private_subnets)}"]
    security_groups  = ["${module.app_sg.this_security_group_id}"]
  }

  load_balancer {
    target_group_arn = "${aws_lb_target_group.main.id}"
    container_name   = "app"
    container_port   = "${var.app_port}"
  }

  depends_on = [
    "aws_lb_listener.main",
  ]

}

我觉得我已经接近完成了,但后来我记起了我只完成了最初的“入门”文档中所需的 3 个步骤中的 2 个,我仍然需要定义 ECS 群集。

集群

感谢 定义模块,定义要所有这些运行的集群实际上非常简单。

module "ecs" {
  source  = "terraform-aws-modules/ecs/aws"
  version = "v1.1.0"

  name = "${var.name}"
}

这里让我感到惊讶的是为什么我必须定义一个集群。作为一个相当熟悉 ECS 的人,你会觉得你需要一个集群,但我试图从一个必须经历这个过程的新人的角度来考虑这一点 —— 对我来说,Fargate 标榜自己“ Serverless”而你仍需要定义集群,这似乎很令人惊讶。当然这是一个小细节,但它确实盘旋在我的脑海里。

告诉我你的 Secret

在这个阶段,我很高兴我成功地运行了一些东西。然而,我的原始的成功标准缺少一些东西。如果我们回到任务定义那里,你会记得我的应用程序有一个存放密码的环境变量:

container_environment_variables = [
    {
      name  = "USER"
      value = "${var.user}"
    },
    {
      name  = "PASSWORD"
      value = "${var.password}"
    }
]

如果我在 AWS 控制台中查看我的任务定义,我的密码就在那里,明晃晃的明文。我希望不要这样,所以我开始尝试将其转化为其他东西,类似于 Kubernetes 的Secrets管理

AWS SSM

Fargate / ECS 执行secret 管理secret management部分的方式是使用 AWS SSM(此服务的全名是 AWS 系统管理器参数存储库 Systems Manager Parameter Store,但我不想使用这个名称,因为坦率地说这个名字太愚蠢了)。

AWS 文档很好的涵盖了这个内容,因此我开始将其转换为 terraform。

指定秘密信息

首先,你必须定义一个参数并为其命名。在 terraform 中,它看起来像这样:

resource "aws_ssm_parameter" "app_password" {
  name  = "${var.app_password_param_name}" # The name of the value in AWS SSM
  type  = "SecureString"
  value = "${var.app_password}" # The actual value of the password, like correct-horse-battery-stable
}

显然,这里的关键部分是 “SecureString” 类型。这会使用默认的 AWS KMS 密钥来加密数据,这对我来说并不是很直观。这比 Kubernetes 的 Secret 管理具有巨大优势,默认情况下,这些 Secret 在 etcd 中是不加密的。

然后我为 ECS 指定了另一个本地值映射,并将其作为 Secret 参数传递:

container_secrets = [
    {
      name      = "PASSWORD"
      valueFrom = "${var.app_password_param_name}"
    },
]

module "container_definition_app" {
  source  = "cloudposse/ecs-container-definition/aws"
  version = "v0.7.0"

  container_name  = "${var.name}"
  container_image = "${var.image}"

  container_cpu                = "${var.ecs_task_cpu}"
  container_memory             = "${var.ecs_task_memory}"
  container_memory_reservation = "${var.container_memory_reservation}"

  port_mappings = [
    {
      containerPort = "${var.app_port}"
      hostPort      = "${var.app_port}"
      protocol      = "tcp"
    },
  ]

  environment = "${local.container_environment_variables}"
  secrets     = "${local.container_secrets}"
出了个问题

此刻,我重新部署了我的任务定义,并且非常困惑。为什么任务没有正确拉起?当新的任务定义(版本 8)可用时,我一直在控制台中看到正在运行的应用程序仍在使用先前的任务定义(版本 7)。解决这件事花费的时间比我预期的要长,但是在控制台的事件屏幕上,我注意到了 IAM 错误。我错过了一个步骤,容器无法从 AWS SSM 中读取 Secret 信息,因为它没有正确的 IAM 权限。这是我第一次真正对整个这件事情感到沮丧。从用户体验的角度来看,这里的反馈非常糟糕。如果我没有发觉的话,我会认为一切都很好,因为仍然有一个任务正在运行,我的应用程序仍然可以通过正确的 URL 访问 —— 只不过是旧的配置而已。

在 Kubernetes 里,我会清楚地看到 pod 定义中的错误。Fargate 可以确保我的应用不会停止,这绝对是太棒了,但作为一名运维,我需要一些关于发生了什么的实际反馈。这真的不够好。我真的希望 Fargate 团队的人能够读到这篇文章,改善这种体验。

就这样了

到这里就结束了,我的应用程序正在运行,也符合我的所有标准。我确实意识到我做了一些改进,其中包括:

  • 定义一个 cloudwatch 日志组,这样我就可以正确地写日志了
  • 添加了一个 route53 托管区域,使整个事情从 DNS 角度更容易自动化
  • 修复并重新调整了 IAM 权限,这里太宽泛了

但老实说,现在我想反思一下这段经历。我写了一个关于我的经历的 推特会话,然后花了其余时间思考我在这里的真实感受。

代价

经过一夜的反思,我意识到无论你是使用 Fargate 还是 Kubernetes,这个过程都大致相同。最让我感到惊讶的是,尽管我经常听说 Fargate “更容易”,但我真的没有看到任何超过 Kubernetes 平台的好处。现在,如果你正在构建 Kubernetes 集群,我绝对可以看到这里的价值 —— 管理节点和控制面板只是不必要的开销,问题是 —— 基于 Kubernetes 的平台的大多数消费者都没有这样做。如果你很幸运能够使用 GKE,你几乎不需要考虑集群的管理,你可以使用单个 gcloud 命令来运行集群。我经常使用 Digital Ocean 的 Kubernetes 托管服务,我可以肯定地说它就像操作 Fargate 集群一样简单,实际上在某种程度上它更容易。

必须定义一些基础设施来运行你的容器就是此时的代价。谷歌本周可能刚刚使用他们的 Google Cloud Run 产品改变了游戏规则,但他们在这一领域的领先优势远远领先于其他所有人。

从这整个经历中,我可以肯定的说:大规模运行容器仍然很难。它需要思考,需要领域知识,需要运维和开发人员之间的协作。它还需要一个基础来构建 —— 任何基于 AWS 的操作都需要事先定义和运行一些基础架构。我对一些公司似乎渴望的 “NoOps” 概念非常感兴趣。我想如果你正在运行一个无状态应用程序,你可以把它全部放在一个 lambda 函数和一个 API 网关中,这可能不错,但我们是否真的适合在任何一种企业环境中这样做?我真的不这么认为。

公平比较

令我印象深刻的另一个现实是,技术 A 和技术 B 之间的比较通常不太公平,我经常在 AWS 上看到这一点。这种实际情况往往与 Jeff Barr 博客文章截然不同。如果你是一家足够小的公司,你可以使用 AWS 控制台在 AWS 中部署你的应用程序并接受所有默认值,这绝对更容易。但是,我不想使用默认值,因为默认值几乎是不适用于生产环境的。一旦你开始剥离掉云服务商服务的层面,你就会开始意识到最终你仍然是在运行软件 —— 它仍然需要设计良好、部署良好、运行良好。我相信 AWS 和 Kubernetes 以及所有其他云服务商的增值服务使得它更容易运行、设计和操作,但它绝对不是免费的。

Kubernetes 的争议

最后就是:如果你将 Kubernetes 纯粹视为一个容器编排工具,你可能会喜欢 Fargate。然而,随着我对 Kubernetes 越来越熟悉,我开始意识到它作为一种技术的重要性 —— 不仅因为它是一个伟大的容器编排工具,而且因为它的设计模式 —— 它是声明性的、API 驱动的平台。 在整个 Fargate 过程期间发生的一个简单的事情是,如果我删除这里某个东西,Fargate 不一定会为我重新创建它。自动缩放很不错,不需要管理服务器和操作系统的补丁及更新也很棒,但我觉得因为无法使用 Kubernetes 自我修复和 API 驱动模型而失去了很多。当然,Kubernetes 有一个学习曲线,但从这里的体验来看,Fargate 也是如此。

总结

尽管我在这个过程中遭遇了困惑,但我确实很喜欢这种体验。我仍然相信 Fargate 是一项出色的技术,AWS 团队对 ECS/Fargate 所做的工作确实非常出色。然而,我的观点是,这绝对不比 Kubernetes “更容易”,只是……难点不同。

在生产环境中运行容器时出现的问题大致相同。如果你从这篇文章中有所收获,它应该是这样的:不管你选择的哪种方式都有运维开销。不要相信你选择一些东西你的世界就变得更轻松。我个人的意见是:如果你有一个运维团队,而你的公司要为多个应用程序团队部署容器 —— 选择一种技术并围绕它构建流程和工具以使其更容易。

人们说的一点肯定没错,用点技巧可以更容易地使用某种技术。在这个阶段,谈到 Fargate,下面的漫画这总结了我的感受:


via: https://leebriggs.co.uk/blog/2019/04/13/the-fargate-illusion.html

作者:Lee Briggs 选题:lujun9972 译者:Bestony 校对:wxy, 临石(阿里云智能技术专家)

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 RadioDroid 流传输网络广播

$
0
0

通过简单的设置使用你家中的音响收听你最爱的网络电台。

最近网络媒体对 Google 的 Chromecast 音频设备的下架发出叹息。该设备在音频媒体界备受好评,因此我已经在考虑入手一个。基于 Chromecast 退场的消息,我决定在它们全部被打包扔进垃圾堆之前以一个合理价位买一个。

我在 MobileFun 上找到一个放进我的订单中。这个设备最终到货了。它被包在一个普普通通、简简单单的 Google 包装袋中,外面打印着非常简短的使用指南。

Google Chromecast 音频

我通过我的数模转换器的光纤 S/PDIF 连接接入到家庭音响,希望以此能提供最佳的音质。

安装过程并无纰漏,在五分钟后我就可以播放一些音乐了。我知道一些安卓应用支持 Chromecast,因此我决定用 Google Play Music 测试它。意料之中,它工作得不错,音乐效果听上去也相当好。然而作为一个具有开源精神的人,我决定看看我能找到什么开源播放器能兼容 Chromecast。

RadioDroid 的救赎

RadioDroid 安卓应用 满足条件。它是开源的,并且可从 GitHub、Google Play 以及 F-Droid 上获取。根据帮助文档,RadioDroid 从 Community Radio Browser 网页寻找播放流。因此我决定在我的手机上安装尝试一下。

RadioDroid

安装过程快速顺利,RadioDroid 打开展示当地电台十分迅速。你可以在这个屏幕截图的右上方附近看到 Chromecast 按钮(看上去像一个有着波阵面的长方形图标)。

我尝试了几个当地电台。这个应用可靠地在我手机喇叭上播放了音乐。但是我不得不摆弄 Chromecast 按钮来通过 Chromecast 把音乐传到流上。但是它确实可以做到流传输。

我决定找一下我喜爱的网络广播电台:法国马赛的 格雷诺耶广播电台。在 RadioDroid 上有许多找到电台的方法。其中一种是使用标签——“当地”、“最流行”等——就在电台列表上方。其中一个标签是国家,我找到法国,在其 1500 个电台中划来划去寻找格雷诺耶广播电台。另一种办法是使用屏幕上方的查询按钮;查询迅速找到了那家美妙的电台。我尝试了其它几次查询它们都返回了合理的信息。

回到“当地”标签,我在列表中翻来覆去,发现“当地”的定义似乎是“在同一个国家”。因此尽管西雅图、波特兰、旧金山、洛杉矶和朱诺比多伦多更靠近我的家,我并没有在“当地”标签中看到它们。然而通过使用查询功能,我可以发现所有名字中带有西雅图的电台。

“语言”标签使我找到所有用葡语(及葡语方言)播报的电台。我很快发现了另一个最爱的电台 91 Rock Curitiba

接着灵感来了,虽然现在是春天了,但又如何呢?让我们听一些圣诞音乐。意料之中,搜寻圣诞把我引到了 181.FM – Christmas Blender。不错,一两分钟的欣赏对我就够了。

因此总的来说,我推荐把 RadioDroid 和 Chromecast 的组合作为一种用家庭音响以合理价位播放网络电台的良好方式。

对于音乐方面……

最近我从 Blue Coast Music 商店里选了一个 Qua Continuum 创作的叫作 Continuum One 的有趣的氛围(甚至无节拍)音乐专辑。

Blue Coast 有许多可提供给开源音乐爱好者的。音乐可以无需通过那些奇怪的平台专用下载管理器下载(有时以物理形式)。它通常提供几种形式,包括 WAV、FLAC 和 DSD;WAV 和 FLAC 还提供不同的字长和比特率,包括 16/44.1、24/96 和 24/192,针对 DSD 则有 2.8、5.6 和 11.2 MHz。音乐是用优秀的仪器精心录制的。不幸的是,我并没有找到许多符合我口味的音乐,尽管我喜欢 Blue Coast 上能获取的几个艺术家,包括 Qua Continuum,Art Lande 以及 Alex De Grassi

Bandcamp 上,我挑选了 Emancipator’s BaralkuFramework’s Tides,两个都是我喜欢的。两位艺术家创作的音乐符合我的口味——电音但又(总体来说)不是舞蹈,它们的音乐旋律优美,副歌也很好听。有许多可以让开源音乐发烧友爱上 Bandcamp 的东西,比如买前试听整首歌的服务;没有垃圾软件下载器;与大量音乐家的合作;以及对 Creative Commons music 的支持。


via: https://opensource.com/article/19/4/radiodroid-internet-radio-player

作者:Chris Hermansen (Community Moderator) 选题:lujun9972 译者:tomjlw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 Dask 在 Python 中进行并行计算

$
0
0

Dask 库可以将 Python 计算扩展到多个核心甚至是多台机器。

关于 Python 性能的一个常见抱怨是全局解释器锁(GIL)。由于 GIL,同一时刻只能有一个线程执行 Python 字节码。因此,即使在现代的多核机器上,使用线程也不会加速计算。

但当你需要并行化到多核时,你不需要放弃使用 Python:Dask 库可以将计算扩展到多个内核甚至多个机器。某些设置可以在数千台机器上配置 Dask,每台机器都有多个内核。虽然存在扩展规模的限制,但一般达不到。

虽然 Dask 有许多内置的数组操作,但举一个非内置的例子,我们可以计算偏度

import numpy
import dask
from dask import array as darray

arr = dask.from_array(numpy.array(my_data), chunks=(1000,))
mean = darray.mean()
stddev = darray.std(arr)
unnormalized_moment = darry.mean(arr * arr * arr)
## See formula in wikipedia:
skewness = ((unnormalized_moment - (3 * mean * stddev ** 2) - mean ** 3) /
            stddev ** 3)

请注意,每个操作将根据需要使用尽可能多的内核。这将在所有核心上并行化执行,即使在计算数十亿个元素时也是如此。

当然,并不是我们所有的操作都可由这个库并行化,有时我们需要自己实现并行性。

为此,Dask 有一个“延迟”功能:

import dask

def is_palindrome(s):
    return s == s[::-1]

palindromes = [dask.delayed(is_palindrome)(s) for s in string_list]
total = dask.delayed(sum)(palindromes)
result = total.compute()

这将计算字符串是否是回文并返回回文的数量。

虽然 Dask 是为数据科学家创建的,但它绝不仅限于数据科学。每当我们需要在 Python 中并行化任务时,我们可以使用 Dask —— 无论有没有 GIL。


via: https://opensource.com/article/19/4/parallel-computation-python-dask

作者:Moshe Zadka (Community Moderator) 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

每日安全资讯:因不满支持论坛,安全人员连续公布三个 WordPress 插件漏洞

$
0
0

近日,有安全研究人员连续在 Plugin Vulnerabilities 平台上,对外公布了 3 个 WordPress 插件的 0day 漏洞,将 10 万个 WordPress 网站于陷于安全风险中。

相关研究人员在公布这些漏洞时,提到他们只是为了抗议 WordPress 支持论坛版(WordPress Support Forum)的版主行为。只要版主停止不当行为,他们会立即终止对外揭露 0day 漏洞。

被揭露漏洞的 3 个 WordPress 插件分别是 Social Warfare、Yuzo Related Posts 和 Yellow Pencil Visual Theme Customizer。其中,Warfare 是个社交网站分享插件,有超过 6 万个 WordPress 网站安装了该插件。研究人员在 3 周前公布了 Social Warfare 的安全漏洞,插件开发人员即时将它修补了。

另外两个插件就没这么幸运了。可用来自动找出相关文章的 Yuzo Related Posts 原本拥有 6 万个安装数量,可自定义主题的 Yellow Pencil Visual Theme Customizer 则有 3 万个安装数量,这两个插件都都惹来了攻击,目前已在 WordPress 插件商店下架,插件开发人员还建议用户应尽快将所安装的版本移除。

据了解,原本安全人员在公开漏洞前,会给开发者一定的缓冲时间。而这次漏洞曝光,研究人员故意不遵循责任揭露,直接对外公开这些 WordPress 插件漏洞。他们声称目的是为了抗议 WordPress 支持论坛版主的不当行为。这些版主明知有些热门插件含有漏洞,却未通知相关的开发人员。版主们甚至会联手隐瞒插件的安全问题,为了推广特定安全服务而阻拦用户得到其它帮助。

这次漏洞接连曝光事件,看起来很像是 Plugin Vulnerabilities 平台与 WordPress 支持论坛之间的恩怨而引发的。前者不仅是为 WordPress 打造,定位更是专门对抗 WordPress 插件漏洞的服务。但不论如何,原本应该是维护 WordPress 安全的事件,目前却已危及到了众多 WordPress 网站的安全。

来源:开源中国

更多资讯

阿桑奇被捕后 厄瓜多尔政府和机构网站遭到 4000 万次攻击

由于厄瓜多尔现任总统莫雷诺撤回了外交庇护,维基解密创始人朱利安·阿桑奇Julian Assange藏身厄瓜多尔驻英大使馆将近7年之后被抓。在接受法新社采访的时候, 厄瓜多资讯与通讯科技部副部长 Patricio Real 表示在阿桑奇遭到逮捕之后,已经受到了大规模针对该国的网络攻击。

来源: cnBeta.COM

详情: http://t.cn/EXYhKm8 

本月补丁星期二活动已修复卡巴斯基发现的严重零日漏洞

在 4 月 9 日发布的补丁星期二活动日中,微软修复了卡巴斯基发现的一个零日漏洞,如果被黑客控制可以获得控制系统的完整权限。该漏洞编号为 CVE-2019-0859,是已经被黑客利用的 Win32k 提权漏洞,微软已经确认新旧 Windows 系统均受到影响。Windows 10十月更新(Version 1809)同样受到影响。

来源: cnBeta.COM

详情: http://t.cn/EXYhOFM 

监控拍下欧洲犯罪分子用挖掘机盗取 ATM 机

原来为了现金,人们真的可以不顾一切、铤而走险。4 月 15 日晚,北爱尔兰再次发生一起开挖掘机砸抢 ATM 取款机的事件,从 3 月至今,这已经是第 9 起。凿出 ATM 机后,犯罪分子用反铲将其放到实现准备好的卡车上,然后逃离,将挖掘机丢弃在现场。当然,实际上,挖掘机也是偷来的。

来源: 快科技

详情: http://t.cn/EXYhQDE 

俄罗斯:9 个月内 FB 和 Twitter 必须遵守数据保护法

据路透社报道,俄罗斯通信监管机构“联邦通信、信息技术与大众传媒监督局”局长亚历山大·扎罗夫Alexander Zharov今日称,Twitter 和 Facebook 还有 9 个月的时间来遵守俄罗斯的数据保护法。

来源: 新浪科技

详情: http://t.cn/EXYhBoV 

(信息来源于网络,安华金和搜集整理)

Viewing all 9060 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>